status-desktop/scripts/translationScripts
Sale Djenic 1acbc76cc9 chore(@desktop/general): run translation script
All untranslated properties are translated now using translation scripts.
2021-07-19 12:27:45 -04:00
..
status-react-translations feat: add translation script that transforms qstr to qstrid 2020-07-08 12:37:41 -04:00
README.md fix code review comments 2020-07-17 11:55:01 -04:00
package-lock.json chore(@desktop/general): run translation script 2021-07-19 12:27:45 -04:00
package.json fix code review comments 2020-07-17 11:55:01 -04:00
qstrConverter.js chore: change translations to only translate complete languages 2021-02-18 15:23:58 -05:00
utils.js fix code review comments 2020-07-17 11:55:01 -04:00
xmlTranslator.js fix(scripts): i18n script shouldn't break because of multi contexts 2020-09-14 14:39:27 -04:00

README.md

Translation scripts

These scripts are used to translate the app automatically by reusing the existing translation found in the Status-React repo: https://github.com/status-im/status-react/tree/develop/translations

TLDR

  1. Copy the translation files from https://github.com/status-im/status-react/tree/develop/translations to /nim-status-client/scripts/translationScripts/status-react-translations
  2. cd scripts/translationScripts
  3. Run npm install
  4. Run node qstrConverter.js
  5. Open another terminal and cd ui
  6. In that second terminal, run lupdate nim-status-client.pro
  7. Back in the first terminal, run node xmlTranslator.js
  8. [Optional] Manually translate the remaining strings in QT Linguist
  9. In the second terminal, run lrelease -idbased i18n/*.ts in the ui/ directory

🎉 You're files are converted to use qsTrId and the translation files are updated.

Changing strings to IDs

One major step is to change the literal strings we use in the code base to the IDs that are used in the translation JSON files.

For example, in our QML files, we would use qsTr("Public chat"), but in Status-React, that string in only represented as public-chat.

Thankfully, QML supports using string IDs instead of literral strings. The trick is to use qsTrId instead of qsTr and then use a comment to show the context/original string.

The script to do the change from qsTr to qsTrId is qstrConverter.js.

First, copy the translation files from https://github.com/status-im/status-react/tree/develop/translations to /nim-status-client/scripts/translationScripts/status-react-translations. Those are gitignored to show that we do not maintain those ourselves.

Then, run node qstrConverter.js in the translationScripts/ directory.

Updating translation files

Updating the QML translation files is then very easy, as it comes with QT directly. It will scan all files in the projects (those listed in the SOURCE section of the .pro file) and then add or modify them in the XML-like .ts files.

Just run lupdate nim-status-client.pro in the ui/ directory.

Run XML translator script

Most translations are already done in Status-React. To add those translations to the right .ts file, run node xmlTranslator.js in the translationScripts/ directory.

It will check all the TS files and get the good translation from the JSON file and set the translation as done.

Some translations will not be done, check the next section to know how to translate.

Manually translate remaining strings

Since not all strings used in the desktop app are also used in Status-React, the remaining will need to be translated manually.

If the strings are not translated, it is not the end of the world, the English strings will be shown instead.

To do so, you can use QT Linguist to help with the process. Check here to see the Linguist docs: https://doc.qt.io/qt-5/linguist-translators.html

To open a TS file in QT Linguist, either open the software and use the Open feature it has, or go in the ui/i18n directory and run linguist nameOfFile.ts

Generating binary translation files

To have the final translation files that will be used by the app, just run lrelease -idbased i18n/*.ts in the ui/ directory