MarkDown文本(md)汉化翻译脚本
import os
import concurrent.futures
from deep_translator import GoogleTranslator, exceptions
def translate_md_file(input_file, output_file, target_lang):
translator = GoogleTranslator(source='auto', target=target_lang)
with open(input_file, 'r', encoding='utf-8') as file:
content = file.read()
translated_content = ""
in_code_block = False
for line in content.split('\n'):
if line.startswith('#') or line.startswith('$$'):
translated_content += line + '\n'
else:
if line.strip().startswith('```'):
in_code_block = not in_code_block
if in_code_block or not line.strip():
translated_content += line + '\n'
else:
try:
translated_line = translator.translate(line)
if translated_line is None:
translated_line = line
except exceptions.TranslationNotFound:
translated_line = line
translated_content += translated_line + '\n'
with open(output_file, 'w', encoding='utf-8') as file:
file.write(translated_content)
print(f"Translation complete. Translated content saved to {output_file}")
def translate_md_files_in_directory(input_directory, output_directory, target_lang):
if not os.path.exists(output_directory):
os.makedirs(output_directory)
with concurrent.futures.ThreadPoolExecutor() as executor:
futures = []
for root, _, files in os.walk(input_directory):
for file in files:
if file.endswith('.md'):
input_file = os.path.join(root, file)
relative_path = os.path.relpath(root, input_directory)
output_file_directory = os.path.join(output_directory, relative_path)
if not os.path.exists(output_file_directory):
os.makedirs(output_file_directory)
output_file = os.path.join(output_file_directory, file)
future = executor.submit(translate_md_file, input_file, output_file, target_lang)
futures.append(future)
for future in concurrent.futures.as_completed(futures):
try:
future.result()
except Exception as e:
print(f"Translation failed: {e}")
input_directory = './en-US'
output_directory = './zh-CN'
target_lang = 'zh-CN'
translate_md_files_in_directory(input_directory, output_directory, target_lang)