122 lines
4.8 KiB
Python
Executable File
122 lines
4.8 KiB
Python
Executable File
#!/usr/bin/env python
|
|
|
|
import argparse
|
|
import os
|
|
import sys
|
|
|
|
from common import create_template_and_language_files, nice_mkdir, convert_input_path, convert_output_path
|
|
from translate_help import create_help_translation_jobs
|
|
from translate_level import create_level_translation_jobs
|
|
from translate_chaptertitles import create_chaptertitles_translation_jobs
|
|
|
|
def parse_args():
|
|
parser = argparse.ArgumentParser(description = 'Generate translations of Colobot data files')
|
|
|
|
parser.add_argument('--mode',
|
|
choices = ['generate', 'print_files'],
|
|
required = True,
|
|
help = 'Mode of operation: run generation process or only print input and output files')
|
|
parser.add_argument('--type',
|
|
choices = ['help', 'level', 'chaptertitles'],
|
|
required = True,
|
|
help = 'Type of translation: help file or level file')
|
|
parser.add_argument('--input_dir',
|
|
required = True,
|
|
help = 'Input file(s) or directory to translate')
|
|
parser.add_argument('--po_dir',
|
|
required = True,
|
|
help = 'Translations directory (with *.pot and *.po files)')
|
|
parser.add_argument('--output_dir',
|
|
help = 'Output directory for translated files')
|
|
parser.add_argument('--output_subdir',
|
|
help = 'Install subdirectory (only for help files)')
|
|
parser.add_argument('--signal_file',
|
|
help = 'Signal file to indicate successful operation')
|
|
|
|
args = parser.parse_args()
|
|
|
|
args.input_dir = convert_input_path(args.input_dir)
|
|
args.po_dir = convert_input_path(args.po_dir)
|
|
args.output_dir = convert_input_path(args.output_dir)
|
|
args.output_subdir = convert_input_path(args.output_subdir)
|
|
args.signal_file = convert_input_path(args.signal_file)
|
|
|
|
return args
|
|
|
|
def preprocess_args(args):
|
|
if not os.path.isdir(args.input_dir):
|
|
sys.stderr.write('Expected existing input directory!\n')
|
|
sys.exit(1)
|
|
|
|
if not os.path.isdir(args.po_dir):
|
|
sys.stderr.write('Expected existing translations directory!\n')
|
|
sys.exit(1)
|
|
|
|
if args.output_dir:
|
|
nice_mkdir(args.output_dir)
|
|
|
|
def create_translation_jobs(args, template_file, language_files):
|
|
translation_jobs = []
|
|
|
|
if args.type == 'help':
|
|
translation_jobs = create_help_translation_jobs(args.input_dir,
|
|
args.output_dir,
|
|
args.output_subdir,
|
|
template_file,
|
|
language_files)
|
|
elif args.type == 'level':
|
|
translation_jobs = create_level_translation_jobs(args.input_dir,
|
|
args.output_dir,
|
|
template_file,
|
|
language_files)
|
|
elif args.type == 'chaptertitles':
|
|
translation_jobs = create_chaptertitles_translation_jobs(args.input_dir,
|
|
args.output_dir,
|
|
template_file,
|
|
language_files)
|
|
|
|
return translation_jobs
|
|
|
|
def print_files(translation_jobs):
|
|
input_files = []
|
|
output_files = []
|
|
for translation_job in translation_jobs:
|
|
input_files.append(convert_output_path(translation_job.get_input_file_name()))
|
|
output_files.append(convert_output_path(translation_job.get_output_file_name()))
|
|
|
|
sys.stdout.write(';'.join(input_files))
|
|
sys.stdout.write('\n')
|
|
sys.stdout.write(';'.join(output_files))
|
|
|
|
def generate_translations(translation_jobs, template_file, language_files):
|
|
for translation_job in translation_jobs:
|
|
translation_job.run()
|
|
|
|
template_file.merge_and_save()
|
|
for language_file in language_files:
|
|
language_file.merge_and_save(template_file)
|
|
|
|
def save_signalfile(signal_file_name):
|
|
if signal_file_name:
|
|
nice_mkdir(os.path.dirname(signal_file_name))
|
|
with open(signal_file_name, 'w') as signal_file:
|
|
signal_file.close()
|
|
|
|
def main():
|
|
args = parse_args()
|
|
preprocess_args(args)
|
|
|
|
(template_file, language_files) = create_template_and_language_files(args.po_dir)
|
|
translation_jobs = create_translation_jobs(args, template_file, language_files)
|
|
|
|
if args.mode == 'print_files':
|
|
print_files(translation_jobs)
|
|
|
|
elif args.mode == 'generate':
|
|
generate_translations(translation_jobs, template_file, language_files)
|
|
|
|
save_signalfile(args.signal_file)
|
|
|
|
if __name__ == '__main__':
|
|
main()
|