Difference between revisions of "I18nTeam/Migration-to-weblate"
Damekyung98 (talk | contribs) (→Migration Scope) |
Ian Y. Choi (talk | contribs) (Enhance the structure) |
||
| (16 intermediate revisions by one other user not shown) | |||
| Line 1: | Line 1: | ||
| − | == Migration to | + | == Migration of I18n Translation Platform - from Zanata to Weblate == |
| − | === | + | === Overview === |
| − | + | [https://wiki.openstack.org/wiki/I18nTeam I18n SIG] as an [https://governance.openstack.org/sigs/ active SIG] is migrating translation infrastructure from Zanata to Weblate for sustainable open collaboration and efficiency. This page outlines team members, action items, component mappings, naming conventions, translation metrics, project statuses across 127 projects/54 languages, and etherpads for ongoing coordination. | |
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | === | + | === Project Members === |
| − | + | * Seongsoo Cho (Project Leader) | |
| + | * Ian Y. Choi (I18n SIG Lead, Project co-leader) | ||
| + | * DaGyeong Kim (2025-) | ||
| + | * Gwangil Kim (2025-) | ||
| + | * Kuemjong Jeong (2024) | ||
| + | * Nayeon Kim (2024) | ||
| + | * Sion Shin (2024) | ||
| − | + | === Schedule === | |
| − | + | The below schedule contains overall progress. For up-to-date schedule inquiry, please reach the project member(s) or I18n SIG. | |
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| + | * '''Define scope of test projects''' '''(Done)''' | ||
| + | ** Focused on dashboards (e.g., cloudkitty-dashboard); Zanata config imported to Weblate (users not migrated). | ||
| + | * '''Scripts compatible with Weblate''' '''(In Progress)''' | ||
| + | ** WIP: [[https://opendev.org/openstack/openstack-zuul-jobs/src/branch/master/roles/prepare-zanata-client/files/|Zuul jobs patch]] | ||
| + | ** Auto-project creation; local test (daily 06:00 UTC). | ||
| + | * '''Zuul Integration Test''' '''(Working)''' | ||
| + | ** Upload POT on changes; daily PO pull. | ||
| + | * '''Stats extraction tools''' '''(Mostly Done)''' | ||
| + | ** See Tools section. | ||
| − | === | + | === Migration Plan === |
| − | ==== | + | ==== Component Mapping ==== |
| − | + | {| class="wikitable" | |
| − | + | ! Zanata !! Weblate !! Description | |
| + | |- | ||
| + | | '''Project''' || '''Project''' || Top-level unit. | ||
| + | |- | ||
| + | | '''Version''' || '''Category''' || Version to category. | ||
| + | |- | ||
| + | | '''Document''' || '''Component''' || Files. | ||
| + | |- | ||
| + | | '''Language''' || '''Language''' || Locales. | ||
| + | |} | ||
| − | ==== | + | ==== Naming Convention ==== |
| − | |||
| − | ==== | + | ===== Project/Category ===== |
| − | + | * '''Project''': Direct Zanata map. | |
| − | * | + | * '''Category''': Direct Zanata Version map. |
| − | * | + | |
| + | ===== Component ID ===== | ||
| + | Format: `<module>-<kind>`. | ||
| + | |||
| + | {| class="wikitable" | ||
| + | ! Zanata Doc !! Collision !! Weblate | ||
| + | |- | ||
| + | | horizon/locale/django || django || '''horizon-django''' | ||
| + | |} | ||
| + | |||
| + | |||
| + | ===== Languages ===== | ||
| + | Weblate follows the existing Zanata language code convention to ensure seamless resource mapping. | ||
| + | |||
| + | * '''Format:''' `language_COUNTRY` (e.g., `en_US`, `ko_KR`) | ||
| + | * '''Casing Rules:''' | ||
| + | ** '''Language:''' Always lowercase. | ||
| + | ** '''Country:''' Always uppercase. | ||
| + | ** For neutral languages without a specific region, only the lowercase language code is used (e.g., `ko`, `ja`, `fr`). | ||
| + | |||
| + | : '''Note:''' For detailed rules regarding plural forms, please refer to: [[Language Plurals]] | ||
| + | |||
| + | |||
| + | ==== Accuracy Metrics ==== | ||
| + | |||
| + | {| class="mw-collapsible wikitable" | ||
| + | ! Draft (Pending Discussion) | ||
| + | |- | ||
| + | | | ||
| + | : '''Note:''' Below has not been discussed - drafted from active migration volunteering members. | ||
| + | |||
| + | Due to inconsistent word count calculations across different translation platforms, we measure accuracy by the number of strings rather than word count. | ||
| + | |||
| + | We evaluate translation accuracy using the following metrics: | ||
| + | * Source strings: The total number of original English messages that need to be translated. | ||
| + | * Translated strings: The number of messages that have been successfully translated into the target language. | ||
| + | |||
| + | We calculate accuracy based on the ratio of accurate strings across all versions, considering both source strings and translated strings. | ||
| + | |||
| + | What gets checked: | ||
| + | * Total string counts (source and translated) | ||
| + | * Translation completion rates | ||
| + | * File-level comparison of all translated files between Zanata and Weblate to verify data integrity | ||
| + | |} | ||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | === | + | === Projects & Status === |
| − | ==== | + | ==== Scope ==== |
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
| Line 67: | Line 106: | ||
|} | |} | ||
| − | |||
| − | + | ==== Versions ==== | |
| + | * master, stable/2025.2∼2024.1 (no unmaintained/*). | ||
| − | + | ==== Status ==== | |
| − | + | For more details about accuracy, please refer to the Launchpad bugs. | |
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
| − | ! Project | + | ! Project !! Progress status !! Accuracy !! Launchpad Bug !! Contributor !! Comment |
|- | |- | ||
| − | | cloudkitty-dashboard || | + | | cloudkitty-dashboard || In Progress || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2121053 || DaGyeong Kim || N/A |
|- | |- | ||
| − | | designate-dashboard || | + | | designate-dashboard || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119196 || N/A || N/A |
|- | |- | ||
| − | | freezer-web-ui || | + | | freezer-web-ui || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2124944 || N/A || N/A |
|- | |- | ||
| − | | heat-dashboard || | + | | heat-dashboard || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119199 || N/A || N/A |
|- | |- | ||
| − | | ironic-ui || | + | | ironic-ui || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119203 || N/A || N/A |
|- | |- | ||
| − | | manila-ui || | + | | manila-ui || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119204 || N/A || N/A |
|- | |- | ||
| − | | magnum-ui || | + | | magnum-ui || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119200 || N/A || N/A |
|- | |- | ||
| − | | networking-bgpvpn || | + | | networking-bgpvpn || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119207 || N/A || N/A |
|- | |- | ||
| − | | neutron-fwaas-dashboard || | + | | neutron-fwaas-dashboard || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119206 || N/A || N/A |
|- | |- | ||
| − | | neutron-vpnaas-dashboard || | + | | neutron-vpnaas-dashboard || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119388 || N/A || N/A |
|- | |- | ||
| − | | octavia-dashboard || | + | | octavia-dashboard || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119197 || N/A || N/A |
|- | |- | ||
| − | | trove-dashboard || | + | | trove-dashboard || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119201 || N/A || N/A |
|- | |- | ||
| − | | zaqar-ui || | + | | zaqar-ui || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119468 || N/A || N/A |
|- | |- | ||
| − | | zun-ui || | + | | zun-ui || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119205 || N/A || N/A |
|- | |- | ||
| − | | horizon || | + | | horizon || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2125039 || N/A || N/A |
|} | |} | ||
| + | |||
| + | === Tools === | ||
| + | * weblate_userinfo.py : Done ( https://review.opendev.org/c/openstack/i18n/+/893361 ) | ||
| + | ** Generates a csv file which contains the list of translators for a specified target role with name and e-mail address. Requires privileges to access Weblate accounts API. | ||
| + | * weblate_users.py : Done ( https://review.opendev.org/c/openstack/i18n/+/895763 ) | ||
| + | ** Generates a list of Weblate language contributors. | ||
| + | * weblate_utils.py : Done ( https://review.opendev.org/c/openstack/i18n/+/896308 ) | ||
| + | ** Provides basic classes used by the other scripts | ||
| + | *** IniConfig class to get the key and url for the weblate server | ||
| + | *** WeblateRestService class that communicates with the Weblate REST API | ||
| + | * weblate_stats.py : Working ( https://review.opendev.org/c/openstack/i18n/+/896306 ) | ||
| + | ** (describe the role of the tool ) | ||
| + | * weblate_records.py : Working ( https://review.opendev.org/c/openstack/i18n/+/896306 ) | ||
| + | ** (describe the role of the tool ) | ||
=== Etherpads === | === Etherpads === | ||
| − | * [https://etherpad.opendev.org/p/vancouver-forum-i18n | + | * [[https://etherpad.opendev.org/p/vancouver-forum-i18n Vancouver Forum]] |
| − | * [https://etherpad.opendev.org/p/i18n-weblate i18n weblate | + | * [[https://etherpad.opendev.org/p/i18n-weblate i18n-weblate]] |
| + | * https://etherpad.opendev.org/p/oct2025-ptg-i18n | ||
| + | * https://etherpad.opendev.org/p/oct2025-ptg-i18n-followup | ||
Latest revision as of 00:34, 17 January 2026
Migration of I18n Translation Platform - from Zanata to Weblate
Overview
I18n SIG as an active SIG is migrating translation infrastructure from Zanata to Weblate for sustainable open collaboration and efficiency. This page outlines team members, action items, component mappings, naming conventions, translation metrics, project statuses across 127 projects/54 languages, and etherpads for ongoing coordination.
Project Members
- Seongsoo Cho (Project Leader)
- Ian Y. Choi (I18n SIG Lead, Project co-leader)
- DaGyeong Kim (2025-)
- Gwangil Kim (2025-)
- Kuemjong Jeong (2024)
- Nayeon Kim (2024)
- Sion Shin (2024)
Schedule
The below schedule contains overall progress. For up-to-date schedule inquiry, please reach the project member(s) or I18n SIG.
- Define scope of test projects (Done)
- Focused on dashboards (e.g., cloudkitty-dashboard); Zanata config imported to Weblate (users not migrated).
- Scripts compatible with Weblate (In Progress)
- WIP: [jobs patch]
- Auto-project creation; local test (daily 06:00 UTC).
- Zuul Integration Test (Working)
- Upload POT on changes; daily PO pull.
- Stats extraction tools (Mostly Done)
- See Tools section.
Migration Plan
Component Mapping
| Zanata | Weblate | Description |
|---|---|---|
| Project | Project | Top-level unit. |
| Version | Category | Version to category. |
| Document | Component | Files. |
| Language | Language | Locales. |
Naming Convention
Project/Category
- Project: Direct Zanata map.
- Category: Direct Zanata Version map.
Component ID
Format: `<module>-<kind>`.
| Zanata Doc | Collision | Weblate |
|---|---|---|
| horizon/locale/django | django | horizon-django |
Languages
Weblate follows the existing Zanata language code convention to ensure seamless resource mapping.
- Format: `language_COUNTRY` (e.g., `en_US`, `ko_KR`)
- Casing Rules:
- Language: Always lowercase.
- Country: Always uppercase.
- For neutral languages without a specific region, only the lowercase language code is used (e.g., `ko`, `ja`, `fr`).
- Note: For detailed rules regarding plural forms, please refer to: Language Plurals
Accuracy Metrics
| Draft (Pending Discussion) |
|---|
Due to inconsistent word count calculations across different translation platforms, we measure accuracy by the number of strings rather than word count. We evaluate translation accuracy using the following metrics:
We calculate accuracy based on the ratio of accurate strings across all versions, considering both source strings and translated strings. What gets checked:
|
Projects & Status
Scope
| Item | Count |
|---|---|
| Total projects | 127 |
| Total versions | 12 |
| Total Languages | 54 |
Versions
- master, stable/2025.2∼2024.1 (no unmaintained/*).
Status
For more details about accuracy, please refer to the Launchpad bugs.
Tools
- weblate_userinfo.py : Done ( https://review.opendev.org/c/openstack/i18n/+/893361 )
- Generates a csv file which contains the list of translators for a specified target role with name and e-mail address. Requires privileges to access Weblate accounts API.
- weblate_users.py : Done ( https://review.opendev.org/c/openstack/i18n/+/895763 )
- Generates a list of Weblate language contributors.
- weblate_utils.py : Done ( https://review.opendev.org/c/openstack/i18n/+/896308 )
- Provides basic classes used by the other scripts
- IniConfig class to get the key and url for the weblate server
- WeblateRestService class that communicates with the Weblate REST API
- Provides basic classes used by the other scripts
- weblate_stats.py : Working ( https://review.opendev.org/c/openstack/i18n/+/896306 )
- (describe the role of the tool )
- weblate_records.py : Working ( https://review.opendev.org/c/openstack/i18n/+/896306 )
- (describe the role of the tool )