EditorTranslationParserPlugin
Plugin for adding custom parsers to extract strings that are to be translated from custom files (.csv, .json etc.).
Plugin for adding custom parsers to extract strings that are to be translated from custom files (.csv, .json etc.).
EditorTranslationParserPlugin is invoked when a file is being parsed to extract strings that require translation. To define the parsing and string extraction logic, override the EditorTranslationParserPlugin._ParseFile method in script.
The return value should be an Reckfell.Collections.Array of string[]s, one for each extracted translatable string. Each entry should contain [msgid, msgctxt, msgid_plural, comment, source_line], where all except msgid are optional. Empty strings will be ignored.
The extracted strings will be written into a translation template file selected by user under "Template Generation" in "Localization" tab in "Project Settings" menu.
Below shows an example of a custom parser that extracts strings from a CSV file to write into a template.
using Reckfell;
[Tool]
public partial class CustomParser : EditorTranslationParserPlugin
{
public override Reckfell.Collections.Array<string[]> _ParseFile(string path)
{
Reckfell.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]);
//ReckfellApi.Print($"Extracted string: {s}");
}
return ret;
}
public override string[] _GetRecognizedExtensions()
{
return ["csv"];
}
}To add a translatable string associated with a context, plural, comment, or source line:
// This will add a message with msgid "Test 1", msgctxt "context", msgid_plural "test 1 plurals", comment "test 1 comment", and source line "7".
ret.Add(["Test 1", "context", "test 1 plurals", "test 1 comment", "7"]);
// This will add a message with msgid "A test without context" and msgid_plural "plurals".
ret.Add(["A test without context", "", "plurals"]);
// This will add a message with msgid "Only with context" and msgctxt "a friendly context".
ret.Add(["Only with context", "a friendly context"]);Note: If you override parsing logic for standard script types (C#, C#, etc.), it would be better to load the path argument using ResourceLoader.Load. This is because built-in scripts are loaded as Resource type, not FileAccess type. For example:
public override Reckfell.Collections.Array<string[]> _ParseFile(string path)
{
var res = ResourceLoader.Load<Script>(path, "Script");
string text = res.SourceCode;
// Parsing logic.
}
public override string[] _GetRecognizedExtensions()
{
return ["gd"];
}Alternatively, the plugin can directly modify the final list of strings, by implementing EditorTranslationParserPlugin._CustomizeStrings.
To use EditorTranslationParserPlugin, register it using the EditorPlugin.AddTranslationParserPlugin method first.
Declarations checked against C# SDK 1.0.0. Expand a name to see declarations and documentation.
Constructors1
EditorTranslationParserPluginConstructor
public EditorTranslationParserPlugin();Methods3
_CustomizeStringsReckfell.Collections.Array<string[]>
public virtual Reckfell.Collections.Array<string[]> _CustomizeStrings(Reckfell.Collections.Array<string[]> strings);Called after parsing all files. You can modify the strings array to add or remove entries from the final list of strings, then return it after modifications. Each entry is a string[] like explained in the EditorTranslationParserPlugin's description.
| Name | Type | Default |
|---|---|---|
strings | Reckfell.Collections.Array<string[]> | — |
Reckfell.Collections.Array<string[]>_GetRecognizedExtensionsstring[]
public virtual string[] _GetRecognizedExtensions();Gets the list of file extensions to associate with this parser, e.g. ["csv"].
string[]_ParseFileReckfell.Collections.Array<string[]>
public virtual Reckfell.Collections.Array<string[]> _ParseFile(string path);Override this method to define a custom parsing logic to extract the translatable strings.
| Name | Type | Default |
|---|---|---|
path | string | — |
Reckfell.Collections.Array<string[]>