taler-docs

Documentation for GNU Taler components, APIs and protocols
Log | Files | Refs | README | LICENSE

commit 6373415dd2ee5ed3aca6a297bcd44f0bed5fd701
parent e716a555200bf7d51c7827902be632f7aeafd1b5
Author: Sebastian <sebasjm@gmail.com>
Date:   Mon,  8 Jul 2024 11:37:27 -0300

fix #8873

Diffstat:
Adesign-documents/056-weblate-integration.rst | 169+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Mdesign-documents/index.rst | 1+
2 files changed, 170 insertions(+), 0 deletions(-)

diff --git a/design-documents/056-weblate-integration.rst b/design-documents/056-weblate-integration.rst @@ -0,0 +1,169 @@ +DD 56: Weblate integration +########################## + +Summary +======= + +We are using `Weblate <https://weblate.taler.net/>`__ to translate string in all +software components. Weblate should be able to read which strings needs to be +translated and return a translated version of the string for all the languages +supported. + +Motivation +========== + +Every development ecosystem has it's own i18n framework. + +* Android has strings.xml +* Apple has Localizable.strings but it's deprecated +* We are using gettext PO as default + + +There is no standard file format in iOS, the current suggested format +is not supported by Weblate and looks like it's never going to be a +open documentation about it: + +from `Apple developer forum <https://forums.developer.apple.com/forums/thread/732120?answerId=756602022#756602022>`__ + + String Catalogs store an entire string table in a single JSON file, + even if there are a large number of keys and languages. If this ends + up presenting a problem (with Xcode's performance, for example), please send + some feedback our way. + As for the specifics of the JSON format itself, we have not published + documentation because it is primarily intended to be read/written by Xcode. + If you do end up writing your own parser for this format, please be aware + that Xcode reserves the right to change it. + + +What we are doing right now +--------------------------- + +How strings are generated + +*Android*: + Defines a key (like "send_deposit_amount_effective" or "amount_effective"), + this key has a default English translation in **strings.xml** and some other langs in **strings-{lang}.xml**. + +*iOS*: + Uses the English text in the source code, or can also use a key. + It has just one file with translations, **Localizable.xcstrings**. + +*SPA*: + It has the English string enclosed with i18n reference + and all those strings ends up in a file **src/i18n/strings.ts** which maps the English + sentence with a translated phrase. (the english sentence is used as a key) + +For the integration in to weblate: + +*Android*: + Weblate just takes **strings.xml** and **strings-{lang}.xml**, creates a list of all + strings to be translated and once you add new value for untranslated string or + change an existing one it modifies the correct file and commit with the new XML. + The project will automatically take this values. + +*iOS*: + No integration has been found. + +*SPA*: + The **strings.ts** file is not recognized by Weblate, so we generate **.po** files + which are supported by weblate. We have a script (pogen) that parses all the source code and + generate **.po** files, PO files are understood by Weblate and it will appear in the webapp + to be translated. Once the translator change some strings the PO files are updated with + the translations. When the changes are push into the repo, the developer can run a second + script (pogen) to sync the **.po** files with the **strings.ts**. Once in the **strings.ts** file the + app can show it in the UI. + + +Requirements +============ + +1. We should integrate weblate and iOS development +2. Translator should not translate 2 strings twice: if we can, we should reuse strings between apps +3. It should be clear wether we need to define a new string or add more context to the current strings +4. Stick to the `supported formats <https://docs.weblate.org/en/latest/formats.html>`__ + +Proposed Solution +================= + +What we need to do to support iOS +--------------------------------- + +We should move into something more like what we are doing with the SPA since we don't have +full support for **Localizable.xcstrings** and this file is kind of the same as **strings.ts** +(one big json with the mappings). + +That will mean: + +1. dev code, code, code (adding new strings to be translated, removing some other strings) +2. dev run script to sync **Localizable.xcstrings** with **file-that-weblate-understands.po** +3. translators translate and push changes +4. dev run script to sync **file-that-weblate-understands.po** with **Localizable.xcstrings** + +We only need to use our existing software **pogen** to create **po** files from the +**Localizable.xcstrings** which seems really easy. And then also update the +**Localizable.xcstrings** from the updated **po** files. + +This will not stop us from using XLIFF exporting/importing. + +What we need to do to reduce the work load in the translators side +------------------------------------------------------------------ + +We can split the problem in topics + +Using the same i18n key between apps: + we should stick to DD53 Wallet Design and use this to define + which strings developers should use. If the string is defined + there then it should be used in the code. That will create a spec + for the 3 platforms and it should use the same key. + +Using translation memory in weblate config: + from weblate documenantion, this can be used to automatically + share translations. + +Using context keys for short keys: + Sometimes the words like "close" or "transfer" could have separated + meaning depending on the context. For that cases we have the + **msgctxt** (that is additional key in addition to the short + sentence). Only same sentence with same context are equivalent. + We can also add some more context, like a link to the screenshot + in the design document so we can trigger an alarm if an image in the + weblate translation is out of sync with an image in DD 53. + +Using images in weblate: + We should keep DD 53 updated (with the screens and text) and add + information in the string sentence (like context) to point into + the right location. + + +What we need to do to reduce the work load in the translators side +------------------------------------------------------------------ + +1. devs and Weblate maintainers look into DD53 + Weblate maintainers take care of checks and keep the repos consistent and up-to-date +2. translators know the apps and strings very well and manage ambiguities +3. translators and reviewers take a look at the context + message ID / key, + string location in the source code / "nearby strings", + comments, + the history of string changes +4. devs and Weblate maintainers add screenshots to ambiguous strings +5. devs add context via msgctxt through the pogen script + + + + +Definition of Done +================== + +* When iOS app has a complete semi-automated integration with weblate +* Adding msgctxt works for every platforms + +Alternatives +============ + +Drawbacks +========= + +Discussion / Q&A +================ + + diff --git a/design-documents/index.rst b/design-documents/index.rst @@ -67,4 +67,5 @@ Design documents that start with "XX" are considered deprecated. 053-wallet-ui.rst 054-dynamic-form.rst 055-wallet-problem-report.rst + 056-weblate-integration.rst 999-template