44#
55# SPDX-License-Identifier: MIT
66
7+ import csv
78import json
89import sys
10+ from operator import itemgetter
911from urllib .request import urlopen
1012
1113names = {}
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
1424PLURALDATA = "https://jibecfed.fedorapeople.org/partage/languages-data/{}.json"
1525
1626with 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
2234with 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
3347for 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