class QTranslator#

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

Inheritance diagram of PySide6.QtCore.QTranslator

概述#

方法#

虚拟方法#

注意

本文档可能包含从 C++ 自动翻译到 Python 的代码片段。我们始终欢迎对片段翻译的贡献。如果您发现翻译存在问题时,也可以通过在 https:/bugreports.qt.io/projects/PYSIDE 上创建问题报告来告诉我们。

详细说明#

警告

本节包含自动从C++转换为Python的代码片段,可能包含错误。

此类对象包含从源语言到目标语言的翻译集合。《PySide6.QtCore.QTranslator》提供了一个函数来查找翻译文件。使用Qt Linguist创建翻译文件。

《PySide6.QtCore.QTranslator》最常见的用途是:加载翻译文件,并使用《PySide6.QtCore.QCoreApplication.installTranslator》(安装翻译器)进行安装。

下面是一个使用《PySide6.QtCore.QTranslator》的示例《main()`》函数。

if __name__ == "__main__":

    app = QApplication([])
    translator = QTranslator()
    # look up e.g. :/i18n/myapp_de.qm
    if translator.load(QLocale(), "myapp", "_", ":/i18n"):
        QCoreApplication.installTranslator(translator)
    hello = QPushButton(QCoreApplication.translate("main", "Hello world!"))
    hello.resize(100, 30)
    hello.show()
    sys.exit(app.exec())

请注意,翻译器必须在创建应用程序的小部件之前创建。

大多数应用程序都不需要对这个类进行其他操作。此类提供的其他函数有助于处理翻译文件的应用程序。

查找翻译#

可以使用《PySide6.QtCore.QTranslator.translate》(类似《tr()`》和《PySide6.QtCore.QCoreApplication.translate》)查找翻译。该《translate()`》函数最多可接受三个参数

  • 上下文 - 通常为《tr()`》调用者的类名。

  • 源文本 - 通常为《tr()`》的参数。

  • 消除歧义 - 有助于消除同一上下文中相同文本的不同用法的一个可选字符串。

例如,在对话框中的“取消”选项可能当程序在波兰语(在这种情况下源文本为“取消”)运行时会显示“Anuluj”。上下文通常是对话框的类名;通常没有注释,翻译文本将是“Anuluj”。

但情况并不总是如此简单。打印对话框的西班牙语版本,它设置了双面打印和装订设置,可能需要两个不同的翻译,“Activado”和“Activada”来翻译“Enabled”。在这种情况下,两种情况下的源文本都将为“Enabled”,上下文将是对话框的类名,但是两个条目将具有消除歧义的字符串,比如一个的消除歧义是“双面打印”,另一个是“装订”。消除歧义允许翻译器为西班牙语版本选择适当的性别,并允许Qt区分翻译。

使用多个翻译#

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

该机制使得特定的翻译可以被“选择”或比其他翻译拥有更高的优先级;只需通过调用 removeTranslator() 函数从应用中卸载翻译器,然后使用 installTranslator() 重新安装它。此时它将成为搜索匹配字符串的首选翻译。

另见

installTranslator() removeTranslator() tr() translate() I18N ExampleHello tr() ExampleArrow Pad ExampleTroll Print Example

__init__([parent=None])#
参数:

parentQObject

构建一个空的带父对象 parent 的信息文件对象,不连接到任何文件。

filePath()#
返回类型:

str

返回加载的翻译文件的路径。

如果在没有加载翻译的情况下、加载失败或翻译未从文件加载时,文件路径将为空。

isEmpty()#
返回类型:

bool

如果此翻译器为空,则返回 true,否则返回 false。此功能与パックされたおよび非パックされた翻译文件一起工作。

language()#
返回类型:

str

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

load(locale, filename[, prefix=""[, directory=""[, suffix=""]]])#
参数:
  • localeQLocale

  • filename – str

  • prefix – str

  • directory – str

  • suffix – str

返回类型:

bool

加载文件 filenameprefixui language namesuffix (如果未指定 suffix 则为 “.qm”),这可能是一个绝对路径文件或相对于 directory 的文件。如果成功加载翻译,则返回 true;否则返回 false

丢弃此翻译对象之前的所有内容。

如果文件名不存在,将会按照以下顺序尝试其他文件名

  1. 添加 suffix 的文件名。

  2. 去除 UI 语言部分的文件名和 suffix

  3. 去除 UI 语言部分,不添加 suffix

  4. 进一步去除 UI 语言部分,等等。

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

  1. /opt/foolib/foo.es.qm

  2. /opt/foolib/foo.es

  3. /opt/foolib/foo.fr_CA.qm

  4. /opt/foolib/foo.fr_CA

  5. /opt/foolib/foo.fr.qm

  6. /opt/foolib/foo.fr

  7. /opt/foolib/foo.de.qm

  8. /opt/foolib/foo.de

  9. /opt/foolib/foo.qm

  10. /opt/foolib/foo.

  11. /opt/foolib/foo

在文件系统是区分大小写的操作系统上,QTranslator 还会尝试加载区域名的小写版本。

load(filename[, directory=""[, search_delimiters=""[, suffix=""]]])
参数:
  • filename – str

  • directory – str

  • search_delimiters – str

  • suffix – str

返回类型:

bool

加载 filenamesuffix (如果未指定 suffix 则为 “.qm”),这可能是一个绝对路径文件或相对于 directory 的文件。如果成功加载翻译,则返回 true;否则返回 false

如果没有指定 directory,则使用当前目录(即,currentPath() )。

丢弃此翻译对象之前的所有内容。

如果文件名不存在,将会按照以下顺序尝试其他文件名

  1. 添加 suffix 的文件名。

  2. 如果文件名在 search_delimiters 中的字符之后包含文本,则去除文件名(如果 search_delimiters 为空字符串,则默认使用 "_" 和 ".")以及 suffix

  3. 去除 suffix 后的文件名。

  4. 进一步去除文件名等。

例如,一个在 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 &) 函数,因为它使用 uiLanguages() 而不仅仅是区域名称,这指的是日期和数字的格式化,而不一定是 UI 语言。

load(data[, directory=""])
参数:
  • data – 字符串

  • directory – str

返回类型:

bool

此函数重载了 load()

将长度为 len 的 QM 文件数据 data 加载到翻译器中。

数据不会被复制。调用者必须能够保证 data 不会被删除或修改。

directory 仅用于在加载 QM 文件的依赖项时指定基本目录。如果文件没有依赖项,则忽略此参数。

translate(context, sourceText[, disambiguation=None[, n=-1]])#
参数:
  • context – 字符串

  • sourceText – 字符串

  • disambiguation – 字符串

  • n – 整数

返回类型:

str

返回键 (context, sourceText, disambiguation) 的翻译。如果未找到,则尝试 (context, sourceText, "")。如果仍失败,则返回空字符串。

注意

不完整的翻译可能会导致意外行为:如果没有提供对(contextsourceText,“”)的翻译,在这种情况下,该方法可能实际上会返回对不同的disambiguation的翻译。

如果n不是-1,它会被用来选择适当的翻译形式(例如,“%n个文件找到”与“%n个文件找到”之间)。

如果您需要将翻译程序化地插入到QTranslator中,这个函数可以被重写。

另见

load()