Changeset 5103 for devtools


Ignore:
Timestamp:
Jun 6, 2017, 6:11:39 PM (3 years ago)
Author:
Juanma
Message:

added fix xml option

File:
1 edited

Legend:

Unmodified
Added
Removed
  • devtools/metadata_extract_locale2po/metadata_xml2po.py

    r5100 r5103  
    11#!/usr/bin/env python3
    22#metadata_xml2po.py
    3 #This shell scans an svn repo and generates a .po file with all the descriptions, summarys..etc.. founded
    4 #
     3#This shell has two work modes:
     4# - Reads a folder and its subfolders and generates a .po file with all the descriptions, summaries..etc.. founded on the metainfo folders
     5# - Updates the xml files of a folder (and its subfolders) with a given po
     6
    57import os
    68import sys
     
    1113        global dbg
    1214        if dbg==1:
    13                 print(str(msg)+"\n")
     15                print(str(msg))
    1416
    1517def usage_help():
     
    1921        print("Options:")
    2022        print("\t --debug|-d -> Enables debug mode")
     23        print("\t --xmlfix|-x -> When exporting fixes the original texts from xml files replacing \" with \' and \\n with spaces")
    2124        print("\t --suffix|-s [suffix] -> Appends \"suffix\" to generated files")
    2225        print("")
     
    2831        global wrkDir
    2932        global poFile
    30         global sufix
    31         argList={"--export":"export","-e":"export","--import":"import","-i":"import","-d":"debug","--debug":"debug","--suffix":"suffix","-s":"suffix"}
     33        global suffix
     34        global xmlFix
     35        sfx=0
     36        argList={"--export":"export","-e":"export","--import":"import","-i":"import","-d":"debug","--debug":"debug","--suffix":"suffix","-s":"suffix","-x":"xmlfix","--xmlfix":"correct"}
    3237        args=sys.argv[1:]
    33         sfx=0
    3438        for arg in args:
    3539                if sfx:
    36                         sufix=arg
     40                        suffix=arg
    3741                elif arg in argList.keys():
    3842                        if argList[arg]=='debug':
    3943                                global dbg
    4044                                dbg=1
     45                                _debug("Debug enabled")
    4146                        elif argList[arg]=='suffix':
    4247                                sfx=1
     48                        elif argList[arg]=='xmlfix':
     49                                xmlFix=1
    4350                        else:
    4451                                mode=argList[arg]
     
    5663                for subdir in dirs:
    5764                        if subdir.endswith("metainfo") and "fuentes/llx-resources" in basedir:
     65                                _debug(("Adding %s to listdir")%(basedir+'/'+subdir))
    5866                                #Look for the xml
    5967                                candidatePaths.append(basedir+"/"+subdir)
     
    6169#def get_package_dirs
    6270
    63 ##EXPORT
    6471def generate_tmp_po(candidatePaths,outputFile):
     72        global xmlFix
    6573        for path in candidatePaths:
    6674                dirContent = os.listdir(path)
     
    7987                                                                        msgid=str(xmlDesc.text).replace("\"","\'")
    8088                                                                        msgid=str(msgid).replace("\n"," ")
     89                                                                        xmlDesc.text=msgid
    8190                                                                        msgIdList.append(msgid)
    8291                                                                else:
     
    8695                                                                msgid=str(element.text).replace("\"","\'")
    8796                                                                msgid=str(msgid).replace("\n"," ")
     97                                                                element.text=msgid
    8898                                                                msgIdList.append(msgid)
    8999                                                        else:
    90100                                                                save_locale(element.attrib['{http://www.w3.org/XML/1998/namespace}lang'],msgid,element.text)
     101                                #Corrects the xml replacing " with ' and \n with spaces
     102                                if xmlFix:
     103                                        _debug(("Attempting to fix the xmlFile %s")%(xmlFile))
     104                                        xml.write(path+'/'+xmlFile)
    91105                        except Exception as e:
    92106                                print(str(e))
     
    107121
    108122def print_locale():
    109         global sufix
     123        global suffix
    110124        for msgId in msgIdList:
    111125                #Open locale po and append the info
    112126                for localization in localeSet:
    113                         f=open(outputFile+"_"+localization+".po"+sufix,'a')
     127                        f=open(outputFile+"_"+localization+".po"+suffix,'a')
    114128                        if f.tell()==0:
    115129                                f.write("msgid \"\"\nmsgstr \"\"\n\"Content-Type: text/plain; charset=utf-8\"\n")
     
    138152        fileEncoding=PO.detect_encoding(poFile)
    139153        poDict={}
    140         _debug("Loading po "+poFile+" with encoding "+fileEncoding)
     154        _debug(("Loading po %s with %s encoding")%(poFile,fileEncoding))
    141155        po = PO.pofile(poFile,encoding=fileEncoding)
    142156        for entry in po:
     
    157171
    158172def merge_translations(candidatePaths,locale):
    159         global sufix
     173        global suffix
    160174        for path in candidatePaths:
    161175                dirContent = os.listdir(path)
     
    174188                                                                translationDict=get_translated_msgid(xmlDesc)
    175189                                                                break
    176                                                 #2dn loop, modify or add translations
     190                                                #2dn loop, modify translations for descriptions
    177191                                                for xmlDesc in element:
    178192                                                        if not (xmlDesc.attrib):
    179193                                                                continue
    180                                                         #Modify translation
    181                                                         localeTrans=xmlDesc.attrib['{http://www.w3.org/XML/1998/namespace}lang']
    182                                                         if localeTrans in translationDict.keys():
    183                                                                 translation=translationDict[localeTrans]
    184                                                                 if translation:
    185                                                                         xmlDesc.text=translation
    186                                                                 del translationDict[localeTrans]
     194                                                        modify_translation(xmlDesc,translationDict)
    187195                                                #Generate new translations
    188196                                                for locale,translation in translationDict.items():
     
    192200                                                        translationDict=get_translated_msgid(element)
    193201                                                else:
    194                                                         #Modify translation
    195                                                         localeTrans=element.attrib['{http://www.w3.org/XML/1998/namespace}lang']
    196                                                         if localeTrans in translationDict.keys():
    197                                                                 translation=translationDict[localeTrans]
    198                                                                 if translation:
    199                                                                         element.text=translation
    200                                                                 del translationDict[localeTrans]
     202                                                        modify_translation(element,translationDict)
    201203                                #Generate new translations
    202204                                for locale,translation in translationDict.items():
     
    204206                                                continue
    205207                                        add_new_translation(xmlRoot,tag,translation)
    206                                 xml.write(xmlFile+sufix,encoding=fileEncoding)
     208                                xml.write(path+'/'+xmlFile+suffix,encoding=fileEncoding)
    207209
    208210def get_translated_msgid(element):
     
    211213        translationDict=get_translations(msgid)
    212214        return translationDict
     215#def get_translated_msgid
     216
     217def modify_translation(element,translationDict):
     218        _debug(("Modifying %s translation")%(locale))
     219        translation=element.text
     220        localeTrans=element.attrib['{http://www.w3.org/XML/1998/namespace}lang']
     221        if localeTrans in translationDict.keys():
     222                translation=translationDict[localeTrans]
     223                if translation:
     224                        element.text=translation
     225                del translationDict[localeTrans]
     226        return (translation)
     227#def modify_translation
    213228
    214229def add_new_translation(element,tag,text):
     
    218233                newDesc.set('xml:lang',locale)
    219234                newDesc.text=text
     235                _debug(("Added new tag %s with %s translation")%(tag,locale))
     236#def add_new_translation
    220237
    221238#### MAIN PROGRAM ####
    222239dbg=0
    223 sufix=''
     240xmlFix=0
     241suffix='_new'
    224242fileEncoding=''
    225243mode=''
     
    242260        load_po(poFile,locale)
    243261        merge_translations(pathList,locale)
    244         print("Xml imported in dirs "+str(pathList))
     262        print("Updated metadata xml in "+str(pathList))
Note: See TracChangeset for help on using the changeset viewer.