在一个Qt 5.3应用程序中,我有一个包含非ASCII字符(具体来说是德语Umlauts)的字符串文字需要翻译成外语。因此我有两个问题:(1)我必须使用tr()标记该文字;(2)我必须正确显示该字符串在屏幕上,为此似乎需要使用QString::fromLatin1()或类似的函数。
如果我这样做:
如果我这样做:
QString s = tr("ä");
这段文字被标记为需要翻译,但不能正确显示。
如果我执行如下操作:
QString r = QString::fromLatin1("ä");
该字符串将正确显示但不会被标记为翻译。
我该如何将两者合并为一个?是的,我的源文件保存在UTF8编码中。
我已经在论坛上搜索了很久,但没有任何提示能够解决问题;主要是因为大多数解决方案适用于Qt 4.8,并且已经被移除或弃用于Qt 5.3。谢谢你的帮助!
PS:我正在使用Windows 8上的Visual Studio 2010进行开发。根据VS2010和Notepad ++,我的源代码以UTF8带BOM编码保存。
tr
与QString::fromUtf8
等效(如果没有被#define
定义)。翻译工具非常愚蠢,只会寻找tr("...")
;它会被#undef tr, #define tr(x) QString::fromLatin1(x)
所欺骗。 - MSalters