![QT Linguist 工具未获取正确的翻译](https://linux22.com/image/226339/QT%20Linguist%20%E5%B7%A5%E5%85%B7%E6%9C%AA%E8%8E%B7%E5%8F%96%E6%AD%A3%E7%A1%AE%E7%9A%84%E7%BF%BB%E8%AF%91.png)
我正在尝试使用 QT 中的翻译功能。一种语言需要完成 4000 多个翻译。我必须对超过 15 种不同的语言执行此操作。所以,我决定language.ts
通过shell脚本来写文件。成功生成后language.ts
,我在记事本++(在 Windows 中)中打开该文件,我可以在文件中看到预期的翻译。例如,在巴西语言中,以下是翻译代码language.ts
文件:-
<message>
<location filename="temp_unit.ui" line="59"/>
<source>Cancel</source>
<translation>Отказ</translation>
</message>
现在,当我尝试在工具中打开文件时QT Linguist
,出现以下错误:-
Parse error at lang_Brazil.ts:1:38:Encountered incorrectly encoded content.
正如[本网站][1]中提供的详细信息,我将编码值替换utf-8
为ISO-8859-1
.现在我可以打开文件,QT Linguist
但翻译显示错误的字符,例如:- 对于取消,它显示Îòêàç
(预期翻译是Отказ
)。
请确认为什么它在 QT linguist 中没有进行正确的翻译,而如果我在记事本++中打开 language.ts 文件,我可以看到它。 [1]:https://docs.oracle.com/cd/E16764_01/bi.1111/b32121/pbr_nls003.htm
答案1
有几个问题:
不要
.ts
使用 shell 脚本创建文件 - 有一个特殊的工具lupdate
可以做到这一点。你混合了语言 - 没有“巴西”这样的语言。巴西国家使用葡萄牙语(或巴西葡萄牙语变体)。你的情况更令人困惑 - 翻译
Отказ
实际上是俄语。代码页 ISO-8859-1 适用于拉丁字母,因此西里尔字母文本将显示为一组随机字形。如果您的文件确实是一字节编码,那么为了看到西里尔文,您应该使用 ISO-8859-5 (应该用于西里尔文),但既然您在 中看到正确的字形
Notepad++
,那么最正确的字形代码页很可能是 Windows-1251。另请注意,这Notepad++
可以使用可变长度编码(例如 UTF-8),在这种情况下使用其他编码将是非常错误的。在 Notepad++ 中找到“文件属性”,它应该告诉您编辑器当前正在使用哪种编码。
请阅读此处如何创建.ts
文件:https://doc.qt.io/qt-5/linguist-manager.html
用于Qt Linguist
编辑.ts
文件 - 它会自动将正确的代码页放入文件中。请勿Notepad++
为此使用 或任何其他文本编辑器。至少直到您确切地知道自己在做什么并且不将语言与代码页混合在一起。https://doc.qt.io/qt-5/linguist-translators.html