1
0
mirror of https://github.com/clementine-player/Clementine synced 2024-12-23 16:28:19 +01:00
Clementine-audio-player-Mac.../dist/update_desktop_languages.py
Robin Lee 224c475b50 Rename multiple files to match the application ID
The desktop entry file, appdata file and installed icons are renamed to
match the application ID for the benefit of Flatpak packaging.
2021-07-20 11:21:05 +01:00

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()