I18nTeam/Migration-to-weblate
< I18nTeam
Revision as of 09:20, 28 October 2025 by Damekyung98 (talk | contribs) (→Translation Accuracy Metrics)
Contents
Migration to weblate
Who's joining the migration project
- Ian Y. Choi (Manager)
- Seongsoo Cho
- Kuemjong Jeong
- Nayeon Kim
- Sion Shin
- Gwangil Kim
- DaGyeong Kim
Planning a weblate migration schedule
You can find more details about each task below.
- Define the scope of target test projects
- All vs. a few projects (e.g., openstack-manuals, nova, i18n, horizon)
- 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.
- Weblate project creation with settings if the target project is not existing on the platform
- 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
Action Item
Define the scope of target test projects
- Configure Weblate with the information set in Zanata.
- User information is not migrated.
Make Translation Infrastructure Scripts compatible with Weblate
- WIP patch to support Weblate for https://opendev.org/openstack/openstack-zuul-jobs/src/branch/master/roles/prepare-zanata-client/files/
Zuul Integration Test
Create and test a ZuuL Job that performs the following tasks
- Uploading translation files to Weblate when new changes are made to your project
- Upload translations from Weblate to your project every day at 06 UTC
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
- 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 )
List of projects and status
Migration Scope
| Item | Count |
|---|---|
| Total projects | 127 |
| Total versions | 12 |
| Total Languages | 54 |
Version
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 to migrate:
- master
- 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
Languages plurals
| Language Code | Language Name | Plurals |
|---|---|---|
| ar | Arabic | nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 ? 4 : 5; |
| as | Assamese | nplurals=2; plural=n > 1; |
| bg_BG | Bulgarian (Bulgaria) | nplurals=2; plural=n != 1; |
| bn_IN | Bengali (India) | nplurals=2; plural=n > 1; |
| brx | Bodo | nplurals=2; plural=n != 1; |
| ca | Catalan | nplurals=2; plural=n != 1; |
| cs | Czech | nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2; |
| de | German | nplurals=2; plural=n != 1; |
| el | Greek | nplurals=2; plural=n != 1; |
| en_GB | English (United Kingdom) | nplurals=2; plural=n != 1; |
| en_US | English (United States) | nplurals=2; plural=n != 1; |
| en_AU | English (Australia) | nplurals=2; plural=n != 1; |
| eo | Esperanto | nplurals=2; plural=n != 1; |
| es | Spanish | nplurals=2; plural=n != 1; |
| es_MX | Spanish (Mexico) | nplurals=2; plural=n != 1; |
| fa | Persian | nplurals=2; plural=n > 1; |
| fi_FI | Finnish (Finland) | nplurals=2; plural=n != 1; |
| fil | Filipino | nplurals=2; plural=n != 1 && n != 2 && n != 3 && (n % 10 == 4 || n % 10 == 6 || n % 10 == 9); |
| fr | French | nplurals=2; plural=n > 1; |
| gu | Gujarati | nplurals=2; plural=n > 1; |
| he | Hebrew | nplurals=4; plural=(n == 1) ? 0 : ((n == 2) ? 1 : ((n > 10 && n % 10 == 0) ? 2 : 3)); |
| hi | Hindi | nplurals=2; plural=n > 1; |
| hu | Hungarian | nplurals=2; plural=n != 1; |
| id | Indonesian | nplurals=1; plural=0; |
| it | Italian | nplurals=2; plural=n != 1; |
| ja | Japanese | nplurals=1; plural=0; |
| ka_GE | Georgian (Georgia) | nplurals=2; plural=n != 1; |
| kn | Kannada | nplurals=2; plural=n > 1; |
| ko_KR | Korean (Korea) | nplurals=1; plural=0; |
| kok | Konkani | nplurals=2; plural=n != 1; |
| ks | Kashmiri | nplurals=2; plural=n != 1; |
| lo | Lao | nplurals=1; plural=0; |
| mai | Maithili | nplurals=2; plural=n != 1; |
| mni | Manipuri | nplurals=2; plural=n != 1; |
| mr | Marathi | nplurals=2; plural=n != 1; |
| ne | Nepali | nplurals=2; plural=n != 1; |
| nl_NL | Dutch (Netherlands) | nplurals=2; plural=n != 1; |
| pa_IN | Punjabi (India) | nplurals=2; plural=n > 1; |
| pl_PL | Polish (Poland) | nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2; |
| pt | Portuguese | nplurals=2; plural=n > 1; |
| pt_BR | Portuguese (Brazil) | nplurals=2; plural=n > 1; |
| ro | Romanian | nplurals=3; plural=n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < 20)) ? 1 : 2; |
| ru | Russian | nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2; |
| sl_SI | Slovenian (Slovenia) | nplurals=4; plural=n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3; |
| sq | Albanian | nplurals=2; plural=n != 1; |
| sr | Serbian | nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2; |
| ta | Tamil | nplurals=2; plural=n != 1; |
| te_IN | Telugu (India) | nplurals=2; plural=n != 1; |
| th | Thai | nplurals=1; plural=0; |
| tr_TR | Turkish (Turkey) | nplurals=2; plural=n != 1; |
| ur | Urdu | nplurals=2; plural=n != 1; |
| vi_VN | Vietnamese (Vietnam) | nplurals=1; plural=0; |
| zh_CN | Chinese (China) | nplurals=1; plural=0; |
| zh_TW | Chinese (Taiwan) | nplurals=1; plural=0; |
Translation Accuracy Metrics
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
- Translated strings
Translation Migration Status
For more details about accuracy, please refer to the Launchpad bugs.