#!/usr/bin/python # -*- coding: Utf-8 -*- # Script qui sert à copier (par exemple) ... # # /usr/share/ekd/locale/en_EN/LC_MESSAGES/ekd.mo et /usr/share/ekd/locale/en_EN/LC_MESSAGES/ekdDoc.mo vers (par # exemple) /usr/share/ekd/locale/en_AU/LC_MESSAGES/ekd.mo et /usr/share/ekd/locale/en_AU/LC_MESSAGES/ekd.mo # (et ce pour tous les répertoires symbole langue dont la langue officielle est l'anglais) # # puis ... # # /usr/share/ekd/locale/es_ES/LC_MESSAGES/ekd.mo et /usr/share/ekd/locale/es_ES/LC_MESSAGES/ekdDoc.mo vers (par # exemple) /usr/share/ekd/locale/es_AR/LC_MESSAGES/ekd.mo /usr/share/ekd/locale/es_AR/LC_MESSAGES/ekd.mo # (et ce pour tous les répertoires symbole langue dont la langue officielle est l'espagnol). # # ATTENTION (!!!): les répertoires (et sous-répertoires): # # /usr/share/ekd/locale/en_EN/LC_MESSAGES, /usr/share/ekd/locale/es_ES/LC_MESSAGES, # /usr/share/ekd/locale/de_DE/LC_MESSAGES et /usr/share/ekd/locale/nl_NL/LC_MESSAGES # # ... ne doivent jamais être éliminés. # # Les nationalités et communautés gérées pour l'instant sont: # # pour l'anglais (autres que 'en_EN' ==> English): # # 'en_AG' => (Antigua and Barbuda), 'en_AI' => (Anguilla), 'en_AS' => (America Samoa), 'en_AU' => 'English (Australia)', # 'en_BB' => (Barbados), 'en_BE' => (Belgique), 'en_BM' => (Bermuda), 'en_BN' => (Brunei Darussalam), 'en_BS' => (Bahamas), # 'en_BW' => (Botswana), 'en_BZ' => (Belize), 'en_CA' => 'English (Canada)', 'en_GB' => 'English (United Kingdom)', # 'en_CK' => (Barbados), 'en_CM' => (Cameroon), 'en_DM' => (Dominica), 'en_FJ' => (Fiji), 'en_FK' => (Fakland Island), # 'en_FM' => (Micronesia), 'en_GD' => (Grenada), 'en_GI' => (Gibraltar), 'en_GY' => (Guyane), 'en_IL' => (Israel), # 'en_IO' => (British India Ocean Territory), 'en_KE' => (Kenya), 'en_KI' => (Kiribati), 'en_KN' => (Saint Kitts And Nevis), # 'en_KY' => (Cayman Islands), 'en_LC' => (Saint Lucia), 'en_LS' => (Lesotho), 'en_MH' => (Marshall Islands), # 'en_MS' => (Montserrat), 'en_MT' => (Malta), 'en_MU' => (Maritius), 'en_MW' => (Malawi), 'en_NA' => (Namibia), # 'en_NF' => (Norfolk Island), 'en_NG' => (Nigeria), 'en_NR' => (Nauru), 'en_PG' => (Papua New Guinea), 'en_PK' => (Pakistan), # 'en_PN' => (Pitcairn), 'en_PR' => (Puerto Rico), 'en_PW' => (Palau), 'en_RW' => (Rwanda), 'en_SB' => (Salomon Islands), # 'en_SC' => (Seychelles), 'en_SH' => (Saint Helena), 'en_SL' => (Sierra Leona), 'en_SZ' => (Swaziland), 'en_TC' => (Turks AND Caicos Islands), # 'en_TK' => (Tokulau), 'en_TO' => (Tonga), 'en_UG' => (Uganda), 'en_UM' => (United Minor Outlgings Islands), # 'en_VC' => (Saint Vincent and The Grenadines), 'en_VG' => (Virgin Islands, British), 'en_VI' => (Virgin Islands, US), 'en_WS' => (Samoa), # 'en_ZM' => (Zambia), 'en_ZW' => (Zimbabwe), 'en_HK' => 'English (Hong Kong SAR China)', 'en_IE' => 'English (Ireland)', 'en_IN' => 'English (India)', # 'en_JM' => 'English (Jamaica)', 'en_LR' => 'English (Liberia)', 'en_NZ' => 'English (New Zealand)', # 'en_PH' => 'English (Philippines)', 'en_SG' => 'English (Singapore)', 'en_TT' => 'English (Trinidad and Tobago)', # 'en_US' => 'English (United States)', 'en_ZA' => 'English (South Africa)'. # # pour l'espagnol (autres que 'es_ES' => Spanish): # # 'es_AR' => 'Spanish (Argentina)', 'es_BO' => 'Spanish (Bolivia)', 'es_CA' => 'Spanish (Canada)', # 'es_CL' => 'Spanish (Chile)', 'es_CO' => 'Spanish (Colombia)', 'es_CR' => 'Spanish (Costa Rica)', # 'es_CU' => 'Spanish (Cuba)', 'es_DO' => 'Spanish (Dominican Republic)', 'es_EC' => 'Spanish (Ecuador)', # 'es_GQ' => 'Spanish (Equatorial Guinea)', 'es_GT' => 'Spanish (Guatemala)', 'es_HN' => 'Spanish (Honduras)', # 'es_MX' => 'Spanish (Mexico)', 'es_NI' => 'Spanish (Nicaragua)', 'es_PA' => 'Spanish (Panama)', # 'es_PE' => 'Spanish (Peru)', 'es_PR' => 'Spanish (Puerto Rico)', 'es_PY' => 'Spanish (Paraguay)', # 'es_SV' => 'Spanish (El Salvador)', 'es_US' => 'Spanish (United States)', 'es_UY' => 'Spanish (Uruguay)', # 'es_VE' => 'Spanish (Venezuela)'. # # pour l'allemand (autres que 'de_DE' ==> Germany): # # 'de_AT' ==> 'German (Austria)', 'de_BE' (German Belgium), 'de_CH' ==> 'German (Switzerland)', 'de_FR' (German France), 'de_HU' (German Hungary), # 'de_IT' (German Italy), 'de_LI' (Liechtenstein), 'de_LU' ==> 'German (Luxembourg)', 'de_PL' (German Poland). # # pour le néerlandais (autres que 'nl_NL' ==> Dutch (Netherlands)): # # 'nl_BE' ==> 'Dutch (Belgium)', 'nl_AN' (Netherlands Antilles), 'nl_AW' (Arubia). # # pour le portugais (autres que 'pt_PT' ==> Portugais (Portugal)): # # 'pt_AO' (Angola), 'pt_BR' ==> (Brésil), 'pt_CV' (Costa Verde), 'pt_GW' (Ginea-Bissau), 'pt_MZ' (Mozambique), 'pt_ST' (Sao Tome And Principe), # 'pt_TL' (Timor oriental). # # Si des langues autres que celles gérées par EKD (et autres que francophones) sont détectées, le # chemin /usr/share/ekd/locale/??_??/LC_MESSAGE (??_?? serait l'indice langue de cette langue) est # crée et les fichiers .mo inclus dans /usr/share/ekd/locale/en_GB/LC_MESSAGES sont copiés dans # /usr/share/ekd/locale/??_??/LC_MESSAGE. Ce qui a pour effet que dans cette situation l'interface # d'EKD s'affiche en anglais. import os, glob, shutil from PyQt4.QtCore import QLocale class GestionLanguesDeb(object): def __init__(self): # Chemin exact self.pourDeb = '/usr/share/ekd/' # On liste tous les chemins possibles des nationalités (ou communautés) de langue anglaise, espagnole, allemande, portugaise et néerlandaise # (autres que: en_EN, es_ES, de_DE, pt_PT et nl_NL) ChemSymbLang_Nat = [self.pourDeb+'locale/en_AG/LC_MESSAGES', self.pourDeb+'locale/en_AI/LC_MESSAGES', self.pourDeb+'locale/en_AS/LC_MESSAGES',\ self.pourDeb+'locale/en_AU/LC_MESSAGES', self.pourDeb+'locale/en_BB/LC_MESSAGES', self.pourDeb+'locale/en_BE/LC_MESSAGES',\ self.pourDeb+'locale/en_BM/LC_MESSAGES', self.pourDeb+'locale/en_BN/LC_MESSAGES', self.pourDeb+'locale/en_BS/LC_MESSAGES',\ self.pourDeb+'locale/en_BW/LC_MESSAGES', self.pourDeb+'locale/en_BZ/LC_MESSAGES', self.pourDeb+'locale/en_CA/LC_MESSAGES',\ self.pourDeb+'locale/en_CK/LC_MESSAGES', self.pourDeb+'locale/en_CM/LC_MESSAGES', self.pourDeb+'locale/en_DM/LC_MESSAGES',\ self.pourDeb+'locale/en_FJ/LC_MESSAGES', self.pourDeb+'locale/en_FK/LC_MESSAGES', self.pourDeb+'locale/en_GB/LC_MESSAGES',\ self.pourDeb+'locale/en_GD/LC_MESSAGES', self.pourDeb+'locale/en_GI/LC_MESSAGES', self.pourDeb+'locale/en_GY/LC_MESSAGES',\ self.pourDeb+'locale/en_HK/LC_MESSAGES', self.pourDeb+'locale/en_IE/LC_MESSAGES', self.pourDeb+'locale/en_IL/LC_MESSAGES',\ self.pourDeb+'locale/en_IN/LC_MESSAGES', self.pourDeb+'locale/en_IO/LC_MESSAGES', self.pourDeb+'locale/en_KE/LC_MESSAGES',\ self.pourDeb+'locale/en_KI/LC_MESSAGES', self.pourDeb+'locale/en_KN/LC_MESSAGES', self.pourDeb+'locale/en_KY/LC_MESSAGES',\ self.pourDeb+'locale/en_JM/LC_MESSAGES', self.pourDeb+'locale/en_LC/LC_MESSAGES', self.pourDeb+'locale/en_LR/LC_MESSAGES',\ self.pourDeb+'locale/en_LS/LC_MESSAGES', self.pourDeb+'locale/en_MH/LC_MESSAGES', self.pourDeb+'locale/en_MS/LC_MESSAGES',\ self.pourDeb+'locale/en_MT/LC_MESSAGES', self.pourDeb+'locale/en_MU/LC_MESSAGES', self.pourDeb+'locale/en_MW/LC_MESSAGES',\ self.pourDeb+'locale/en_NA/LC_MESSAGES', self.pourDeb+'locale/en_NF/LC_MESSAGES', self.pourDeb+'locale/en_NG/LC_MESSAGES',\ self.pourDeb+'locale/en_NR/LC_MESSAGES', self.pourDeb+'locale/en_NZ/LC_MESSAGES', self.pourDeb+'locale/en_PG/LC_MESSAGES',\ self.pourDeb+'locale/en_PH/LC_MESSAGES', self.pourDeb+'locale/en_PK/LC_MESSAGES', self.pourDeb+'locale/en_PN/LC_MESSAGES',\ self.pourDeb+'locale/en_PR/LC_MESSAGES', self.pourDeb+'locale/en_PW/LC_MESSAGES', self.pourDeb+'locale/en_RW/LC_MESSAGES',\ self.pourDeb+'locale/en_SB/LC_MESSAGES', self.pourDeb+'locale/en_SC/LC_MESSAGES', self.pourDeb+'locale/en_SH/LC_MESSAGES',\ self.pourDeb+'locale/en_SL/LC_MESSAGES', self.pourDeb+'locale/en_SZ/LC_MESSAGES', self.pourDeb+'locale/en_TC/LC_MESSAGES',\ self.pourDeb+'locale/en_TK/LC_MESSAGES', self.pourDeb+'locale/en_TO/LC_MESSAGES', self.pourDeb+'locale/en_TT/LC_MESSAGES',\ self.pourDeb+'locale/en_UG/LC_MESSAGES', self.pourDeb+'locale/en_UM/LC_MESSAGES', self.pourDeb+'locale/en_US/LC_MESSAGES',\ self.pourDeb+'locale/en_VC/LC_MESSAGES', self.pourDeb+'locale/en_VG/LC_MESSAGES', self.pourDeb+'locale/en_VI/LC_MESSAGES',\ self.pourDeb+'locale/en_WS/LC_MESSAGES', self.pourDeb+'locale/en_ZA/LC_MESSAGES', self.pourDeb+'locale/en_ZM/LC_MESSAGES',\ self.pourDeb+'locale/en_ZW/LC_MESSAGES', self.pourDeb+'locale/es_AR/LC_MESSAGES', self.pourDeb+'locale/es_BO/LC_MESSAGES',\ self.pourDeb+'locale/es_CA/LC_MESSAGES', self.pourDeb+'locale/es_CL/LC_MESSAGES', self.pourDeb+'locale/es_CO/LC_MESSAGES',\ self.pourDeb+'locale/es_CR/LC_MESSAGES', self.pourDeb+'locale/es_CU/LC_MESSAGES', self.pourDeb+'locale/es_GT/LC_MESSAGES',\ self.pourDeb+'locale/es_HN/LC_MESSAGES', self.pourDeb+'locale/es_MX/LC_MESSAGES', self.pourDeb+'locale/es_NI/LC_MESSAGES',\ self.pourDeb+'locale/es_PA/LC_MESSAGES', self.pourDeb+'locale/es_PE/LC_MESSAGES', self.pourDeb+'locale/es_US/LC_MESSAGES',\ self.pourDeb+'locale/es_UY/LC_MESSAGES', self.pourDeb+'locale/es_VE/LC_MESSAGES', self.pourDeb+'locale/de_AT/LC_MESSAGES',\ self.pourDeb+'locale/de_BE/LC_MESSAGES', self.pourDeb+'locale/de_CH/LC_MESSAGES', self.pourDeb+'locale/de_FR/LC_MESSAGES',\ self.pourDeb+'locale/de_HU/LC_MESSAGES', self.pourDeb+'locale/de_IT/LC_MESSAGES', self.pourDeb+'locale/de_LI/LC_MESSAGES',\ self.pourDeb+'locale/de_LU/LC_MESSAGES', self.pourDeb+'locale/de_PL/LC_MESSAGES', self.pourDeb+'locale/nl_AN/LC_MESSAGES',\ self.pourDeb+'locale/nl_AW/LC_MESSAGES', self.pourDeb+'locale/nl_BE/LC_MESSAGES', self.pourDeb+'locale/pt_AO/LC_MESSAGES',\ self.pourDeb+'locale/pt_BR/LC_MESSAGES', self.pourDeb+'locale/pt_CV/LC_MESSAGES', self.pourDeb+'locale/pt_GW/LC_MESSAGES',\ self.pourDeb+'locale/pt_MZ/LC_MESSAGES', self.pourDeb+'locale/pt_ST/LC_MESSAGES', self.pourDeb+'locale/pt_TL/LC_MESSAGES'] # Ensuite on crée les répertoires (si les répertoires intermédiaires # n'existent pas, ils sont crées --aussi-- à la volée) for repNation_Nat in ChemSymbLang_Nat: # Si tous les répertoires existent déjà # il ne se passe rien ... if os.path.exists(repNation_Nat): pass # Autrement ils sont crées ... else: os.makedirs(repNation_Nat, 0755) # Liste récupérant les chemins sous la forme: /usr/share/ekd/locale/en_CA (Canada) et en excluant du lot: /usr/share/ekd/locale/en_EN contenu_locale_EN = [enX for enX in glob.glob(self.pourDeb+'locale/*') if enX[:-3] == self.pourDeb+'locale/en' and enX != self.pourDeb+'locale/en_EN'] # Liste récupérant les chemins sous la forme: /usr/share/ekd/locale/es_CU (Cuba) et en excluant du lot: /usr/share/ekd/locale/es_ES contenu_locale_ES = [esX for esX in glob.glob(self.pourDeb+'locale/*') if esX[:-3] == self.pourDeb+'locale/es' and esX != self.pourDeb+'locale/es_ES'] # Liste récupérant les chemins sous la forme: /usr/share/ekd/locale/de_LU (Luxembourg) et en excluant du lot: /usr/share/ekd/locale/de_DE contenu_locale_DE = [deX for deX in glob.glob(self.pourDeb+'locale/*') if deX[:-3] == self.pourDeb+'locale/de' and deX != self.pourDeb+'locale/de_DE'] # Liste récupérant les chemins sous la forme: /usr/share/ekd/locale/nl_BE (Belgique) et en excluant du lot: /usr/share/ekd/locale/nl_NL contenu_locale_NL = [nlX for nlX in glob.glob(self.pourDeb+'locale/*') if nlX[:-3] == self.pourDeb+'locale/nl' and nlX != self.pourDeb+'locale/nl_NL'] # Liste récupérant les chemins sous la forme: /usr/share/ekd/locale/pt_BR (Brésil) et en excluant du lot: /usr/share/ekd/locale/pt_PT contenu_locale_PT = [ptX for ptX in glob.glob(self.pourDeb+'locale/*') if ptX[:-3] == self.pourDeb+'locale/pt' and ptX != self.pourDeb+'locale/pt_PT'] # On vérifie si les fichiers ekd.mo et ekdDoc.mo sont déjà présents dans # les différents répertoires en_..., si c'est le cas ils sont éliminés. # Ensuite les fichiers .mo sont copiés dans chaque répertoire de langue # anglaise for parcEN in contenu_locale_EN: parc_EN = parcEN + '/' + 'LC_MESSAGES/' if 'ekd.mo' in os.listdir(parc_EN): os.remove(parc_EN+'ekd.mo') shutil.copy(self.pourDeb+'locale/en_EN/LC_MESSAGES/ekd.mo', parc_EN) if 'ekdDoc.mo' in os.listdir(parc_EN): os.remove(parc_EN+'ekdDoc.mo') shutil.copy(self.pourDeb+'locale/en_EN/LC_MESSAGES/ekdDoc.mo', parc_EN) # Même chose qu'au dessus mais pour la langue espagnole for parcES in contenu_locale_ES: parc_ES = parcES + '/' + 'LC_MESSAGES/' if 'ekd.mo' in os.listdir(parc_ES): os.remove(parc_ES+'ekd.mo') shutil.copy(self.pourDeb+'locale/es_ES/LC_MESSAGES/ekd.mo', parc_ES) if 'ekdDoc.mo' in os.listdir(parc_ES): os.remove(parc_ES+'ekdDoc.mo') shutil.copy(self.pourDeb+'locale/es_ES/LC_MESSAGES/ekdDoc.mo', parc_ES) # Même chose qu'au dessus mais pour la langue allemande # Attention ici (et pour l'instant) le ekdDoc.mo présent # est celui de langue anglaise for parcDE in contenu_locale_DE: parc_DE = parcDE + '/' + 'LC_MESSAGES/' if 'ekd.mo' in os.listdir(parc_DE): os.remove(parc_DE+'ekd.mo') shutil.copy(self.pourDeb+'locale/de_DE/LC_MESSAGES/ekd.mo', parc_DE) if 'ekdDoc.mo' in os.listdir(parc_DE): os.remove(parc_DE+'ekdDoc.mo') shutil.copy(self.pourDeb+'locale/de_DE/LC_MESSAGES/ekdDoc.mo', parc_DE) # Même chose qu'au dessus mais pour la langue néerlandaise # Attention ici (et pour l'instant) le ekdDoc.mo présent # est celui de langue anglaise for parcNL in contenu_locale_NL: parc_NL = parcNL + '/' + 'LC_MESSAGES/' if 'ekd.mo' in os.listdir(parc_NL): os.remove(parc_NL+'ekd.mo') shutil.copy(self.pourDeb+'locale/nl_NL/LC_MESSAGES/ekd.mo', parc_NL) if 'ekdDoc.mo' in os.listdir(parc_NL): os.remove(parc_NL+'ekdDoc.mo') shutil.copy(self.pourDeb+'locale/nl_NL/LC_MESSAGES/ekdDoc.mo', parc_NL) # Même chose qu'au dessus mais pour la langue portugaise # Attention ici (et pour l'instant) le ekdDoc.mo présent # est celui de langue anglaise for parcPT in contenu_locale_PT: parc_PT = parcPT + '/' + 'LC_MESSAGES/' if 'ekd.mo' in os.listdir(parc_PT): os.remove(parc_PT+'ekd.mo') shutil.copy(self.pourDeb+'locale/pt_PT/LC_MESSAGES/ekd.mo', parc_PT) if 'ekdDoc.mo' in os.listdir(parc_PT): os.remove(parc_PT+'ekdDoc.mo') shutil.copy(self.pourDeb+'locale/pt_PT/LC_MESSAGES/ekdDoc.mo', parc_PT) # Détection de la langue self.langue_locale = str(QLocale.system().name()) # Liste des pays francophones et provinces d'outre-mer (dont au moins la 2ème langue parlée est le français). # fr_FR --> France métropolitaine, fr_BE --> Belgique, fr_CA --> Canada, fr_LU --> Luxembourg, fr_CH --> Suisse, fr_MC --> Monaco, # fr_TF --> French Southern and Antartics Lands, fr_Yt --> Myotte, fr_CF --> Centrafrique, fr_CI --> Côte d'Ivoire, fr_CM --> Cameroun, # fr fr_DZ --> Algérie, fr_GA --> Gabon, fr_GP --> Guadeloupe, fr_GQ --> Guinée Equatoriale, fr_GY --> Guyane, fr_HT --> Haïti, # fr_MG --> Madagascar, fr_ML --> Mali, fr_MQ --> Martinique, fr_BJ --> Bénin, fr_BF --> Burkina Faso, fr_DJ --> Djibouti, # fr_NE --> Niger, fr_CD --> Congo, fr_PF --> Polynésie Française, fr_PM -> St Pierre et Miquelon, fr_RE --> Réunion, # fr_SC --> Seychelles, fr_SN --> Sénégal, fr_RW --> Rwanda, fr_TD --> Tchad, fr_TG --> Togo # Si on a spécifiquement une locale en_EN, es_ES, de_DE ou # nl_NL, la fonction n'est pas exécutée if self.langue_locale not in ['en_EN', 'es_ES', 'de_DE', 'nl_NL', 'pt_PT']: # De même si la langue française est détectée, la # fonction n'est pas exécutée if self.langue_locale[0:2] != 'fr': self.langue_autre() def langue_autre(self): # ------------------------------------------------------- # Cette fonction sert à afficher l'interface d'EKD en anglais pour toutes les langues non gérées par EKD # ------------------------------------------------------- # Détection des répertoires langue gérés par EKD listeRepLocale = [os.path.basename(parcLoc) for parcLoc in glob.glob(self.pourDeb+'locale'+os.sep+'*') if '_' in parcLoc and len(parcLoc) == 27] listeRepLocale.sort() # Chemin interne langue d'EKD arborescence_nouvelle_langue = 'locale'+os.sep+self.langue_locale+os.sep+'LC_MESSAGES' # Supression du chemin du répertoire langue (avec lequel on travaille) if os.path.isdir(os.path.dirname(self.pourDeb+arborescence_nouvelle_langue)) is True: shutil.rmtree(os.path.dirname(self.pourDeb+arborescence_nouvelle_langue)) # L'arborescence de langue est crée os.makedirs(self.pourDeb+arborescence_nouvelle_langue, 0755) liste_langue_locale = [] for parcLocale in listeRepLocale: # Si les langues contenues dans self.langue_locale (les langues # officiellement gérées par EKD) sont différentes de la langue détectée ... if parcLocale != self.langue_locale: liste_langue_locale.append(self.langue_locale) # Si la liste contient au moins un élément, les fichiers .mo (compilés) sont copiés dans le nouveau répertoire langue # qui vient d'être crée. Cela permet d'afficher l'interface en anglais pour les langues non gérées par EKD. if len(liste_langue_locale) >= 1: shutil.copy(self.pourDeb+'locale'+os.sep+'en_EN'+os.sep+'LC_MESSAGES'+os.sep+'ekd.mo', self.pourDeb+arborescence_nouvelle_langue+os.sep+'ekd.mo') shutil.copy(self.pourDeb+'locale'+os.sep+'en_EN'+os.sep+'LC_MESSAGES'+os.sep+'ekdDoc.mo', self.pourDeb+arborescence_nouvelle_langue+os.sep+'ekdDoc.mo') # Appel de la classe main = GestionLanguesDeb()