Files
pixiv_downloader/scripts/gen_mo.py
2022-03-25 15:04:59 +08:00

45 lines
1.5 KiB
Python

from argparse import ArgumentParser
from os.path import abspath, dirname, exists, join
from os import listdir, makedirs
from sys import exit as _exit
from traceback import print_exc
from subprocess import Popen
from re import compile
def call(*cmd):
print(cmd)
p = Popen(cmd)
p.wait()
return p.returncode
try:
RE = compile(r'^pixiv_downloader\.(.*).po$')
p = ArgumentParser()
p.add_argument('-p', '--prefix', help='Translation will install at PREFIX/share/locale/<locale>/LC_MESSAGES/pixiv_downloader.mo') # noqa: E501
p.add_argument('-o', '--output', help='Output all translations file in a directory.') # noqa: E501
d = abspath(join(dirname(__file__), "../Language"))
arg = p.parse_intermixed_args()
if arg.prefix is None and arg.output is None:
raise ValueError('--prefix or --output is needed.')
for i in listdir(d):
if not i.endswith('.po'):
continue
fn = join(d, i)
out = None
if arg.output:
out = join(arg.output, i.rstrip(".po") + ".mo")
elif arg.prefix:
out = join(arg.prefix, 'share/locale', RE.search(i).group(1), 'LC_MESSAGES/pixiv_downloader.mo')
if out is None:
raise ValueError('Failed to get output file name.')
out_dir = dirname(out)
if not exists(out_dir):
makedirs(out_dir, exist_ok=True)
if call('msgfmt', fn, '--output', out, '--no-hash') != 0:
raise ValueError('Failed to run msgfmt.')
except Exception:
print_exc()
_exit(1)