121 lines
4.6 KiB
Plaintext
121 lines
4.6 KiB
Plaintext
|
#! /usr/bin/env python3
|
||
|
# -*- coding: utf-8 -*-
|
||
|
|
||
|
# fg-new-translations --- Create new translations for FlightGear
|
||
|
# Copyright (C) 2017 Florent Rougon
|
||
|
#
|
||
|
# This program is free software; you can redistribute it and/or modify
|
||
|
# it under the terms of the GNU General Public License as published by
|
||
|
# the Free Software Foundation; either version 2 of the License, or
|
||
|
# (at your option) any later version.
|
||
|
#
|
||
|
# This program is distributed in the hope that it will be useful,
|
||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||
|
# GNU General Public License for more details.
|
||
|
#
|
||
|
# You should have received a copy of the GNU General Public License along
|
||
|
# with this program; if not, write to the Free Software Foundation, Inc.,
|
||
|
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||
|
|
||
|
import argparse
|
||
|
import collections
|
||
|
import locale
|
||
|
import os
|
||
|
import sys
|
||
|
|
||
|
import flightgear.meta.logging
|
||
|
import flightgear.meta.i18n as fg_i18n
|
||
|
|
||
|
|
||
|
PROGNAME = os.path.basename(sys.argv[0])
|
||
|
|
||
|
# Only messages with severity >= info will be printed to the terminal (it's
|
||
|
# possible to also log all messages to a file regardless of their level, see
|
||
|
# the Logger class). Of course, there is also the standard logging module...
|
||
|
logger = flightgear.meta.logging.Logger(
|
||
|
progname=PROGNAME,
|
||
|
logLevel=flightgear.meta.logging.LogLevel.info,
|
||
|
defaultOutputStream=sys.stderr)
|
||
|
|
||
|
|
||
|
def processCommandLine():
|
||
|
params = argparse.Namespace()
|
||
|
|
||
|
parser = argparse.ArgumentParser(
|
||
|
usage="""\
|
||
|
%(prog)s [OPTION ...] LANGUAGE_CODE...
|
||
|
Write the skeleton of XLIFF translation files.""",
|
||
|
description="""\
|
||
|
This program writes XLIFF translation files with the strings to translate
|
||
|
for the specified languages (target strings are empty). This is what you need
|
||
|
to start a translation for a new language.""",
|
||
|
formatter_class=argparse.RawDescriptionHelpFormatter,
|
||
|
# I want --help but not -h (it might be useful for something else)
|
||
|
add_help=False)
|
||
|
|
||
|
parser.add_argument("-t", "--transl-dir",
|
||
|
help="""\
|
||
|
directory containing all translation subdirs (such as
|
||
|
{default!r}, 'en_GB', 'fr_FR', 'de', 'it'...). This
|
||
|
"option" MUST be specified.""".format(
|
||
|
default=fg_i18n.DEFAULT_LANG_DIR))
|
||
|
parser.add_argument("lang_code", metavar="LANGUAGE_CODE", nargs="+",
|
||
|
help="""\
|
||
|
codes of languages to create translations for (e.g., fr,
|
||
|
fr_BE, en_GB, it, es_ES...)""")
|
||
|
parser.add_argument("-o", "--output-file",
|
||
|
help="""\
|
||
|
where to write the output to (use '-' for standard
|
||
|
output); if not specified, a suitable file under
|
||
|
TRANSL_DIR will be chosen for each LANGUAGE_CODE.
|
||
|
Note: this option can only be given when exactly one
|
||
|
LANGUAGE_CODE has been specified on the command
|
||
|
line (it doesn't make sense otherwise).""")
|
||
|
parser.add_argument("--output-format", default="xliff",
|
||
|
choices=fg_i18n.FORMAT_HANDLERS_NAMES,
|
||
|
help="format to use for the output files")
|
||
|
parser.add_argument("--help", action="help",
|
||
|
help="display this message and exit")
|
||
|
|
||
|
params = parser.parse_args(namespace=params)
|
||
|
|
||
|
if params.transl_dir is None:
|
||
|
logger.error("--transl-dir must be given, aborting")
|
||
|
sys.exit(1)
|
||
|
|
||
|
if params.output_file is not None and len(params.lang_code) > 1:
|
||
|
logger.error("--output-file can only be given when exactly one "
|
||
|
"LANGUAGE_CODE has been specified on the command line "
|
||
|
"(it doesn't make sense otherwise)")
|
||
|
sys.exit(1)
|
||
|
|
||
|
return params
|
||
|
|
||
|
|
||
|
def main():
|
||
|
global params
|
||
|
|
||
|
locale.setlocale(locale.LC_ALL, '')
|
||
|
params = processCommandLine()
|
||
|
|
||
|
l10nResPoolMgr = fg_i18n.L10NResourcePoolManager(params.transl_dir, logger)
|
||
|
xliffFormatHandler = fg_i18n.FORMAT_HANDLERS_MAP[params.output_format]()
|
||
|
|
||
|
if params.output_file is not None:
|
||
|
assert len(params.lang_code) == 1, params.lang_code
|
||
|
# Output to one file or to stdout
|
||
|
l10nResPoolMgr.writeSkeletonTranslation(
|
||
|
xliffFormatHandler, params.lang_code[0],
|
||
|
filePath=params.output_file)
|
||
|
else:
|
||
|
# Output to several files
|
||
|
for langCode in params.lang_code:
|
||
|
l10nResPoolMgr.writeSkeletonTranslation(xliffFormatHandler,
|
||
|
langCode)
|
||
|
|
||
|
sys.exit(0)
|
||
|
|
||
|
|
||
|
if __name__ == "__main__": main()
|