c++ - 使用在全局范围内声明的 Qt 本地化字符串

标签 c++ qt localization translation

我正在开发 Qt UI 应用程序并对 UI 字符串进行本地化。在我的应用程序中,我使用 QLabel 并动态设置文本。我尝试了两种设置本地化文本的方法。在执行应用程序时,我可以看到,在我的第一种方法中,字符串正在本地化,但在第二种方法中,它们没有。

//Approach 1:
//ui.cpp
//Directly hardcoding the values
labelBox1->setText(QApplication::translate("context","test string"));

//Approach 2:
//UI_Consts.h
static const QString str = QT_TRANSLATE_NOOP("Context","Test String");
//variable 'str' is in global scope

//ui.cpp
#include "UI_Consts.h"
...
labelBox1->setText(str);

当我调试为什么第二种方法不起作用时,我发现全局变量在执行 main 函数之前被初始化。我们通常在 main() 中为翻译编写代码,因此这些全局变量不会被翻译。 我更喜欢第二种方法,因为我们可以在一个文件中列出所有 UI 字符串并轻松维护它们。我想知道有什么方法可以本地化在全局作用域中声明的字符串(就像在我的第二种方法中使用的那样)?

最佳答案

嗯,这不是 Qt 翻译系统的用途...

但如果你想那样做,你可以编写一个函数(或实现一个包含所有字符串的类/结构)来初始化所有字符串变量main 中加载翻译后() - 当然这会产生更多代码 :D

关于c++ - 使用在全局范围内声明的 Qt 本地化字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23369220/

相关文章:

c++ - 不同命名空间中的友元运算符

c++ - 如何确定存储在数组中的项目数?

c++ - 使用CGAL存储多边形的顶点、半边、邻接表

javascript - JavaScript 确认按钮的本地化

localization - 如何在 Google Maps API V3 中检索英文结果

C++ 参数堆与堆栈,原始类型数组

c++ - Windows 上的 boost.asio 错误代码是平台相关的?

c++ - 使用现有项目进行 CppUnit 测试

qt - 如何滚动到 QPlainTextEdit 中的指定行?

ios - 基本 Storyboard 更改未反射(reflect)在本地化 Storyboard 中