PySide6.QtCore.QTranslator

class QTranslator

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

PySide6.QtCore.QTranslator 的继承图

概要

方法

虚拟方法

注意

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

详细描述

警告

本节包含从C++自动翻译到Python的代码片段,可能包含错误。

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

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

这是一个使用 QTranslatormain() 函数示例:

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())

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

大多数应用程序将永远不需要对这个类做任何其他事情。这个类提供的其他函数对于处理翻译文件的应用程序很有用。

查找翻译

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

  • 上下文 - 通常是tr()调用者的类名。

  • 源文本 - 通常是 tr() 的参数。

  • 消歧 - 一个可选的字符串,用于帮助在同一上下文中区分相同文本的不同用途。

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

但这并不总是那么简单。西班牙版本的打印机对话框,带有双面打印和装订设置,可能需要“Activado”和“Activada”作为“Enabled”的翻译。在这种情况下,源文本在两种情况下都是“Enabled”,上下文是对话框的类名,但这两个项目会有消歧,例如一个是“双面打印”,另一个是“装订”。消歧使翻译者能够为西班牙版本选择适当的性别,并使Qt能够区分翻译。

使用多种翻译

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

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

另请参阅

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

__init__([parent=None])
Parameters:

父对象QObject

构造一个空的文件消息对象,其父对象为parent,且未连接到任何文件。

filePath()
Return type:

字符串

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

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

isEmpty()
Return type:

布尔

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

language()
Return type:

字符串

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

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

  • directory – str

Return type:

布尔

此函数重载了 load()

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

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

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

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

  • directory – str

  • search_delimiters – str

  • suffix – str

Return type:

布尔

加载 filename + suffix(如果未指定 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() 而不仅仅是区域设置名称,区域设置名称指的是日期和数字的格式,而不一定是用户界面语言。

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

  • filename – str

  • prefix – str

  • directory – str

  • suffix – str

Return type:

布尔

加载 filename + prefix + ui language name + suffix(如果未指定 suffix,则默认为“.qm”),这可能是绝对文件名或相对于 directory 的文件名。如果成功加载翻译,则返回 true;否则返回 false

此翻译器对象的先前内容已被丢弃。

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

  1. 文件名没有附加suffix

  2. 文件名中去掉“_”字符后的ui语言部分和suffix

  3. 文件名已去除UI语言部分,未附加suffix

  4. 去除UI语言部分后的文件名,等等。

例如,一个在locale中运行的应用程序,具有以下ui languages - “es”, “fr-CA”, “de” 可能会调用 load(QLocale(), “foo”, “.”, “/opt/foolib”, “.qm”)。load() 会在用户界面语言中将‘-’(短横线)替换为‘_’(下划线),然后尝试从以下列表中打开第一个存在的可读文件:

  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 也会尝试加载区域设置名称的小写版本。

translate(context, sourceText[, disambiguation=None[, n=-1]])
Parameters:
  • context – str

  • sourceText – str

  • disambiguation – str

  • n – 整数

Return type:

字符串

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

注意

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

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

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

另请参阅

load()