How to create custom packages for frontend community translations

Feb 20, 2015

The App Suite UI is currently translated into 24 languages. While this covers most of our needs, you might be missing your favourite language. We encourage our users to provide new translations via Pootle. Those translations will be integrated into the next official release. Since you might want to use your translation as soon as possible and may be even with an older version, here is an example how to create custom l10n packages for any language.

Example: Catalan language packages for 7.6.1

As an example, the goal is to add the po file from here to the current 7.6.1 release and to create a custom package on the public open buildservice installation hosted by openSUSE. It is also possible to create packages for Debian based distributions there.

Before you start, you need a local checkout of the App Suite UI code and a working deployment setup. You need to install git, nodejs (including npm), and optionally gettext-tools (should be easy, if you are on Linux or MacOS). You will also need the grunt CLI (command line interface), get it by running npm install -g grunt-cli. This is just a very brief version of how to get started developing frontend packages. You can find more detailed information on Oxpedia.

After that, clone the repository and install the local dependencies using npm:

Update the po file

Download the po file from and save it as ca_ES.po into the i18n/ directory.

Optionally, you can now update the po file with the latest references using these commands:


  • npm install grunt-exec
  • grunt create_pot msgmerge

After doing this, untranslated strings can still be translated in the po file. Just use your favourite translation tool to update the file.

Creating the source tarball

Now it’s time to create a source tarball for the custom package. For the sake of simplicity, just the JavaScript modules for the language are put into this file. It can be created like this:

  • grunt dist
  • grunt install:ca_ES --prefix open-xchange-appsuite-custom-l10n-ca-es-7.6.1
  • tar czf open-xchange-appsuite-custom-l10n-ca-es_7.6.1.orig.tar.gz open-xchange-appsuite-custom-l10n-ca-es-7.6.1
Creating a repository on

This repository can serve as a base to do the packaging. Basically it contains the tar.gz file just created and packaging information. You can branch this repository and adjust it to your needs.

Once you managed to let OBS successfully build your packages, they will eventually be uploaded to and can be integrated as a custom source for packages. This page will guide you through the setup. Of course the exact links might vary, once you change the packaging information to fit your needs.


This article should have helped you to get started porting the translation for your favourite language that has been done for the latest development version in Pootle back to an earlier version, which you might have installed. This allows for faster deployment of the language, instead of waiting for officially released packages. It is also possible to use this to update translations independently of a release cycle.

Feel free to add feedback in the comments section or fork the project on and send back change requests.

About the author

Malte Timmermann

Malte Timmermann

Head of Development OX Hamburg


Related Articles

OX App Suite Server Installation for Dummies

Ever wanted to install your own OX App Suite Server, but too lazy to configure a Linux system with all OX App Suite system...

Malte Timmermann 05/2/21