From cbd85fafda93703484450af7cfd88d5cf4487573 Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Fri, 1 Mar 2024 23:15:36 +1100 Subject: [PATCH] Fix #889. Write docs for how to do translations. --- .gitignore | 3 + src/blenderbim/blenderbim/translations.py | 3 + .../docs/devs/images/translation-panel.png | Bin 0 -> 18455 bytes src/blenderbim/docs/devs/translations.rst | 76 ++++++++++++++++++ src/blenderbim/docs/index.rst | 1 + 5 files changed, 83 insertions(+) create mode 100644 src/blenderbim/blenderbim/translations.py create mode 100644 src/blenderbim/docs/devs/images/translation-panel.png create mode 100644 src/blenderbim/docs/devs/translations.rst diff --git a/.gitignore b/.gitignore index c58cc699b5..498b2e3f46 100644 --- a/.gitignore +++ b/.gitignore @@ -76,6 +76,9 @@ src/ifcopenshell-python/test/build # blenderbim libs src/blenderbim/blenderbim/libs +# blenderbim i18n +src/blenderbim/blenderbim/translations.py + # blenderbim test temp files src/blenderbim/test/files/temp src/blenderbim/drawings diff --git a/src/blenderbim/blenderbim/translations.py b/src/blenderbim/blenderbim/translations.py new file mode 100644 index 0000000000..cb4cfef689 --- /dev/null +++ b/src/blenderbim/blenderbim/translations.py @@ -0,0 +1,3 @@ +# This file will be autogenerated and rewritten when packaged. + +translations_dict = {} diff --git a/src/blenderbim/docs/devs/images/translation-panel.png b/src/blenderbim/docs/devs/images/translation-panel.png new file mode 100644 index 0000000000000000000000000000000000000000..7a9a3de9e84cc54a296f3b0077efc1dc5f772446 GIT binary patch literal 18455 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 Y7u$K+m>RqR9_GW~>FVdQ&MBb@09p{kZ~y=R literal 0 HcmV?d00001 diff --git a/src/blenderbim/docs/devs/translations.rst b/src/blenderbim/docs/devs/translations.rst new file mode 100644 index 0000000000..7715ee2878 --- /dev/null +++ b/src/blenderbim/docs/devs/translations.rst @@ -0,0 +1,76 @@ +Translations +============ + +The BlenderBIM Add-on supports translations to all languages that Blender +supports. We'll describe how you can help translate the add-on as a translator, +or how you can ensure your strings are translatable as a developer. +Translations are managed using a separate add-on built for this purpose. + +1. Clone the `blenderbim-translations + `_ repository. This + repository holds all the core translation strings in ``.po`` format. +2. Download the `blenderbim-translations add-on + `_ + and install it as a Blender add-on. This add-on lets you convert translation + data to and from the ``.po`` files to the BlenderBIM Add-on. +3. In the **Render Properties** tab, find the **BlenderBIM Translations** + panel, and browse to where you have closed the ``blenderbim-translations`` + repository, and click on **Setup Translation UI**. + +You should now see a new interface with two buttons. + +.. image:: images/translation-panel.png + +How to translate the add-on +--------------------------- + +Before beginning, look inside the ``blenderbim-translations`` repository for a +``.po`` file for the language you want to translate to (e.g. ``de_DE.po`` for +German). If this file does not yet exist, congratulations! You are the first +person to translate to this language! Create a folder in +``blenderbim-translations`` with your language code and copy the +``blenderbim.pot`` language template file to that folder and rename it +according to your language (e.g. for German you would copy ``blenderbim.pot`` to +``de_DE/de_DE.po``). + +Supported language codes are: + +.. code-block:: + + 'ca_AD', 'en_US', 'es', 'fr_FR', 'ja_JP', 'sk_SK', 'cs_CZ', 'de_DE', + 'it_IT', 'ka', 'ko_KR', 'pt_BR', 'pt_PT', 'ru_RU', 'uk_UA', 'vi_VN', + 'zh_HANS', 'zh_HANT', 'ab', 'ar_EG', 'bg_BG', 'el_GR', 'eo', 'eu_EU', + 'fa_IR', 'fi_FI', 'ha', 'he_IL', 'hi_IN', 'hr_HR', 'hu_HU', 'id_ID', + 'ky_KG', 'ne_NP', 'nl_NL', 'pl_PL', 'sr_RS', 'sr_RS@latin', 'sv_SE', 'sw', + 'ta', 'th_TH', 'tr_TR'. + +As a translator, it is recommended to translate text in bulk by modifying the +``.po`` files directly. We recommend installing software such as `Poedit +`_. These translation software offer features such as auto +translation, suggestions, and tracking. Alternatively, you may edit the ``.po`` +file as a text file. + +Once you have edited the relevant language's ``.po`` file, click on the +**Update Translations From .po** button in the **BlenderBIM Translations** +panel. + +How to add new translation strings +---------------------------------- + +When you have new strings to translate, press the **Parse BlenderBIM strings to +.pot** button. This detects strings in the source code using regex patterns and +writes out to the ``blenderbim.pot`` language template file. You may then diff +this file and propagate changes manually to all translated ``.po`` files. + +The ``.pot`` file is only used as a blank template for users to create or +compare ``.po`` files. The ``.po`` files are the source of truth for +translation strings. Blender does not read from the ``.pot`` or ``.po`` files. +Instead, Blender reads from ``blenderbim/translations.py`` which contains a +dictionary of strings formatted specifically for Blender. The +``translations.py`` file is generated from the ``.po`` files. This is generated +when we distribute installable packages, or when translators manually press the +**Update Translations From .po** button. + +.. warning:: + + Do not commit the ``translations.py`` file as it is auto-generated. diff --git a/src/blenderbim/docs/index.rst b/src/blenderbim/docs/index.rst index b730d4d97e..662b914e17 100644 --- a/src/blenderbim/docs/index.rst +++ b/src/blenderbim/docs/index.rst @@ -42,6 +42,7 @@ Learn how to model a small building and create simple architectural plans, secti devs/hello_world devs/running_tests devs/writing_docs + devs/translations devs/undo_system devs/system_support devs/ux_guidelines