【问题标题】:Why do people use i18n() and i18nc() instead of qsTr()?为什么人们使用 i18n() 和 i18nc() 而不是 qsTr()?
【发布时间】:2019-04-01 13:56:36
【问题描述】:

我对翻译 QML 小部件完全陌生。 我看到人们在他们的源代码中使用 i18n() 和 i18nc()。 我发现这里记录的命令:

https://techbase.kde.org/Development/Tutorials/Localization/i18n#QML

但是 QML 文档只列出了 qsTr() 方法。我猜其他 2 个命令是特定于 KDE 的?

我真的必须在 C++ 中涉足那些 KDeclarative 等对象吗?我不太确定它是如何工作的。我的小部件不使用任何这些,只使用 qml 文件和一些用于外部函数的 javascript 文件。

我发现我可以让翻译与 PoEdit 一起使用,但仅适用于 .js 文件,如果我定义一个自定义源关键字(函数名称)以从中提取,但仅当它们是 i18n 和 i18nc(qsTr不起作用)以及使用我从工作小部件(即 /contents/locale/language_key/plasma_applet_widget_id.mo)中窃取的目录结构时。遗憾的是,由于解析器 getText 无法读取 qml 文件,所以这个解决方案还不够好。

现在,我知道 qt 提供了一个命令 lupdate,用于从源中提取这些关键字,但反过来,它只适用于 qsTr。尝试将 -tr-function-alias qsTr=(i18n) 作为参数传递是行不通的。使用 qsTr() 我可以拥有一个不错的 .ts 文件,但尝试将其转换为 po 并使用前面提到的技巧是行不通的。

不过我想知道,如果 lupdate 似乎无法提取这些关键字,为什么可下载小部件的开发人员似乎都在其源代码中使用 i18n 和 i18nc。

【问题讨论】:

    标签: localization qml kde kde-plasma


    【解决方案1】:

    为什么人们使用 i18n 和 i18nc 而不是 qsTr? 可能是因为这样更方便。通过简单地手动编辑 .po 文件(引用有问题的 qml 文件、关键字出现的行等),我已经能够使用上述技巧使 .qml 文件工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-21
      • 1970-01-01
      • 2017-12-06
      • 2013-02-18
      相关资源
      最近更新 更多