Translate the OS

From SailfishOS Documentation
Revision as of 12:57, 17 October 2017 by Sleleiva (Talk | contribs) (Style)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Help making Sailfish OS word-perfect by using our Community translation tool!

Log in

We're certain you can't wait to get your hands dirty, and go ahead by logging into using your Jolla Account credentials.

If for any reason login is unsuccessful, please logout/login to before raising an issue on TJC.

Please do not rush to use the tool before you have read through the rest of this document.

Stay tuned

The most important in this agile world of localisation is to keep yourself up-to-date.

We strongly suggest to subscribe to the translate tag on the TJC.

Look out for our informative posts mainly saying what's happening, or what will happen soon (e.g. new project added, new strings added, translation round will start on ... and last until ..., etc), they will be accompanied with announcement and official tags.

As of 2016-05-06, TJC digest email alerts are not working, so you will need to subscribe for instant ones (we promise not to spam with official announcements).

Be heard

Feel free to use TJC to ask questions about the best ways to translate, where in the UI a particular strings shows up (context), discuss with your compatriots, and tag such questions with translate.

If it is language specific, add apropriate tag. For example: to talk about some particular wording in Chinese, tag with chinese, but if it's region-specific, tag with chinese-hong-kong or chinese-china (likewise norwegian-bokmal without the "å")

If you plan to make a mass-translation of a certain term, like renaming all occurrences of "Périphériques" to "Appareil" in French, please by all means first create a TJC question about this first, to discuss with your fellow language speakers and get such mass-change approved!

Requesting a new language

Any newly added languages will be community-driven -- made of contributions and downloadable separately as language packs.

To join this vibrant community, have a look into this TJC post.

Three essential steps

...of how to get your favourite language off the ground quicker and make life for other translators easy:

Tone of voice

Sailfish OS Tone is informative. We want to keep the users on top of all UX aspects, whether they are design or technical.

Sailfish OS Tone is honest. Be concise yet sincere.

Sailfish OS Tone is unambiguous. Without this we cannot be informative and honest. We need to make sure the message cannot be misinterpreted.

Sailfish OS Tone is jolly. We are on a voyage, sailing the seas with our captain. Keep this in mind and reflect in the UI. Translations shouldn't be dead serious... So long as they are correct and not misleading.

Sailfish OS Tone is young. We target to interact with the users and talk with them, not to them. We want to use the same tone that is used in everyday life.

Why we define our tone

Consistently formatted and formulated messaging gives readers the possibility to concentrate to the message said. It identifies the speaker. It involves the readers in different ways (calms them, is informative, involves user by strong identifiable style…) The tone of voice targets to differentiate us. It shows our values and it shows our personality. Good article on the matter:


Style guides are important to keep translations nice and consistent. Below in the articles you'll find instructions for a running system translations (UI strings), as well as technical writing for documents such as user manuals (those are not being localised in our Pootle at the moment, but good to have for the future).

Contribute a guide for your language using our Language Style - HOWTO!


The world of IT is filled with technical terms, hence we keep a glossary handy to not get lost in translation. We called that project "Terminology" in Pootle, not associated with any particular application, and contains useful terms for each language.

  • If it's a newly added language, complete its Terminology project first and foremost. Pootle automatically fetches words from there when translating all other projects!
  • Term's translation may also describe different variations, e.g. email (noun), Email (app name)
  • Proposing new terms can be done via (tagging the question with translate and term). Please supply all needed information and description, explaining purpose and reasoning
  • To improve a term, ensure you have familiarised yourself with the Translation Tool guide, then suggest a better translation. Only in the Terminology project you can vote for existing term suggestions by pressing the star symbol
  • Do not perform mass-renames throughout all other projects, without having a conclusive discussion on TJC with people speaking your language, and without getting the term changed first.

Translation tool

Please first familiarise with Tone of Voice, Style guidelines, and the Terminology project before doing any translation work.

Getting started

Main view presents available apps (called projects) and languages


The quickest way to start contributing is:

  1. click on a language you'll be translating to
  2. choose a project
  3. click on a number (of words) in the "Need Translation" column

You'll be taken to the first untranslated entry in the Translate view

Upon your very first login you will notice at most three source languages above the input box: English (United Kingdom), Content instructions, and "English". The latter (non-bold one) is Engineering English, and should never be taken as reference to translation, because it may not always follow correct terminology, spelling, or grammar. Look back at EE only when you need an additional "technical" clarification as last resort.

Properly localised strings, with correct terminology, are in the "English (United Kingdom)" language, along with "Content instructions" meta-language for further explanations where applicable.

Feel free to input your translation and click "Suggest" (Ctrl+Enter as shortcut).

It will now appear as a suggestion, and eventually will be approved and submitted by your language Coordinator (for more on Translator Roles click here)

To quickly browse between entries, you can press Ctrl+Up/Down. To change which entries can be edited, adjust the "Filter" at the bottom of your browser.

