コード例 #1
0
def FusionneFichiers(code="en_GB"):
    # Lecture du fichier xlang
    fichier = shelve.open(UTILS_Fichiers.GetRepLang(u"%s.xlang" % code), "r")
    dictDonnees = {}
    for texte, traduction in fichier.items():
        if texte != "###INFOS###":
            dictDonnees[texte] = traduction
    fichier.close()

    # Lecture du fichier lang
    fichier = shelve.open(UTILS_Fichiers.GetRepLang(u"%s.lang" % code), "w")
    for texte, traduction in dictDonnees.items():
        fichier[texte] = traduction
    fichier.close()
    print("Fusion de %d traductions terminee !" % len(dictDonnees))
コード例 #2
0
ファイル: OL_Langues.py プロジェクト: tarachetatete/Noethys
    def GetTracks(self):
        """ Récupération des données """
        # Langues existantes
        dictLangues = {}
        for rep in (Chemins.GetStaticPath("Lang"), UTILS_Fichiers.GetRepLang()) :
            for nomFichier in os.listdir(rep) :
                if nomFichier.endswith("lang") :
                    code, extension = nomFichier.split(".")
                    fichier = shelve.open(os.path.join(rep, nomFichier), "r")
                    dictInfos = fichier["###INFOS###"]
                    nom = dictInfos["nom_langue"]
                    code = dictInfos["code_langue"]
                    nbreTextes = len(fichier) - 1
                    fichier.close()

                    if dictLangues.has_key(code) == False :
                        dictLangues[code] = {"nom" : nom, "initial" : 0, "perso" : 0}

                    if extension == "lang" :
                        dictLangues[code]["initial"] = nbreTextes
                    else :
                        dictLangues[code]["perso"] = nbreTextes

        # Remplissage
        listeListeView = []
        for code, valeurs in dictLangues.iteritems() :
            dictDonnees = {"code" : code, "initial" : valeurs["initial"], "perso" : valeurs["perso"], "nom" : valeurs["nom"]}
            listeListeView.append(Track(dictDonnees))
        
        return listeListeView
コード例 #3
0
    def OnBoutonOk(self, event):
        # Récupération des paramètres
        nom_langue = self.ctrl_nom_langue.GetValue()
        code_langue = self.ctrl_code_langue.GetValue()

        # Récupération des traductions perso
        dictTraductions = self.ctrl_traductions.GetDictTraductionsPerso()

        # Création du fichier de traduction perso
        nomFichier = UTILS_Fichiers.GetRepLang(u"%s.xlang" % code_langue)
        if os.path.isfile(nomFichier):
            flag = "w"
        else:
            flag = "n"
        fichier = shelve.open(nomFichier, flag)
        fichier.clear()

        # Remplissage du fichier
        fichier["###INFOS###"] = {
            "nom_langue": nom_langue,
            "code_langue": code_langue
        }
        for texte, traduction in dictTraductions.iteritems():
            fichier[texte] = traduction

        # Clôture du fichier
        fichier.close()

        # Fermeture
        self.EndModal(wx.ID_OK)
コード例 #4
0
    def OnBoutonEnvoyer(self, event):
        # Récupération des commentaires
        commentaires = self.ctrl_commentaires.GetValue()

        # Récupération des fichiers à envoyer
        listeSelections = self.ctrl_fichiers.GetCheckedStrings()
        listeFichiers = []
        for nomFichier in listeSelections:
            listeFichiers.append(
                UTILS_Fichiers.GetRepLang(u"%s.xlang" % nomFichier))

        if len(listeFichiers) == 0:
            dlg = wx.MessageDialog(
                self,
                _(u"Vous devez obligatoirement cocher un ou plusieurs fichiers de traduction personnalisés à envoyer !"
                  ), _(u"Erreur"), wx.OK | wx.ICON_EXCLAMATION)
            dlg.ShowModal()
            dlg.Destroy()
            return False

        # Confirmation
        dlg = wx.MessageDialog(
            self, _(u"Confirmez-vous l'envoi de ce message ?"),
            _(u"Envoi d'une traduction"),
            wx.YES_NO | wx.NO_DEFAULT | wx.CANCEL | wx.ICON_INFORMATION)
        reponse = dlg.ShowModal()
        dlg.Destroy()
        if reponse != wx.ID_YES:
            return False

        # Envoi de l'email
        resultat = self.EnvoyerEmail(commentaires, listeFichiers)
        if resultat == True:
            self.EndModal(wx.ID_OK)
