为什么人们使用 i18n() 和 i18nc() 而不是 qsTr()?
Why do people use i18n() and i18nc() instead of qsTr()?
我完全不熟悉翻译 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。
为什么人们使用 i18n 和 i18nc 而不是 qsTr?
可能是因为这样更方便。通过简单地手动编辑 .po 文件(引用有问题的 qml 文件、出现关键字的行等),我已经能够使用上述技巧使 .qml 文件正常工作。
我完全不熟悉翻译 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。
为什么人们使用 i18n 和 i18nc 而不是 qsTr? 可能是因为这样更方便。通过简单地手动编辑 .po 文件(引用有问题的 qml 文件、出现关键字的行等),我已经能够使用上述技巧使 .qml 文件正常工作。