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.

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"]

Чтобы добавить переводимую строку, связанную с контекстом, множественным числом, комментарием или исходной строкой:

# Это добавит сообщение с 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"]))

Примечание: Если вы переопределяете логику парсинга для стандартных типов скриптов (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"]

Чтобы использовать EditorTranslationParserPlugin, сначала зарегистрируйте его с помощью EditorPlugin.add_translation_parser_plugin().

Методы

Array[PackedStringArray]

_customize_strings(strings: Array[PackedStringArray]) virtual const

PackedStringArray

_get_recognized_extensions() virtual const

Array[PackedStringArray]

_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 🔗

Переопределите этот метод, чтобы определить пользовательскую логику анализа для извлечения переводимых строк.