Jump to: navigation, search

Difference between revisions of "I18nTeam/Migration-to-weblate"

(Migration Scope)
(Enhance the structure)
 
(16 intermediate revisions by one other user not shown)
Line 1: Line 1:
== Migration to weblate ==
+
== Migration of I18n Translation Platform - from Zanata to Weblate ==
  
=== Who's joining the migration project ===
+
=== Overview ===
* Ian Y. Choi (Manager)
+
[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.
* Seongsoo Cho
 
* Kuemjong Jeong
 
* Nayeon Kim
 
* Sion Shin
 
* Gwangil Kim
 
* DaGyeong Kim
 
  
=== Planning a weblate migration schedule ===
+
=== Project Members ===
You can find more details about each task below.
+
* 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)
  
* Define the scope of target test projects
+
=== Schedule ===
** All vs. a few projects (e.g., openstack-manuals, nova, i18n, horizon)
+
The below schedule contains overall progress. For up-to-date schedule inquiry, please reach the project member(s) or I18n SIG.
* Make Translation Infrastructure Scripts compatible with Weblate
 
** Weblate project creation with settings if the target project is not existing on the platform
 
*** (If it is not supported, Weblate projects will be created manually)
 
*** Testing needs to be performed locally, since the scripts are executed on 06:00 UTC daily.
 
* ZuuL Integration Test
 
** Determine when to test (e.g., Test methodology without waiting at 06:00 UTC?)
 
** Integration test with all translation target projects
 
* Making tools for extracting statistical data from Weblate
 
  
 +
