河北省建设局网站,网站建设设计公司+知乎,潜江网站开发,免费网站建设必择山东绘政科技Qt 国际化——创建中英文翻译步骤
说明#xff1a;之前我的csdn博客#xff0c;第一篇文章发表的就是Qt国际化的文章#xff08;点击打开#xff09;#xff0c;写的也过于简单了#xff1a; 今天#xff0c;这篇文章再详细的记录下#xff0c;中英文翻译的步骤。
一…Qt 国际化——创建中英文翻译步骤
说明之前我的csdn博客第一篇文章发表的就是Qt国际化的文章点击打开写的也过于简单了 今天这篇文章再详细的记录下中英文翻译的步骤。
一、环境介绍
本片以Qt 5.12.2编译器MinGWQt Creator 4.8.2为例 操作系统为Win 11 64位 二、Qt Linguist
Qt对于多语言切换模块提供了专门的工具Qt LinguistQt语言家我们可以在安装Qt的目录下看到这个工具它分为32位和64位如果你的编译器是32位的你翻译的时候就是用32位的Linguist64位的编译器就对应64位的Linguist。 打开Qt Linguist如下所示 使用Qt Linguist打开一个文件的时候我们可以看到它支持的文件类型如下图所示 其中一个文件类型是.ts类型.ts类型就是存储程序翻译的内容信息有了这一个文件才可以生成.qm的二进制文件相应的语言文件供Qt程序加载从而实现多语言的切换。
三、配置生成ts文件
我们知道了需要先生成ts文件才能实现接下来的步骤。ts文件生成需要在pro文件中配置比如需要中英文切换这时在pro文件中添加的代码如下
TRANSLATIONS Language_CN.ts\Language_EN.ts
Language_CN.ts表示中文ts文件Language_EN.ts表示英文ts文件。
在pro文件中添加完成后通过Qt Creator菜单栏“工具-外部(E)-Qt语言家-更新翻译(lupdate)”即可生成.ts文件。 ts文件内容格式大致如下所示
?xml version1.0 encodingutf-8?
!DOCTYPE TS
TS version2.1
contextnameMainWindow/namemessagelocation filenamemainwindow.ui line14/sourceMainWindow/sourcetranslation typeunfinished/translation/messagemessagelocation filenamemainwindow.ui line27/sourcePushButton/sourcetranslation typeunfinished/translation/messagemessagelocation filenamemainwindow.ui line40/source中文/sourcetranslation typeunfinished/translation/messagemessagelocation filenamemainwindow.cpp line11/sourcelange/sourcetranslation typeunfinished/translation/messagemessagelocation filenamemainwindow.cpp line16/sourceEnglish/sourcetranslation typeunfinished/translation/messagemessagelocation filenamemainwindow.cpp line18/sourceChinese/sourcetranslation typeunfinished/translation/message
/context
/TS
其实就是xml形式的文本文件。这一步操作对应的命令是
lupdate xxxx.pro
如果是界面操作就不用管这个命令生成。
四、tr函数
在上一步中我们生成ts文件之前需要把我们需要翻译的内容使用tr函数进行包裹tr函数的原型是
static QString tr(const char *sourceText, const char * nullptr, int -1)
被tr处理的字符串可以使用工具提取出来翻译成其他语言。
如图代码中tr的使用 也可以看到和ts文件对应的内容 五、qm文件
在经过上面的步骤之后我们需要把ts文件翻译成中文并编译生成qm文件才能被Qt加载。
打开Qt 中安装的Linguist软件选择我们上面生成的ts文件如下图所示 选择需要翻译的项输入需要翻译的内容然后点击工具栏中的够好即可上面是翻译成中文的ts英文的步骤一样。
然后点击“文件-发布R”既可生成对应的qm文件。 可以看到qm文件的生成。 这一步如果使用命令行的生成的话代码如下
lrelease xxx.pro
六、qm文件的加载
编译生成qm文件后我们就可以调用我们的翻译文件了。
1、首先在界面上创建可以切换中英文的菜单栏你可以通过其他的控件来控制这一步操作 2、main函数中调用 QTranslator translator;//translator.load(:/qm/Language_EN.qm);a.installTranslator( translator );MainWindow w;w.setTranslator(translator);w.showMaximized();
3、Mainwindow中调用
class MainWindow : public QWidget
{Q_OBJECTpublic:explicit MainWindow(QWidget *parent nullptr);~MainWindow();private slots:void languageCNActionClickedSlot();void languageENActionClickedSlot();protected:void changeEvent(QEvent* event);public:void setTranslator(QTranslator* translator);private:void initMenuData();void translatorUI();private:Ui::MainWindow *ui;QMenu* mMenu nullptr;QAction *mLanguageCNAction nullptr;QAction *mLanguageENAction nullptr;QTranslator* mTranslator nullptr;
};void MainWindow::setTranslator(QTranslator *translator)
{mTranslator translator;
}void MainWindow::changeEvent(QEvent *event)
{switch (event-type()){case QEvent::LanguageChange:translatorUI();break;default:QWidget::changeEvent(event);}
}void MainWindow::languageCNActionClickedSlot()
{mTranslator-load(:/qm/Language_CN.qm);
}void MainWindow::languageENActionClickedSlot()
{mTranslator-load(:/qm/Language_EN.qm);
}void MainWindow::translatorUI()
{mLanguageCNAction-setText(tr(Chinese));mLanguageENAction-setText(tr(English));mHelpAction-setText(tr(Help));mAboutAction-setText(tr(About));ui-retranslateUi(this);
}
以上的代码我们通过LanguageEvent事件来实现动态切换中英文。 本文原创作者冯一川ifeng12358163.com未经作者授权同意请勿转载。