QTranslator Class

QTranslator Class

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


QTranslator 类

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

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

公共成员函数

构造函数 QTranslator(QObject *parent = nullptr)
virtual ~QTranslator()
QString filePath() const
virtual bool isEmpty() const
QString language() const
bool load(const QString &filename, const QString &directory = QString(), const QString &search_delimiters = QString(), const QString &suffix = QString())
bool load(const QLocale &locale, const QString &filename, const QString &prefix = QString(), const QString &directory = QString(), const QString &suffix = QString())
bool load(const uchar *data, int len, const QString &directory = QString())
virtual QString translate(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.qm
    if (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

QTranslator Class_第1张图片

你可能感兴趣的:(QT,界面开发工程师课程,qt,c++,开发语言,ui)