Skip to content

Commit c0ec55a

Browse files
committed
feat: cover all Debian supported locales
- add missing locales - add CI validation that /usr/share/i18n/SUPPORTED is fully covered Fixes #2377
1 parent 2cfca0a commit c0ec55a

8 files changed

Lines changed: 172 additions & 0 deletions

File tree

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,3 +103,5 @@ ENV/
103103
*~
104104

105105
/uv.lock
106+
107+
/.codex

default_countries.csv

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
code
22
af_za
3+
agr_pe
34
am_et
45
ar_aa
56
as_in
@@ -33,6 +34,7 @@ gu_in
3334
gv_gb
3435
he_il
3536
hi_in
37+
hif_fj
3638
hr_hr
3739
hu_hu
3840
hy_am
@@ -55,6 +57,7 @@ lo_la
5557
lt_lt
5658
lv_lv
5759
mi_nz
60+
miq_ni
5861
mk_mk
5962
ml_in
6063
mn_mn
@@ -63,6 +66,7 @@ ms_my
6366
mt_mt
6467
my_mm
6568
ne_np
69+
nhn_mx
6670
nl_nl
6771
nn_no
6872
no_no
@@ -82,6 +86,7 @@ rw_rw
8286
sa_in
8387
sd_in
8488
si_lk
89+
shs_ca
8590
sk_sk
8691
sl_si
8792
sq_al
@@ -93,20 +98,23 @@ ta_in
9398
te_in
9499
tg_tj
95100
th_th
101+
the_np
96102
tk_tm
97103
tl_ph
98104
tn_za
99105
tr_tr
100106
ts_za
101107
tt_ru
102108
uk_ua
109+
unm_us
103110
ur_pk
104111
uz_uz
105112
ve_za
106113
vi_vn
107114
wa_be
108115
xh_za
109116
yi_us
117+
yuw_pg
110118
zu_za
111119
ast_es
112120
gug_py

