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