Qt Linguist 短语书批量导入翻译.ts导入.qph
文章目录
- 前言
- 一、准备工作 将ts文件和python文件放到一个根目录下
- 二、执行如下代码 比如这个python文件名字叫test.py
- 三、在根目录下打开powershell之类的控制台,执行python test.py
- 总结
前言
在开发Qt软件过程中,不免需要涉及到翻译软件界面的工作。于是就用到了qt中的linguist功能。这个功能中,有一个短语书的功能。可以将已经翻译过的内容,一个一个上传上去,用于其他软件的使用。方便统一管理固定的翻译内容。但是这个软件有一个问题,就是不能够批量将ts中已经翻译好的内容,导入到短语书中。于是设计一个python脚本来完成这个功能
一、准备工作 将ts文件和python文件放到一个根目录下
二、执行如下代码 比如这个python文件名字叫test.py
import xml.etree.ElementTree as ET
from xml.dom import minidom
def parse_ts_file(ts_file_path):
"""
从.ts文件中解析并提取翻译项。
:param ts_file_path: .ts文件的路径
:return: 一个包含翻译项的字典,键为源文本,值为翻译文本
"""
tree = ET.parse(ts_file_path)
root = tree.getroot()
translations = {}
# 遍历XML文档以找到翻译项
# 注意:这里假设.ts文件的结构包含<TS>根元素,然后是<context>和<message>元素
for context in root.findall('context'):
for message in context.findall('message'):
source = message.find('source').text
target = message.find('translation').text if message.find('translation') is not None else ''
if source and target:
translations[source] = target
return translations
def write_phrase_book(translations, phrase_book_path):
"""
将翻译项写入.qph文件,并使用minidom美化输出。
:param translations: 包含翻译项的字典
:param phrase_book_path: .qph文件的路径
"""
# 创建.qph文件的根元素
root = ET.Element('QPH', {'sourcelanguage': 'en_GB', 'language': 'zh_CN'})
# 遍历翻译项并创建<phrase>元素
for source, target in translations.items():
phrase = ET.SubElement(root, 'phrase')
source_elem = ET.SubElement(phrase, 'source')
source_elem.text = source
target_elem = ET.SubElement(phrase, 'target')
target_elem.text = target
# 使用minidom来美化XML输出
rough_string = ET.tostring(root, 'utf-8')
reparsed = minidom.parseString(rough_string)
pretty_xml_as_string = reparsed.toprettyxml(indent=" ")
# 写入文件
with open(phrase_book_path, 'w', encoding='utf-8') as file:
file.write(pretty_xml_as_string)
ts_file_path = 'project_zh.ts' # 请确保此文件路径正确,并且文件存在
phrase_book_path = 'en2zh.qph'
translations = parse_ts_file(ts_file_path)
write_phrase_book(translations, phrase_book_path)
print("翻译项已成功提取并写入到.qph文件中。")
三、在根目录下打开powershell之类的控制台,执行python test.py
根目录下就会出现一个短语书 en2zh.qph
总结
就这样就完事了。后面用的时候,导入一下短语书就行了。