Visindigo::General::Translator Class
class Visindigo::General::TranslatorVisindigo的翻译功能类,用于强化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::ConfigWidget、Visindigo::Widgets::QuickMenu等) 以及明确了支持VI18N格式的参数中,如果其文本内容应该以"i18n:"开头, 且后接键名,例如:
i18n:<namespace>::Part1.SubPart1
那么该文本就可以被自动识别并进行翻译。若不加"i18n:"前缀,则Visindigo 会将其视为普通文本,不进行翻译。
成员类型文档
[since Visindigo 0.13.0] enum Translator::LangID
| Constant | Value | Description |
|---|---|---|
Visindigo::General::Translator::Unknown | 0 | 未知语言 |
Visindigo::General::Translator::zh_CN | 1 | 简体中文 |
Visindigo::General::Translator::zh_SC | zh_CN | 简体中文(同zh_CN) |
Visindigo::General::Translator::zh_TC | 2 | 繁体中文 |
Visindigo::General::Translator::en | 3 | 英文 |
Visindigo::General::Translator::ja | 4 | 日文 |
Visindigo::General::Translator::ko | 5 | 韩文 |
Visindigo::General::Translator::ru | 6 | 俄文 |
Visindigo::General::Translator::de | 7 | 德文 |
Visindigo::General::Translator::fr | 8 | 法文 请注意,这里并没有使用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 开始支持。