@@ -13,7 +13,6 @@ See https://github.com/WeblateOrg/language-data
1313import csv
1414import json
1515import re
16- import subprocess
1716from itertools import chain
1817
1918SPLIT_RE = re .compile (
@@ -35,19 +34,25 @@ https://github.com/WeblateOrg/language-data
3534"""
3635# pylint: disable=line-too-long,too-many-lines
3736
38-
3937'''
4038
4139TEMPLATE = """ (
42- ' {0}' ,
40+ " {0}" ,
4341 # Translators: Language name for ISO code "{0}". The parenthesis clarifies
4442 # variant of the language. It could contain a region, age (Old, Middle, ...)
4543 # or other variant.
46- _(' {1}' ),
44+ _(" {1}" ),
4745 {2},
48- ' {3}' ,
46+ " {3}" ,
4947 ),
5048"""
49+ TYPE_HINT = "tuple[tuple[str, str, int, str], ...]"
50+
51+
52+ def escape (value : str ) -> str :
53+ """Escape string for use in template."""
54+ return value .replace ('"' , r"\"" )
55+
5156
5257# Read languages
5358with open ("languages.csv" ) as csvfile :
@@ -150,62 +155,54 @@ with open("weblate_language_data/languages.py", "w") as output:
150155 output .write (HEADER )
151156 output .write ("from .utils import gettext_noop as _\n \n " )
152157 output .write ("# Language definitions\n " )
153- output .write ("LANGUAGES = (\n " )
158+ output .write (f "LANGUAGES: { TYPE_HINT } = (\n " )
154159 for row in LANGUAGES :
155- output .write (
156- TEMPLATE .format (row [0 ], row [1 ].replace ("'" , "\\ '" ), row [2 ], row [3 ])
157- )
160+ output .write (TEMPLATE .format (row [0 ], escape (row [1 ]), row [2 ], row [3 ]))
158161 output .write (")\n " )
159162with open ("weblate_language_data/population.py" , "w" ) as output :
160163 output .write (HEADER )
161164 output .write ("# Language definitions\n " )
162- output .write ("POPULATION = {\n " )
165+ output .write ("POPULATION: dict[str, int] = {\n " )
163166 for row in LANGUAGES :
164167 code = row [0 ]
165- output .write (f" { code !r } : { get_population (code )} ,\n " )
168+ output .write (f' " { escape ( code ) } " : { get_population (code )} ,\n ' )
166169 output .write ("}\n " )
167170with open ("weblate_language_data/plurals.py" , "w" ) as output :
168171 output .write (HEADER )
169172 output .write ("from .utils import gettext_noop as _\n \n " )
170173 output .write ("# Additional plural rules definitions\n " )
171- output .write ("EXTRAPLURALS = (\n " )
174+ output .write (f "EXTRAPLURALS: { TYPE_HINT } = (\n " )
172175 for row in EXTRAPLURALS :
173- output .write (
174- TEMPLATE .format (row [0 ], row [1 ].replace ("'" , "\\ '" ), row [2 ], row [3 ])
175- )
176+ output .write (TEMPLATE .format (row [0 ], escape (row [1 ]), row [2 ], row [3 ]))
176177 output .write (")\n " )
177178 output .write ("\n " )
178- output .write ("CLDRPLURALS = (\n " )
179+ output .write (f "CLDRPLURALS: { TYPE_HINT } = (\n " )
179180 for row in CLDRPLURALS :
180- output .write (
181- TEMPLATE .format (row [0 ], row [1 ].replace ("'" , "\\ '" ), row [2 ], row [3 ])
182- )
181+ output .write (TEMPLATE .format (row [0 ], escape (row [1 ]), row [2 ], row [3 ]))
183182 output .write (")\n " )
184183 output .write ("\n " )
185- output .write ("QTPLURALS = (\n " )
184+ output .write (f "QTPLURALS: { TYPE_HINT } = (\n " )
186185 for row in QTPLURALS :
187- output .write (
188- TEMPLATE .format (row [0 ], row [1 ].replace ("'" , "\\ '" ), row [2 ], row [3 ])
189- )
186+ output .write (TEMPLATE .format (row [0 ], escape (row [1 ]), row [2 ], row [3 ]))
190187 output .write (")\n " )
191188with open ("weblate_language_data/aliases.py" , "w" ) as output :
192189 output .write (HEADER )
193190 output .write ("# Language aliases\n " )
194- output .write ("ALIASES = {\n " )
191+ output .write ("ALIASES: dict[str, str] = {\n " )
195192 for row in ALIASES :
196- output .write (" '{}': '{}' ,\n " .format (* row ))
193+ output .write (""" "{}": "{}" ,\n "" " .format (* row ))
197194 output .write ("}\n " )
198195with open ("weblate_language_data/countries.py" , "w" ) as output :
199196 output .write (HEADER )
200197 output .write ("# List of defaul languages, omitting country code should be okay\n " )
201- output .write ("DEFAULT_LANGS = (\n " )
198+ output .write ("DEFAULT_LANGS: tuple[str, ...] = (\n " )
202199 for row in DEFAULT_COUNTRIES :
203- output .write (" '{}' ,\n " . format ( * row ) )
200+ output .write (f' " { escape ( row [ 0 ]) } " ,\n ' )
204201 output .write (")\n " )
205202with open ("weblate_language_data/rtl.py" , "w" ) as output :
206203 output .write (HEADER )
207204 output .write ("# List of RTL languages\n " )
208- output .write ("RTL_LANGS = {\n " )
205+ output .write ("RTL_LANGS: set[str] = {\n " )
209206 for code in sorted (RTL_CODES ):
210207 output .write (f' "{ code } ",\n ' )
211208 output .write ("}\n " )
@@ -302,21 +299,19 @@ words.difference_update(
302299with open ("weblate_language_data/check_languages.py" , "w" ) as output :
303300 output .write (HEADER )
304301 output .write ("# Language names to ignore in same check\n " )
305- output .write ("LANGUAGES = {\n " )
306- content = ", " .join (
307- "'{}'" .format (word .replace ("'" , "\\ '" ))
308- for word in sorted (words )
309- if len (word ) > 2 # noqa: PLR2004
310- )
311- output .write (content )
312- output .write ("\n }\n " )
302+ output .write ("LANGUAGES: set[str] = {\n " )
303+ for word in sorted (words ):
304+ if len (word ) <= 2 : # noqa: PLR2004
305+ continue
306+ output .write (f' "{ escape (word )} ",\n ' )
307+ output .write ("}\n " )
313308
314309
315310# Write language codes
316311with open ("weblate_language_data/language_codes.py" , "w" ) as output :
317312 output .write (HEADER )
318313 output .write ("# Known language codes\n " )
319- output .write ("LANGUAGES = {\n " )
314+ output .write ("LANGUAGES: set[str] = {\n " )
320315 for word in sorted (CODES ):
321316 output .write (' "{}",\n ' .format (word .replace ('"' , '\\ "' )))
322317 output .write ("}\n " )
@@ -325,26 +320,7 @@ with open("weblate_language_data/language_codes.py", "w") as output:
325320with open ("weblate_language_data/country_codes.py" , "w" ) as output :
326321 output .write (HEADER )
327322 output .write ("# Known country codes\n " )
328- output .write ("COUNTRIES = {\n " )
323+ output .write ("COUNTRIES: set[str] = {\n " )
329324 for word in sorted (COUNTRIES ):
330325 output .write (' "{}",\n ' .format (word .replace ('"' , '\\ "' )))
331326 output .write ("}\n " )
332-
333- # Apply coding style
334- subprocess .run (
335- [
336- "pre-commit" ,
337- "run" ,
338- "--files" ,
339- "weblate_language_data/rtl.py" ,
340- "weblate_language_data/countries.py" ,
341- "weblate_language_data/aliases.py" ,
342- "weblate_language_data/plurals.py" ,
343- "weblate_language_data/languages.py" ,
344- "weblate_language_data/population.py" ,
345- "weblate_language_data/check_languages.py" ,
346- "weblate_language_data/language_codes.py" ,
347- "weblate_language_data/country_codes.py" ,
348- ],
349- check = False ,
350- )
0 commit comments