Bonsoir,
j'aimerais connaître la liste des langues supportées par le module locale, tout étant au format "fr_FR" , "en_GB"... C'est sûrement caché dans la doc mais j'ai pas vu...
Bonsoir,
j'aimerais connaître la liste des langues supportées par le module locale, tout étant au format "fr_FR" , "en_GB"... C'est sûrement caché dans la doc mais j'ai pas vu...
Eh oui les documentations ne se limitent pas à python
et pour les langues -> ICI
Bonjour,
On peut trouver toutes les langues utilisées par locale avec le dictionnaire "locale_alias" qui se trouve dans le module "locale.py" mais qui n'est pas documenté dans la doc (Python 3):
Ce qui affiche (petit extrait):
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 import locale L = list(locale.locale_alias.items()) L.sort(key=lambda v: v[0]) for cle, val in L: print(cle,"===>",val)
Je n'ai affiché que le français de France, mais il y a tous les autres: ca, be, lu, ch, ...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 a3 ===> a3_AZ.KOI8-C a3_az ===> a3_AZ.KOI8-C a3_az.koi8c ===> a3_AZ.KOI8-C af ===> af_ZA.ISO8859-1 af_za ===> af_ZA.ISO8859-1 ... ... ... fr_fr ===> fr_FR.ISO8859-1 fr_fr.88591 ===> fr_FR.ISO8859-1 fr_fr.iso88591 ===> fr_FR.ISO8859-1 fr_fr.iso885915 ===> fr_FR.ISO8859-15 fr_fr.iso885915@euro ===> fr_FR.ISO8859-15 fr_fr.utf8@euro ===> fr_FR.UTF-8 fr_fr@euro ===> fr_FR.ISO8859-15 ... ... ... zh_tw.euctw ===> zh_TW.eucTW zu ===> zu_ZA.ISO8859-1 zu_za ===> zu_ZA.ISO8859-1 zu_za.iso88591 ===> zu_ZA.ISO8859-1
Nickel. Même pas penser à regarder la doc Python2...![]()
Bonjour,
J'ai essayé de connaître les langages disponibles sous Windows. Je ne suis pas sûr d'avoir la "bonne" méthode, mais ça a l'air de marcher.
J'ai cherché une liste de langages mondiaux écrits en anglais. Je l'ai trouvé ici:
http://www.loc.gov/standards/iso639-...glish_list.php
Attention: ce sont bien des noms de langage et non de pays. Par exemple pour l'espagnol, on cherche "spanish" et non "Spain".
J'ai transporté le tableau par copier-coller dans un éditeur de texte, ce qui m'a donné des colonnes séparées par des tabulations. J'ai enregistré sous le nom "nomdelangages.txt"
J'ai extrait les noms seuls comme suit:
Ce qui donne pour L: une liste de 527 langages.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 nf = "nomsdelangages.txt" with open(nf, 'r') as f: L = [] for ligne in f: langage = ligne.split()[0].rstrip(',') if langage not in L: L.append(langage)
J'ai ensuite cherché la liste des langages correspondant à 2 critères:
- l'application à setlocale ne génère pas d'erreur
- locale.normalize permet de connaître l'encodage de la langue
voilà comment:
Cela donne la liste suivante:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 # sauvegarde de la locale courante lcl = locale.getlocale() # sélection des langages disponible sur l'OS: LW = [] for loc in L: try: locale.setlocale(locale.LC_ALL, loc) enc = locale.normalize(loc).split('.') if len(enc)!=2: continue LW.append([loc, enc[0], enc[1]]) except: pass # restauration de la locale initiale locale.setlocale(locale.LC_ALL, lcl)
Maintenant, on applique avec, par exemple, l'affichage de la date du jour:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33 ['Arabic', 'ar_AA', 'ISO8859-6'] ['Bulgarian', 'bg_BG', 'CP1251'] ['Catalan', 'ca_ES', 'ISO8859-1'] ['Croatian', 'hr_HR', 'ISO8859-2'] ['Czech', 'cs_CZ', 'ISO8859-2'] ['Danish', 'da_DK', 'ISO8859-1'] ['Dutch', 'nl_NL', 'ISO8859-1'] ['English', 'en_EN', 'ISO8859-1'] ['Estonian', 'et_EE', 'ISO8859-1'] ['Finnish', 'fi_FI', 'ISO8859-1'] ['French', 'fr_FR', 'ISO8859-1'] ['Galician', 'gl_ES', 'ISO8859-1'] ['German', 'de_DE', 'ISO8859-1'] ['Greek', 'el_GR', 'ISO8859-7'] ['Hebrew', 'iw_IL', 'ISO8859-8'] ['Hungarian', 'hu_HU', 'ISO8859-2'] ['Icelandic', 'is_IS', 'ISO8859-1'] ['Italian', 'it_IT', 'ISO8859-1'] ['Japanese', 'ja_JP', 'eucJP'] ['Korean', 'ko_KR', 'eucKR'] ['Lithuanian', 'lt_LT', 'ISO8859-13'] ['Norwegian', 'no_NO', 'ISO8859-1'] ['Polish', 'pl_PL', 'ISO8859-2'] ['Portuguese', 'pt_PT', 'ISO8859-1'] ['Romanian', 'ro_RO', 'ISO8859-2'] ['Russian', 'ru_RU', 'ISO8859-5'] ['Sinhala', 'si_LK', 'UTF-8'] ['Slovak', 'sk_SK', 'ISO8859-2'] ['Slovenian', 'sl_SI', 'ISO8859-2'] ['Spanish', 'es_ES', 'ISO8859-1'] ['Swedish', 'sv_SE', 'ISO8859-1'] ['Thai', 'th_TH', 'ISO8859-11'] ['Turkish', 'tr_TR', 'ISO8859-9']
Ce qui donne:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 # application: affichage de la date du jour lcl = locale.getlocale() # sauvegarde de la locale courante date = datetime.datetime.now() for langage, lgg, enc in LW: locale.setlocale(locale.LC_ALL, langage) d = date.strftime(u'%c -- %x -- %X -- %B -- %A') try: print langage, enc, d.decode(enc) except: print langage, enc, d # exception: Japanese eucJP (japonais) et Sinhala UTF-8 (cingalais) locale.setlocale(locale.LC_ALL, lcl) # restauration de la locale initiale
Il n'y a que 2 pays dont l'affichage n'est pas correct, parce que la tentative d'encodage en unicode génère une erreur:Arabic ISO8859-6 18/11/1434 09:42:50 ص -- 18/11/1434 -- 09:42:50 ص -- سبتكبر -- افثفاثاء
Bulgarian CP1251 24.9.2013 г. 09:42:50 ч. -- 24.9.2013 г. -- 09:42:50 ч. -- септември -- вторник
Catalan ISO8859-1 24/09/2013 09:42:50 -- 24/09/2013 -- 09:42:50 -- setembre -- dimarts
Croatian ISO8859-2 24.9.2013. 9:42:50 -- 24.9.2013. -- 9:42:50 -- rujan -- utorak
Czech ISO8859-2 24.9.2013 9:42:50 -- 24.9.2013 -- 9:42:50 -- září -- úterý
Danish ISO8859-1 24-09-2013 09:42:50 -- 24-09-2013 -- 09:42:50 -- september -- tirsdag
Dutch ISO8859-1 24-9-2013 9:42:50 -- 24-9-2013 -- 9:42:50 -- september -- dinsdag
English ISO8859-1 9/24/2013 9:42:50 AM -- 9/24/2013 -- 9:42:50 AM -- September -- Tuesday
Estonian ISO8859-1 24.09.2013 9:42:50 -- 24.09.2013 -- 9:42:50 -- september -- teisipäev
Finnish ISO8859-1 24.9.2013 9:42:50 -- 24.9.2013 -- 9:42:50 -- syyskuu -- tiistai
French ISO8859-1 24/09/2013 09:42:50 -- 24/09/2013 -- 09:42:50 -- septembre -- mardi
Galician ISO8859-1 24/09/2013 9:42:50 -- 24/09/2013 -- 9:42:50 -- setembro -- martes
German ISO8859-1 24.09.2013 09:42:50 -- 24.09.2013 -- 09:42:50 -- September -- Dienstag
Greek ISO8859-7 24/9/2013 9:42:50 πμ -- 24/9/2013 -- 9:42:50 πμ -- Σεπτέμβριος -- Τρίτη
Hebrew ISO8859-8 24/09/2013 09:42:50 -- 24/09/2013 -- 09:42:50 -- ספטמבר -- יום*שלישי
Hungarian ISO8859-2 2013.09.24. 9:42:50 -- 2013.09.24. -- 9:42:50 -- szeptember -- kedd
Icelandic ISO8859-1 24.9.2013 09:42:50 -- 24.9.2013 -- 09:42:50 -- september -- þriðjudagur
Italian ISO8859-1 24/09/2013 09:42:50 -- 24/09/2013 -- 09:42:50 -- settembre -- martedì
Japanese eucJP Japanese eucJP 2013/09/24 9:42:50 -- 2013/09/24 -- 9:42:50 -- 9�� -- �Ηj��
Korean eucKR 2013-09-24 오전 9:42:50 -- 2013-09-24 -- 오전 9:42:50 -- 9월 -- 화요일
Lithuanian ISO8859-13 2013.09.24 09:42:50 -- 2013.09.24 -- 09:42:50 -- rugsėjis -- antradienis
Norwegian ISO8859-1 24.09.2013 09:42:50 -- 24.09.2013 -- 09:42:50 -- september -- tirsdag
Polish ISO8859-2 2013-09-24 09:42:50 -- 2013-09-24 -- 09:42:50 -- wrzesień -- wtorek
Portuguese ISO8859-1 24/09/2013 09:42:50 -- 24/09/2013 -- 09:42:50 -- setembro -- terça-feira
Romanian ISO8859-2 24.09.2013 09:42:50 -- 24.09.2013 -- 09:42:50 -- septembrie -- marţi
Russian ISO8859-5 24.09.2013 9:42:50 -- 24.09.2013 -- 9:42:50 -- бхэђџс№ќ -- тђю№эшъ
Sinhala UTF-8 2013-09-24 9:42:50 ??.?. -- 2013-09-24 -- 9:42:50 ??.?. -- ??????????? -- ?????????
Slovak ISO8859-2 24. 9. 2013 9:42:50 -- 24. 9. 2013 -- 9:42:50 -- september -- utorok
Slovenian ISO8859-2 24.9.2013 9:42:50 -- 24.9.2013 -- 9:42:50 -- september -- torek
Spanish ISO8859-1 24/09/2013 9:42:50 -- 24/09/2013 -- 9:42:50 -- septiembre -- martes
Swedish ISO8859-1 2013-09-24 09:42:50 -- 2013-09-24 -- 09:42:50 -- september -- tisdag
Thai ISO8859-11 24/9/2556 9:42:50 -- 24/9/2556 -- 9:42:50 -- กันยายน -- อังคาร
Turkish ISO8859-9 24.09.2013 09:42:50 -- 24.09.2013 -- 09:42:50 -- Eylül -- Salı
- Japanese eucJP (japonais)
- Sinhala UTF-8 (cingalais)
Si quelqu'un sait faire plus simple: son apport sera le bienvenu!!!
Bonjour tyrtamos.
Intéressant. Je vais utiliser ta méthode pour améliorer mon module date_use de mon package misTool sur PyPI pour traduire simplement les dates.
Ça fonctionne mais...
A défaut de pouvoir interroger l'OS pour savoir ce qu'il connaît, pourquoi ne pas partir d'une liste Windows?
De toutes façons, Windows est peu respectueux des "standards".
Partir d'une liste ISO avec des noms "bien construits" peut arriver nulle part et réciproquement.
- W
Partager