I18nTeam/Migration-to-weblate
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 )