MarkDown文本(md)汉化翻译脚本
import os
import concurrent.futures
from deep_translator import GoogleTranslator, exceptionsdef 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 = Falsefor 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_blockif 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)