コード例 #5
0
    def __init__(self, parent, texteRapport=u""):
        wx.Dialog.__init__(self, parent, -1, style=wx.DEFAULT_DIALOG_STYLE|wx.RESIZE_BORDER|wx.MAXIMIZE_BOX|wx.MINIMIZE_BOX)
        self.parent = parent
        self.texteRapport = texteRapport
        
        self.SetTitle(_(u"Envoyer un fichier de traduction"))
        self.label_ligne_1 = wx.StaticText(self, wx.ID_ANY, _(u"Vos fichiers seront envoyés pour validation au concepteur de Noethys\npuis intégrés dans la prochaine version du logiciel. En effectuant cette\ndémarche, vous acceptez que votre traduction soit diffusée auprès de\nla communauté sous la licence libre GNU GPL."))
        self.label_ligne_2 = wx.StaticText(self, wx.ID_ANY, _(u"Cochez le ou les fichiers de traduction à envoyer :"))
        
        listeFichiers = os.listdir(UTILS_Fichiers.GetRepLang())
        listeFichiersTemp = []
        for nomFichier in listeFichiers :
            if nomFichier.endswith(".xlang") :
                listeFichiersTemp.append(nomFichier[:-6])
        self.ctrl_fichiers = wx.CheckListBox(self, -1, choices=listeFichiersTemp)
        
        self.label_ligne_3 = wx.StaticText(self, wx.ID_ANY, _(u"Vous pouvez ajouter ci-dessous des commentaires, remarques ou \ncompléments d'informations avant de l'envoyer au concepteur de Noethys."))
        self.ctrl_commentaires = wx.TextCtrl(self, wx.ID_ANY, "", style=wx.TE_MULTILINE)
        
        self.bouton_aide = CTRL_Bouton_image.CTRL(self, texte=_(u"Aide"), cheminImage="Images/32x32/Aide.png")
        self.bouton_envoyer = CTRL_Bouton_image.CTRL(self, texte=_(u"Envoyer l'Email"), cheminImage="Images/32x32/Emails_exp.png")
        self.bouton_annuler = CTRL_Bouton_image.CTRL(self, texte=_(u"Annuler"), cheminImage="Images/32x32/Annuler.png")

        self.__set_properties()
        self.__do_layout()

        self.Bind(wx.EVT_BUTTON, self.OnBoutonAide, self.bouton_aide)
        self.Bind(wx.EVT_BUTTON, self.OnBoutonEnvoyer, self.bouton_envoyer)
        self.Bind(wx.EVT_BUTTON, self.OnBoutonAnnuler, self.bouton_annuler)
コード例 #6
0
ファイル: OL_Langues.py プロジェクト: nicolas-pantel/Noethys
    def Supprimer(self, event):
        if len(self.Selection()) == 0:
            dlg = wx.MessageDialog(
                self,
                _(u"Vous n'avez sélectionné aucun fichier de traduction à supprimer dans la liste !"
                  ), _(u"Erreur de saisie"), wx.OK | wx.ICON_EXCLAMATION)
            dlg.ShowModal()
            dlg.Destroy()
            return
        track = self.Selection()[0]

        if track.perso == 0:
            dlg = wx.MessageDialog(
                self,
                _(u"Il n'y a aucune traduction personnalisée à supprimer !"),
                _(u"Erreur"), wx.OK | wx.ICON_EXCLAMATION)
            dlg.ShowModal()
            dlg.Destroy()
            return

        dlg = wx.MessageDialog(
            self,
            _(u"Souhaitez-vous vraiment supprimer ce fichier de traduction personnalisé (%d traductions) ?\n\nAttention, toute suppression est irréversible."
              ) % track.perso, _(u"Suppression"),
            wx.YES_NO | wx.NO_DEFAULT | wx.CANCEL | wx.ICON_INFORMATION)
        if dlg.ShowModal() == wx.ID_YES:
            nomFichier = UTILS_Fichiers.GetRepLang(u"%s.xlang" % track.code)
            os.remove(nomFichier)
            self.MAJ()
        dlg.Destroy()
