Hi there, Here’s an interesting question from Patrick Turcotte about translations:

What would be the best way to contribute them to you?

It’s even more interesting since we have a release candidate coming, which means new features, and hence new labels to translate. So today I’m going to tell you how the translations/labels are managed in Nuxeo.

The first thing to know: Nuxeo provides only English and French translations. All others have been contributed by our community. They are available from two different packages: nuxeo-platform-lang (en and fr) and nuxeo-platform-lang-ext. Here’s the complete list:

  • English (United States)
  • English (United Kingdom)
  • Français
  • Deutsch
  • Italiano
  • Greek (Greece)
  • Español
  • Português
  • Português (Brasil)
  • Polski
  • Català
  • Galego
  • Basque
  • Serbian - Cyrillic
  • русский
  • العربية
  • 中文
  • 日本語
  • Tiếng Việt

Some are up to date, some not so much. So this is a call to action. If you’re reading the blog and want to help, now is the perfect time. What you need to do is as follows:

  • Open a Jira ticket telling us you would like to contribute translations.
  • Compile those translations under one file, for instance messages_fr_CA.properties
  • Send us a GitHub pull request mentioning your Jira ticket with your changes on the following project: https://github.com/nuxeo/nuxeo-platform-lang-ext

In the Nuxeo source code, you might see _fr_ and _en_ translations in various bundles, while other languages that are not maintained by us are in a single file. As Julien said, this is the purpose of nuxeo-platform-lang-ext. We found it easier for everyone to gather all labels of a language at one place.

Here’s an example of a contribution to help you understand how Nuxeo handles message files. Let’s say I want to contribute the Swedish translation. I need to create a file called messages_sv_SE.properties containing my translated labels. I will put it under nuxeo-platform-lang-ext/src/main/resources/web/nuxeo.war/WEB-INF/classes/. This file will be copied into the server WAR because of what we have in deployment-fragment.xml, which is also responsible for our new language declaration:

<?xml version="1.0"?> <fragment version="1"> <!-- The require tag ensure we'll be deployed after nuxeo-platform-lang because we need some contribution declared in its deployment-fragment. --> <require>org.nuxeo.ecm.platform.lang</require>

<!-- We are using the following template to generate the EndResult when the server is starting. Template: nuxeo.ear/OSGI-INF/templates/faces-config.xml End Result: nuxeo.ear/META-INF/faces-config.xml --> <extension target="faces-config#APPLICATION_LOCALE"> <locale-config> <supported-locale>ar</supported-locale> <supported-locale>ca</supported-locale> <supported-locale>cn</supported-locale> <supported-locale>de</supported-locale> <supported-locale>el_GR</supported-locale> <supported-locale>es</supported-locale> <supported-locale>eu</supported-locale> <supported-locale>gl</supported-locale> <supported-locale>it</supported-locale> <supported-locale>ja</supported-locale> <supported-locale>pl</supported-locale> <supported-locale>pt</supported-locale> <supported-locale>pt_BR</supported-locale> <supported-locale>ru</supported-locale> <supported-locale>sr</supported-locale> <!-- Here I'm declaring my new messages_sv_SE.properties file. --> <supported-locale>sv_SE</supported-locale> <supported-locale>vn</supported-locale> </locale-config> </extension>

<install> <!-- Unzip the contents of our nuxeo.war into the real nuxeo.war on the server --> <unzip from="${bundle.fileName}" to="/" prefix="web"> <include>web/nuxeo.war/**</include> </unzip> </install>

</fragment> 

I only need to add the supported locale tag because we already have some configuration in nuxeo-platform-lang deployment-fragment. That’s why it’s in the required tag. We want to be deployed after it.

This is a part of nuxeo-platform-lang deployment-fragment:

<extension target="faces-config#APPLICATION_LOCALE"> <locale-config> <default-locale>en</default-locale> <supported-locale>en_GB</supported-locale> <supported-locale>en_US</supported-locale> <supported-locale>fr</supported-locale> </locale-config> <message-bundle>messages</message-bundle> </extension> 

As you can see, we have the message-bundle tag that tells the server for files like messages_locale.properties.

And that’s all you need to know basically. Once we have our first release candidate, I will create a Jira ticket with the English reference file. See ya’ on Monday!