我正在使用 QCoreApplication::translate()
来翻译文本。
我想了解一个字符串是否有翻译。
Qt 文档指出:
If none of the translation files contain a translation for
sourceText
in context, this function returns aQString
equivalent ofsourceText
.
我面临的问题是我得到的结果与此类似:
<message>
<source>Side</source>
<translation>Side</translation>
</message>
来源和翻译相同。
在许多语言中,翻译确实与源代码相同。但是如果 translate("Side")
返回 "Side"
,我无法判断翻译是否完全是 "Side"
或者翻译是空的。
如何区分这两种情况?
最佳答案
据我所知,无法通过 QTCoreApplication::translate
调用来区分这两种情况。
但是,QTranslator::translate
在找不到 key 时返回空 QString
(Qt 5)。因此,一种选择是为您通过 installTranslator()
添加的每个 QTranslator
保留一个容器(因为 QCoreApplication
没有找回那些的方法)。然后,遍历该容器,对容器中的每个实例调用 QTranslator::translate()
。当你得到一个非空的结果时,你找到了一个翻译;如果没有翻译器成功,那么您就知道该 key 不存在于您拥有的任何 QTranslator
中。
伪代码:
bool hasTranslation(const char* key)
{
QString result;
if(!translators.size())
return false;
for(const auto& translator : translators)
{
result = translator->translate("context", key);
if(!result.isNull())
break;
}
return !result.isNull();
}
关于c++ - 如何区分翻译不存在或翻译与来源相同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39660276/