<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>https://wiki.openstack.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Damekyung98</id>
		<title>OpenStack - User contributions [en]</title>
		<link rel="self" type="application/atom+xml" href="https://wiki.openstack.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Damekyung98"/>
		<link rel="alternate" type="text/html" href="https://wiki.openstack.org/wiki/Special:Contributions/Damekyung98"/>
		<updated>2026-06-27T14:06:04Z</updated>
		<subtitle>User contributions</subtitle>
		<generator>MediaWiki 1.28.2</generator>

	<entry>
		<id>https://wiki.openstack.org/w/index.php?title=Language_Plurals&amp;diff=187103</id>
		<title>Language Plurals</title>
		<link rel="alternate" type="text/html" href="https://wiki.openstack.org/w/index.php?title=Language_Plurals&amp;diff=187103"/>
				<updated>2026-01-09T13:50:22Z</updated>
		
		<summary type="html">&lt;p&gt;Damekyung98: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
To maintain consistency during the migration/integration process, we strictly adhere to the Zanata language code format.&lt;br /&gt;
&lt;br /&gt;
In all cases, Zanata's plural forms are prioritized. &lt;br /&gt;
* Langauge code format: Zanata Language Codes.&lt;br /&gt;
* Plurals: If Weblate’s plural rules differ from Zanata’s, the Zanata rule must be applied to ensure compatibility with existing localized resources. Specifically, plurals should be enclosed in () as per the Zanata format.&lt;br /&gt;
&lt;br /&gt;
: '''Note:''' The presence or absence of parentheses () is not considered when determining plural identity.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Language Code (Zanata) !! Language Name !! Plurals (Zanata) !! Language Code (Weblate) !! Plurals (Weblate) !! Different? !! Note&lt;br /&gt;
|-&lt;br /&gt;
| sq || Albanian || nplurals=2; plural=(n != 1) || sq || nplurals=2; plural=n != 1; || No || &lt;br /&gt;
|-&lt;br /&gt;
| ar || Arabic || nplurals=6; plural= n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100&amp;gt;=3 &amp;amp;&amp;amp; n%100&amp;lt;=10 ? 3 : n%100&amp;gt;=11 ? 4 : 5; || ar || nplurals=6; plural= n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100&amp;gt;=3 &amp;amp;&amp;amp; n%100&amp;lt;=10 ? 3 : n%100&amp;gt;=11 ? 4 : 5; || No || &lt;br /&gt;
|-&lt;br /&gt;
| as || Assamese || nplurals=2; plural=(n != 1) || as || nplurals=2; plural=n &amp;gt; 1; || Yes || &lt;br /&gt;
|-&lt;br /&gt;
| bn-IN || Bengali (India) || nplurals=2; plural=(n != 1) || bn_IN || nplurals=2; plural=n &amp;gt; 1; || Yes || &lt;br /&gt;
|-&lt;br /&gt;
| brx || Bodo || nplurals=2; plural=(n != 1) || brx || nplurals=2; plural=n != 1; || No || &lt;br /&gt;
|-&lt;br /&gt;
| bg-BG || Bulgarian (Bulgaria) || nplurals=2; plural=(n != 1) || bg || nplurals=2; plural=n != 1; || No || &lt;br /&gt;
|-&lt;br /&gt;
| ca || Catalan || nplurals=2; plural=(n != 1) || ca || nplurals=2; plural=n != 1; || No || &lt;br /&gt;
|-&lt;br /&gt;
| zh-CN || Chinese (China) || nplurals=1; plural=0 || zh_Hans || nplurals=1; plural=0; || No || &lt;br /&gt;
|-&lt;br /&gt;
| zh-TW || Chinese (Taiwan) || nplurals=1; plural=0 || zh_Hant || nplurals=1; plural=0; || No || &lt;br /&gt;
|-&lt;br /&gt;
| cs || Czech || nplurals=3; plural=(n==1) ? 0 : (n&amp;gt;=2 &amp;amp;&amp;amp; n&amp;lt;=4) ? 1 : 2 || cs || nplurals=3; plural=(n==1) ? 0 : (n&amp;gt;=2 &amp;amp;&amp;amp; n&amp;lt;=4) ? 1 : 2; || No || &lt;br /&gt;
|-&lt;br /&gt;
| nl-NL || Dutch (Netherlands) || nplurals=2; plural=(n != 1) || nl || nplurals=2; plural=n != 1; || No || &lt;br /&gt;
|-&lt;br /&gt;
| en-AU || English (Australia) || nplurals=2; plural=(n != 1) || en_AU || nplurals=2; plural=n != 1; || No || &lt;br /&gt;
|-&lt;br /&gt;
| en-GB || English (United Kingdom) || nplurals=2; plural=(n != 1) || en_GB || nplurals=2; plural=n != 1; || No || &lt;br /&gt;
|-&lt;br /&gt;
| en-US || English (United States) || nplurals=2; plural=(n != 1) || en_US || nplurals=2; plural=n != 1; || No || &lt;br /&gt;
|-&lt;br /&gt;
| eo || Esperanto || nplurals=2; plural=(n != 1) || eo || nplurals=2; plural=n != 1; || No || &lt;br /&gt;
|-&lt;br /&gt;
| fil || Filipino || nplurals=2; plural=n &amp;gt; 1 || fil || nplurals=2; plural=n != 1 &amp;amp;&amp;amp; n != 2 &amp;amp;&amp;amp; n != 3 &amp;amp;&amp;amp; (n % 10 == 4 &amp;amp;#124;&amp;amp;#124; n % 10 == 6 &amp;amp;#124;&amp;amp;#124; n % 10 == 9); || Yes || &lt;br /&gt;
|-&lt;br /&gt;
| fi-FI || Finnish (Finland) || nplurals=2; plural=(n != 1) || fi || nplurals=2; plural=n != 1; || No || &lt;br /&gt;
|-&lt;br /&gt;
| fr || French || nplurals=2; plural=(n &amp;gt; 1) || fr || nplurals=2; plural=n &amp;gt; 1; || No || &lt;br /&gt;
|-&lt;br /&gt;
| ka-GE || Georgian (Georgia) || nplurals=1; plural=0 || ka || nplurals=2; plural=n != 1; || Yes || &lt;br /&gt;
|-&lt;br /&gt;
| de || German || nplurals=2; plural=(n != 1) || de || nplurals=2; plural=n != 1; || No || &lt;br /&gt;
|-&lt;br /&gt;
| el || Greek || nplurals=2; plural=(n != 1) || el || nplurals=2; plural=n != 1; || No || &lt;br /&gt;
|-&lt;br /&gt;
| gu || Gujarati || nplurals=2; plural=(n != 1) || gu || nplurals=2; plural=n &amp;gt; 1; || Yes || &lt;br /&gt;
|-&lt;br /&gt;
| he || Hebrew || nplurals=2; plural=(n != 1) || he || nplurals=4; plural= (n == 1) ? 0 : ((n == 2) ? 1 : ((n &amp;gt; 10 &amp;amp;&amp;amp; n % 10 == 0) ? 2 : 3)); || Yes || &lt;br /&gt;
|-&lt;br /&gt;
| hi || Hindi || nplurals=2; plural=(n != 1) || hi || nplurals=2; plural=n &amp;gt; 1; || Yes || &lt;br /&gt;
|-&lt;br /&gt;
| hu || Hungarian || nplurals=2; plural=(n != 1) || hu || nplurals=2; plural=n != 1; || No || &lt;br /&gt;
|-&lt;br /&gt;
| id || Indonesian || nplurals=1; plural=0 || id || nplurals=1; plural=0; || No || &lt;br /&gt;
|-&lt;br /&gt;
| it || Italian || nplurals=2; plural=(n != 1) || it || nplurals=2; plural=n != 1; || No || &lt;br /&gt;
|-&lt;br /&gt;
| ja || Japanese || nplurals=1; plural=0 || ja || nplurals=1; plural=0; || No || &lt;br /&gt;
|-&lt;br /&gt;
| kn || Kannada || nplurals=2; plural=(n!=1) || kn || nplurals=2; plural=n &amp;gt; 1; || Yes || &lt;br /&gt;
|-&lt;br /&gt;
| ks || Kashmiri || nplurals=2; plural=(n != 1) || ks || nplurals=2; plural=n != 1; || No || &lt;br /&gt;
|-&lt;br /&gt;
| kok || Konkani || nplurals=2; plural=(n != 1) || kok || nplurals=2; plural=n != 1; || No || &lt;br /&gt;
|-&lt;br /&gt;
| ko-KR || Korean (South Korea) || nplurals=1; plural=0 || ko || nplurals=1; plural=0; || No || &lt;br /&gt;
|-&lt;br /&gt;
| lo || Lao || nplurals=1; plural=0 || lo || nplurals=1; plural=0; || No || &lt;br /&gt;
|-&lt;br /&gt;
| mai || Maithili || nplurals=2; plural=(n != 1) || mai || nplurals=2; plural=n != 1; || No || &lt;br /&gt;
|-&lt;br /&gt;
| mni || Manipuri || nplurals=2; plural=(n != 1) || mni || nplurals=2; plural=n != 1; || No || &lt;br /&gt;
|-&lt;br /&gt;
| mr || Marathi || nplurals=2; plural=(n != 1) || mr || nplurals=2; plural=n != 1; || No || &lt;br /&gt;
|-&lt;br /&gt;
| ne || Nepali || nplurals=2; plural=(n != 1) || ne || nplurals=2; plural=n != 1; || No || &lt;br /&gt;
|-&lt;br /&gt;
| fa || Persian || nplurals=1; plural=0 || fa || nplurals=2; plural=n &amp;gt; 1; || Yes || &lt;br /&gt;
|-&lt;br /&gt;
| pl-PL || Polish (Poland) || nplurals=3; plural=(n==1 ? 0 : n%10&amp;gt;=2 &amp;amp;&amp;amp; n%10&amp;lt;=4 &amp;amp;&amp;amp; (n%100&amp;lt;10 &amp;amp;#124;&amp;amp;#124; n%100&amp;gt;=20) ? 1 : 2) || pl || nplurals=3; plural= n==1 ? 0 : n%10&amp;gt;=2 &amp;amp;&amp;amp; n%10&amp;lt;=4 &amp;amp;&amp;amp; (n%100&amp;lt;10 &amp;amp;#124;&amp;amp;#124; n%100&amp;gt;=20) ? 1 : 2; || No || &lt;br /&gt;
|-&lt;br /&gt;
| pt || Portuguese || nplurals=2; plural=(n != 1) || pt || nplurals=2; plural=n &amp;gt; 1; || Yes || &lt;br /&gt;
|-&lt;br /&gt;
| pt-BR || Portuguese (Brazil) || nplurals=2; plural=(n &amp;gt; 1) || pt_BR || nplurals=2; plural=n &amp;gt; 1; || No || &lt;br /&gt;
|-&lt;br /&gt;
| pa-IN || Punjabi (India) || nplurals=2; plural=(n != 1) || pa || nplurals=2; plural=n &amp;gt; 1; || Yes || &lt;br /&gt;
|-&lt;br /&gt;
| Ro || Romanian || nplurals=3; plural=(n==1 ? 0 : (n==0 &amp;amp;#124;&amp;amp;#124; (n%100 &amp;gt; 0 &amp;amp;&amp;amp; n%100 &amp;lt; 20)) ? 1 : 2); || ro || nplurals=3; plural= n==1 ? 0 : (n==0 &amp;amp;#124;&amp;amp;#124; (n%100 &amp;gt; 0 &amp;amp;&amp;amp; n%100 &amp;lt; 20)) ? 1 : 2; || Yes || The language code format differs from the standard convention.&lt;br /&gt;
|-&lt;br /&gt;
| ru || Russian || nplurals=3; plural=(n%10==1 &amp;amp;&amp;amp; n%100!=11 ? 0 : n%10&amp;gt;=2 &amp;amp;&amp;amp; n%10&amp;lt;=4 &amp;amp;&amp;amp; (n%100&amp;lt;10 &amp;amp;#124;&amp;amp;#124; n%100&amp;gt;=20) ? 1 : 2) || ru || nplurals=3; plural= n%10==1 &amp;amp;&amp;amp; n%100!=11 ? 0 : n%10&amp;gt;=2 &amp;amp;&amp;amp; n%10&amp;lt;=4 &amp;amp;&amp;amp; (n%100&amp;lt;10 &amp;amp;#124;&amp;amp;#124; n%100&amp;gt;=20) ? 1 : 2; || No || &lt;br /&gt;
|-&lt;br /&gt;
| sr || Serbian || nplurals=3; plural=(n%10==1 &amp;amp;&amp;amp; n%100!=11 ? 0 : n%10&amp;gt;=2 &amp;amp;&amp;amp; n%10&amp;lt;=4 &amp;amp;&amp;amp; (n%100&amp;lt;10 &amp;amp;#124;&amp;amp;#124; n%100&amp;gt;=20) ? 1 : 2) || sr || nplurals=3; plural= n%10==1 &amp;amp;&amp;amp; n%100!=11 ? 0 : n%10&amp;gt;=2 &amp;amp;&amp;amp; n%10&amp;lt;=4 &amp;amp;&amp;amp; (n%100&amp;lt;10 &amp;amp;#124;&amp;amp;#124; n%100&amp;gt;=20) ? 1 : 2; || No || &lt;br /&gt;
|-&lt;br /&gt;
| sl-SI || Slovenian (Slovenia) || nplurals=4; plural=(n%100==1 ? 1 : n%100==2 ? 2 : n%100==3 &amp;amp;#124;&amp;amp;#124; n%100==4 ? 3 : 0) || sl || nplurals=4; plural= n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 &amp;amp;#124;&amp;amp;#124; n%100==4 ? 2 : 3; || Yes || &lt;br /&gt;
|-&lt;br /&gt;
| es || Spanish || nplurals=2; plural=(n != 1) || es || nplurals=2; plural=n != 1; || No || &lt;br /&gt;
|-&lt;br /&gt;
| es-MX || Spanish (Mexico) || nplurals=2; plural=(n != 1) || es_MX || nplurals=2; plural=n != 1; || No || &lt;br /&gt;
|-&lt;br /&gt;
| ta || Tamil || nplurals=2; plural=(n != 1) || ta || nplurals=2; plural=n != 1; || No || &lt;br /&gt;
|-&lt;br /&gt;
| te-IN || Telugu (India) || nplurals=2; plural=(n != 1) || te || nplurals=2; plural=n != 1; || No || &lt;br /&gt;
|-&lt;br /&gt;
| Th || Thai || nplurals=1; plural=0 || th || nplurals=1; plural=0; || No || Identical plural logic, but an alternative code 'Th' also exists.&lt;br /&gt;
|-&lt;br /&gt;
| tr-TR || Turkish (Turkey) || nplurals=2; plural=(n&amp;gt;1) || tr || nplurals=2; plural=n != 1; || Yes || &lt;br /&gt;
|-&lt;br /&gt;
| ur || Urdu || nplurals=2; plural=(n != 1) || ur || nplurals=2; plural=n != 1; || No || &lt;br /&gt;
|-&lt;br /&gt;
| vi-VN || Vietnamese (Vietnam) || nplurals=1; plural=0 || vi || nplurals=1; plural=0; || No || &lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Damekyung98</name></author>	</entry>

	<entry>
		<id>https://wiki.openstack.org/w/index.php?title=I18nTeam/Migration-to-weblate&amp;diff=187084</id>
		<title>I18nTeam/Migration-to-weblate</title>
		<link rel="alternate" type="text/html" href="https://wiki.openstack.org/w/index.php?title=I18nTeam/Migration-to-weblate&amp;diff=187084"/>
				<updated>2026-01-04T03:51:33Z</updated>
		
		<summary type="html">&lt;p&gt;Damekyung98: /* List of projects and status */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Migration to weblate ==&lt;br /&gt;
&lt;br /&gt;
=== Who's joining the migration project ===&lt;br /&gt;
* Ian Y. Choi (Manager)&lt;br /&gt;
* Seongsoo Cho&lt;br /&gt;
* Kuemjong Jeong&lt;br /&gt;
* Nayeon Kim&lt;br /&gt;
* Sion Shin&lt;br /&gt;
* Gwangil Kim&lt;br /&gt;
* DaGyeong Kim&lt;br /&gt;
&lt;br /&gt;
=== Planning a weblate migration schedule ===&lt;br /&gt;
You can find more details about each task below.&lt;br /&gt;
&lt;br /&gt;
* Define the scope of target test projects&lt;br /&gt;
** All vs. a few projects (e.g., openstack-manuals, nova, i18n, horizon)&lt;br /&gt;
* Make Translation Infrastructure Scripts compatible with Weblate&lt;br /&gt;
** Weblate project creation with settings if the target project is not existing on the platform&lt;br /&gt;
*** (If it is not supported, Weblate projects will be created manually)&lt;br /&gt;
*** Testing needs to be performed locally, since the scripts are executed on 06:00 UTC daily.&lt;br /&gt;
* ZuuL Integration Test&lt;br /&gt;
** Determine when to test (e.g., Test methodology without waiting at 06:00 UTC?)&lt;br /&gt;
** Integration test with all translation target projects&lt;br /&gt;
* Making tools for extracting statistical data from Weblate&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Action Item ===&lt;br /&gt;
&lt;br /&gt;
==== Define the scope of target test projects ====&lt;br /&gt;
* Configure Weblate with the information set in Zanata.&lt;br /&gt;
* User information is not migrated.&lt;br /&gt;
&lt;br /&gt;
====  Make Translation Infrastructure Scripts compatible with Weblate ====&lt;br /&gt;
* WIP patch to support Weblate for https://opendev.org/openstack/openstack-zuul-jobs/src/branch/master/roles/prepare-zanata-client/files/&lt;br /&gt;
&lt;br /&gt;
====  Zuul Integration Test ====&lt;br /&gt;
Create and test a ZuuL Job that performs the following tasks&lt;br /&gt;
* Uploading translation files to Weblate when new changes are made to your project&lt;br /&gt;
* Upload translations from Weblate to your project every day at 06 UTC&lt;br /&gt;
&lt;br /&gt;
==== Making tools for extracting statistical data from Weblate ====&lt;br /&gt;
* weblate_userinfo.py : Done ( https://review.opendev.org/c/openstack/i18n/+/893361 ) &lt;br /&gt;
** 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.&lt;br /&gt;
* weblate_users.py : Done ( https://review.opendev.org/c/openstack/i18n/+/895763 ) &lt;br /&gt;
** Generates a list of Weblate language contributors.&lt;br /&gt;
* weblate_utils.py : Done ( https://review.opendev.org/c/openstack/i18n/+/896308 )&lt;br /&gt;
** Provides basic classes used by the other scripts&lt;br /&gt;
*** IniConfig class to get the key and url for the weblate server&lt;br /&gt;
*** WeblateRestService class that communicates with the Weblate REST API&lt;br /&gt;
* weblate_stats.py : Working ( https://review.opendev.org/c/openstack/i18n/+/896306 ) &lt;br /&gt;
** (describe the role of the tool )&lt;br /&gt;
* weblate_records.py : Working  ( https://review.opendev.org/c/openstack/i18n/+/896306 ) &lt;br /&gt;
** (describe the role of the tool )&lt;br /&gt;
&lt;br /&gt;
=== Migration plan ===&lt;br /&gt;
&lt;br /&gt;
==== Component Mapping ====&lt;br /&gt;
The following table defines the structural mapping between Zanata and Weblate to ensure consistency during migration and resource synchronization.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&lt;br /&gt;
! Zanata !! Weblate !! Description&lt;br /&gt;
|-&lt;br /&gt;
| '''Project''' || '''Project''' || Top-level organizational unit.&lt;br /&gt;
|-&lt;br /&gt;
| '''Version''' || '''Category''' || Versions in Zanata are mapped to Categories in Weblate.&lt;br /&gt;
|-&lt;br /&gt;
| '''Document''' || '''Component''' || Individual translation resources or files.&lt;br /&gt;
|-&lt;br /&gt;
| '''Language''' || '''Language''' || Target locales for translation.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Naming Convention ====&lt;br /&gt;
&lt;br /&gt;
===== Project and Category =====&lt;br /&gt;
To maintain structural hierarchy, Zanata's organizational units are mapped directly to Weblate as follows:&lt;br /&gt;
* '''Project''': Zanata Project names map to Weblate Project names.&lt;br /&gt;
* '''Category''': Zanata Version names map to Weblate Category names.&lt;br /&gt;
&lt;br /&gt;
===== Component Identification =====&lt;br /&gt;
Unlike Zanata, which uses directory paths to distinguish documents, Weblate requires unique component names within the same project/category. &lt;br /&gt;
&lt;br /&gt;
To prevent naming conflicts when multiple modules exist, we use a structured naming convention:&lt;br /&gt;
* '''Format:''' `&amp;lt;module_name&amp;gt;-&amp;lt;project_kind&amp;gt;`&lt;br /&gt;
* '''Separator:''' A hyphen (`-`) is used as the standard separator.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 80%;&amp;quot;&lt;br /&gt;
! Zanata Document Name !! Naming Collision !! Resolved Weblate Component Name&lt;br /&gt;
|-&lt;br /&gt;
| horizon/locale/django || django (Conflict) || '''horizon-django'''&lt;br /&gt;
|-&lt;br /&gt;
| openstack_dashboard/locale/django || django (Conflict) || '''openstack-dashboard-django'''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Languages =====&lt;br /&gt;
Weblate follows the existing Zanata language code convention to ensure seamless resource mapping.&lt;br /&gt;
&lt;br /&gt;
* '''Format:''' `language_COUNTRY` (e.g., `en_US`, `ko_KR`)&lt;br /&gt;
* '''Casing Rules:'''&lt;br /&gt;
** '''Language:''' Always lowercase. &lt;br /&gt;
** '''Country:''' Always uppercase.&lt;br /&gt;
** For neutral languages without a specific region, only the lowercase language code is used (e.g., `ko`, `ja`, `fr`).&lt;br /&gt;
&lt;br /&gt;
: '''Note:''' For detailed rules regarding plural forms, please refer to: [[Language Plurals]]&lt;br /&gt;
&lt;br /&gt;
==== Translation Accuracy Metrics ====&lt;br /&gt;
Due to inconsistent word count calculations across different translation platforms, we measure accuracy by the number of strings rather than word count.&lt;br /&gt;
&lt;br /&gt;
We evaluate translation accuracy using the following metrics:&lt;br /&gt;
* Source strings: The total number of original English messages that need to be translated.&lt;br /&gt;
* Translated strings: The number of messages that have been successfully translated into the target language.&lt;br /&gt;
&lt;br /&gt;
We calculate accuracy based on the ratio of accurate strings across all versions, considering both source strings and translated strings.&lt;br /&gt;
&lt;br /&gt;
What gets checked:&lt;br /&gt;
* Total string counts (source and translated)&lt;br /&gt;
* Translation completion rates&lt;br /&gt;
* File-level comparison of all translated files between Zanata and Weblate to verify data integrity&lt;br /&gt;
&lt;br /&gt;
=== List of projects and status ===&lt;br /&gt;
&lt;br /&gt;
==== Migration Scope ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Item !! Count&lt;br /&gt;
|-&lt;br /&gt;
| Total projects || 127&lt;br /&gt;
|-&lt;br /&gt;
| Total versions || 12&lt;br /&gt;
|-&lt;br /&gt;
| Total Languages || 54&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Version ====&lt;br /&gt;
We determined the migration version based on the branches that currently exist in the main services.&lt;br /&gt;
Note: Some projects may not have this branch.&lt;br /&gt;
&lt;br /&gt;
Versions to migrate:&lt;br /&gt;
* master&lt;br /&gt;
* stable/2025.2&lt;br /&gt;
* stable/2025.1&lt;br /&gt;
* stable/2024.2&lt;br /&gt;
* stable/2024.1&lt;br /&gt;
&lt;br /&gt;
: '''Note:''' &amp;quot;unmaintained/*&amp;quot; branches are not included in the migration scope. &lt;br /&gt;
&lt;br /&gt;
==== Migration Status ====&lt;br /&gt;
For more details about accuracy, please refer to the Launchpad bugs.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Project !! Progress status !! Accuracy !! Launchpad Bug !! Contributor !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| cloudkitty-dashboard || In Progress || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2121053 || DaGyeong Kim || N/A&lt;br /&gt;
|-&lt;br /&gt;
| designate-dashboard || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119196 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| freezer-web-ui || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2124944 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| heat-dashboard || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119199 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| ironic-ui || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119203 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| manila-ui || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119204 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| magnum-ui || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119200 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| networking-bgpvpn || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119207 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| neutron-fwaas-dashboard || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119206 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| neutron-vpnaas-dashboard || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119388 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| octavia-dashboard || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119197 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| trove-dashboard || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119201 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| zaqar-ui || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119468 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| zun-ui || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119205 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| horizon || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2125039 || N/A || N/A&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Etherpads ===&lt;br /&gt;
* [https://etherpad.opendev.org/p/vancouver-forum-i18n OpenInfra Summit Vancouver 2023 Forum]&lt;br /&gt;
* [https://etherpad.opendev.org/p/i18n-weblate i18n weblate migration]&lt;/div&gt;</summary>
		<author><name>Damekyung98</name></author>	</entry>

	<entry>
		<id>https://wiki.openstack.org/w/index.php?title=Language_Plurals&amp;diff=187083</id>
		<title>Language Plurals</title>
		<link rel="alternate" type="text/html" href="https://wiki.openstack.org/w/index.php?title=Language_Plurals&amp;diff=187083"/>
				<updated>2026-01-04T03:30:19Z</updated>
		
		<summary type="html">&lt;p&gt;Damekyung98: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
To maintain consistency during the migration/integration process, we strictly adhere to the Zanata language code format.&lt;br /&gt;
&lt;br /&gt;
In all cases, Zanata's plural forms are prioritized. &lt;br /&gt;
* Langauge code format: Zanata Language Codes.&lt;br /&gt;
* Plurals: If Weblate’s plural rules differ from Zanata’s, the Zanata rule must be applied to ensure compatibility with existing localized resources. Specifically, plurals should be enclosed in () as per the Zanata format.&lt;br /&gt;
&lt;br /&gt;
: '''Note:''' The presence or absence of parentheses () is not considered when determining plural identity.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Language Code (Zanata) !! Language Name !! Plurals (Zanata) !! Language Code (Weblate) !! Plurals (Weblate) !! Different? !! Note&lt;br /&gt;
|-&lt;br /&gt;
| sq || Albanian || nplurals=2; plural=(n != 1) || sq || nplurals=2; plural=n != 1; || No || &lt;br /&gt;
|-&lt;br /&gt;
| ar || Arabic || nplurals=6; plural= n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100&amp;gt;=3 &amp;amp;&amp;amp; n%100&amp;lt;=10 ? 3 : n%100&amp;gt;=11 ? 4 : 5; || ar || nplurals=6; plural= n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100&amp;gt;=3 &amp;amp;&amp;amp; n%100&amp;lt;=10 ? 3 : n%100&amp;gt;=11 ? 4 : 5; || No || &lt;br /&gt;
|-&lt;br /&gt;
| as || Assamese || nplurals=2; plural=(n != 1) || as || nplurals=2; plural=n &amp;gt; 1; || Yes || &lt;br /&gt;
|-&lt;br /&gt;
| bn-IN || Bengali (India) || nplurals=2; plural=(n != 1) || bn_IN || nplurals=2; plural=n &amp;gt; 1; || Yes || &lt;br /&gt;
|-&lt;br /&gt;
| brx || Bodo || nplurals=2; plural=(n != 1) || brx || nplurals=2; plural=n != 1; || No || &lt;br /&gt;
|-&lt;br /&gt;
| bg-BG || Bulgarian (Bulgaria) || nplurals=2; plural=(n != 1) || bg || nplurals=2; plural=n != 1; || No || &lt;br /&gt;
|-&lt;br /&gt;
| ca || Catalan || nplurals=2; plural=(n != 1) || ca || nplurals=2; plural=n != 1; || No || &lt;br /&gt;
|-&lt;br /&gt;
| zh-CN || Chinese (China) || nplurals=1; plural=0 || zh_Hans || nplurals=1; plural=0; || No || &lt;br /&gt;
|-&lt;br /&gt;
| zh-TW || Chinese (Taiwan) || nplurals=1; plural=0 || zh_Hant || nplurals=1; plural=0; || No || &lt;br /&gt;
|-&lt;br /&gt;
| cs || Czech || nplurals=3; plural=(n==1) ? 0 : (n&amp;gt;=2 &amp;amp;&amp;amp; n&amp;lt;=4) ? 1 : 2 || cs || nplurals=3; plural=(n==1) ? 0 : (n&amp;gt;=2 &amp;amp;&amp;amp; n&amp;lt;=4) ? 1 : 2; || No || &lt;br /&gt;
|-&lt;br /&gt;
| nl-NL || Dutch (Netherlands) || nplurals=2; plural=(n != 1) || nl || nplurals=2; plural=n != 1; || No || &lt;br /&gt;
|-&lt;br /&gt;
| en-AU || English (Australia) || nplurals=2; plural=(n != 1) || en_AU || nplurals=2; plural=n != 1; || No || &lt;br /&gt;
|-&lt;br /&gt;
| en-GB || English (United Kingdom) || nplurals=2; plural=(n != 1) || en_GB || nplurals=2; plural=n != 1; || No || &lt;br /&gt;
|-&lt;br /&gt;
| en-US || English (United States) || nplurals=2; plural=(n != 1) || en_US || nplurals=2; plural=n != 1; || No || &lt;br /&gt;
|-&lt;br /&gt;
| eo || Esperanto || nplurals=2; plural=(n != 1) || eo || nplurals=2; plural=n != 1; || No || &lt;br /&gt;
|-&lt;br /&gt;
| fil || Filipino || nplurals=2; plural=n &amp;gt; 1 || fil || nplurals=2; plural=n != 1 &amp;amp;&amp;amp; n != 2 &amp;amp;&amp;amp; n != 3 &amp;amp;&amp;amp; (n % 10 == 4 &amp;amp;#124;&amp;amp;#124; n % 10 == 6 &amp;amp;#124;&amp;amp;#124; n % 10 == 9); || Yes || &lt;br /&gt;
|-&lt;br /&gt;
| fi-FI || Finnish (Finland) || nplurals=2; plural=(n != 1) || fi || nplurals=2; plural=n != 1; || No || &lt;br /&gt;
|-&lt;br /&gt;
| fr || French || nplurals=2; plural=(n &amp;gt; 1) || fr || nplurals=2; plural=n &amp;gt; 1; || No || &lt;br /&gt;
|-&lt;br /&gt;
| ka-GE || Georgian (Georgia) || nplurals=1; plural=0 || ka || nplurals=2; plural=n != 1; || Yes || &lt;br /&gt;
|-&lt;br /&gt;
| de || German || nplurals=2; plural=(n != 1) || de || nplurals=2; plural=n != 1; || No || &lt;br /&gt;
|-&lt;br /&gt;
| el || Greek || nplurals=2; plural=(n != 1) || el || nplurals=2; plural=n != 1; || No || &lt;br /&gt;
|-&lt;br /&gt;
| gu || Gujarati || nplurals=2; plural=(n != 1) || gu || nplurals=2; plural=n &amp;gt; 1; || Yes || &lt;br /&gt;
|-&lt;br /&gt;
| he || Hebrew || nplurals=2; plural=(n != 1) || he || nplurals=4; plural= (n == 1) ? 0 : ((n == 2) ? 1 : ((n &amp;gt; 10 &amp;amp;&amp;amp; n % 10 == 0) ? 2 : 3)); || Yes || &lt;br /&gt;
|-&lt;br /&gt;
| hi || Hindi || nplurals=2; plural=(n != 1) || hi || nplurals=2; plural=n &amp;gt; 1; || Yes || &lt;br /&gt;
|-&lt;br /&gt;
| hu || Hungarian || nplurals=2; plural=(n != 1) || hu || nplurals=2; plural=n != 1; || No || &lt;br /&gt;
|-&lt;br /&gt;
| id || Indonesian || nplurals=1; plural=0 || id || nplurals=1; plural=0; || No || &lt;br /&gt;
|-&lt;br /&gt;
| it || Italian || nplurals=2; plural=(n != 1) || it || nplurals=2; plural=n != 1; || No || &lt;br /&gt;
|-&lt;br /&gt;
| ja || Japanese || nplurals=1; plural=0 || ja || nplurals=1; plural=0; || No || &lt;br /&gt;
|-&lt;br /&gt;
| kn || Kannada || nplurals=2; plural=(n!=1) || kn || nplurals=2; plural=n &amp;gt; 1; || Yes || &lt;br /&gt;
|-&lt;br /&gt;
| ks || Kashmiri || nplurals=2; plural=(n != 1) || ks || nplurals=2; plural=n != 1; || No || &lt;br /&gt;
|-&lt;br /&gt;
| kok || Konkani || nplurals=2; plural=(n != 1) || kok || nplurals=2; plural=n != 1; || No || &lt;br /&gt;
|-&lt;br /&gt;
| ko-KR || Korean (South Korea) || nplurals=1; plural=0 || ko || nplurals=1; plural=0; || No || &lt;br /&gt;
|-&lt;br /&gt;
| lo || Lao || nplurals=1; plural=0 || lo || nplurals=1; plural=0; || No || &lt;br /&gt;
|-&lt;br /&gt;
| mai || Maithili || nplurals=2; plural=(n != 1) || mai || nplurals=2; plural=n != 1; || No || &lt;br /&gt;
|-&lt;br /&gt;
| mni || Manipuri || nplurals=2; plural=(n != 1) || mni || nplurals=2; plural=n != 1; || No || &lt;br /&gt;
|-&lt;br /&gt;
| mr || Marathi || nplurals=2; plural=(n != 1) || mr || nplurals=2; plural=n != 1; || No || &lt;br /&gt;
|-&lt;br /&gt;
| ne || Nepali || nplurals=2; plural=(n != 1) || ne || nplurals=2; plural=n != 1; || No || &lt;br /&gt;
|-&lt;br /&gt;
| fa || Persian || nplurals=1; plural=0 || fa || nplurals=2; plural=n &amp;gt; 1; || Yes || &lt;br /&gt;
|-&lt;br /&gt;
| pl-PL || Polish (Poland) || nplurals=3; plural=(n==1 ? 0 : n%10&amp;gt;=2 &amp;amp;&amp;amp; n%10&amp;lt;=4 &amp;amp;&amp;amp; (n%100&amp;lt;10 &amp;amp;#124;&amp;amp;#124; n%100&amp;gt;=20) ? 1 : 2) || pl || nplurals=3; plural= n==1 ? 0 : n%10&amp;gt;=2 &amp;amp;&amp;amp; n%10&amp;lt;=4 &amp;amp;&amp;amp; (n%100&amp;lt;10 &amp;amp;#124;&amp;amp;#124; n%100&amp;gt;=20) ? 1 : 2; || No || &lt;br /&gt;
|-&lt;br /&gt;
| pt || Portuguese || nplurals=2; plural=(n != 1) || pt || nplurals=2; plural=n &amp;gt; 1; || Yes || &lt;br /&gt;
|-&lt;br /&gt;
| pt-BR || Portuguese (Brazil) || nplurals=2; plural=(n &amp;gt; 1) || pt_BR || nplurals=2; plural=n &amp;gt; 1; || No || &lt;br /&gt;
|-&lt;br /&gt;
| pa-IN || Punjabi (India) || nplurals=2; plural=(n != 1) || pa || nplurals=2; plural=n &amp;gt; 1; || Yes || &lt;br /&gt;
|-&lt;br /&gt;
| Ro || Romanian || nplurals=3; plural=(n==1 ? 0 : (n==0 &amp;amp;#124;&amp;amp;#124; (n%100 &amp;gt; 0 &amp;amp;&amp;amp; n%100 &amp;lt; 20)) ? 1 : 2); || ro || nplurals=3; plural= n==1 ? 0 : (n==0 &amp;amp;#124;&amp;amp;#124; (n%100 &amp;gt; 0 &amp;amp;&amp;amp; n%100 &amp;lt; 20)) ? 1 : 2; || Yes || The language code format differs from the standard convention.&lt;br /&gt;
|-&lt;br /&gt;
| ru || Russian || nplurals=3; plural=(n%10==1 &amp;amp;&amp;amp; n%100!=11 ? 0 : n%10&amp;gt;=2 &amp;amp;&amp;amp; n%10&amp;lt;=4 &amp;amp;&amp;amp; (n%100&amp;lt;10 &amp;amp;#124;&amp;amp;#124; n%100&amp;gt;=20) ? 1 : 2) || ru || nplurals=3; plural= n%10==1 &amp;amp;&amp;amp; n%100!=11 ? 0 : n%10&amp;gt;=2 &amp;amp;&amp;amp; n%10&amp;lt;=4 &amp;amp;&amp;amp; (n%100&amp;lt;10 &amp;amp;#124;&amp;amp;#124; n%100&amp;gt;=20) ? 1 : 2; || No || &lt;br /&gt;
|-&lt;br /&gt;
| sr || Serbian || nplurals=3; plural=(n%10==1 &amp;amp;&amp;amp; n%100!=11 ? 0 : n%10&amp;gt;=2 &amp;amp;&amp;amp; n%10&amp;lt;=4 &amp;amp;&amp;amp; (n%100&amp;lt;10 &amp;amp;#124;&amp;amp;#124; n%100&amp;gt;=20) ? 1 : 2) || sr || nplurals=3; plural= n%10==1 &amp;amp;&amp;amp; n%100!=11 ? 0 : n%10&amp;gt;=2 &amp;amp;&amp;amp; n%10&amp;lt;=4 &amp;amp;&amp;amp; (n%100&amp;lt;10 &amp;amp;#124;&amp;amp;#124; n%100&amp;gt;=20) ? 1 : 2; || No || &lt;br /&gt;
|-&lt;br /&gt;
| sl-SI || Slovenian (Slovenia) || nplurals=4; plural=(n%100==1 ? 1 : n%100==2 ? 2 : n%100==3 &amp;amp;#124;&amp;amp;#124; n%100==4 ? 3 : 0) || sl || nplurals=4; plural= n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 &amp;amp;#124;&amp;amp;#124; n%100==4 ? 2 : 3; || Yes || &lt;br /&gt;
|-&lt;br /&gt;
| es || Spanish || nplurals=2; plural=(n != 1) || es || nplurals=2; plural=n != 1; || No || &lt;br /&gt;
|-&lt;br /&gt;
| es-MX || Spanish (Mexico) || nplurals=2; plural=(n != 1) || es_MX || nplurals=2; plural=n != 1; || No || &lt;br /&gt;
|-&lt;br /&gt;
| ta || Tamil || nplurals=2; plural=(n != 1) || ta || nplurals=2; plural=n != 1; || No || &lt;br /&gt;
|-&lt;br /&gt;
| te-IN || Telugu (India) || nplurals=2; plural=(n != 1) || te || nplurals=2; plural=n != 1; || No || &lt;br /&gt;
|-&lt;br /&gt;
| th || Thai || nplurals=1; plural=0 || th || nplurals=1; plural=0; || No || Identical plural logic, but an alternative code 'Th' also exists.&lt;br /&gt;
|-&lt;br /&gt;
| tr-TR || Turkish (Turkey) || nplurals=2; plural=(n&amp;gt;1) || tr || nplurals=2; plural=n != 1; || Yes || &lt;br /&gt;
|-&lt;br /&gt;
| ur || Urdu || nplurals=2; plural=(n != 1) || ur || nplurals=2; plural=n != 1; || No || &lt;br /&gt;
|-&lt;br /&gt;
| vi-VN || Vietnamese (Vietnam) || nplurals=1; plural=0 || vi || nplurals=1; plural=0; || No || &lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Damekyung98</name></author>	</entry>

	<entry>
		<id>https://wiki.openstack.org/w/index.php?title=Language_Plurals&amp;diff=187082</id>
		<title>Language Plurals</title>
		<link rel="alternate" type="text/html" href="https://wiki.openstack.org/w/index.php?title=Language_Plurals&amp;diff=187082"/>
				<updated>2026-01-04T03:21:49Z</updated>
		
		<summary type="html">&lt;p&gt;Damekyung98: /* Language Plurals */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
To maintain consistency during the migration/integration process, we strictly adhere to the Zanata language code format.&lt;br /&gt;
&lt;br /&gt;
In all cases, Zanata's plural forms are prioritized. &lt;br /&gt;
* Langauge code format: Zanata Language Codes.&lt;br /&gt;
* Plurals: If Weblate’s plural rules differ from Zanata’s, the Zanata rule must be applied to ensure compatibility with existing localized resources.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Language Code (Zanata) !! Language Name !! Plurals (Zanata) !! Language Code (Weblate) !! Plurals (Weblate) !! Different? !! Note&lt;br /&gt;
|-&lt;br /&gt;
| sq || Albanian || nplurals=2; plural=(n != 1) || sq || nplurals=2; plural=n != 1; || No || &lt;br /&gt;
|-&lt;br /&gt;
| ar || Arabic || nplurals=6; plural= n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100&amp;gt;=3 &amp;amp;&amp;amp; n%100&amp;lt;=10 ? 3 : n%100&amp;gt;=11 ? 4 : 5; || ar || nplurals=6; plural= n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100&amp;gt;=3 &amp;amp;&amp;amp; n%100&amp;lt;=10 ? 3 : n%100&amp;gt;=11 ? 4 : 5; || No || &lt;br /&gt;
|-&lt;br /&gt;
| as || Assamese || nplurals=2; plural=(n != 1) || as || nplurals=2; plural=n &amp;gt; 1; || Yes || &lt;br /&gt;
|-&lt;br /&gt;
| bn-IN || Bengali (India) || nplurals=2; plural=(n != 1) || bn_IN || nplurals=2; plural=n &amp;gt; 1; || Yes || &lt;br /&gt;
|-&lt;br /&gt;
| brx || Bodo || nplurals=2; plural=(n != 1) || brx || nplurals=2; plural=n != 1; || No || &lt;br /&gt;
|-&lt;br /&gt;
| bg-BG || Bulgarian (Bulgaria) || nplurals=2; plural=(n != 1) || bg || nplurals=2; plural=n != 1; || No || &lt;br /&gt;
|-&lt;br /&gt;
| ca || Catalan || nplurals=2; plural=(n != 1) || ca || nplurals=2; plural=n != 1; || No || &lt;br /&gt;
|-&lt;br /&gt;
| zh-CN || Chinese (China) || nplurals=1; plural=0 || zh_Hans || nplurals=1; plural=0; || No || &lt;br /&gt;
|-&lt;br /&gt;
| zh-TW || Chinese (Taiwan) || nplurals=1; plural=0 || zh_Hant || nplurals=1; plural=0; || No || &lt;br /&gt;
|-&lt;br /&gt;
| cs || Czech || nplurals=3; plural=(n==1) ? 0 : (n&amp;gt;=2 &amp;amp;&amp;amp; n&amp;lt;=4) ? 1 : 2 || cs || nplurals=3; plural=(n==1) ? 0 : (n&amp;gt;=2 &amp;amp;&amp;amp; n&amp;lt;=4) ? 1 : 2; || No || &lt;br /&gt;
|-&lt;br /&gt;
| nl-NL || Dutch (Netherlands) || nplurals=2; plural=(n != 1) || nl || nplurals=2; plural=n != 1; || No || &lt;br /&gt;
|-&lt;br /&gt;
| en-AU || English (Australia) || nplurals=2; plural=(n != 1) || en_AU || nplurals=2; plural=n != 1; || No || &lt;br /&gt;
|-&lt;br /&gt;
| en-GB || English (United Kingdom) || nplurals=2; plural=(n != 1) || en_GB || nplurals=2; plural=n != 1; || No || &lt;br /&gt;
|-&lt;br /&gt;
| en-US || English (United States) || nplurals=2; plural=(n != 1) || en_US || nplurals=2; plural=n != 1; || No || &lt;br /&gt;
|-&lt;br /&gt;
| eo || Esperanto || nplurals=2; plural=(n != 1) || eo || nplurals=2; plural=n != 1; || No || &lt;br /&gt;
|-&lt;br /&gt;
| fil || Filipino || nplurals=2; plural=n &amp;gt; 1 || fil || nplurals=2; plural=n != 1 &amp;amp;&amp;amp; n != 2 &amp;amp;&amp;amp; n != 3 &amp;amp;&amp;amp; (n % 10 == 4 &amp;amp;#124;&amp;amp;#124; n % 10 == 6 &amp;amp;#124;&amp;amp;#124; n % 10 == 9); || Yes || &lt;br /&gt;
|-&lt;br /&gt;
| fi-FI || Finnish (Finland) || nplurals=2; plural=(n != 1) || fi || nplurals=2; plural=n != 1; || No || &lt;br /&gt;
|-&lt;br /&gt;
| fr || French || nplurals=2; plural=(n &amp;gt; 1) || fr || nplurals=2; plural=n &amp;gt; 1; || No || &lt;br /&gt;
|-&lt;br /&gt;
| ka-GE || Georgian (Georgia) || nplurals=1; plural=0 || ka || nplurals=2; plural=n != 1; || Yes || &lt;br /&gt;
|-&lt;br /&gt;
| de || German || nplurals=2; plural=(n != 1) || de || nplurals=2; plural=n != 1; || No || &lt;br /&gt;
|-&lt;br /&gt;
| el || Greek || nplurals=2; plural=(n != 1) || el || nplurals=2; plural=n != 1; || No || &lt;br /&gt;
|-&lt;br /&gt;
| gu || Gujarati || nplurals=2; plural=(n != 1) || gu || nplurals=2; plural=n &amp;gt; 1; || Yes || &lt;br /&gt;
|-&lt;br /&gt;
| he || Hebrew || nplurals=2; plural=(n != 1) || he || nplurals=4; plural= (n == 1) ? 0 : ((n == 2) ? 1 : ((n &amp;gt; 10 &amp;amp;&amp;amp; n % 10 == 0) ? 2 : 3)); || Yes || &lt;br /&gt;
|-&lt;br /&gt;
| hi || Hindi || nplurals=2; plural=(n != 1) || hi || nplurals=2; plural=n &amp;gt; 1; || Yes || &lt;br /&gt;
|-&lt;br /&gt;
| hu || Hungarian || nplurals=2; plural=(n != 1) || hu || nplurals=2; plural=n != 1; || No || &lt;br /&gt;
|-&lt;br /&gt;
| id || Indonesian || nplurals=1; plural=0 || id || nplurals=1; plural=0; || No || &lt;br /&gt;
|-&lt;br /&gt;
| it || Italian || nplurals=2; plural=(n != 1) || it || nplurals=2; plural=n != 1; || No || &lt;br /&gt;
|-&lt;br /&gt;
| ja || Japanese || nplurals=1; plural=0 || ja || nplurals=1; plural=0; || No || &lt;br /&gt;
|-&lt;br /&gt;
| kn || Kannada || nplurals=2; plural=(n!=1) || kn || nplurals=2; plural=n &amp;gt; 1; || Yes || &lt;br /&gt;
|-&lt;br /&gt;
| ks || Kashmiri || nplurals=2; plural=(n != 1) || ks || nplurals=2; plural=n != 1; || No || &lt;br /&gt;
|-&lt;br /&gt;
| kok || Konkani || nplurals=2; plural=(n != 1) || kok || nplurals=2; plural=n != 1; || No || &lt;br /&gt;
|-&lt;br /&gt;
| ko-KR || Korean (South Korea) || nplurals=1; plural=0 || ko || nplurals=1; plural=0; || No || &lt;br /&gt;
|-&lt;br /&gt;
| lo || Lao || nplurals=1; plural=0 || lo || nplurals=1; plural=0; || No || &lt;br /&gt;
|-&lt;br /&gt;
| mai || Maithili || nplurals=2; plural=(n != 1) || mai || nplurals=2; plural=n != 1; || No || &lt;br /&gt;
|-&lt;br /&gt;
| mni || Manipuri || nplurals=2; plural=(n != 1) || mni || nplurals=2; plural=n != 1; || No || &lt;br /&gt;
|-&lt;br /&gt;
| mr || Marathi || nplurals=2; plural=(n != 1) || mr || nplurals=2; plural=n != 1; || No || &lt;br /&gt;
|-&lt;br /&gt;
| ne || Nepali || nplurals=2; plural=(n != 1) || ne || nplurals=2; plural=n != 1; || No || &lt;br /&gt;
|-&lt;br /&gt;
| fa || Persian || nplurals=1; plural=0 || fa || nplurals=2; plural=n &amp;gt; 1; || Yes || &lt;br /&gt;
|-&lt;br /&gt;
| pl-PL || Polish (Poland) || nplurals=3; plural=(n==1 ? 0 : n%10&amp;gt;=2 &amp;amp;&amp;amp; n%10&amp;lt;=4 &amp;amp;&amp;amp; (n%100&amp;lt;10 &amp;amp;#124;&amp;amp;#124; n%100&amp;gt;=20) ? 1 : 2) || pl || nplurals=3; plural= n==1 ? 0 : n%10&amp;gt;=2 &amp;amp;&amp;amp; n%10&amp;lt;=4 &amp;amp;&amp;amp; (n%100&amp;lt;10 &amp;amp;#124;&amp;amp;#124; n%100&amp;gt;=20) ? 1 : 2; || No || &lt;br /&gt;
|-&lt;br /&gt;
| pt || Portuguese || nplurals=2; plural=(n != 1) || pt || nplurals=2; plural=n &amp;gt; 1; || Yes || &lt;br /&gt;
|-&lt;br /&gt;
| pt-BR || Portuguese (Brazil) || nplurals=2; plural=(n &amp;gt; 1) || pt_BR || nplurals=2; plural=n &amp;gt; 1; || No || &lt;br /&gt;
|-&lt;br /&gt;
| pa-IN || Punjabi (India) || nplurals=2; plural=(n != 1) || pa || nplurals=2; plural=n &amp;gt; 1; || Yes || &lt;br /&gt;
|-&lt;br /&gt;
| Ro || Romanian || nplurals=3; plural=(n==1 ? 0 : (n==0 &amp;amp;#124;&amp;amp;#124; (n%100 &amp;gt; 0 &amp;amp;&amp;amp; n%100 &amp;lt; 20)) ? 1 : 2); || ro || nplurals=3; plural= n==1 ? 0 : (n==0 &amp;amp;#124;&amp;amp;#124; (n%100 &amp;gt; 0 &amp;amp;&amp;amp; n%100 &amp;lt; 20)) ? 1 : 2; || Yes || The language code format differs from the standard convention.&lt;br /&gt;
|-&lt;br /&gt;
| ru || Russian || nplurals=3; plural=(n%10==1 &amp;amp;&amp;amp; n%100!=11 ? 0 : n%10&amp;gt;=2 &amp;amp;&amp;amp; n%10&amp;lt;=4 &amp;amp;&amp;amp; (n%100&amp;lt;10 &amp;amp;#124;&amp;amp;#124; n%100&amp;gt;=20) ? 1 : 2) || ru || nplurals=3; plural= n%10==1 &amp;amp;&amp;amp; n%100!=11 ? 0 : n%10&amp;gt;=2 &amp;amp;&amp;amp; n%10&amp;lt;=4 &amp;amp;&amp;amp; (n%100&amp;lt;10 &amp;amp;#124;&amp;amp;#124; n%100&amp;gt;=20) ? 1 : 2; || No || &lt;br /&gt;
|-&lt;br /&gt;
| sr || Serbian || nplurals=3; plural=(n%10==1 &amp;amp;&amp;amp; n%100!=11 ? 0 : n%10&amp;gt;=2 &amp;amp;&amp;amp; n%10&amp;lt;=4 &amp;amp;&amp;amp; (n%100&amp;lt;10 &amp;amp;#124;&amp;amp;#124; n%100&amp;gt;=20) ? 1 : 2) || sr || nplurals=3; plural= n%10==1 &amp;amp;&amp;amp; n%100!=11 ? 0 : n%10&amp;gt;=2 &amp;amp;&amp;amp; n%10&amp;lt;=4 &amp;amp;&amp;amp; (n%100&amp;lt;10 &amp;amp;#124;&amp;amp;#124; n%100&amp;gt;=20) ? 1 : 2; || No || &lt;br /&gt;
|-&lt;br /&gt;
| sl-SI || Slovenian (Slovenia) || nplurals=4; plural=(n%100==1 ? 1 : n%100==2 ? 2 : n%100==3 &amp;amp;#124;&amp;amp;#124; n%100==4 ? 3 : 0) || sl || nplurals=4; plural= n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 &amp;amp;#124;&amp;amp;#124; n%100==4 ? 2 : 3; || Yes || &lt;br /&gt;
|-&lt;br /&gt;
| es || Spanish || nplurals=2; plural=(n != 1) || es || nplurals=2; plural=n != 1; || No || &lt;br /&gt;
|-&lt;br /&gt;
| es-MX || Spanish (Mexico) || nplurals=2; plural=(n != 1) || es_MX || nplurals=2; plural=n != 1; || No || &lt;br /&gt;
|-&lt;br /&gt;
| ta || Tamil || nplurals=2; plural=(n != 1) || ta || nplurals=2; plural=n != 1; || No || &lt;br /&gt;
|-&lt;br /&gt;
| te-IN || Telugu (India) || nplurals=2; plural=(n != 1) || te || nplurals=2; plural=n != 1; || No || &lt;br /&gt;
|-&lt;br /&gt;
| th || Thai || nplurals=1; plural=0 || th || nplurals=1; plural=0; || No || Identical plural logic, but an alternative code 'Th' also exists.&lt;br /&gt;
|-&lt;br /&gt;
| tr-TR || Turkish (Turkey) || nplurals=2; plural=(n&amp;gt;1) || tr || nplurals=2; plural=n != 1; || Yes || &lt;br /&gt;
|-&lt;br /&gt;
| ur || Urdu || nplurals=2; plural=(n != 1) || ur || nplurals=2; plural=n != 1; || No || &lt;br /&gt;
|-&lt;br /&gt;
| vi-VN || Vietnamese (Vietnam) || nplurals=1; plural=0 || vi || nplurals=1; plural=0; || No || &lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Damekyung98</name></author>	</entry>

	<entry>
		<id>https://wiki.openstack.org/w/index.php?title=I18nTeam/Migration-to-weblate&amp;diff=187059</id>
		<title>I18nTeam/Migration-to-weblate</title>
		<link rel="alternate" type="text/html" href="https://wiki.openstack.org/w/index.php?title=I18nTeam/Migration-to-weblate&amp;diff=187059"/>
				<updated>2025-12-16T05:53:42Z</updated>
		
		<summary type="html">&lt;p&gt;Damekyung98: /* List of projects and status */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Migration to weblate ==&lt;br /&gt;
&lt;br /&gt;
=== Who's joining the migration project ===&lt;br /&gt;
* Ian Y. Choi (Manager)&lt;br /&gt;
* Seongsoo Cho&lt;br /&gt;
* Kuemjong Jeong&lt;br /&gt;
* Nayeon Kim&lt;br /&gt;
* Sion Shin&lt;br /&gt;
* Gwangil Kim&lt;br /&gt;
* DaGyeong Kim&lt;br /&gt;
&lt;br /&gt;
=== Planning a weblate migration schedule ===&lt;br /&gt;
You can find more details about each task below.&lt;br /&gt;
&lt;br /&gt;
* Define the scope of target test projects&lt;br /&gt;
** All vs. a few projects (e.g., openstack-manuals, nova, i18n, horizon)&lt;br /&gt;
* Make Translation Infrastructure Scripts compatible with Weblate&lt;br /&gt;
** Weblate project creation with settings if the target project is not existing on the platform&lt;br /&gt;
*** (If it is not supported, Weblate projects will be created manually)&lt;br /&gt;
*** Testing needs to be performed locally, since the scripts are executed on 06:00 UTC daily.&lt;br /&gt;
* ZuuL Integration Test&lt;br /&gt;
** Determine when to test (e.g., Test methodology without waiting at 06:00 UTC?)&lt;br /&gt;
** Integration test with all translation target projects&lt;br /&gt;
* Making tools for extracting statistical data from Weblate&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Action Item ===&lt;br /&gt;
&lt;br /&gt;
==== Define the scope of target test projects ====&lt;br /&gt;
* Configure Weblate with the information set in Zanata.&lt;br /&gt;
* User information is not migrated.&lt;br /&gt;
&lt;br /&gt;
====  Make Translation Infrastructure Scripts compatible with Weblate ====&lt;br /&gt;
* WIP patch to support Weblate for https://opendev.org/openstack/openstack-zuul-jobs/src/branch/master/roles/prepare-zanata-client/files/&lt;br /&gt;
&lt;br /&gt;
====  Zuul Integration Test ====&lt;br /&gt;
Create and test a ZuuL Job that performs the following tasks&lt;br /&gt;
* Uploading translation files to Weblate when new changes are made to your project&lt;br /&gt;
* Upload translations from Weblate to your project every day at 06 UTC&lt;br /&gt;
&lt;br /&gt;
==== Making tools for extracting statistical data from Weblate ====&lt;br /&gt;
* weblate_userinfo.py : Done ( https://review.opendev.org/c/openstack/i18n/+/893361 ) &lt;br /&gt;
** 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.&lt;br /&gt;
* weblate_users.py : Done ( https://review.opendev.org/c/openstack/i18n/+/895763 ) &lt;br /&gt;
** Generates a list of Weblate language contributors.&lt;br /&gt;
* weblate_utils.py : Done ( https://review.opendev.org/c/openstack/i18n/+/896308 )&lt;br /&gt;
** Provides basic classes used by the other scripts&lt;br /&gt;
*** IniConfig class to get the key and url for the weblate server&lt;br /&gt;
*** WeblateRestService class that communicates with the Weblate REST API&lt;br /&gt;
* weblate_stats.py : Working ( https://review.opendev.org/c/openstack/i18n/+/896306 ) &lt;br /&gt;
** (describe the role of the tool )&lt;br /&gt;
* weblate_records.py : Working  ( https://review.opendev.org/c/openstack/i18n/+/896306 ) &lt;br /&gt;
** (describe the role of the tool )&lt;br /&gt;
&lt;br /&gt;
=== List of projects and status ===&lt;br /&gt;
&lt;br /&gt;
==== Migration Scope ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Item !! Count&lt;br /&gt;
|-&lt;br /&gt;
| Total projects || 127&lt;br /&gt;
|-&lt;br /&gt;
| Total versions || 12&lt;br /&gt;
|-&lt;br /&gt;
| Total Languages || 54&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Version =====&lt;br /&gt;
We determined the migration version based on the branches that currently exist in the main services.&lt;br /&gt;
Note: Some projects may not have this branch.&lt;br /&gt;
&lt;br /&gt;
Versions to migrate:&lt;br /&gt;
* master&lt;br /&gt;
* stable/2025.2&lt;br /&gt;
* stable/2025.1&lt;br /&gt;
* stable/2024.2&lt;br /&gt;
* stable/2024.1&lt;br /&gt;
&lt;br /&gt;
Note: &amp;quot;unmaintained/*&amp;quot; branches are not included in the migration scope. &lt;br /&gt;
&lt;br /&gt;
==== Naming Convention ====&lt;br /&gt;
&lt;br /&gt;
===== Project, Category name =====&lt;br /&gt;
* Zanata's Project names are mapped to Weblate Project names&lt;br /&gt;
* Zanata's Version names are mapped to Weblate Category names&lt;br /&gt;
&lt;br /&gt;
===== Component name =====&lt;br /&gt;
In Weblate, components cannot have the same name. &lt;br /&gt;
&lt;br /&gt;
While Zanata distinguishes components based on document paths, Weblate uses component names for identification. Therefore, when a project has multiple modules, Weblate cannot use the same component name.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To resolve this, we define component names as: `&amp;lt;module_name&amp;gt;-&amp;lt;project kind&amp;gt;`&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Zanata !! Weblate(Conflict) !! Weblate(Fixed)&lt;br /&gt;
|-&lt;br /&gt;
| horizon/locale/django || django(conflict) || horizon-django&lt;br /&gt;
|-&lt;br /&gt;
| openstack_dashboard/locale/django || django(conflict) || openstack-dashboard-django&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Note: Components use `-` as a separator.&lt;br /&gt;
&lt;br /&gt;
===== Language =====&lt;br /&gt;
&lt;br /&gt;
* Follows Zanata's language code convention&lt;br /&gt;
* Language codes are formatted as: language_COUNTRY&lt;br /&gt;
**Language name: lowercase (e.g., en, ko, ja)&lt;br /&gt;
** Country name: uppercase (e.g., US, KR, JP)&lt;br /&gt;
* For plural forms, refer to: [[Language Plurals]] &lt;br /&gt;
&lt;br /&gt;
==== Translation Accuracy Metrics ====&lt;br /&gt;
Due to inconsistent word count calculations across different translation platforms, we measure accuracy by the number of strings rather than word count.&lt;br /&gt;
&lt;br /&gt;
We evaluate translation accuracy using the following metrics:&lt;br /&gt;
* Source strings: The total number of original English messages that need to be translated.&lt;br /&gt;
* Translated strings: The number of messages that have been successfully translated into the target language.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We calculate accuracy based on the ratio of accurate strings across all versions, considering both source strings and translated strings.&lt;br /&gt;
&lt;br /&gt;
What gets checked:&lt;br /&gt;
* Total string counts (source and translated)&lt;br /&gt;
* Translation completion rates&lt;br /&gt;
* File-level comparison of all translated files between Zanata and Weblate to verify data integrity&lt;br /&gt;
&lt;br /&gt;
==== Translation Migration Status ====&lt;br /&gt;
For more details about accuracy, please refer to the Launchpad bugs.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Project !! Progress status !! Accuracy !! Launchpad Bug !! Contributor !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| cloudkitty-dashboard || In Progress || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2121053 || DaGyeong Kim || N/A&lt;br /&gt;
|-&lt;br /&gt;
| designate-dashboard || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119196 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| freezer-web-ui || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2124944 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| heat-dashboard || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119199 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| ironic-ui || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119203 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| manila-ui || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119204 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| magnum-ui || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119200 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| networking-bgpvpn || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119207 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| neutron-fwaas-dashboard || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119206 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| neutron-vpnaas-dashboard || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119388 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| octavia-dashboard || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119197 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| trove-dashboard || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119201 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| zaqar-ui || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119468 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| zun-ui || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119205 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| horizon || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2125039 || N/A || N/A&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Etherpads ===&lt;br /&gt;
* [https://etherpad.opendev.org/p/vancouver-forum-i18n OpenInfra Summit Vancouver 2023 Forum]&lt;br /&gt;
* [https://etherpad.opendev.org/p/i18n-weblate i18n weblate migration]&lt;/div&gt;</summary>
		<author><name>Damekyung98</name></author>	</entry>

	<entry>
		<id>https://wiki.openstack.org/w/index.php?title=I18nTeam/Migration-to-weblate&amp;diff=186870</id>
		<title>I18nTeam/Migration-to-weblate</title>
		<link rel="alternate" type="text/html" href="https://wiki.openstack.org/w/index.php?title=I18nTeam/Migration-to-weblate&amp;diff=186870"/>
				<updated>2025-10-28T09:45:09Z</updated>
		
		<summary type="html">&lt;p&gt;Damekyung98: /* Translation Accuracy Metrics */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Migration to weblate ==&lt;br /&gt;
&lt;br /&gt;
=== Who's joining the migration project ===&lt;br /&gt;
* Ian Y. Choi (Manager)&lt;br /&gt;
* Seongsoo Cho&lt;br /&gt;
* Kuemjong Jeong&lt;br /&gt;
* Nayeon Kim&lt;br /&gt;
* Sion Shin&lt;br /&gt;
* Gwangil Kim&lt;br /&gt;
* DaGyeong Kim&lt;br /&gt;
&lt;br /&gt;
=== Planning a weblate migration schedule ===&lt;br /&gt;
You can find more details about each task below.&lt;br /&gt;
&lt;br /&gt;
* Define the scope of target test projects&lt;br /&gt;
** All vs. a few projects (e.g., openstack-manuals, nova, i18n, horizon)&lt;br /&gt;
* Make Translation Infrastructure Scripts compatible with Weblate&lt;br /&gt;
** Weblate project creation with settings if the target project is not existing on the platform&lt;br /&gt;
*** (If it is not supported, Weblate projects will be created manually)&lt;br /&gt;
*** Testing needs to be performed locally, since the scripts are executed on 06:00 UTC daily.&lt;br /&gt;
* ZuuL Integration Test&lt;br /&gt;
** Determine when to test (e.g., Test methodology without waiting at 06:00 UTC?)&lt;br /&gt;
** Integration test with all translation target projects&lt;br /&gt;
* Making tools for extracting statistical data from Weblate&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Action Item ===&lt;br /&gt;
&lt;br /&gt;
==== Define the scope of target test projects ====&lt;br /&gt;
* Configure Weblate with the information set in Zanata.&lt;br /&gt;
* User information is not migrated.&lt;br /&gt;
&lt;br /&gt;
====  Make Translation Infrastructure Scripts compatible with Weblate ====&lt;br /&gt;
* WIP patch to support Weblate for https://opendev.org/openstack/openstack-zuul-jobs/src/branch/master/roles/prepare-zanata-client/files/&lt;br /&gt;
&lt;br /&gt;
====  Zuul Integration Test ====&lt;br /&gt;
Create and test a ZuuL Job that performs the following tasks&lt;br /&gt;
* Uploading translation files to Weblate when new changes are made to your project&lt;br /&gt;
* Upload translations from Weblate to your project every day at 06 UTC&lt;br /&gt;
&lt;br /&gt;
==== Making tools for extracting statistical data from Weblate ====&lt;br /&gt;
* weblate_userinfo.py : Done ( https://review.opendev.org/c/openstack/i18n/+/893361 ) &lt;br /&gt;
** 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.&lt;br /&gt;
* weblate_users.py : Done ( https://review.opendev.org/c/openstack/i18n/+/895763 ) &lt;br /&gt;
** Generates a list of Weblate language contributors.&lt;br /&gt;
* weblate_utils.py : Done ( https://review.opendev.org/c/openstack/i18n/+/896308 )&lt;br /&gt;
** Provides basic classes used by the other scripts&lt;br /&gt;
*** IniConfig class to get the key and url for the weblate server&lt;br /&gt;
*** WeblateRestService class that communicates with the Weblate REST API&lt;br /&gt;
* weblate_stats.py : Working ( https://review.opendev.org/c/openstack/i18n/+/896306 ) &lt;br /&gt;
** (describe the role of the tool )&lt;br /&gt;
* weblate_records.py : Working  ( https://review.opendev.org/c/openstack/i18n/+/896306 ) &lt;br /&gt;
** (describe the role of the tool )&lt;br /&gt;
&lt;br /&gt;
=== List of projects and status ===&lt;br /&gt;
&lt;br /&gt;
==== Migration Scope ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Item !! Count&lt;br /&gt;
|-&lt;br /&gt;
| Total projects || 127&lt;br /&gt;
|-&lt;br /&gt;
| Total versions || 12&lt;br /&gt;
|-&lt;br /&gt;
| Total Languages || 54&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Version =====&lt;br /&gt;
We determined the migration version based on the branches that currently exist in the main services.&lt;br /&gt;
&lt;br /&gt;
Note: Some projects may not have this branch.&lt;br /&gt;
&lt;br /&gt;
Versions to migrate:&lt;br /&gt;
* master&lt;br /&gt;
* stable/2025.2&lt;br /&gt;
* stable/2025.1&lt;br /&gt;
* stable/2024.2&lt;br /&gt;
* stable/2024.1&lt;br /&gt;
* unmaintained/2023.1&lt;br /&gt;
* unmaintained/zed&lt;br /&gt;
* unmaintained/wallaby&lt;br /&gt;
* unmaintained/victoria&lt;br /&gt;
* unmaintained/yoga&lt;br /&gt;
* unmaintained/xena&lt;br /&gt;
&lt;br /&gt;
===== Languages plurals=====&lt;br /&gt;
During the migration process, we encountered issues where the plural forms in POT and PO files do not match correctly. &lt;br /&gt;
To address this problem, we will migrate the files using the updated plural rules listed below.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Language Code !! Language Name !! Plurals&lt;br /&gt;
|-&lt;br /&gt;
| ar || Arabic || nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100&amp;gt;=3 &amp;amp;&amp;amp; n%100&amp;lt;=10 ? 3 : n%100&amp;gt;=11 ? 4 : 5;&lt;br /&gt;
|-&lt;br /&gt;
| as || Assamese || nplurals=2; plural=n &amp;gt; 1;&lt;br /&gt;
|-&lt;br /&gt;
| bg_BG || Bulgarian (Bulgaria) || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| bn_IN || Bengali (India) || nplurals=2; plural=n &amp;gt; 1;&lt;br /&gt;
|-&lt;br /&gt;
| brx || Bodo || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| ca || Catalan || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| cs || Czech || nplurals=3; plural=(n==1) ? 0 : (n&amp;gt;=2 &amp;amp;&amp;amp; n&amp;lt;=4) ? 1 : 2;&lt;br /&gt;
|-&lt;br /&gt;
| de || German || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| el || Greek || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| en_GB || English (United Kingdom) || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| en_US || English (United States) || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| en_AU || English (Australia) || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| eo || Esperanto || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| es || Spanish || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| es_MX || Spanish (Mexico) || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| fa || Persian || nplurals=2; plural=n &amp;gt; 1;&lt;br /&gt;
|-&lt;br /&gt;
| fi_FI || Finnish (Finland) || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| fil || Filipino || nplurals=2; plural=n != 1 &amp;amp;&amp;amp; n != 2 &amp;amp;&amp;amp; n != 3 &amp;amp;&amp;amp; (n % 10 == 4 &amp;lt;nowiki&amp;gt;||&amp;lt;/nowiki&amp;gt; n % 10 == 6 &amp;lt;nowiki&amp;gt;||&amp;lt;/nowiki&amp;gt; n % 10 == 9);&lt;br /&gt;
|-&lt;br /&gt;
| fr || French || nplurals=2; plural=n &amp;gt; 1;&lt;br /&gt;
|-&lt;br /&gt;
| gu || Gujarati || nplurals=2; plural=n &amp;gt; 1;&lt;br /&gt;
|-&lt;br /&gt;
| he || Hebrew || nplurals=4; plural=(n == 1) ? 0 : ((n == 2) ? 1 : ((n &amp;gt; 10 &amp;amp;&amp;amp; n % 10 == 0) ? 2 : 3));&lt;br /&gt;
|-&lt;br /&gt;
| hi || Hindi || nplurals=2; plural=n &amp;gt; 1;&lt;br /&gt;
|-&lt;br /&gt;
| hu || Hungarian || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| id || Indonesian || nplurals=1; plural=0;&lt;br /&gt;
|-&lt;br /&gt;
| it || Italian || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| ja || Japanese || nplurals=1; plural=0;&lt;br /&gt;
|-&lt;br /&gt;
| ka_GE || Georgian (Georgia) || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| kn || Kannada || nplurals=2; plural=n &amp;gt; 1;&lt;br /&gt;
|-&lt;br /&gt;
| ko_KR || Korean (Korea) || nplurals=1; plural=0;&lt;br /&gt;
|-&lt;br /&gt;
| kok || Konkani || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| ks || Kashmiri || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| lo || Lao || nplurals=1; plural=0;&lt;br /&gt;
|-&lt;br /&gt;
| mai || Maithili || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| mni || Manipuri || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| mr || Marathi || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| ne || Nepali || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| nl_NL || Dutch (Netherlands) || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| pa_IN || Punjabi (India) || nplurals=2; plural=n &amp;gt; 1;&lt;br /&gt;
|-&lt;br /&gt;
| pl_PL || Polish (Poland) || nplurals=3; plural=n==1 ? 0 : n%10&amp;gt;=2 &amp;amp;&amp;amp; n%10&amp;lt;=4 &amp;amp;&amp;amp; (n%100&amp;lt;10 &amp;lt;nowiki&amp;gt;||&amp;lt;/nowiki&amp;gt; n%100&amp;gt;=20) ? 1 : 2;&lt;br /&gt;
|-&lt;br /&gt;
| pt || Portuguese || nplurals=2; plural=n &amp;gt; 1;&lt;br /&gt;
|-&lt;br /&gt;
| pt_BR || Portuguese (Brazil) || nplurals=2; plural=n &amp;gt; 1;&lt;br /&gt;
|-&lt;br /&gt;
| ro || Romanian || nplurals=3; plural=n==1 ? 0 : (n==0 &amp;lt;nowiki&amp;gt;||&amp;lt;/nowiki&amp;gt; (n%100 &amp;gt; 0 &amp;amp;&amp;amp; n%100 &amp;lt; 20)) ? 1 : 2;&lt;br /&gt;
|-&lt;br /&gt;
| ru || Russian || nplurals=3; plural=n%10==1 &amp;amp;&amp;amp; n%100!=11 ? 0 : n%10&amp;gt;=2 &amp;amp;&amp;amp; n%10&amp;lt;=4 &amp;amp;&amp;amp; (n%100&amp;lt;10 &amp;lt;nowiki&amp;gt;||&amp;lt;/nowiki&amp;gt; n%100&amp;gt;=20) ? 1 : 2;&lt;br /&gt;
|-&lt;br /&gt;
| sl_SI || Slovenian (Slovenia) || nplurals=4; plural=n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 &amp;lt;nowiki&amp;gt;||&amp;lt;/nowiki&amp;gt; n%100==4 ? 2 : 3;&lt;br /&gt;
|-&lt;br /&gt;
| sq || Albanian || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| sr || Serbian || nplurals=3; plural=n%10==1 &amp;amp;&amp;amp; n%100!=11 ? 0 : n%10&amp;gt;=2 &amp;amp;&amp;amp; n%10&amp;lt;=4 &amp;amp;&amp;amp; (n%100&amp;lt;10 &amp;lt;nowiki&amp;gt;||&amp;lt;/nowiki&amp;gt; n%100&amp;gt;=20) ? 1 : 2;&lt;br /&gt;
|-&lt;br /&gt;
| ta || Tamil || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| te_IN || Telugu (India) || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| th || Thai || nplurals=1; plural=0;&lt;br /&gt;
|-&lt;br /&gt;
| tr_TR || Turkish (Turkey) || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| ur || Urdu || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| vi_VN || Vietnamese (Vietnam) || nplurals=1; plural=0;&lt;br /&gt;
|-&lt;br /&gt;
| zh_CN || Chinese (China) || nplurals=1; plural=0;&lt;br /&gt;
|-&lt;br /&gt;
| zh_TW || Chinese (Taiwan) || nplurals=1; plural=0;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* [[Language Plurals]] (deprecated)&lt;br /&gt;
&lt;br /&gt;
==== Translation Accuracy Metrics ====&lt;br /&gt;
Due to inconsistent word count calculations across different translation platforms, we measure accuracy by the number of strings rather than word count. &lt;br /&gt;
&lt;br /&gt;
We evaluate translation accuracy using the following metrics:&lt;br /&gt;
* Source strings: The total number of original English messages that need to be translated.&lt;br /&gt;
* Translated strings: The number of messages that have been successfully translated into the target language.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We calculate accuracy based on the ratio of accurate strings across all versions, considering both source strings and translated strings.&lt;br /&gt;
&lt;br /&gt;
What gets checked:&lt;br /&gt;
* Is the source string data accurate? (Pass/Fail)&lt;br /&gt;
* Is the translated string data accurate? (Pass/Fail)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Accuracy Formula:&lt;br /&gt;
* (Number of passed accuracy checks / Total accuracy checks) × 100&lt;br /&gt;
&lt;br /&gt;
==== Translation Migration Status ====&lt;br /&gt;
For more details about accuracy, please refer to the Launchpad bugs.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Project !! Progress status !! Accuracy(%) !! Launchpad Bug !! Contributor !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| cloudkitty-dashboard || In Progress || 4/12(33%) || https://bugs.launchpad.net/openstack-i18n/+bug/2121053 || DaGyeong Kim || N/A&lt;br /&gt;
|-&lt;br /&gt;
| designate-dashboard || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119196 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| freezer-web-ui || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2124944 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| heat-dashboard || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119199 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| ironic-ui || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119203 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| manila-ui || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119204 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| magnum-ui || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119200 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| networking-bgpvpn || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119207 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| neutron-fwaas-dashboard || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119206 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| neutron-vpnaas-dashboard || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119388 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| octavia-dashboard || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119197 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| trove-dashboard || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119201 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| zaqar-ui || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119468 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| zun-ui || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119205 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| horizon || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2125039 || N/A || N/A&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Etherpads ===&lt;br /&gt;
* [https://etherpad.opendev.org/p/vancouver-forum-i18n OpenInfra Summit Vancouver 2023 Forum]&lt;br /&gt;
* [https://etherpad.opendev.org/p/i18n-weblate i18n weblate migration]&lt;/div&gt;</summary>
		<author><name>Damekyung98</name></author>	</entry>

	<entry>
		<id>https://wiki.openstack.org/w/index.php?title=I18nTeam/Migration-to-weblate&amp;diff=186869</id>
		<title>I18nTeam/Migration-to-weblate</title>
		<link rel="alternate" type="text/html" href="https://wiki.openstack.org/w/index.php?title=I18nTeam/Migration-to-weblate&amp;diff=186869"/>
				<updated>2025-10-28T09:37:47Z</updated>
		
		<summary type="html">&lt;p&gt;Damekyung98: /* Languages plurals */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Migration to weblate ==&lt;br /&gt;
&lt;br /&gt;
=== Who's joining the migration project ===&lt;br /&gt;
* Ian Y. Choi (Manager)&lt;br /&gt;
* Seongsoo Cho&lt;br /&gt;
* Kuemjong Jeong&lt;br /&gt;
* Nayeon Kim&lt;br /&gt;
* Sion Shin&lt;br /&gt;
* Gwangil Kim&lt;br /&gt;
* DaGyeong Kim&lt;br /&gt;
&lt;br /&gt;
=== Planning a weblate migration schedule ===&lt;br /&gt;
You can find more details about each task below.&lt;br /&gt;
&lt;br /&gt;
* Define the scope of target test projects&lt;br /&gt;
** All vs. a few projects (e.g., openstack-manuals, nova, i18n, horizon)&lt;br /&gt;
* Make Translation Infrastructure Scripts compatible with Weblate&lt;br /&gt;
** Weblate project creation with settings if the target project is not existing on the platform&lt;br /&gt;
*** (If it is not supported, Weblate projects will be created manually)&lt;br /&gt;
*** Testing needs to be performed locally, since the scripts are executed on 06:00 UTC daily.&lt;br /&gt;
* ZuuL Integration Test&lt;br /&gt;
** Determine when to test (e.g., Test methodology without waiting at 06:00 UTC?)&lt;br /&gt;
** Integration test with all translation target projects&lt;br /&gt;
* Making tools for extracting statistical data from Weblate&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Action Item ===&lt;br /&gt;
&lt;br /&gt;
==== Define the scope of target test projects ====&lt;br /&gt;
* Configure Weblate with the information set in Zanata.&lt;br /&gt;
* User information is not migrated.&lt;br /&gt;
&lt;br /&gt;
====  Make Translation Infrastructure Scripts compatible with Weblate ====&lt;br /&gt;
* WIP patch to support Weblate for https://opendev.org/openstack/openstack-zuul-jobs/src/branch/master/roles/prepare-zanata-client/files/&lt;br /&gt;
&lt;br /&gt;
====  Zuul Integration Test ====&lt;br /&gt;
Create and test a ZuuL Job that performs the following tasks&lt;br /&gt;
* Uploading translation files to Weblate when new changes are made to your project&lt;br /&gt;
* Upload translations from Weblate to your project every day at 06 UTC&lt;br /&gt;
&lt;br /&gt;
==== Making tools for extracting statistical data from Weblate ====&lt;br /&gt;
* weblate_userinfo.py : Done ( https://review.opendev.org/c/openstack/i18n/+/893361 ) &lt;br /&gt;
** 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.&lt;br /&gt;
* weblate_users.py : Done ( https://review.opendev.org/c/openstack/i18n/+/895763 ) &lt;br /&gt;
** Generates a list of Weblate language contributors.&lt;br /&gt;
* weblate_utils.py : Done ( https://review.opendev.org/c/openstack/i18n/+/896308 )&lt;br /&gt;
** Provides basic classes used by the other scripts&lt;br /&gt;
*** IniConfig class to get the key and url for the weblate server&lt;br /&gt;
*** WeblateRestService class that communicates with the Weblate REST API&lt;br /&gt;
* weblate_stats.py : Working ( https://review.opendev.org/c/openstack/i18n/+/896306 ) &lt;br /&gt;
** (describe the role of the tool )&lt;br /&gt;
* weblate_records.py : Working  ( https://review.opendev.org/c/openstack/i18n/+/896306 ) &lt;br /&gt;
** (describe the role of the tool )&lt;br /&gt;
&lt;br /&gt;
=== List of projects and status ===&lt;br /&gt;
&lt;br /&gt;
==== Migration Scope ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Item !! Count&lt;br /&gt;
|-&lt;br /&gt;
| Total projects || 127&lt;br /&gt;
|-&lt;br /&gt;
| Total versions || 12&lt;br /&gt;
|-&lt;br /&gt;
| Total Languages || 54&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Version =====&lt;br /&gt;
We determined the migration version based on the branches that currently exist in the main services.&lt;br /&gt;
&lt;br /&gt;
Note: Some projects may not have this branch.&lt;br /&gt;
&lt;br /&gt;
Versions to migrate:&lt;br /&gt;
* master&lt;br /&gt;
* stable/2025.2&lt;br /&gt;
* stable/2025.1&lt;br /&gt;
* stable/2024.2&lt;br /&gt;
* stable/2024.1&lt;br /&gt;
* unmaintained/2023.1&lt;br /&gt;
* unmaintained/zed&lt;br /&gt;
* unmaintained/wallaby&lt;br /&gt;
* unmaintained/victoria&lt;br /&gt;
* unmaintained/yoga&lt;br /&gt;
* unmaintained/xena&lt;br /&gt;
&lt;br /&gt;
===== Languages plurals=====&lt;br /&gt;
During the migration process, we encountered issues where the plural forms in POT and PO files do not match correctly. &lt;br /&gt;
To address this problem, we will migrate the files using the updated plural rules listed below.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Language Code !! Language Name !! Plurals&lt;br /&gt;
|-&lt;br /&gt;
| ar || Arabic || nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100&amp;gt;=3 &amp;amp;&amp;amp; n%100&amp;lt;=10 ? 3 : n%100&amp;gt;=11 ? 4 : 5;&lt;br /&gt;
|-&lt;br /&gt;
| as || Assamese || nplurals=2; plural=n &amp;gt; 1;&lt;br /&gt;
|-&lt;br /&gt;
| bg_BG || Bulgarian (Bulgaria) || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| bn_IN || Bengali (India) || nplurals=2; plural=n &amp;gt; 1;&lt;br /&gt;
|-&lt;br /&gt;
| brx || Bodo || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| ca || Catalan || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| cs || Czech || nplurals=3; plural=(n==1) ? 0 : (n&amp;gt;=2 &amp;amp;&amp;amp; n&amp;lt;=4) ? 1 : 2;&lt;br /&gt;
|-&lt;br /&gt;
| de || German || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| el || Greek || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| en_GB || English (United Kingdom) || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| en_US || English (United States) || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| en_AU || English (Australia) || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| eo || Esperanto || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| es || Spanish || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| es_MX || Spanish (Mexico) || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| fa || Persian || nplurals=2; plural=n &amp;gt; 1;&lt;br /&gt;
|-&lt;br /&gt;
| fi_FI || Finnish (Finland) || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| fil || Filipino || nplurals=2; plural=n != 1 &amp;amp;&amp;amp; n != 2 &amp;amp;&amp;amp; n != 3 &amp;amp;&amp;amp; (n % 10 == 4 &amp;lt;nowiki&amp;gt;||&amp;lt;/nowiki&amp;gt; n % 10 == 6 &amp;lt;nowiki&amp;gt;||&amp;lt;/nowiki&amp;gt; n % 10 == 9);&lt;br /&gt;
|-&lt;br /&gt;
| fr || French || nplurals=2; plural=n &amp;gt; 1;&lt;br /&gt;
|-&lt;br /&gt;
| gu || Gujarati || nplurals=2; plural=n &amp;gt; 1;&lt;br /&gt;
|-&lt;br /&gt;
| he || Hebrew || nplurals=4; plural=(n == 1) ? 0 : ((n == 2) ? 1 : ((n &amp;gt; 10 &amp;amp;&amp;amp; n % 10 == 0) ? 2 : 3));&lt;br /&gt;
|-&lt;br /&gt;
| hi || Hindi || nplurals=2; plural=n &amp;gt; 1;&lt;br /&gt;
|-&lt;br /&gt;
| hu || Hungarian || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| id || Indonesian || nplurals=1; plural=0;&lt;br /&gt;
|-&lt;br /&gt;
| it || Italian || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| ja || Japanese || nplurals=1; plural=0;&lt;br /&gt;
|-&lt;br /&gt;
| ka_GE || Georgian (Georgia) || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| kn || Kannada || nplurals=2; plural=n &amp;gt; 1;&lt;br /&gt;
|-&lt;br /&gt;
| ko_KR || Korean (Korea) || nplurals=1; plural=0;&lt;br /&gt;
|-&lt;br /&gt;
| kok || Konkani || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| ks || Kashmiri || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| lo || Lao || nplurals=1; plural=0;&lt;br /&gt;
|-&lt;br /&gt;
| mai || Maithili || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| mni || Manipuri || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| mr || Marathi || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| ne || Nepali || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| nl_NL || Dutch (Netherlands) || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| pa_IN || Punjabi (India) || nplurals=2; plural=n &amp;gt; 1;&lt;br /&gt;
|-&lt;br /&gt;
| pl_PL || Polish (Poland) || nplurals=3; plural=n==1 ? 0 : n%10&amp;gt;=2 &amp;amp;&amp;amp; n%10&amp;lt;=4 &amp;amp;&amp;amp; (n%100&amp;lt;10 &amp;lt;nowiki&amp;gt;||&amp;lt;/nowiki&amp;gt; n%100&amp;gt;=20) ? 1 : 2;&lt;br /&gt;
|-&lt;br /&gt;
| pt || Portuguese || nplurals=2; plural=n &amp;gt; 1;&lt;br /&gt;
|-&lt;br /&gt;
| pt_BR || Portuguese (Brazil) || nplurals=2; plural=n &amp;gt; 1;&lt;br /&gt;
|-&lt;br /&gt;
| ro || Romanian || nplurals=3; plural=n==1 ? 0 : (n==0 &amp;lt;nowiki&amp;gt;||&amp;lt;/nowiki&amp;gt; (n%100 &amp;gt; 0 &amp;amp;&amp;amp; n%100 &amp;lt; 20)) ? 1 : 2;&lt;br /&gt;
|-&lt;br /&gt;
| ru || Russian || nplurals=3; plural=n%10==1 &amp;amp;&amp;amp; n%100!=11 ? 0 : n%10&amp;gt;=2 &amp;amp;&amp;amp; n%10&amp;lt;=4 &amp;amp;&amp;amp; (n%100&amp;lt;10 &amp;lt;nowiki&amp;gt;||&amp;lt;/nowiki&amp;gt; n%100&amp;gt;=20) ? 1 : 2;&lt;br /&gt;
|-&lt;br /&gt;
| sl_SI || Slovenian (Slovenia) || nplurals=4; plural=n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 &amp;lt;nowiki&amp;gt;||&amp;lt;/nowiki&amp;gt; n%100==4 ? 2 : 3;&lt;br /&gt;
|-&lt;br /&gt;
| sq || Albanian || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| sr || Serbian || nplurals=3; plural=n%10==1 &amp;amp;&amp;amp; n%100!=11 ? 0 : n%10&amp;gt;=2 &amp;amp;&amp;amp; n%10&amp;lt;=4 &amp;amp;&amp;amp; (n%100&amp;lt;10 &amp;lt;nowiki&amp;gt;||&amp;lt;/nowiki&amp;gt; n%100&amp;gt;=20) ? 1 : 2;&lt;br /&gt;
|-&lt;br /&gt;
| ta || Tamil || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| te_IN || Telugu (India) || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| th || Thai || nplurals=1; plural=0;&lt;br /&gt;
|-&lt;br /&gt;
| tr_TR || Turkish (Turkey) || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| ur || Urdu || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| vi_VN || Vietnamese (Vietnam) || nplurals=1; plural=0;&lt;br /&gt;
|-&lt;br /&gt;
| zh_CN || Chinese (China) || nplurals=1; plural=0;&lt;br /&gt;
|-&lt;br /&gt;
| zh_TW || Chinese (Taiwan) || nplurals=1; plural=0;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* [[Language Plurals]] (deprecated)&lt;br /&gt;
&lt;br /&gt;
==== Translation Accuracy Metrics ====&lt;br /&gt;
Due to inconsistent word count calculations across different translation platforms, we measure accuracy by the number of strings rather than word count. &lt;br /&gt;
&lt;br /&gt;
We evaluate translation accuracy using the following metrics:&lt;br /&gt;
* Source strings: The total number of original English messages that need to be translated.&lt;br /&gt;
* Translated strings: The number of messages that have been successfully translated into the target language.&lt;br /&gt;
&lt;br /&gt;
We calculate accuracy based on the ratio of accurate strings across all versions, considering both source strings and translated strings.&lt;br /&gt;
&lt;br /&gt;
What gets checked:&lt;br /&gt;
* Is the source string data accurate? (Pass/Fail)&lt;br /&gt;
* Is the translated string data accurate? (Pass/Fail)&lt;br /&gt;
&lt;br /&gt;
Accuracy Formula:&lt;br /&gt;
* (Number of passed accuracy checks / Total accuracy checks) × 100&lt;br /&gt;
&lt;br /&gt;
==== Translation Migration Status ====&lt;br /&gt;
For more details about accuracy, please refer to the Launchpad bugs.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Project !! Progress status !! Accuracy(%) !! Launchpad Bug !! Contributor !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| cloudkitty-dashboard || In Progress || 4/12(33%) || https://bugs.launchpad.net/openstack-i18n/+bug/2121053 || DaGyeong Kim || N/A&lt;br /&gt;
|-&lt;br /&gt;
| designate-dashboard || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119196 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| freezer-web-ui || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2124944 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| heat-dashboard || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119199 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| ironic-ui || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119203 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| manila-ui || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119204 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| magnum-ui || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119200 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| networking-bgpvpn || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119207 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| neutron-fwaas-dashboard || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119206 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| neutron-vpnaas-dashboard || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119388 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| octavia-dashboard || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119197 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| trove-dashboard || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119201 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| zaqar-ui || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119468 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| zun-ui || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119205 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| horizon || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2125039 || N/A || N/A&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Etherpads ===&lt;br /&gt;
* [https://etherpad.opendev.org/p/vancouver-forum-i18n OpenInfra Summit Vancouver 2023 Forum]&lt;br /&gt;
* [https://etherpad.opendev.org/p/i18n-weblate i18n weblate migration]&lt;/div&gt;</summary>
		<author><name>Damekyung98</name></author>	</entry>

	<entry>
		<id>https://wiki.openstack.org/w/index.php?title=I18nTeam/Migration-to-weblate&amp;diff=186868</id>
		<title>I18nTeam/Migration-to-weblate</title>
		<link rel="alternate" type="text/html" href="https://wiki.openstack.org/w/index.php?title=I18nTeam/Migration-to-weblate&amp;diff=186868"/>
				<updated>2025-10-28T09:35:01Z</updated>
		
		<summary type="html">&lt;p&gt;Damekyung98: /* Languages plurals */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Migration to weblate ==&lt;br /&gt;
&lt;br /&gt;
=== Who's joining the migration project ===&lt;br /&gt;
* Ian Y. Choi (Manager)&lt;br /&gt;
* Seongsoo Cho&lt;br /&gt;
* Kuemjong Jeong&lt;br /&gt;
* Nayeon Kim&lt;br /&gt;
* Sion Shin&lt;br /&gt;
* Gwangil Kim&lt;br /&gt;
* DaGyeong Kim&lt;br /&gt;
&lt;br /&gt;
=== Planning a weblate migration schedule ===&lt;br /&gt;
You can find more details about each task below.&lt;br /&gt;
&lt;br /&gt;
* Define the scope of target test projects&lt;br /&gt;
** All vs. a few projects (e.g., openstack-manuals, nova, i18n, horizon)&lt;br /&gt;
* Make Translation Infrastructure Scripts compatible with Weblate&lt;br /&gt;
** Weblate project creation with settings if the target project is not existing on the platform&lt;br /&gt;
*** (If it is not supported, Weblate projects will be created manually)&lt;br /&gt;
*** Testing needs to be performed locally, since the scripts are executed on 06:00 UTC daily.&lt;br /&gt;
* ZuuL Integration Test&lt;br /&gt;
** Determine when to test (e.g., Test methodology without waiting at 06:00 UTC?)&lt;br /&gt;
** Integration test with all translation target projects&lt;br /&gt;
* Making tools for extracting statistical data from Weblate&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Action Item ===&lt;br /&gt;
&lt;br /&gt;
==== Define the scope of target test projects ====&lt;br /&gt;
* Configure Weblate with the information set in Zanata.&lt;br /&gt;
* User information is not migrated.&lt;br /&gt;
&lt;br /&gt;
====  Make Translation Infrastructure Scripts compatible with Weblate ====&lt;br /&gt;
* WIP patch to support Weblate for https://opendev.org/openstack/openstack-zuul-jobs/src/branch/master/roles/prepare-zanata-client/files/&lt;br /&gt;
&lt;br /&gt;
====  Zuul Integration Test ====&lt;br /&gt;
Create and test a ZuuL Job that performs the following tasks&lt;br /&gt;
* Uploading translation files to Weblate when new changes are made to your project&lt;br /&gt;
* Upload translations from Weblate to your project every day at 06 UTC&lt;br /&gt;
&lt;br /&gt;
==== Making tools for extracting statistical data from Weblate ====&lt;br /&gt;
* weblate_userinfo.py : Done ( https://review.opendev.org/c/openstack/i18n/+/893361 ) &lt;br /&gt;
** 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.&lt;br /&gt;
* weblate_users.py : Done ( https://review.opendev.org/c/openstack/i18n/+/895763 ) &lt;br /&gt;
** Generates a list of Weblate language contributors.&lt;br /&gt;
* weblate_utils.py : Done ( https://review.opendev.org/c/openstack/i18n/+/896308 )&lt;br /&gt;
** Provides basic classes used by the other scripts&lt;br /&gt;
*** IniConfig class to get the key and url for the weblate server&lt;br /&gt;
*** WeblateRestService class that communicates with the Weblate REST API&lt;br /&gt;
* weblate_stats.py : Working ( https://review.opendev.org/c/openstack/i18n/+/896306 ) &lt;br /&gt;
** (describe the role of the tool )&lt;br /&gt;
* weblate_records.py : Working  ( https://review.opendev.org/c/openstack/i18n/+/896306 ) &lt;br /&gt;
** (describe the role of the tool )&lt;br /&gt;
&lt;br /&gt;
=== List of projects and status ===&lt;br /&gt;
&lt;br /&gt;
==== Migration Scope ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Item !! Count&lt;br /&gt;
|-&lt;br /&gt;
| Total projects || 127&lt;br /&gt;
|-&lt;br /&gt;
| Total versions || 12&lt;br /&gt;
|-&lt;br /&gt;
| Total Languages || 54&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Version =====&lt;br /&gt;
We determined the migration version based on the branches that currently exist in the main services.&lt;br /&gt;
&lt;br /&gt;
Note: Some projects may not have this branch.&lt;br /&gt;
&lt;br /&gt;
Versions to migrate:&lt;br /&gt;
* master&lt;br /&gt;
* stable/2025.2&lt;br /&gt;
* stable/2025.1&lt;br /&gt;
* stable/2024.2&lt;br /&gt;
* stable/2024.1&lt;br /&gt;
* unmaintained/2023.1&lt;br /&gt;
* unmaintained/zed&lt;br /&gt;
* unmaintained/wallaby&lt;br /&gt;
* unmaintained/victoria&lt;br /&gt;
* unmaintained/yoga&lt;br /&gt;
* unmaintained/xena&lt;br /&gt;
&lt;br /&gt;
===== Languages plurals=====&lt;br /&gt;
&lt;br /&gt;
* [[Language Plurals]] (deprecated)&lt;br /&gt;
&lt;br /&gt;
During the migration process, we encountered issues where the plural forms in POT and PO files do not match correctly. &lt;br /&gt;
To address this problem, we will migrate the files using the updated plural rules listed below.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Language Code !! Language Name !! Plurals&lt;br /&gt;
|-&lt;br /&gt;
| ar || Arabic || nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100&amp;gt;=3 &amp;amp;&amp;amp; n%100&amp;lt;=10 ? 3 : n%100&amp;gt;=11 ? 4 : 5;&lt;br /&gt;
|-&lt;br /&gt;
| as || Assamese || nplurals=2; plural=n &amp;gt; 1;&lt;br /&gt;
|-&lt;br /&gt;
| bg_BG || Bulgarian (Bulgaria) || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| bn_IN || Bengali (India) || nplurals=2; plural=n &amp;gt; 1;&lt;br /&gt;
|-&lt;br /&gt;
| brx || Bodo || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| ca || Catalan || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| cs || Czech || nplurals=3; plural=(n==1) ? 0 : (n&amp;gt;=2 &amp;amp;&amp;amp; n&amp;lt;=4) ? 1 : 2;&lt;br /&gt;
|-&lt;br /&gt;
| de || German || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| el || Greek || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| en_GB || English (United Kingdom) || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| en_US || English (United States) || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| en_AU || English (Australia) || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| eo || Esperanto || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| es || Spanish || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| es_MX || Spanish (Mexico) || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| fa || Persian || nplurals=2; plural=n &amp;gt; 1;&lt;br /&gt;
|-&lt;br /&gt;
| fi_FI || Finnish (Finland) || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| fil || Filipino || nplurals=2; plural=n != 1 &amp;amp;&amp;amp; n != 2 &amp;amp;&amp;amp; n != 3 &amp;amp;&amp;amp; (n % 10 == 4 &amp;lt;nowiki&amp;gt;||&amp;lt;/nowiki&amp;gt; n % 10 == 6 &amp;lt;nowiki&amp;gt;||&amp;lt;/nowiki&amp;gt; n % 10 == 9);&lt;br /&gt;
|-&lt;br /&gt;
| fr || French || nplurals=2; plural=n &amp;gt; 1;&lt;br /&gt;
|-&lt;br /&gt;
| gu || Gujarati || nplurals=2; plural=n &amp;gt; 1;&lt;br /&gt;
|-&lt;br /&gt;
| he || Hebrew || nplurals=4; plural=(n == 1) ? 0 : ((n == 2) ? 1 : ((n &amp;gt; 10 &amp;amp;&amp;amp; n % 10 == 0) ? 2 : 3));&lt;br /&gt;
|-&lt;br /&gt;
| hi || Hindi || nplurals=2; plural=n &amp;gt; 1;&lt;br /&gt;
|-&lt;br /&gt;
| hu || Hungarian || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| id || Indonesian || nplurals=1; plural=0;&lt;br /&gt;
|-&lt;br /&gt;
| it || Italian || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| ja || Japanese || nplurals=1; plural=0;&lt;br /&gt;
|-&lt;br /&gt;
| ka_GE || Georgian (Georgia) || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| kn || Kannada || nplurals=2; plural=n &amp;gt; 1;&lt;br /&gt;
|-&lt;br /&gt;
| ko_KR || Korean (Korea) || nplurals=1; plural=0;&lt;br /&gt;
|-&lt;br /&gt;
| kok || Konkani || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| ks || Kashmiri || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| lo || Lao || nplurals=1; plural=0;&lt;br /&gt;
|-&lt;br /&gt;
| mai || Maithili || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| mni || Manipuri || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| mr || Marathi || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| ne || Nepali || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| nl_NL || Dutch (Netherlands) || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| pa_IN || Punjabi (India) || nplurals=2; plural=n &amp;gt; 1;&lt;br /&gt;
|-&lt;br /&gt;
| pl_PL || Polish (Poland) || nplurals=3; plural=n==1 ? 0 : n%10&amp;gt;=2 &amp;amp;&amp;amp; n%10&amp;lt;=4 &amp;amp;&amp;amp; (n%100&amp;lt;10 &amp;lt;nowiki&amp;gt;||&amp;lt;/nowiki&amp;gt; n%100&amp;gt;=20) ? 1 : 2;&lt;br /&gt;
|-&lt;br /&gt;
| pt || Portuguese || nplurals=2; plural=n &amp;gt; 1;&lt;br /&gt;
|-&lt;br /&gt;
| pt_BR || Portuguese (Brazil) || nplurals=2; plural=n &amp;gt; 1;&lt;br /&gt;
|-&lt;br /&gt;
| ro || Romanian || nplurals=3; plural=n==1 ? 0 : (n==0 &amp;lt;nowiki&amp;gt;||&amp;lt;/nowiki&amp;gt; (n%100 &amp;gt; 0 &amp;amp;&amp;amp; n%100 &amp;lt; 20)) ? 1 : 2;&lt;br /&gt;
|-&lt;br /&gt;
| ru || Russian || nplurals=3; plural=n%10==1 &amp;amp;&amp;amp; n%100!=11 ? 0 : n%10&amp;gt;=2 &amp;amp;&amp;amp; n%10&amp;lt;=4 &amp;amp;&amp;amp; (n%100&amp;lt;10 &amp;lt;nowiki&amp;gt;||&amp;lt;/nowiki&amp;gt; n%100&amp;gt;=20) ? 1 : 2;&lt;br /&gt;
|-&lt;br /&gt;
| sl_SI || Slovenian (Slovenia) || nplurals=4; plural=n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 &amp;lt;nowiki&amp;gt;||&amp;lt;/nowiki&amp;gt; n%100==4 ? 2 : 3;&lt;br /&gt;
|-&lt;br /&gt;
| sq || Albanian || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| sr || Serbian || nplurals=3; plural=n%10==1 &amp;amp;&amp;amp; n%100!=11 ? 0 : n%10&amp;gt;=2 &amp;amp;&amp;amp; n%10&amp;lt;=4 &amp;amp;&amp;amp; (n%100&amp;lt;10 &amp;lt;nowiki&amp;gt;||&amp;lt;/nowiki&amp;gt; n%100&amp;gt;=20) ? 1 : 2;&lt;br /&gt;
|-&lt;br /&gt;
| ta || Tamil || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| te_IN || Telugu (India) || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| th || Thai || nplurals=1; plural=0;&lt;br /&gt;
|-&lt;br /&gt;
| tr_TR || Turkish (Turkey) || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| ur || Urdu || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| vi_VN || Vietnamese (Vietnam) || nplurals=1; plural=0;&lt;br /&gt;
|-&lt;br /&gt;
| zh_CN || Chinese (China) || nplurals=1; plural=0;&lt;br /&gt;
|-&lt;br /&gt;
| zh_TW || Chinese (Taiwan) || nplurals=1; plural=0;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Translation Accuracy Metrics ====&lt;br /&gt;
Due to inconsistent word count calculations across different translation platforms, we measure accuracy by the number of strings rather than word count. &lt;br /&gt;
&lt;br /&gt;
We evaluate translation accuracy using the following metrics:&lt;br /&gt;
* Source strings: The total number of original English messages that need to be translated.&lt;br /&gt;
* Translated strings: The number of messages that have been successfully translated into the target language.&lt;br /&gt;
&lt;br /&gt;
We calculate accuracy based on the ratio of accurate strings across all versions, considering both source strings and translated strings.&lt;br /&gt;
&lt;br /&gt;
What gets checked:&lt;br /&gt;
* Is the source string data accurate? (Pass/Fail)&lt;br /&gt;
* Is the translated string data accurate? (Pass/Fail)&lt;br /&gt;
&lt;br /&gt;
Accuracy Formula:&lt;br /&gt;
* (Number of passed accuracy checks / Total accuracy checks) × 100&lt;br /&gt;
&lt;br /&gt;
==== Translation Migration Status ====&lt;br /&gt;
For more details about accuracy, please refer to the Launchpad bugs.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Project !! Progress status !! Accuracy(%) !! Launchpad Bug !! Contributor !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| cloudkitty-dashboard || In Progress || 4/12(33%) || https://bugs.launchpad.net/openstack-i18n/+bug/2121053 || DaGyeong Kim || N/A&lt;br /&gt;
|-&lt;br /&gt;
| designate-dashboard || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119196 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| freezer-web-ui || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2124944 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| heat-dashboard || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119199 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| ironic-ui || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119203 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| manila-ui || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119204 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| magnum-ui || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119200 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| networking-bgpvpn || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119207 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| neutron-fwaas-dashboard || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119206 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| neutron-vpnaas-dashboard || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119388 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| octavia-dashboard || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119197 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| trove-dashboard || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119201 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| zaqar-ui || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119468 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| zun-ui || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119205 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| horizon || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2125039 || N/A || N/A&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Etherpads ===&lt;br /&gt;
* [https://etherpad.opendev.org/p/vancouver-forum-i18n OpenInfra Summit Vancouver 2023 Forum]&lt;br /&gt;
* [https://etherpad.opendev.org/p/i18n-weblate i18n weblate migration]&lt;/div&gt;</summary>
		<author><name>Damekyung98</name></author>	</entry>

	<entry>
		<id>https://wiki.openstack.org/w/index.php?title=I18nTeam/Migration-to-weblate&amp;diff=186867</id>
		<title>I18nTeam/Migration-to-weblate</title>
		<link rel="alternate" type="text/html" href="https://wiki.openstack.org/w/index.php?title=I18nTeam/Migration-to-weblate&amp;diff=186867"/>
				<updated>2025-10-28T09:32:18Z</updated>
		
		<summary type="html">&lt;p&gt;Damekyung98: /* Translation Migration Status */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Migration to weblate ==&lt;br /&gt;
&lt;br /&gt;
=== Who's joining the migration project ===&lt;br /&gt;
* Ian Y. Choi (Manager)&lt;br /&gt;
* Seongsoo Cho&lt;br /&gt;
* Kuemjong Jeong&lt;br /&gt;
* Nayeon Kim&lt;br /&gt;
* Sion Shin&lt;br /&gt;
* Gwangil Kim&lt;br /&gt;
* DaGyeong Kim&lt;br /&gt;
&lt;br /&gt;
=== Planning a weblate migration schedule ===&lt;br /&gt;
You can find more details about each task below.&lt;br /&gt;
&lt;br /&gt;
* Define the scope of target test projects&lt;br /&gt;
** All vs. a few projects (e.g., openstack-manuals, nova, i18n, horizon)&lt;br /&gt;
* Make Translation Infrastructure Scripts compatible with Weblate&lt;br /&gt;
** Weblate project creation with settings if the target project is not existing on the platform&lt;br /&gt;
*** (If it is not supported, Weblate projects will be created manually)&lt;br /&gt;
*** Testing needs to be performed locally, since the scripts are executed on 06:00 UTC daily.&lt;br /&gt;
* ZuuL Integration Test&lt;br /&gt;
** Determine when to test (e.g., Test methodology without waiting at 06:00 UTC?)&lt;br /&gt;
** Integration test with all translation target projects&lt;br /&gt;
* Making tools for extracting statistical data from Weblate&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Action Item ===&lt;br /&gt;
&lt;br /&gt;
==== Define the scope of target test projects ====&lt;br /&gt;
* Configure Weblate with the information set in Zanata.&lt;br /&gt;
* User information is not migrated.&lt;br /&gt;
&lt;br /&gt;
====  Make Translation Infrastructure Scripts compatible with Weblate ====&lt;br /&gt;
* WIP patch to support Weblate for https://opendev.org/openstack/openstack-zuul-jobs/src/branch/master/roles/prepare-zanata-client/files/&lt;br /&gt;
&lt;br /&gt;
====  Zuul Integration Test ====&lt;br /&gt;
Create and test a ZuuL Job that performs the following tasks&lt;br /&gt;
* Uploading translation files to Weblate when new changes are made to your project&lt;br /&gt;
* Upload translations from Weblate to your project every day at 06 UTC&lt;br /&gt;
&lt;br /&gt;
==== Making tools for extracting statistical data from Weblate ====&lt;br /&gt;
* weblate_userinfo.py : Done ( https://review.opendev.org/c/openstack/i18n/+/893361 ) &lt;br /&gt;
** 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.&lt;br /&gt;
* weblate_users.py : Done ( https://review.opendev.org/c/openstack/i18n/+/895763 ) &lt;br /&gt;
** Generates a list of Weblate language contributors.&lt;br /&gt;
* weblate_utils.py : Done ( https://review.opendev.org/c/openstack/i18n/+/896308 )&lt;br /&gt;
** Provides basic classes used by the other scripts&lt;br /&gt;
*** IniConfig class to get the key and url for the weblate server&lt;br /&gt;
*** WeblateRestService class that communicates with the Weblate REST API&lt;br /&gt;
* weblate_stats.py : Working ( https://review.opendev.org/c/openstack/i18n/+/896306 ) &lt;br /&gt;
** (describe the role of the tool )&lt;br /&gt;
* weblate_records.py : Working  ( https://review.opendev.org/c/openstack/i18n/+/896306 ) &lt;br /&gt;
** (describe the role of the tool )&lt;br /&gt;
&lt;br /&gt;
=== List of projects and status ===&lt;br /&gt;
&lt;br /&gt;
==== Migration Scope ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Item !! Count&lt;br /&gt;
|-&lt;br /&gt;
| Total projects || 127&lt;br /&gt;
|-&lt;br /&gt;
| Total versions || 12&lt;br /&gt;
|-&lt;br /&gt;
| Total Languages || 54&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Version =====&lt;br /&gt;
We determined the migration version based on the branches that currently exist in the main services.&lt;br /&gt;
&lt;br /&gt;
Note: Some projects may not have this branch.&lt;br /&gt;
&lt;br /&gt;
Versions to migrate:&lt;br /&gt;
* master&lt;br /&gt;
* stable/2025.2&lt;br /&gt;
* stable/2025.1&lt;br /&gt;
* stable/2024.2&lt;br /&gt;
* stable/2024.1&lt;br /&gt;
* unmaintained/2023.1&lt;br /&gt;
* unmaintained/zed&lt;br /&gt;
* unmaintained/wallaby&lt;br /&gt;
* unmaintained/victoria&lt;br /&gt;
* unmaintained/yoga&lt;br /&gt;
* unmaintained/xena&lt;br /&gt;
&lt;br /&gt;
===== Languages plurals=====&lt;br /&gt;
&lt;br /&gt;
* [[Language Plurals]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Language Code !! Language Name !! Plurals&lt;br /&gt;
|-&lt;br /&gt;
| ar || Arabic || nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100&amp;gt;=3 &amp;amp;&amp;amp; n%100&amp;lt;=10 ? 3 : n%100&amp;gt;=11 ? 4 : 5;&lt;br /&gt;
|-&lt;br /&gt;
| as || Assamese || nplurals=2; plural=n &amp;gt; 1;&lt;br /&gt;
|-&lt;br /&gt;
| bg_BG || Bulgarian (Bulgaria) || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| bn_IN || Bengali (India) || nplurals=2; plural=n &amp;gt; 1;&lt;br /&gt;
|-&lt;br /&gt;
| brx || Bodo || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| ca || Catalan || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| cs || Czech || nplurals=3; plural=(n==1) ? 0 : (n&amp;gt;=2 &amp;amp;&amp;amp; n&amp;lt;=4) ? 1 : 2;&lt;br /&gt;
|-&lt;br /&gt;
| de || German || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| el || Greek || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| en_GB || English (United Kingdom) || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| en_US || English (United States) || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| en_AU || English (Australia) || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| eo || Esperanto || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| es || Spanish || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| es_MX || Spanish (Mexico) || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| fa || Persian || nplurals=2; plural=n &amp;gt; 1;&lt;br /&gt;
|-&lt;br /&gt;
| fi_FI || Finnish (Finland) || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| fil || Filipino || nplurals=2; plural=n != 1 &amp;amp;&amp;amp; n != 2 &amp;amp;&amp;amp; n != 3 &amp;amp;&amp;amp; (n % 10 == 4 &amp;lt;nowiki&amp;gt;||&amp;lt;/nowiki&amp;gt; n % 10 == 6 &amp;lt;nowiki&amp;gt;||&amp;lt;/nowiki&amp;gt; n % 10 == 9);&lt;br /&gt;
|-&lt;br /&gt;
| fr || French || nplurals=2; plural=n &amp;gt; 1;&lt;br /&gt;
|-&lt;br /&gt;
| gu || Gujarati || nplurals=2; plural=n &amp;gt; 1;&lt;br /&gt;
|-&lt;br /&gt;
| he || Hebrew || nplurals=4; plural=(n == 1) ? 0 : ((n == 2) ? 1 : ((n &amp;gt; 10 &amp;amp;&amp;amp; n % 10 == 0) ? 2 : 3));&lt;br /&gt;
|-&lt;br /&gt;
| hi || Hindi || nplurals=2; plural=n &amp;gt; 1;&lt;br /&gt;
|-&lt;br /&gt;
| hu || Hungarian || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| id || Indonesian || nplurals=1; plural=0;&lt;br /&gt;
|-&lt;br /&gt;
| it || Italian || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| ja || Japanese || nplurals=1; plural=0;&lt;br /&gt;
|-&lt;br /&gt;
| ka_GE || Georgian (Georgia) || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| kn || Kannada || nplurals=2; plural=n &amp;gt; 1;&lt;br /&gt;
|-&lt;br /&gt;
| ko_KR || Korean (Korea) || nplurals=1; plural=0;&lt;br /&gt;
|-&lt;br /&gt;
| kok || Konkani || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| ks || Kashmiri || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| lo || Lao || nplurals=1; plural=0;&lt;br /&gt;
|-&lt;br /&gt;
| mai || Maithili || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| mni || Manipuri || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| mr || Marathi || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| ne || Nepali || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| nl_NL || Dutch (Netherlands) || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| pa_IN || Punjabi (India) || nplurals=2; plural=n &amp;gt; 1;&lt;br /&gt;
|-&lt;br /&gt;
| pl_PL || Polish (Poland) || nplurals=3; plural=n==1 ? 0 : n%10&amp;gt;=2 &amp;amp;&amp;amp; n%10&amp;lt;=4 &amp;amp;&amp;amp; (n%100&amp;lt;10 &amp;lt;nowiki&amp;gt;||&amp;lt;/nowiki&amp;gt; n%100&amp;gt;=20) ? 1 : 2;&lt;br /&gt;
|-&lt;br /&gt;
| pt || Portuguese || nplurals=2; plural=n &amp;gt; 1;&lt;br /&gt;
|-&lt;br /&gt;
| pt_BR || Portuguese (Brazil) || nplurals=2; plural=n &amp;gt; 1;&lt;br /&gt;
|-&lt;br /&gt;
| ro || Romanian || nplurals=3; plural=n==1 ? 0 : (n==0 &amp;lt;nowiki&amp;gt;||&amp;lt;/nowiki&amp;gt; (n%100 &amp;gt; 0 &amp;amp;&amp;amp; n%100 &amp;lt; 20)) ? 1 : 2;&lt;br /&gt;
|-&lt;br /&gt;
| ru || Russian || nplurals=3; plural=n%10==1 &amp;amp;&amp;amp; n%100!=11 ? 0 : n%10&amp;gt;=2 &amp;amp;&amp;amp; n%10&amp;lt;=4 &amp;amp;&amp;amp; (n%100&amp;lt;10 &amp;lt;nowiki&amp;gt;||&amp;lt;/nowiki&amp;gt; n%100&amp;gt;=20) ? 1 : 2;&lt;br /&gt;
|-&lt;br /&gt;
| sl_SI || Slovenian (Slovenia) || nplurals=4; plural=n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 &amp;lt;nowiki&amp;gt;||&amp;lt;/nowiki&amp;gt; n%100==4 ? 2 : 3;&lt;br /&gt;
|-&lt;br /&gt;
| sq || Albanian || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| sr || Serbian || nplurals=3; plural=n%10==1 &amp;amp;&amp;amp; n%100!=11 ? 0 : n%10&amp;gt;=2 &amp;amp;&amp;amp; n%10&amp;lt;=4 &amp;amp;&amp;amp; (n%100&amp;lt;10 &amp;lt;nowiki&amp;gt;||&amp;lt;/nowiki&amp;gt; n%100&amp;gt;=20) ? 1 : 2;&lt;br /&gt;
|-&lt;br /&gt;
| ta || Tamil || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| te_IN || Telugu (India) || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| th || Thai || nplurals=1; plural=0;&lt;br /&gt;
|-&lt;br /&gt;
| tr_TR || Turkish (Turkey) || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| ur || Urdu || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| vi_VN || Vietnamese (Vietnam) || nplurals=1; plural=0;&lt;br /&gt;
|-&lt;br /&gt;
| zh_CN || Chinese (China) || nplurals=1; plural=0;&lt;br /&gt;
|-&lt;br /&gt;
| zh_TW || Chinese (Taiwan) || nplurals=1; plural=0;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Translation Accuracy Metrics ====&lt;br /&gt;
Due to inconsistent word count calculations across different translation platforms, we measure accuracy by the number of strings rather than word count. &lt;br /&gt;
&lt;br /&gt;
We evaluate translation accuracy using the following metrics:&lt;br /&gt;
* Source strings: The total number of original English messages that need to be translated.&lt;br /&gt;
* Translated strings: The number of messages that have been successfully translated into the target language.&lt;br /&gt;
&lt;br /&gt;
We calculate accuracy based on the ratio of accurate strings across all versions, considering both source strings and translated strings.&lt;br /&gt;
&lt;br /&gt;
What gets checked:&lt;br /&gt;
* Is the source string data accurate? (Pass/Fail)&lt;br /&gt;
* Is the translated string data accurate? (Pass/Fail)&lt;br /&gt;
&lt;br /&gt;
Accuracy Formula:&lt;br /&gt;
* (Number of passed accuracy checks / Total accuracy checks) × 100&lt;br /&gt;
&lt;br /&gt;
==== Translation Migration Status ====&lt;br /&gt;
For more details about accuracy, please refer to the Launchpad bugs.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Project !! Progress status !! Accuracy(%) !! Launchpad Bug !! Contributor !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| cloudkitty-dashboard || In Progress || 4/12(33%) || https://bugs.launchpad.net/openstack-i18n/+bug/2121053 || DaGyeong Kim || N/A&lt;br /&gt;
|-&lt;br /&gt;
| designate-dashboard || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119196 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| freezer-web-ui || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2124944 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| heat-dashboard || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119199 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| ironic-ui || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119203 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| manila-ui || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119204 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| magnum-ui || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119200 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| networking-bgpvpn || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119207 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| neutron-fwaas-dashboard || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119206 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| neutron-vpnaas-dashboard || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119388 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| octavia-dashboard || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119197 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| trove-dashboard || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119201 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| zaqar-ui || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119468 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| zun-ui || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119205 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| horizon || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2125039 || N/A || N/A&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Etherpads ===&lt;br /&gt;
* [https://etherpad.opendev.org/p/vancouver-forum-i18n OpenInfra Summit Vancouver 2023 Forum]&lt;br /&gt;
* [https://etherpad.opendev.org/p/i18n-weblate i18n weblate migration]&lt;/div&gt;</summary>
		<author><name>Damekyung98</name></author>	</entry>

	<entry>
		<id>https://wiki.openstack.org/w/index.php?title=I18nTeam/Migration-to-weblate&amp;diff=186866</id>
		<title>I18nTeam/Migration-to-weblate</title>
		<link rel="alternate" type="text/html" href="https://wiki.openstack.org/w/index.php?title=I18nTeam/Migration-to-weblate&amp;diff=186866"/>
				<updated>2025-10-28T09:30:26Z</updated>
		
		<summary type="html">&lt;p&gt;Damekyung98: /* Translation Accuracy Metrics */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Migration to weblate ==&lt;br /&gt;
&lt;br /&gt;
=== Who's joining the migration project ===&lt;br /&gt;
* Ian Y. Choi (Manager)&lt;br /&gt;
* Seongsoo Cho&lt;br /&gt;
* Kuemjong Jeong&lt;br /&gt;
* Nayeon Kim&lt;br /&gt;
* Sion Shin&lt;br /&gt;
* Gwangil Kim&lt;br /&gt;
* DaGyeong Kim&lt;br /&gt;
&lt;br /&gt;
=== Planning a weblate migration schedule ===&lt;br /&gt;
You can find more details about each task below.&lt;br /&gt;
&lt;br /&gt;
* Define the scope of target test projects&lt;br /&gt;
** All vs. a few projects (e.g., openstack-manuals, nova, i18n, horizon)&lt;br /&gt;
* Make Translation Infrastructure Scripts compatible with Weblate&lt;br /&gt;
** Weblate project creation with settings if the target project is not existing on the platform&lt;br /&gt;
*** (If it is not supported, Weblate projects will be created manually)&lt;br /&gt;
*** Testing needs to be performed locally, since the scripts are executed on 06:00 UTC daily.&lt;br /&gt;
* ZuuL Integration Test&lt;br /&gt;
** Determine when to test (e.g., Test methodology without waiting at 06:00 UTC?)&lt;br /&gt;
** Integration test with all translation target projects&lt;br /&gt;
* Making tools for extracting statistical data from Weblate&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Action Item ===&lt;br /&gt;
&lt;br /&gt;
==== Define the scope of target test projects ====&lt;br /&gt;
* Configure Weblate with the information set in Zanata.&lt;br /&gt;
* User information is not migrated.&lt;br /&gt;
&lt;br /&gt;
====  Make Translation Infrastructure Scripts compatible with Weblate ====&lt;br /&gt;
* WIP patch to support Weblate for https://opendev.org/openstack/openstack-zuul-jobs/src/branch/master/roles/prepare-zanata-client/files/&lt;br /&gt;
&lt;br /&gt;
====  Zuul Integration Test ====&lt;br /&gt;
Create and test a ZuuL Job that performs the following tasks&lt;br /&gt;
* Uploading translation files to Weblate when new changes are made to your project&lt;br /&gt;
* Upload translations from Weblate to your project every day at 06 UTC&lt;br /&gt;
&lt;br /&gt;
==== Making tools for extracting statistical data from Weblate ====&lt;br /&gt;
* weblate_userinfo.py : Done ( https://review.opendev.org/c/openstack/i18n/+/893361 ) &lt;br /&gt;
** 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.&lt;br /&gt;
* weblate_users.py : Done ( https://review.opendev.org/c/openstack/i18n/+/895763 ) &lt;br /&gt;
** Generates a list of Weblate language contributors.&lt;br /&gt;
* weblate_utils.py : Done ( https://review.opendev.org/c/openstack/i18n/+/896308 )&lt;br /&gt;
** Provides basic classes used by the other scripts&lt;br /&gt;
*** IniConfig class to get the key and url for the weblate server&lt;br /&gt;
*** WeblateRestService class that communicates with the Weblate REST API&lt;br /&gt;
* weblate_stats.py : Working ( https://review.opendev.org/c/openstack/i18n/+/896306 ) &lt;br /&gt;
** (describe the role of the tool )&lt;br /&gt;
* weblate_records.py : Working  ( https://review.opendev.org/c/openstack/i18n/+/896306 ) &lt;br /&gt;
** (describe the role of the tool )&lt;br /&gt;
&lt;br /&gt;
=== List of projects and status ===&lt;br /&gt;
&lt;br /&gt;
==== Migration Scope ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Item !! Count&lt;br /&gt;
|-&lt;br /&gt;
| Total projects || 127&lt;br /&gt;
|-&lt;br /&gt;
| Total versions || 12&lt;br /&gt;
|-&lt;br /&gt;
| Total Languages || 54&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Version =====&lt;br /&gt;
We determined the migration version based on the branches that currently exist in the main services.&lt;br /&gt;
&lt;br /&gt;
Note: Some projects may not have this branch.&lt;br /&gt;
&lt;br /&gt;
Versions to migrate:&lt;br /&gt;
* master&lt;br /&gt;
* stable/2025.2&lt;br /&gt;
* stable/2025.1&lt;br /&gt;
* stable/2024.2&lt;br /&gt;
* stable/2024.1&lt;br /&gt;
* unmaintained/2023.1&lt;br /&gt;
* unmaintained/zed&lt;br /&gt;
* unmaintained/wallaby&lt;br /&gt;
* unmaintained/victoria&lt;br /&gt;
* unmaintained/yoga&lt;br /&gt;
* unmaintained/xena&lt;br /&gt;
&lt;br /&gt;
===== Languages plurals=====&lt;br /&gt;
&lt;br /&gt;
* [[Language Plurals]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Language Code !! Language Name !! Plurals&lt;br /&gt;
|-&lt;br /&gt;
| ar || Arabic || nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100&amp;gt;=3 &amp;amp;&amp;amp; n%100&amp;lt;=10 ? 3 : n%100&amp;gt;=11 ? 4 : 5;&lt;br /&gt;
|-&lt;br /&gt;
| as || Assamese || nplurals=2; plural=n &amp;gt; 1;&lt;br /&gt;
|-&lt;br /&gt;
| bg_BG || Bulgarian (Bulgaria) || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| bn_IN || Bengali (India) || nplurals=2; plural=n &amp;gt; 1;&lt;br /&gt;
|-&lt;br /&gt;
| brx || Bodo || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| ca || Catalan || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| cs || Czech || nplurals=3; plural=(n==1) ? 0 : (n&amp;gt;=2 &amp;amp;&amp;amp; n&amp;lt;=4) ? 1 : 2;&lt;br /&gt;
|-&lt;br /&gt;
| de || German || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| el || Greek || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| en_GB || English (United Kingdom) || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| en_US || English (United States) || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| en_AU || English (Australia) || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| eo || Esperanto || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| es || Spanish || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| es_MX || Spanish (Mexico) || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| fa || Persian || nplurals=2; plural=n &amp;gt; 1;&lt;br /&gt;
|-&lt;br /&gt;
| fi_FI || Finnish (Finland) || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| fil || Filipino || nplurals=2; plural=n != 1 &amp;amp;&amp;amp; n != 2 &amp;amp;&amp;amp; n != 3 &amp;amp;&amp;amp; (n % 10 == 4 &amp;lt;nowiki&amp;gt;||&amp;lt;/nowiki&amp;gt; n % 10 == 6 &amp;lt;nowiki&amp;gt;||&amp;lt;/nowiki&amp;gt; n % 10 == 9);&lt;br /&gt;
|-&lt;br /&gt;
| fr || French || nplurals=2; plural=n &amp;gt; 1;&lt;br /&gt;
|-&lt;br /&gt;
| gu || Gujarati || nplurals=2; plural=n &amp;gt; 1;&lt;br /&gt;
|-&lt;br /&gt;
| he || Hebrew || nplurals=4; plural=(n == 1) ? 0 : ((n == 2) ? 1 : ((n &amp;gt; 10 &amp;amp;&amp;amp; n % 10 == 0) ? 2 : 3));&lt;br /&gt;
|-&lt;br /&gt;
| hi || Hindi || nplurals=2; plural=n &amp;gt; 1;&lt;br /&gt;
|-&lt;br /&gt;
| hu || Hungarian || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| id || Indonesian || nplurals=1; plural=0;&lt;br /&gt;
|-&lt;br /&gt;
| it || Italian || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| ja || Japanese || nplurals=1; plural=0;&lt;br /&gt;
|-&lt;br /&gt;
| ka_GE || Georgian (Georgia) || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| kn || Kannada || nplurals=2; plural=n &amp;gt; 1;&lt;br /&gt;
|-&lt;br /&gt;
| ko_KR || Korean (Korea) || nplurals=1; plural=0;&lt;br /&gt;
|-&lt;br /&gt;
| kok || Konkani || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| ks || Kashmiri || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| lo || Lao || nplurals=1; plural=0;&lt;br /&gt;
|-&lt;br /&gt;
| mai || Maithili || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| mni || Manipuri || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| mr || Marathi || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| ne || Nepali || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| nl_NL || Dutch (Netherlands) || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| pa_IN || Punjabi (India) || nplurals=2; plural=n &amp;gt; 1;&lt;br /&gt;
|-&lt;br /&gt;
| pl_PL || Polish (Poland) || nplurals=3; plural=n==1 ? 0 : n%10&amp;gt;=2 &amp;amp;&amp;amp; n%10&amp;lt;=4 &amp;amp;&amp;amp; (n%100&amp;lt;10 &amp;lt;nowiki&amp;gt;||&amp;lt;/nowiki&amp;gt; n%100&amp;gt;=20) ? 1 : 2;&lt;br /&gt;
|-&lt;br /&gt;
| pt || Portuguese || nplurals=2; plural=n &amp;gt; 1;&lt;br /&gt;
|-&lt;br /&gt;
| pt_BR || Portuguese (Brazil) || nplurals=2; plural=n &amp;gt; 1;&lt;br /&gt;
|-&lt;br /&gt;
| ro || Romanian || nplurals=3; plural=n==1 ? 0 : (n==0 &amp;lt;nowiki&amp;gt;||&amp;lt;/nowiki&amp;gt; (n%100 &amp;gt; 0 &amp;amp;&amp;amp; n%100 &amp;lt; 20)) ? 1 : 2;&lt;br /&gt;
|-&lt;br /&gt;
| ru || Russian || nplurals=3; plural=n%10==1 &amp;amp;&amp;amp; n%100!=11 ? 0 : n%10&amp;gt;=2 &amp;amp;&amp;amp; n%10&amp;lt;=4 &amp;amp;&amp;amp; (n%100&amp;lt;10 &amp;lt;nowiki&amp;gt;||&amp;lt;/nowiki&amp;gt; n%100&amp;gt;=20) ? 1 : 2;&lt;br /&gt;
|-&lt;br /&gt;
| sl_SI || Slovenian (Slovenia) || nplurals=4; plural=n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 &amp;lt;nowiki&amp;gt;||&amp;lt;/nowiki&amp;gt; n%100==4 ? 2 : 3;&lt;br /&gt;
|-&lt;br /&gt;
| sq || Albanian || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| sr || Serbian || nplurals=3; plural=n%10==1 &amp;amp;&amp;amp; n%100!=11 ? 0 : n%10&amp;gt;=2 &amp;amp;&amp;amp; n%10&amp;lt;=4 &amp;amp;&amp;amp; (n%100&amp;lt;10 &amp;lt;nowiki&amp;gt;||&amp;lt;/nowiki&amp;gt; n%100&amp;gt;=20) ? 1 : 2;&lt;br /&gt;
|-&lt;br /&gt;
| ta || Tamil || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| te_IN || Telugu (India) || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| th || Thai || nplurals=1; plural=0;&lt;br /&gt;
|-&lt;br /&gt;
| tr_TR || Turkish (Turkey) || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| ur || Urdu || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| vi_VN || Vietnamese (Vietnam) || nplurals=1; plural=0;&lt;br /&gt;
|-&lt;br /&gt;
| zh_CN || Chinese (China) || nplurals=1; plural=0;&lt;br /&gt;
|-&lt;br /&gt;
| zh_TW || Chinese (Taiwan) || nplurals=1; plural=0;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Translation Accuracy Metrics ====&lt;br /&gt;
Due to inconsistent word count calculations across different translation platforms, we measure accuracy by the number of strings rather than word count. &lt;br /&gt;
&lt;br /&gt;
We evaluate translation accuracy using the following metrics:&lt;br /&gt;
* Source strings: The total number of original English messages that need to be translated.&lt;br /&gt;
* Translated strings: The number of messages that have been successfully translated into the target language.&lt;br /&gt;
&lt;br /&gt;
We calculate accuracy based on the ratio of accurate strings across all versions, considering both source strings and translated strings.&lt;br /&gt;
&lt;br /&gt;
What gets checked:&lt;br /&gt;
* Is the source string data accurate? (Pass/Fail)&lt;br /&gt;
* Is the translated string data accurate? (Pass/Fail)&lt;br /&gt;
&lt;br /&gt;
Accuracy Formula:&lt;br /&gt;
* (Number of passed accuracy checks / Total accuracy checks) × 100&lt;br /&gt;
&lt;br /&gt;
==== Translation Migration Status ====&lt;br /&gt;
For more details about accuracy, please refer to the Launchpad bugs.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Project !! Progress status !! Accuracy(%) !! Launchpad Bug !! Contributor !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| cloudkitty-dashboard || In Progress || 33% || https://bugs.launchpad.net/openstack-i18n/+bug/2121053 || DaGyeong Kim || N/A&lt;br /&gt;
|-&lt;br /&gt;
| designate-dashboard || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119196 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| freezer-web-ui || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2124944 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| heat-dashboard || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119199 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| ironic-ui || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119203 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| manila-ui || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119204 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| magnum-ui || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119200 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| networking-bgpvpn || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119207 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| neutron-fwaas-dashboard || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119206 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| neutron-vpnaas-dashboard || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119388 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| octavia-dashboard || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119197 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| trove-dashboard || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119201 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| zaqar-ui || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119468 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| zun-ui || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119205 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| horizon || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2125039 || N/A || N/A&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Etherpads ===&lt;br /&gt;
* [https://etherpad.opendev.org/p/vancouver-forum-i18n OpenInfra Summit Vancouver 2023 Forum]&lt;br /&gt;
* [https://etherpad.opendev.org/p/i18n-weblate i18n weblate migration]&lt;/div&gt;</summary>
		<author><name>Damekyung98</name></author>	</entry>

	<entry>
		<id>https://wiki.openstack.org/w/index.php?title=I18nTeam/Migration-to-weblate&amp;diff=186865</id>
		<title>I18nTeam/Migration-to-weblate</title>
		<link rel="alternate" type="text/html" href="https://wiki.openstack.org/w/index.php?title=I18nTeam/Migration-to-weblate&amp;diff=186865"/>
				<updated>2025-10-28T09:21:56Z</updated>
		
		<summary type="html">&lt;p&gt;Damekyung98: /* Translation Accuracy Metrics */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Migration to weblate ==&lt;br /&gt;
&lt;br /&gt;
=== Who's joining the migration project ===&lt;br /&gt;
* Ian Y. Choi (Manager)&lt;br /&gt;
* Seongsoo Cho&lt;br /&gt;
* Kuemjong Jeong&lt;br /&gt;
* Nayeon Kim&lt;br /&gt;
* Sion Shin&lt;br /&gt;
* Gwangil Kim&lt;br /&gt;
* DaGyeong Kim&lt;br /&gt;
&lt;br /&gt;
=== Planning a weblate migration schedule ===&lt;br /&gt;
You can find more details about each task below.&lt;br /&gt;
&lt;br /&gt;
* Define the scope of target test projects&lt;br /&gt;
** All vs. a few projects (e.g., openstack-manuals, nova, i18n, horizon)&lt;br /&gt;
* Make Translation Infrastructure Scripts compatible with Weblate&lt;br /&gt;
** Weblate project creation with settings if the target project is not existing on the platform&lt;br /&gt;
*** (If it is not supported, Weblate projects will be created manually)&lt;br /&gt;
*** Testing needs to be performed locally, since the scripts are executed on 06:00 UTC daily.&lt;br /&gt;
* ZuuL Integration Test&lt;br /&gt;
** Determine when to test (e.g., Test methodology without waiting at 06:00 UTC?)&lt;br /&gt;
** Integration test with all translation target projects&lt;br /&gt;
* Making tools for extracting statistical data from Weblate&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Action Item ===&lt;br /&gt;
&lt;br /&gt;
==== Define the scope of target test projects ====&lt;br /&gt;
* Configure Weblate with the information set in Zanata.&lt;br /&gt;
* User information is not migrated.&lt;br /&gt;
&lt;br /&gt;
====  Make Translation Infrastructure Scripts compatible with Weblate ====&lt;br /&gt;
* WIP patch to support Weblate for https://opendev.org/openstack/openstack-zuul-jobs/src/branch/master/roles/prepare-zanata-client/files/&lt;br /&gt;
&lt;br /&gt;
====  Zuul Integration Test ====&lt;br /&gt;
Create and test a ZuuL Job that performs the following tasks&lt;br /&gt;
* Uploading translation files to Weblate when new changes are made to your project&lt;br /&gt;
* Upload translations from Weblate to your project every day at 06 UTC&lt;br /&gt;
&lt;br /&gt;
==== Making tools for extracting statistical data from Weblate ====&lt;br /&gt;
* weblate_userinfo.py : Done ( https://review.opendev.org/c/openstack/i18n/+/893361 ) &lt;br /&gt;
** 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.&lt;br /&gt;
* weblate_users.py : Done ( https://review.opendev.org/c/openstack/i18n/+/895763 ) &lt;br /&gt;
** Generates a list of Weblate language contributors.&lt;br /&gt;
* weblate_utils.py : Done ( https://review.opendev.org/c/openstack/i18n/+/896308 )&lt;br /&gt;
** Provides basic classes used by the other scripts&lt;br /&gt;
*** IniConfig class to get the key and url for the weblate server&lt;br /&gt;
*** WeblateRestService class that communicates with the Weblate REST API&lt;br /&gt;
* weblate_stats.py : Working ( https://review.opendev.org/c/openstack/i18n/+/896306 ) &lt;br /&gt;
** (describe the role of the tool )&lt;br /&gt;
* weblate_records.py : Working  ( https://review.opendev.org/c/openstack/i18n/+/896306 ) &lt;br /&gt;
** (describe the role of the tool )&lt;br /&gt;
&lt;br /&gt;
=== List of projects and status ===&lt;br /&gt;
&lt;br /&gt;
==== Migration Scope ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Item !! Count&lt;br /&gt;
|-&lt;br /&gt;
| Total projects || 127&lt;br /&gt;
|-&lt;br /&gt;
| Total versions || 12&lt;br /&gt;
|-&lt;br /&gt;
| Total Languages || 54&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Version =====&lt;br /&gt;
We determined the migration version based on the branches that currently exist in the main services.&lt;br /&gt;
&lt;br /&gt;
Note: Some projects may not have this branch.&lt;br /&gt;
&lt;br /&gt;
Versions to migrate:&lt;br /&gt;
* master&lt;br /&gt;
* stable/2025.2&lt;br /&gt;
* stable/2025.1&lt;br /&gt;
* stable/2024.2&lt;br /&gt;
* stable/2024.1&lt;br /&gt;
* unmaintained/2023.1&lt;br /&gt;
* unmaintained/zed&lt;br /&gt;
* unmaintained/wallaby&lt;br /&gt;
* unmaintained/victoria&lt;br /&gt;
* unmaintained/yoga&lt;br /&gt;
* unmaintained/xena&lt;br /&gt;
&lt;br /&gt;
===== Languages plurals=====&lt;br /&gt;
&lt;br /&gt;
* [[Language Plurals]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Language Code !! Language Name !! Plurals&lt;br /&gt;
|-&lt;br /&gt;
| ar || Arabic || nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100&amp;gt;=3 &amp;amp;&amp;amp; n%100&amp;lt;=10 ? 3 : n%100&amp;gt;=11 ? 4 : 5;&lt;br /&gt;
|-&lt;br /&gt;
| as || Assamese || nplurals=2; plural=n &amp;gt; 1;&lt;br /&gt;
|-&lt;br /&gt;
| bg_BG || Bulgarian (Bulgaria) || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| bn_IN || Bengali (India) || nplurals=2; plural=n &amp;gt; 1;&lt;br /&gt;
|-&lt;br /&gt;
| brx || Bodo || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| ca || Catalan || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| cs || Czech || nplurals=3; plural=(n==1) ? 0 : (n&amp;gt;=2 &amp;amp;&amp;amp; n&amp;lt;=4) ? 1 : 2;&lt;br /&gt;
|-&lt;br /&gt;
| de || German || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| el || Greek || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| en_GB || English (United Kingdom) || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| en_US || English (United States) || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| en_AU || English (Australia) || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| eo || Esperanto || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| es || Spanish || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| es_MX || Spanish (Mexico) || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| fa || Persian || nplurals=2; plural=n &amp;gt; 1;&lt;br /&gt;
|-&lt;br /&gt;
| fi_FI || Finnish (Finland) || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| fil || Filipino || nplurals=2; plural=n != 1 &amp;amp;&amp;amp; n != 2 &amp;amp;&amp;amp; n != 3 &amp;amp;&amp;amp; (n % 10 == 4 &amp;lt;nowiki&amp;gt;||&amp;lt;/nowiki&amp;gt; n % 10 == 6 &amp;lt;nowiki&amp;gt;||&amp;lt;/nowiki&amp;gt; n % 10 == 9);&lt;br /&gt;
|-&lt;br /&gt;
| fr || French || nplurals=2; plural=n &amp;gt; 1;&lt;br /&gt;
|-&lt;br /&gt;
| gu || Gujarati || nplurals=2; plural=n &amp;gt; 1;&lt;br /&gt;
|-&lt;br /&gt;
| he || Hebrew || nplurals=4; plural=(n == 1) ? 0 : ((n == 2) ? 1 : ((n &amp;gt; 10 &amp;amp;&amp;amp; n % 10 == 0) ? 2 : 3));&lt;br /&gt;
|-&lt;br /&gt;
| hi || Hindi || nplurals=2; plural=n &amp;gt; 1;&lt;br /&gt;
|-&lt;br /&gt;
| hu || Hungarian || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| id || Indonesian || nplurals=1; plural=0;&lt;br /&gt;
|-&lt;br /&gt;
| it || Italian || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| ja || Japanese || nplurals=1; plural=0;&lt;br /&gt;
|-&lt;br /&gt;
| ka_GE || Georgian (Georgia) || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| kn || Kannada || nplurals=2; plural=n &amp;gt; 1;&lt;br /&gt;
|-&lt;br /&gt;
| ko_KR || Korean (Korea) || nplurals=1; plural=0;&lt;br /&gt;
|-&lt;br /&gt;
| kok || Konkani || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| ks || Kashmiri || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| lo || Lao || nplurals=1; plural=0;&lt;br /&gt;
|-&lt;br /&gt;
| mai || Maithili || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| mni || Manipuri || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| mr || Marathi || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| ne || Nepali || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| nl_NL || Dutch (Netherlands) || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| pa_IN || Punjabi (India) || nplurals=2; plural=n &amp;gt; 1;&lt;br /&gt;
|-&lt;br /&gt;
| pl_PL || Polish (Poland) || nplurals=3; plural=n==1 ? 0 : n%10&amp;gt;=2 &amp;amp;&amp;amp; n%10&amp;lt;=4 &amp;amp;&amp;amp; (n%100&amp;lt;10 &amp;lt;nowiki&amp;gt;||&amp;lt;/nowiki&amp;gt; n%100&amp;gt;=20) ? 1 : 2;&lt;br /&gt;
|-&lt;br /&gt;
| pt || Portuguese || nplurals=2; plural=n &amp;gt; 1;&lt;br /&gt;
|-&lt;br /&gt;
| pt_BR || Portuguese (Brazil) || nplurals=2; plural=n &amp;gt; 1;&lt;br /&gt;
|-&lt;br /&gt;
| ro || Romanian || nplurals=3; plural=n==1 ? 0 : (n==0 &amp;lt;nowiki&amp;gt;||&amp;lt;/nowiki&amp;gt; (n%100 &amp;gt; 0 &amp;amp;&amp;amp; n%100 &amp;lt; 20)) ? 1 : 2;&lt;br /&gt;
|-&lt;br /&gt;
| ru || Russian || nplurals=3; plural=n%10==1 &amp;amp;&amp;amp; n%100!=11 ? 0 : n%10&amp;gt;=2 &amp;amp;&amp;amp; n%10&amp;lt;=4 &amp;amp;&amp;amp; (n%100&amp;lt;10 &amp;lt;nowiki&amp;gt;||&amp;lt;/nowiki&amp;gt; n%100&amp;gt;=20) ? 1 : 2;&lt;br /&gt;
|-&lt;br /&gt;
| sl_SI || Slovenian (Slovenia) || nplurals=4; plural=n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 &amp;lt;nowiki&amp;gt;||&amp;lt;/nowiki&amp;gt; n%100==4 ? 2 : 3;&lt;br /&gt;
|-&lt;br /&gt;
| sq || Albanian || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| sr || Serbian || nplurals=3; plural=n%10==1 &amp;amp;&amp;amp; n%100!=11 ? 0 : n%10&amp;gt;=2 &amp;amp;&amp;amp; n%10&amp;lt;=4 &amp;amp;&amp;amp; (n%100&amp;lt;10 &amp;lt;nowiki&amp;gt;||&amp;lt;/nowiki&amp;gt; n%100&amp;gt;=20) ? 1 : 2;&lt;br /&gt;
|-&lt;br /&gt;
| ta || Tamil || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| te_IN || Telugu (India) || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| th || Thai || nplurals=1; plural=0;&lt;br /&gt;
|-&lt;br /&gt;
| tr_TR || Turkish (Turkey) || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| ur || Urdu || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| vi_VN || Vietnamese (Vietnam) || nplurals=1; plural=0;&lt;br /&gt;
|-&lt;br /&gt;
| zh_CN || Chinese (China) || nplurals=1; plural=0;&lt;br /&gt;
|-&lt;br /&gt;
| zh_TW || Chinese (Taiwan) || nplurals=1; plural=0;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Translation Accuracy Metrics ====&lt;br /&gt;
Due to inconsistent word count calculations across different translation platforms, we measure accuracy by the number of strings rather than word count. &lt;br /&gt;
&lt;br /&gt;
We evaluate translation accuracy using the following metrics:&lt;br /&gt;
* Source strings: The total number of original English messages that need to be translated.&lt;br /&gt;
* Translated strings: The number of messages that have been successfully translated into the target language.&lt;br /&gt;
&lt;br /&gt;
==== Translation Migration Status ====&lt;br /&gt;
For more details about accuracy, please refer to the Launchpad bugs.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Project !! Progress status !! Accuracy(%) !! Launchpad Bug !! Contributor !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| cloudkitty-dashboard || In Progress || 33% || https://bugs.launchpad.net/openstack-i18n/+bug/2121053 || DaGyeong Kim || N/A&lt;br /&gt;
|-&lt;br /&gt;
| designate-dashboard || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119196 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| freezer-web-ui || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2124944 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| heat-dashboard || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119199 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| ironic-ui || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119203 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| manila-ui || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119204 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| magnum-ui || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119200 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| networking-bgpvpn || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119207 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| neutron-fwaas-dashboard || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119206 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| neutron-vpnaas-dashboard || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119388 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| octavia-dashboard || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119197 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| trove-dashboard || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119201 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| zaqar-ui || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119468 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| zun-ui || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119205 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| horizon || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2125039 || N/A || N/A&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Etherpads ===&lt;br /&gt;
* [https://etherpad.opendev.org/p/vancouver-forum-i18n OpenInfra Summit Vancouver 2023 Forum]&lt;br /&gt;
* [https://etherpad.opendev.org/p/i18n-weblate i18n weblate migration]&lt;/div&gt;</summary>
		<author><name>Damekyung98</name></author>	</entry>

	<entry>
		<id>https://wiki.openstack.org/w/index.php?title=I18nTeam/Migration-to-weblate&amp;diff=186864</id>
		<title>I18nTeam/Migration-to-weblate</title>
		<link rel="alternate" type="text/html" href="https://wiki.openstack.org/w/index.php?title=I18nTeam/Migration-to-weblate&amp;diff=186864"/>
				<updated>2025-10-28T09:20:49Z</updated>
		
		<summary type="html">&lt;p&gt;Damekyung98: /* Translation Accuracy Metrics */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Migration to weblate ==&lt;br /&gt;
&lt;br /&gt;
=== Who's joining the migration project ===&lt;br /&gt;
* Ian Y. Choi (Manager)&lt;br /&gt;
* Seongsoo Cho&lt;br /&gt;
* Kuemjong Jeong&lt;br /&gt;
* Nayeon Kim&lt;br /&gt;
* Sion Shin&lt;br /&gt;
* Gwangil Kim&lt;br /&gt;
* DaGyeong Kim&lt;br /&gt;
&lt;br /&gt;
=== Planning a weblate migration schedule ===&lt;br /&gt;
You can find more details about each task below.&lt;br /&gt;
&lt;br /&gt;
* Define the scope of target test projects&lt;br /&gt;
** All vs. a few projects (e.g., openstack-manuals, nova, i18n, horizon)&lt;br /&gt;
* Make Translation Infrastructure Scripts compatible with Weblate&lt;br /&gt;
** Weblate project creation with settings if the target project is not existing on the platform&lt;br /&gt;
*** (If it is not supported, Weblate projects will be created manually)&lt;br /&gt;
*** Testing needs to be performed locally, since the scripts are executed on 06:00 UTC daily.&lt;br /&gt;
* ZuuL Integration Test&lt;br /&gt;
** Determine when to test (e.g., Test methodology without waiting at 06:00 UTC?)&lt;br /&gt;
** Integration test with all translation target projects&lt;br /&gt;
* Making tools for extracting statistical data from Weblate&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Action Item ===&lt;br /&gt;
&lt;br /&gt;
==== Define the scope of target test projects ====&lt;br /&gt;
* Configure Weblate with the information set in Zanata.&lt;br /&gt;
* User information is not migrated.&lt;br /&gt;
&lt;br /&gt;
====  Make Translation Infrastructure Scripts compatible with Weblate ====&lt;br /&gt;
* WIP patch to support Weblate for https://opendev.org/openstack/openstack-zuul-jobs/src/branch/master/roles/prepare-zanata-client/files/&lt;br /&gt;
&lt;br /&gt;
====  Zuul Integration Test ====&lt;br /&gt;
Create and test a ZuuL Job that performs the following tasks&lt;br /&gt;
* Uploading translation files to Weblate when new changes are made to your project&lt;br /&gt;
* Upload translations from Weblate to your project every day at 06 UTC&lt;br /&gt;
&lt;br /&gt;
==== Making tools for extracting statistical data from Weblate ====&lt;br /&gt;
* weblate_userinfo.py : Done ( https://review.opendev.org/c/openstack/i18n/+/893361 ) &lt;br /&gt;
** 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.&lt;br /&gt;
* weblate_users.py : Done ( https://review.opendev.org/c/openstack/i18n/+/895763 ) &lt;br /&gt;
** Generates a list of Weblate language contributors.&lt;br /&gt;
* weblate_utils.py : Done ( https://review.opendev.org/c/openstack/i18n/+/896308 )&lt;br /&gt;
** Provides basic classes used by the other scripts&lt;br /&gt;
*** IniConfig class to get the key and url for the weblate server&lt;br /&gt;
*** WeblateRestService class that communicates with the Weblate REST API&lt;br /&gt;
* weblate_stats.py : Working ( https://review.opendev.org/c/openstack/i18n/+/896306 ) &lt;br /&gt;
** (describe the role of the tool )&lt;br /&gt;
* weblate_records.py : Working  ( https://review.opendev.org/c/openstack/i18n/+/896306 ) &lt;br /&gt;
** (describe the role of the tool )&lt;br /&gt;
&lt;br /&gt;
=== List of projects and status ===&lt;br /&gt;
&lt;br /&gt;
==== Migration Scope ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Item !! Count&lt;br /&gt;
|-&lt;br /&gt;
| Total projects || 127&lt;br /&gt;
|-&lt;br /&gt;
| Total versions || 12&lt;br /&gt;
|-&lt;br /&gt;
| Total Languages || 54&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Version =====&lt;br /&gt;
We determined the migration version based on the branches that currently exist in the main services.&lt;br /&gt;
&lt;br /&gt;
Note: Some projects may not have this branch.&lt;br /&gt;
&lt;br /&gt;
Versions to migrate:&lt;br /&gt;
* master&lt;br /&gt;
* stable/2025.2&lt;br /&gt;
* stable/2025.1&lt;br /&gt;
* stable/2024.2&lt;br /&gt;
* stable/2024.1&lt;br /&gt;
* unmaintained/2023.1&lt;br /&gt;
* unmaintained/zed&lt;br /&gt;
* unmaintained/wallaby&lt;br /&gt;
* unmaintained/victoria&lt;br /&gt;
* unmaintained/yoga&lt;br /&gt;
* unmaintained/xena&lt;br /&gt;
&lt;br /&gt;
===== Languages plurals=====&lt;br /&gt;
&lt;br /&gt;
* [[Language Plurals]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Language Code !! Language Name !! Plurals&lt;br /&gt;
|-&lt;br /&gt;
| ar || Arabic || nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100&amp;gt;=3 &amp;amp;&amp;amp; n%100&amp;lt;=10 ? 3 : n%100&amp;gt;=11 ? 4 : 5;&lt;br /&gt;
|-&lt;br /&gt;
| as || Assamese || nplurals=2; plural=n &amp;gt; 1;&lt;br /&gt;
|-&lt;br /&gt;
| bg_BG || Bulgarian (Bulgaria) || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| bn_IN || Bengali (India) || nplurals=2; plural=n &amp;gt; 1;&lt;br /&gt;
|-&lt;br /&gt;
| brx || Bodo || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| ca || Catalan || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| cs || Czech || nplurals=3; plural=(n==1) ? 0 : (n&amp;gt;=2 &amp;amp;&amp;amp; n&amp;lt;=4) ? 1 : 2;&lt;br /&gt;
|-&lt;br /&gt;
| de || German || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| el || Greek || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| en_GB || English (United Kingdom) || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| en_US || English (United States) || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| en_AU || English (Australia) || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| eo || Esperanto || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| es || Spanish || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| es_MX || Spanish (Mexico) || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| fa || Persian || nplurals=2; plural=n &amp;gt; 1;&lt;br /&gt;
|-&lt;br /&gt;
| fi_FI || Finnish (Finland) || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| fil || Filipino || nplurals=2; plural=n != 1 &amp;amp;&amp;amp; n != 2 &amp;amp;&amp;amp; n != 3 &amp;amp;&amp;amp; (n % 10 == 4 &amp;lt;nowiki&amp;gt;||&amp;lt;/nowiki&amp;gt; n % 10 == 6 &amp;lt;nowiki&amp;gt;||&amp;lt;/nowiki&amp;gt; n % 10 == 9);&lt;br /&gt;
|-&lt;br /&gt;
| fr || French || nplurals=2; plural=n &amp;gt; 1;&lt;br /&gt;
|-&lt;br /&gt;
| gu || Gujarati || nplurals=2; plural=n &amp;gt; 1;&lt;br /&gt;
|-&lt;br /&gt;
| he || Hebrew || nplurals=4; plural=(n == 1) ? 0 : ((n == 2) ? 1 : ((n &amp;gt; 10 &amp;amp;&amp;amp; n % 10 == 0) ? 2 : 3));&lt;br /&gt;
|-&lt;br /&gt;
| hi || Hindi || nplurals=2; plural=n &amp;gt; 1;&lt;br /&gt;
|-&lt;br /&gt;
| hu || Hungarian || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| id || Indonesian || nplurals=1; plural=0;&lt;br /&gt;
|-&lt;br /&gt;
| it || Italian || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| ja || Japanese || nplurals=1; plural=0;&lt;br /&gt;
|-&lt;br /&gt;
| ka_GE || Georgian (Georgia) || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| kn || Kannada || nplurals=2; plural=n &amp;gt; 1;&lt;br /&gt;
|-&lt;br /&gt;
| ko_KR || Korean (Korea) || nplurals=1; plural=0;&lt;br /&gt;
|-&lt;br /&gt;
| kok || Konkani || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| ks || Kashmiri || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| lo || Lao || nplurals=1; plural=0;&lt;br /&gt;
|-&lt;br /&gt;
| mai || Maithili || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| mni || Manipuri || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| mr || Marathi || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| ne || Nepali || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| nl_NL || Dutch (Netherlands) || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| pa_IN || Punjabi (India) || nplurals=2; plural=n &amp;gt; 1;&lt;br /&gt;
|-&lt;br /&gt;
| pl_PL || Polish (Poland) || nplurals=3; plural=n==1 ? 0 : n%10&amp;gt;=2 &amp;amp;&amp;amp; n%10&amp;lt;=4 &amp;amp;&amp;amp; (n%100&amp;lt;10 &amp;lt;nowiki&amp;gt;||&amp;lt;/nowiki&amp;gt; n%100&amp;gt;=20) ? 1 : 2;&lt;br /&gt;
|-&lt;br /&gt;
| pt || Portuguese || nplurals=2; plural=n &amp;gt; 1;&lt;br /&gt;
|-&lt;br /&gt;
| pt_BR || Portuguese (Brazil) || nplurals=2; plural=n &amp;gt; 1;&lt;br /&gt;
|-&lt;br /&gt;
| ro || Romanian || nplurals=3; plural=n==1 ? 0 : (n==0 &amp;lt;nowiki&amp;gt;||&amp;lt;/nowiki&amp;gt; (n%100 &amp;gt; 0 &amp;amp;&amp;amp; n%100 &amp;lt; 20)) ? 1 : 2;&lt;br /&gt;
|-&lt;br /&gt;
| ru || Russian || nplurals=3; plural=n%10==1 &amp;amp;&amp;amp; n%100!=11 ? 0 : n%10&amp;gt;=2 &amp;amp;&amp;amp; n%10&amp;lt;=4 &amp;amp;&amp;amp; (n%100&amp;lt;10 &amp;lt;nowiki&amp;gt;||&amp;lt;/nowiki&amp;gt; n%100&amp;gt;=20) ? 1 : 2;&lt;br /&gt;
|-&lt;br /&gt;
| sl_SI || Slovenian (Slovenia) || nplurals=4; plural=n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 &amp;lt;nowiki&amp;gt;||&amp;lt;/nowiki&amp;gt; n%100==4 ? 2 : 3;&lt;br /&gt;
|-&lt;br /&gt;
| sq || Albanian || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| sr || Serbian || nplurals=3; plural=n%10==1 &amp;amp;&amp;amp; n%100!=11 ? 0 : n%10&amp;gt;=2 &amp;amp;&amp;amp; n%10&amp;lt;=4 &amp;amp;&amp;amp; (n%100&amp;lt;10 &amp;lt;nowiki&amp;gt;||&amp;lt;/nowiki&amp;gt; n%100&amp;gt;=20) ? 1 : 2;&lt;br /&gt;
|-&lt;br /&gt;
| ta || Tamil || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| te_IN || Telugu (India) || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| th || Thai || nplurals=1; plural=0;&lt;br /&gt;
|-&lt;br /&gt;
| tr_TR || Turkish (Turkey) || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| ur || Urdu || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| vi_VN || Vietnamese (Vietnam) || nplurals=1; plural=0;&lt;br /&gt;
|-&lt;br /&gt;
| zh_CN || Chinese (China) || nplurals=1; plural=0;&lt;br /&gt;
|-&lt;br /&gt;
| zh_TW || Chinese (Taiwan) || nplurals=1; plural=0;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Translation Accuracy Metrics ====&lt;br /&gt;
Due to inconsistent word count calculations across different translation platforms, we measure accuracy by the number of strings rather than word count. &lt;br /&gt;
&lt;br /&gt;
We evaluate translation accuracy using the following metrics:&lt;br /&gt;
* Source strings&lt;br /&gt;
* Translated strings&lt;br /&gt;
&lt;br /&gt;
==== Translation Migration Status ====&lt;br /&gt;
For more details about accuracy, please refer to the Launchpad bugs.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Project !! Progress status !! Accuracy(%) !! Launchpad Bug !! Contributor !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| cloudkitty-dashboard || In Progress || 33% || https://bugs.launchpad.net/openstack-i18n/+bug/2121053 || DaGyeong Kim || N/A&lt;br /&gt;
|-&lt;br /&gt;
| designate-dashboard || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119196 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| freezer-web-ui || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2124944 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| heat-dashboard || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119199 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| ironic-ui || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119203 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| manila-ui || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119204 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| magnum-ui || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119200 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| networking-bgpvpn || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119207 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| neutron-fwaas-dashboard || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119206 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| neutron-vpnaas-dashboard || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119388 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| octavia-dashboard || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119197 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| trove-dashboard || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119201 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| zaqar-ui || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119468 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| zun-ui || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119205 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| horizon || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2125039 || N/A || N/A&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Etherpads ===&lt;br /&gt;
* [https://etherpad.opendev.org/p/vancouver-forum-i18n OpenInfra Summit Vancouver 2023 Forum]&lt;br /&gt;
* [https://etherpad.opendev.org/p/i18n-weblate i18n weblate migration]&lt;/div&gt;</summary>
		<author><name>Damekyung98</name></author>	</entry>

	<entry>
		<id>https://wiki.openstack.org/w/index.php?title=I18nTeam/Migration-to-weblate&amp;diff=186863</id>
		<title>I18nTeam/Migration-to-weblate</title>
		<link rel="alternate" type="text/html" href="https://wiki.openstack.org/w/index.php?title=I18nTeam/Migration-to-weblate&amp;diff=186863"/>
				<updated>2025-10-28T09:18:57Z</updated>
		
		<summary type="html">&lt;p&gt;Damekyung98: /* List of projects and status */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Migration to weblate ==&lt;br /&gt;
&lt;br /&gt;
=== Who's joining the migration project ===&lt;br /&gt;
* Ian Y. Choi (Manager)&lt;br /&gt;
* Seongsoo Cho&lt;br /&gt;
* Kuemjong Jeong&lt;br /&gt;
* Nayeon Kim&lt;br /&gt;
* Sion Shin&lt;br /&gt;
* Gwangil Kim&lt;br /&gt;
* DaGyeong Kim&lt;br /&gt;
&lt;br /&gt;
=== Planning a weblate migration schedule ===&lt;br /&gt;
You can find more details about each task below.&lt;br /&gt;
&lt;br /&gt;
* Define the scope of target test projects&lt;br /&gt;
** All vs. a few projects (e.g., openstack-manuals, nova, i18n, horizon)&lt;br /&gt;
* Make Translation Infrastructure Scripts compatible with Weblate&lt;br /&gt;
** Weblate project creation with settings if the target project is not existing on the platform&lt;br /&gt;
*** (If it is not supported, Weblate projects will be created manually)&lt;br /&gt;
*** Testing needs to be performed locally, since the scripts are executed on 06:00 UTC daily.&lt;br /&gt;
* ZuuL Integration Test&lt;br /&gt;
** Determine when to test (e.g., Test methodology without waiting at 06:00 UTC?)&lt;br /&gt;
** Integration test with all translation target projects&lt;br /&gt;
* Making tools for extracting statistical data from Weblate&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Action Item ===&lt;br /&gt;
&lt;br /&gt;
==== Define the scope of target test projects ====&lt;br /&gt;
* Configure Weblate with the information set in Zanata.&lt;br /&gt;
* User information is not migrated.&lt;br /&gt;
&lt;br /&gt;
====  Make Translation Infrastructure Scripts compatible with Weblate ====&lt;br /&gt;
* WIP patch to support Weblate for https://opendev.org/openstack/openstack-zuul-jobs/src/branch/master/roles/prepare-zanata-client/files/&lt;br /&gt;
&lt;br /&gt;
====  Zuul Integration Test ====&lt;br /&gt;
Create and test a ZuuL Job that performs the following tasks&lt;br /&gt;
* Uploading translation files to Weblate when new changes are made to your project&lt;br /&gt;
* Upload translations from Weblate to your project every day at 06 UTC&lt;br /&gt;
&lt;br /&gt;
==== Making tools for extracting statistical data from Weblate ====&lt;br /&gt;
* weblate_userinfo.py : Done ( https://review.opendev.org/c/openstack/i18n/+/893361 ) &lt;br /&gt;
** 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.&lt;br /&gt;
* weblate_users.py : Done ( https://review.opendev.org/c/openstack/i18n/+/895763 ) &lt;br /&gt;
** Generates a list of Weblate language contributors.&lt;br /&gt;
* weblate_utils.py : Done ( https://review.opendev.org/c/openstack/i18n/+/896308 )&lt;br /&gt;
** Provides basic classes used by the other scripts&lt;br /&gt;
*** IniConfig class to get the key and url for the weblate server&lt;br /&gt;
*** WeblateRestService class that communicates with the Weblate REST API&lt;br /&gt;
* weblate_stats.py : Working ( https://review.opendev.org/c/openstack/i18n/+/896306 ) &lt;br /&gt;
** (describe the role of the tool )&lt;br /&gt;
* weblate_records.py : Working  ( https://review.opendev.org/c/openstack/i18n/+/896306 ) &lt;br /&gt;
** (describe the role of the tool )&lt;br /&gt;
&lt;br /&gt;
=== List of projects and status ===&lt;br /&gt;
&lt;br /&gt;
==== Migration Scope ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Item !! Count&lt;br /&gt;
|-&lt;br /&gt;
| Total projects || 127&lt;br /&gt;
|-&lt;br /&gt;
| Total versions || 12&lt;br /&gt;
|-&lt;br /&gt;
| Total Languages || 54&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Version =====&lt;br /&gt;
We determined the migration version based on the branches that currently exist in the main services.&lt;br /&gt;
&lt;br /&gt;
Note: Some projects may not have this branch.&lt;br /&gt;
&lt;br /&gt;
Versions to migrate:&lt;br /&gt;
* master&lt;br /&gt;
* stable/2025.2&lt;br /&gt;
* stable/2025.1&lt;br /&gt;
* stable/2024.2&lt;br /&gt;
* stable/2024.1&lt;br /&gt;
* unmaintained/2023.1&lt;br /&gt;
* unmaintained/zed&lt;br /&gt;
* unmaintained/wallaby&lt;br /&gt;
* unmaintained/victoria&lt;br /&gt;
* unmaintained/yoga&lt;br /&gt;
* unmaintained/xena&lt;br /&gt;
&lt;br /&gt;
===== Languages plurals=====&lt;br /&gt;
&lt;br /&gt;
* [[Language Plurals]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Language Code !! Language Name !! Plurals&lt;br /&gt;
|-&lt;br /&gt;
| ar || Arabic || nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100&amp;gt;=3 &amp;amp;&amp;amp; n%100&amp;lt;=10 ? 3 : n%100&amp;gt;=11 ? 4 : 5;&lt;br /&gt;
|-&lt;br /&gt;
| as || Assamese || nplurals=2; plural=n &amp;gt; 1;&lt;br /&gt;
|-&lt;br /&gt;
| bg_BG || Bulgarian (Bulgaria) || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| bn_IN || Bengali (India) || nplurals=2; plural=n &amp;gt; 1;&lt;br /&gt;
|-&lt;br /&gt;
| brx || Bodo || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| ca || Catalan || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| cs || Czech || nplurals=3; plural=(n==1) ? 0 : (n&amp;gt;=2 &amp;amp;&amp;amp; n&amp;lt;=4) ? 1 : 2;&lt;br /&gt;
|-&lt;br /&gt;
| de || German || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| el || Greek || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| en_GB || English (United Kingdom) || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| en_US || English (United States) || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| en_AU || English (Australia) || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| eo || Esperanto || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| es || Spanish || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| es_MX || Spanish (Mexico) || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| fa || Persian || nplurals=2; plural=n &amp;gt; 1;&lt;br /&gt;
|-&lt;br /&gt;
| fi_FI || Finnish (Finland) || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| fil || Filipino || nplurals=2; plural=n != 1 &amp;amp;&amp;amp; n != 2 &amp;amp;&amp;amp; n != 3 &amp;amp;&amp;amp; (n % 10 == 4 &amp;lt;nowiki&amp;gt;||&amp;lt;/nowiki&amp;gt; n % 10 == 6 &amp;lt;nowiki&amp;gt;||&amp;lt;/nowiki&amp;gt; n % 10 == 9);&lt;br /&gt;
|-&lt;br /&gt;
| fr || French || nplurals=2; plural=n &amp;gt; 1;&lt;br /&gt;
|-&lt;br /&gt;
| gu || Gujarati || nplurals=2; plural=n &amp;gt; 1;&lt;br /&gt;
|-&lt;br /&gt;
| he || Hebrew || nplurals=4; plural=(n == 1) ? 0 : ((n == 2) ? 1 : ((n &amp;gt; 10 &amp;amp;&amp;amp; n % 10 == 0) ? 2 : 3));&lt;br /&gt;
|-&lt;br /&gt;
| hi || Hindi || nplurals=2; plural=n &amp;gt; 1;&lt;br /&gt;
|-&lt;br /&gt;
| hu || Hungarian || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| id || Indonesian || nplurals=1; plural=0;&lt;br /&gt;
|-&lt;br /&gt;
| it || Italian || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| ja || Japanese || nplurals=1; plural=0;&lt;br /&gt;
|-&lt;br /&gt;
| ka_GE || Georgian (Georgia) || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| kn || Kannada || nplurals=2; plural=n &amp;gt; 1;&lt;br /&gt;
|-&lt;br /&gt;
| ko_KR || Korean (Korea) || nplurals=1; plural=0;&lt;br /&gt;
|-&lt;br /&gt;
| kok || Konkani || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| ks || Kashmiri || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| lo || Lao || nplurals=1; plural=0;&lt;br /&gt;
|-&lt;br /&gt;
| mai || Maithili || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| mni || Manipuri || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| mr || Marathi || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| ne || Nepali || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| nl_NL || Dutch (Netherlands) || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| pa_IN || Punjabi (India) || nplurals=2; plural=n &amp;gt; 1;&lt;br /&gt;
|-&lt;br /&gt;
| pl_PL || Polish (Poland) || nplurals=3; plural=n==1 ? 0 : n%10&amp;gt;=2 &amp;amp;&amp;amp; n%10&amp;lt;=4 &amp;amp;&amp;amp; (n%100&amp;lt;10 &amp;lt;nowiki&amp;gt;||&amp;lt;/nowiki&amp;gt; n%100&amp;gt;=20) ? 1 : 2;&lt;br /&gt;
|-&lt;br /&gt;
| pt || Portuguese || nplurals=2; plural=n &amp;gt; 1;&lt;br /&gt;
|-&lt;br /&gt;
| pt_BR || Portuguese (Brazil) || nplurals=2; plural=n &amp;gt; 1;&lt;br /&gt;
|-&lt;br /&gt;
| ro || Romanian || nplurals=3; plural=n==1 ? 0 : (n==0 &amp;lt;nowiki&amp;gt;||&amp;lt;/nowiki&amp;gt; (n%100 &amp;gt; 0 &amp;amp;&amp;amp; n%100 &amp;lt; 20)) ? 1 : 2;&lt;br /&gt;
|-&lt;br /&gt;
| ru || Russian || nplurals=3; plural=n%10==1 &amp;amp;&amp;amp; n%100!=11 ? 0 : n%10&amp;gt;=2 &amp;amp;&amp;amp; n%10&amp;lt;=4 &amp;amp;&amp;amp; (n%100&amp;lt;10 &amp;lt;nowiki&amp;gt;||&amp;lt;/nowiki&amp;gt; n%100&amp;gt;=20) ? 1 : 2;&lt;br /&gt;
|-&lt;br /&gt;
| sl_SI || Slovenian (Slovenia) || nplurals=4; plural=n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 &amp;lt;nowiki&amp;gt;||&amp;lt;/nowiki&amp;gt; n%100==4 ? 2 : 3;&lt;br /&gt;
|-&lt;br /&gt;
| sq || Albanian || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| sr || Serbian || nplurals=3; plural=n%10==1 &amp;amp;&amp;amp; n%100!=11 ? 0 : n%10&amp;gt;=2 &amp;amp;&amp;amp; n%10&amp;lt;=4 &amp;amp;&amp;amp; (n%100&amp;lt;10 &amp;lt;nowiki&amp;gt;||&amp;lt;/nowiki&amp;gt; n%100&amp;gt;=20) ? 1 : 2;&lt;br /&gt;
|-&lt;br /&gt;
| ta || Tamil || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| te_IN || Telugu (India) || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| th || Thai || nplurals=1; plural=0;&lt;br /&gt;
|-&lt;br /&gt;
| tr_TR || Turkish (Turkey) || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| ur || Urdu || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| vi_VN || Vietnamese (Vietnam) || nplurals=1; plural=0;&lt;br /&gt;
|-&lt;br /&gt;
| zh_CN || Chinese (China) || nplurals=1; plural=0;&lt;br /&gt;
|-&lt;br /&gt;
| zh_TW || Chinese (Taiwan) || nplurals=1; plural=0;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Translation Accuracy Metrics ====&lt;br /&gt;
Due to inconsistent word count calculations across different translation platforms, we measure accuracy by the number of strings rather than word count. &lt;br /&gt;
&lt;br /&gt;
We evaluate translation accuracy using the following metrics:&lt;br /&gt;
- Source strings&lt;br /&gt;
- Translated strings&lt;br /&gt;
&lt;br /&gt;
==== Translation Migration Status ====&lt;br /&gt;
For more details about accuracy, please refer to the Launchpad bugs.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Project !! Progress status !! Accuracy(%) !! Launchpad Bug !! Contributor !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| cloudkitty-dashboard || In Progress || 33% || https://bugs.launchpad.net/openstack-i18n/+bug/2121053 || DaGyeong Kim || N/A&lt;br /&gt;
|-&lt;br /&gt;
| designate-dashboard || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119196 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| freezer-web-ui || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2124944 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| heat-dashboard || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119199 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| ironic-ui || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119203 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| manila-ui || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119204 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| magnum-ui || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119200 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| networking-bgpvpn || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119207 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| neutron-fwaas-dashboard || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119206 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| neutron-vpnaas-dashboard || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119388 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| octavia-dashboard || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119197 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| trove-dashboard || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119201 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| zaqar-ui || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119468 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| zun-ui || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119205 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| horizon || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2125039 || N/A || N/A&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Etherpads ===&lt;br /&gt;
* [https://etherpad.opendev.org/p/vancouver-forum-i18n OpenInfra Summit Vancouver 2023 Forum]&lt;br /&gt;
* [https://etherpad.opendev.org/p/i18n-weblate i18n weblate migration]&lt;/div&gt;</summary>
		<author><name>Damekyung98</name></author>	</entry>

	<entry>
		<id>https://wiki.openstack.org/w/index.php?title=I18nTeam/Migration-to-weblate&amp;diff=186862</id>
		<title>I18nTeam/Migration-to-weblate</title>
		<link rel="alternate" type="text/html" href="https://wiki.openstack.org/w/index.php?title=I18nTeam/Migration-to-weblate&amp;diff=186862"/>
				<updated>2025-10-28T09:15:24Z</updated>
		
		<summary type="html">&lt;p&gt;Damekyung98: /* Translation Migration Status */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Migration to weblate ==&lt;br /&gt;
&lt;br /&gt;
=== Who's joining the migration project ===&lt;br /&gt;
* Ian Y. Choi (Manager)&lt;br /&gt;
* Seongsoo Cho&lt;br /&gt;
* Kuemjong Jeong&lt;br /&gt;
* Nayeon Kim&lt;br /&gt;
* Sion Shin&lt;br /&gt;
* Gwangil Kim&lt;br /&gt;
* DaGyeong Kim&lt;br /&gt;
&lt;br /&gt;
=== Planning a weblate migration schedule ===&lt;br /&gt;
You can find more details about each task below.&lt;br /&gt;
&lt;br /&gt;
* Define the scope of target test projects&lt;br /&gt;
** All vs. a few projects (e.g., openstack-manuals, nova, i18n, horizon)&lt;br /&gt;
* Make Translation Infrastructure Scripts compatible with Weblate&lt;br /&gt;
** Weblate project creation with settings if the target project is not existing on the platform&lt;br /&gt;
*** (If it is not supported, Weblate projects will be created manually)&lt;br /&gt;
*** Testing needs to be performed locally, since the scripts are executed on 06:00 UTC daily.&lt;br /&gt;
* ZuuL Integration Test&lt;br /&gt;
** Determine when to test (e.g., Test methodology without waiting at 06:00 UTC?)&lt;br /&gt;
** Integration test with all translation target projects&lt;br /&gt;
* Making tools for extracting statistical data from Weblate&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Action Item ===&lt;br /&gt;
&lt;br /&gt;
==== Define the scope of target test projects ====&lt;br /&gt;
* Configure Weblate with the information set in Zanata.&lt;br /&gt;
* User information is not migrated.&lt;br /&gt;
&lt;br /&gt;
====  Make Translation Infrastructure Scripts compatible with Weblate ====&lt;br /&gt;
* WIP patch to support Weblate for https://opendev.org/openstack/openstack-zuul-jobs/src/branch/master/roles/prepare-zanata-client/files/&lt;br /&gt;
&lt;br /&gt;
====  Zuul Integration Test ====&lt;br /&gt;
Create and test a ZuuL Job that performs the following tasks&lt;br /&gt;
* Uploading translation files to Weblate when new changes are made to your project&lt;br /&gt;
* Upload translations from Weblate to your project every day at 06 UTC&lt;br /&gt;
&lt;br /&gt;
==== Making tools for extracting statistical data from Weblate ====&lt;br /&gt;
* weblate_userinfo.py : Done ( https://review.opendev.org/c/openstack/i18n/+/893361 ) &lt;br /&gt;
** 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.&lt;br /&gt;
* weblate_users.py : Done ( https://review.opendev.org/c/openstack/i18n/+/895763 ) &lt;br /&gt;
** Generates a list of Weblate language contributors.&lt;br /&gt;
* weblate_utils.py : Done ( https://review.opendev.org/c/openstack/i18n/+/896308 )&lt;br /&gt;
** Provides basic classes used by the other scripts&lt;br /&gt;
*** IniConfig class to get the key and url for the weblate server&lt;br /&gt;
*** WeblateRestService class that communicates with the Weblate REST API&lt;br /&gt;
* weblate_stats.py : Working ( https://review.opendev.org/c/openstack/i18n/+/896306 ) &lt;br /&gt;
** (describe the role of the tool )&lt;br /&gt;
* weblate_records.py : Working  ( https://review.opendev.org/c/openstack/i18n/+/896306 ) &lt;br /&gt;
** (describe the role of the tool )&lt;br /&gt;
&lt;br /&gt;
=== List of projects and status ===&lt;br /&gt;
&lt;br /&gt;
==== Migration Scope ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Item !! Count&lt;br /&gt;
|-&lt;br /&gt;
| Total projects || 127&lt;br /&gt;
|-&lt;br /&gt;
| Total versions || 12&lt;br /&gt;
|-&lt;br /&gt;
| Total Languages || 54&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Version =====&lt;br /&gt;
We determined the migration version based on the branches that currently exist in the main services.&lt;br /&gt;
&lt;br /&gt;
Note: Some projects may not have this branch.&lt;br /&gt;
&lt;br /&gt;
Versions to migrate:&lt;br /&gt;
* master&lt;br /&gt;
* stable/2025.2&lt;br /&gt;
* stable/2025.1&lt;br /&gt;
* stable/2024.2&lt;br /&gt;
* stable/2024.1&lt;br /&gt;
* unmaintained/2023.1&lt;br /&gt;
* unmaintained/zed&lt;br /&gt;
* unmaintained/wallaby&lt;br /&gt;
* unmaintained/victoria&lt;br /&gt;
* unmaintained/yoga&lt;br /&gt;
* unmaintained/xena&lt;br /&gt;
&lt;br /&gt;
===== Languages plurals=====&lt;br /&gt;
&lt;br /&gt;
* [[Language Plurals]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Language Code !! Language Name !! Plurals&lt;br /&gt;
|-&lt;br /&gt;
| ar || Arabic || nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100&amp;gt;=3 &amp;amp;&amp;amp; n%100&amp;lt;=10 ? 3 : n%100&amp;gt;=11 ? 4 : 5;&lt;br /&gt;
|-&lt;br /&gt;
| as || Assamese || nplurals=2; plural=n &amp;gt; 1;&lt;br /&gt;
|-&lt;br /&gt;
| bg_BG || Bulgarian (Bulgaria) || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| bn_IN || Bengali (India) || nplurals=2; plural=n &amp;gt; 1;&lt;br /&gt;
|-&lt;br /&gt;
| brx || Bodo || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| ca || Catalan || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| cs || Czech || nplurals=3; plural=(n==1) ? 0 : (n&amp;gt;=2 &amp;amp;&amp;amp; n&amp;lt;=4) ? 1 : 2;&lt;br /&gt;
|-&lt;br /&gt;
| de || German || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| el || Greek || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| en_GB || English (United Kingdom) || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| en_US || English (United States) || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| en_AU || English (Australia) || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| eo || Esperanto || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| es || Spanish || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| es_MX || Spanish (Mexico) || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| fa || Persian || nplurals=2; plural=n &amp;gt; 1;&lt;br /&gt;
|-&lt;br /&gt;
| fi_FI || Finnish (Finland) || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| fil || Filipino || nplurals=2; plural=n != 1 &amp;amp;&amp;amp; n != 2 &amp;amp;&amp;amp; n != 3 &amp;amp;&amp;amp; (n % 10 == 4 &amp;lt;nowiki&amp;gt;||&amp;lt;/nowiki&amp;gt; n % 10 == 6 &amp;lt;nowiki&amp;gt;||&amp;lt;/nowiki&amp;gt; n % 10 == 9);&lt;br /&gt;
|-&lt;br /&gt;
| fr || French || nplurals=2; plural=n &amp;gt; 1;&lt;br /&gt;
|-&lt;br /&gt;
| gu || Gujarati || nplurals=2; plural=n &amp;gt; 1;&lt;br /&gt;
|-&lt;br /&gt;
| he || Hebrew || nplurals=4; plural=(n == 1) ? 0 : ((n == 2) ? 1 : ((n &amp;gt; 10 &amp;amp;&amp;amp; n % 10 == 0) ? 2 : 3));&lt;br /&gt;
|-&lt;br /&gt;
| hi || Hindi || nplurals=2; plural=n &amp;gt; 1;&lt;br /&gt;
|-&lt;br /&gt;
| hu || Hungarian || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| id || Indonesian || nplurals=1; plural=0;&lt;br /&gt;
|-&lt;br /&gt;
| it || Italian || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| ja || Japanese || nplurals=1; plural=0;&lt;br /&gt;
|-&lt;br /&gt;
| ka_GE || Georgian (Georgia) || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| kn || Kannada || nplurals=2; plural=n &amp;gt; 1;&lt;br /&gt;
|-&lt;br /&gt;
| ko_KR || Korean (Korea) || nplurals=1; plural=0;&lt;br /&gt;
|-&lt;br /&gt;
| kok || Konkani || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| ks || Kashmiri || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| lo || Lao || nplurals=1; plural=0;&lt;br /&gt;
|-&lt;br /&gt;
| mai || Maithili || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| mni || Manipuri || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| mr || Marathi || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| ne || Nepali || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| nl_NL || Dutch (Netherlands) || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| pa_IN || Punjabi (India) || nplurals=2; plural=n &amp;gt; 1;&lt;br /&gt;
|-&lt;br /&gt;
| pl_PL || Polish (Poland) || nplurals=3; plural=n==1 ? 0 : n%10&amp;gt;=2 &amp;amp;&amp;amp; n%10&amp;lt;=4 &amp;amp;&amp;amp; (n%100&amp;lt;10 &amp;lt;nowiki&amp;gt;||&amp;lt;/nowiki&amp;gt; n%100&amp;gt;=20) ? 1 : 2;&lt;br /&gt;
|-&lt;br /&gt;
| pt || Portuguese || nplurals=2; plural=n &amp;gt; 1;&lt;br /&gt;
|-&lt;br /&gt;
| pt_BR || Portuguese (Brazil) || nplurals=2; plural=n &amp;gt; 1;&lt;br /&gt;
|-&lt;br /&gt;
| ro || Romanian || nplurals=3; plural=n==1 ? 0 : (n==0 &amp;lt;nowiki&amp;gt;||&amp;lt;/nowiki&amp;gt; (n%100 &amp;gt; 0 &amp;amp;&amp;amp; n%100 &amp;lt; 20)) ? 1 : 2;&lt;br /&gt;
|-&lt;br /&gt;
| ru || Russian || nplurals=3; plural=n%10==1 &amp;amp;&amp;amp; n%100!=11 ? 0 : n%10&amp;gt;=2 &amp;amp;&amp;amp; n%10&amp;lt;=4 &amp;amp;&amp;amp; (n%100&amp;lt;10 &amp;lt;nowiki&amp;gt;||&amp;lt;/nowiki&amp;gt; n%100&amp;gt;=20) ? 1 : 2;&lt;br /&gt;
|-&lt;br /&gt;
| sl_SI || Slovenian (Slovenia) || nplurals=4; plural=n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 &amp;lt;nowiki&amp;gt;||&amp;lt;/nowiki&amp;gt; n%100==4 ? 2 : 3;&lt;br /&gt;
|-&lt;br /&gt;
| sq || Albanian || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| sr || Serbian || nplurals=3; plural=n%10==1 &amp;amp;&amp;amp; n%100!=11 ? 0 : n%10&amp;gt;=2 &amp;amp;&amp;amp; n%10&amp;lt;=4 &amp;amp;&amp;amp; (n%100&amp;lt;10 &amp;lt;nowiki&amp;gt;||&amp;lt;/nowiki&amp;gt; n%100&amp;gt;=20) ? 1 : 2;&lt;br /&gt;
|-&lt;br /&gt;
| ta || Tamil || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| te_IN || Telugu (India) || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| th || Thai || nplurals=1; plural=0;&lt;br /&gt;
|-&lt;br /&gt;
| tr_TR || Turkish (Turkey) || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| ur || Urdu || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| vi_VN || Vietnamese (Vietnam) || nplurals=1; plural=0;&lt;br /&gt;
|-&lt;br /&gt;
| zh_CN || Chinese (China) || nplurals=1; plural=0;&lt;br /&gt;
|-&lt;br /&gt;
| zh_TW || Chinese (Taiwan) || nplurals=1; plural=0;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Translation Migration Status ====&lt;br /&gt;
For more details about accuracy, please refer to the Launchpad bugs.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Project !! Progress status !! Accuracy(%) !! Launchpad Bug !! Contributor !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| cloudkitty-dashboard || In Progress || 33% || https://bugs.launchpad.net/openstack-i18n/+bug/2121053 || DaGyeong Kim || N/A&lt;br /&gt;
|-&lt;br /&gt;
| designate-dashboard || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119196 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| freezer-web-ui || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2124944 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| heat-dashboard || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119199 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| ironic-ui || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119203 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| manila-ui || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119204 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| magnum-ui || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119200 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| networking-bgpvpn || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119207 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| neutron-fwaas-dashboard || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119206 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| neutron-vpnaas-dashboard || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119388 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| octavia-dashboard || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119197 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| trove-dashboard || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119201 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| zaqar-ui || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119468 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| zun-ui || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119205 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| horizon || Not Started || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2125039 || N/A || N/A&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Etherpads ===&lt;br /&gt;
* [https://etherpad.opendev.org/p/vancouver-forum-i18n OpenInfra Summit Vancouver 2023 Forum]&lt;br /&gt;
* [https://etherpad.opendev.org/p/i18n-weblate i18n weblate migration]&lt;/div&gt;</summary>
		<author><name>Damekyung98</name></author>	</entry>

	<entry>
		<id>https://wiki.openstack.org/w/index.php?title=I18nTeam/Migration-to-weblate&amp;diff=186861</id>
		<title>I18nTeam/Migration-to-weblate</title>
		<link rel="alternate" type="text/html" href="https://wiki.openstack.org/w/index.php?title=I18nTeam/Migration-to-weblate&amp;diff=186861"/>
				<updated>2025-10-28T08:46:48Z</updated>
		
		<summary type="html">&lt;p&gt;Damekyung98: /* Translation Migration Status */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Migration to weblate ==&lt;br /&gt;
&lt;br /&gt;
=== Who's joining the migration project ===&lt;br /&gt;
* Ian Y. Choi (Manager)&lt;br /&gt;
* Seongsoo Cho&lt;br /&gt;
* Kuemjong Jeong&lt;br /&gt;
* Nayeon Kim&lt;br /&gt;
* Sion Shin&lt;br /&gt;
* Gwangil Kim&lt;br /&gt;
* DaGyeong Kim&lt;br /&gt;
&lt;br /&gt;
=== Planning a weblate migration schedule ===&lt;br /&gt;
You can find more details about each task below.&lt;br /&gt;
&lt;br /&gt;
* Define the scope of target test projects&lt;br /&gt;
** All vs. a few projects (e.g., openstack-manuals, nova, i18n, horizon)&lt;br /&gt;
* Make Translation Infrastructure Scripts compatible with Weblate&lt;br /&gt;
** Weblate project creation with settings if the target project is not existing on the platform&lt;br /&gt;
*** (If it is not supported, Weblate projects will be created manually)&lt;br /&gt;
*** Testing needs to be performed locally, since the scripts are executed on 06:00 UTC daily.&lt;br /&gt;
* ZuuL Integration Test&lt;br /&gt;
** Determine when to test (e.g., Test methodology without waiting at 06:00 UTC?)&lt;br /&gt;
** Integration test with all translation target projects&lt;br /&gt;
* Making tools for extracting statistical data from Weblate&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Action Item ===&lt;br /&gt;
&lt;br /&gt;
==== Define the scope of target test projects ====&lt;br /&gt;
* Configure Weblate with the information set in Zanata.&lt;br /&gt;
* User information is not migrated.&lt;br /&gt;
&lt;br /&gt;
====  Make Translation Infrastructure Scripts compatible with Weblate ====&lt;br /&gt;
* WIP patch to support Weblate for https://opendev.org/openstack/openstack-zuul-jobs/src/branch/master/roles/prepare-zanata-client/files/&lt;br /&gt;
&lt;br /&gt;
====  Zuul Integration Test ====&lt;br /&gt;
Create and test a ZuuL Job that performs the following tasks&lt;br /&gt;
* Uploading translation files to Weblate when new changes are made to your project&lt;br /&gt;
* Upload translations from Weblate to your project every day at 06 UTC&lt;br /&gt;
&lt;br /&gt;
==== Making tools for extracting statistical data from Weblate ====&lt;br /&gt;
* weblate_userinfo.py : Done ( https://review.opendev.org/c/openstack/i18n/+/893361 ) &lt;br /&gt;
** 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.&lt;br /&gt;
* weblate_users.py : Done ( https://review.opendev.org/c/openstack/i18n/+/895763 ) &lt;br /&gt;
** Generates a list of Weblate language contributors.&lt;br /&gt;
* weblate_utils.py : Done ( https://review.opendev.org/c/openstack/i18n/+/896308 )&lt;br /&gt;
** Provides basic classes used by the other scripts&lt;br /&gt;
*** IniConfig class to get the key and url for the weblate server&lt;br /&gt;
*** WeblateRestService class that communicates with the Weblate REST API&lt;br /&gt;
* weblate_stats.py : Working ( https://review.opendev.org/c/openstack/i18n/+/896306 ) &lt;br /&gt;
** (describe the role of the tool )&lt;br /&gt;
* weblate_records.py : Working  ( https://review.opendev.org/c/openstack/i18n/+/896306 ) &lt;br /&gt;
** (describe the role of the tool )&lt;br /&gt;
&lt;br /&gt;
=== List of projects and status ===&lt;br /&gt;
&lt;br /&gt;
==== Migration Scope ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Item !! Count&lt;br /&gt;
|-&lt;br /&gt;
| Total projects || 127&lt;br /&gt;
|-&lt;br /&gt;
| Total versions || 12&lt;br /&gt;
|-&lt;br /&gt;
| Total Languages || 54&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Version =====&lt;br /&gt;
We determined the migration version based on the branches that currently exist in the main services.&lt;br /&gt;
&lt;br /&gt;
Note: Some projects may not have this branch.&lt;br /&gt;
&lt;br /&gt;
Versions to migrate:&lt;br /&gt;
* master&lt;br /&gt;
* stable/2025.2&lt;br /&gt;
* stable/2025.1&lt;br /&gt;
* stable/2024.2&lt;br /&gt;
* stable/2024.1&lt;br /&gt;
* unmaintained/2023.1&lt;br /&gt;
* unmaintained/zed&lt;br /&gt;
* unmaintained/wallaby&lt;br /&gt;
* unmaintained/victoria&lt;br /&gt;
* unmaintained/yoga&lt;br /&gt;
* unmaintained/xena&lt;br /&gt;
&lt;br /&gt;
===== Languages plurals=====&lt;br /&gt;
&lt;br /&gt;
* [[Language Plurals]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Language Code !! Language Name !! Plurals&lt;br /&gt;
|-&lt;br /&gt;
| ar || Arabic || nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100&amp;gt;=3 &amp;amp;&amp;amp; n%100&amp;lt;=10 ? 3 : n%100&amp;gt;=11 ? 4 : 5;&lt;br /&gt;
|-&lt;br /&gt;
| as || Assamese || nplurals=2; plural=n &amp;gt; 1;&lt;br /&gt;
|-&lt;br /&gt;
| bg_BG || Bulgarian (Bulgaria) || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| bn_IN || Bengali (India) || nplurals=2; plural=n &amp;gt; 1;&lt;br /&gt;
|-&lt;br /&gt;
| brx || Bodo || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| ca || Catalan || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| cs || Czech || nplurals=3; plural=(n==1) ? 0 : (n&amp;gt;=2 &amp;amp;&amp;amp; n&amp;lt;=4) ? 1 : 2;&lt;br /&gt;
|-&lt;br /&gt;
| de || German || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| el || Greek || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| en_GB || English (United Kingdom) || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| en_US || English (United States) || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| en_AU || English (Australia) || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| eo || Esperanto || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| es || Spanish || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| es_MX || Spanish (Mexico) || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| fa || Persian || nplurals=2; plural=n &amp;gt; 1;&lt;br /&gt;
|-&lt;br /&gt;
| fi_FI || Finnish (Finland) || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| fil || Filipino || nplurals=2; plural=n != 1 &amp;amp;&amp;amp; n != 2 &amp;amp;&amp;amp; n != 3 &amp;amp;&amp;amp; (n % 10 == 4 &amp;lt;nowiki&amp;gt;||&amp;lt;/nowiki&amp;gt; n % 10 == 6 &amp;lt;nowiki&amp;gt;||&amp;lt;/nowiki&amp;gt; n % 10 == 9);&lt;br /&gt;
|-&lt;br /&gt;
| fr || French || nplurals=2; plural=n &amp;gt; 1;&lt;br /&gt;
|-&lt;br /&gt;
| gu || Gujarati || nplurals=2; plural=n &amp;gt; 1;&lt;br /&gt;
|-&lt;br /&gt;
| he || Hebrew || nplurals=4; plural=(n == 1) ? 0 : ((n == 2) ? 1 : ((n &amp;gt; 10 &amp;amp;&amp;amp; n % 10 == 0) ? 2 : 3));&lt;br /&gt;
|-&lt;br /&gt;
| hi || Hindi || nplurals=2; plural=n &amp;gt; 1;&lt;br /&gt;
|-&lt;br /&gt;
| hu || Hungarian || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| id || Indonesian || nplurals=1; plural=0;&lt;br /&gt;
|-&lt;br /&gt;
| it || Italian || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| ja || Japanese || nplurals=1; plural=0;&lt;br /&gt;
|-&lt;br /&gt;
| ka_GE || Georgian (Georgia) || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| kn || Kannada || nplurals=2; plural=n &amp;gt; 1;&lt;br /&gt;
|-&lt;br /&gt;
| ko_KR || Korean (Korea) || nplurals=1; plural=0;&lt;br /&gt;
|-&lt;br /&gt;
| kok || Konkani || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| ks || Kashmiri || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| lo || Lao || nplurals=1; plural=0;&lt;br /&gt;
|-&lt;br /&gt;
| mai || Maithili || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| mni || Manipuri || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| mr || Marathi || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| ne || Nepali || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| nl_NL || Dutch (Netherlands) || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| pa_IN || Punjabi (India) || nplurals=2; plural=n &amp;gt; 1;&lt;br /&gt;
|-&lt;br /&gt;
| pl_PL || Polish (Poland) || nplurals=3; plural=n==1 ? 0 : n%10&amp;gt;=2 &amp;amp;&amp;amp; n%10&amp;lt;=4 &amp;amp;&amp;amp; (n%100&amp;lt;10 &amp;lt;nowiki&amp;gt;||&amp;lt;/nowiki&amp;gt; n%100&amp;gt;=20) ? 1 : 2;&lt;br /&gt;
|-&lt;br /&gt;
| pt || Portuguese || nplurals=2; plural=n &amp;gt; 1;&lt;br /&gt;
|-&lt;br /&gt;
| pt_BR || Portuguese (Brazil) || nplurals=2; plural=n &amp;gt; 1;&lt;br /&gt;
|-&lt;br /&gt;
| ro || Romanian || nplurals=3; plural=n==1 ? 0 : (n==0 &amp;lt;nowiki&amp;gt;||&amp;lt;/nowiki&amp;gt; (n%100 &amp;gt; 0 &amp;amp;&amp;amp; n%100 &amp;lt; 20)) ? 1 : 2;&lt;br /&gt;
|-&lt;br /&gt;
| ru || Russian || nplurals=3; plural=n%10==1 &amp;amp;&amp;amp; n%100!=11 ? 0 : n%10&amp;gt;=2 &amp;amp;&amp;amp; n%10&amp;lt;=4 &amp;amp;&amp;amp; (n%100&amp;lt;10 &amp;lt;nowiki&amp;gt;||&amp;lt;/nowiki&amp;gt; n%100&amp;gt;=20) ? 1 : 2;&lt;br /&gt;
|-&lt;br /&gt;
| sl_SI || Slovenian (Slovenia) || nplurals=4; plural=n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 &amp;lt;nowiki&amp;gt;||&amp;lt;/nowiki&amp;gt; n%100==4 ? 2 : 3;&lt;br /&gt;
|-&lt;br /&gt;
| sq || Albanian || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| sr || Serbian || nplurals=3; plural=n%10==1 &amp;amp;&amp;amp; n%100!=11 ? 0 : n%10&amp;gt;=2 &amp;amp;&amp;amp; n%10&amp;lt;=4 &amp;amp;&amp;amp; (n%100&amp;lt;10 &amp;lt;nowiki&amp;gt;||&amp;lt;/nowiki&amp;gt; n%100&amp;gt;=20) ? 1 : 2;&lt;br /&gt;
|-&lt;br /&gt;
| ta || Tamil || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| te_IN || Telugu (India) || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| th || Thai || nplurals=1; plural=0;&lt;br /&gt;
|-&lt;br /&gt;
| tr_TR || Turkish (Turkey) || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| ur || Urdu || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| vi_VN || Vietnamese (Vietnam) || nplurals=1; plural=0;&lt;br /&gt;
|-&lt;br /&gt;
| zh_CN || Chinese (China) || nplurals=1; plural=0;&lt;br /&gt;
|-&lt;br /&gt;
| zh_TW || Chinese (Taiwan) || nplurals=1; plural=0;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Translation Migration Status ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Project !! Progress status !! Accuracy(%) !! Launchpad Bug !! Contributor !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| cloudkitty-dashboard || In Progress || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2121053 || DaGyeong Kim || N/A&lt;br /&gt;
|-&lt;br /&gt;
| designate-dashboard || N/A || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119196 || DaGyeong Kim || N/A&lt;br /&gt;
|-&lt;br /&gt;
| freezer-web-ui || N/A || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2124944 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| heat-dashboard || N/A || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119199 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| ironic-ui || N/A || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119203 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| manila-ui || N/A || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119204 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| magnum-ui || N/A || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119200 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| networking-bgpvpn || N/A || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119207 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| neutron-fwaas-dashboard || N/A || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119206 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| neutron-vpnaas-dashboard || N/A || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119388 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| octavia-dashboard || N/A || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119197 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| trove-dashboard || N/A || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119201 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| zaqar-ui || N/A || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119468 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| zun-ui || N/A || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119205 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| horizon || N/A || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2125039 || N/A || N/A&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Etherpads ===&lt;br /&gt;
* [https://etherpad.opendev.org/p/vancouver-forum-i18n OpenInfra Summit Vancouver 2023 Forum]&lt;br /&gt;
* [https://etherpad.opendev.org/p/i18n-weblate i18n weblate migration]&lt;/div&gt;</summary>
		<author><name>Damekyung98</name></author>	</entry>

	<entry>
		<id>https://wiki.openstack.org/w/index.php?title=I18nTeam/Migration-to-weblate&amp;diff=186860</id>
		<title>I18nTeam/Migration-to-weblate</title>
		<link rel="alternate" type="text/html" href="https://wiki.openstack.org/w/index.php?title=I18nTeam/Migration-to-weblate&amp;diff=186860"/>
				<updated>2025-10-28T08:40:19Z</updated>
		
		<summary type="html">&lt;p&gt;Damekyung98: /* Languages plurals */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Migration to weblate ==&lt;br /&gt;
&lt;br /&gt;
=== Who's joining the migration project ===&lt;br /&gt;
* Ian Y. Choi (Manager)&lt;br /&gt;
* Seongsoo Cho&lt;br /&gt;
* Kuemjong Jeong&lt;br /&gt;
* Nayeon Kim&lt;br /&gt;
* Sion Shin&lt;br /&gt;
* Gwangil Kim&lt;br /&gt;
* DaGyeong Kim&lt;br /&gt;
&lt;br /&gt;
=== Planning a weblate migration schedule ===&lt;br /&gt;
You can find more details about each task below.&lt;br /&gt;
&lt;br /&gt;
* Define the scope of target test projects&lt;br /&gt;
** All vs. a few projects (e.g., openstack-manuals, nova, i18n, horizon)&lt;br /&gt;
* Make Translation Infrastructure Scripts compatible with Weblate&lt;br /&gt;
** Weblate project creation with settings if the target project is not existing on the platform&lt;br /&gt;
*** (If it is not supported, Weblate projects will be created manually)&lt;br /&gt;
*** Testing needs to be performed locally, since the scripts are executed on 06:00 UTC daily.&lt;br /&gt;
* ZuuL Integration Test&lt;br /&gt;
** Determine when to test (e.g., Test methodology without waiting at 06:00 UTC?)&lt;br /&gt;
** Integration test with all translation target projects&lt;br /&gt;
* Making tools for extracting statistical data from Weblate&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Action Item ===&lt;br /&gt;
&lt;br /&gt;
==== Define the scope of target test projects ====&lt;br /&gt;
* Configure Weblate with the information set in Zanata.&lt;br /&gt;
* User information is not migrated.&lt;br /&gt;
&lt;br /&gt;
====  Make Translation Infrastructure Scripts compatible with Weblate ====&lt;br /&gt;
* WIP patch to support Weblate for https://opendev.org/openstack/openstack-zuul-jobs/src/branch/master/roles/prepare-zanata-client/files/&lt;br /&gt;
&lt;br /&gt;
====  Zuul Integration Test ====&lt;br /&gt;
Create and test a ZuuL Job that performs the following tasks&lt;br /&gt;
* Uploading translation files to Weblate when new changes are made to your project&lt;br /&gt;
* Upload translations from Weblate to your project every day at 06 UTC&lt;br /&gt;
&lt;br /&gt;
==== Making tools for extracting statistical data from Weblate ====&lt;br /&gt;
* weblate_userinfo.py : Done ( https://review.opendev.org/c/openstack/i18n/+/893361 ) &lt;br /&gt;
** 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.&lt;br /&gt;
* weblate_users.py : Done ( https://review.opendev.org/c/openstack/i18n/+/895763 ) &lt;br /&gt;
** Generates a list of Weblate language contributors.&lt;br /&gt;
* weblate_utils.py : Done ( https://review.opendev.org/c/openstack/i18n/+/896308 )&lt;br /&gt;
** Provides basic classes used by the other scripts&lt;br /&gt;
*** IniConfig class to get the key and url for the weblate server&lt;br /&gt;
*** WeblateRestService class that communicates with the Weblate REST API&lt;br /&gt;
* weblate_stats.py : Working ( https://review.opendev.org/c/openstack/i18n/+/896306 ) &lt;br /&gt;
** (describe the role of the tool )&lt;br /&gt;
* weblate_records.py : Working  ( https://review.opendev.org/c/openstack/i18n/+/896306 ) &lt;br /&gt;
** (describe the role of the tool )&lt;br /&gt;
&lt;br /&gt;
=== List of projects and status ===&lt;br /&gt;
&lt;br /&gt;
==== Migration Scope ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Item !! Count&lt;br /&gt;
|-&lt;br /&gt;
| Total projects || 127&lt;br /&gt;
|-&lt;br /&gt;
| Total versions || 12&lt;br /&gt;
|-&lt;br /&gt;
| Total Languages || 54&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Version =====&lt;br /&gt;
We determined the migration version based on the branches that currently exist in the main services.&lt;br /&gt;
&lt;br /&gt;
Note: Some projects may not have this branch.&lt;br /&gt;
&lt;br /&gt;
Versions to migrate:&lt;br /&gt;
* master&lt;br /&gt;
* stable/2025.2&lt;br /&gt;
* stable/2025.1&lt;br /&gt;
* stable/2024.2&lt;br /&gt;
* stable/2024.1&lt;br /&gt;
* unmaintained/2023.1&lt;br /&gt;
* unmaintained/zed&lt;br /&gt;
* unmaintained/wallaby&lt;br /&gt;
* unmaintained/victoria&lt;br /&gt;
* unmaintained/yoga&lt;br /&gt;
* unmaintained/xena&lt;br /&gt;
&lt;br /&gt;
===== Languages plurals=====&lt;br /&gt;
&lt;br /&gt;
* [[Language Plurals]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Language Code !! Language Name !! Plurals&lt;br /&gt;
|-&lt;br /&gt;
| ar || Arabic || nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100&amp;gt;=3 &amp;amp;&amp;amp; n%100&amp;lt;=10 ? 3 : n%100&amp;gt;=11 ? 4 : 5;&lt;br /&gt;
|-&lt;br /&gt;
| as || Assamese || nplurals=2; plural=n &amp;gt; 1;&lt;br /&gt;
|-&lt;br /&gt;
| bg_BG || Bulgarian (Bulgaria) || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| bn_IN || Bengali (India) || nplurals=2; plural=n &amp;gt; 1;&lt;br /&gt;
|-&lt;br /&gt;
| brx || Bodo || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| ca || Catalan || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| cs || Czech || nplurals=3; plural=(n==1) ? 0 : (n&amp;gt;=2 &amp;amp;&amp;amp; n&amp;lt;=4) ? 1 : 2;&lt;br /&gt;
|-&lt;br /&gt;
| de || German || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| el || Greek || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| en_GB || English (United Kingdom) || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| en_US || English (United States) || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| en_AU || English (Australia) || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| eo || Esperanto || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| es || Spanish || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| es_MX || Spanish (Mexico) || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| fa || Persian || nplurals=2; plural=n &amp;gt; 1;&lt;br /&gt;
|-&lt;br /&gt;
| fi_FI || Finnish (Finland) || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| fil || Filipino || nplurals=2; plural=n != 1 &amp;amp;&amp;amp; n != 2 &amp;amp;&amp;amp; n != 3 &amp;amp;&amp;amp; (n % 10 == 4 &amp;lt;nowiki&amp;gt;||&amp;lt;/nowiki&amp;gt; n % 10 == 6 &amp;lt;nowiki&amp;gt;||&amp;lt;/nowiki&amp;gt; n % 10 == 9);&lt;br /&gt;
|-&lt;br /&gt;
| fr || French || nplurals=2; plural=n &amp;gt; 1;&lt;br /&gt;
|-&lt;br /&gt;
| gu || Gujarati || nplurals=2; plural=n &amp;gt; 1;&lt;br /&gt;
|-&lt;br /&gt;
| he || Hebrew || nplurals=4; plural=(n == 1) ? 0 : ((n == 2) ? 1 : ((n &amp;gt; 10 &amp;amp;&amp;amp; n % 10 == 0) ? 2 : 3));&lt;br /&gt;
|-&lt;br /&gt;
| hi || Hindi || nplurals=2; plural=n &amp;gt; 1;&lt;br /&gt;
|-&lt;br /&gt;
| hu || Hungarian || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| id || Indonesian || nplurals=1; plural=0;&lt;br /&gt;
|-&lt;br /&gt;
| it || Italian || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| ja || Japanese || nplurals=1; plural=0;&lt;br /&gt;
|-&lt;br /&gt;
| ka_GE || Georgian (Georgia) || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| kn || Kannada || nplurals=2; plural=n &amp;gt; 1;&lt;br /&gt;
|-&lt;br /&gt;
| ko_KR || Korean (Korea) || nplurals=1; plural=0;&lt;br /&gt;
|-&lt;br /&gt;
| kok || Konkani || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| ks || Kashmiri || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| lo || Lao || nplurals=1; plural=0;&lt;br /&gt;
|-&lt;br /&gt;
| mai || Maithili || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| mni || Manipuri || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| mr || Marathi || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| ne || Nepali || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| nl_NL || Dutch (Netherlands) || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| pa_IN || Punjabi (India) || nplurals=2; plural=n &amp;gt; 1;&lt;br /&gt;
|-&lt;br /&gt;
| pl_PL || Polish (Poland) || nplurals=3; plural=n==1 ? 0 : n%10&amp;gt;=2 &amp;amp;&amp;amp; n%10&amp;lt;=4 &amp;amp;&amp;amp; (n%100&amp;lt;10 &amp;lt;nowiki&amp;gt;||&amp;lt;/nowiki&amp;gt; n%100&amp;gt;=20) ? 1 : 2;&lt;br /&gt;
|-&lt;br /&gt;
| pt || Portuguese || nplurals=2; plural=n &amp;gt; 1;&lt;br /&gt;
|-&lt;br /&gt;
| pt_BR || Portuguese (Brazil) || nplurals=2; plural=n &amp;gt; 1;&lt;br /&gt;
|-&lt;br /&gt;
| ro || Romanian || nplurals=3; plural=n==1 ? 0 : (n==0 &amp;lt;nowiki&amp;gt;||&amp;lt;/nowiki&amp;gt; (n%100 &amp;gt; 0 &amp;amp;&amp;amp; n%100 &amp;lt; 20)) ? 1 : 2;&lt;br /&gt;
|-&lt;br /&gt;
| ru || Russian || nplurals=3; plural=n%10==1 &amp;amp;&amp;amp; n%100!=11 ? 0 : n%10&amp;gt;=2 &amp;amp;&amp;amp; n%10&amp;lt;=4 &amp;amp;&amp;amp; (n%100&amp;lt;10 &amp;lt;nowiki&amp;gt;||&amp;lt;/nowiki&amp;gt; n%100&amp;gt;=20) ? 1 : 2;&lt;br /&gt;
|-&lt;br /&gt;
| sl_SI || Slovenian (Slovenia) || nplurals=4; plural=n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 &amp;lt;nowiki&amp;gt;||&amp;lt;/nowiki&amp;gt; n%100==4 ? 2 : 3;&lt;br /&gt;
|-&lt;br /&gt;
| sq || Albanian || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| sr || Serbian || nplurals=3; plural=n%10==1 &amp;amp;&amp;amp; n%100!=11 ? 0 : n%10&amp;gt;=2 &amp;amp;&amp;amp; n%10&amp;lt;=4 &amp;amp;&amp;amp; (n%100&amp;lt;10 &amp;lt;nowiki&amp;gt;||&amp;lt;/nowiki&amp;gt; n%100&amp;gt;=20) ? 1 : 2;&lt;br /&gt;
|-&lt;br /&gt;
| ta || Tamil || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| te_IN || Telugu (India) || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| th || Thai || nplurals=1; plural=0;&lt;br /&gt;
|-&lt;br /&gt;
| tr_TR || Turkish (Turkey) || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| ur || Urdu || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| vi_VN || Vietnamese (Vietnam) || nplurals=1; plural=0;&lt;br /&gt;
|-&lt;br /&gt;
| zh_CN || Chinese (China) || nplurals=1; plural=0;&lt;br /&gt;
|-&lt;br /&gt;
| zh_TW || Chinese (Taiwan) || nplurals=1; plural=0;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Translation Migration Status ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Project !! Message !! Word !! Progress status !! Accuracy(%) !! Launchpad Bug !! Contributor !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| cloudkitty-dashboard || N/A || N/A || N/A || N/A|| https://bugs.launchpad.net/openstack-i18n/+bug/2121053 || DaGyeong Kim || N/A&lt;br /&gt;
|-&lt;br /&gt;
| designate-dashboard || N/A || N/A || N/A || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119196 || DaGyeong Kim || N/A&lt;br /&gt;
|-&lt;br /&gt;
| freezer-web-ui || N/A || N/A || N/A || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2124944 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| heat-dashboard || N/A || N/A || N/A || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119199 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| ironic-ui || N/A || N/A || N/A || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119203 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| manila-ui || N/A || N/A || N/A || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119204 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| magnum-ui || N/A || N/A || N/A || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119200 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| networking-bgpvpn || N/A || N/A || N/A || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119207 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| neutron-fwaas-dashboard || N/A || N/A || N/A || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119206 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| neutron-vpnaas-dashboard || N/A || N/A || N/A || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119388 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| octavia-dashboard || N/A || N/A || N/A || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119197 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| trove-dashboard || N/A || N/A || N/A || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119201 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| zaqar-ui || N/A || N/A || N/A || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119468 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| zun-ui || N/A || N/A || N/A || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119205 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| horizon || N/A || N/A || N/A || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2125039 || N/A || N/A&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Etherpads ===&lt;br /&gt;
* [https://etherpad.opendev.org/p/vancouver-forum-i18n OpenInfra Summit Vancouver 2023 Forum]&lt;br /&gt;
* [https://etherpad.opendev.org/p/i18n-weblate i18n weblate migration]&lt;/div&gt;</summary>
		<author><name>Damekyung98</name></author>	</entry>

	<entry>
		<id>https://wiki.openstack.org/w/index.php?title=Language_Plurals&amp;diff=186859</id>
		<title>Language Plurals</title>
		<link rel="alternate" type="text/html" href="https://wiki.openstack.org/w/index.php?title=Language_Plurals&amp;diff=186859"/>
				<updated>2025-10-28T08:29:43Z</updated>
		
		<summary type="html">&lt;p&gt;Damekyung98: Created page with &amp;quot;= Language Plurals =  {| class=&amp;quot;wikitable&amp;quot; |- ! Language Code !! Language Name !! Plurals |- | ar || Arabic || nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100&amp;gt;=3 &amp;amp;&amp;amp;...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Language Plurals =&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Language Code !! Language Name !! Plurals&lt;br /&gt;
|-&lt;br /&gt;
| ar || Arabic || nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100&amp;gt;=3 &amp;amp;&amp;amp; n%100&amp;lt;=10 ? 3 : n%100&amp;gt;=11 ? 4 : 5;&lt;br /&gt;
|-&lt;br /&gt;
| as || Assamese || nplurals=2; plural=n &amp;gt; 1;&lt;br /&gt;
|-&lt;br /&gt;
| bg_BG || Bulgarian (Bulgaria) || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| bn_IN || Bengali (India) || nplurals=2; plural=n &amp;gt; 1;&lt;br /&gt;
|-&lt;br /&gt;
| brx || Bodo || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| ca || Catalan || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| cs || Czech || nplurals=3; plural=(n==1) ? 0 : (n&amp;gt;=2 &amp;amp;&amp;amp; n&amp;lt;=4) ? 1 : 2;&lt;br /&gt;
|-&lt;br /&gt;
| de || German || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| el || Greek || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| en_GB || English (United Kingdom) || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| en_US || English (United States) || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| en_AU || English (Australia) || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| eo || Esperanto || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| es || Spanish || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| es_MX || Spanish (Mexico) || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| fa || Persian || nplurals=2; plural=n &amp;gt; 1;&lt;br /&gt;
|-&lt;br /&gt;
| fi_FI || Finnish (Finland) || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| fil || Filipino || nplurals=2; plural=n != 1 &amp;amp;&amp;amp; n != 2 &amp;amp;&amp;amp; n != 3 &amp;amp;&amp;amp; (n % 10 == 4 &amp;lt;nowiki&amp;gt;||&amp;lt;/nowiki&amp;gt; n % 10 == 6 &amp;lt;nowiki&amp;gt;||&amp;lt;/nowiki&amp;gt; n % 10 == 9);&lt;br /&gt;
|-&lt;br /&gt;
| fr || French || nplurals=2; plural=n &amp;gt; 1;&lt;br /&gt;
|-&lt;br /&gt;
| gu || Gujarati || nplurals=2; plural=n &amp;gt; 1;&lt;br /&gt;
|-&lt;br /&gt;
| he || Hebrew || nplurals=4; plural=(n == 1) ? 0 : ((n == 2) ? 1 : ((n &amp;gt; 10 &amp;amp;&amp;amp; n % 10 == 0) ? 2 : 3));&lt;br /&gt;
|-&lt;br /&gt;
| hi || Hindi || nplurals=2; plural=n &amp;gt; 1;&lt;br /&gt;
|-&lt;br /&gt;
| hu || Hungarian || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| id || Indonesian || nplurals=1; plural=0;&lt;br /&gt;
|-&lt;br /&gt;
| it || Italian || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| ja || Japanese || nplurals=1; plural=0;&lt;br /&gt;
|-&lt;br /&gt;
| ka_GE || Georgian (Georgia) || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| kn || Kannada || nplurals=2; plural=n &amp;gt; 1;&lt;br /&gt;
|-&lt;br /&gt;
| ko_KR || Korean (Korea) || nplurals=1; plural=0;&lt;br /&gt;
|-&lt;br /&gt;
| kok || Konkani || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| ks || Kashmiri || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| lo || Lao || nplurals=1; plural=0;&lt;br /&gt;
|-&lt;br /&gt;
| mai || Maithili || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| mni || Manipuri || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| mr || Marathi || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| ne || Nepali || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| nl_NL || Dutch (Netherlands) || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| pa_IN || Punjabi (India) || nplurals=2; plural=n &amp;gt; 1;&lt;br /&gt;
|-&lt;br /&gt;
| pl_PL || Polish (Poland) || nplurals=3; plural=n==1 ? 0 : n%10&amp;gt;=2 &amp;amp;&amp;amp; n%10&amp;lt;=4 &amp;amp;&amp;amp; (n%100&amp;lt;10 &amp;lt;nowiki&amp;gt;||&amp;lt;/nowiki&amp;gt; n%100&amp;gt;=20) ? 1 : 2;&lt;br /&gt;
|-&lt;br /&gt;
| pt || Portuguese || nplurals=2; plural=n &amp;gt; 1;&lt;br /&gt;
|-&lt;br /&gt;
| pt_BR || Portuguese (Brazil) || nplurals=2; plural=n &amp;gt; 1;&lt;br /&gt;
|-&lt;br /&gt;
| ro || Romanian || nplurals=3; plural=n==1 ? 0 : (n==0 &amp;lt;nowiki&amp;gt;||&amp;lt;/nowiki&amp;gt; (n%100 &amp;gt; 0 &amp;amp;&amp;amp; n%100 &amp;lt; 20)) ? 1 : 2;&lt;br /&gt;
|-&lt;br /&gt;
| ru || Russian || nplurals=3; plural=n%10==1 &amp;amp;&amp;amp; n%100!=11 ? 0 : n%10&amp;gt;=2 &amp;amp;&amp;amp; n%10&amp;lt;=4 &amp;amp;&amp;amp; (n%100&amp;lt;10 &amp;lt;nowiki&amp;gt;||&amp;lt;/nowiki&amp;gt; n%100&amp;gt;=20) ? 1 : 2;&lt;br /&gt;
|-&lt;br /&gt;
| sl_SI || Slovenian (Slovenia) || nplurals=4; plural=n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 &amp;lt;nowiki&amp;gt;||&amp;lt;/nowiki&amp;gt; n%100==4 ? 2 : 3;&lt;br /&gt;
|-&lt;br /&gt;
| sq || Albanian || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| sr || Serbian || nplurals=3; plural=n%10==1 &amp;amp;&amp;amp; n%100!=11 ? 0 : n%10&amp;gt;=2 &amp;amp;&amp;amp; n%10&amp;lt;=4 &amp;amp;&amp;amp; (n%100&amp;lt;10 &amp;lt;nowiki&amp;gt;||&amp;lt;/nowiki&amp;gt; n%100&amp;gt;=20) ? 1 : 2;&lt;br /&gt;
|-&lt;br /&gt;
| ta || Tamil || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| te_IN || Telugu (India) || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| th || Thai || nplurals=1; plural=0;&lt;br /&gt;
|-&lt;br /&gt;
| tr_TR || Turkish (Turkey) || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| ur || Urdu || nplurals=2; plural=n != 1;&lt;br /&gt;
|-&lt;br /&gt;
| vi_VN || Vietnamese (Vietnam) || nplurals=1; plural=0;&lt;br /&gt;
|-&lt;br /&gt;
| zh_CN || Chinese (China) || nplurals=1; plural=0;&lt;br /&gt;
|-&lt;br /&gt;
| zh_TW || Chinese (Taiwan) || nplurals=1; plural=0;&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Damekyung98</name></author>	</entry>

	<entry>
		<id>https://wiki.openstack.org/w/index.php?title=I18nTeam/Migration-to-weblate&amp;diff=186858</id>
		<title>I18nTeam/Migration-to-weblate</title>
		<link rel="alternate" type="text/html" href="https://wiki.openstack.org/w/index.php?title=I18nTeam/Migration-to-weblate&amp;diff=186858"/>
				<updated>2025-10-28T07:17:14Z</updated>
		
		<summary type="html">&lt;p&gt;Damekyung98: /* Language */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Migration to weblate ==&lt;br /&gt;
&lt;br /&gt;
=== Who's joining the migration project ===&lt;br /&gt;
* Ian Y. Choi (Manager)&lt;br /&gt;
* Seongsoo Cho&lt;br /&gt;
* Kuemjong Jeong&lt;br /&gt;
* Nayeon Kim&lt;br /&gt;
* Sion Shin&lt;br /&gt;
* Gwangil Kim&lt;br /&gt;
* DaGyeong Kim&lt;br /&gt;
&lt;br /&gt;
=== Planning a weblate migration schedule ===&lt;br /&gt;
You can find more details about each task below.&lt;br /&gt;
&lt;br /&gt;
* Define the scope of target test projects&lt;br /&gt;
** All vs. a few projects (e.g., openstack-manuals, nova, i18n, horizon)&lt;br /&gt;
* Make Translation Infrastructure Scripts compatible with Weblate&lt;br /&gt;
** Weblate project creation with settings if the target project is not existing on the platform&lt;br /&gt;
*** (If it is not supported, Weblate projects will be created manually)&lt;br /&gt;
*** Testing needs to be performed locally, since the scripts are executed on 06:00 UTC daily.&lt;br /&gt;
* ZuuL Integration Test&lt;br /&gt;
** Determine when to test (e.g., Test methodology without waiting at 06:00 UTC?)&lt;br /&gt;
** Integration test with all translation target projects&lt;br /&gt;
* Making tools for extracting statistical data from Weblate&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Action Item ===&lt;br /&gt;
&lt;br /&gt;
==== Define the scope of target test projects ====&lt;br /&gt;
* Configure Weblate with the information set in Zanata.&lt;br /&gt;
* User information is not migrated.&lt;br /&gt;
&lt;br /&gt;
====  Make Translation Infrastructure Scripts compatible with Weblate ====&lt;br /&gt;
* WIP patch to support Weblate for https://opendev.org/openstack/openstack-zuul-jobs/src/branch/master/roles/prepare-zanata-client/files/&lt;br /&gt;
&lt;br /&gt;
====  Zuul Integration Test ====&lt;br /&gt;
Create and test a ZuuL Job that performs the following tasks&lt;br /&gt;
* Uploading translation files to Weblate when new changes are made to your project&lt;br /&gt;
* Upload translations from Weblate to your project every day at 06 UTC&lt;br /&gt;
&lt;br /&gt;
==== Making tools for extracting statistical data from Weblate ====&lt;br /&gt;
* weblate_userinfo.py : Done ( https://review.opendev.org/c/openstack/i18n/+/893361 ) &lt;br /&gt;
** 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.&lt;br /&gt;
* weblate_users.py : Done ( https://review.opendev.org/c/openstack/i18n/+/895763 ) &lt;br /&gt;
** Generates a list of Weblate language contributors.&lt;br /&gt;
* weblate_utils.py : Done ( https://review.opendev.org/c/openstack/i18n/+/896308 )&lt;br /&gt;
** Provides basic classes used by the other scripts&lt;br /&gt;
*** IniConfig class to get the key and url for the weblate server&lt;br /&gt;
*** WeblateRestService class that communicates with the Weblate REST API&lt;br /&gt;
* weblate_stats.py : Working ( https://review.opendev.org/c/openstack/i18n/+/896306 ) &lt;br /&gt;
** (describe the role of the tool )&lt;br /&gt;
* weblate_records.py : Working  ( https://review.opendev.org/c/openstack/i18n/+/896306 ) &lt;br /&gt;
** (describe the role of the tool )&lt;br /&gt;
&lt;br /&gt;
=== List of projects and status ===&lt;br /&gt;
&lt;br /&gt;
==== Migration Scope ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Item !! Count&lt;br /&gt;
|-&lt;br /&gt;
| Total projects || 127&lt;br /&gt;
|-&lt;br /&gt;
| Total versions || 12&lt;br /&gt;
|-&lt;br /&gt;
| Total Languages || 54&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Version =====&lt;br /&gt;
We determined the migration version based on the branches that currently exist in the main services.&lt;br /&gt;
&lt;br /&gt;
Note: Some projects may not have this branch.&lt;br /&gt;
&lt;br /&gt;
Versions to migrate:&lt;br /&gt;
* master&lt;br /&gt;
* stable/2025.2&lt;br /&gt;
* stable/2025.1&lt;br /&gt;
* stable/2024.2&lt;br /&gt;
* stable/2024.1&lt;br /&gt;
* unmaintained/2023.1&lt;br /&gt;
* unmaintained/zed&lt;br /&gt;
* unmaintained/wallaby&lt;br /&gt;
* unmaintained/victoria&lt;br /&gt;
* unmaintained/yoga&lt;br /&gt;
* unmaintained/xena&lt;br /&gt;
&lt;br /&gt;
===== Languages plurals=====&lt;br /&gt;
&lt;br /&gt;
* [[Language Plurals]]&lt;br /&gt;
&lt;br /&gt;
==== Translation Migration Status ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Project !! Message !! Word !! Progress status !! Accuracy(%) !! Launchpad Bug !! Contributor !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| cloudkitty-dashboard || N/A || N/A || N/A || N/A|| https://bugs.launchpad.net/openstack-i18n/+bug/2121053 || DaGyeong Kim || N/A&lt;br /&gt;
|-&lt;br /&gt;
| designate-dashboard || N/A || N/A || N/A || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119196 || DaGyeong Kim || N/A&lt;br /&gt;
|-&lt;br /&gt;
| freezer-web-ui || N/A || N/A || N/A || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2124944 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| heat-dashboard || N/A || N/A || N/A || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119199 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| ironic-ui || N/A || N/A || N/A || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119203 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| manila-ui || N/A || N/A || N/A || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119204 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| magnum-ui || N/A || N/A || N/A || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119200 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| networking-bgpvpn || N/A || N/A || N/A || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119207 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| neutron-fwaas-dashboard || N/A || N/A || N/A || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119206 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| neutron-vpnaas-dashboard || N/A || N/A || N/A || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119388 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| octavia-dashboard || N/A || N/A || N/A || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119197 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| trove-dashboard || N/A || N/A || N/A || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119201 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| zaqar-ui || N/A || N/A || N/A || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119468 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| zun-ui || N/A || N/A || N/A || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119205 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| horizon || N/A || N/A || N/A || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2125039 || N/A || N/A&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Etherpads ===&lt;br /&gt;
* [https://etherpad.opendev.org/p/vancouver-forum-i18n OpenInfra Summit Vancouver 2023 Forum]&lt;br /&gt;
* [https://etherpad.opendev.org/p/i18n-weblate i18n weblate migration]&lt;/div&gt;</summary>
		<author><name>Damekyung98</name></author>	</entry>

	<entry>
		<id>https://wiki.openstack.org/w/index.php?title=I18nTeam/Migration-to-weblate&amp;diff=186857</id>
		<title>I18nTeam/Migration-to-weblate</title>
		<link rel="alternate" type="text/html" href="https://wiki.openstack.org/w/index.php?title=I18nTeam/Migration-to-weblate&amp;diff=186857"/>
				<updated>2025-10-28T07:10:29Z</updated>
		
		<summary type="html">&lt;p&gt;Damekyung98: /* Language */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Migration to weblate ==&lt;br /&gt;
&lt;br /&gt;
=== Who's joining the migration project ===&lt;br /&gt;
* Ian Y. Choi (Manager)&lt;br /&gt;
* Seongsoo Cho&lt;br /&gt;
* Kuemjong Jeong&lt;br /&gt;
* Nayeon Kim&lt;br /&gt;
* Sion Shin&lt;br /&gt;
* Gwangil Kim&lt;br /&gt;
* DaGyeong Kim&lt;br /&gt;
&lt;br /&gt;
=== Planning a weblate migration schedule ===&lt;br /&gt;
You can find more details about each task below.&lt;br /&gt;
&lt;br /&gt;
* Define the scope of target test projects&lt;br /&gt;
** All vs. a few projects (e.g., openstack-manuals, nova, i18n, horizon)&lt;br /&gt;
* Make Translation Infrastructure Scripts compatible with Weblate&lt;br /&gt;
** Weblate project creation with settings if the target project is not existing on the platform&lt;br /&gt;
*** (If it is not supported, Weblate projects will be created manually)&lt;br /&gt;
*** Testing needs to be performed locally, since the scripts are executed on 06:00 UTC daily.&lt;br /&gt;
* ZuuL Integration Test&lt;br /&gt;
** Determine when to test (e.g., Test methodology without waiting at 06:00 UTC?)&lt;br /&gt;
** Integration test with all translation target projects&lt;br /&gt;
* Making tools for extracting statistical data from Weblate&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Action Item ===&lt;br /&gt;
&lt;br /&gt;
==== Define the scope of target test projects ====&lt;br /&gt;
* Configure Weblate with the information set in Zanata.&lt;br /&gt;
* User information is not migrated.&lt;br /&gt;
&lt;br /&gt;
====  Make Translation Infrastructure Scripts compatible with Weblate ====&lt;br /&gt;
* WIP patch to support Weblate for https://opendev.org/openstack/openstack-zuul-jobs/src/branch/master/roles/prepare-zanata-client/files/&lt;br /&gt;
&lt;br /&gt;
====  Zuul Integration Test ====&lt;br /&gt;
Create and test a ZuuL Job that performs the following tasks&lt;br /&gt;
* Uploading translation files to Weblate when new changes are made to your project&lt;br /&gt;
* Upload translations from Weblate to your project every day at 06 UTC&lt;br /&gt;
&lt;br /&gt;
==== Making tools for extracting statistical data from Weblate ====&lt;br /&gt;
* weblate_userinfo.py : Done ( https://review.opendev.org/c/openstack/i18n/+/893361 ) &lt;br /&gt;
** 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.&lt;br /&gt;
* weblate_users.py : Done ( https://review.opendev.org/c/openstack/i18n/+/895763 ) &lt;br /&gt;
** Generates a list of Weblate language contributors.&lt;br /&gt;
* weblate_utils.py : Done ( https://review.opendev.org/c/openstack/i18n/+/896308 )&lt;br /&gt;
** Provides basic classes used by the other scripts&lt;br /&gt;
*** IniConfig class to get the key and url for the weblate server&lt;br /&gt;
*** WeblateRestService class that communicates with the Weblate REST API&lt;br /&gt;
* weblate_stats.py : Working ( https://review.opendev.org/c/openstack/i18n/+/896306 ) &lt;br /&gt;
** (describe the role of the tool )&lt;br /&gt;
* weblate_records.py : Working  ( https://review.opendev.org/c/openstack/i18n/+/896306 ) &lt;br /&gt;
** (describe the role of the tool )&lt;br /&gt;
&lt;br /&gt;
=== List of projects and status ===&lt;br /&gt;
&lt;br /&gt;
==== Migration Scope ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Item !! Count&lt;br /&gt;
|-&lt;br /&gt;
| Total projects || 127&lt;br /&gt;
|-&lt;br /&gt;
| Total versions || 12&lt;br /&gt;
|-&lt;br /&gt;
| Total Languages || 54&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Version =====&lt;br /&gt;
We determined the migration version based on the branches that currently exist in the main services.&lt;br /&gt;
&lt;br /&gt;
Note: Some projects may not have this branch.&lt;br /&gt;
&lt;br /&gt;
Versions to migrate:&lt;br /&gt;
* master&lt;br /&gt;
* stable/2025.2&lt;br /&gt;
* stable/2025.1&lt;br /&gt;
* stable/2024.2&lt;br /&gt;
* stable/2024.1&lt;br /&gt;
* unmaintained/2023.1&lt;br /&gt;
* unmaintained/zed&lt;br /&gt;
* unmaintained/wallaby&lt;br /&gt;
* unmaintained/victoria&lt;br /&gt;
* unmaintained/yoga&lt;br /&gt;
* unmaintained/xena&lt;br /&gt;
&lt;br /&gt;
===== Language =====&lt;br /&gt;
&lt;br /&gt;
* [[Language]]&lt;br /&gt;
&lt;br /&gt;
==== Translation Migration Status ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Project !! Message !! Word !! Progress status !! Accuracy(%) !! Launchpad Bug !! Contributor !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| cloudkitty-dashboard || N/A || N/A || N/A || N/A|| https://bugs.launchpad.net/openstack-i18n/+bug/2121053 || DaGyeong Kim || N/A&lt;br /&gt;
|-&lt;br /&gt;
| designate-dashboard || N/A || N/A || N/A || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119196 || DaGyeong Kim || N/A&lt;br /&gt;
|-&lt;br /&gt;
| freezer-web-ui || N/A || N/A || N/A || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2124944 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| heat-dashboard || N/A || N/A || N/A || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119199 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| ironic-ui || N/A || N/A || N/A || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119203 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| manila-ui || N/A || N/A || N/A || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119204 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| magnum-ui || N/A || N/A || N/A || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119200 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| networking-bgpvpn || N/A || N/A || N/A || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119207 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| neutron-fwaas-dashboard || N/A || N/A || N/A || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119206 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| neutron-vpnaas-dashboard || N/A || N/A || N/A || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119388 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| octavia-dashboard || N/A || N/A || N/A || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119197 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| trove-dashboard || N/A || N/A || N/A || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119201 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| zaqar-ui || N/A || N/A || N/A || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119468 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| zun-ui || N/A || N/A || N/A || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119205 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| horizon || N/A || N/A || N/A || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2125039 || N/A || N/A&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Etherpads ===&lt;br /&gt;
* [https://etherpad.opendev.org/p/vancouver-forum-i18n OpenInfra Summit Vancouver 2023 Forum]&lt;br /&gt;
* [https://etherpad.opendev.org/p/i18n-weblate i18n weblate migration]&lt;/div&gt;</summary>
		<author><name>Damekyung98</name></author>	</entry>

	<entry>
		<id>https://wiki.openstack.org/w/index.php?title=I18nTeam/Migration-to-weblate&amp;diff=186856</id>
		<title>I18nTeam/Migration-to-weblate</title>
		<link rel="alternate" type="text/html" href="https://wiki.openstack.org/w/index.php?title=I18nTeam/Migration-to-weblate&amp;diff=186856"/>
				<updated>2025-10-28T07:03:53Z</updated>
		
		<summary type="html">&lt;p&gt;Damekyung98: /* List of projects and status */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Migration to weblate ==&lt;br /&gt;
&lt;br /&gt;
=== Who's joining the migration project ===&lt;br /&gt;
* Ian Y. Choi (Manager)&lt;br /&gt;
* Seongsoo Cho&lt;br /&gt;
* Kuemjong Jeong&lt;br /&gt;
* Nayeon Kim&lt;br /&gt;
* Sion Shin&lt;br /&gt;
* Gwangil Kim&lt;br /&gt;
* DaGyeong Kim&lt;br /&gt;
&lt;br /&gt;
=== Planning a weblate migration schedule ===&lt;br /&gt;
You can find more details about each task below.&lt;br /&gt;
&lt;br /&gt;
* Define the scope of target test projects&lt;br /&gt;
** All vs. a few projects (e.g., openstack-manuals, nova, i18n, horizon)&lt;br /&gt;
* Make Translation Infrastructure Scripts compatible with Weblate&lt;br /&gt;
** Weblate project creation with settings if the target project is not existing on the platform&lt;br /&gt;
*** (If it is not supported, Weblate projects will be created manually)&lt;br /&gt;
*** Testing needs to be performed locally, since the scripts are executed on 06:00 UTC daily.&lt;br /&gt;
* ZuuL Integration Test&lt;br /&gt;
** Determine when to test (e.g., Test methodology without waiting at 06:00 UTC?)&lt;br /&gt;
** Integration test with all translation target projects&lt;br /&gt;
* Making tools for extracting statistical data from Weblate&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Action Item ===&lt;br /&gt;
&lt;br /&gt;
==== Define the scope of target test projects ====&lt;br /&gt;
* Configure Weblate with the information set in Zanata.&lt;br /&gt;
* User information is not migrated.&lt;br /&gt;
&lt;br /&gt;
====  Make Translation Infrastructure Scripts compatible with Weblate ====&lt;br /&gt;
* WIP patch to support Weblate for https://opendev.org/openstack/openstack-zuul-jobs/src/branch/master/roles/prepare-zanata-client/files/&lt;br /&gt;
&lt;br /&gt;
====  Zuul Integration Test ====&lt;br /&gt;
Create and test a ZuuL Job that performs the following tasks&lt;br /&gt;
* Uploading translation files to Weblate when new changes are made to your project&lt;br /&gt;
* Upload translations from Weblate to your project every day at 06 UTC&lt;br /&gt;
&lt;br /&gt;
==== Making tools for extracting statistical data from Weblate ====&lt;br /&gt;
* weblate_userinfo.py : Done ( https://review.opendev.org/c/openstack/i18n/+/893361 ) &lt;br /&gt;
** 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.&lt;br /&gt;
* weblate_users.py : Done ( https://review.opendev.org/c/openstack/i18n/+/895763 ) &lt;br /&gt;
** Generates a list of Weblate language contributors.&lt;br /&gt;
* weblate_utils.py : Done ( https://review.opendev.org/c/openstack/i18n/+/896308 )&lt;br /&gt;
** Provides basic classes used by the other scripts&lt;br /&gt;
*** IniConfig class to get the key and url for the weblate server&lt;br /&gt;
*** WeblateRestService class that communicates with the Weblate REST API&lt;br /&gt;
* weblate_stats.py : Working ( https://review.opendev.org/c/openstack/i18n/+/896306 ) &lt;br /&gt;
** (describe the role of the tool )&lt;br /&gt;
* weblate_records.py : Working  ( https://review.opendev.org/c/openstack/i18n/+/896306 ) &lt;br /&gt;
** (describe the role of the tool )&lt;br /&gt;
&lt;br /&gt;
=== List of projects and status ===&lt;br /&gt;
&lt;br /&gt;
==== Migration Scope ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Item !! Count&lt;br /&gt;
|-&lt;br /&gt;
| Total projects || 127&lt;br /&gt;
|-&lt;br /&gt;
| Total versions || 12&lt;br /&gt;
|-&lt;br /&gt;
| Total Languages || 54&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Version =====&lt;br /&gt;
We determined the migration version based on the branches that currently exist in the main services.&lt;br /&gt;
&lt;br /&gt;
Note: Some projects may not have this branch.&lt;br /&gt;
&lt;br /&gt;
Versions to migrate:&lt;br /&gt;
* master&lt;br /&gt;
* stable/2025.2&lt;br /&gt;
* stable/2025.1&lt;br /&gt;
* stable/2024.2&lt;br /&gt;
* stable/2024.1&lt;br /&gt;
* unmaintained/2023.1&lt;br /&gt;
* unmaintained/zed&lt;br /&gt;
* unmaintained/wallaby&lt;br /&gt;
* unmaintained/victoria&lt;br /&gt;
* unmaintained/yoga&lt;br /&gt;
* unmaintained/xena&lt;br /&gt;
&lt;br /&gt;
===== Language =====&lt;br /&gt;
&lt;br /&gt;
- [[Language]]&lt;br /&gt;
&lt;br /&gt;
==== Translation Migration Status ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Project !! Message !! Word !! Progress status !! Accuracy(%) !! Launchpad Bug !! Contributor !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| cloudkitty-dashboard || N/A || N/A || N/A || N/A|| https://bugs.launchpad.net/openstack-i18n/+bug/2121053 || DaGyeong Kim || N/A&lt;br /&gt;
|-&lt;br /&gt;
| designate-dashboard || N/A || N/A || N/A || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119196 || DaGyeong Kim || N/A&lt;br /&gt;
|-&lt;br /&gt;
| freezer-web-ui || N/A || N/A || N/A || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2124944 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| heat-dashboard || N/A || N/A || N/A || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119199 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| ironic-ui || N/A || N/A || N/A || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119203 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| manila-ui || N/A || N/A || N/A || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119204 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| magnum-ui || N/A || N/A || N/A || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119200 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| networking-bgpvpn || N/A || N/A || N/A || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119207 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| neutron-fwaas-dashboard || N/A || N/A || N/A || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119206 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| neutron-vpnaas-dashboard || N/A || N/A || N/A || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119388 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| octavia-dashboard || N/A || N/A || N/A || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119197 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| trove-dashboard || N/A || N/A || N/A || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119201 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| zaqar-ui || N/A || N/A || N/A || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119468 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| zun-ui || N/A || N/A || N/A || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119205 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| horizon || N/A || N/A || N/A || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2125039 || N/A || N/A&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Etherpads ===&lt;br /&gt;
* [https://etherpad.opendev.org/p/vancouver-forum-i18n OpenInfra Summit Vancouver 2023 Forum]&lt;br /&gt;
* [https://etherpad.opendev.org/p/i18n-weblate i18n weblate migration]&lt;/div&gt;</summary>
		<author><name>Damekyung98</name></author>	</entry>

	<entry>
		<id>https://wiki.openstack.org/w/index.php?title=I18nTeam/Migration-to-weblate&amp;diff=186855</id>
		<title>I18nTeam/Migration-to-weblate</title>
		<link rel="alternate" type="text/html" href="https://wiki.openstack.org/w/index.php?title=I18nTeam/Migration-to-weblate&amp;diff=186855"/>
				<updated>2025-10-28T07:00:12Z</updated>
		
		<summary type="html">&lt;p&gt;Damekyung98: /* Migration Scope */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Migration to weblate ==&lt;br /&gt;
&lt;br /&gt;
=== Who's joining the migration project ===&lt;br /&gt;
* Ian Y. Choi (Manager)&lt;br /&gt;
* Seongsoo Cho&lt;br /&gt;
* Kuemjong Jeong&lt;br /&gt;
* Nayeon Kim&lt;br /&gt;
* Sion Shin&lt;br /&gt;
* Gwangil Kim&lt;br /&gt;
* DaGyeong Kim&lt;br /&gt;
&lt;br /&gt;
=== Planning a weblate migration schedule ===&lt;br /&gt;
You can find more details about each task below.&lt;br /&gt;
&lt;br /&gt;
* Define the scope of target test projects&lt;br /&gt;
** All vs. a few projects (e.g., openstack-manuals, nova, i18n, horizon)&lt;br /&gt;
* Make Translation Infrastructure Scripts compatible with Weblate&lt;br /&gt;
** Weblate project creation with settings if the target project is not existing on the platform&lt;br /&gt;
*** (If it is not supported, Weblate projects will be created manually)&lt;br /&gt;
*** Testing needs to be performed locally, since the scripts are executed on 06:00 UTC daily.&lt;br /&gt;
* ZuuL Integration Test&lt;br /&gt;
** Determine when to test (e.g., Test methodology without waiting at 06:00 UTC?)&lt;br /&gt;
** Integration test with all translation target projects&lt;br /&gt;
* Making tools for extracting statistical data from Weblate&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Action Item ===&lt;br /&gt;
&lt;br /&gt;
==== Define the scope of target test projects ====&lt;br /&gt;
* Configure Weblate with the information set in Zanata.&lt;br /&gt;
* User information is not migrated.&lt;br /&gt;
&lt;br /&gt;
====  Make Translation Infrastructure Scripts compatible with Weblate ====&lt;br /&gt;
* WIP patch to support Weblate for https://opendev.org/openstack/openstack-zuul-jobs/src/branch/master/roles/prepare-zanata-client/files/&lt;br /&gt;
&lt;br /&gt;
====  Zuul Integration Test ====&lt;br /&gt;
Create and test a ZuuL Job that performs the following tasks&lt;br /&gt;
* Uploading translation files to Weblate when new changes are made to your project&lt;br /&gt;
* Upload translations from Weblate to your project every day at 06 UTC&lt;br /&gt;
&lt;br /&gt;
==== Making tools for extracting statistical data from Weblate ====&lt;br /&gt;
* weblate_userinfo.py : Done ( https://review.opendev.org/c/openstack/i18n/+/893361 ) &lt;br /&gt;
** 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.&lt;br /&gt;
* weblate_users.py : Done ( https://review.opendev.org/c/openstack/i18n/+/895763 ) &lt;br /&gt;
** Generates a list of Weblate language contributors.&lt;br /&gt;
* weblate_utils.py : Done ( https://review.opendev.org/c/openstack/i18n/+/896308 )&lt;br /&gt;
** Provides basic classes used by the other scripts&lt;br /&gt;
*** IniConfig class to get the key and url for the weblate server&lt;br /&gt;
*** WeblateRestService class that communicates with the Weblate REST API&lt;br /&gt;
* weblate_stats.py : Working ( https://review.opendev.org/c/openstack/i18n/+/896306 ) &lt;br /&gt;
** (describe the role of the tool )&lt;br /&gt;
* weblate_records.py : Working  ( https://review.opendev.org/c/openstack/i18n/+/896306 ) &lt;br /&gt;
** (describe the role of the tool )&lt;br /&gt;
&lt;br /&gt;
=== List of projects and status ===&lt;br /&gt;
&lt;br /&gt;
==== Migration Scope ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Item !! Count&lt;br /&gt;
|-&lt;br /&gt;
| Total projects || 127&lt;br /&gt;
|-&lt;br /&gt;
| Total versions || 12&lt;br /&gt;
|-&lt;br /&gt;
| Total Languages || 54&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
We determined the migration version based on the branches that currently exist in the main services.&lt;br /&gt;
&lt;br /&gt;
Note: Some projects may not have this branch.&lt;br /&gt;
&lt;br /&gt;
Versions to migrate:&lt;br /&gt;
* master&lt;br /&gt;
* stable/2025.2&lt;br /&gt;
* stable/2025.1&lt;br /&gt;
* stable/2024.2&lt;br /&gt;
* stable/2024.1&lt;br /&gt;
* unmaintained/2023.1&lt;br /&gt;
* unmaintained/zed&lt;br /&gt;
* unmaintained/wallaby&lt;br /&gt;
* unmaintained/victoria&lt;br /&gt;
* unmaintained/yoga&lt;br /&gt;
* unmaintained/xena&lt;br /&gt;
&lt;br /&gt;
==== Translation Migration Status ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Project !! Message !! Word !! Progress status !! Accuracy(%) !! Launchpad Bug !! Contributor !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| cloudkitty-dashboard || N/A || N/A || N/A || N/A|| https://bugs.launchpad.net/openstack-i18n/+bug/2121053 || DaGyeong Kim || N/A&lt;br /&gt;
|-&lt;br /&gt;
| designate-dashboard || N/A || N/A || N/A || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119196 || DaGyeong Kim || N/A&lt;br /&gt;
|-&lt;br /&gt;
| freezer-web-ui || N/A || N/A || N/A || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2124944 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| heat-dashboard || N/A || N/A || N/A || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119199 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| ironic-ui || N/A || N/A || N/A || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119203 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| manila-ui || N/A || N/A || N/A || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119204 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| magnum-ui || N/A || N/A || N/A || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119200 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| networking-bgpvpn || N/A || N/A || N/A || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119207 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| neutron-fwaas-dashboard || N/A || N/A || N/A || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119206 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| neutron-vpnaas-dashboard || N/A || N/A || N/A || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119388 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| octavia-dashboard || N/A || N/A || N/A || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119197 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| trove-dashboard || N/A || N/A || N/A || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119201 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| zaqar-ui || N/A || N/A || N/A || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119468 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| zun-ui || N/A || N/A || N/A || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119205 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| horizon || N/A || N/A || N/A || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2125039 || N/A || N/A&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Etherpads ===&lt;br /&gt;
* [https://etherpad.opendev.org/p/vancouver-forum-i18n OpenInfra Summit Vancouver 2023 Forum]&lt;br /&gt;
* [https://etherpad.opendev.org/p/i18n-weblate i18n weblate migration]&lt;/div&gt;</summary>
		<author><name>Damekyung98</name></author>	</entry>

	<entry>
		<id>https://wiki.openstack.org/w/index.php?title=I18nTeam/Migration-to-weblate&amp;diff=186854</id>
		<title>I18nTeam/Migration-to-weblate</title>
		<link rel="alternate" type="text/html" href="https://wiki.openstack.org/w/index.php?title=I18nTeam/Migration-to-weblate&amp;diff=186854"/>
				<updated>2025-10-28T06:52:25Z</updated>
		
		<summary type="html">&lt;p&gt;Damekyung98: /* Migration Scope */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Migration to weblate ==&lt;br /&gt;
&lt;br /&gt;
=== Who's joining the migration project ===&lt;br /&gt;
* Ian Y. Choi (Manager)&lt;br /&gt;
* Seongsoo Cho&lt;br /&gt;
* Kuemjong Jeong&lt;br /&gt;
* Nayeon Kim&lt;br /&gt;
* Sion Shin&lt;br /&gt;
* Gwangil Kim&lt;br /&gt;
* DaGyeong Kim&lt;br /&gt;
&lt;br /&gt;
=== Planning a weblate migration schedule ===&lt;br /&gt;
You can find more details about each task below.&lt;br /&gt;
&lt;br /&gt;
* Define the scope of target test projects&lt;br /&gt;
** All vs. a few projects (e.g., openstack-manuals, nova, i18n, horizon)&lt;br /&gt;
* Make Translation Infrastructure Scripts compatible with Weblate&lt;br /&gt;
** Weblate project creation with settings if the target project is not existing on the platform&lt;br /&gt;
*** (If it is not supported, Weblate projects will be created manually)&lt;br /&gt;
*** Testing needs to be performed locally, since the scripts are executed on 06:00 UTC daily.&lt;br /&gt;
* ZuuL Integration Test&lt;br /&gt;
** Determine when to test (e.g., Test methodology without waiting at 06:00 UTC?)&lt;br /&gt;
** Integration test with all translation target projects&lt;br /&gt;
* Making tools for extracting statistical data from Weblate&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Action Item ===&lt;br /&gt;
&lt;br /&gt;
==== Define the scope of target test projects ====&lt;br /&gt;
* Configure Weblate with the information set in Zanata.&lt;br /&gt;
* User information is not migrated.&lt;br /&gt;
&lt;br /&gt;
====  Make Translation Infrastructure Scripts compatible with Weblate ====&lt;br /&gt;
* WIP patch to support Weblate for https://opendev.org/openstack/openstack-zuul-jobs/src/branch/master/roles/prepare-zanata-client/files/&lt;br /&gt;
&lt;br /&gt;
====  Zuul Integration Test ====&lt;br /&gt;
Create and test a ZuuL Job that performs the following tasks&lt;br /&gt;
* Uploading translation files to Weblate when new changes are made to your project&lt;br /&gt;
* Upload translations from Weblate to your project every day at 06 UTC&lt;br /&gt;
&lt;br /&gt;
==== Making tools for extracting statistical data from Weblate ====&lt;br /&gt;
* weblate_userinfo.py : Done ( https://review.opendev.org/c/openstack/i18n/+/893361 ) &lt;br /&gt;
** 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.&lt;br /&gt;
* weblate_users.py : Done ( https://review.opendev.org/c/openstack/i18n/+/895763 ) &lt;br /&gt;
** Generates a list of Weblate language contributors.&lt;br /&gt;
* weblate_utils.py : Done ( https://review.opendev.org/c/openstack/i18n/+/896308 )&lt;br /&gt;
** Provides basic classes used by the other scripts&lt;br /&gt;
*** IniConfig class to get the key and url for the weblate server&lt;br /&gt;
*** WeblateRestService class that communicates with the Weblate REST API&lt;br /&gt;
* weblate_stats.py : Working ( https://review.opendev.org/c/openstack/i18n/+/896306 ) &lt;br /&gt;
** (describe the role of the tool )&lt;br /&gt;
* weblate_records.py : Working  ( https://review.opendev.org/c/openstack/i18n/+/896306 ) &lt;br /&gt;
** (describe the role of the tool )&lt;br /&gt;
&lt;br /&gt;
=== List of projects and status ===&lt;br /&gt;
&lt;br /&gt;
==== Migration Scope ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Item !! Count&lt;br /&gt;
|-&lt;br /&gt;
| Total projects || 127&lt;br /&gt;
|-&lt;br /&gt;
| Total versions || 11&lt;br /&gt;
|-&lt;br /&gt;
| Total Languages || 54&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
We determined the migration version based on the branches that currently exist in the main services.&lt;br /&gt;
&lt;br /&gt;
NOTE: Some projects may not have this branch.&lt;br /&gt;
&lt;br /&gt;
Versions to migrate:&lt;br /&gt;
* master&lt;br /&gt;
* stable/2025.2&lt;br /&gt;
* stable/2025.1&lt;br /&gt;
* stable/2024.2&lt;br /&gt;
* stable/2024.1&lt;br /&gt;
* unmaintained/2023.1&lt;br /&gt;
* unmaintained/zed&lt;br /&gt;
* unmaintained/wallaby&lt;br /&gt;
* unmaintained/victoria&lt;br /&gt;
* unmaintained/yoga&lt;br /&gt;
* unmaintained/xena&lt;br /&gt;
&lt;br /&gt;
==== Translation Migration Status ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Project !! Message !! Word !! Progress status !! Accuracy(%) !! Launchpad Bug !! Contributor !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| cloudkitty-dashboard || N/A || N/A || N/A || N/A|| https://bugs.launchpad.net/openstack-i18n/+bug/2121053 || DaGyeong Kim || N/A&lt;br /&gt;
|-&lt;br /&gt;
| designate-dashboard || N/A || N/A || N/A || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119196 || DaGyeong Kim || N/A&lt;br /&gt;
|-&lt;br /&gt;
| freezer-web-ui || N/A || N/A || N/A || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2124944 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| heat-dashboard || N/A || N/A || N/A || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119199 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| ironic-ui || N/A || N/A || N/A || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119203 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| manila-ui || N/A || N/A || N/A || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119204 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| magnum-ui || N/A || N/A || N/A || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119200 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| networking-bgpvpn || N/A || N/A || N/A || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119207 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| neutron-fwaas-dashboard || N/A || N/A || N/A || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119206 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| neutron-vpnaas-dashboard || N/A || N/A || N/A || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119388 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| octavia-dashboard || N/A || N/A || N/A || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119197 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| trove-dashboard || N/A || N/A || N/A || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119201 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| zaqar-ui || N/A || N/A || N/A || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119468 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| zun-ui || N/A || N/A || N/A || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119205 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| horizon || N/A || N/A || N/A || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2125039 || N/A || N/A&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Etherpads ===&lt;br /&gt;
* [https://etherpad.opendev.org/p/vancouver-forum-i18n OpenInfra Summit Vancouver 2023 Forum]&lt;br /&gt;
* [https://etherpad.opendev.org/p/i18n-weblate i18n weblate migration]&lt;/div&gt;</summary>
		<author><name>Damekyung98</name></author>	</entry>

	<entry>
		<id>https://wiki.openstack.org/w/index.php?title=I18nTeam/Migration-to-weblate&amp;diff=186853</id>
		<title>I18nTeam/Migration-to-weblate</title>
		<link rel="alternate" type="text/html" href="https://wiki.openstack.org/w/index.php?title=I18nTeam/Migration-to-weblate&amp;diff=186853"/>
				<updated>2025-10-28T02:49:54Z</updated>
		
		<summary type="html">&lt;p&gt;Damekyung98: /* Status Table */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Migration to weblate ==&lt;br /&gt;
&lt;br /&gt;
=== Who's joining the migration project ===&lt;br /&gt;
* Ian Y. Choi (Manager)&lt;br /&gt;
* Seongsoo Cho&lt;br /&gt;
* Kuemjong Jeong&lt;br /&gt;
* Nayeon Kim&lt;br /&gt;
* Sion Shin&lt;br /&gt;
* Gwangil Kim&lt;br /&gt;
* DaGyeong Kim&lt;br /&gt;
&lt;br /&gt;
=== Planning a weblate migration schedule ===&lt;br /&gt;
You can find more details about each task below.&lt;br /&gt;
&lt;br /&gt;
* Define the scope of target test projects&lt;br /&gt;
** All vs. a few projects (e.g., openstack-manuals, nova, i18n, horizon)&lt;br /&gt;
* Make Translation Infrastructure Scripts compatible with Weblate&lt;br /&gt;
** Weblate project creation with settings if the target project is not existing on the platform&lt;br /&gt;
*** (If it is not supported, Weblate projects will be created manually)&lt;br /&gt;
*** Testing needs to be performed locally, since the scripts are executed on 06:00 UTC daily.&lt;br /&gt;
* ZuuL Integration Test&lt;br /&gt;
** Determine when to test (e.g., Test methodology without waiting at 06:00 UTC?)&lt;br /&gt;
** Integration test with all translation target projects&lt;br /&gt;
* Making tools for extracting statistical data from Weblate&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Action Item ===&lt;br /&gt;
&lt;br /&gt;
==== Define the scope of target test projects ====&lt;br /&gt;
* Configure Weblate with the information set in Zanata.&lt;br /&gt;
* User information is not migrated.&lt;br /&gt;
&lt;br /&gt;
====  Make Translation Infrastructure Scripts compatible with Weblate ====&lt;br /&gt;
* WIP patch to support Weblate for https://opendev.org/openstack/openstack-zuul-jobs/src/branch/master/roles/prepare-zanata-client/files/&lt;br /&gt;
&lt;br /&gt;
====  Zuul Integration Test ====&lt;br /&gt;
Create and test a ZuuL Job that performs the following tasks&lt;br /&gt;
* Uploading translation files to Weblate when new changes are made to your project&lt;br /&gt;
* Upload translations from Weblate to your project every day at 06 UTC&lt;br /&gt;
&lt;br /&gt;
==== Making tools for extracting statistical data from Weblate ====&lt;br /&gt;
* weblate_userinfo.py : Done ( https://review.opendev.org/c/openstack/i18n/+/893361 ) &lt;br /&gt;
** 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.&lt;br /&gt;
* weblate_users.py : Done ( https://review.opendev.org/c/openstack/i18n/+/895763 ) &lt;br /&gt;
** Generates a list of Weblate language contributors.&lt;br /&gt;
* weblate_utils.py : Done ( https://review.opendev.org/c/openstack/i18n/+/896308 )&lt;br /&gt;
** Provides basic classes used by the other scripts&lt;br /&gt;
*** IniConfig class to get the key and url for the weblate server&lt;br /&gt;
*** WeblateRestService class that communicates with the Weblate REST API&lt;br /&gt;
* weblate_stats.py : Working ( https://review.opendev.org/c/openstack/i18n/+/896306 ) &lt;br /&gt;
** (describe the role of the tool )&lt;br /&gt;
* weblate_records.py : Working  ( https://review.opendev.org/c/openstack/i18n/+/896306 ) &lt;br /&gt;
** (describe the role of the tool )&lt;br /&gt;
&lt;br /&gt;
=== List of projects and status ===&lt;br /&gt;
&lt;br /&gt;
==== Migration Scope ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Item !! Count&lt;br /&gt;
|-&lt;br /&gt;
| Total projects || 127&lt;br /&gt;
|-&lt;br /&gt;
| Total versions || 15&lt;br /&gt;
|-&lt;br /&gt;
| Total Languages || 54&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Translation Migration Status ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Project !! Message !! Word !! Progress status !! Accuracy(%) !! Launchpad Bug !! Contributor !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| cloudkitty-dashboard || N/A || N/A || N/A || N/A|| https://bugs.launchpad.net/openstack-i18n/+bug/2121053 || DaGyeong Kim || N/A&lt;br /&gt;
|-&lt;br /&gt;
| designate-dashboard || N/A || N/A || N/A || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119196 || DaGyeong Kim || N/A&lt;br /&gt;
|-&lt;br /&gt;
| freezer-web-ui || N/A || N/A || N/A || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2124944 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| heat-dashboard || N/A || N/A || N/A || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119199 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| ironic-ui || N/A || N/A || N/A || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119203 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| manila-ui || N/A || N/A || N/A || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119204 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| magnum-ui || N/A || N/A || N/A || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119200 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| networking-bgpvpn || N/A || N/A || N/A || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119207 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| neutron-fwaas-dashboard || N/A || N/A || N/A || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119206 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| neutron-vpnaas-dashboard || N/A || N/A || N/A || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119388 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| octavia-dashboard || N/A || N/A || N/A || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119197 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| trove-dashboard || N/A || N/A || N/A || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119201 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| zaqar-ui || N/A || N/A || N/A || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119468 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| zun-ui || N/A || N/A || N/A || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119205 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| horizon || N/A || N/A || N/A || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2125039 || N/A || N/A&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Etherpads ===&lt;br /&gt;
* [https://etherpad.opendev.org/p/vancouver-forum-i18n OpenInfra Summit Vancouver 2023 Forum]&lt;br /&gt;
* [https://etherpad.opendev.org/p/i18n-weblate i18n weblate migration]&lt;/div&gt;</summary>
		<author><name>Damekyung98</name></author>	</entry>

	<entry>
		<id>https://wiki.openstack.org/w/index.php?title=I18nTeam/Migration-to-weblate&amp;diff=186852</id>
		<title>I18nTeam/Migration-to-weblate</title>
		<link rel="alternate" type="text/html" href="https://wiki.openstack.org/w/index.php?title=I18nTeam/Migration-to-weblate&amp;diff=186852"/>
				<updated>2025-10-28T02:48:15Z</updated>
		
		<summary type="html">&lt;p&gt;Damekyung98: /* Total to migrate */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Migration to weblate ==&lt;br /&gt;
&lt;br /&gt;
=== Who's joining the migration project ===&lt;br /&gt;
* Ian Y. Choi (Manager)&lt;br /&gt;
* Seongsoo Cho&lt;br /&gt;
* Kuemjong Jeong&lt;br /&gt;
* Nayeon Kim&lt;br /&gt;
* Sion Shin&lt;br /&gt;
* Gwangil Kim&lt;br /&gt;
* DaGyeong Kim&lt;br /&gt;
&lt;br /&gt;
=== Planning a weblate migration schedule ===&lt;br /&gt;
You can find more details about each task below.&lt;br /&gt;
&lt;br /&gt;
* Define the scope of target test projects&lt;br /&gt;
** All vs. a few projects (e.g., openstack-manuals, nova, i18n, horizon)&lt;br /&gt;
* Make Translation Infrastructure Scripts compatible with Weblate&lt;br /&gt;
** Weblate project creation with settings if the target project is not existing on the platform&lt;br /&gt;
*** (If it is not supported, Weblate projects will be created manually)&lt;br /&gt;
*** Testing needs to be performed locally, since the scripts are executed on 06:00 UTC daily.&lt;br /&gt;
* ZuuL Integration Test&lt;br /&gt;
** Determine when to test (e.g., Test methodology without waiting at 06:00 UTC?)&lt;br /&gt;
** Integration test with all translation target projects&lt;br /&gt;
* Making tools for extracting statistical data from Weblate&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Action Item ===&lt;br /&gt;
&lt;br /&gt;
==== Define the scope of target test projects ====&lt;br /&gt;
* Configure Weblate with the information set in Zanata.&lt;br /&gt;
* User information is not migrated.&lt;br /&gt;
&lt;br /&gt;
====  Make Translation Infrastructure Scripts compatible with Weblate ====&lt;br /&gt;
* WIP patch to support Weblate for https://opendev.org/openstack/openstack-zuul-jobs/src/branch/master/roles/prepare-zanata-client/files/&lt;br /&gt;
&lt;br /&gt;
====  Zuul Integration Test ====&lt;br /&gt;
Create and test a ZuuL Job that performs the following tasks&lt;br /&gt;
* Uploading translation files to Weblate when new changes are made to your project&lt;br /&gt;
* Upload translations from Weblate to your project every day at 06 UTC&lt;br /&gt;
&lt;br /&gt;
==== Making tools for extracting statistical data from Weblate ====&lt;br /&gt;
* weblate_userinfo.py : Done ( https://review.opendev.org/c/openstack/i18n/+/893361 ) &lt;br /&gt;
** 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.&lt;br /&gt;
* weblate_users.py : Done ( https://review.opendev.org/c/openstack/i18n/+/895763 ) &lt;br /&gt;
** Generates a list of Weblate language contributors.&lt;br /&gt;
* weblate_utils.py : Done ( https://review.opendev.org/c/openstack/i18n/+/896308 )&lt;br /&gt;
** Provides basic classes used by the other scripts&lt;br /&gt;
*** IniConfig class to get the key and url for the weblate server&lt;br /&gt;
*** WeblateRestService class that communicates with the Weblate REST API&lt;br /&gt;
* weblate_stats.py : Working ( https://review.opendev.org/c/openstack/i18n/+/896306 ) &lt;br /&gt;
** (describe the role of the tool )&lt;br /&gt;
* weblate_records.py : Working  ( https://review.opendev.org/c/openstack/i18n/+/896306 ) &lt;br /&gt;
** (describe the role of the tool )&lt;br /&gt;
&lt;br /&gt;
=== List of projects and status ===&lt;br /&gt;
&lt;br /&gt;
==== Migration Scope ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Item !! Count&lt;br /&gt;
|-&lt;br /&gt;
| Total projects || 127&lt;br /&gt;
|-&lt;br /&gt;
| Total versions || 15&lt;br /&gt;
|-&lt;br /&gt;
| Total Languages || 54&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Status Table ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Project !! Message !! Word !! Progress status !! Accuracy(%) !! Launchpad Bug !! Contributor !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| cloudkitty-dashboard || N/A || N/A || N/A || N/A|| https://bugs.launchpad.net/openstack-i18n/+bug/2121053 || DaGyeong Kim || N/A&lt;br /&gt;
|-&lt;br /&gt;
| designate-dashboard || N/A || N/A || N/A || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119196 || DaGyeong Kim || N/A&lt;br /&gt;
|-&lt;br /&gt;
| freezer-web-ui || N/A || N/A || N/A || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2124944 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| heat-dashboard || N/A || N/A || N/A || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119199 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| ironic-ui || N/A || N/A || N/A || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119203 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| manila-ui || N/A || N/A || N/A || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119204 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| magnum-ui || N/A || N/A || N/A || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119200 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| networking-bgpvpn || N/A || N/A || N/A || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119207 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| neutron-fwaas-dashboard || N/A || N/A || N/A || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119206 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| neutron-vpnaas-dashboard || N/A || N/A || N/A || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119388 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| octavia-dashboard || N/A || N/A || N/A || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119197 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| trove-dashboard || N/A || N/A || N/A || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119201 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| zaqar-ui || N/A || N/A || N/A || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119468 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| zun-ui || N/A || N/A || N/A || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119205 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| horizon || N/A || N/A || N/A || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2125039 || N/A || N/A&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Etherpads ===&lt;br /&gt;
* [https://etherpad.opendev.org/p/vancouver-forum-i18n OpenInfra Summit Vancouver 2023 Forum]&lt;br /&gt;
* [https://etherpad.opendev.org/p/i18n-weblate i18n weblate migration]&lt;/div&gt;</summary>
		<author><name>Damekyung98</name></author>	</entry>

	<entry>
		<id>https://wiki.openstack.org/w/index.php?title=I18nTeam/Migration-to-weblate&amp;diff=186851</id>
		<title>I18nTeam/Migration-to-weblate</title>
		<link rel="alternate" type="text/html" href="https://wiki.openstack.org/w/index.php?title=I18nTeam/Migration-to-weblate&amp;diff=186851"/>
				<updated>2025-10-28T02:46:08Z</updated>
		
		<summary type="html">&lt;p&gt;Damekyung98: /* Status Table */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Migration to weblate ==&lt;br /&gt;
&lt;br /&gt;
=== Who's joining the migration project ===&lt;br /&gt;
* Ian Y. Choi (Manager)&lt;br /&gt;
* Seongsoo Cho&lt;br /&gt;
* Kuemjong Jeong&lt;br /&gt;
* Nayeon Kim&lt;br /&gt;
* Sion Shin&lt;br /&gt;
* Gwangil Kim&lt;br /&gt;
* DaGyeong Kim&lt;br /&gt;
&lt;br /&gt;
=== Planning a weblate migration schedule ===&lt;br /&gt;
You can find more details about each task below.&lt;br /&gt;
&lt;br /&gt;
* Define the scope of target test projects&lt;br /&gt;
** All vs. a few projects (e.g., openstack-manuals, nova, i18n, horizon)&lt;br /&gt;
* Make Translation Infrastructure Scripts compatible with Weblate&lt;br /&gt;
** Weblate project creation with settings if the target project is not existing on the platform&lt;br /&gt;
*** (If it is not supported, Weblate projects will be created manually)&lt;br /&gt;
*** Testing needs to be performed locally, since the scripts are executed on 06:00 UTC daily.&lt;br /&gt;
* ZuuL Integration Test&lt;br /&gt;
** Determine when to test (e.g., Test methodology without waiting at 06:00 UTC?)&lt;br /&gt;
** Integration test with all translation target projects&lt;br /&gt;
* Making tools for extracting statistical data from Weblate&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Action Item ===&lt;br /&gt;
&lt;br /&gt;
==== Define the scope of target test projects ====&lt;br /&gt;
* Configure Weblate with the information set in Zanata.&lt;br /&gt;
* User information is not migrated.&lt;br /&gt;
&lt;br /&gt;
====  Make Translation Infrastructure Scripts compatible with Weblate ====&lt;br /&gt;
* WIP patch to support Weblate for https://opendev.org/openstack/openstack-zuul-jobs/src/branch/master/roles/prepare-zanata-client/files/&lt;br /&gt;
&lt;br /&gt;
====  Zuul Integration Test ====&lt;br /&gt;
Create and test a ZuuL Job that performs the following tasks&lt;br /&gt;
* Uploading translation files to Weblate when new changes are made to your project&lt;br /&gt;
* Upload translations from Weblate to your project every day at 06 UTC&lt;br /&gt;
&lt;br /&gt;
==== Making tools for extracting statistical data from Weblate ====&lt;br /&gt;
* weblate_userinfo.py : Done ( https://review.opendev.org/c/openstack/i18n/+/893361 ) &lt;br /&gt;
** 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.&lt;br /&gt;
* weblate_users.py : Done ( https://review.opendev.org/c/openstack/i18n/+/895763 ) &lt;br /&gt;
** Generates a list of Weblate language contributors.&lt;br /&gt;
* weblate_utils.py : Done ( https://review.opendev.org/c/openstack/i18n/+/896308 )&lt;br /&gt;
** Provides basic classes used by the other scripts&lt;br /&gt;
*** IniConfig class to get the key and url for the weblate server&lt;br /&gt;
*** WeblateRestService class that communicates with the Weblate REST API&lt;br /&gt;
* weblate_stats.py : Working ( https://review.opendev.org/c/openstack/i18n/+/896306 ) &lt;br /&gt;
** (describe the role of the tool )&lt;br /&gt;
* weblate_records.py : Working  ( https://review.opendev.org/c/openstack/i18n/+/896306 ) &lt;br /&gt;
** (describe the role of the tool )&lt;br /&gt;
&lt;br /&gt;
=== List of projects and status ===&lt;br /&gt;
&lt;br /&gt;
==== Total to migrate ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Identification !! Number&lt;br /&gt;
|-&lt;br /&gt;
| Total projects to migrate || ?? &lt;br /&gt;
|-&lt;br /&gt;
| Total version to migrate || 15&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Status Table ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Project !! Message !! Word !! Progress status !! Accuracy(%) !! Launchpad Bug !! Contributor !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| cloudkitty-dashboard || N/A || N/A || N/A || N/A|| https://bugs.launchpad.net/openstack-i18n/+bug/2121053 || DaGyeong Kim || N/A&lt;br /&gt;
|-&lt;br /&gt;
| designate-dashboard || N/A || N/A || N/A || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119196 || DaGyeong Kim || N/A&lt;br /&gt;
|-&lt;br /&gt;
| freezer-web-ui || N/A || N/A || N/A || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2124944 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| heat-dashboard || N/A || N/A || N/A || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119199 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| ironic-ui || N/A || N/A || N/A || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119203 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| manila-ui || N/A || N/A || N/A || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119204 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| magnum-ui || N/A || N/A || N/A || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119200 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| networking-bgpvpn || N/A || N/A || N/A || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119207 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| neutron-fwaas-dashboard || N/A || N/A || N/A || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119206 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| neutron-vpnaas-dashboard || N/A || N/A || N/A || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119388 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| octavia-dashboard || N/A || N/A || N/A || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119197 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| trove-dashboard || N/A || N/A || N/A || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119201 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| zaqar-ui || N/A || N/A || N/A || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119468 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| zun-ui || N/A || N/A || N/A || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119205 || N/A || N/A&lt;br /&gt;
|-&lt;br /&gt;
| horizon || N/A || N/A || N/A || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2125039 || N/A || N/A&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Etherpads ===&lt;br /&gt;
* [https://etherpad.opendev.org/p/vancouver-forum-i18n OpenInfra Summit Vancouver 2023 Forum]&lt;br /&gt;
* [https://etherpad.opendev.org/p/i18n-weblate i18n weblate migration]&lt;/div&gt;</summary>
		<author><name>Damekyung98</name></author>	</entry>

	<entry>
		<id>https://wiki.openstack.org/w/index.php?title=I18nTeam/Migration-to-weblate&amp;diff=186850</id>
		<title>I18nTeam/Migration-to-weblate</title>
		<link rel="alternate" type="text/html" href="https://wiki.openstack.org/w/index.php?title=I18nTeam/Migration-to-weblate&amp;diff=186850"/>
				<updated>2025-10-28T02:32:50Z</updated>
		
		<summary type="html">&lt;p&gt;Damekyung98: /* List of projects and status */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Migration to weblate ==&lt;br /&gt;
&lt;br /&gt;
=== Who's joining the migration project ===&lt;br /&gt;
* Ian Y. Choi (Manager)&lt;br /&gt;
* Seongsoo Cho&lt;br /&gt;
* Kuemjong Jeong&lt;br /&gt;
* Nayeon Kim&lt;br /&gt;
* Sion Shin&lt;br /&gt;
* Gwangil Kim&lt;br /&gt;
* DaGyeong Kim&lt;br /&gt;
&lt;br /&gt;
=== Planning a weblate migration schedule ===&lt;br /&gt;
You can find more details about each task below.&lt;br /&gt;
&lt;br /&gt;
* Define the scope of target test projects&lt;br /&gt;
** All vs. a few projects (e.g., openstack-manuals, nova, i18n, horizon)&lt;br /&gt;
* Make Translation Infrastructure Scripts compatible with Weblate&lt;br /&gt;
** Weblate project creation with settings if the target project is not existing on the platform&lt;br /&gt;
*** (If it is not supported, Weblate projects will be created manually)&lt;br /&gt;
*** Testing needs to be performed locally, since the scripts are executed on 06:00 UTC daily.&lt;br /&gt;
* ZuuL Integration Test&lt;br /&gt;
** Determine when to test (e.g., Test methodology without waiting at 06:00 UTC?)&lt;br /&gt;
** Integration test with all translation target projects&lt;br /&gt;
* Making tools for extracting statistical data from Weblate&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Action Item ===&lt;br /&gt;
&lt;br /&gt;
==== Define the scope of target test projects ====&lt;br /&gt;
* Configure Weblate with the information set in Zanata.&lt;br /&gt;
* User information is not migrated.&lt;br /&gt;
&lt;br /&gt;
====  Make Translation Infrastructure Scripts compatible with Weblate ====&lt;br /&gt;
* WIP patch to support Weblate for https://opendev.org/openstack/openstack-zuul-jobs/src/branch/master/roles/prepare-zanata-client/files/&lt;br /&gt;
&lt;br /&gt;
====  Zuul Integration Test ====&lt;br /&gt;
Create and test a ZuuL Job that performs the following tasks&lt;br /&gt;
* Uploading translation files to Weblate when new changes are made to your project&lt;br /&gt;
* Upload translations from Weblate to your project every day at 06 UTC&lt;br /&gt;
&lt;br /&gt;
==== Making tools for extracting statistical data from Weblate ====&lt;br /&gt;
* weblate_userinfo.py : Done ( https://review.opendev.org/c/openstack/i18n/+/893361 ) &lt;br /&gt;
** 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.&lt;br /&gt;
* weblate_users.py : Done ( https://review.opendev.org/c/openstack/i18n/+/895763 ) &lt;br /&gt;
** Generates a list of Weblate language contributors.&lt;br /&gt;
* weblate_utils.py : Done ( https://review.opendev.org/c/openstack/i18n/+/896308 )&lt;br /&gt;
** Provides basic classes used by the other scripts&lt;br /&gt;
*** IniConfig class to get the key and url for the weblate server&lt;br /&gt;
*** WeblateRestService class that communicates with the Weblate REST API&lt;br /&gt;
* weblate_stats.py : Working ( https://review.opendev.org/c/openstack/i18n/+/896306 ) &lt;br /&gt;
** (describe the role of the tool )&lt;br /&gt;
* weblate_records.py : Working  ( https://review.opendev.org/c/openstack/i18n/+/896306 ) &lt;br /&gt;
** (describe the role of the tool )&lt;br /&gt;
&lt;br /&gt;
=== List of projects and status ===&lt;br /&gt;
&lt;br /&gt;
==== Total to migrate ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Identification !! Number&lt;br /&gt;
|-&lt;br /&gt;
| Total projects to migrate || ?? &lt;br /&gt;
|-&lt;br /&gt;
| Total version to migrate || 15&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Status Table ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Project !! Message !! Word !! Progress status !! Accuracy(%) !! Launchpad Bug !! Contributor !! Comment&lt;br /&gt;
|-&lt;br /&gt;
| cloudkitty-dashboard || N/A || N/A || N/A || N/A|| https://bugs.launchpad.net/openstack-i18n/+bug/2121053 || DaGyeong Kim || N/A&lt;br /&gt;
|-&lt;br /&gt;
| designate-dashboard || N/A || N/A || N/A || N/A || https://bugs.launchpad.net/openstack-i18n/+bug/2119196 || DaGyeong Kim || N/A&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Etherpads ===&lt;br /&gt;
* [https://etherpad.opendev.org/p/vancouver-forum-i18n OpenInfra Summit Vancouver 2023 Forum]&lt;br /&gt;
* [https://etherpad.opendev.org/p/i18n-weblate i18n weblate migration]&lt;/div&gt;</summary>
		<author><name>Damekyung98</name></author>	</entry>

	<entry>
		<id>https://wiki.openstack.org/w/index.php?title=I18nTeam/Migration-to-weblate&amp;diff=186849</id>
		<title>I18nTeam/Migration-to-weblate</title>
		<link rel="alternate" type="text/html" href="https://wiki.openstack.org/w/index.php?title=I18nTeam/Migration-to-weblate&amp;diff=186849"/>
				<updated>2025-10-28T02:00:48Z</updated>
		
		<summary type="html">&lt;p&gt;Damekyung98: /* Migration to weblate */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Migration to weblate ==&lt;br /&gt;
&lt;br /&gt;
=== Who's joining the migration project ===&lt;br /&gt;
* Ian Y. Choi (Manager)&lt;br /&gt;
* Seongsoo Cho&lt;br /&gt;
* Kuemjong Jeong&lt;br /&gt;
* Nayeon Kim&lt;br /&gt;
* Sion Shin&lt;br /&gt;
* Gwangil Kim&lt;br /&gt;
* DaGyeong Kim&lt;br /&gt;
&lt;br /&gt;
=== Planning a weblate migration schedule ===&lt;br /&gt;
You can find more details about each task below.&lt;br /&gt;
&lt;br /&gt;
* Define the scope of target test projects&lt;br /&gt;
** All vs. a few projects (e.g., openstack-manuals, nova, i18n, horizon)&lt;br /&gt;
* Make Translation Infrastructure Scripts compatible with Weblate&lt;br /&gt;
** Weblate project creation with settings if the target project is not existing on the platform&lt;br /&gt;
*** (If it is not supported, Weblate projects will be created manually)&lt;br /&gt;
*** Testing needs to be performed locally, since the scripts are executed on 06:00 UTC daily.&lt;br /&gt;
* ZuuL Integration Test&lt;br /&gt;
** Determine when to test (e.g., Test methodology without waiting at 06:00 UTC?)&lt;br /&gt;
** Integration test with all translation target projects&lt;br /&gt;
* Making tools for extracting statistical data from Weblate&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Action Item ===&lt;br /&gt;
&lt;br /&gt;
==== Define the scope of target test projects ====&lt;br /&gt;
* Configure Weblate with the information set in Zanata.&lt;br /&gt;
* User information is not migrated.&lt;br /&gt;
&lt;br /&gt;
====  Make Translation Infrastructure Scripts compatible with Weblate ====&lt;br /&gt;
* WIP patch to support Weblate for https://opendev.org/openstack/openstack-zuul-jobs/src/branch/master/roles/prepare-zanata-client/files/&lt;br /&gt;
&lt;br /&gt;
====  Zuul Integration Test ====&lt;br /&gt;
Create and test a ZuuL Job that performs the following tasks&lt;br /&gt;
* Uploading translation files to Weblate when new changes are made to your project&lt;br /&gt;
* Upload translations from Weblate to your project every day at 06 UTC&lt;br /&gt;
&lt;br /&gt;
==== Making tools for extracting statistical data from Weblate ====&lt;br /&gt;
* weblate_userinfo.py : Done ( https://review.opendev.org/c/openstack/i18n/+/893361 ) &lt;br /&gt;
** 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.&lt;br /&gt;
* weblate_users.py : Done ( https://review.opendev.org/c/openstack/i18n/+/895763 ) &lt;br /&gt;
** Generates a list of Weblate language contributors.&lt;br /&gt;
* weblate_utils.py : Done ( https://review.opendev.org/c/openstack/i18n/+/896308 )&lt;br /&gt;
** Provides basic classes used by the other scripts&lt;br /&gt;
*** IniConfig class to get the key and url for the weblate server&lt;br /&gt;
*** WeblateRestService class that communicates with the Weblate REST API&lt;br /&gt;
* weblate_stats.py : Working ( https://review.opendev.org/c/openstack/i18n/+/896306 ) &lt;br /&gt;
** (describe the role of the tool )&lt;br /&gt;
* weblate_records.py : Working  ( https://review.opendev.org/c/openstack/i18n/+/896306 ) &lt;br /&gt;
** (describe the role of the tool )&lt;br /&gt;
&lt;br /&gt;
=== List of projects and status ===&lt;br /&gt;
&lt;br /&gt;
=== Etherpads ===&lt;br /&gt;
* [https://etherpad.opendev.org/p/vancouver-forum-i18n OpenInfra Summit Vancouver 2023 Forum]&lt;br /&gt;
* [https://etherpad.opendev.org/p/i18n-weblate i18n weblate migration]&lt;/div&gt;</summary>
		<author><name>Damekyung98</name></author>	</entry>

	<entry>
		<id>https://wiki.openstack.org/w/index.php?title=I18nTeam/Migration-to-weblate&amp;diff=186848</id>
		<title>I18nTeam/Migration-to-weblate</title>
		<link rel="alternate" type="text/html" href="https://wiki.openstack.org/w/index.php?title=I18nTeam/Migration-to-weblate&amp;diff=186848"/>
				<updated>2025-10-28T01:55:04Z</updated>
		
		<summary type="html">&lt;p&gt;Damekyung98: /* Migration */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Migration to weblate ==&lt;br /&gt;
&lt;br /&gt;
=== Who's joining the migration project ===&lt;br /&gt;
* Ian Y. Choi (Manager)&lt;br /&gt;
* Seongsoo Cho&lt;br /&gt;
* Kuemjong Jeong&lt;br /&gt;
* Nayeon Kim&lt;br /&gt;
* Sion Shin&lt;br /&gt;
* Gwangil Kim&lt;br /&gt;
* DaGyeong Kim&lt;br /&gt;
&lt;br /&gt;
=== Planning a weblate migration schedule ===&lt;br /&gt;
You can find more details about each task below.&lt;br /&gt;
&lt;br /&gt;
* Define the scope of target test projects&lt;br /&gt;
** All vs. a few projects (e.g., openstack-manuals, nova, i18n, horizon)&lt;br /&gt;
* Make Translation Infrastructure Scripts compatible with Weblate&lt;br /&gt;
** Weblate project creation with settings if the target project is not existing on the platform&lt;br /&gt;
*** (If it is not supported, Weblate projects will be created manually)&lt;br /&gt;
*** Testing needs to be performed locally, since the scripts are executed on 06:00 UTC daily.&lt;br /&gt;
* ZuuL Integration Test&lt;br /&gt;
** Determine when to test (e.g., Test methodology without waiting at 06:00 UTC?)&lt;br /&gt;
** Integration test with all translation target projects&lt;br /&gt;
* Making tools for extracting statistical data from Weblate&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Action Item ===&lt;br /&gt;
&lt;br /&gt;
==== Define the scope of target test projects ====&lt;br /&gt;
* Configure Weblate with the information set in Zanata.&lt;br /&gt;
* User information is not migrated.&lt;br /&gt;
&lt;br /&gt;
====  Make Translation Infrastructure Scripts compatible with Weblate ====&lt;br /&gt;
* WIP patch to support Weblate for https://opendev.org/openstack/openstack-zuul-jobs/src/branch/master/roles/prepare-zanata-client/files/&lt;br /&gt;
&lt;br /&gt;
====  Zuul Integration Test ====&lt;br /&gt;
Create and test a ZuuL Job that performs the following tasks&lt;br /&gt;
* Uploading translation files to Weblate when new changes are made to your project&lt;br /&gt;
* Upload translations from Weblate to your project every day at 06 UTC&lt;br /&gt;
&lt;br /&gt;
==== Making tools for extracting statistical data from Weblate ====&lt;br /&gt;
* weblate_userinfo.py : Done ( https://review.opendev.org/c/openstack/i18n/+/893361 ) &lt;br /&gt;
** 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.&lt;br /&gt;
* weblate_users.py : Done ( https://review.opendev.org/c/openstack/i18n/+/895763 ) &lt;br /&gt;
** Generates a list of Weblate language contributors.&lt;br /&gt;
* weblate_utils.py : Done ( https://review.opendev.org/c/openstack/i18n/+/896308 )&lt;br /&gt;
** Provides basic classes used by the other scripts&lt;br /&gt;
*** IniConfig class to get the key and url for the weblate server&lt;br /&gt;
*** WeblateRestService class that communicates with the Weblate REST API&lt;br /&gt;
* weblate_stats.py : Working ( https://review.opendev.org/c/openstack/i18n/+/896306 ) &lt;br /&gt;
** (describe the role of the tool )&lt;br /&gt;
* weblate_records.py : Working  ( https://review.opendev.org/c/openstack/i18n/+/896306 ) &lt;br /&gt;
** (describe the role of the tool )&lt;br /&gt;
&lt;br /&gt;
=== Etherpads ===&lt;br /&gt;
* [https://etherpad.opendev.org/p/vancouver-forum-i18n OpenInfra Summit Vancouver 2023 Forum]&lt;br /&gt;
* [https://etherpad.opendev.org/p/i18n-weblate i18n weblate migration]&lt;/div&gt;</summary>
		<author><name>Damekyung98</name></author>	</entry>

	<entry>
		<id>https://wiki.openstack.org/w/index.php?title=I18nTeam/Migration-to-weblate&amp;diff=186847</id>
		<title>I18nTeam/Migration-to-weblate</title>
		<link rel="alternate" type="text/html" href="https://wiki.openstack.org/w/index.php?title=I18nTeam/Migration-to-weblate&amp;diff=186847"/>
				<updated>2025-10-28T01:45:39Z</updated>
		
		<summary type="html">&lt;p&gt;Damekyung98: /* Migration to weblate */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Migration to weblate ==&lt;br /&gt;
&lt;br /&gt;
=== Who's joining the migration project ===&lt;br /&gt;
* Ian Y. Choi (Manager)&lt;br /&gt;
* Seongsoo Cho&lt;br /&gt;
* Kuemjong Jeong&lt;br /&gt;
* Nayeon Kim&lt;br /&gt;
* Sion Shin&lt;br /&gt;
* Gwangil Kim&lt;br /&gt;
* DaGyeong Kim&lt;br /&gt;
&lt;br /&gt;
=== Planning a weblate migration schedule ===&lt;br /&gt;
You can find more details about each task below.&lt;br /&gt;
&lt;br /&gt;
* Define the scope of target test projects&lt;br /&gt;
** All vs. a few projects (e.g., openstack-manuals, nova, i18n, horizon)&lt;br /&gt;
* Make Translation Infrastructure Scripts compatible with Weblate&lt;br /&gt;
** Weblate project creation with settings if the target project is not existing on the platform&lt;br /&gt;
*** (If it is not supported, Weblate projects will be created manually)&lt;br /&gt;
*** Testing needs to be performed locally, since the scripts are executed on 06:00 UTC daily.&lt;br /&gt;
* ZuuL Integration Test&lt;br /&gt;
** Determine when to test (e.g., Test methodology without waiting at 06:00 UTC?)&lt;br /&gt;
** Integration test with all translation target projects&lt;br /&gt;
* Making tools for extracting statistical data from Weblate&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Action Item ===&lt;br /&gt;
&lt;br /&gt;
==== Define the scope of target test projects ====&lt;br /&gt;
* Configure Weblate with the information set in Zanata.&lt;br /&gt;
* User information is not migrated.&lt;br /&gt;
&lt;br /&gt;
====  Make Translation Infrastructure Scripts compatible with Weblate ====&lt;br /&gt;
* WIP patch to support Weblate for https://opendev.org/openstack/openstack-zuul-jobs/src/branch/master/roles/prepare-zanata-client/files/&lt;br /&gt;
&lt;br /&gt;
====  Zuul Integration Test ====&lt;br /&gt;
Create and test a ZuuL Job that performs the following tasks&lt;br /&gt;
* Uploading translation files to Weblate when new changes are made to your project&lt;br /&gt;
* Upload translations from Weblate to your project every day at 06 UTC&lt;br /&gt;
&lt;br /&gt;
==== Making tools for extracting statistical data from Weblate ====&lt;br /&gt;
* weblate_userinfo.py : Done ( https://review.opendev.org/c/openstack/i18n/+/893361 ) &lt;br /&gt;
** 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.&lt;br /&gt;
* weblate_users.py : Done ( https://review.opendev.org/c/openstack/i18n/+/895763 ) &lt;br /&gt;
** Generates a list of Weblate language contributors.&lt;br /&gt;
* weblate_utils.py : Done ( https://review.opendev.org/c/openstack/i18n/+/896308 )&lt;br /&gt;
** Provides basic classes used by the other scripts&lt;br /&gt;
*** IniConfig class to get the key and url for the weblate server&lt;br /&gt;
*** WeblateRestService class that communicates with the Weblate REST API&lt;br /&gt;
* weblate_stats.py : Working ( https://review.opendev.org/c/openstack/i18n/+/896306 ) &lt;br /&gt;
** (describe the role of the tool )&lt;br /&gt;
* weblate_records.py : Working  ( https://review.opendev.org/c/openstack/i18n/+/896306 ) &lt;br /&gt;
** (describe the role of the tool )&lt;br /&gt;
&lt;br /&gt;
==== Migration ====&lt;br /&gt;
&lt;br /&gt;
=== Etherpads ===&lt;br /&gt;
* [https://etherpad.opendev.org/p/vancouver-forum-i18n OpenInfra Summit Vancouver 2023 Forum]&lt;br /&gt;
* [https://etherpad.opendev.org/p/i18n-weblate i18n weblate migration]&lt;/div&gt;</summary>
		<author><name>Damekyung98</name></author>	</entry>

	<entry>
		<id>https://wiki.openstack.org/w/index.php?title=I18nTeam/Migration-to-weblate/migration-tools&amp;diff=186806</id>
		<title>I18nTeam/Migration-to-weblate/migration-tools</title>
		<link rel="alternate" type="text/html" href="https://wiki.openstack.org/w/index.php?title=I18nTeam/Migration-to-weblate/migration-tools&amp;diff=186806"/>
				<updated>2025-10-14T13:21:46Z</updated>
		
		<summary type="html">&lt;p&gt;Damekyung98: /* 2. Project Migration Tools */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Migration Tools for Weblate ==&lt;br /&gt;
&lt;br /&gt;
=== Overview ===&lt;br /&gt;
* This page documents the ongoing migration from Zanata to Weblate for the OpenStack I18n project.&lt;br /&gt;
* The migration involves language migration tools and project migration tools.&lt;br /&gt;
&lt;br /&gt;
=== Who's joining the migration tools project ===&lt;br /&gt;
* Gwang-Il Kim&lt;br /&gt;
* DaGyeong Kim&lt;br /&gt;
&lt;br /&gt;
=== Migration Plan ===&lt;br /&gt;
&lt;br /&gt;
==== 1. Language Migration ====&lt;br /&gt;
* Remove all existing languages from Weblate that are not needed.&lt;br /&gt;
** Use delete_languages.py &lt;br /&gt;
* Recreate languages in Weblate to match the plural-forms and settings defined in Zanata.&lt;br /&gt;
** Use create_languages_weblate.py&lt;br /&gt;
&lt;br /&gt;
==== 2. Project Migration ====&lt;br /&gt;
&lt;br /&gt;
=====Set up the environment to migrate.=====&lt;br /&gt;
* Set up the environment by installing system and python dependencies.&lt;br /&gt;
* Configure the workspace folder as working directories.&lt;br /&gt;
&lt;br /&gt;
=====Generate POT files for project.=====&lt;br /&gt;
* Extract strings for translation from project.&lt;br /&gt;
* Generate template files(POT) for migration.&lt;br /&gt;
&lt;br /&gt;
=====Extract Translation files=====&lt;br /&gt;
* Pull all locale translation files(PO) from Zanata&lt;br /&gt;
&lt;br /&gt;
=====Create Weblate project=====&lt;br /&gt;
* Create a project in Weblate using the OpenStack project name.&lt;br /&gt;
&lt;br /&gt;
=====Create a global glossary=====&lt;br /&gt;
* Create a glossary component within the project for terminology consistency.&lt;br /&gt;
* There is only one glossary per project.&lt;br /&gt;
&lt;br /&gt;
=====Create Weblate Category =====&lt;br /&gt;
* Categories are collections of related components.&lt;br /&gt;
* Create categories to organize and display different versions.&lt;br /&gt;
&lt;br /&gt;
=====Create Weblate components.=====&lt;br /&gt;
* Component is a grouping of something for translation.&lt;br /&gt;
* Create component with pot files.&lt;br /&gt;
&lt;br /&gt;
* There is component attributes to use:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! key !! value&lt;br /&gt;
|-&lt;br /&gt;
| file format || po&lt;br /&gt;
|-&lt;br /&gt;
| filemask || locale/*/LC_MESSAGES/&amp;lt;component_name&amp;gt;.po&lt;br /&gt;
|-&lt;br /&gt;
| new_base || &amp;lt;component_name&amp;gt;.pot&lt;br /&gt;
|-&lt;br /&gt;
| source_language || en_US&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Note: The filemask depends on the project type.&lt;br /&gt;
&lt;br /&gt;
=====Create Weblate translation.=====&lt;br /&gt;
* Translations represent language-specific versions of components.&lt;br /&gt;
* Create translations for all locales that exist in Zanata.&lt;br /&gt;
* Ensure locale names match the language codes used by the Weblate server.&lt;br /&gt;
&lt;br /&gt;
=====Push translation files into Weblate translation.=====&lt;br /&gt;
* Upload the PO files extracted from Zanata to their corresponding translations in Weblate.&lt;br /&gt;
&lt;br /&gt;
=== Migration Tools ===&lt;br /&gt;
&lt;br /&gt;
==== 1. Language Migration Tools ====&lt;br /&gt;
* delete_languages.py  : Active ( https://review.opendev.org/c/openstack/i18n/+/961371/9 ) &lt;br /&gt;
** Automatically creates or updates Weblate language configurations to match the existing Zanata language set.&lt;br /&gt;
** Uses Weblate REST API to sync language codes, names, plural forms, and text directions in bulk.&lt;br /&gt;
* create_languages_weblate.py: Active ( https://review.opendev.org/c/openstack/i18n/+/961371/9 ) &lt;br /&gt;
** Provides a safe way to remove languages from Weblate.&lt;br /&gt;
** Supports dry-run mode for verification before actual deletion and generates a summary report.&lt;br /&gt;
&lt;br /&gt;
==== 2. Project Migration Tools ====&lt;br /&gt;
* The migration script patch was split to reduce its size.&lt;br /&gt;
** https://review.opendev.org/c/openstack/i18n/+/961075&lt;br /&gt;
* We track feature development using Launchpad blueprints.&lt;br /&gt;
** https://blueprints.launchpad.net/openstack-i18n/+spec/weblate-migration&lt;br /&gt;
&lt;br /&gt;
=== Testing and Integration ===&lt;br /&gt;
* Testing for Weblate integration is currently in the planning stage.&lt;br /&gt;
&lt;br /&gt;
=== Openinfra Forum in Korea ===&lt;br /&gt;
* Openstack Weblate Migration - Language Migration: ( https://forum.openinfra-kr.org/t/openstack-weblate-migration-language-migration/269 )&lt;br /&gt;
* OpenStack Weblate Migration - Migration Preparation: ( https://forum.openinfra-kr.org/t/openstack-weblate-migration-1-migration/277 )&lt;br /&gt;
* OpenStack Weblaet Migration - Project Migration: ( https://forum.openinfra-kr.org/t/openstack-weblate-migration-2-weblate-migration/278 )&lt;/div&gt;</summary>
		<author><name>Damekyung98</name></author>	</entry>

	<entry>
		<id>https://wiki.openstack.org/w/index.php?title=I18nTeam/Migration-to-weblate&amp;diff=186805</id>
		<title>I18nTeam/Migration-to-weblate</title>
		<link rel="alternate" type="text/html" href="https://wiki.openstack.org/w/index.php?title=I18nTeam/Migration-to-weblate&amp;diff=186805"/>
				<updated>2025-10-14T13:19:46Z</updated>
		
		<summary type="html">&lt;p&gt;Damekyung98: /* Who's joining the migration project */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Migration to weblate ==&lt;br /&gt;
&lt;br /&gt;
=== Who's joining the migration project ===&lt;br /&gt;
* Ian Y. Choi (Manager)&lt;br /&gt;
* Seongsoo Cho&lt;br /&gt;
* Kuemjong Jeong&lt;br /&gt;
* Nayeon Kim&lt;br /&gt;
* Sion Shin&lt;br /&gt;
* Gwangil Kim&lt;br /&gt;
* DaGyeong Kim&lt;br /&gt;
&lt;br /&gt;
=== Planning a weblate migration schedule ===&lt;br /&gt;
You can find more details about each task below.&lt;br /&gt;
&lt;br /&gt;
* Define the scope of target test projects&lt;br /&gt;
** All vs. a few projects (e.g., openstack-manuals, nova, i18n, horizon)&lt;br /&gt;
* Make Translation Infrastructure Scripts compatible with Weblate&lt;br /&gt;
** Weblate project creation with settings if the target project is not existing on the platform&lt;br /&gt;
*** (If it is not supported, Weblate projects will be created manually)&lt;br /&gt;
*** Testing needs to be performed locally, since the scripts are executed on 06:00 UTC daily.&lt;br /&gt;
* ZuuL Integration Test&lt;br /&gt;
** Determine when to test (e.g., Test methodology without waiting at 06:00 UTC?)&lt;br /&gt;
** Integration test with all translation target projects&lt;br /&gt;
* Making tools for extracting statistical data from Weblate&lt;br /&gt;
&lt;br /&gt;
=== Action Item ===&lt;br /&gt;
&lt;br /&gt;
==== Define the scope of target test projects ====&lt;br /&gt;
* Configure Weblate with the information set in Zanata.&lt;br /&gt;
* User information is not migrated.&lt;br /&gt;
&lt;br /&gt;
====  Make Translation Infrastructure Scripts compatible with Weblate ====&lt;br /&gt;
* WIP patch to support Weblate for https://opendev.org/openstack/openstack-zuul-jobs/src/branch/master/roles/prepare-zanata-client/files/&lt;br /&gt;
&lt;br /&gt;
====  Zuul Integration Test ====&lt;br /&gt;
Create and test a ZuuL Job that performs the following tasks&lt;br /&gt;
* Uploading translation files to Weblate when new changes are made to your project&lt;br /&gt;
* Upload translations from Weblate to your project every day at 06 UTC&lt;br /&gt;
&lt;br /&gt;
==== Making tools for extracting statistical data from Weblate ====&lt;br /&gt;
* weblate_userinfo.py : Done ( https://review.opendev.org/c/openstack/i18n/+/893361 ) &lt;br /&gt;
** 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.&lt;br /&gt;
* weblate_users.py : Done ( https://review.opendev.org/c/openstack/i18n/+/895763 ) &lt;br /&gt;
** Generates a list of Weblate language contributors.&lt;br /&gt;
* weblate_utils.py : Done ( https://review.opendev.org/c/openstack/i18n/+/896308 )&lt;br /&gt;
** Provides basic classes used by the other scripts&lt;br /&gt;
*** IniConfig class to get the key and url for the weblate server&lt;br /&gt;
*** WeblateRestService class that communicates with the Weblate REST API&lt;br /&gt;
* weblate_stats.py : Working ( https://review.opendev.org/c/openstack/i18n/+/896306 ) &lt;br /&gt;
** (describe the role of the tool )&lt;br /&gt;
* weblate_records.py : Working  ( https://review.opendev.org/c/openstack/i18n/+/896306 ) &lt;br /&gt;
** (describe the role of the tool )&lt;br /&gt;
&lt;br /&gt;
=== Etherpads ===&lt;br /&gt;
* [https://etherpad.opendev.org/p/vancouver-forum-i18n OpenInfra Summit Vancouver 2023 Forum]&lt;br /&gt;
* [https://etherpad.opendev.org/p/i18n-weblate i18n weblate migration]&lt;/div&gt;</summary>
		<author><name>Damekyung98</name></author>	</entry>

	<entry>
		<id>https://wiki.openstack.org/w/index.php?title=I18nTeam/Migration-to-weblate/migration-tools&amp;diff=186804</id>
		<title>I18nTeam/Migration-to-weblate/migration-tools</title>
		<link rel="alternate" type="text/html" href="https://wiki.openstack.org/w/index.php?title=I18nTeam/Migration-to-weblate/migration-tools&amp;diff=186804"/>
				<updated>2025-10-14T13:16:00Z</updated>
		
		<summary type="html">&lt;p&gt;Damekyung98: /* Migration Plan */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Migration Tools for Weblate ==&lt;br /&gt;
&lt;br /&gt;
=== Overview ===&lt;br /&gt;
* This page documents the ongoing migration from Zanata to Weblate for the OpenStack I18n project.&lt;br /&gt;
* The migration involves language migration tools and project migration tools.&lt;br /&gt;
&lt;br /&gt;
=== Who's joining the migration tools project ===&lt;br /&gt;
* Gwang-Il Kim&lt;br /&gt;
* DaGyeong Kim&lt;br /&gt;
&lt;br /&gt;
=== Migration Plan ===&lt;br /&gt;
&lt;br /&gt;
==== 1. Language Migration ====&lt;br /&gt;
* Remove all existing languages from Weblate that are not needed.&lt;br /&gt;
** Use delete_languages.py &lt;br /&gt;
* Recreate languages in Weblate to match the plural-forms and settings defined in Zanata.&lt;br /&gt;
** Use create_languages_weblate.py&lt;br /&gt;
&lt;br /&gt;
==== 2. Project Migration ====&lt;br /&gt;
&lt;br /&gt;
=====Set up the environment to migrate.=====&lt;br /&gt;
* Set up the environment by installing system and python dependencies.&lt;br /&gt;
* Configure the workspace folder as working directories.&lt;br /&gt;
&lt;br /&gt;
=====Generate POT files for project.=====&lt;br /&gt;
* Extract strings for translation from project.&lt;br /&gt;
* Generate template files(POT) for migration.&lt;br /&gt;
&lt;br /&gt;
=====Extract Translation files=====&lt;br /&gt;
* Pull all locale translation files(PO) from Zanata&lt;br /&gt;
&lt;br /&gt;
=====Create Weblate project=====&lt;br /&gt;
* Create a project in Weblate using the OpenStack project name.&lt;br /&gt;
&lt;br /&gt;
=====Create a global glossary=====&lt;br /&gt;
* Create a glossary component within the project for terminology consistency.&lt;br /&gt;
* There is only one glossary per project.&lt;br /&gt;
&lt;br /&gt;
=====Create Weblate Category =====&lt;br /&gt;
* Categories are collections of related components.&lt;br /&gt;
* Create categories to organize and display different versions.&lt;br /&gt;
&lt;br /&gt;
=====Create Weblate components.=====&lt;br /&gt;
* Component is a grouping of something for translation.&lt;br /&gt;
* Create component with pot files.&lt;br /&gt;
&lt;br /&gt;
* There is component attributes to use:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! key !! value&lt;br /&gt;
|-&lt;br /&gt;
| file format || po&lt;br /&gt;
|-&lt;br /&gt;
| filemask || locale/*/LC_MESSAGES/&amp;lt;component_name&amp;gt;.po&lt;br /&gt;
|-&lt;br /&gt;
| new_base || &amp;lt;component_name&amp;gt;.pot&lt;br /&gt;
|-&lt;br /&gt;
| source_language || en_US&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Note: The filemask depends on the project type.&lt;br /&gt;
&lt;br /&gt;
=====Create Weblate translation.=====&lt;br /&gt;
* Translations represent language-specific versions of components.&lt;br /&gt;
* Create translations for all locales that exist in Zanata.&lt;br /&gt;
* Ensure locale names match the language codes used by the Weblate server.&lt;br /&gt;
&lt;br /&gt;
=====Push translation files into Weblate translation.=====&lt;br /&gt;
* Upload the PO files extracted from Zanata to their corresponding translations in Weblate.&lt;br /&gt;
&lt;br /&gt;
=== Migration Tools ===&lt;br /&gt;
&lt;br /&gt;
==== 1. Language Migration Tools ====&lt;br /&gt;
* delete_languages.py  : Active ( https://review.opendev.org/c/openstack/i18n/+/961371/9 ) &lt;br /&gt;
** Automatically creates or updates Weblate language configurations to match the existing Zanata language set.&lt;br /&gt;
** Uses Weblate REST API to sync language codes, names, plural forms, and text directions in bulk.&lt;br /&gt;
* create_languages_weblate.py: Active ( https://review.opendev.org/c/openstack/i18n/+/961371/9 ) &lt;br /&gt;
** Provides a safe way to remove languages from Weblate.&lt;br /&gt;
** Supports dry-run mode for verification before actual deletion and generates a summary report.&lt;br /&gt;
&lt;br /&gt;
==== 2. Project Migration Tools ====&lt;br /&gt;
* The migration script patch was split to reduce its size. (closed)&lt;br /&gt;
** https://review.opendev.org/c/openstack/i18n/+/961075&lt;br /&gt;
* We track feature development using Launchpad blueprints. (active)&lt;br /&gt;
** https://blueprints.launchpad.net/openstack-i18n/+spec/weblate-migration&lt;br /&gt;
&lt;br /&gt;
=== Testing and Integration ===&lt;br /&gt;
* Testing for Weblate integration is currently in the planning stage.&lt;br /&gt;
&lt;br /&gt;
=== Openinfra Forum in Korea ===&lt;br /&gt;
* Openstack Weblate Migration - Language Migration: ( https://forum.openinfra-kr.org/t/openstack-weblate-migration-language-migration/269 )&lt;br /&gt;
* OpenStack Weblate Migration - Migration Preparation: ( https://forum.openinfra-kr.org/t/openstack-weblate-migration-1-migration/277 )&lt;br /&gt;
* OpenStack Weblaet Migration - Project Migration: ( https://forum.openinfra-kr.org/t/openstack-weblate-migration-2-weblate-migration/278 )&lt;/div&gt;</summary>
		<author><name>Damekyung98</name></author>	</entry>

	<entry>
		<id>https://wiki.openstack.org/w/index.php?title=I18nTeam/Migration-to-weblate/migration-tools&amp;diff=186803</id>
		<title>I18nTeam/Migration-to-weblate/migration-tools</title>
		<link rel="alternate" type="text/html" href="https://wiki.openstack.org/w/index.php?title=I18nTeam/Migration-to-weblate/migration-tools&amp;diff=186803"/>
				<updated>2025-10-14T13:14:41Z</updated>
		
		<summary type="html">&lt;p&gt;Damekyung98: /* 2. Project Migration Tools */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Migration Tools for Weblate ==&lt;br /&gt;
&lt;br /&gt;
=== Overview ===&lt;br /&gt;
* This page documents the ongoing migration from Zanata to Weblate for the OpenStack I18n project.&lt;br /&gt;
* The migration involves language migration tools and project migration tools.&lt;br /&gt;
&lt;br /&gt;
=== Who's joining the migration tools project ===&lt;br /&gt;
* Gwang-Il Kim&lt;br /&gt;
* DaGyeong Kim&lt;br /&gt;
&lt;br /&gt;
=== Migration Plan ===&lt;br /&gt;
&lt;br /&gt;
==== 1. Language Migration ====&lt;br /&gt;
* Remove all existing languages from Weblate that are not needed.&lt;br /&gt;
** Use delete_languages.py &lt;br /&gt;
* Recreate languages in Weblate to match the plural-forms and settings defined in Zanata.&lt;br /&gt;
** Use create_languages_weblate.py&lt;br /&gt;
&lt;br /&gt;
==== 2. Project Migration ====&lt;br /&gt;
&lt;br /&gt;
=====1. Set up the environment to migrate.=====&lt;br /&gt;
* Set up the environment by installing system and python dependencies.&lt;br /&gt;
* Configure the workspace folder as working directories.&lt;br /&gt;
&lt;br /&gt;
=====2. Generate POT files for project.=====&lt;br /&gt;
* Extract strings for translation from project.&lt;br /&gt;
* Generate template files(POT) for migration.&lt;br /&gt;
&lt;br /&gt;
=====3. Extract Translation files(PO) in Zanata.=====&lt;br /&gt;
* Pull all locale translation files from Zanata&lt;br /&gt;
&lt;br /&gt;
=====4. Create Weblate project=====&lt;br /&gt;
* Create a project in Weblate using the OpenStack project name.&lt;br /&gt;
&lt;br /&gt;
=====5. Create a global glossary=====&lt;br /&gt;
* Create a glossary component within the project for terminology consistency.&lt;br /&gt;
* There is only one glossary per project.&lt;br /&gt;
&lt;br /&gt;
=====6. Create Weblate Category =====&lt;br /&gt;
* Categories are collections of related components.&lt;br /&gt;
* Create categories to organize and display different versions.&lt;br /&gt;
&lt;br /&gt;
=====7. Create Weblate components.=====&lt;br /&gt;
* Component is a grouping of something for translation.&lt;br /&gt;
* Create component with pot files.&lt;br /&gt;
&lt;br /&gt;
* There is component attributes to use:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! key !! value&lt;br /&gt;
|-&lt;br /&gt;
| file format || po&lt;br /&gt;
|-&lt;br /&gt;
| filemask || locale/*/LC_MESSAGES/&amp;lt;component_name&amp;gt;.po&lt;br /&gt;
|-&lt;br /&gt;
| new_base || &amp;lt;component_name&amp;gt;.pot&lt;br /&gt;
|-&lt;br /&gt;
| source_language || en_US&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Note: The filemask depends on the project type.&lt;br /&gt;
&lt;br /&gt;
=====8. Create Weblate translation.=====&lt;br /&gt;
* Translations represent language-specific versions of components.&lt;br /&gt;
* Create translations for all locales that exist in Zanata.&lt;br /&gt;
* Ensure locale names match the language codes used by the Weblate server.&lt;br /&gt;
&lt;br /&gt;
=====9. Push translation files into Weblate translation.=====&lt;br /&gt;
* Upload the PO files extracted from Zanata to their corresponding translations in Weblate.&lt;br /&gt;
&lt;br /&gt;
=== Migration Tools ===&lt;br /&gt;
&lt;br /&gt;
==== 1. Language Migration Tools ====&lt;br /&gt;
* delete_languages.py  : Active ( https://review.opendev.org/c/openstack/i18n/+/961371/9 ) &lt;br /&gt;
** Automatically creates or updates Weblate language configurations to match the existing Zanata language set.&lt;br /&gt;
** Uses Weblate REST API to sync language codes, names, plural forms, and text directions in bulk.&lt;br /&gt;
* create_languages_weblate.py: Active ( https://review.opendev.org/c/openstack/i18n/+/961371/9 ) &lt;br /&gt;
** Provides a safe way to remove languages from Weblate.&lt;br /&gt;
** Supports dry-run mode for verification before actual deletion and generates a summary report.&lt;br /&gt;
&lt;br /&gt;
==== 2. Project Migration Tools ====&lt;br /&gt;
* The migration script patch was split to reduce its size. (closed)&lt;br /&gt;
** https://review.opendev.org/c/openstack/i18n/+/961075&lt;br /&gt;
* We track feature development using Launchpad blueprints. (active)&lt;br /&gt;
** https://blueprints.launchpad.net/openstack-i18n/+spec/weblate-migration&lt;br /&gt;
&lt;br /&gt;
=== Testing and Integration ===&lt;br /&gt;
* Testing for Weblate integration is currently in the planning stage.&lt;br /&gt;
&lt;br /&gt;
=== Openinfra Forum in Korea ===&lt;br /&gt;
* Openstack Weblate Migration - Language Migration: ( https://forum.openinfra-kr.org/t/openstack-weblate-migration-language-migration/269 )&lt;br /&gt;
* OpenStack Weblate Migration - Migration Preparation: ( https://forum.openinfra-kr.org/t/openstack-weblate-migration-1-migration/277 )&lt;br /&gt;
* OpenStack Weblaet Migration - Project Migration: ( https://forum.openinfra-kr.org/t/openstack-weblate-migration-2-weblate-migration/278 )&lt;/div&gt;</summary>
		<author><name>Damekyung98</name></author>	</entry>

	<entry>
		<id>https://wiki.openstack.org/w/index.php?title=I18nTeam/Migration-to-weblate/migration-tools&amp;diff=186802</id>
		<title>I18nTeam/Migration-to-weblate/migration-tools</title>
		<link rel="alternate" type="text/html" href="https://wiki.openstack.org/w/index.php?title=I18nTeam/Migration-to-weblate/migration-tools&amp;diff=186802"/>
				<updated>2025-10-14T13:12:42Z</updated>
		
		<summary type="html">&lt;p&gt;Damekyung98: /* Openinfra Forum in Korea */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Migration Tools for Weblate ==&lt;br /&gt;
&lt;br /&gt;
=== Overview ===&lt;br /&gt;
* This page documents the ongoing migration from Zanata to Weblate for the OpenStack I18n project.&lt;br /&gt;
* The migration involves language migration tools and project migration tools.&lt;br /&gt;
&lt;br /&gt;
=== Who's joining the migration tools project ===&lt;br /&gt;
* Gwang-Il Kim&lt;br /&gt;
* DaGyeong Kim&lt;br /&gt;
&lt;br /&gt;
=== Migration Plan ===&lt;br /&gt;
&lt;br /&gt;
==== 1. Language Migration ====&lt;br /&gt;
* Remove all existing languages from Weblate that are not needed.&lt;br /&gt;
** Use delete_languages.py &lt;br /&gt;
* Recreate languages in Weblate to match the plural-forms and settings defined in Zanata.&lt;br /&gt;
** Use create_languages_weblate.py&lt;br /&gt;
&lt;br /&gt;
==== 2. Project Migration ====&lt;br /&gt;
&lt;br /&gt;
=====1. Set up the environment to migrate.=====&lt;br /&gt;
* Set up the environment by installing system and python dependencies.&lt;br /&gt;
* Configure the workspace folder as working directories.&lt;br /&gt;
&lt;br /&gt;
=====2. Generate POT files for project.=====&lt;br /&gt;
* Extract strings for translation from project.&lt;br /&gt;
* Generate template files(POT) for migration.&lt;br /&gt;
&lt;br /&gt;
=====3. Extract Translation files(PO) in Zanata.=====&lt;br /&gt;
* Pull all locale translation files from Zanata&lt;br /&gt;
&lt;br /&gt;
=====4. Create Weblate project=====&lt;br /&gt;
* Create a project in Weblate using the OpenStack project name.&lt;br /&gt;
&lt;br /&gt;
=====5. Create a global glossary=====&lt;br /&gt;
* Create a glossary component within the project for terminology consistency.&lt;br /&gt;
* There is only one glossary per project.&lt;br /&gt;
&lt;br /&gt;
=====6. Create Weblate Category =====&lt;br /&gt;
* Categories are collections of related components.&lt;br /&gt;
* Create categories to organize and display different versions.&lt;br /&gt;
&lt;br /&gt;
=====7. Create Weblate components.=====&lt;br /&gt;
* Component is a grouping of something for translation.&lt;br /&gt;
* Create component with pot files.&lt;br /&gt;
&lt;br /&gt;
* There is component attributes to use:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! key !! value&lt;br /&gt;
|-&lt;br /&gt;
| file format || po&lt;br /&gt;
|-&lt;br /&gt;
| filemask || locale/*/LC_MESSAGES/&amp;lt;component_name&amp;gt;.po&lt;br /&gt;
|-&lt;br /&gt;
| new_base || &amp;lt;component_name&amp;gt;.pot&lt;br /&gt;
|-&lt;br /&gt;
| source_language || en_US&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Note: The filemask depends on the project type.&lt;br /&gt;
&lt;br /&gt;
=====8. Create Weblate translation.=====&lt;br /&gt;
* Translations represent language-specific versions of components.&lt;br /&gt;
* Create translations for all locales that exist in Zanata.&lt;br /&gt;
* Ensure locale names match the language codes used by the Weblate server.&lt;br /&gt;
&lt;br /&gt;
=====9. Push translation files into Weblate translation.=====&lt;br /&gt;
* Upload the PO files extracted from Zanata to their corresponding translations in Weblate.&lt;br /&gt;
&lt;br /&gt;
=== Migration Tools ===&lt;br /&gt;
&lt;br /&gt;
==== 1. Language Migration Tools ====&lt;br /&gt;
* delete_languages.py  : Active ( https://review.opendev.org/c/openstack/i18n/+/961371/9 ) &lt;br /&gt;
** Automatically creates or updates Weblate language configurations to match the existing Zanata language set.&lt;br /&gt;
** Uses Weblate REST API to sync language codes, names, plural forms, and text directions in bulk.&lt;br /&gt;
* create_languages_weblate.py: Active ( https://review.opendev.org/c/openstack/i18n/+/961371/9 ) &lt;br /&gt;
** Provides a safe way to remove languages from Weblate.&lt;br /&gt;
** Supports dry-run mode for verification before actual deletion and generates a summary report.&lt;br /&gt;
&lt;br /&gt;
==== 2. Project Migration Tools ====&lt;br /&gt;
* The migration script patch was split to reduce its size.&lt;br /&gt;
** https://review.opendev.org/c/openstack/i18n/+/961075&lt;br /&gt;
* We track feature development using Launchpad blueprints. &lt;br /&gt;
** https://blueprints.launchpad.net/openstack-i18n/+spec/weblate-migration&lt;br /&gt;
&lt;br /&gt;
=== Testing and Integration ===&lt;br /&gt;
* Testing for Weblate integration is currently in the planning stage.&lt;br /&gt;
&lt;br /&gt;
=== Openinfra Forum in Korea ===&lt;br /&gt;
* Openstack Weblate Migration - Language Migration: ( https://forum.openinfra-kr.org/t/openstack-weblate-migration-language-migration/269 )&lt;br /&gt;
* OpenStack Weblate Migration - Migration Preparation: ( https://forum.openinfra-kr.org/t/openstack-weblate-migration-1-migration/277 )&lt;br /&gt;
* OpenStack Weblaet Migration - Project Migration: ( https://forum.openinfra-kr.org/t/openstack-weblate-migration-2-weblate-migration/278 )&lt;/div&gt;</summary>
		<author><name>Damekyung98</name></author>	</entry>

	<entry>
		<id>https://wiki.openstack.org/w/index.php?title=I18nTeam/Migration-to-weblate/migration-tools&amp;diff=186801</id>
		<title>I18nTeam/Migration-to-weblate/migration-tools</title>
		<link rel="alternate" type="text/html" href="https://wiki.openstack.org/w/index.php?title=I18nTeam/Migration-to-weblate/migration-tools&amp;diff=186801"/>
				<updated>2025-10-14T13:10:07Z</updated>
		
		<summary type="html">&lt;p&gt;Damekyung98: /* 2. Project Migration Tools */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Migration Tools for Weblate ==&lt;br /&gt;
&lt;br /&gt;
=== Overview ===&lt;br /&gt;
* This page documents the ongoing migration from Zanata to Weblate for the OpenStack I18n project.&lt;br /&gt;
* The migration involves language migration tools and project migration tools.&lt;br /&gt;
&lt;br /&gt;
=== Who's joining the migration tools project ===&lt;br /&gt;
* Gwang-Il Kim&lt;br /&gt;
* DaGyeong Kim&lt;br /&gt;
&lt;br /&gt;
=== Migration Plan ===&lt;br /&gt;
&lt;br /&gt;
==== 1. Language Migration ====&lt;br /&gt;
* Remove all existing languages from Weblate that are not needed.&lt;br /&gt;
** Use delete_languages.py &lt;br /&gt;
* Recreate languages in Weblate to match the plural-forms and settings defined in Zanata.&lt;br /&gt;
** Use create_languages_weblate.py&lt;br /&gt;
&lt;br /&gt;
==== 2. Project Migration ====&lt;br /&gt;
&lt;br /&gt;
=====1. Set up the environment to migrate.=====&lt;br /&gt;
* Set up the environment by installing system and python dependencies.&lt;br /&gt;
* Configure the workspace folder as working directories.&lt;br /&gt;
&lt;br /&gt;
=====2. Generate POT files for project.=====&lt;br /&gt;
* Extract strings for translation from project.&lt;br /&gt;
* Generate template files(POT) for migration.&lt;br /&gt;
&lt;br /&gt;
=====3. Extract Translation files(PO) in Zanata.=====&lt;br /&gt;
* Pull all locale translation files from Zanata&lt;br /&gt;
&lt;br /&gt;
=====4. Create Weblate project=====&lt;br /&gt;
* Create a project in Weblate using the OpenStack project name.&lt;br /&gt;
&lt;br /&gt;
=====5. Create a global glossary=====&lt;br /&gt;
* Create a glossary component within the project for terminology consistency.&lt;br /&gt;
* There is only one glossary per project.&lt;br /&gt;
&lt;br /&gt;
=====6. Create Weblate Category =====&lt;br /&gt;
* Categories are collections of related components.&lt;br /&gt;
* Create categories to organize and display different versions.&lt;br /&gt;
&lt;br /&gt;
=====7. Create Weblate components.=====&lt;br /&gt;
* Component is a grouping of something for translation.&lt;br /&gt;
* Create component with pot files.&lt;br /&gt;
&lt;br /&gt;
* There is component attributes to use:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! key !! value&lt;br /&gt;
|-&lt;br /&gt;
| file format || po&lt;br /&gt;
|-&lt;br /&gt;
| filemask || locale/*/LC_MESSAGES/&amp;lt;component_name&amp;gt;.po&lt;br /&gt;
|-&lt;br /&gt;
| new_base || &amp;lt;component_name&amp;gt;.pot&lt;br /&gt;
|-&lt;br /&gt;
| source_language || en_US&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Note: The filemask depends on the project type.&lt;br /&gt;
&lt;br /&gt;
=====8. Create Weblate translation.=====&lt;br /&gt;
* Translations represent language-specific versions of components.&lt;br /&gt;
* Create translations for all locales that exist in Zanata.&lt;br /&gt;
* Ensure locale names match the language codes used by the Weblate server.&lt;br /&gt;
&lt;br /&gt;
=====9. Push translation files into Weblate translation.=====&lt;br /&gt;
* Upload the PO files extracted from Zanata to their corresponding translations in Weblate.&lt;br /&gt;
&lt;br /&gt;
=== Migration Tools ===&lt;br /&gt;
&lt;br /&gt;
==== 1. Language Migration Tools ====&lt;br /&gt;
* delete_languages.py  : Active ( https://review.opendev.org/c/openstack/i18n/+/961371/9 ) &lt;br /&gt;
** Automatically creates or updates Weblate language configurations to match the existing Zanata language set.&lt;br /&gt;
** Uses Weblate REST API to sync language codes, names, plural forms, and text directions in bulk.&lt;br /&gt;
* create_languages_weblate.py: Active ( https://review.opendev.org/c/openstack/i18n/+/961371/9 ) &lt;br /&gt;
** Provides a safe way to remove languages from Weblate.&lt;br /&gt;
** Supports dry-run mode for verification before actual deletion and generates a summary report.&lt;br /&gt;
&lt;br /&gt;
==== 2. Project Migration Tools ====&lt;br /&gt;
* The migration script patch was split to reduce its size.&lt;br /&gt;
** https://review.opendev.org/c/openstack/i18n/+/961075&lt;br /&gt;
* We track feature development using Launchpad blueprints. &lt;br /&gt;
** https://blueprints.launchpad.net/openstack-i18n/+spec/weblate-migration&lt;br /&gt;
&lt;br /&gt;
=== Testing and Integration ===&lt;br /&gt;
* Testing for Weblate integration is currently in the planning stage.&lt;br /&gt;
&lt;br /&gt;
=== Openinfra Forum in Korea ===&lt;br /&gt;
* Openstack Weblate Migration - Language Migration: ( https://forum.openinfra-kr.org/t/openstack-weblate-migration-language-migration/269 )&lt;/div&gt;</summary>
		<author><name>Damekyung98</name></author>	</entry>

	<entry>
		<id>https://wiki.openstack.org/w/index.php?title=I18nTeam/Migration-to-weblate/migration-tools&amp;diff=186800</id>
		<title>I18nTeam/Migration-to-weblate/migration-tools</title>
		<link rel="alternate" type="text/html" href="https://wiki.openstack.org/w/index.php?title=I18nTeam/Migration-to-weblate/migration-tools&amp;diff=186800"/>
				<updated>2025-10-14T13:06:30Z</updated>
		
		<summary type="html">&lt;p&gt;Damekyung98: /* 2. Project Migration */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Migration Tools for Weblate ==&lt;br /&gt;
&lt;br /&gt;
=== Overview ===&lt;br /&gt;
* This page documents the ongoing migration from Zanata to Weblate for the OpenStack I18n project.&lt;br /&gt;
* The migration involves language migration tools and project migration tools.&lt;br /&gt;
&lt;br /&gt;
=== Who's joining the migration tools project ===&lt;br /&gt;
* Gwang-Il Kim&lt;br /&gt;
* DaGyeong Kim&lt;br /&gt;
&lt;br /&gt;
=== Migration Plan ===&lt;br /&gt;
&lt;br /&gt;
==== 1. Language Migration ====&lt;br /&gt;
* Remove all existing languages from Weblate that are not needed.&lt;br /&gt;
** Use delete_languages.py &lt;br /&gt;
* Recreate languages in Weblate to match the plural-forms and settings defined in Zanata.&lt;br /&gt;
** Use create_languages_weblate.py&lt;br /&gt;
&lt;br /&gt;
==== 2. Project Migration ====&lt;br /&gt;
&lt;br /&gt;
=====1. Set up the environment to migrate.=====&lt;br /&gt;
* Set up the environment by installing system and python dependencies.&lt;br /&gt;
* Configure the workspace folder as working directories.&lt;br /&gt;
&lt;br /&gt;
=====2. Generate POT files for project.=====&lt;br /&gt;
* Extract strings for translation from project.&lt;br /&gt;
* Generate template files(POT) for migration.&lt;br /&gt;
&lt;br /&gt;
=====3. Extract Translation files(PO) in Zanata.=====&lt;br /&gt;
* Pull all locale translation files from Zanata&lt;br /&gt;
&lt;br /&gt;
=====4. Create Weblate project=====&lt;br /&gt;
* Create a project in Weblate using the OpenStack project name.&lt;br /&gt;
&lt;br /&gt;
=====5. Create a global glossary=====&lt;br /&gt;
* Create a glossary component within the project for terminology consistency.&lt;br /&gt;
* There is only one glossary per project.&lt;br /&gt;
&lt;br /&gt;
=====6. Create Weblate Category =====&lt;br /&gt;
* Categories are collections of related components.&lt;br /&gt;
* Create categories to organize and display different versions.&lt;br /&gt;
&lt;br /&gt;
=====7. Create Weblate components.=====&lt;br /&gt;
* Component is a grouping of something for translation.&lt;br /&gt;
* Create component with pot files.&lt;br /&gt;
&lt;br /&gt;
* There is component attributes to use:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! key !! value&lt;br /&gt;
|-&lt;br /&gt;
| file format || po&lt;br /&gt;
|-&lt;br /&gt;
| filemask || locale/*/LC_MESSAGES/&amp;lt;component_name&amp;gt;.po&lt;br /&gt;
|-&lt;br /&gt;
| new_base || &amp;lt;component_name&amp;gt;.pot&lt;br /&gt;
|-&lt;br /&gt;
| source_language || en_US&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Note: The filemask depends on the project type.&lt;br /&gt;
&lt;br /&gt;
=====8. Create Weblate translation.=====&lt;br /&gt;
* Translations represent language-specific versions of components.&lt;br /&gt;
* Create translations for all locales that exist in Zanata.&lt;br /&gt;
* Ensure locale names match the language codes used by the Weblate server.&lt;br /&gt;
&lt;br /&gt;
=====9. Push translation files into Weblate translation.=====&lt;br /&gt;
* Upload the PO files extracted from Zanata to their corresponding translations in Weblate.&lt;br /&gt;
&lt;br /&gt;
=== Migration Tools ===&lt;br /&gt;
&lt;br /&gt;
==== 1. Language Migration Tools ====&lt;br /&gt;
* delete_languages.py  : Active ( https://review.opendev.org/c/openstack/i18n/+/961371/9 ) &lt;br /&gt;
** Automatically creates or updates Weblate language configurations to match the existing Zanata language set.&lt;br /&gt;
** Uses Weblate REST API to sync language codes, names, plural forms, and text directions in bulk.&lt;br /&gt;
* create_languages_weblate.py: Active ( https://review.opendev.org/c/openstack/i18n/+/961371/9 ) &lt;br /&gt;
** Provides a safe way to remove languages from Weblate.&lt;br /&gt;
** Supports dry-run mode for verification before actual deletion and generates a summary report.&lt;br /&gt;
&lt;br /&gt;
==== 2. Project Migration Tools ====&lt;br /&gt;
&lt;br /&gt;
=== Testing and Integration ===&lt;br /&gt;
* Testing for Weblate integration is currently in the planning stage.&lt;br /&gt;
&lt;br /&gt;
=== Openinfra Forum in Korea ===&lt;br /&gt;
* Openstack Weblate Migration - Language Migration: ( https://forum.openinfra-kr.org/t/openstack-weblate-migration-language-migration/269 )&lt;/div&gt;</summary>
		<author><name>Damekyung98</name></author>	</entry>

	<entry>
		<id>https://wiki.openstack.org/w/index.php?title=I18nTeam/Migration-to-weblate/migration-tools&amp;diff=186799</id>
		<title>I18nTeam/Migration-to-weblate/migration-tools</title>
		<link rel="alternate" type="text/html" href="https://wiki.openstack.org/w/index.php?title=I18nTeam/Migration-to-weblate/migration-tools&amp;diff=186799"/>
				<updated>2025-10-14T12:55:40Z</updated>
		
		<summary type="html">&lt;p&gt;Damekyung98: /* 2. Project Migration */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Migration Tools for Weblate ==&lt;br /&gt;
&lt;br /&gt;
=== Overview ===&lt;br /&gt;
* This page documents the ongoing migration from Zanata to Weblate for the OpenStack I18n project.&lt;br /&gt;
* The migration involves language migration tools and project migration tools.&lt;br /&gt;
&lt;br /&gt;
=== Who's joining the migration tools project ===&lt;br /&gt;
* Gwang-Il Kim&lt;br /&gt;
* DaGyeong Kim&lt;br /&gt;
&lt;br /&gt;
=== Migration Plan ===&lt;br /&gt;
&lt;br /&gt;
==== 1. Language Migration ====&lt;br /&gt;
* Remove all existing languages from Weblate that are not needed.&lt;br /&gt;
** Use delete_languages.py &lt;br /&gt;
* Recreate languages in Weblate to match the plural-forms and settings defined in Zanata.&lt;br /&gt;
** Use create_languages_weblate.py&lt;br /&gt;
&lt;br /&gt;
==== 2. Project Migration ====&lt;br /&gt;
&lt;br /&gt;
=====1. Set up the environment to migrate.=====&lt;br /&gt;
* Set up the environment by installing system and python dependencies.&lt;br /&gt;
* Configure the workspace folder as working directories.&lt;br /&gt;
&lt;br /&gt;
=====2. Generate POT files for project.=====&lt;br /&gt;
* Extract strings for translation from project.&lt;br /&gt;
* Generate template files(POT) for migration.&lt;br /&gt;
&lt;br /&gt;
=====3. Extract Translation files(PO) in Zanata.=====&lt;br /&gt;
* Pull all locale translation files from Zanata&lt;br /&gt;
&lt;br /&gt;
=====4. Create Weblate project=====&lt;br /&gt;
* Create a project in Weblate using the OpenStack project name.&lt;br /&gt;
&lt;br /&gt;
=====5. Create a global glossary=====&lt;br /&gt;
* Create a glossary component within the project for terminology consistency.&lt;br /&gt;
* There is only one glossary per project.&lt;br /&gt;
&lt;br /&gt;
=====6. Create Weblate Category =====&lt;br /&gt;
* Categories are collections of related components.&lt;br /&gt;
* Create categories to organize and display different versions.&lt;br /&gt;
&lt;br /&gt;
=====7. Create Weblate components.=====&lt;br /&gt;
- Component is a grouping of something for translation.&lt;br /&gt;
- Create component with pot files.&lt;br /&gt;
&lt;br /&gt;
=====8. Create Weblate translation.=====&lt;br /&gt;
* Translations represent language-specific versions of components.&lt;br /&gt;
* Create translations for all locales that exist in Zanata.&lt;br /&gt;
* Ensure locale names match the language codes used by the Weblate server.&lt;br /&gt;
&lt;br /&gt;
=====9. Push translation files into Weblate translation.=====&lt;br /&gt;
* Upload the PO files extracted from Zanata to their corresponding translations in Weblate.&lt;br /&gt;
&lt;br /&gt;
=== Migration Tools ===&lt;br /&gt;
&lt;br /&gt;
==== 1. Language Migration Tools ====&lt;br /&gt;
* delete_languages.py  : Active ( https://review.opendev.org/c/openstack/i18n/+/961371/9 ) &lt;br /&gt;
** Automatically creates or updates Weblate language configurations to match the existing Zanata language set.&lt;br /&gt;
** Uses Weblate REST API to sync language codes, names, plural forms, and text directions in bulk.&lt;br /&gt;
* create_languages_weblate.py: Active ( https://review.opendev.org/c/openstack/i18n/+/961371/9 ) &lt;br /&gt;
** Provides a safe way to remove languages from Weblate.&lt;br /&gt;
** Supports dry-run mode for verification before actual deletion and generates a summary report.&lt;br /&gt;
&lt;br /&gt;
==== 2. Project Migration Tools ====&lt;br /&gt;
&lt;br /&gt;
=== Testing and Integration ===&lt;br /&gt;
* Testing for Weblate integration is currently in the planning stage.&lt;br /&gt;
&lt;br /&gt;
=== Openinfra Forum in Korea ===&lt;br /&gt;
* Openstack Weblate Migration - Language Migration: ( https://forum.openinfra-kr.org/t/openstack-weblate-migration-language-migration/269 )&lt;/div&gt;</summary>
		<author><name>Damekyung98</name></author>	</entry>

	<entry>
		<id>https://wiki.openstack.org/w/index.php?title=I18nTeam/Migration-to-weblate/migration-tools&amp;diff=186798</id>
		<title>I18nTeam/Migration-to-weblate/migration-tools</title>
		<link rel="alternate" type="text/html" href="https://wiki.openstack.org/w/index.php?title=I18nTeam/Migration-to-weblate/migration-tools&amp;diff=186798"/>
				<updated>2025-10-14T12:31:34Z</updated>
		
		<summary type="html">&lt;p&gt;Damekyung98: /* 2. Project Migration */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Migration Tools for Weblate ==&lt;br /&gt;
&lt;br /&gt;
=== Overview ===&lt;br /&gt;
* This page documents the ongoing migration from Zanata to Weblate for the OpenStack I18n project.&lt;br /&gt;
* The migration involves language migration tools and project migration tools.&lt;br /&gt;
&lt;br /&gt;
=== Who's joining the migration tools project ===&lt;br /&gt;
* Gwang-Il Kim&lt;br /&gt;
* DaGyeong Kim&lt;br /&gt;
&lt;br /&gt;
=== Migration Plan ===&lt;br /&gt;
&lt;br /&gt;
==== 1. Language Migration ====&lt;br /&gt;
* Remove all existing languages from Weblate that are not needed.&lt;br /&gt;
** Use delete_languages.py &lt;br /&gt;
* Recreate languages in Weblate to match the plural-forms and settings defined in Zanata.&lt;br /&gt;
** Use create_languages_weblate.py&lt;br /&gt;
&lt;br /&gt;
==== 2. Project Migration ====&lt;br /&gt;
1. Set up the environment to migrate.&lt;br /&gt;
2. Generate POT files for project.&lt;br /&gt;
3. Extract Translation files(PO) in Zanata.&lt;br /&gt;
4. Create Weblate project.&lt;br /&gt;
5. Create Weblate components.&lt;br /&gt;
6. Create Weblate translation.&lt;br /&gt;
7. Push translation files into Weblate translation.&lt;br /&gt;
&lt;br /&gt;
=== Migration Tools ===&lt;br /&gt;
&lt;br /&gt;
==== 1. Language Migration Tools ====&lt;br /&gt;
* delete_languages.py  : Active ( https://review.opendev.org/c/openstack/i18n/+/961371/9 ) &lt;br /&gt;
** Automatically creates or updates Weblate language configurations to match the existing Zanata language set.&lt;br /&gt;
** Uses Weblate REST API to sync language codes, names, plural forms, and text directions in bulk.&lt;br /&gt;
* create_languages_weblate.py: Active ( https://review.opendev.org/c/openstack/i18n/+/961371/9 ) &lt;br /&gt;
** Provides a safe way to remove languages from Weblate.&lt;br /&gt;
** Supports dry-run mode for verification before actual deletion and generates a summary report.&lt;br /&gt;
&lt;br /&gt;
==== 2. Project Migration Tools ====&lt;br /&gt;
&lt;br /&gt;
=== Testing and Integration ===&lt;br /&gt;
* Testing for Weblate integration is currently in the planning stage.&lt;br /&gt;
&lt;br /&gt;
=== Openinfra Forum in Korea ===&lt;br /&gt;
* Openstack Weblate Migration - Language Migration: ( https://forum.openinfra-kr.org/t/openstack-weblate-migration-language-migration/269 )&lt;/div&gt;</summary>
		<author><name>Damekyung98</name></author>	</entry>

	<entry>
		<id>https://wiki.openstack.org/w/index.php?title=I18nTeam/Migration-to-weblate/migration-tools&amp;diff=186797</id>
		<title>I18nTeam/Migration-to-weblate/migration-tools</title>
		<link rel="alternate" type="text/html" href="https://wiki.openstack.org/w/index.php?title=I18nTeam/Migration-to-weblate/migration-tools&amp;diff=186797"/>
				<updated>2025-10-14T12:29:30Z</updated>
		
		<summary type="html">&lt;p&gt;Damekyung98: /* Migration Plan */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Migration Tools for Weblate ==&lt;br /&gt;
&lt;br /&gt;
=== Overview ===&lt;br /&gt;
* This page documents the ongoing migration from Zanata to Weblate for the OpenStack I18n project.&lt;br /&gt;
* The migration involves language migration tools and project migration tools.&lt;br /&gt;
&lt;br /&gt;
=== Who's joining the migration tools project ===&lt;br /&gt;
* Gwang-Il Kim&lt;br /&gt;
* DaGyeong Kim&lt;br /&gt;
&lt;br /&gt;
=== Migration Plan ===&lt;br /&gt;
&lt;br /&gt;
==== 1. Language Migration ====&lt;br /&gt;
* Remove all existing languages from Weblate that are not needed.&lt;br /&gt;
** Use delete_languages.py &lt;br /&gt;
* Recreate languages in Weblate to match the plural-forms and settings defined in Zanata.&lt;br /&gt;
** Use create_languages_weblate.py&lt;br /&gt;
&lt;br /&gt;
==== 2. Project Migration ====&lt;br /&gt;
1. Set up the environment to migrate.&lt;br /&gt;
* patch: https://review.opendev.org/c/openstack/i18n/+/963758&lt;br /&gt;
2. Generate POT files for project&lt;br /&gt;
3. Extract Translation files(PO) in Zanata.&lt;br /&gt;
4. Create Weblate project.&lt;br /&gt;
5. Create Weblate components.&lt;br /&gt;
6. Create Weblate translation.&lt;br /&gt;
7. Push translation files into Weblate translation.&lt;br /&gt;
&lt;br /&gt;
=== Migration Tools ===&lt;br /&gt;
&lt;br /&gt;
==== 1. Language Migration Tools ====&lt;br /&gt;
* delete_languages.py  : Active ( https://review.opendev.org/c/openstack/i18n/+/961371/9 ) &lt;br /&gt;
** Automatically creates or updates Weblate language configurations to match the existing Zanata language set.&lt;br /&gt;
** Uses Weblate REST API to sync language codes, names, plural forms, and text directions in bulk.&lt;br /&gt;
* create_languages_weblate.py: Active ( https://review.opendev.org/c/openstack/i18n/+/961371/9 ) &lt;br /&gt;
** Provides a safe way to remove languages from Weblate.&lt;br /&gt;
** Supports dry-run mode for verification before actual deletion and generates a summary report.&lt;br /&gt;
&lt;br /&gt;
==== 2. Project Migration Tools ====&lt;br /&gt;
&lt;br /&gt;
=== Testing and Integration ===&lt;br /&gt;
* Testing for Weblate integration is currently in the planning stage.&lt;br /&gt;
&lt;br /&gt;
=== Openinfra Forum in Korea ===&lt;br /&gt;
* Openstack Weblate Migration - Language Migration: ( https://forum.openinfra-kr.org/t/openstack-weblate-migration-language-migration/269 )&lt;/div&gt;</summary>
		<author><name>Damekyung98</name></author>	</entry>

	<entry>
		<id>https://wiki.openstack.org/w/index.php?title=I18nTeam/Migration-to-weblate/migration-tools&amp;diff=186796</id>
		<title>I18nTeam/Migration-to-weblate/migration-tools</title>
		<link rel="alternate" type="text/html" href="https://wiki.openstack.org/w/index.php?title=I18nTeam/Migration-to-weblate/migration-tools&amp;diff=186796"/>
				<updated>2025-10-14T12:26:08Z</updated>
		
		<summary type="html">&lt;p&gt;Damekyung98: /* Migration Tools */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Migration Tools for Weblate ==&lt;br /&gt;
&lt;br /&gt;
=== Overview ===&lt;br /&gt;
* This page documents the ongoing migration from Zanata to Weblate for the OpenStack I18n project.&lt;br /&gt;
* The migration involves language migration tools and project migration tools.&lt;br /&gt;
&lt;br /&gt;
=== Who's joining the migration tools project ===&lt;br /&gt;
* Gwang-Il Kim&lt;br /&gt;
* DaGyeong Kim&lt;br /&gt;
&lt;br /&gt;
=== Migration Plan ===&lt;br /&gt;
&lt;br /&gt;
==== 1. Language Migration ====&lt;br /&gt;
* Remove all existing languages from Weblate that are not needed.&lt;br /&gt;
** Use delete_languages.py &lt;br /&gt;
* Recreate languages in Weblate to match the plural-forms and settings defined in Zanata.&lt;br /&gt;
** Use create_languages_weblate.py&lt;br /&gt;
&lt;br /&gt;
=== Migration Tools ===&lt;br /&gt;
&lt;br /&gt;
==== 1. Language Migration Tools ====&lt;br /&gt;
* delete_languages.py  : Active ( https://review.opendev.org/c/openstack/i18n/+/961371/9 ) &lt;br /&gt;
** Automatically creates or updates Weblate language configurations to match the existing Zanata language set.&lt;br /&gt;
** Uses Weblate REST API to sync language codes, names, plural forms, and text directions in bulk.&lt;br /&gt;
* create_languages_weblate.py: Active ( https://review.opendev.org/c/openstack/i18n/+/961371/9 ) &lt;br /&gt;
** Provides a safe way to remove languages from Weblate.&lt;br /&gt;
** Supports dry-run mode for verification before actual deletion and generates a summary report.&lt;br /&gt;
&lt;br /&gt;
==== 2. Project Migration Tools ====&lt;br /&gt;
&lt;br /&gt;
=== Testing and Integration ===&lt;br /&gt;
* Testing for Weblate integration is currently in the planning stage.&lt;br /&gt;
&lt;br /&gt;
=== Openinfra Forum in Korea ===&lt;br /&gt;
* Openstack Weblate Migration - Language Migration: ( https://forum.openinfra-kr.org/t/openstack-weblate-migration-language-migration/269 )&lt;/div&gt;</summary>
		<author><name>Damekyung98</name></author>	</entry>

	<entry>
		<id>https://wiki.openstack.org/w/index.php?title=I18nTeam/Migration-to-weblate/migration-tools&amp;diff=186795</id>
		<title>I18nTeam/Migration-to-weblate/migration-tools</title>
		<link rel="alternate" type="text/html" href="https://wiki.openstack.org/w/index.php?title=I18nTeam/Migration-to-weblate/migration-tools&amp;diff=186795"/>
				<updated>2025-10-14T12:25:14Z</updated>
		
		<summary type="html">&lt;p&gt;Damekyung98: /* Migration Plan */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Migration Tools for Weblate ==&lt;br /&gt;
&lt;br /&gt;
=== Overview ===&lt;br /&gt;
* This page documents the ongoing migration from Zanata to Weblate for the OpenStack I18n project.&lt;br /&gt;
* The migration involves language migration tools and project migration tools.&lt;br /&gt;
&lt;br /&gt;
=== Who's joining the migration tools project ===&lt;br /&gt;
* Gwang-Il Kim&lt;br /&gt;
* DaGyeong Kim&lt;br /&gt;
&lt;br /&gt;
=== Migration Plan ===&lt;br /&gt;
&lt;br /&gt;
==== 1. Language Migration ====&lt;br /&gt;
* Remove all existing languages from Weblate that are not needed.&lt;br /&gt;
** Use delete_languages.py &lt;br /&gt;
* Recreate languages in Weblate to match the plural-forms and settings defined in Zanata.&lt;br /&gt;
** Use create_languages_weblate.py&lt;br /&gt;
&lt;br /&gt;
=== Migration Tools ===&lt;br /&gt;
&lt;br /&gt;
==== 1. Language Migration Tools ====&lt;br /&gt;
* delete_languages.py  : Active ( https://review.opendev.org/c/openstack/i18n/+/961371/9 ) &lt;br /&gt;
** Automatically creates or updates Weblate language configurations to match the existing Zanata language set.&lt;br /&gt;
** Uses Weblate REST API to sync language codes, names, plural forms, and text directions in bulk.&lt;br /&gt;
* create_languages_weblate.py: Active ( https://review.opendev.org/c/openstack/i18n/+/961371/9 ) &lt;br /&gt;
** Provides a safe way to remove languages from Weblate.&lt;br /&gt;
** Supports dry-run mode for verification before actual deletion and generates a summary report.&lt;br /&gt;
==== 2. Project Migration Tools ====&lt;br /&gt;
&lt;br /&gt;
=== Testing and Integration ===&lt;br /&gt;
* Testing for Weblate integration is currently in the planning stage.&lt;br /&gt;
&lt;br /&gt;
=== Openinfra Forum in Korea ===&lt;br /&gt;
* Openstack Weblate Migration - Language Migration: ( https://forum.openinfra-kr.org/t/openstack-weblate-migration-language-migration/269 )&lt;/div&gt;</summary>
		<author><name>Damekyung98</name></author>	</entry>

	<entry>
		<id>https://wiki.openstack.org/w/index.php?title=I18nTeam/Migration-to-weblate/migration-tools&amp;diff=186794</id>
		<title>I18nTeam/Migration-to-weblate/migration-tools</title>
		<link rel="alternate" type="text/html" href="https://wiki.openstack.org/w/index.php?title=I18nTeam/Migration-to-weblate/migration-tools&amp;diff=186794"/>
				<updated>2025-10-14T11:49:07Z</updated>
		
		<summary type="html">&lt;p&gt;Damekyung98: /* Who's joining the migration tools project */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Migration Tools for Weblate ==&lt;br /&gt;
&lt;br /&gt;
=== Overview ===&lt;br /&gt;
* This page documents the ongoing migration from Zanata to Weblate for the OpenStack I18n project.&lt;br /&gt;
* The migration involves language migration tools and project migration tools.&lt;br /&gt;
&lt;br /&gt;
=== Who's joining the migration tools project ===&lt;br /&gt;
* Gwang-Il Kim&lt;br /&gt;
* DaGyeong Kim&lt;br /&gt;
&lt;br /&gt;
=== Migration Plan ===&lt;br /&gt;
* Remove all existing languages from Weblate that are not needed.&lt;br /&gt;
** Use delete_languages.py &lt;br /&gt;
* Recreate languages in Weblate to match the plural-forms and settings defined in Zanata.&lt;br /&gt;
** Use create_languages_weblate.py&lt;br /&gt;
&lt;br /&gt;
=== Migration Tools ===&lt;br /&gt;
&lt;br /&gt;
==== 1. Language Migration Tools ====&lt;br /&gt;
* delete_languages.py  : Active ( https://review.opendev.org/c/openstack/i18n/+/961371/9 ) &lt;br /&gt;
** Automatically creates or updates Weblate language configurations to match the existing Zanata language set.&lt;br /&gt;
** Uses Weblate REST API to sync language codes, names, plural forms, and text directions in bulk.&lt;br /&gt;
* create_languages_weblate.py: Active ( https://review.opendev.org/c/openstack/i18n/+/961371/9 ) &lt;br /&gt;
** Provides a safe way to remove languages from Weblate.&lt;br /&gt;
** Supports dry-run mode for verification before actual deletion and generates a summary report.&lt;br /&gt;
==== 2. Project Migration Tools ====&lt;br /&gt;
&lt;br /&gt;
=== Testing and Integration ===&lt;br /&gt;
* Testing for Weblate integration is currently in the planning stage.&lt;br /&gt;
&lt;br /&gt;
=== Openinfra Forum in Korea ===&lt;br /&gt;
* Openstack Weblate Migration - Language Migration: ( https://forum.openinfra-kr.org/t/openstack-weblate-migration-language-migration/269 )&lt;/div&gt;</summary>
		<author><name>Damekyung98</name></author>	</entry>

	</feed>