Yayin Story Studio logo Yayin Story Studio 项目文档
回到主页 用户手册

Visindigo::General::Translator Class

class Visindigo::General::Translator

Visindigo的翻译功能类,用于强化Qt自带的翻译功能. 详情...

头文件: #include <General/Translator.h>
自以下版本: Visindigo 0.13.0
继承自: Visindigo::General::PluginModule

公开类型

(自 Visindigo 0.13.0 引入) enum LangID { Unknown, zh_CN, zh_SC, zh_TC, en, …, fr }

公开成员函数

(自 Visindigo 0.13.0 引入) Translator(Visindigo::General::Plugin *parent, const QString &nameSpace)
(自 Visindigo 0.13.0 引入) virtual ~Translator()
(自 Visindigo 0.13.0 引入) void addLangFilePath(Visindigo::General::Translator::LangID id, QString path)
(自 Visindigo 0.13.0 引入) QString getNamespace()
(自 Visindigo 0.13.0 引入) void setDefaultLang(Visindigo::General::Translator::LangID lang)
(自 Visindigo 0.13.0 引入) void setLangFilePath(const QMap<Visindigo::General::Translator::LangID, QString> &langFilePath)
(自 Visindigo 0.13.0 引入) void setNamespace(const QString &nameSpace)
(自 Visindigo 0.13.0 引入) QString tr(const QString &key)

静态公开成员

(自 Visindigo 0.14.0 引入) QString langIDToString(Visindigo::General::Translator::LangID id)
(自 Visindigo 0.14.0 引入) Visindigo::General::Translator::LangID stringToLangID(const QString &str)

详细说明

Translator是Visindigo利用JSON文件实现的翻译功能类, 它不一定比Qt自带的翻译功能具有更好的性能,但它的易用性更好。

与Qt自带的翻译功能相比,Translator的最大特点在于其使用键名, 而非初始语言的原文本作为翻译的索引,这意味着在代码中, 可以极大程度地避免对文本的修改对翻译功能的影响,从而减少了代码的维护成本。

除此之外,由于Visindigo的模块化设计,为避免不同模块间的翻译键名冲突, Translator使用命名空间来区分不同模块的翻译内容。

Visindigo的键名格式如下:

<namespace>::<key>.<subkey>...

其中<namespace>为命名空间,命名空间之后则为Json节点的索引路径,例如:

{
        "Part1": {
                "SubPart1": "This is SubPart1 of Part1",
                "SubPart2": "This is SubPart2 of Part1"
        },
        "Part2": "This is Part2"
}

则可以有如下的键名:

<namespace>::Part1.SubPart1
<namespace>::Part1.SubPart2
<namespace>::Part2

此外,在Visindigo提供的部分从配置文件生成窗口的功能中 (例如Visindigo::Widgets::ConfigWidgetVisindigo::Widgets::QuickMenu等) 以及明确了支持VI18N格式的参数中,如果其文本内容应该以"i18n:"开头, 且后接键名,例如:

i18n:<namespace>::Part1.SubPart1

那么该文本就可以被自动识别并进行翻译。若不加"i18n:"前缀,则Visindigo 会将其视为普通文本,不进行翻译。

成员类型文档

[since Visindigo 0.13.0] enum Translator::LangID

ConstantValueDescription
Visindigo::General::Translator::Unknown0未知语言
Visindigo::General::Translator::zh_CN1简体中文
Visindigo::General::Translator::zh_SCzh_CN简体中文(同zh_CN)
Visindigo::General::Translator::zh_TC2繁体中文
Visindigo::General::Translator::en3英文
Visindigo::General::Translator::ja4日文
Visindigo::General::Translator::ko5韩文
Visindigo::General::Translator::ru6俄文
Visindigo::General::Translator::de7德文
Visindigo::General::Translator::fr8法文 请注意,这里并没有使用ISO 639-1或ISO 639-2等国际标准的语言代码,而是使用了一套自定义的语言ID。 这是因为目前Visindigo的翻译功能还需要同步驱动Qt Linguist的翻译功能(比如自动加载对应的qm文件), 而Qt的qm文件未遵守ISO的要求,因此目前该枚举只能暂时与Qt的qm文件名保持一致。

这预计会在未来的某个版本中进行调整,调整之后LangID直接遵循ISO要求,然后再提供ISO 到qm文件名的转换函数,以保持与Qt的兼容性。

这个enum 从 Visindigo 0.13.0 开始支持。

成员函数文档

[since Visindigo 0.13.0] Translator::Translator(Visindigo::General::Plugin *parent, const QString &nameSpace)

parent 插件对象的指针,作为Translator的父对象。 nameSpace 命名空间,用于区分不同模块的翻译内容。 构造Translator对象,并设置命名空间。

这个function 从 Visindigo 0.13.0 开始支持。

[virtual noexcept, since Visindigo 0.13.0] Translator::~Translator()

析构Translator对象。

这个function 从 Visindigo 0.13.0 开始支持。

[since Visindigo 0.13.0] void Translator::addLangFilePath(Visindigo::General::Translator::LangID id, QString path)

id 为语言ID, path 为对应的语言文件路径。 添加语言文件路径。

这个function 从 Visindigo 0.13.0 开始支持。

[since Visindigo 0.13.0] QString Translator::getNamespace()

return 当前命名空间。

这个function 从 Visindigo 0.13.0 开始支持。

[static, since Visindigo 0.14.0] QString Translator::langIDToString(Visindigo::General::Translator::LangID id)

id 转换为字符串。 return 语言ID对应的字符串,例如zh_CN、en等。

这个function 从 Visindigo 0.14.0 开始支持。

[since Visindigo 0.13.0] void Translator::setDefaultLang(Visindigo::General::Translator::LangID lang)

设置 lang 为默认语言。默认语言用于在当前语言缺少某个键名的翻译时进行回退。

这个function 从 Visindigo 0.13.0 开始支持。

[since Visindigo 0.13.0] void Translator::setLangFilePath(const QMap<Visindigo::General::Translator::LangID, QString> &langFilePath)

设置 langFilePath 为语言文件路径。 langFilePath 的键为语言ID,值为对应的语言文件路径。

语言文件不会在设置后立即加载,只有当Translator被挂载到TranslationHost后,才会按需加载对应的语言文件。

Warning: 不推荐使用这个函数。由于未知原因,此函数在某些情况下会创建 病态的QMap对象,从而导致程序崩溃。建议使用addLangFilePath()函数逐个添加语言文件路径。

这个function 从 Visindigo 0.13.0 开始支持。

另请参阅 TranslationHost.

[since Visindigo 0.13.0] void Translator::setNamespace(const QString &nameSpace)

设置 nameSpace 为命名空间。

这个function 从 Visindigo 0.13.0 开始支持。

[static, since Visindigo 0.14.0] Visindigo::General::Translator::LangID Translator::stringToLangID(const QString &str)

str 字符串转换为语言ID。参数str为要转换的字符串,例如zh_CN、en等。 return 为对应的语言ID,如果转换失败,则返回LangID::Unknown

这个function 从 Visindigo 0.14.0 开始支持。

[since Visindigo 0.13.0] QString Translator::tr(const QString &key)

翻译键名为 key 的文本。

return 翻译结果。如果当前语言和默认语言均缺少该键名的翻译,则返回原键名。

这个function 从 Visindigo 0.13.0 开始支持。