Qt要想实现翻译需要配合tr函数使用,特别时代码中的文本需要注意,以下是我tr函数使用的经验。
/**
* @brief tr 国际化函数
* @param sourceText 翻译的源文本
* @param disambiguation 源文本的注释(作用为消歧、方便理解)
* @param n 源文本包含复数含义时使用
* @return QString类型的源文本
*/
[static] QString QObject::tr(const char *sourceText, const char *disambiguation = Q_OBJECT, int n = Q_OBJECT)
解释(源于Qt帮助):
Returns a translated version of sourceText, optionally based on a disambiguation string and value of n for strings containing plurals; otherwise returns QString::fromUtf8(sourceText) if no appropriate translated string is available.
译文(百度翻译):
返回sourceText的翻译版本,对于包含复数的字符串,可以选择基于消歧字符串和n值;否则,如果没有合适的翻译字符串可用,则返回QString::fromUtf8(sourceText)。
// 正确使用方法:
QString str = tr("我是字符串1");
// 错误使用方法:
char *strTemp = "我是字符串2";
QString str = tr(strTemp );
以上两种方法都不会报错,但是在使用lupdate时仅能识别正确使用的文本,识别不到错误使用的文本。
// "aaa"拼接"bbb"
QString str = tr("aaa%1").arg("bbb");
QString str = QString::fromLocal8Bit(tr("字符串").toLocal8Bit());
QString str2 = tr(u8"字符串").toLocal8Bit();
该方法有点长,但是能够解决
该问题的解决方法在Qt之语言家的简单使用(一)中也有提到,在ts文件中需要手动添加如下代码,这就是为什么我Qt Linguist打开ts文件会多一项“QPlatformTheme”的原因,具体原因请查看Qt QDialogButtonBox 英文翻译问题;
<context>
<name>QPlatformThemename>
<message>
<location filename="../CTipDialog.ui"/>
<source>OKsource>
<translation>确定translation>
message>
<message>
<source>Cancelsource>
<translation>取消translation>
message>
context>
本文总结了Qt国际化tr函数和对话框按钮的翻译,后续有其他新发现将持续更新。
Qt之语言家的简单使用(一)(Qt翻译UI,Qt Linguist的使用,含源码+注释)
友情提示——哪里看不懂可私哦,让我们一起互相进步吧
(创作不易,请留下一个免费的赞叭 谢谢 ^o^/)
注:文章为作者编程过程中所遇到的问题和总结,内容仅供参考,若有错误欢迎指出。
注:如有侵权,请联系作者删除