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
总结
就这样就完事了。后面用的时候,导入一下短语书就行了。