Advertisement

VS_QT_8_Qt中英文翻译

阅读量:

目录

  • 一、概述

  • 二、中英文创建

    • 1、Qt Linguist
      • 创建.ts文件
      • 翻译.ts文件
      • 发布.qm文件
  • 三、中英文切换

一、概述

中英文翻译功能是一种广泛存在的技术特点,例如常见的浏览器网页通常都支持多语言选择。为了满足更多用户需求,国外主流软件在本地也会提供汉化版本,同时为了满足国产软件开发的需求,中文与英文的切换操作是一种常见且默认配置的功能。

在软件开发过程中,我们通常会采用统一的英文格式作为默认选择。然而,如果项目一开始就未充分考虑多语言切换的需求,无论是采用全英文设计还是全中文设计,当需要进行语言切换时,临时进行界面设计修改都会增加一些时间成本。为此,本章节将分步骤进行讲解:

1. 生成中英文翻译对照文件
通过自动化工具,生成英文文本与中文对照的翻译文件。
2. 详细阐述调用方法并实现中英文自由切换功能
本系统支持通过调用API实现中英文语言的自由切换功能,具体包括英文转中文和中文转英文两种模式。该功能基于先进的自然语言处理技术,确保翻译的准确性和流畅性。

备注:本工程自始至终全部采用英文进行项目工程的所有界面设计工作;待开发完成后,将通过Qt Linguist工具对ts文件进行处理,生成对应的qm文件,从而为中英文切换提供自动翻译的基础文件。

二、中英文创建

1、Qt Linguist

Launch Linguist

Qt Linguist 是为QT平台提供的字符串多语言翻译功能平台。安装成功使用的VS和QT程序后,VS主菜单栏会新增一个QT功能栏,在该功能栏中依次包含QT Designer、QT Linguist、QT项目设置、QT版本信息设置等功能项。在QT功能栏的下拉列表中,点击【Launch Linguist

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

上下文

上下文

软件界面采用Qt语言进行设计,主窗口布局从左至右依次为包含内容的区域、包含字符串的区域以及包含短语和表单的区域。

项目 描述
上下文 工程中创建的多个UI
字符串 每个UI中对应的部件
短语和表单 每个部件对应的内容

创建.ts文件

当采用英文设计界面开发完成后,如下MultiViewer UI最终的设计界面

在这里插入图片描述

单击VS2013窗口标题栏中的【QT5

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

解决方案资源管理器

解决方案资源管理器

此时,上面生成的imagingviewer_zh.ts和imagingviewer_en.ts分别位于【解决方案资源管理器

在这里插入图片描述

点击选中imagingviewer_zh.ts文件并执行双击操作后,Qt linguist软件会自动打开ImagingViewer工程的所有设计界面。

在这里插入图片描述

翻译.ts文件

上下文

源文

源文

在这里插入图片描述

依次翻译其他控件

在这里插入图片描述

发布.qm文件

文件

文件

文件

文件

在这里插入图片描述

在Translation Files目录下创建的.ts文件,右键点击选中的文件后会显示lupdate更新或lrelease发布功能。

在这里插入图片描述

三、中英文切换

根据上一节的翻译资源库.qm文件,本节内容采用源代码与文本结合的方式,阐述如何成功地实现中英文字转换功能。

首先,在main函数中导入.qm文件,其中默认采用英文版本,用户可选其他语言。具体来说,这里采用了相对路径方式,将imagingviewer_en.qm和imagingviewer_zh.qm分别放置在与.exe文件处于同一目录的位置。

复制代码
    //main.cpp
    void main()
    {
    //
    QTranslator* mTranslator = new QTranslator(qApp);
    mTranslator->load("./imagingviewer_en.qm");
    qApp->installTranslator(mTranslator);
    //
    }
    
    
      
      
      
      
      
      
      
      
      
    
    AI助手

在打开资源管理器时,可以使用ImagingViewer.qrc程序。随后,选择并导入所需的.qm文件,然后找到该文件在资源管理器中引用的相对路径。例如,这里的相对路径为:/Resources/imagingviewer_zh.qm。

