使用vscode中的ai翻译po文件,然后使用poedit编译,生成mo
- 使用deepseek 每次可处理400~500行,需要分段处理。
- 可以写个python程序将po文件拆分成多个文件,翻译完成后再合并。
分割文件代码
import os
def split_file(input_file, lines_per_file=500):
# 检查文件是否存在
if not os.path.exists(input_file):
print(f"文件 {input_file} 不存在")
return
# 打开输入文件
with open(input_file, 'r', encoding='utf-8') as f:
lines = f.readlines()
# 按组合拆分
entries = []
current_entry = []
for line in lines:
current_entry.append(line)
if line.strip() == '': # 空行表示一个组合结束
entries.append(current_entry)
current_entry = []
if current_entry: # 添加最后一个组合
entries.append(current_entry)
# 计算需要拆分的文件数量
total_files = (len(entries) // lines_per_file) + 1
# 拆分文件
file_num = 0
current_lines = 0
output_file = f"{os.path.splitext(input_file)[0]}_part{file_num + 1:02d}.po"
with open(output_file, 'w', encoding='utf-8') as f_out:
for entry in entries:
# 如果添加当前组合后行数超过限制,则创建新文件
if current_lines + len(entry) > lines_per_file:
f_out.close()
file_num += 1
current_lines = 0
output_file = f"{os.path.splitext(input_file)[0]}_part{file_num + 1:02d}.po"
f_out = open(output_file, 'w', encoding='utf-8')
# 写入当前组合
f_out.writelines(entry)
current_lines += len(entry)
print(f"已创建文件: {output_file},行数: {current_lines}")
if __name__ == "__main__":
# 通过用户输入获取文件名
input_file = input("请输入要拆分的文件名(包括后缀):")
# 调用拆分函数
split_file(input_file)
分割完整了,使用ai逐个翻译
ai提示词:翻译 wpdatatables-zh_CN_part02.po 文件中 msgid 后双引号内的文字,翻译为中文,标点符号不要改变,不要使用中文句号,将翻译后的文字写入 msgstr 后的双引号内。原msgid后双引号内的文字保持不变,整体格式也不要修改。
翻译完成,合并
import os
# 程序会合并当前目录下所有以 .po 为后缀且文件名中包含 _part 的文件。
def merge_files(output_file, input_files):
# 打开输出文件
with open(output_file, 'w', encoding='utf-8') as f_out:
# 逐个读取输入文件并写入输出文件
for input_file in input_files:
with open(input_file, 'r', encoding='utf-8') as f_in:
f_out.write(f_in.read())
print(f"已合并文件: {input_file}")
if __name__ == "__main__":
# 获取当前目录下所有拆分后的文件
input_files = sorted([f for f in os.listdir() if f.endswith('.po') and '_part' in f])
if not input_files:
print("未找到拆分后的文件")
exit()
# 指定输出文件名,确保序列从01开始
output_file = input_files[0].rsplit('_part', 1)[0] + '.po'
# 调用合并函数
merge_files(output_file, input_files)
print(f"合并完成,输出文件: {output_file}")