The Blog

Posted by christian on Thursday, May 15, 2008 · No comments

Being a web application, ffindr is available to everybody all over the world, all the time. This sounds sweet, but it's not enough to really address oneself to everybody. Although the Frisbee world is pretty Anglophone, it's not nice to exclude those who don't speak English. And since this application wants to be nice to everybody (i.e. nice to watch, nice to use, nice to have... just nice), ffindr is available in several languages.

Currently we have 5 languages: English, German, French, Russian and Spanish (ordered by completed translations) Big thanks at this point to

Work on two more languages has started (Polish and Italian), and why not having ffindr in your language? I invite you to join the team (either as a translator of whole parts of ffindr, or as a corrector that checks existing work), it's not about endless efforts of only a few but, about a small contribution of many that will make the difference. Thanks to the community, ffindr became what it is: a huge source of Frisbee event information. And there's still a long way to go/continue.

How it works

If you don't want to get lost in translation, just read on to see that it's pretty straight forward to translate ffindr.

Basically there are two different things to translate: firstly the interface (like all the buttons, labels, descriptions) and second the static pages (like the about, spread the word and all the other pages available in the footer). Thanks to a clean separation of content and code, there's one file that holds all the interface translation (a XML file called messages.[COUNTRY_CODE].xml), and another for each static page (a simple text file called about_[COUNTRY_CODE].txt for instance).

The first, the country specific XML file, is composed of a bunch of source / target pairs. Only the value inside the target brackets has to be translated, the rest can be ignored.

Example of interface file

An example taken from messages.en.xml of the current ffindr homepage in English...

<trans-unit>
<source>event/welcomeSuccess.php-teaser1-body1</source>
<target>discover frisbee events world-wide</target>
</trans-unit>

...looks in the Spanish file messages.es.xml like this:

<trans-unit>
<source>event/welcomeSuccess.php-teaser1-body1</source>
<target>descubrir eventos de Frisbee a nivel mundial</target>
</trans-unit>

Since the content of this interface XML file is quite basic, it's the number of targets to translate -- currently 420 messages -- that makes it quite a task. Fortunately many of the short messages repeat themselves, so it's actually not this much.

Example of static page

The second part of translating ffindr concerns the static pages filled with whole sentences and paragraphs. An example from the help page in English...

## 2. <a name="why_ffindr"></a>Why should I use ffindr?
ffindr is geared towards players and organisers alike.

...will look in Russian as follows:

## 2. <a name="why_ffindr"></a>Зачем пользоваться ffindr?</h2> ffindr полезен как игрокам так и организаторам.

All the text inside the text files has been translated while the basic formatting (HTML tags, Markdown formatting) is left untouched. There's nothing more to add I guess, it's all about translating the whole text of each of the static page files into the new language.

Download the source files

Each of the following language packages contains the interface XML (messages.xml) plus four static text files (about.txt for about.txt, help.txt for help, spreadTheWord.txt for spread the word, and contact.txt for contact).

Just download the zipped packages to...

  • get an idea of what to translate before starting
  • correct spelling errors or complicated, meaningless sentences
  • get started with the translation of ffindr into your language
  • steal a set of translated interface messages for other use

Hopefully with this little tutorial, you should now be well on your way to unlocking the mystery of ffindr's internationalisation, I mean the i18n..

Comments are closed.

Recent blog postsRSS Feed for blog posts

Blog archive