Translating Kirby

When I launched the Kirby Panel in 2012 I started with two languages: English and German. English, to make it available for as many users as possible right from the beginning and German, because, well, I'm German.

I never expected it to be easy to find additional translators for more languages and yet I hoped to solve this problem somehow. It's one obstacle to use a new software with an unfamiliar interface, but it's a much higher obstacle to use such a software in a language you are not completely comfortable with.

Translations can help users to feel at home faster and make their lives instantly easier. It's a matter of accessibility to translate your software into as many languages as possible.

I was extremely surprised and happy to see how fast more and more contributors started to translate the Panel interface after I launched it. Right now we have translations in 24 different languages, which is amazing.

But translating the Panel has always been a very technical task. Translations for the Panel have so far been stored in PHP arrays and you could only contribute by creating a pull request on Github.

Even for developers this has been tricky, because whenever we made changes to the core and introduced new translatable strings, there was no way to notify translators. There was also no way to instantly show what has changed and which translations are missing.

Introducing Transifex

That's why I wrote a tweet and forum post about how we can make the lives of translators easier the other day. One service that kept on popping up in various suggestions was Transifex. Their platform is specialized to solve all issues around collaborative interface translations. Their service is being used by companies like SoundCloud, Waze or CloudFlare.


After about an hour of giving it a try I knew that this was the right tool for us to move forward. I started porting all language files to Transifex and got everything up and running this morning.

From now on we will do all translation work directly on Transifex. Everyone who wants to become a translator can join there:

The biggest benefits for translators are probably the great interface, instant suggestions, translation memory and being able to work directly on missing translations without digging through a huge PHP array.

For us updating the language files has also become so much easier. Instead of accepting pull requests over and over again, we can now simply pull in all the latest changes from translators with Transifex' command line utility:

tx pull

This will automatically fetch all updates and store them in the translations folder of the Panel, ready to be comitted and released.

Join the team!

I can only hope that this will be the start for a great new journey and that we will see many new languages soon. Please feel free to join the team!

See you on Transifex :)

This is a companion discussion topic for the original entry at

EDIT: Well it seems a decision was taken. The duplicate languages were removed a couple of seconds before I posted this. Haha :grinning:

There’s seems to be an issue with duplicated languages right now. For example French (fr) is completely translated, but there’s also a translation for French with locale of France (fr_FR).

Is it really necessary to have this distinction? I understand for some certain languages spelling and vocabulary differs between dialects (i.e. en_GB, en_US, en_CA for British, American and Canadian English respectively).

But in the example of French (fr_FR), besides accent it doesn’t differ much from other French locales like Canadian French (fr_CA).

What would be best?

The onboarding of new translators in Transifex is a bit weird. Transifex automatically sends me requests for new languages for the translator’s user agent string or something like that. I made a mistake to accept the first requests for those new languages and cleaned it up now.

Besides some differences between commonly used words in Canada and France (like “courriel” in Canada vs “email” more widely used in France), there are different translation requirements for government sites. I think it’s the main reason why a lot of projects have separate fr_CA and fr_FR translations.

Yeah, “email” in Canada would be considered an “anglicisme”. A lot of common english words that are used in France aren’t used in Canada. If there isn’t an good french word for it, l’Office québécois de la langue française create neologisms to have something more french sounding. (Example: plugin = plugiciel; spam, courriel indésirable = pourriel)

…and then of course, there is the issue of French numbers - i.e., septante, huitante, nonante (used in most of the francophone world) and their bizarre French counterparts, used in France.

fr_FR is definitely different to fr_CA, fr_BE or fr_CZ.

Feel free to start a French/Canadian translation. I dismissed it the first time because of the weird auto notifications, but as long as I know from you that a new translation is necessary I will definitely be happy to add it.

Hey guys, few days ago I requested to join Czech panel translation team (logged as Florian Karsten), do you have any requirements for new translators or should I just wait for your confirmation? There are some 2.3+ features that are not translated yet. Thanks!

I just accepted your join request on Transifex. If you have any questions about specific strings or about translating in general, feel free to contact me.