EditorTranslationParserPlugin
Наследует: RefCounted < Object
Плагин для добавления пользовательских парсеров для извлечения строк, которые необходимо перевести, из пользовательских файлов (.csv, .json и т. д.).
Описание
EditorTranslationParserPlugin вызывается, когда файл анализируется для извлечения строк, требующих перевода. Чтобы определить логику анализа и извлечения строк, переопределите метод _parse_file() в скрипте.
Возвращаемое значение должно быть Array из PackedStringArray, по одному для каждой извлеченной переводимой строки. Каждая запись должна содержать [msgid, msgctxt, msgid_plural, comment], где все, кроме msgid, являются необязательными. Пустые строки будут игнорироваться.
Извлеченные строки будут записаны в POT-файл, выбранный пользователем в разделе «Генерация POT» на вкладке «Локализация» в меню «Настройки проекта».
Ниже показан пример пользовательского парсера, который извлекает строки из CSV-файла для записи в POT.
@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("Extracted string: " + 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($"Extracted string: {s}");
}
return ret;
}
public override string[] _GetRecognizedExtensions()
{
return ["csv"];
}
}
Чтобы добавить переводимую строку, связанную с контекстом, множественным числом или комментарием:
# Это добавит сообщение с msgid "Test 1", msgctxt "context", msgid_plural "test 1 plurals", и комментарий "test 1 comment".
ret.append(PackedStringArray(["Test 1", "context", "test 1 plurals", "test 1 comment"]))
# Это добавит сообщение с msgid "A test without context" и msgid_plural "plurals".
ret.append(PackedStringArray(["A test without context", "", "plurals"]))
# Это добавит сообщение с msgid "Only with context" и msgctxt "a friendly context".
ret.append(PackedStringArray(["Only with context", "a friendly context"]))
// Это добавит сообщение с msgid "Test 1", msgctxt "context", msgid_plural "test 1 plurals", и комментарий "test 1 comment".
ret.Add(["Test 1", "context", "test 1 plurals", "test 1 comment"]);
// Это добавит сообщение с msgid "A test without context" и msgid_plural "plurals".
ret.Add(["A test without context", "", "plurals"]);
// Это добавит сообщение с msgid "Only with context" и msgctxt "a friendly context".
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().
Методы
_get_recognized_extensions() virtual const |
|
_parse_file(path: String) virtual |
Описания метода
PackedStringArray _get_recognized_extensions() virtual const 🔗
Получает список расширений файлов для связи с этим анализатором, например, ["csv"].
Array[PackedStringArray] _parse_file(path: String) virtual 🔗
Переопределите этот метод, чтобы определить пользовательскую логику анализа для извлечения переводимых строк.