Internationalization ==================== Translation ----------- Five registers its own translation service mockup with the Page Templates machinery and prevents any other product from also doing so. That means, Five always assumes control over ZPT i18n. When a certain domain has not been registered the Zope 3 way, Five's translation service will see that the utility lookup fails and use the next available fallback translation service. In case of no other translation service installed, that is just a dummy fallback. In case you have Localizer and PTS installed, it falls back to that. To register Zope 3 style translation domains, use the following ZCML statement:: where the 'i18n' prefix is bound to the http://namespaces.zope.org/i18n namespace identifier. The directory (in this case 'locales') should conform to the `standard gettext locale directory layout`__. .. __: http://www.gnu.org/software/gettext/manual/html_chapter/gettext_10.html#SEC148 Preferred languages and negotiation ----------------------------------- Fallback translation services such as PTS and Localizer have their own way of determining the user-preferred languages and negotiating that with the available languages in the respective domain. Zope 3 translation domains typically adapt the request to IUserPreferredLanguages to get a list of preferred languages; then they use the INegotiator utility to negotiate between the preferred and available languages. The goal of the sprint was to allow both fallback translation services (PTS, Localizer) and Zope 3 translation domains come to the same conclusion regarding which language should be chosen. The use case is that you have a site running Localizer or PTS and a bunch of "old" products using either one of those for translation. Now you have an additional, "new" Five-based product using Zope 3 translation domains. Most of the time, a page contains user messages from more than one domain, so you would all domains be translated to the same language. Adjusting behaviour to your environment --------------------------------------- The default behaviour for choosing languages in Five is the one of Zope 3: analyze the Accept-Language HTTP header and nothing more. In addition, Five providees ``IUserPreferredLanguages`` adapters for Localizer and PTS that choose languages the exact same way Localizer or PTS would. So, if you're using Five in a Localizer-environment, you need this in your product's ``overrides.zcml``:: If you're using PTS:: That way Zope 3 translation domains will always come to the same conclusion regarding the language as your original translation service would.