Qt多语言翻译示例

一个基础的翻译示例和一些注意事项


示例目录

QtTranslation/
├── Languages
│   ├── en.qm
│   ├── en.ts
│   ├── Languages.qrc
│   ├── zh_CN.qm
│   └── zh_CN.ts
├── main.cpp
└── QtTranslation.pro

注意事项

  • 将翻译文件(ts后缀)生成的qm后缀文件用资源文件(Languages.qrc)包括以供程序引用;
  • translator.load(":/zh_CN.qm")需要以"?"为前缀引用,不能使用"qrc:/"为前缀引用,否则load返回错误;
  • 使用QObject::tr翻译原因是该翻译的上下文为QObject对应ts文件的是QObject的值;
  • 翻译上下文使用不正确,明明是加载成功的语言文件就是翻译不成功,很多是因为这个上下文导致;
  • 可使用QCoreApplication::translate接口指定上下文,如用QCoreApplication::translate("QObject", "start")指定"QObject"上下文标识。

main.cpp

#include 
#include 

#include 

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    QTranslator translator;
    if (! translator.load(":/zh_CN.qm")) {
        qDebug()<<"Failed to load translation file!";
    }
    qApp->installTranslator(&translator);

    qDebug()<<QObject::tr("start")<<QObject::tr("end");
    qDebug()<<QObject::tr("open")<<QObject::tr("close");

    qApp->removeTranslator(&translator);
    if (! translator.load(":/en.qm")) {
        qDebug()<<"Failed to load translation file!";
    }

    /* Switch language */
    qApp->installTranslator(&translator);

    qDebug()<<QObject::tr("start")<<QObject::tr("end");
    qDebug()<<QObject::tr("open")<<QObject::tr("close");

    return 0;
}

QtTranslation.pro 项目文件

QT += core
QT -= gui

CONFIG += c++11

TARGET = QtTranslation
CONFIG -= app_bundle

TEMPLATE = app

SOURCES += main.cpp

RESOURCES += \
    Languages/languages.qrc

TRANSLATIONS += \
    Languages/en.ts \
    Languages/zh_CN.ts

zh_CN.ts 中文翻译文件



<TS version="2.0" language="zh_CN">
<context>
	<name>QObjectname>
	<message>
		<source>startsource>
		<translation>开始translation>
	message>
	<message>
		<source>endsource>
		<translation>结束translation>
	message>
	<message>
		<source>opensource>
		<translation>打开translation>
	message>
	<message>
		<source>closesource>
		<translation>关闭translation>
	message>
context>
TS>

en.ts 英文翻译文件



<TS version="2.0" language="en">
<context>
	<name>QObjectname>
	<message>
		<source>startsource>
		<translation>Starttranslation>
	message>
	<message>
		<source>endsource>
		<translation>Endtranslation>
	message>
	<message>
		<source>opensource>
		<translation>Opentranslation>
	message>
	<message>
		<source>closesource>
		<translation>Closetranslation>
	message>
context>
TS>

Languages.pri 文件

<RCC>
    <qresource prefix="/">
        <file>en.qmfile>
        <file>zh_CN.qmfile>
    qresource>
RCC>

程序输出

"开始" "结束"
"打开" "关闭"
"Start" "End"
"Open" "Close"

示例地址https://github.com/aeagean/QtTranslation.git

你可能感兴趣的:(Qt)