Skip to content

Commit 26d09aa

Browse files
committed
feat: use csv writer to generate CSV when adding
This makes it produce valid CSV even in corner cases.
1 parent 40bf2d7 commit 26d09aa

File tree

2 files changed

+29
-14
lines changed

2 files changed

+29
-14
lines changed

languages.csv

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -482,9 +482,9 @@ myx,Masaaba,2,n != 1
482482
mzn,Mazanderani,2,n != 1
483483
na,Nauru,2,n != 1
484484
nah,Nahuatl,2,n != 1
485-
nan_Hant,"Minnan (Traditional Han script)",1,0
486-
nan_Latn_pehoeji,"Minnan (Pe̍h-ōe-jī)",1,0
487-
nan_Latn_tailo,"Minnan (Tâi-lô)",1,0
485+
nan_Hant,Minnan (Traditional Han script),1,0
486+
nan_Latn_pehoeji,Minnan (Pe̍h-ōe-jī),1,0
487+
nan_Latn_tailo,Minnan (Tâi-lô),1,0
488488
nap,Neapolitan,2,n != 1
489489
naq,Nama,3,(n == 1) ? 0 : ((n == 2) ? 1 : 2)
490490
nb_NO,Norwegian Bokmål,2,n != 1

scripts/add-iso

Lines changed: 26 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4,31 +4,45 @@
44
#
55
# SPDX-License-Identifier: MIT
66

7+
import csv
78
import json
89
import sys
10+
from operator import itemgetter
911
from urllib.request import urlopen
1012

1113
names = {}
1214

15+
16+
def convert_name(name: str) -> str:
17+
if "," in name:
18+
base, extra = name.split(",", 1)
19+
return f"{base.strip()} ({extra.strip()})"
20+
return name
21+
22+
1323
# See https://github.com/WeblateOrg/language-data/issues/103
1424
PLURALDATA = "https://jibecfed.fedorapeople.org/partage/languages-data/{}.json"
1525

1626
with open("modules/iso-codes/data/iso_639-2.json") as handle:
1727
for item in json.load(handle)["639-2"]:
1828
for value in ("alpha_2", "alpha_3"):
1929
if value in item:
20-
names[item[value]] = item.get("inverted_name", item["name"])
30+
names[item[value]] = convert_name(
31+
item.get("inverted_name", item["name"])
32+
)
2133

2234
with open("modules/iso-codes/data/iso_639-3.json") as handle:
2335
for item in json.load(handle)["639-3"]:
2436
for value in ("alpha_2", "alpha_3"):
2537
if value in item:
26-
names[item[value]] = item.get("inverted_name", item["name"])
38+
names[item[value]] = convert_name(
39+
item.get("inverted_name", item["name"])
40+
)
2741

28-
with open("languages.csv") as handle:
29-
lines = handle.readlines()
30-
header = lines[:1]
31-
lines = lines[1:]
42+
with open("languages.csv", newline="") as handle:
43+
reader = csv.reader(handle, delimiter=",")
44+
header = next(reader)
45+
lines = list(reader)
3246

3347
for code in sys.argv[1:]:
3448
plurals = 2
@@ -53,14 +67,15 @@ for code in sys.argv[1:]:
5367
except (OSError, KeyError):
5468
sys.stderr.write(f"Failed to load data for {code}, using defaults\n")
5569
lines.append(
56-
"{},{},{},{}\n".format(
70+
[
5771
code,
5872
names[code].split(";")[-1].strip(),
5973
plurals,
6074
formula,
61-
),
75+
],
6276
)
6377

64-
with open("languages.csv", "w") as handle:
65-
handle.writelines(header)
66-
handle.writelines(sorted(lines))
78+
with open("languages.csv", "w", newline="") as handle:
79+
writer = csv.writer(handle, delimiter=",", lineterminator="\n")
80+
writer.writerow(header)
81+
writer.writerows(sorted(lines, key=itemgetter(0)))

0 commit comments

Comments
 (0)