Attention: Here be dragons
This is the latest
(unstable) version of this documentation, which may document features
not available in or compatible with released stable versions of Godot.
Checking the stable version of the documentation...
EditorTranslationParserPlugin
Наследует: RefCounted < Object
Плагин для добавления пользовательских парсеров для извлечения строк, которые необходимо перевести, из пользовательских файлов (.csv, .json и т. д.).
Описание
EditorTranslationParserPlugin вызывается при разборе файла для извлечения строк, требующих перевода. Для определения логики разбора и извлечения строк переопределите метод _parse_file() в скрипте.
Возвращаемое значение должно представлять собой массив Array из PackedStringArray, по одному для каждой извлеченной переводимой строки. Каждая запись должна содержать [msgid, msgctxt, msgid_plural, comment, source_line], где все, кроме msgid, являются необязательными. Пустые строки будут игнорироваться.
Извлеченные строки будут записаны в файл шаблона перевода, выбранный пользователем в разделе «Генерация шаблонов» на вкладке «Локализация» в меню «Настройки проекта».
Ниже приведен пример пользовательского парсера, который извлекает строки из CSV-файла для записи в шаблон.
@tool
extends EditorTranslationParserPlugin
func _parse_file(path):
var ret: Array[PackedStringArray] = []
var file = FileAccess.open(path, FileAccess.READ)
var text = file.get_as_text()
var split_strs = text.split(",", false)
for s in split_strs:
ret.append(PackedStringArray([s]))
#print("Извлеченная строка: " + s)
return ret
func _get_recognized_extensions():
return ["csv"]
using Godot;
[Tool]
public partial class CustomParser : EditorTranslationParserPlugin
{
public override Godot.Collections.Array<string[]> _ParseFile(string path)
{
Godot.Collections.Array<string[]> ret;
using var file = FileAccess.Open(path, FileAccess.ModeFlags.Read);
string text = file.GetAsText();
string[] splitStrs = text.Split(",", allowEmpty: false);
foreach (string s in splitStrs)
{
ret.Add([s]);
//GD.Print($"Извлеченная строка: {s}");
}
return ret;
}
public override string[] _GetRecognizedExtensions()
{
return ["csv"];
}
}
Чтобы добавить переводимую строку, связанную с контекстом, множественным числом, комментарием или исходной строкой:
# Это добавит сообщение с msgid "Test 1", msgctxt "context", msgid_plural "test 1 plurals", comment "test 1 comment" и строкой источника "7".
ret.append(PackedStringArray(["Test 1", "context", "test 1 plurals", "test 1 comment", "7"]))
# Это добавит сообщение с идентификатором msgid "Тест без контекста" и значением msgid_plural "множественное число".
ret.append(PackedStringArray(["A test without context", "", "plurals"]))
# Это добавит сообщение с идентификатором msgid "Только с контекстом" и текстом msgctxt "дружественный контекст".
ret.append(PackedStringArray(["Only with context", "a friendly context"]))
// Это добавит сообщение с msgid "Test 1", msgctxt "context", msgid_plural "test 1 plurals", comment "test 1 comment" и строкой источника "7".
ret.Add(["Test 1", "context", "test 1 plurals", "test 1 comment", "7"]);
// Это добавит сообщение с идентификатором msgid "Тест без контекста" и значением msgid_plural "множественное число".
ret.Add(["A test without context", "", "plurals"]);
// Это добавит сообщение с идентификатором msgid "Только с контекстом" и текстом msgctxt "дружественный контекст".
ret.Add(["Only with context", "a friendly context"]);
Примечание: Если вы переопределяете логику парсинга для стандартных типов скриптов (GDScript, C# и т. д.), лучше загружать аргумент path с помощью ResourceLoader.load(). Это связано с тем, что встроенные скрипты загружаются как тип Resource, а не FileAccess. Например:
func _parse_file(path):
var res = ResourceLoader.load(path, "Script")
var text = res.source_code
# Логика синтаксического анализа.
func _get_recognized_extensions():
return ["gd"]
public override Godot.Collections.Array<string[]> _ParseFile(string path)
{
var res = ResourceLoader.Load<Script>(path, "Script");
string text = res.SourceCode;
// Логика синтаксического анализа.
}
public override string[] _GetRecognizedExtensions()
{
return ["gd"];
}
Чтобы использовать EditorTranslationParserPlugin, сначала зарегистрируйте его с помощью EditorPlugin.add_translation_parser_plugin().
Методы
_customize_strings(strings: Array[PackedStringArray]) virtual const |
|
_get_recognized_extensions() virtual const |
|
_parse_file(path: String) virtual |
Описания метода
Array[PackedStringArray] _customize_strings(strings: Array[PackedStringArray]) virtual const 🔗
Вызывается после анализа всех файлов. Вы можете изменить массив strings, чтобы добавить или удалить элементы из итогового списка строк, а затем вернуть его после внесения изменений. Каждый элемент представляет собой PackedStringArray, как объяснено в описании EditorTranslationParserPlugin.
@tool
extends EditorTranslationParserPlugin
func _customize_strings(strings):
# Добавить новую строку.
strings.append(["Test 1", "context", "test 1 plurals", "test 1 comment"])
# Удалите все строки, начинающиеся с $.
strings = strings.filter(func(s): return not s[0].begins_with("$"))
return strings
PackedStringArray _get_recognized_extensions() virtual const 🔗
Получает список расширений файлов для связи с этим анализатором, например, ["csv"].
Array[PackedStringArray] _parse_file(path: String) virtual 🔗
Переопределите этот метод, чтобы определить пользовательскую логику анализа для извлечения переводимых строк.