* '''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.
  
=== Action Item ===
+
=== Migration Plan ===
  
==== Define the scope of target test projects ====
+
==== Component Mapping ====
* Configure Weblate with the information set in Zanata.
+
{| class="wikitable"
* User information is not migrated.
+
! Zanata !! Weblate !! Description
 +
|-
 +
| '''Project''' || '''Project''' || Top-level unit.
 +
|-
 +
| '''Version''' || '''Category''' || Version to category.
 +
|-
 +
| '''Document''' || '''Component''' || Files.
 +
|-
 +
| '''Language''' || '''Language''' || Locales.
 +
|}
  
==== Make Translation Infrastructure Scripts compatible with Weblate ====
+
==== Naming Convention ====
* WIP patch to support Weblate for https://opendev.org/openstack/openstack-zuul-jobs/src/branch/master/roles/prepare-zanata-client/files/
 
  
==== Zuul Integration Test ====
+
===== Project/Category =====
Create and test a ZuuL Job that performs the following tasks
+
* '''Project''': Direct Zanata map.
* Uploading translation files to Weblate when new changes are made to your project
+
* '''Category''': Direct Zanata Version map.
* Upload translations from Weblate to your project every day at 06 UTC
+
 
 +
===== 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
 +
|}
  
==== Making tools for extracting statistical data from Weblate ====
 
* 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 )
 
  
=== List of projects and status ===
+
=== Projects & Status ===
  
==== Migration Scope ====
+
==== Scope ====
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
Line 67: Line 106:
 
|}
 
|}
  
We determined the migration version based on the branches that currently exist in the main services.
 
  
Note: Some projects may not have this branch.
+
==== Versions ====
 +
* master, stable/2025.2∼2024.1 (no unmaintained/*).
  
Versions to migrate:
+
==== Status ====
* master
+
For more details about accuracy, please refer to the Launchpad bugs.
* stable/2025.2
 
* stable/2025.1
 
* stable/2024.2
 
* stable/2024.1
 
* unmaintained/2023.1
 
* unmaintained/zed
 
* unmaintained/wallaby
 
* unmaintained/victoria
 
* unmaintained/yoga
 
* unmaintained/xena
 
  
==== Translation Migration Status ====
 
  
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
! Project !! Message !! Word !! Progress status !! Accuracy(%) !! Launchpad Bug !! Contributor !! Comment
+
! Project !! Progress status !! Accuracy !! Launchpad Bug !! Contributor !! Comment
 
|-
 
|-
| cloudkitty-dashboard || N/A || N/A || N/A || N/A|| https://bugs.launchpad.net/openstack-i18n/+bug/2121053 || DaGyeong Kim || N/A
+
| cloudkitty-dashboard || In Progress || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2121053 || DaGyeong Kim || N/A
 
|-
 
|-
| designate-dashboard || N/A || N/A || N/A || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119196 || DaGyeong Kim || N/A
+
| designate-dashboard || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119196 || N/A || N/A
 
|-
 
|-
| freezer-web-ui || N/A || N/A || N/A || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2124944 || N/A || N/A
+
| freezer-web-ui || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2124944 || N/A || N/A
 
|-
 
|-
| heat-dashboard || N/A || N/A || N/A || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119199 || N/A || N/A
+
| heat-dashboard || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119199 || N/A || N/A
 
|-
 
|-
| ironic-ui || N/A || N/A || N/A || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119203 || N/A || N/A
+
| ironic-ui || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119203 || N/A || N/A
 
|-
 
|-
| manila-ui || N/A || N/A || N/A || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119204 || N/A || N/A
+
| manila-ui || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119204 || N/A || N/A
 
|-
 
|-
| magnum-ui || N/A || N/A || N/A || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119200 || N/A || N/A
+
| magnum-ui || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119200 || N/A || N/A
 
|-
 
|-
| networking-bgpvpn || N/A || N/A || N/A || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119207 || N/A || N/A
+
| networking-bgpvpn || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119207 || N/A || N/A
 
|-
 
|-
| neutron-fwaas-dashboard || N/A || N/A || N/A || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119206 || N/A || N/A
+
| neutron-fwaas-dashboard || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119206 || N/A || N/A
 
|-
 
|-
| neutron-vpnaas-dashboard || N/A || N/A || N/A || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119388 || N/A || N/A
+
| neutron-vpnaas-dashboard || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119388 || N/A || N/A
 
|-
 
|-
| octavia-dashboard || N/A || N/A || N/A || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119197 || N/A || N/A
+
| octavia-dashboard || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119197 || N/A || N/A
 
|-
 
|-
| trove-dashboard || N/A || N/A || N/A || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119201 || N/A || N/A
+
| trove-dashboard || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119201 || N/A || N/A
 
|-
 
|-
| zaqar-ui || N/A || N/A || N/A || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119468 || N/A || N/A
+
| zaqar-ui || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119468 || N/A || N/A
 
|-
 
|-
| zun-ui || N/A || N/A || N/A || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119205 || N/A || N/A
+
| zun-ui || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119205 || N/A || N/A
 
|-
 
|-
| horizon || N/A || N/A || N/A || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2125039 || N/A || N/A
+
| 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 OpenInfra Summit Vancouver 2023 Forum]
+
* [[https://etherpad.opendev.org/p/vancouver-forum-i18n Vancouver Forum]]
* [https://etherpad.opendev.org/p/i18n-weblate i18n weblate migration]
+
* [[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)
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

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.


Project Progress status Accuracy Launchpad Bug Contributor Comment
cloudkitty-dashboard In Progress N/A https://bugs.launchpad.net/openstack-i18n/+bug/2121053 DaGyeong Kim N/A
designate-dashboard Not Started N/A https://bugs.launchpad.net/openstack-i18n/+bug/2119196 N/A N/A
freezer-web-ui Not Started N/A https://bugs.launchpad.net/openstack-i18n/+bug/2124944 N/A N/A
heat-dashboard Not Started N/A https://bugs.launchpad.net/openstack-i18n/+bug/2119199 N/A N/A
ironic-ui Not Started N/A https://bugs.launchpad.net/openstack-i18n/+bug/2119203 N/A N/A
manila-ui Not Started N/A https://bugs.launchpad.net/openstack-i18n/+bug/2119204 N/A N/A
magnum-ui Not Started N/A https://bugs.launchpad.net/openstack-i18n/+bug/2119200 N/A N/A
networking-bgpvpn Not Started N/A https://bugs.launchpad.net/openstack-i18n/+bug/2119207 N/A N/A
neutron-fwaas-dashboard Not Started N/A https://bugs.launchpad.net/openstack-i18n/+bug/2119206 N/A N/A
neutron-vpnaas-dashboard Not Started N/A https://bugs.launchpad.net/openstack-i18n/+bug/2119388 N/A N/A
octavia-dashboard Not Started N/A https://bugs.launchpad.net/openstack-i18n/+bug/2119197 N/A N/A
trove-dashboard Not Started N/A https://bugs.launchpad.net/openstack-i18n/+bug/2119201 N/A N/A
zaqar-ui Not Started N/A https://bugs.launchpad.net/openstack-i18n/+bug/2119468 N/A N/A
zun-ui Not Started N/A https://bugs.launchpad.net/openstack-i18n/+bug/2119205 N/A N/A
horizon Not Started N/A https://bugs.launchpad.net/openstack-i18n/+bug/2125039 N/A N/A

Tools

Etherpads