コード例 #7
0
    def __init__(self, parent):
        wx.Panel.__init__(self, parent, id=-1, style=wx.TAB_TRAVERSAL)

        self.staticbox_staticbox = wx.StaticBox(self, -1, _(u"Interface*"))

        # Thème
        self.liste_labels_theme = []
        self.liste_codes_theme = []
        for code, label in UTILS_Interface.THEMES:
            self.liste_labels_theme.append(label)
            self.liste_codes_theme.append(code)

        self.label_theme = wx.StaticText(self, -1, _(u"Thème :"))
        self.ctrl_theme = wx.Choice(self, -1, choices=self.liste_labels_theme)
        self.ctrl_theme.SetSelection(0)

        # Langue
        self.liste_labels_langue = [
            u"Français (par défaut)",
        ]
        self.liste_codes_langue = [
            None,
        ]

        for rep in (Chemins.GetStaticPath("Lang"),
                    UTILS_Fichiers.GetRepLang()):
            for nomFichier in os.listdir(rep):
                if nomFichier.endswith("lang"):
                    code, extension = nomFichier.split(".")
                    fichier = shelve.open(os.path.join(rep, nomFichier), "r")
                    dictInfos = fichier["###INFOS###"]
                    nom = dictInfos["nom_langue"]
                    code = dictInfos["code_langue"]
                    fichier.close()

                    if code not in self.liste_codes_langue:
                        self.liste_codes_langue.append(code)
                        self.liste_labels_langue.append(nom)

        self.label_langue = wx.StaticText(self, -1, _(u"Langue :"))
        self.ctrl_langue = wx.Choice(self,
                                     -1,
                                     choices=self.liste_labels_langue)
        self.ctrl_langue.SetSelection(0)

        self.__set_properties()
        self.__do_layout()

        # Init
        self.Importation()
コード例 #8
0
 def GetTraductionsExistantes(self):
     """ Recherche le fichier de langage par défaut ".lang" puis un éventuel fichier perso ".xlang" """
     if self.code == None: return {}, {}
     dictTraductionsInitiales = {}
     dictTraductionsPerso = {}
     for extension, dictTemp in [("lang", dictTraductionsInitiales),
                                 ("xlang", dictTraductionsPerso)]:
         nomFichier = UTILS_Fichiers.GetRepLang(u"%s.%s" %
                                                (self.code, extension))
         if os.path.isfile(nomFichier):
             fichier = shelve.open(nomFichier, "r")
             for key, valeur in fichier.items():
                 dictTemp[key] = valeur
             fichier.close()
     return dictTraductionsInitiales, dictTraductionsPerso
コード例 #9
0
ファイル: OL_Traductions.py プロジェクト: neoclust/Noethys
    def GetTraductionsExistantes(self):
        """ Recherche le fichier de langage par défaut ".lang" puis un éventuel fichier perso ".xlang" """
        if self.code == None: return {}, {}
        dictTraductionsInitiales = {}
        dictTraductionsPerso = {}

        for extension, rep, dictTemp in [
            ("lang", Chemins.GetStaticPath("Lang"), dictTraductionsInitiales),
            ("xlang", UTILS_Fichiers.GetRepLang(), dictTraductionsPerso)
        ]:
            nomFichier = os.path.join(rep, u"%s.%s" % (self.code, extension))
            if os.path.isfile(nomFichier):
                data = UTILS_Json.Lire(nomFichier, conversion_auto=True)
                for key, valeur in data.items():
                    dictTemp[key] = valeur
        return dictTraductionsInitiales, dictTraductionsPerso
コード例 #10
0
def ChargeTraduction(nom=""):
    """ Charge un fichier de langage """
    global DICT_TRADUCTIONS
    dictTraductions = {}

    # Recherche le fichier de langage par défaut ".lang" puis un éventuel fichier perso ".xlang"
    for extension in ("lang", "xlang"):
        nomFichier = UTILS_Fichiers.GetRepLang(u"%s.%s" % (nom, extension))
        if os.path.isfile(nomFichier):
            fichier = shelve.open(nomFichier, "r")
            for key, valeur in fichier.items():
                key = key.decode("iso-8859-15")
                dictTraductions[key] = valeur
            fichier.close()

    # Mémorise les traductions
    DICT_TRADUCTIONS = dictTraductions