languages.csv

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ af,Afrikaans,2,n != 1
1212
afh,Afrihili,2,n != 1
1313
aii,Assyrian Neo-Aramaic,2,n != 1
1414
ain,Ainu (Japan),2,n != 1
15+
agr,Aguaruna,2,n != 1
1516
ak,Akan,2,n > 1
1617
akk,Akkadian,2,n != 1
1718
ale,Aleut,2,n != 1
@@ -300,6 +301,7 @@ he_IL,Hebrew (Israel),4,(n == 1) ? 0 : ((n == 2) ? 1 : ((n > 10 && n % 10 == 0)
300301
hi,Hindi,2,n > 1
301302
hi@hinglish,Hindi (Hinglish),2,n > 1
302303
hi_Latn,Hindi (Latin script),2,n > 1
304+
hif,Hindi (Fiji),2,n != 1
303305
hil,Hiligaynon,2,n != 1
304306
hit,Hittite,2,n != 1
305307
hmn,Hmong,2,n != 1
@@ -459,6 +461,7 @@ mi,Maori,2,n > 1
459461
mia,Miami,2,n > 1
460462
mic,Mi'kmaq,2,n != 1
461463
min,Minangkabau,2,n != 1
464+
miq,Mískito,2,n != 1
462465
mis,Milang,1,0
463466
mjw,Karbi,2,n != 1
464467
mk,Macedonian,2,n==1 || n%10==1 ? 0 : 1
@@ -510,6 +513,7 @@ ne,Nepali,2,n != 1
510513
new,Newari,2,n != 1
511514
ng,Ndonga,2,n != 1
512515
ngl,Lomwe,2,n != 1
516+
nhn,Nahuatl (Central),2,n != 1
513517
nia,Nias,2,n != 1
514518
nij,Ngaju,2,n != 1
515519
niu,Niuean,2,n != 1
@@ -648,6 +652,7 @@ smj,Sami (Lule),3,(n == 1) ? 0 : ((n == 2) ? 1 : 2)
648652
sml,Sama (Central),2,n != 1
649653
smn,Sami (Inari),3,(n == 1) ? 0 : ((n == 2) ? 1 : 2)
650654
sms,Sami (Skolt),3,(n == 1) ? 0 : ((n == 2) ? 1 : 2)
655+
shs,Shuswap,2,n != 1
651656
sn,Shona,2,n != 1
652657
snk,Soninke,2,n != 1
653658
so,Somali,2,n != 1
@@ -710,6 +715,7 @@ tog,Tonga (Nyasa),2,n != 1
710715
toi,Tonga (Zambia),2,n != 1
711716
tok,Toki Pona,1,0
712717
tpi,Tok Pisin,1,0
718+
the,Tharu (Chitwania),2,n != 1
713719
tr,Turkish,2,n != 1
714720
trv,Taroko,2,n != 1
715721
ts,Tsonga,2,n != 1
@@ -733,6 +739,7 @@ uga,Ugaritic,2,n != 1
733739
uk,Ukrainian,3,n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2
734740
umb,Umbundu,2,n != 1
735741
und,Undetermined,2,n != 1
742+
unm,Unami,2,n != 1
736743
unr,Mundari,2,n != 1
737744
ur,Urdu,2,n != 1
738745
ur_IN,Urdu (India),2,n != 1
@@ -770,6 +777,7 @@ xog,Soga,2,n != 1
770777
yao,Yao,2,n != 1
771778
yap,Yapese,2,n != 1
772779
yi,Yiddish,2,n != 1
780+
yuw,Yau (Morobe Province),2,n != 1
773781
yo,Yoruba,1,0
774782
yua,Yucateco,2,n != 1
775783
yue_Hans,Cantonese (Simplified Han script),1,0

scripts/lint.py

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
# SPDX-License-Identifier: MIT
66

77
import csv
8+
import os
89
from gettext import c2py
910
from itertools import chain
1011

@@ -23,6 +24,59 @@ def parse_csv(name):
2324
return result
2425

2526

27+
def normalize_supported_locale(locale):
28+
return locale.split(".", 1)[0].lower()
29+
30+
31+
def is_supported_locale(locale, languages, aliases, default_countries):
32+
candidates = [locale]
33+
normalized = locale
34+
35+
if "@" in normalized:
36+
base, modifier = normalized.split("@", 1)
37+
if modifier == "euro":
38+
candidates.append(base)
39+
normalized = base
40+
else:
41+
language = base.split("_", 1)[0]
42+
candidates.extend((f"{language}@{modifier}", base))
43+
normalized = base
44+
45+
if "_" in normalized:
46+
language = normalized.split("_", 1)[0]
47+
candidates.append(language)
48+
if normalized in default_countries:
49+
candidates.append(language)
50+
51+
return any(
52+
candidate in languages or candidate in aliases for candidate in candidates
53+
)
54+
55+
56+
def validate_supported_locales(languages, aliases, default_countries):
57+
supported_path = "/usr/share/i18n/SUPPORTED"
58+
if not os.path.exists(supported_path):
59+
return
60+
61+
missing = set()
62+
63+
with open(supported_path) as handle:
64+
for line in handle:
65+
if not line.strip():
66+
continue
67+
locale = normalize_supported_locale(line.split()[0])
68+
if locale in {"c", "posix"}:
69+
continue
70+
if not is_supported_locale(locale, languages, aliases, default_countries):
71+
missing.add(locale)
72+
73+
if missing:
74+
raise ValueError(
75+
"Missing locales from /usr/share/i18n/SUPPORTED: "
76+
+ ", ".join(sorted(missing))
77+
)
78+
79+
2680
languages = parse_csv("languages.csv")
2781
aliases = parse_csv("aliases.csv")
2882
cldr = parse_csv("cldr.csv")
@@ -80,3 +134,7 @@ def parse_csv(name):
80134
raise ValueError(
81135
f"Mismatching plural count for {code}: {plural_count} != {calculated}",
82136
)
137+
138+
validate_supported_locales(
139+
set(languages.keys()), aliases, set(default_countries.keys())
140+
)

weblate_language_data/countries.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
# List of default languages, omitting country code should be okay
1616
DEFAULT_LANGS: tuple[str, ...] = (
1717
"af_za",
18+
"agr_pe",
1819
"am_et",
1920
"ar_aa",
2021
"as_in",
@@ -48,6 +49,7 @@
4849
"gv_gb",
4950
"he_il",
5051
"hi_in",
52+
"hif_fj",
5153
"hr_hr",
5254
"hu_hu",
5355
"hy_am",
@@ -70,6 +72,7 @@
7072
"lt_lt",
7173
"lv_lv",
7274
"mi_nz",
75+
"miq_ni",
7376
"mk_mk",
7477
"ml_in",
7578
"mn_mn",
@@ -78,6 +81,7 @@
7881
"mt_mt",
7982
"my_mm",
8083
"ne_np",
84+
"nhn_mx",
8185
"nl_nl",
8286
"nn_no",
8387
"no_no",
@@ -97,6 +101,7 @@
97101
"sa_in",
98102
"sd_in",
99103
"si_lk",
104+
"shs_ca",
100105
"sk_sk",
101106
"sl_si",
102107
"sq_al",
@@ -108,20 +113,23 @@
108113
"te_in",
109114
"tg_tj",
110115
"th_th",
116+
"the_np",
111117
"tk_tm",
112118
"tl_ph",
113119
"tn_za",
114120
"tr_tr",
115121
"ts_za",
116122
"tt_ru",
117123
"uk_ua",
124+
"unm_us",
118125
"ur_pk",
119126
"uz_uz",
120127
"ve_za",
121128
"vi_vn",
122129
"wa_be",
123130
"xh_za",
124131
"yi_us",
132+
"yuw_pg",
125133
"zu_za",
126134
"ast_es",
127135
"gug_py",

weblate_language_data/language_codes.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
"af",
3030
"afh",
3131
"afr",
32+
"agr",
3233
"aii",
3334
"ain",
3435
"ais",
@@ -494,6 +495,7 @@
494495
"hi",
495496
"hi@hinglish",
496497
"hi_latn",
498+
"hif",
497499
"hil",
498500
"hin",
499501
"hit",
@@ -735,6 +737,7 @@
735737
"mia",
736738
"mic",
737739
"min",
740+
"miq",
738741
"mis",
739742
"mjw",
740743
"mk",
@@ -810,6 +813,7 @@
810813
"new",
811814
"ng",
812815
"ngl",
816+
"nhn",
813817
"nia",
814818
"nij",
815819
"niu",
@@ -1000,6 +1004,7 @@
10001004
"sh",
10011005
"shi",
10021006
"shn",
1007+
"shs",
10031008
"si",
10041009
"sid",
10051010
"sin",
@@ -1107,6 +1112,7 @@
11071112
"tgl",
11081113
"th",
11091114
"tha",
1115+
"the",
11101116
"ti",
11111117
"tib",
11121118
"tig",
@@ -1165,6 +1171,7 @@
11651171
"umb",
11661172
"umu",
11671173
"und",
1174+
"unm",
11681175
"unr",
11691176
"ur",
11701177
"ur_in",
@@ -1232,6 +1239,7 @@
12321239
"yue",
12331240
"yue_hans",
12341241
"yue_hant",
1242+
"yuw",
12351243
"za",
12361244
"zai",
12371245
"zap",

0 commit comments

Comments
 (0)