QTranslator Class

news/2024/11/22 19:30:07/

QTranslator Class

  • QTranslator 类
    • 公共成员函数
    • 类说明
    • 查找翻译
    • 使用多种翻译
    • 成员函数使用说明


QTranslator 类

QTranslator类为文本输出提供国际化支持。多国语言

Header:	#include <QTranslator>
qmake:	QT += core
Inherits:	QObject

公共成员函数

构造函数QTranslator(QObject *parent = nullptr)
virtual~QTranslator()
QStringfilePath() const
virtual boolisEmpty() const
QStringlanguage() const
boolload(const QString &filename, const QString &directory = QString(), const QString &search_delimiters = QString(), const QString &suffix = QString())
boolload(const QLocale &locale, const QString &filename, const QString &prefix = QString(), const QString &directory = QString(), const QString &suffix = QString())
boolload(const uchar *data, int len, const QString &directory = QString())
virtual QStringtranslate(const char *context, const char *sourceText, const char *disambiguation = nullptr, int n = -1) const

类说明

这个类的对象包含一组从源语言到目标语言的翻译。QTranslator提供了在翻译文件中查找翻译的功能。翻译文件是用Qt语言学家创建的(Qt Linguist)。


QTranslator最常见的用途是:加载翻译文件,并使用QCoreApplication::installtranslator()安装它。


下面是一个使用QTranslator的main()函数示例:

int main(int argc, char *argv[])
{QApplication app(argc, argv);QTranslator translator;// look up e.g. :/i18n/myapp_de.qmif (translator.load(QLocale(), QLatin1String("myapp"), QLatin1String("_"), QLatin1String(":/i18n")))QCoreApplication::installTranslator(&translator);QPushButton hello(QCoreApplication::translate("main", "Hello world!"));hello.resize(100, 30);hello.show();return app.exec();
}

请注意,必须在应用程序的小部件之前创建翻译器。 大多数应用程序不需要对这个类做任何其他事情。 该类提供的其他函数对于处理翻译文件的应用程序很有用。


查找翻译

可以使用translate()查找翻译(就像tr()QCoreApplication::translate()所做的那样)。
translate()函数最多接受三个参数:

translate(const char *context, const char *sourceText, const char *disambiguation = nullptr, int n = -1) const
  1. context:通常是tr()调用者的类名。
  2. sourceText:通常tr()的参数。
  3. disambiguation:一个可选字符串,有助于消除同一文本在同一上下文中的不同用法的歧义。

使用多种翻译

一个应用程序中可以安装多个翻译文件。翻译的搜索顺序与安装顺序相反,因此首先搜索最近安装的翻译文件,最后搜索最早的翻译文件。只要找到包含匹配字符串的翻译,搜索就会停止。


这种机制使得特定的翻译有可能被“选择”或优先于其他翻译;只需将转换器传递给QCoreApplication::removeTranslator() 函数,并使用
QCoreApplication::installTranslator()重新安装它,即可从应用程序中卸载该转换器。然后,它将是第一个搜索匹配字符串的翻译。


成员函数使用说明

构造一个空消息文件对象,其父级不连接到任何文件。

QTranslator::QTranslator(QObject *parent = nullptr)

销毁对象并释放所有分配的资源。

QTranslator::~QTranslator()

返回加载的翻译文件的路径。
如果尚未加载翻译、加载失败或者翻译不是从文件加载的,则文件路径为空。

QString QTranslator::filePath() const

如果此翻译器为空,则返回true,否则返回false。此功能适用于已剥离和未剥离的翻译文件。

bool QTranslator::isEmpty() const

返回存储在翻译文件中的目标语言。

QString QTranslator::language() const

