Skip to main content

Translating MyPaint

Documentation > Contributor Guides > Translation

Translating

Help MyPaint reach a more international audience by helping us translate it to your language. We use Weblate, a free web-based translation management system, to make it simpler for new translators to get started.

:globe_with_meridians: Get translating: log in to Weblate, and start translating MyPaint.
:rabbit: Go deeper: check out the list of issues labelled “translation”.

MyPaint supports 30 languages at the time of writing. This excludes different spellings of English. Not every language is complete, but you can help us improve.

Translating the text that gets displayed on the screen is now much easier than before. Anyone who uses MyPaint regularly and has good language skills can help:

In the run-up to a release, translations are frozen to give translators a chance to work on a consistent base text. The translation README details the complete workflow in detail: po/README.md.

We use GNU gettext for i18n, and the language used in the source code is US English.


Translator Crash Course

Basics

A source string, also called original string, is a piece of text that is used somewhere in the program. When a particular language is used, the source string is replaced with the corresponding translation string for that language, if that string exists. If the translation string does not exist, the source string is used instead.

Substitutions

There are a few things that should be left unchanged in your translations. For this section, we’ll use the ancient language of double-vowel flipped-grammar English to illustrate examples.

{brace_variables}

You will find many strings containing pairs of braces {} with characters in between. In the user interface, these are replaced with words, numbers or other character sequences. You can place them wherever you need to, and if necessary they can be used in multiple places, but they cannot be removed.

Example:
Source string: Remove the brush named {brush_name} from the list.
Translation: Froom the list, reemoovee thee bruush naameed {brush_name}.

%s, %d

These serve the same purpose as brace variables, acting as placeholders that will be replaced in the final output. They have a couple of disadvantages compared to the brace variables: they don’t communicate what the nature of the substitution is and more importantly, they cannot be reordered. For these reasons, these variables only occur in old strings, and only 20 out of 1265 (currently) strings make use of them (and at most once per string).

%s - This will be replaced by a string
%d - This will be replaced by an integer (like 12, -4, 2, not 0.34 or 45.23)

Example: Source string: Moved brush to category %s.
Translation: Too caateegooryy %s, bruush waas mooved.

General guidelines

  • Try to be consistent
    There is a lot of terminology in MyPaint, and some it can be hard to translate. Even if you don’t find the perfect word or phrase in your own language, try to make sure that you use that word or phrase consistently. Make use of the glossary in Weblate to try to make sure that other translators of your language are on the same page, and coordinate with them by using the translator comments if you feel uncertain.

  • Don’t limit yourself by the grammar of the source strings
    The purpose of text in the user interface is to be instructive and informative. What is important is that the text is understandable and correct in terms of what it describes, not that it follows the grammatical structure of the source string. If you don’t understand what the text actually describes (there are many strings where this is not made clear), please ask for clarification in a “Source string comment” in the Weblate interface.

  • Don’t rush
    Your translations do not have to be perfect the first time around. You can go back and change a translation at any point. Creating good translations is not easy!

Thus ends the Translator Crash Course


Crediting your work

There is a special source string translator-credits that is used to credit the translators of a particular language in the About MyPaint dialog. This string should not be translated literally, but instead simply contain a list of names, optionally with email addresses and years (or year ranges) indicating when they contributed to the translations. If you have contributed to the translation of a language, either in MyPaint or libmypaint, you may add yourself to this list (it is not required, but encouraged).

Each name should be on its own line, and each line should have one of the following structures:

  • name
  • name <email>
  • name <email>, year-of-contribution
  • name <email>, year-of-first-contribution-year-of-most-recent-contribution

Email can be omitted for the last two examples as well.

:information_source:
The message string should only contain a list of names. There should be no leading “Translators:” or such, the about dialog takes care of that for you.