Thanks for your interest in translating Fritzing into another language. So far we have Fritzing available in English, German, Spanish, Italian, French, European Portuguese, Dutch, Chinese (Simplified), Chinese (Traditional), Japanese, and Russian.
Here are the steps to complete a translation:
1. Contact us and let us know which language you’d like to work on.
Send us a message letting us know that you're interested in translating Fritzing into another language. We will then post a translation file for you to work with, which will be called something like “fritzing_your_language.ts”. This is an xml-based file that holds all the English-language words and phrases in Fritzing.
2. Download "Linguist"
Download a program called Linguist which is made by the people who make Qt (our development environment). All you need for the translation task is the Linguist tool. You can also download the complete Qt toolkit, but it's only required if you want to do development work on Fritzing. Using Linguist, you translate one line at a time and make a check mark when a line is ready.
3. Download Fritzing source code (optional)
Although it is not strictly necessary, it is very helpful to have the source code. This is because the ts file only contains the phrases to be translated, and if you have the source code, you can see more of the context surrounding each phrase. Each entry in the ts file points back to the line of source code from which it originates.
There are a couple of ways to download the source files. If you are familiar with git, this is the most straightforward approach, and the files will be the most up-to-date. You can find the repository at https://github.com/fritzing/fritzing-app. You will find your ts file in the translations subfolder.
If you're not familiar with git you can download the Source package from the Fritzing downloads page. Once you have downloaded and extracted the files, you will find your ts file in the translations subfolder. Note that the source tarball isn't updated as often as the git repository.
4. Translate Fritzing texts
Within Linguist/QT, use the file/open menu item to load “fritzing_your_language.ts”. On the left side of the application, you’ll see a list of files. Clicking any of the files here shows all the items that need to be translated in that file. You can select those items 1-by-1--the one that's currently selected is the one you will be translating, and that's what the text entry area, in the center right, is for.
Some Helpful Notes:
- You DON'T have to translate ALL texts. It is ok to just do the major texts and leave the others untranslated. They will simply appear in English.
- Note the three tabs on the bottom--"warnings", "source code", "phrases and guesses".
- "Source code" gives you context of where the text appears in the source code, so you can figure out the intent of the text. The source code only appears if you have downloaded it (see Step 3, above).
- "Phrases and guesses" tries to match what you're working on with examples you've already completed--double-clicking an example will put it into the text entry area and save a lot of typing.
- "Warnings" lets you know about missed punctuation, and the like.
- Another really handy shortcut which saves a lot of typing is to use control (command) b--it copies the currently selected untranslated text into the text entry area.
5. What do you mean "%1%2%3"
No these aren't curses. They represent values to be filled in at runtime. Languages have different ways to order words in phrases, so the order of these values can be changed accordingly. Here's an explanation (from the programmer's point-of-view) from Qt. The phrase you would see in Linguist is the one inside the "tr()":
void FileCopier::showProgress(int done, int total, const QString ¤tFile){ label.setText(tr("%1 of %2 files copied.\nCopying: %3").arg(done).arg(total).arg(currentFile)); }
In some languages the order of arguments may need to change, and this can easily be achieved by changing the order of the % arguments. For example:
QString s1 = "%1 of %2 files copied. Copying: %3"; // the phrase in quotes is what you would see in Qt Linguist QString s2 = "Kopierer nu %3. Av totalt %2 filer er %1 kopiert."; // the phrase in quotes is how you would translate it to Norwegian in Qt Linguist qDebug() << s1.arg(5).arg(10).arg("somefile.txt"); qDebug() << s2.arg(5).arg(10).arg("somefile.txt");
produces the correct output in English and Norwegian:
5 of 10 files copied. Copying: somefile.txt Kopierer nu somefile.txt. Av totalt 10 filer er 5 kopiert.
There's also a special parameter form for plurals: %n. Qt gives a good explanation here. More explanation of the translation process can be found in the Qt Linguist manual.
6. Post your translated file
Once you're ready to upload the “fritzing_your_language.ts” file, create a pull-request on github or email it as an attachment to [email protected].
A couple of things to note. First, it is not necessary to translate all of Fritzing at one go. You are translating one line at a time, so any translations you make will be added. Therefore, you can post the translation file even though it isn't fully translated. Second, translations are not lost as Fritzing changes. As long as the text of a given line stays the same between Fritzing versions (which is true in the majority of cases), the translation of that line is preserved in future versions.
7. Translation is an ongoing process
As Fritzing is being developed, new prompts, new dialogs, new menu items, etc., are added to the program. So after the initial translation task is done, consider returning to fritzing_your_language.ts every so often, and updating the new translations in the file (the old work isn't lost).
Let us know if you run into any difficulties and thanks very much for helping out.
Note for Developers
How to update existing and create new translation files:
- add the new locale to
fritzing/translations/translations.pri
- run
lupdate phoenix.pro
to generate/update the .ts files - commit and send the link to the raw file (e.g.
https://github.com/fritzing/fritzing-app/raw/master/translations/fritzing_de.ts
) to the translator - when the translation is done:
- create and commit the qm file
- add the language to the preferences list in
translatorlistmodel.cpp