【问题标题】:Ot translation: original QString textot翻译:原始QString文本
【发布时间】:2016-01-27 13:43:14
【问题描述】:

有没有办法获取标记为翻译的 QString 的原始语言独立文本? 这是我的代码的简化:

QString MyClass::getError()
{
   QString errorText = tr("hardError1");
   return errorText;
}

问题在于:

if (getError().contains("hard"))
{
//do something
}

如果用户更改语言,将无法正常工作!

【问题讨论】:

  • 这就是为什么您的内部逻辑不能依赖于操作 UI 字符串的原因。如果有的话,请将已翻译字符串的使用限制在字符串显示的那一点,并在整个应用程序的其他任何地方使用别名。
  • 这就是为什么在这种情况下你有两个值:错误文本(人类可读)和错误代码(机器可读)。错误代码通常是一个枚举。

标签: c++ qt qt-linguist


【解决方案1】:

MyClass 应该给你错误代码和错误字符串。对于程序逻辑,使用错误代码。对于 UI,使用错误字符串。

【讨论】:

    【解决方案2】:

    因此,在进一步阅读文档后,我发现了一个似乎可行的解决方案,并想发布我的发现以供将来参考:

    1) 可以使用 QT_TRANSLATE_NOOP(context, text) 标记字符串以进行翻译

    2) 要显式获取翻译,请使用 QCoreApplication::translate() 用于 c++,qsTranslate() 用于 QML。然后将在定义的上下文中搜索翻译文件以寻找合适的翻译。如果没有找到匹配项,或者没有使用这两个函数,您将返回原始文本。

    这是我在问题中发布的示例:

    QString MyClass::getError()
    {
       QString errorText = QT_TRANSLATE_NOOP("errorContex", "hardError1");
       return errorText;
    }
    
    qDebug()<< getError(); //this will give you the original string
    qDebug()<< QCoreApplication::translate("errorContex", getError()); //this will give you the translation of the string according to the set language
    
    console.log(qsTranslate("errorContex", myclass.getError())) //this will give you the translation of the string in QML
    

    【讨论】:

    • 只是补充一点:这个 ... qDebug()
    【解决方案3】:

    有没有办法获取标记为翻译的 QString 的原始语言独立文本?

    不,没有。一旦字符串被翻译,它就是一个普通的字符串。

    如果你必须使用字符串,那么你的类应该返回未翻译的字符串,并且应该在输出之前进行转换。

    错误通常不是字符串,因此该方法可能希望返回某种错误对象或错误代码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-22
      • 1970-01-01
      • 2021-02-26
      相关资源
      最近更新 更多