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 "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(["Тільки з контекстом", "дружній контекст"]))
// Це додасть повідомлення з msgid "Тест 1", msgctxt "контекст", msgid_plural "тест 1 множини", коментарем "коментар до тесту 1" та рядком джерела "7".
ret.Add(["Test 1", "context", "test 1 plurals", "test 1 comment", "7"]);
// Це додасть повідомлення з 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"];
}
Крім того, плагін може безпосередньо змінювати кінцевий список рядків, реалізувавши _customize_strings().
Щоб використовувати 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):
# Add new string.
strings.append(["Test 1", "context", "test 1 plurals", "test 1 comment"])
# Remove all strings that begin with $.
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 🔗
Зазначте цей метод, щоб визначити логіку, що підписує перекладацькі рядки.