在这里插入图片描述
qm文件 描述 备注
exe同一路径 load(“./imagingviewer_en.qm”)
qrc载入资源 load(“:/Resources/imagingviewer_zh.qm”) 不稳定,会出现找不到该路径问题

在主界面ImagingViewer中实现语言切换

在构造函数中为ImagingViewer建立信号与槽连接,这样在m_TopWidget切换语言时,可以通过LanguageChange(int)信号将索引值发送至主界面ImagingViewer。槽函数ChangeLanguage(int)根据传入的索引值,分别调用对应的.qm文件。重载changeEvent(QEvent *event)函数,该函数在处理QEvent::LanguageChange事件时,将调用UI翻译接口ui.retranslateUi(this)。

复制代码
    //ImagingViewer.h
    //main window class
    class ImagingViewer : public QMainWindow
    {
    Q_OBJECT
    public:
    //
    
    public slots:
    
    //0-English; 1-Chinese
    void ChangeLanguage(int);
    
    protected:
    void changeEvent(QEvent *event);
    
    private:
    QTranslator* m_QTranslator;
    };
    
    
    
    
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
    
    AI助手
复制代码
    //ImagingViewer.cpp
    
    //Constructed Function
    ImagingViewer::ImagingViewer(QWidget *parent): QMainWindow(parent)
    {
    ui.setupUi(this);
    
    // 建立信号和槽,用于连接标题栏翻译按钮触发时的中英文切换响应
    	connect(m_TopWidget, SIGNAL(LanguageChange(int)), this,SLOT(ChangeLanguage(int)));
    }
    
    
    void ImagingViewer::changeEvent(QEvent *e)
    {
    	QWidget::changeEvent(e);
    	switch (e->type())
    	{
    //  当发生QEvent::LanguageChange事件时,调用ui.retranslateUi(this)重新翻译
    	case QEvent::LanguageChange:
    		ui.retranslateUi(this);
    		break;
    	default:
    		break;
    	}
    }
    
    // 槽函数,根据索引值分别调用imagingviewer_zh.qm或imagingviewer_en.qm文件
    void ImagingViewer::ChangeLanguage(int index)
    {
    	m_QTranslator = new QTranslator(qApp);
    	if (index)
    	{
    	    //index =1, change language to Chinease
    		if (m_QTranslator->load(QString("./imagingviewer_zh.qm")))
    		{
    			qApp->installTranslator(m_QTranslator);
    		}
    	}
    	else
    	{
    	    //index =0, change language to English
    		if (m_QTranslator->load(QString("./imagingviewer_en.qm")))
    		{
    			qApp->installTranslator(m_QTranslator);
    		}
    	}
    	ui.retranslateUi(this);
    }
    
    
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
    
    AI助手

在整合多个widget界面并完成主界面布局的情况下,主界面所定义的槽函数在触发语言切换时,仅限于主界面的英文字符串会被翻译成中文,而次界面则会保持不变。这种直观表现为只有ImagingViewer窗口的字符串会被翻译,而其他如MultiViewer等次界面则无法实现翻译功能。因此,必须在MultiViewer次界面中实现changeEvent(QEvent *event)函数的行为,以确保语言切换的同步翻译。对于其他次界面(如ToolWidget、VolumeViewer和TopWidget),其同步翻译功能的实现方式应与MultiViewer次界面保持一致。

复制代码
    //MultiViewer.h 
    //Local window
    class MultiViewer : public QWidget
    {
    Q_OBJECT
    
    public:
         //
         
    protected:
    		void changeEvent(QEvent *event);
    };
    
    
      
      
      
      
      
      
      
      
      
      
      
      
    
    AI助手
复制代码
    //MultiViewer.cpp
    void MultiViewer::changeEvent(QEvent *event)
    {
    	if (event->type() == QEvent::LanguageChange){
    		ui.retranslateUi(this);
    	}
    }
    
    
      
      
      
      
      
      
      
    
    AI助手
  1. 结果展示
在这里插入图片描述
在这里插入图片描述

全部评论 (0)

还没有任何评论哟~