mirror of
				https://github.com/qgis/QGIS.git
				synced 2025-11-04 00:04:25 -05:00 
			
		
		
		
	We were doing a deep search for "name" which happened for the component name _and_ and the developer name, which is in a deeper tag. Instead of doing a deep search, just look for the elements we care about among the component element's children. Fixes this error from appstreamcli: org.qgis.qgis.metainfo.xml E: org.qgis.qgis.desktop:88: tag-duplicated name (lang=de) E: org.qgis.qgis.desktop:88: tag-duplicated name (lang=hu) E: org.qgis.qgis.desktop:88: tag-duplicated name (lang=lt) E: org.qgis.qgis.desktop:88: tag-duplicated name (lang=nb) E: org.qgis.qgis.desktop:88: tag-duplicated name (lang=zh-Hans)
		
			
				
	
	
		
			128 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			128 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
#!/usr/bin/env python3
 | 
						|
"""
 | 
						|
/***************************************************************************
 | 
						|
                               ts2appinfo.py
 | 
						|
                              -------------------
 | 
						|
    begin                : 2018-09-24
 | 
						|
    copyright            : (C) 2018 by Jürgen E. Fischer
 | 
						|
    email                : jef at norbit dot de
 | 
						|
 ***************************************************************************/
 | 
						|
 | 
						|
/***************************************************************************
 | 
						|
 *                                                                         *
 | 
						|
 *   This program is free software; you can redistribute it and/or modify  *
 | 
						|
 *   it under the terms of the GNU General Public License as published by  *
 | 
						|
 *   the Free Software Foundation; either version 2 of the License, or     *
 | 
						|
 *   (at your option) any later version.                                   *
 | 
						|
 *                                                                         *
 | 
						|
 ***************************************************************************/
 | 
						|
"""
 | 
						|
 | 
						|
import sys
 | 
						|
import os
 | 
						|
from glob import glob
 | 
						|
from xml.etree import ElementTree as et
 | 
						|
from PyQt@QT_VERSION_MAJOR@.QtCore import QCoreApplication, QTranslator
 | 
						|
 | 
						|
strings = {}
 | 
						|
 | 
						|
d = et.parse('linux/org.qgis.qgis.appdata.xml.in')
 | 
						|
 | 
						|
r = d.getroot()
 | 
						|
valuesNeeded = ['name', 'summary', 'description']
 | 
						|
for c in r:
 | 
						|
    if c.tag in valuesNeeded:
 | 
						|
        if not c.attrib:
 | 
						|
            l = list(c)
 | 
						|
            t = c.text if not l else "".join([et.tostring(x).decode("utf-8") for x in l])
 | 
						|
            strings[t] = {}
 | 
						|
        else:
 | 
						|
            r.remove(c)
 | 
						|
 | 
						|
f = open("linux/org.qgis.qgis.desktop.in")
 | 
						|
lines = f.readlines()
 | 
						|
 | 
						|
for line in lines:
 | 
						|
    line = line.strip()
 | 
						|
    for prefix in ['Name', 'GenericName']:
 | 
						|
        if line.startswith(prefix + "="):
 | 
						|
            strings[line[len(prefix) + 1:]] = {}
 | 
						|
 | 
						|
f.close()
 | 
						|
 | 
						|
try:
 | 
						|
    argvb = list(map(os.fsencode, sys.argv))
 | 
						|
except AttributeError:
 | 
						|
    argvb = sys.argv
 | 
						|
 | 
						|
app = QCoreApplication(argvb)
 | 
						|
 | 
						|
for qm in sorted(glob(sys.argv[1] + "/output/i18n/qgis_*.qm")):
 | 
						|
    translator = QTranslator()
 | 
						|
    translator.load(qm)
 | 
						|
 | 
						|
    lang = qm[len(sys.argv[1] + "/output/i18n/qgis_"):-3]
 | 
						|
 | 
						|
    for s in strings:
 | 
						|
        translation = translator.translate("appinfo", s, "")
 | 
						|
        if translation in [s, '']:
 | 
						|
            continue
 | 
						|
        strings[s][lang] = translation
 | 
						|
 | 
						|
valuesOffered = ['name', 'summary']
 | 
						|
for c in r:
 | 
						|
    if c.tag in valuesOffered:
 | 
						|
        if c.attrib:
 | 
						|
            continue
 | 
						|
 | 
						|
        l = list(c)
 | 
						|
        s = c.text if not l else "".join([et.tostring(x).decode("utf-8") for x in l])
 | 
						|
 | 
						|
        for lang in strings[s]:
 | 
						|
            e = et.Element(c.tag, attrib={"xml:lang": lang})
 | 
						|
            e.text = strings[s][lang]
 | 
						|
            e.tail = c.tail
 | 
						|
            r.append(e)
 | 
						|
 | 
						|
# we need to do description separately because it's the <p> that we translate
 | 
						|
descriptionElement = r.find('description')
 | 
						|
descriptionString = None
 | 
						|
for c in descriptionElement.iter('p'):
 | 
						|
    descriptionString = et.tostring(c).decode("utf-8")
 | 
						|
 | 
						|
for lang in strings[descriptionString]:
 | 
						|
    translated = strings[descriptionString][lang]
 | 
						|
    try:
 | 
						|
        translatedElement = et.fromstring(translated)
 | 
						|
        translatedElement.attrib={"xml:lang": lang}
 | 
						|
        translatedElement.tail = "\n    "
 | 
						|
        descriptionElement.append(translatedElement)
 | 
						|
    except:
 | 
						|
        print("Skipping:", lang, translated)
 | 
						|
        continue
 | 
						|
 | 
						|
d.write(sys.argv[1] + "/org.qgis.qgis.appdata.xml", encoding="UTF-8", xml_declaration=True)
 | 
						|
 | 
						|
f = open(sys.argv[1] + "/org.qgis.qgis.desktop", "w", encoding="utf-8")
 | 
						|
 | 
						|
for line in lines:
 | 
						|
    skip = False
 | 
						|
    for prefix in ['Name', 'GenericName']:
 | 
						|
        if line.startswith(prefix + "="):
 | 
						|
            skip = True
 | 
						|
            f.write(line)
 | 
						|
 | 
						|
            t = line.strip()[len(prefix) + 1:]
 | 
						|
            for lang in strings[t]:
 | 
						|
                l = f"{prefix}[{lang}]={strings[t][lang]}\n"
 | 
						|
                f.write(l)
 | 
						|
 | 
						|
        elif line.startswith(prefix + "["):
 | 
						|
            skip = True
 | 
						|
            continue
 | 
						|
 | 
						|
    if not skip:
 | 
						|
        f.write(line)
 | 
						|
 | 
						|
f.close()
 |