mirror of
https://github.com/clementine-player/Clementine
synced 2024-12-23 16:28:19 +01:00
224c475b50
The desktop entry file, appdata file and installed icons are renamed to match the application ID for the benefit of Flatpak packaging.
130 lines
3.4 KiB
Python
130 lines
3.4 KiB
Python
#!/usr/bin/python2
|
|
import codecs
|
|
import glob
|
|
import logging
|
|
import os
|
|
import polib
|
|
import re
|
|
|
|
PO_GLOB = 'src/translations/*.po'
|
|
DESKTOP_PATH = 'dist/org.clementine_player.Clementine.desktop'
|
|
|
|
class ConfigParser(object):
|
|
"""
|
|
Better version of the ConfigParser from the stdlib that handles unicode.
|
|
"""
|
|
|
|
SECTION_RE = re.compile('^\[(.*)\]\s*$')
|
|
VALUE_RE = re.compile('^([^\s=]+)\s*=\s*(.*)')
|
|
|
|
def __init__(self, encoding='utf-8'):
|
|
self._sections = []
|
|
self.encoding = encoding
|
|
|
|
def read(self, filename):
|
|
with codecs.open(filename, 'r', self.encoding) as handle:
|
|
current_section = None
|
|
|
|
for line in handle:
|
|
match = self.SECTION_RE.match(line)
|
|
if match:
|
|
current_section = self._add_section(match.group(1))
|
|
continue
|
|
|
|
match = self.VALUE_RE.match(line)
|
|
if match:
|
|
current_section['items'].append(
|
|
(match.group(1), match.group(2).strip()))
|
|
continue
|
|
|
|
def _add_section(self, section_name):
|
|
section = {
|
|
'name': section_name,
|
|
'items': [],
|
|
}
|
|
self._sections.append(section)
|
|
return section
|
|
|
|
def _find_section(self, section_name):
|
|
return [
|
|
section
|
|
for section in self._sections
|
|
if section['name'] == section_name
|
|
][0]
|
|
|
|
def _find_item_value(self, section, key):
|
|
return [
|
|
item[1]
|
|
for item in section['items']
|
|
if item[0] == key
|
|
][0]
|
|
|
|
def sections(self):
|
|
return [x['name'] for x in self._sections]
|
|
|
|
def get(self, section_name, key):
|
|
try:
|
|
return self._find_item_value(self._find_section(section_name), key)
|
|
except IndexError:
|
|
return None
|
|
|
|
def set(self, section_name, key, value):
|
|
try:
|
|
section = self._find_section(section_name)
|
|
except IndexError:
|
|
section = self._add_section(section_name)
|
|
|
|
for index, (existing_key, _existing_value) in enumerate(section['items']):
|
|
if existing_key == key:
|
|
section['items'][index] = (key, value)
|
|
return
|
|
|
|
section['items'].append((key, value))
|
|
|
|
def write(self, filename):
|
|
with codecs.open(filename, 'w', self.encoding) as handle:
|
|
for section in self._sections:
|
|
handle.write('[%s]\n' % section['name'])
|
|
for key, value in section['items']:
|
|
handle.write('%s=%s\n' % (key, value))
|
|
|
|
handle.write('\n')
|
|
|
|
|
|
def main():
|
|
logging.basicConfig(level=logging.DEBUG,
|
|
format="%(asctime)s %(levelname)-7s %(message)s")
|
|
|
|
config_parser = ConfigParser()
|
|
config_parser.read(DESKTOP_PATH)
|
|
|
|
shortcuts = [
|
|
{
|
|
'section_name': section_name,
|
|
'original': config_parser.get(section_name, 'Name'),
|
|
}
|
|
for section_name in config_parser.sections()
|
|
if section_name.endswith('Shortcut Group')
|
|
]
|
|
|
|
for po_filename in glob.glob(PO_GLOB):
|
|
language = os.path.splitext(os.path.basename(po_filename))[0]
|
|
config_key = 'Name[%s]' % language
|
|
po_file = polib.pofile(po_filename)
|
|
|
|
logging.info('Reading language %s', po_filename)
|
|
|
|
for shortcut in shortcuts:
|
|
original = shortcut['original']
|
|
entry = po_file.find(original)
|
|
if entry is not None and entry.msgstr and entry.msgstr != original:
|
|
logging.info('Setting %s for %s to %s',
|
|
config_key, shortcut['section_name'], entry.msgstr)
|
|
config_parser.set(shortcut['section_name'], config_key, entry.msgstr)
|
|
|
|
config_parser.write(DESKTOP_PATH)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
main()
|