コード例 #11
0
ファイル: OL_Langues.py プロジェクト: tarachetatete/Noethys
    def Exporter(self, event):
        """ Exporter le modèle sélectionné """
        if len(self.Selection()) == 0 :
            dlg = wx.MessageDialog(self, _(u"Vous n'avez sélectionné aucune langue dans la liste !"), _(u"Erreur"), wx.OK | wx.ICON_EXCLAMATION)
            dlg.ShowModal()
            dlg.Destroy()
            return
        track = self.Selection()[0]
        
        if track.perso == 0 :
            dlg = wx.MessageDialog(self, _(u"Il n'y a aucune traduction personnalisée à exporter !"), _(u"Erreur"), wx.OK | wx.ICON_EXCLAMATION)
            dlg.ShowModal()
            dlg.Destroy()
            return

        nomFichier = track.code + ".xlang"
        
        # Demande le chemin pour la sauvegarde du fichier
        standardPath = wx.StandardPaths.Get()
        dlg = wx.FileDialog(self, message=_(u"Envoyer le fichier de traduction personnalisé vers..."),
                            defaultDir = standardPath.GetDocumentsDir(), defaultFile=nomFichier,
                            wildcard="Fichier de traduction (*.xlang)|*.xlang", style=wx.SAVE)
        if dlg.ShowModal() == wx.ID_OK:
            path = dlg.GetPath()
        else :
            path = None
        dlg.Destroy()
        if path == None :
            return

        # Le fichier de destination existe déjà :
        if os.path.isfile(path) == True :
            dlg = wx.MessageDialog(None, _(u"Un fichier portant ce nom existe déjà. \n\nVoulez-vous le remplacer ?"), "Attention !", wx.YES_NO | wx.NO_DEFAULT | wx.ICON_EXCLAMATION)
            if dlg.ShowModal() == wx.ID_NO :
                return False
                dlg.Destroy()
            else:
                dlg.Destroy()

        # Exportation
        shutil.copyfile(UTILS_Fichiers.GetRepLang(nomFichier), path)

        # Confirmation
        dlg = wx.MessageDialog(self, _(u"Le fichier de traduction a été exporté avec succès !"), _(u"Exportation"), wx.OK | wx.ICON_INFORMATION)
        dlg.ShowModal()
        dlg.Destroy()
コード例 #12
0
    def MAJ(self):
        self.listeLabels = []
        self.listeDonnees = []

        # Recherche les fichiers de langues existants
        listeCodes = []
        for rep in (Chemins.GetStaticPath("Lang"),
                    UTILS_Fichiers.GetRepLang()):
            for nomFichier in os.listdir(rep):
                if nomFichier.endswith("lang"):
                    code, extension = nomFichier.split(".")
                    fichier = shelve.open(os.path.join(rep, nomFichier), "r")

                    # Lecture des caractéristiques
                    dictInfos = fichier["###INFOS###"]
                    nom = dictInfos["nom_langue"]
                    code = dictInfos["code_langue"]

                    # Lecture des textes
                    listeTextes = []
                    for texte, traduction in fichier.iteritems():
                        if texte != "###INFOS###":
                            listeTextes.append(texte)

                    # Fermeture du fichier
                    fichier.close()

                    label = u"%s (%s)" % (nom, code)
                    if code not in listeCodes:
                        listeCodes.append(code)
                        self.listeLabels.append(label)
                        self.listeDonnees.append({
                            "nom": nom,
                            "code": code,
                            "textes": listeTextes
                        })

        # Remplissage du contrôle
        if len(self.listeLabels) == 0:
            self.Enable(False)
        self.SetItems(self.listeLabels)
