2017-11-06 14:31:08 +03:00
|
|
|
#!/usr/bin/env python3
|
|
|
|
|
|
|
|
# Author: Torsten Grote
|
|
|
|
# License: GPLv3 or later
|
|
|
|
# copied on 2017/11/06 from https://github.com/grote/Transportr/blob/master/fastlane/generate_metadata.py
|
|
|
|
# adapted by Tobias Kaminsky
|
|
|
|
|
2017-12-12 13:20:35 +03:00
|
|
|
import codecs
|
2017-11-06 14:31:08 +03:00
|
|
|
import os
|
|
|
|
import shutil
|
|
|
|
from xml.etree import ElementTree
|
|
|
|
|
2022-03-11 13:16:42 +03:00
|
|
|
XML_PATH = '../../app/src/main/res'
|
|
|
|
METADATA_PATH = '../../app/src/generic/fastlane/metadata/android/'
|
|
|
|
METADATA_DEV_PATH = '../../app/src/versionDev/fastlane/metadata/android/'
|
2017-11-06 14:31:08 +03:00
|
|
|
DEFAULT_LANG = 'en-US'
|
|
|
|
LANG_MAP = {
|
|
|
|
'values': 'en-US',
|
|
|
|
'values-en-rGB': 'en-GB',
|
|
|
|
'values-ca': 'ca',
|
|
|
|
'values-cs': 'cs-CZ',
|
|
|
|
'values-de': 'de-DE',
|
|
|
|
'values-es': 'es-ES',
|
|
|
|
'values-fr': 'fr-FR',
|
|
|
|
'values-hu': 'hu-HU',
|
|
|
|
'values-it': 'it-IT',
|
|
|
|
'values-pt-rBR': 'pt-BR',
|
|
|
|
'values-pt-rPT': 'pt-PT',
|
|
|
|
'values-ta': 'ta-IN',
|
|
|
|
'values-sv': 'sv-SE',
|
|
|
|
'values-sq-rAL': 'sq-AL',
|
2017-11-06 14:46:50 +03:00
|
|
|
'values-sq-rMK': 'sq-MK',
|
|
|
|
'values-iw-rIL': 'iw-IL',
|
|
|
|
'values-ar': 'ar-AR',
|
|
|
|
'values-bg-rBG': 'bg-BG',
|
|
|
|
'values-da': 'da-DK',
|
|
|
|
'values-fi-rFI': 'fi-FI',
|
|
|
|
'values-gl-rES': 'gl-ES',
|
|
|
|
'values-tr': 'tr-TR',
|
|
|
|
'values-uk': 'uk-UK',
|
|
|
|
'values-vi': 'vi-VI',
|
|
|
|
'values-ro': 'ro-RO',
|
|
|
|
'values-ou': 'ru-RU',
|
|
|
|
'values-sr': 'sr-SR',
|
|
|
|
'values-pl': 'pl-PL',
|
|
|
|
'values-el': 'el-GR',
|
|
|
|
'values-ko': 'ko-KR',
|
|
|
|
'values-nl': 'nl-NL',
|
|
|
|
'values-ja': 'ja-JP',
|
|
|
|
'values-no-rNO': 'no-NO',
|
|
|
|
'values-eu': 'eu-ES',
|
|
|
|
'values-lt-rLT': 'lt-LT',
|
|
|
|
'values-zh-rKN': 'zh-HK',
|
|
|
|
'values-zk': 'zk-CN',
|
|
|
|
'values-is': 'is-IS',
|
|
|
|
'values-id': 'id-ID',
|
|
|
|
'values-cs-rCZ': 'cs-CZ',
|
|
|
|
'values-sl': 'sl-SL',
|
2017-11-06 14:31:08 +03:00
|
|
|
'values-fa': 'fa-FA'
|
|
|
|
}
|
|
|
|
|
|
|
|
PATH = os.path.dirname(os.path.realpath(__file__))
|
|
|
|
|
|
|
|
|
|
|
|
def main():
|
|
|
|
path = os.path.join(PATH, XML_PATH)
|
|
|
|
for entry in os.listdir(path):
|
|
|
|
directory = os.path.join(path, entry)
|
|
|
|
if not os.path.isdir(directory) or entry not in LANG_MAP.keys():
|
|
|
|
continue
|
|
|
|
strings_file = os.path.join(directory, 'strings.xml')
|
|
|
|
if not os.path.isfile(strings_file):
|
|
|
|
print("Error: %s does not exist" % strings_file)
|
|
|
|
continue
|
|
|
|
|
|
|
|
print()
|
|
|
|
print(LANG_MAP[entry])
|
|
|
|
print("Parsing %s..." % strings_file)
|
|
|
|
e = ElementTree.parse(strings_file).getroot()
|
|
|
|
short_desc = e.find('.//string[@name="store_short_desc"]')
|
|
|
|
full_desc = e.find('.//string[@name="store_full_desc"]')
|
2017-11-13 11:42:21 +03:00
|
|
|
short_dev_desc = e.find('.//string[@name="store_short_dev_desc"]')
|
|
|
|
full_dev_desc = e.find('.//string[@name="store_full_dev_desc"]')
|
|
|
|
if short_desc is not None:
|
|
|
|
save_file(short_desc.text, LANG_MAP[entry], 'short_description.txt', False)
|
|
|
|
if short_dev_desc is not None:
|
|
|
|
save_file(short_dev_desc.text, LANG_MAP[entry], 'short_description.txt', True)
|
|
|
|
if full_desc is not None:
|
|
|
|
save_file(full_desc.text, LANG_MAP[entry], 'full_description.txt', False)
|
|
|
|
if full_dev_desc is not None:
|
|
|
|
save_file(full_dev_desc.text, LANG_MAP[entry], 'full_description.txt', True)
|
|
|
|
|
|
|
|
|
|
|
|
def save_file(text, directory, filename, dev):
|
|
|
|
if dev:
|
|
|
|
directory_path = os.path.join(PATH, METADATA_DEV_PATH, directory)
|
|
|
|
else:
|
|
|
|
directory_path = os.path.join(PATH, METADATA_PATH, directory)
|
2017-11-06 14:31:08 +03:00
|
|
|
|
|
|
|
if not os.path.exists(directory_path):
|
|
|
|
os.makedirs(directory_path)
|
|
|
|
if filename == 'short_description.txt':
|
|
|
|
limit = 80
|
|
|
|
else:
|
|
|
|
limit = 0
|
|
|
|
text = clean_text(text, limit)
|
|
|
|
check_title(directory_path)
|
|
|
|
file_path = os.path.join(directory_path, filename)
|
|
|
|
print("Writing %s..." % file_path)
|
|
|
|
with codecs.open(file_path, 'w', 'utf-8') as f:
|
|
|
|
f.write(text)
|
|
|
|
|
|
|
|
|
|
|
|
def clean_text(text, limit=0):
|
2017-12-12 13:20:35 +03:00
|
|
|
text = text.replace('\\\'', '\'').replace('\\n', '\n')
|
2017-11-06 14:31:08 +03:00
|
|
|
if limit != 0 and len(text) > limit:
|
|
|
|
print("Warning: Short Description longer than 80 characters, truncating...")
|
|
|
|
text = text[:limit]
|
|
|
|
return text
|
|
|
|
|
|
|
|
|
|
|
|
def check_title(directory):
|
|
|
|
title_path = os.path.join(directory, 'title.txt')
|
|
|
|
if os.path.exists(title_path):
|
|
|
|
return
|
|
|
|
default_title_path = os.path.join(directory, '..', DEFAULT_LANG, 'title.txt')
|
|
|
|
shutil.copy(default_title_path, title_path)
|
|
|
|
|
|
|
|
|
|
|
|
if __name__ == "__main__":
|
|
|
|
main()
|