Ein Skript, das Xcode-Sprachdateien (Localizable.strings) in einfach zu handhabenden tabulatorgetrennten Text (tsv) konvertiert. Bisher habe ich Sprachdateien mit Linguan verwaltet, aber als das Projekt riesig wurde, wurde es schwierig, es zu verwalten. Zum Verwalten mit durch Tabulatoren getrenntem Text.
bash
pip install unicodecsv
i18n_po2tsv.py
import sys, re
import unicodecsv as csv
from collections import OrderedDict
#
# Default encoding
#
reload(sys)
sys.setdefaultencoding('utf8')
#
# File paths
#
tsv_path = 'Localization/Localizable.tsv'
loc_paths = 'PROJECT_NAME/PROJECT_NAME/Resources/UI/{}.lproj/Localizable.strings'
#
# Convert Localizable.strings to Localizable.tsv
#
langs = [
'ja',
'en',
]
rows = {}
for lang_code in langs:
loc_path = loc_paths.format(lang_code)
print('Reading loc file... ' + loc_path)
lines = [line.encode('utf-8').rstrip('\n') for line in open(loc_path)]
for line in lines:
# print line
pattern = re.compile(r'\"(.*)\" = \"(.*)\"')
match = pattern.search(line)
if match:
loc_key = match.group(1).encode('utf-8')
loc_str = match.group(2).encode('utf-8')
if loc_key in rows.keys():
rows[loc_key].append(loc_str)
else:
rows[loc_key] = [loc_key, loc_str]
rows_orderd = OrderedDict(sorted(rows.items()))
print('Saving tsv file... ' + tsv_path)
print('')
with open(tsv_path, 'wb') as f:
writer = csv.writer(f, csv.excel_tab)
writer.writerows(rows_orderd.values())
print('All done!')
i18n_tsv2po.py
import sys
import unicodecsv as csv
import codecs
from collections import OrderedDict
#
# Default encoding
#
reload(sys)
sys.setdefaultencoding('utf8')
#
# File paths
#
tsv_path = 'Localization/Localizable.tsv'
loc_paths = 'PROJECT_NAME/PROJECT_NAME/Resources/UI/{}.lproj/Localizable.strings'
#
# Read Localizable.tsv
#
langs = {
'ja': {},
'en': {},
}
print('Reading tsv file... ' + tsv_path)
with open(tsv_path, 'rb') as tsv_in:
tsv_in = csv.reader(tsv_in, delimiter='\t')
# next(tsv_in, None)
for row in tsv_in:
loc_key = row[0]
if row[1]:
loc_str = row[1].encode('utf-8')
langs['ja'][loc_key] = loc_str
if row[2]:
loc_str = row[2].encode('utf-8')
langs['en'][loc_key] = loc_str
#
# Save Localizable.string
#
print('')
for key, value in langs.iteritems():
lang_code = key
loc_path = loc_paths.format(lang_code)
print('Saving loc file... ' + loc_path)
with open(loc_path, 'w') as loc_out:
loc_orderd = OrderedDict(sorted(value.items()))
for loc_key, loc_str in loc_orderd.iteritems():
loc_out.write('"' + loc_key + '" = "' + loc_str + '";\n')
loc_out.close()
print('Done!')
print('')
print('All done!')
Recommended Posts