QtQuick从上到下的本地化

时间:2017-06-15 22:42:12

标签: qt localization qml translation qt-quick

经过几周的研究和开展,我仍然没有找到关于如何在QtQuick中进行翻译/本地化的全面指南(例如,使用QML语言,而不是C ++或Python)。 / p>

一般来说,我在QtQuick中尽可能多地询问正确本地化项目的步骤是什么,最少或最好没有C ++。

更具体地说,我需要填写很多漏洞来理解QtQuick如何处理本地化。

到目前为止,我已经:

  • 将QT_TR_NOOP()附加到我在运行时翻译的所有可翻译字符串

  • 使用lupdate_only {SOURCES + = LanguageStrings.qml}

  • 将包含所有字符串的文件添加到我的.pro文件中
  • 使用QtLinguist生成的翻译文件

但是,我打算实现一个动态更改语言的选项,而且我在翻译中看到的唯一一个完全不在C ++中的例子,实际上是为每种语言创建了一个项目实例,而不是而不是在运行时更改字符串。

那么,如何在运行时更改语言?我可以设置变量吗?它是从系统区域设置中提取的吗?我还没有看到一个可靠的答案。

有什么想法吗?

1 个答案:

答案 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)。