QT-使用内置翻译
Qt - Use builtin translations
我正在使用QT,并希望翻译QT小部件所示的"本地"文本。通过"本地显示的文本",例如,我参考文本编辑中的上下文菜单中显示的内容(复制,粘贴,...(。
这是我已经做过的:
#include <QApplication>
#include <QDebug>
#include <QTranslator>
#include <QFile>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QTranslator translator;
if(translator.load("qt_fr.qm", QApplication::applicationDirPath())) {
qDebug() << a.installTranslator(&translator);
}
qDebug() << QFile::exists(QApplication::applicationDirPath() + "/qt_fr.qm"); // just to debug file existence
// MainWindow w; // not related to my question
// w.showMaximized(); // neither is this
return a.exec();
}
QT_FR.QM 文件位于 path_to_to_qt/qt5.6.2/5.6/5.6/mingw49_32/translations for qt5.6.2和mingw用户。我将所述文件复制到运行软件目录,但翻译器始终无法加载它。但是,当我使用自己的QM文件(使用QT lupdate和lrelease工具从.TS文件构建(时,QM文件已正确加载并安装。
我缺少某些事情或做错了吗?
我认为问题可能是您尚未复制完整的消息目录。以下在Debian系统上使用QM文件在其标准位置中适用于我:
#include <QApplication>
#include <QDebug>
#include <QLocale>
#include <QTranslator>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QTranslator translator;
const QString dir = "/usr/share/qt5/translations";
if (translator.load("qt_fr", dir)) {
qDebug() << "first load succeeded:"
<< "'Open' =>" << translator.translate("QShortcut", "Open");
}
if (translator.load(QLocale::French, "qt", "_", dir)) {
qDebug() << "second load succeeded:"
<< "'Open' =>" << translator.translate("QShortcut", "Open");
}
}
输出是
first load succeeded: 'Open' => "Ouvrir"
second load succeeded: 'Open' => "Ouvrir"
(我从文件名中删除了.qm
,因为QT将首先尝试,并且我还展示了如何从特定语言环境对象中撰写文件名(。
如果我们使用lconvert -of ts /usr/share/qt5/translations/qt_fr.qm
检查qt_fr.qm
文件,我们可以看到它只是一个很小的文件,可以通过参考来包含其他文件:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" language="fr_FR">
<dependencies>
<dependency catalog="qtbase_fr"/>
<dependency catalog="qtscript_fr"/>
<dependency catalog="qtquick1_fr"/>
<dependency catalog="qtmultimedia_fr"/>
<dependency catalog="qtxmlpatterns_fr"/>
</dependencies>
</TS>
我认为您症状的最可能原因是无法加载一个或多个依赖性文件。您应该确保所有这些文件区域可在您复制qt_fr.qm
相同的位置可用的所有这些文件区域 - 或者,如果您只需要"基本"翻译,则只需复制qtbase_fr.qm
,然后更改translator.load()
调用。
相关文章:
- 内置函数可查看CPP中的成员变量
- 是否有内置方法可以强制转换为不同的基础类型,但保留常量限定符?
- 按字母顺序对字符串中的字母进行排序,而无需使用内置的 sort()
- 将字符串转换为浮点数或整数,而无需使用内置函数(如 atoi 或 atof)
- 如何从 c++ 中类中内置的数组继承
- 如何捕获 C++ 内置异常对象
- macOS 是内置在 clang 编译器中还是内置于 xcode ide 中?
- 将编译器开关添加到 Eclipse CDT 内置编译器设置生成?
- gcc Atomic在gcc 4.1.1中内置了奇怪的行为
- 是否有用于元素部分移位的 simd 指令/内在/内置指令?
- 何时包含内置类型和运算符的标头?
- 基本类型与内置类型有什么区别C++
- 指内置类型的文字
- GLUT 问题:重新声明 c++ 内置类型'wchar_t'时出错
- 像自定义类一样构造的指针(内置类型)如何工作?
- 内置类型与用户定义的类型 C++
- 将内置类型变量传递给只有一个类类型参数的"+"运算符函数时自动类型转换的构造函数
- C++内置类型的基于类型的调度
- 在不使用内置库函数的情况下添加字符串,我做错了什么?
- QT-使用内置翻译