加载文件名+后缀(".qm”,如果没有指定后缀的话),这可能是一个绝对文件名或者相对于目录。如果翻译成功加载,则返回true否则返回false。

如果未指定目录,则使用当前目录(即currentPath()
如果文件名不存在,则按以下顺序尝试其他文件名:

1\不带后缀的文件名。
2\search_delimiters中的字符后的文本被去除的文件名(" _ . "如果是空字符串,则默认为search_delimiters)和后缀。
3\去掉文件名,不附加后缀。
4\文件名被进一步剥离,等等。

bool QTranslator::load(const QString &filename, const QString &directory = QString(), const QString &search_delimiters = QString(), const QString &suffix = QString())

例如,在fr_CA语言环境(讲法语的加拿大)中运行的应用程序可能会调用load("foo.fr_ca ","/opt/foolib ").load()将尝试打开列表中第一个现有的可读文件:

  1. /opt/foolib/foo.fr_ca.qm
  2. /opt/foolib/foo.fr_ca
  3. /opt/foolib/foo.fr.qm
  4. /opt/foolib/foo.fr
  5. /opt/foolib/foo.qm
  6. /opt/foolib/foo

通常,使用QTranslator::load(const QLocale &,const QString &,const QString &,const QString &,const QString &,const QString &)函数会更好,因为它使用QLocale::uiLanguages(),而不仅仅是区域设置名称,区域设置名称指的是日期和数字的格式,不一定是UI语言。


加载文件名+前缀+ ui language name+后缀(".qm”,如果没有指定后缀的话),这可能是一个绝对文件名或者相对于目录。如果翻译成功加载,则返回true否则返回false。

bool QTranslator::load(const QLocale &locale, const QString &filename, const QString &prefix = QString(), const QString &directory = QString(), const QString &suffix = QString())

例如,在使用以下 ui languages的区域设置中运行的应用程序-“es”、“fr-CA”、“de”可能会调用load(QLocale(),“foo”,“.”,"/opt/foolib",".qm”)。load()会将ui语言中的’-‘(破折号)替换为’ _ '(下划线),然后尝试打开列表中的第一个现有可读文件:

/opt/foolib/foo.es.qm
/opt/foolib/foo.es
/opt/foolib/foo.fr_CA.qm
/opt/foolib/foo.fr_CA
/opt/foolib/foo.fr.qm
/opt/foolib/foo.fr
/opt/foolib/foo.de.qm
/opt/foolib/foo.de
/opt/foolib/foo.qm
/opt/foolib/foo.
/opt/foolib/foo

在文件系统区分大小写的操作系统上,QTranslator也会尝试加载一个小写版本的语言环境名。


返回关键字的翻译(上下文、源文本、歧义消除)。如果找不到,也会尝试(context,sourceText," ")。如果仍然失败,则返回空字符串。

如果您需要以编程方式将翻译插入到QTranslator中,这个函数可以重新实现。

QString QTranslator::translate(const char *context, const char *sourceText, const char *disambiguation = nullptr, int n = -1) const

奖励
在这里插入图片描述


http://www.ppmy.cn/news/126707.html

相关文章

友元 + 运算符重载

纯粹记录敲代码的过程&#xff0c;1.5倍速&#xff0c;后续遇到bug会回来检索 目录 &#x1f511;友元 &#x1f333;全局函数做友元 &#x1f333;类做友元 &#x1f333;成员函数做友元 &#x1f511;运算符重载 &#x1f333;加号运算符重载 &#x1f333;左移运算符…

推荐抽纸巾选型

1、抽纸面巾纸原料&#xff1a;100%原生木浆 2、执行标准&#xff1a;GB/T 20808 卫生标准&#xff1a;GB 15979 3、等级&#xff1a;选优等品&#xff08;一等品、合格品3个档次&#xff09; 4、无香

碎纸机11

一、前言 本题方向为Misc——GFSJ0971&#xff0c;难度偏简单 来源地址&#xff1a;攻防世界&#xff08;https://adworld.xctf.org.cn/challenges/list&#xff09; 链接&#xff1a;https://pan.baidu.com/s/17fPcN8UcuZ2kqU3FG9GrKw 提取码&#xff1a;k4o2 二、解题过程 下…

平替电容笔用什么品牌,最推荐的品牌

随着无纸化的流行&#xff0c;电容笔作为现在大家必备的办公产品&#xff0c;很小伙伴都是想买一支适合自己的电容笔&#xff0c;但市面上的电容笔都是大同小异&#xff0c;无论是功能还是价格都会让小伙伴挑得眼花缭乱。今天给大家总结几款好用&#xff0c;平替的电容笔&#…

【专题5: 硬件设计】 之 【40.案例三:碎纸机,指示灯电路】

嵌入式工程师成长之路 系列文章 总目录希望本是无所谓有&#xff0c;无所谓无的&#xff0c;这正如脚下的路&#xff0c;其实地上本没有路&#xff0c;走的人多了&#xff0c;也便成了路原创不易&#xff0c;文章会持续更新文章会同步到作者个人公众号上&#xff0c;感谢扫码关…

【专题5: 硬件设计】 之 【33.案例三:碎纸机,光电传感器】

希望本是无所谓有&#xff0c;无所谓无的&#xff0c;这正如脚下的路&#xff0c;其实地上本没有路&#xff0c;走的人多了&#xff0c;也便成了路原创不易&#xff0c;文章会持续更新文章会同步到作者个人公众号上&#xff0c;感谢扫码关注 所有文章总目录&#xff1a;【嵌入式…

Hystrix配置参数解析大全

HystrixCommand 配置方式 我们的配置都是基于 HystrixCommand 的&#xff0c;我们通过在方法上添加 HystrixCommand 注解并配置注解的参数来实现配置&#xff0c;但有的时候一个类里面会有多个 Hystrix 方法&#xff0c;每个方法都是类似配置的话会冗余很多代码&#xff0c;这…

【专题5: 硬件设计】 之 【43.案例三:碎纸机,完整电路图和系统功率计算】

希望本是无所谓有&#xff0c;无所谓无的&#xff0c;这正如脚下的路&#xff0c;其实地上本没有路&#xff0c;走的人多了&#xff0c;也便成了路原创不易&#xff0c;文章会持续更新文章会同步到作者个人公众号上&#xff0c;感谢扫码关注 所有文章总目录&#xff1a;【嵌入式…