Qt实现中英文切换

准备工作

  1. 在代码中将需要进行翻译的部分用tr()函数包裹起来。
  2. 在项目配置文件*.pro中加上TRANSLATIONS = en_US.ts zh_CN.ts
  3. 在菜单栏工具->外部->Qt语言家->更新翻译,运行lupdate工具,这是会生成.ts文件
  4. 在菜单栏文件->打开文件,用..选择.ts文件,完成翻译工作
  5. 在菜单栏工具->外部->Qt语言家->发布翻译,运行lrelease工具,这是会生成.qm文件

根据当前的区域设置自动选择语言包(main.cpp)

1
2
3
4
5
6
QApplication a(argc, argv);
QString locale = QLocale::system().name();
QTranslator *translator = new QTranslator(&a);
// 会在当前目录下的lang目录下寻找,可以不带".qm"后缀名
translator->load(QCoreApplication::applicationDirPath() + QString("/lang/" + locale));
a.installTranslator(translator); // 安装翻译器

函数实现动态切换(MainWindow.cpp)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// 语言设置
void MainWindow::en_US(bool){
static QTranslator *translator;
if(translator != NULL){
qApp->removeTranslator(translator);
delete translator;
translator = NULL;
}
translator = new QTranslator(this);
// QCoreApplication::applicationDirPath() 获取当前运行程序的路径
// 而QDir::currentPath()只能获取当前程序运行路径的上一级路径
if(translator->load( QCoreApplication::applicationDirPath() + "/lang/en_US.qm")){
qDebug()<<"en_US"<<endl;
qApp->installTranslator(translator);
}
ui->retranslateUi(this); //这一句很重要,加载建立完translator后需要更新界面
}

参考资料
[1]Qt实现多国语言(即界面翻译)可实时进行切换
[2]QT实现多语言/动态切换(国际化)