To add other source languages we shall go to the profile settings: click on your username in the top-right corner: "My Account" view contains the needed setting "Alternative Source Languages"


Add any similar languages that might help translating (e.g. for Danish we can add Swedish). Click "Save".

Handling plurals

Everyone prefers correct plural forms, avoiding cases like "You have 1 new messages", or the need to add "You have 1 new message(s)". Some languages have more than one plural, e.g. in Lithuanian to accommodate all cases, one would pollute their translations with "Turite 1 naują/-as/-ų žinutę/-es/-čių".

Qt and Pootle work together to solve this, so all strings which contain a number token %n, will request as many translations as language has plurals.

For example, the People app contains the string in English (Engineering English): "%n contact(s) already available."

To translate into "English (United Kingdom)", there would be two input boxes presented. If you hover each box, you'll see "Plural Form 0" and "Plural Form 1". By evaluating the plural equation for a given language -- expression (n != 1) in this case, we see that the singular form (when n equals 1) is false, which in computers is represented by number 0, and true for all other cases (yields as number 1). That number corresponds to the plural form that will be used.

Therefore we translate as follows:

  • Plural Form 0: %n contact already available
  • Plural Form 1: %n contacts already available

Other languages may have more complex plural equations, with ternary operators (? :), evaluating to a plural form number in each clause.

Don't be alarmed if you see a "pluralised" translation string which does not contain a number token %n. That is a completely valid case when the mentioning of actual number is irrelevant.

Which brings us to a point that you should always fill out all requested plural forms, even if some of them become equal in certain contexts. A quick example in Lithuanian:

You have %n new message(s):

  • Plural Form 0: Turite %n naują žinutę
  • Plural Form 1: Turite %n naujas žinutes
  • Plural Form 2: Turite %n naujų žinučių

Whereas when number of messages is not important: You have new message(s):

  • Plural Form 0: Turite naują žinutę
  • Plural Form 1: Turite naujų žinučių
  • Plural Form 2: Turite naujų žinučių

Translation round schedule

When it's time to make the first Release Candidate during Sailfish OS update lifecycle, all localisation strings (written by developers in Engineering English) are frozen and none of the new ones should be introduced thereafter. This usually happens on a Friday, and that's where we, the translators, come in:

  1. Fri: Engineering English localisation strings deadline for developers
  2. Mon: Strings translated to English (United Kingdom) and Content Instructions are pushed out to Community Pootle
  3. Tue-Thu: Everyone gets busy translating to other system languages
  4. Fri: All accepted translations get pulled from Community Pootle
  5. Mon: Validation round: test if new strings fit nicely in system apps on different devices (sadly community can't help at this point, as they don't have access to devel images)
  6. Wed: Bugfixes from the validation round
  7. Thu: Final snapshot of translation strings enter the RC (Release Candidate) image

RC the enters beta testing stage and eventually becomes an EA, you can guess the rest ;)

Days of week are rough deadlines: sometimes translations and/or validations will happen quicker, sometimes will take some days extra, but will always start on a Friday, and we'll all do our best to adhere to the rest of this schedule.

Community Pootle will be available 24/7 even after accepting final string state, so any typos or too-long-strings can be corrected during the month and land in subsequent update (just like you used to attentively report them in TJC in the past)

The routine above applies to the set of system languages only. Once we roll out support for extra community languages, translating to those other languages will be more relaxed.

Translator roles (groups)

Default group

Upon your very first login, you will be assigned to the default group, where you will be able to only suggest translations, They will need to be accepted and submitted as actual translation by your language Coordinator.


Translation coordinators are language maintainers. Their powers and duties are:

  • able to accept suggestions made by anyone else
  • comment existing suggestions, if clarification is needed
  • able to translate on their own (immediately submitting their suggestions)
  • raise TJC tickets if inconsistent/incorrect suggestions keep coming in
  • accept Terminology suggestions to further ensure consistency
  • they are welcomed to show initiative in writing a style guide

Regarding those TJC tickets: when any translation disputes arise , e.g. one translator keeps suggesting sentences in one grammatical/verbal form, one -- in another, and in this way nearly every string gets two suggestions. Coordinator raises a TJC question to clarify such cases. Email me if you need to know the TJC user handle of a pootle username, to @nick ping them on TJC easier.

A member of a default group can be promoted to become a coordinator on meritocracy basis (the more translations get accepted, the higher are the chances for that person to eventually start coordinating contributions made by others). We'll approach such active members ourselves, as well as they get nominated by existing coordinators or from the praises by other contributors.

Community-driven languages must have a coordinator, otherwise they do not qualify to be added to the tool (there's no-one to accept the suggestions! :) )

To volunteer yourself as the coordinator, write to the TJC post of language elections, briefly describe your motives as the suitable linguist under your chosen language. You can mention your previous work or contributions (a perfect example being our great Czech/Slovak community translators). It is also possible to have multiple coordinators.