c++ - 如何区分翻译不存在或翻译与来源相同?

标签 c++ qt translation qtranslator

我正在使用 QCoreApplication::translate() 来翻译文本。

我想了解一个字符串是否有翻译。

Qt 文档指出:

If none of the translation files contain a translation for sourceText in context, this function returns a QString equivalent of sourceText.

我面临的问题是我得到的结果与此类似:

<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/

相关文章:

c++ - 将 vector <Mat> 转换为 vector 文件 Opencv

python - 从python中的字符串中去除非字母数字字符但保留特殊字符

交响乐 2 : Static function [JMSTranslation]

linux - 无需密码即可远程关闭/重启 Linux 机器

api - 如何以编程方式从 Microsoft 翻译器获取剩余的翻译配额?

c++ - 在 Visual Studio 2010 下制作基于 GCC 的项目构建和运行

列表错误上的 C++ 迭代器

c++ - 如何保存这个 vector 图

c++ - 在 QListWidget 的 QStyledItemDelegate 中,如何绘制所选项目以匹配标准列表?

c++ - AttachConsole 和 QProcess::readAll()