コード例 #13
0
    def OnBoutonOk(self, event):
        # Récupération des paramètres
        nom_langue = self.ctrl_nom_langue.GetValue()
        code_langue = self.ctrl_code_langue.GetValue()

        # Récupération des traductions perso
        dictTraductions = self.ctrl_traductions.GetDictTraductionsPerso()

        # Création du fichier de traduction perso
        nomFichier = UTILS_Fichiers.GetRepLang(u"%s.xlang" % code_langue)
        data = {}
        data["###INFOS###"] = {
            "nom_langue": nom_langue,
            "code_langue": code_langue
        }
        for texte, traduction in dictTraductions.items():
            data[texte] = traduction
        UTILS_Json.Ecrire(nomFichier, data=data)

        # Fermeture
        self.EndModal(wx.ID_OK)
コード例 #14
0
    def OnBoutonImporter(self, event):
        # Récupération de la langue
        dictLangue = self.ctrl_langues.GetCode()
        if dictLangue == None:
            dlg = wx.MessageDialog(
                self,
                _(u"Vous devez sélectionner une langue dans la liste !"),
                _(u"Erreur"), wx.OK | wx.ICON_EXCLAMATION)
            dlg.ShowModal()
            dlg.Destroy()
            return

        nom_langue = dictLangue["nom"]
        code_langue = dictLangue["code"]
        textes_langue = dictLangue["textes"]

        # Récupération des fichiers
        fichier_original = self.ctrl_fichier_importer_original.GetValue()
        if fichier_original == "":
            dlg = wx.MessageDialog(
                self,
                _(u"Vous devez sélectionner un fichier de textes originaux !"
                  ), _(u"Erreur"), wx.OK | wx.ICON_EXCLAMATION)
            dlg.ShowModal()
            dlg.Destroy()
            return

        fichier_traduction = self.ctrl_fichier_importer_traduction.GetValue()
        if fichier_traduction == "":
            dlg = wx.MessageDialog(
                self,
                _(u"Vous devez sélectionner un fichier de textes traduits !"),
                _(u"Erreur"), wx.OK | wx.ICON_EXCLAMATION)
            dlg.ShowModal()
            dlg.Destroy()
            return

        # Lecture des textes
        fichier = open(fichier_original, "r")
        lignesOriginal = fichier.readlines()
        fichier.close()

        fichier = open(fichier_traduction, "r")
        lignesTraduction = fichier.readlines()
        fichier.close()

        if len(lignesOriginal) != len(lignesTraduction):
            dlg = wx.MessageDialog(
                self,
                _(u"Le nombre de lignes des deux fichiers doit être identique !"
                  ), _(u"Erreur"), wx.OK | wx.ICON_EXCLAMATION)
            dlg.ShowModal()
            dlg.Destroy()
            return

        # Demande de confirmation
        dlg = wx.MessageDialog(
            None,
            _(u"Confirmez-vous l'insertion de %d textes traduits dans le fichier '%s' ?"
              ) % (len(lignesOriginal), nom_langue), "Confirmation",
            wx.YES_NO | wx.YES_DEFAULT | wx.ICON_EXCLAMATION)
        if dlg.ShowModal() == wx.ID_NO:
            return False
            dlg.Destroy()
        else:
            dlg.Destroy()

        # Fusion des traductions
        dictTraductions = {}
        indexLigne = 0
        for texte in lignesOriginal:
            if len(texte) > 0:
                dictTraductions[texte[:-1]] = lignesTraduction[indexLigne][:-1]
            indexLigne += 1

        # Création du fichier de traduction perso
        nomFichier = UTILS_Fichiers.GetRepLang(u"%s.xlang" % code_langue)
        if os.path.isfile(nomFichier):
            flag = "w"
        else:
            flag = "n"
        fichier = shelve.open(nomFichier, flag)

        # Remplissage du fichier
        fichier["###INFOS###"] = {
            "nom_langue": nom_langue,
            "code_langue": code_langue
        }
        for texte, traduction in dictTraductions.iteritems():
            fichier[texte] = traduction
            if "Bienvenue" in texte:
                print texte, " --> ", (traduction, )
        # Clôture du fichier
        fichier.close()

        # Confirmation
        dlg = wx.MessageDialog(
            self,
            _(u"L'importation des traductions s'est déroulée avec succès !"
              ), _(u"Succès"), wx.OK | wx.ICON_INFORMATION)
        dlg.ShowModal()
        dlg.Destroy()
