EditorTranslationParserPlugin

继承: RefCounted < Object

用于添加自定义解析器,以从自定义文件(.csv、.json等)提取已翻译的字符串的插件。

描述

EditorTranslationParserPlugin在文件被解析以提取需要翻译的字符串时被调用。为了定义解析和提取字符串的逻辑,在脚本中覆盖 _parse_file 方法。

如果使用上下文或复数形式,则将提取的字符串添加到参数 msgidsmsgids_context_plural

添加到 msgids_context_plural 时,必须使用格式 ["A", "B", "C"] 添加数据,其中 A 表示提取的字符串,B 表示上下文,C 表示提取的字符串的复数形式。如果只想添加上下文而不添加复数形式,请将 "" 用于复数形式槽。如果只想添加复数形式而不是上下文,做法也是一样的。有关具体示例,请参阅下面的代码。

提取的字符串将被写入用户在“项目设置”菜单的“本地化”选项卡中的“POT 生成”下选择的 POT 文件中。

下面显示了一个自定义解析器的示例,该解析器从 CSV 文件中提取字符串以写入 POT 中。

GDScriptC#

  1. @tool
  2. extends EditorTranslationParserPlugin
  3. func _parse_file(path, msgids, msgids_context_plural):
  4. var file = FileAccess.open(path, FileAccess.READ)
  5. var text = file.get_as_text()
  6. var split_strs = text.split(",", false)
  7. for s in split_strs:
  8. msgids.append(s)
  9. #print("提取的字符串:" + s)
  10. func _get_recognized_extensions():
  11. return ["csv"]
  1. using Godot;
  2. [Tool]
  3. public partial class CustomParser : EditorTranslationParserPlugin
  4. {
  5. public override void _ParseFile(string path, Godot.Collections.Array<string> msgids, Godot.Collections.Array<Godot.Collections.Array> msgidsContextPlural)
  6. {
  7. using var file = FileAccess.Open(path, FileAccess.ModeFlags.Read);
  8. string text = file.GetAsText();
  9. string[] splitStrs = text.Split(",", allowEmpty: false);
  10. foreach (string s in splitStrs)
  11. {
  12. msgids.Add(s);
  13. //GD.Print($"提取的字符串:{s}");
  14. }
  15. }
  16. public override string[] _GetRecognizedExtensions()
  17. {
  18. return new string[] { "csv" };
  19. }
  20. }

要添加一个与上下文或复数关联的可翻译字符串,请将其添加到 msgids_context_plural

GDScriptC#

  1. # 这将添加一条消息,其中 msgid 为“测试 1”、msgctxt 为“上下文”,以及 msgid_plural 为“测试 1 复数形式”。
  2. msgids_context_plural.append(["测试 1", "上下文", "测试 1 复数形式"])
  3. # 这将添加一条消息,其中 msgid 为“一个没有上下文的测试”、msgid_plural 为 “复数形式”。
  4. msgids_context_plural.append(["一个没有上下文的测试", "", "复数形式"])
  5. # 这将添加一条消息,其中 msgid 为“仅带有上下文”、msgctxt 为 “一条友好的上下文”。
  6. msgids_context_plural.append(["仅带有上下文", "一条友好的上下文", ""])
  1. // 这将添加一条消息,其中 msgid 为“测试 1”、msgctxt 为“上下文”,以及 msgid_plural 为“测试 1 复数形式”。
  2. msgidsContextPlural.Add(new Godot.Collections.Array{"测试 1", "上下文", "测试 1 复数形式"});
  3. // 这将添加一条消息,其中 msgid 为“一个没有上下文的测试”、msgid_plural 为 “复数形式”。
  4. msgidsContextPlural.Add(new Godot.Collections.Array{"一个没有上下文的测试", "", "复数形式"});
  5. // 这将添加一条消息,其中 msgid 为“仅带有上下文”、msgctxt 为 “一条友好的上下文”。
  6. msgidsContextPlural.Add(new Godot.Collections.Array{"仅带有上下文", "一条友好的上下文", ""});

注意:如果覆盖了标准脚本类型(GDScript、C# 等)的解析逻辑,最好使用 ResourceLoader.load 加载 path 参数。这是因为内置脚本被加载为 Resource 类型,而不是 FileAccess 类型。

例如:

GDScriptC#

  1. func _parse_file(path, msgids, msgids_context_plural):
  2. var res = ResourceLoader.load(path, "Script")
  3. var text = res.source_code
  4. # 解析逻辑。
  5. func _get_recognized_extensions():
  6. return ["gd"]
  1. public override void _ParseFile(string path, Godot.Collections.Array<string> msgids, Godot.Collections.Array<Godot.Collections.Array> msgidsContextPlural)
  2. {
  3. var res = ResourceLoader.Load<Script>(path, "Script");
  4. string text = res.SourceCode;
  5. // 解析逻辑。
  6. }
  7. public override string[] _GetRecognizedExtensions()
  8. {
  9. return new string[] { "gd" };
  10. }

要使用 EditorTranslationParserPlugin,请先使用 EditorPlugin.add_translation_parser_plugin 方法注册它。

方法

PackedStringArray

_get_recognized_extensions() virtual const

void

_parse_file(path: String, msgids: Array[String], msgids_context_plural: Array[Array]) virtual


方法说明

PackedStringArray _get_recognized_extensions() virtual const 🔗

获取与该解析器关联的文件扩展名列表,例如 ["csv"]


void _parse_file(path: String, msgids: Array[String], msgids_context_plural: Array[Array]) virtual 🔗

覆盖该方法,定义自定义解析逻辑以提取可翻译的字符串。