1

我对翻译 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。

4

1 回答 1

1

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

于 2018-10-29T08:03:33.417 回答