A script that converts Xcode language files (Localizable.strings) into easy-to-handle tab-separated texts (tsv). Until now, I used to manage language files with Linguan, but as the project became huge, it became difficult to manage. To manage with tab-delimited 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