99 lines
3.6 KiB
Python
99 lines
3.6 KiB
Python
import os
|
|
import re
|
|
|
|
from translate_help import HelpTranslationJob
|
|
from common import TranslationJob, nice_mkdir, nice_path_join
|
|
|
|
class LevelTranslationJob(TranslationJob):
|
|
def __init__(self, **kwargs):
|
|
TranslationJob.__init__(self, **kwargs)
|
|
self.template_file = kwargs['template_file']
|
|
self.language_files = kwargs['language_files']
|
|
self.line_buffer = None
|
|
|
|
def process_file(self):
|
|
while True:
|
|
line = self.read_input_line()
|
|
if not line:
|
|
break
|
|
|
|
# English version is always written
|
|
self.write_output_line(line.text)
|
|
|
|
match = re.match(r'^(Title|Resume|ScriptName)\.E(.*)', line.text)
|
|
if match:
|
|
for language_file in self.language_files:
|
|
self.add_translated_line(match, line.occurrence, language_file)
|
|
|
|
def add_translated_line(self, command_match, occurrence, language_file):
|
|
command = command_match.group(1)
|
|
arguments = command_match.group(2)
|
|
|
|
translated_arguments = arguments
|
|
for attribute_match in re.finditer('(text|resume)="([^"]*)"', arguments):
|
|
whole_attribute_match = attribute_match.group(0)
|
|
attribute = attribute_match.group(1)
|
|
text = attribute_match.group(2)
|
|
|
|
self.template_file.insert_entry(text, occurrence, command + '-' + attribute)
|
|
|
|
translated_arguments = translated_arguments.replace(
|
|
whole_attribute_match,
|
|
u'{0}="{1}"'.format(attribute, language_file.translate(text)))
|
|
|
|
self.write_output_line(u'{0}.{1}{2}'.format(
|
|
command,
|
|
language_file.language_char(),
|
|
translated_arguments))
|
|
|
|
|
|
"""
|
|
Create jobs for chapter translation
|
|
|
|
Assumes that input_dir has structure like so:
|
|
${input_dir}/scene.txt
|
|
${input_dir}/help/help_file1.txt
|
|
...
|
|
${input_dir}/help/help_fileN.txt
|
|
|
|
The output files will be saved in:
|
|
${output_dir}/scene.txt
|
|
${output_dir}/help/help_file1.${language_char1}.txt
|
|
...
|
|
${output_dir}/help/help_fileN.${language_charM}.txt
|
|
"""
|
|
def create_level_translation_jobs(input_dir, output_dir, template_file, language_files):
|
|
translation_jobs = []
|
|
|
|
input_file = os.path.join(input_dir, 'scene.txt')
|
|
translation_jobs.append(LevelTranslationJob(
|
|
input_file = input_file,
|
|
output_file = nice_path_join(output_dir, 'scene.txt'),
|
|
template_file = template_file,
|
|
language_files = language_files))
|
|
|
|
input_help_dir = os.path.join(input_dir, 'help')
|
|
if os.path.isdir(input_help_dir):
|
|
output_help_dir = nice_path_join(output_dir, 'help')
|
|
nice_mkdir(output_help_dir)
|
|
|
|
language_files_list = []
|
|
if len(language_files) > 0:
|
|
language_files_list = language_files
|
|
else:
|
|
# We need at least one dummy language file to create any jobs
|
|
language_files_list = [None]
|
|
|
|
for language_file in language_files_list:
|
|
for help_file in sorted(os.listdir(input_help_dir)):
|
|
if language_file:
|
|
translated_help_file = help_file.replace('.E.txt', '.{0}.txt'.format(language_file.language_char()))
|
|
|
|
translation_jobs.append(HelpTranslationJob(
|
|
input_file = os.path.join(input_help_dir, help_file),
|
|
output_file = nice_path_join(output_help_dir, translated_help_file),
|
|
template_file = template_file,
|
|
language_file = language_file))
|
|
|
|
return translation_jobs
|