江西哪里有做電商網(wǎng)站的公司地推推廣方案
????????Qt ts文件(Translation Source file:翻譯源文件)是Qt框架中用于存儲(chǔ)翻譯文本和相關(guān)上下文信息的一種特定格式文件,它是Qt Linguist(語言家)工具使用的基礎(chǔ)。Qt Linguist是Qt開發(fā)工具包中的一個(gè)應(yīng)用程序,專門用于本地化和國際化Qt應(yīng)用程序。
Qt ts文件的結(jié)構(gòu)
????????Qt ts文件是基于XML格式的文本文件,用于存儲(chǔ)翻譯文本和相關(guān)的上下文信息。這種格式使得翻譯人員能夠清晰地看到原文、上下文和翻譯內(nèi)容,便于進(jìn)行準(zhǔn)確的翻譯工作。
文件聲明
????????Qt ts文件通常以XML聲明開始,指定了文件的版本和編碼方式。
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" language="zh_CN">
<?xml version="1.0" encoding="UTF-8"?>聲明了這是一個(gè)XML文件,使用UTF-8編碼。
<!DOCTYPE TS>指定了文檔類型為TS。
<TS version="2.1" language="zh_CN">標(biāo)簽則包含了TS文件的版本號(hào)和語言代碼【1】。?
【1】:language屬性的值為相應(yīng)語言的BCP 47標(biāo)簽代碼。BCP47是一種標(biāo)簽格式的建議標(biāo)準(zhǔn),這個(gè)標(biāo)準(zhǔn)定義了一種語言標(biāo)簽的特定格式,通常用于軟件國際化和語音識(shí)別等領(lǐng)域。一個(gè)BCP 47語言標(biāo)由多個(gè)子標(biāo)記組成,這些子標(biāo)記通過連字符(-)分隔【2】
子標(biāo)記的類型和順序通常遵循以下規(guī)則:
- 語言代碼(Language):通常是定義的兩個(gè)或三個(gè)字母的代碼,代表一種語言。例如,zh代表中文,en代表英文。
- 腳本代碼(Script):可選,定義的四個(gè)字母代碼,用于表示書寫系統(tǒng)。例如,Hans代表簡體中文(漢字簡化字形),Hant代表繁體中文(漢字傳統(tǒng)字形)。
- 地區(qū)代碼(Region):可選,定義的兩個(gè)字母代碼,或者UN M.49標(biāo)準(zhǔn)中的三位數(shù)字代碼,用于表示特定的地理區(qū)域或國家。例如,CN代表中國大陸,US代表美國。
示例:
????????zh:表示中文(不特定于簡體或繁體)。
????????zh-Hans:表示簡體中文。
????????zh-Hant:表示繁體中文。
????????zh-CN:表示中國大陸使用的中文(默認(rèn)為簡體中文)。
????????en-US:表示美國英語。
【2】:按照BCP 47的嚴(yán)格規(guī)范,應(yīng)該使用短橫線(-)而不是下劃線(_)。在實(shí)際的Qt?.ts文件中,你可能會(huì)看到語言代碼和國家/地區(qū)代碼之間使用下劃線(_)作為分隔符的情況,特別是在language屬性中。在這種情況下,盡管它可能不會(huì)影響Qt工具(如Qt Linguist)的正確解析,但最好還是按照BCP 47的規(guī)范,將其更改為使用短橫線(-)來分割。?
上下文(context)
????????在Qt ts文件中,可以定義多個(gè)上下文(context),用于將翻譯字符串分組到相關(guān)的邏輯部分中。雖然這不是必需的,但它有助于翻譯人員更好地理解字符串的用途和上下文環(huán)境。然而,在標(biāo)準(zhǔn)的Qt ts文件中,上下文通常是通過<context>標(biāo)來指定的,而不是直接作為XML結(jié)構(gòu)的一部分。
消息(Message)
????????<message>標(biāo)簽是Qt ts文件中最核心的部分,它包含了需要翻譯的字符串及其相關(guān)信息。每個(gè)<message>標(biāo)簽都包含以下子元素:
- location(可選):指定了源代碼中字符串的位置,包括文件名和行號(hào),有助于翻譯人員查找原始字符串。
- source:包含原始(未翻譯)的字符串。
- translation:包含翻譯后的字符串。在初始的ts文件中,這個(gè)元素可能是空的,等待翻譯人員填寫。
- comment(可選):提供關(guān)于字符串的額外信息或注釋,幫助翻譯人員理解字符串的用途或上下文。
- numerusforms(可選):當(dāng)字符串包含可變的數(shù)字部分時(shí),可以使用此元素來提供不同數(shù)量下的翻譯選項(xiàng)。
<context> //上下文<name>MainWindow</name> //上下文名稱<message> //消息<location filename="mainwindow.ui" line="14"/> <source>打開文件</source> <translation>Open File</translation> </message> <!-- 其他消息 -->
</context>
<!-- 其他上下文 --> /* 在這個(gè)例子中,<context>標(biāo)簽的<name>屬性指定了上下文的名稱為“MainWindow”,它表示這個(gè)上下文中 * 的字符串都與主窗口相關(guān)。在<context>標(biāo)簽內(nèi)部,<message>標(biāo)簽定義了需要翻譯的字符串“打開文件”及 * 其翻譯“Open File”。 */
使用lupdate工具生成.ts文件
參見鏈接:Qt使用lupdate工具生成.ts文件-CSDN博客
注意事項(xiàng)
- Qt ts文件的結(jié)構(gòu)相對(duì)簡單,主要圍繞<message>標(biāo)簽展開。
- 上下文(context)通常通過<context>標(biāo)簽指定,而不是作為XML結(jié)構(gòu)的一部分。
- 在編輯Qt ts文件時(shí),應(yīng)確保使用UTF-8編碼,以避免編碼問題。
- Qt Linguist是編輯Qt ts文件的推薦工具,它提供了直觀的界面來查看、編輯和管理翻譯字符串。
- Ts文件不會(huì)被包含進(jìn)Qt應(yīng)用程序,通過ts文件編譯生成的qm文件會(huì)被包含進(jìn)Qt應(yīng)用程序中。
ts文件舉例
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" language="en_US">
<context><name>frmrecordreplay</name><message><location filename="frmlocalsetting/frmrecordreplay.ui" line="14"/><source>Form</source><translation type="unfinished">Form</translation></message><message><location filename="frmlocalsetting/frmrecordreplay.cpp" line="252"/><source>Begin play record</source><translation type="unfinished">Begin play record</translation></message><message><location filename="frmlocalsetting/frmrecordreplay.cpp" line="259"/><location filename="frmlocalsetting/frmrecordreplay.cpp" line="287"/><source>Stop playback control request</source><translation type="unfinished">Stop playback control request</translation></message><message><location filename="frmlocalsetting/frmrecordreplay.cpp" line="278"/><source>Continue playback control request</source><translation type="unfinished">Continue playback control request</translation></message>
</context>
<context><name>frmtelbookbase</name><message><location filename="frmtelbook/frmtelbookbase.ui" line="14"/><source>Form</source><translation type="unfinished">Form</translation></message><message><location filename="frmtelbook/frmtelbookbase.ui" line="73"/><source>TextLabel</source><translation type="unfinished">TextLabel</translation></message><message><location filename="frmtelbook/frmtelbookbase.cpp" line="27"/><source>Are You Delete It ?</source><translation type="unfinished">Are You Delete It ?</translation></message>
</context>
<context><name>frmtelwidgetbase</name><message><location filename="frmtelwidget/frmtelwidgettbase.ui" line="32"/><source>Form</source><translation type="unfinished">Form</translation></message>
</context>
</TS>