qt-语言支持

显示中文

QTextCodec::setCodecForTr(QTextCodec::codecForLocale());	

多语言支持

为了在使用多语言,必须做两件事情:
1,把想要翻译的字符串放入tr()中,如 QString str=tr(“Legal”);
2, 在开始的时候载入预先制作好的翻译文件(.qm)。
1、生成TS文件
QT的国际化需要TS文件,我们可以通过以下方法创建TS文件
QT 工具 create new translation file
2、编辑TS文件
用QT自带的linguist工具,对代码里需要翻译的内容进行翻译,完成后进行发布,一般会在TS当前目录下生成QM文件
在QRC文件加入QM文件:
双击QRC文件,按照以下配置进行配置,主要用于load()函数

update 翻译文件
在应用程序代码中修改后添加某些翻译字符串后,“.ts”文件不会自动更新,需要在相应的“.ts”文件的右键菜单中点击“lupdate”项,才会更新。
lupdate xx.cpp -ts xx.ts

int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QLocale myLocale;
QString locale = myLocale.name();

QTextCodec * textCodec = QTextCodec::codecForName("System");
QTextCodec::setCodecForLocale(textCodec);

g_pTranslator = new QTranslator(&a);
bool bRet = g_pTranslator->load("remotecom_en.qm");
if (!bRet)
{
qDebug(QString("can't load %1 translation").arg(locale).toLatin1().data());
}
a.installTranslator(g_pTranslator);
...
}

// 点击菜单切换语言
public: signals:
void languagechange(int nType);

void remoteCom::menu_chinese()
{
emit languagechange(1);
bool bRet = g_pTranslator->load(g_appPath + "\\language\\remotecom_zh.qm");
if (!bRet)
{
qDebug(QString("can't load remotecom_zh.qm translation").toLatin1().data());
}
qApp->installTranslator(g_pTranslator);
this->ui.retranslateUi(this);
}

void remoteCom::menu_english()
{
emit languagechange(0);
bool bRet = g_pTranslator->load(g_appPath + "\\language\\remotecom_en.qm");
if (!bRet)
{
qDebug(QString("can't load remotecom_en translation").toLatin1().data());
}
qApp->installTranslator(g_pTranslator);
this->ui.retranslateUi(this);

}

// 其他窗口响应语言改变信号
public slots:
void languageChange(int type);

void Config::languageChange( int type )
{
switch (type)
{
case 0:
{
QTranslator translator;
bool bRet = translator.load(g_appPath + "\\language\\remotecom_en.qm");
if (!bRet)
{
qDebug(QString("can't load remotecom_en translation").toLatin1().data());
}
qApp->installTranslator(&translator);
this->ui.retranslateUi(this);
}
break;
case 1:
{
QTranslator translator;
bool bRet = translator.load(g_appPath + "\\language\\remotecom_zh.qm");
if (!bRet)
{
qDebug(QString("can't load remotecom_en translation").toLatin1().data());
}
qApp->installTranslator(&translator);
this->ui.retranslateUi(this);
}
break;
default:
qDebug("Config::languageChange type undefined.");
break;
}
}