经过几周的研究和开展,我仍然没有找到关于如何在QtQuick中进行翻译/本地化的全面指南(例如,使用QML语言,而不是C ++或Python)。 / p>
一般来说,我在QtQuick中尽可能多地询问正确本地化项目的步骤是什么,最少或最好没有C ++。
更具体地说,我需要填写很多漏洞来理解QtQuick如何处理本地化。
到目前为止,我已经:
将QT_TR_NOOP()附加到我在运行时翻译的所有可翻译字符串
使用lupdate_only {SOURCES + = LanguageStrings.qml}
使用QtLinguist生成的翻译文件
但是,我打算实现一个动态更改语言的选项,而且我在翻译中看到的唯一一个完全不在C ++中的例子,实际上是为每种语言创建了一个项目实例,而不是而不是在运行时更改字符串。
那么,如何在运行时更改语言?我可以设置变量吗?它是从系统区域设置中提取的吗?我还没有看到一个可靠的答案。
有什么想法吗?
答案 0 :(得分:2)
你可以用最少的C ++来做到这一点(至少我认为这是最小的)。我以前使用安装app的系统的语言环境就这样做了(直接在main()中):
QGuiApplication app(argc, argv);
QTranslator translator;
if(translator.load(":/translations/myapp_" + QLocale::system().name())) {
app.installTranslator(&translator);
} else {
qDebug() << "Unable to load translation";
}
翻译需要在资源系统中才能完成上述工作。您当然可以在运行时根据QML的用户输入(例如在您的应用程序的设置中)触发上述内容。以下是一些执行此操作的示例代码(https://wiki.qt.io/How_to_do_dynamic_translation_in_QML)。我不知道只有QML的方法来做到这一点。
我尝试了其他有用的东西。您可以将UI放在Loader元素中,并在转换器更改后简单地使用该元素的setSource函数。我快速汇总了一个小例子,其中还包括如何在Loader之外更改UI元素的示例(如果需要)(https://github.com/Conntac/qtExamples)。