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
一个应用程序中可以安装多个翻译文件。翻译的搜索顺序与安装顺序相反,因此首先搜索最近安装的翻译文件,最后搜索最早的翻译文件。只要找到包含匹配字符串的翻译,搜索就会停止。
这种机制使得特定的翻译有可能被“选择”或优先于其他翻译;只需将转换器传递给
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()
将尝试打开列表中第一个现有的可读文件:
通常,使用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