コード例 #15
0
ファイル: OL_Langues.py プロジェクト: tarachetatete/Noethys
    def Importer(self, event):
        """ Importer un fichier de langue """
        # Ouverture de la fenêtre de dialogue
        wildcard = "Fichiers de langue (*.lang, *.xlang)|*.lang;*.xlang|Tous les fichiers (*.*)|*.*"
        sp = wx.StandardPaths.Get()
        dlg = wx.FileDialog(
            self, message=_(u"Choisissez un fichier de langue à importer"),
            defaultDir=sp.GetDocumentsDir(), 
            defaultFile="",
            wildcard=wildcard,
            style=wx.OPEN
            )
        if dlg.ShowModal() == wx.ID_OK:
            nomFichierCourt = dlg.GetFilename()
            nomFichierLong = dlg.GetPath()
            dlg.Destroy()
        else:
            dlg.Destroy()
            return
        
        # Vérifie si un fichier existe déjà
        if os.path.isfile(UTILS_Fichiers.GetRepLang(nomFichierCourt)) == False :
            shutil.copyfile(nomFichierLong, UTILS_Fichiers.GetRepLang(nomFichierCourt))
            self.MAJ()
        else :
            dlg = DLG_Messagebox.Dialog(self, titre=_(u"Importer"), introduction=_(u"Ce fichier est déjà présent !"), detail=None, conclusion=_(u"Souhaitez-vous le remplacer ou les fusionner ?"), icone=wx.ICON_EXCLAMATION, boutons=[_(u"Fusionner"), _(u"Remplacer"), _(u"Annuler")])
            reponse = dlg.ShowModal()
            dlg.Destroy()
            
            if reponse == 0 : 
                # Fusionner
                dlg = wx.MessageDialog(self, _(u"Souhaitez-vous vraiment fusionner les deux fichiers ?"), _(u"Confirmation"), wx.YES_NO | wx.NO_DEFAULT | wx.ICON_QUESTION)
                reponse = dlg.ShowModal()
                dlg.Destroy()
                if reponse == wx.ID_NO :
                    return
                
                # Lecture des 2 fichiers
                dictDonnees = {}
                for nomFichier in [UTILS_Fichiers.GetRepLang(nomFichierCourt), nomFichierLong] :
                    fichier = shelve.open(nomFichier, "r")
                    for key, valeur in fichier.iteritems() :
                        dictDonnees[key] = valeur
                    fichier.close()
                
                # Ecriture du fichier final
                nomFichier = UTILS_Fichiers.GetRepLang(nomFichierCourt)
                if os.path.isfile(nomFichier) :
                    flag = "w"
                else :
                    flag = "n"
                fichier = shelve.open(nomFichier, flag)
                fichier.clear() 
                for key, valeur in dictDonnees.iteritems() :
                    fichier[key] = valeur
                fichier.close()
                self.MAJ()

                dlg = wx.MessageDialog(self, _(u"Le fichier a été importé avec succès !"), _(u"Confirmation"), wx.OK | wx.ICON_INFORMATION)
                dlg.ShowModal()
                dlg.Destroy()

            if reponse == 1 :
                # Remplacer
                dlg = wx.MessageDialog(self, _(u"Souhaitez-vous vraiment remplacer le fichier ?"), _(u"Confirmation"), wx.YES_NO | wx.NO_DEFAULT | wx.ICON_QUESTION)
                reponse = dlg.ShowModal()
                dlg.Destroy()
                if reponse == wx.ID_NO :
                    return
                
                # Copie du fichier vers le répertoire Lang
                os.remove(UTILS_Fichiers.GetRepLang(nomFichierCourt))
                shutil.copyfile(nomFichierLong, UTILS_Fichiers.GetRepLang(nomFichierCourt))
                self.MAJ()
 
                dlg = wx.MessageDialog(self, _(u"Le fichier a été importé avec succès !"), _(u"Confirmation"), wx.OK | wx.ICON_INFORMATION)
                dlg.ShowModal()
                dlg.Destroy()
               
            if reponse == 2 :
                return False