2020-06-23 13:48:59 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								<?xml version="1.0" encoding="UTF-8" ?>  
						 
					
						
							
								
									
										
										
										
											2022-02-14 14:18:53 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								<class  name= "EditorTranslationParserPlugin"  inherits= "RefCounted"  version= "4.0"  xmlns:xsi= "http://www.w3.org/2001/XMLSchema-instance"  xsi:noNamespaceSchemaLocation= "../class.xsd" >  
						 
					
						
							
								
									
										
										
										
											2020-06-23 13:48:59 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									<brief_description > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										Plugin for adding custom parsers to extract strings that are to be translated from custom files (.csv, .json etc.).
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									</brief_description> 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									<description > 
							 
						 
					
						
							
								
									
										
										
										
											2021-10-15 14:30:58 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										[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 [method _parse_file] method in script.
							 
						 
					
						
							
								
									
										
										
										
											2020-07-23 00:07:35 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										Add the extracted strings to argument [code]msgids[/code] or [code]msgids_context_plural[/code] if context or plural is used.
							 
						 
					
						
							
								
									
										
										
										
											2020-08-07 13:17:12 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										When adding to [code]msgids_context_plural[/code], you must add the data using the format [code]["A", "B", "C"][/code], where [code]A[/code] represents the extracted string, [code]B[/code] represents the context, and [code]C[/code] represents the plural version of the extracted string. If you want to add only context but not plural, put [code]""[/code] for the plural slot. The idea is the same if you only want to add plural but not context. See the code below for concrete examples.
							 
						 
					
						
							
								
									
										
										
										
											2020-06-23 13:48:59 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
										The extracted strings will be written into a POT file selected by user under "POT Generation" in "Localization" tab in "Project Settings" menu.
							 
						 
					
						
							
								
									
										
										
										
											2020-07-23 00:07:35 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										Below shows an example of a custom parser that extracts strings from a CSV file to write into a POT.
							 
						 
					
						
							
								
									
										
										
										
											2020-09-13 14:45:36 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										[codeblocks]
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										[gdscript]
							 
						 
					
						
							
								
									
										
										
										
											2022-09-21 22:49:03 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										@tool
							 
						 
					
						
							
								
									
										
										
										
											2020-06-23 13:48:59 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
										extends EditorTranslationParserPlugin
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-05-15 23:48:59 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										func _parse_file(path, msgids, msgids_context_plural):
							 
						 
					
						
							
								
									
										
										
										
											2023-01-30 22:21:36 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										    var file = FileAccess.open(path, FileAccess.READ)
							 
						 
					
						
							
								
									
										
										
										
											2020-07-03 20:24:54 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										    var text = file.get_as_text()
							 
						 
					
						
							
								
									
										
										
										
											2020-09-13 14:45:36 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										    var split_strs = text.split(",", false)
							 
						 
					
						
							
								
									
										
										
										
											2020-06-23 13:48:59 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
										    for s in split_strs:
							 
						 
					
						
							
								
									
										
										
										
											2020-07-23 00:07:35 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										        msgids.append(s)
							 
						 
					
						
							
								
									
										
										
										
											2020-06-23 13:48:59 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
										        #print("Extracted string: " + s)
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-05-15 23:48:59 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										func _get_recognized_extensions():
							 
						 
					
						
							
								
									
										
										
										
											2020-06-23 13:48:59 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
										    return ["csv"]
							 
						 
					
						
							
								
									
										
										
										
											2020-09-13 14:45:36 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										[/gdscript]
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										[csharp]
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										using Godot;
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										[Tool]
							 
						 
					
						
							
								
									
										
										
										
											2023-01-31 18:21:09 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										public partial class CustomParser : EditorTranslationParserPlugin
							 
						 
					
						
							
								
									
										
										
										
											2020-09-13 14:45:36 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										{
							 
						 
					
						
							
								
									
										
										
										
											2023-01-31 18:21:09 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										    public override void _ParseFile(string path, Godot.Collections.Array< string>  msgids, Godot.Collections.Array< Godot.Collections.Array>  msgidsContextPlural)
							 
						 
					
						
							
								
									
										
										
										
											2020-09-13 14:45:36 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										    {
							 
						 
					
						
							
								
									
										
										
										
											2023-01-31 18:21:09 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										        using var file = FileAccess.Open(path, FileAccess.ModeFlags.Read);
							 
						 
					
						
							
								
									
										
										
										
											2020-09-13 14:45:36 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										        string text = file.GetAsText();
							 
						 
					
						
							
								
									
										
										
										
											2023-01-31 18:21:09 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										        string[] splitStrs = text.Split(",", allowEmpty: false);
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										        foreach (string s in splitStrs)
							 
						 
					
						
							
								
									
										
										
										
											2020-09-13 14:45:36 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										        {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										            msgids.Add(s);
							 
						 
					
						
							
								
									
										
										
										
											2023-01-31 18:21:09 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										            //GD.Print($"Extracted string: {s}");
							 
						 
					
						
							
								
									
										
										
										
											2020-09-13 14:45:36 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										        }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										    }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-01-31 18:21:09 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										    public override string[] _GetRecognizedExtensions()
							 
						 
					
						
							
								
									
										
										
										
											2020-09-13 14:45:36 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										    {
							 
						 
					
						
							
								
									
										
										
										
											2023-01-31 18:21:09 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										        return new string[] { "csv" };
							 
						 
					
						
							
								
									
										
										
										
											2020-09-13 14:45:36 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										    }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										}
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										[/csharp]
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										[/codeblocks]
							 
						 
					
						
							
								
									
										
										
										
											2020-07-23 00:07:35 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										To add a translatable string associated with context or plural, add it to [code]msgids_context_plural[/code]:
							 
						 
					
						
							
								
									
										
										
										
											2020-09-13 14:45:36 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										[codeblocks]
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										[gdscript]
							 
						 
					
						
							
								
									
										
										
										
											2020-08-07 13:17:12 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										# This will add a message with msgid "Test 1", msgctxt "context", and msgid_plural "test 1 plurals".
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										msgids_context_plural.append(["Test 1", "context", "test 1 plurals"])
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										# This will add a message with msgid "A test without context" and msgid_plural "plurals".
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										msgids_context_plural.append(["A test without context", "", "plurals"])
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										# This will add a message with msgid "Only with context" and msgctxt "a friendly context".
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										msgids_context_plural.append(["Only with context", "a friendly context", ""])
							 
						 
					
						
							
								
									
										
										
										
											2020-09-13 14:45:36 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										[/gdscript]
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										[csharp]
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										// This will add a message with msgid "Test 1", msgctxt "context", and msgid_plural "test 1 plurals".
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										msgidsContextPlural.Add(new Godot.Collections.Array{"Test 1", "context", "test 1 Plurals"});
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										// This will add a message with msgid "A test without context" and msgid_plural "plurals".
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										msgidsContextPlural.Add(new Godot.Collections.Array{"A test without context", "", "plurals"});
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										// This will add a message with msgid "Only with context" and msgctxt "a friendly context".
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										msgidsContextPlural.Add(new Godot.Collections.Array{"Only with context", "a friendly context", ""});
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										[/csharp]
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										[/codeblocks]
							 
						 
					
						
							
								
									
										
										
										
											2022-09-05 13:01:31 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										[b]Note:[/b] If you override parsing logic for standard script types (GDScript, C#, etc.), it would be better to load the [code]path[/code] argument using [method ResourceLoader.load]. This is because built-in scripts are loaded as [Resource] type, not [FileAccess] type.
							 
						 
					
						
							
								
									
										
										
										
											2020-07-03 20:24:54 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										For example:
							 
						 
					
						
							
								
									
										
										
										
											2020-09-13 14:45:36 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										[codeblocks]
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										[gdscript]
							 
						 
					
						
							
								
									
										
										
										
											2021-05-15 23:48:59 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										func _parse_file(path, msgids, msgids_context_plural):
							 
						 
					
						
							
								
									
										
										
										
											2020-07-03 20:24:54 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										    var res = ResourceLoader.load(path, "Script")
							 
						 
					
						
							
								
									
										
										
										
											2020-09-13 14:45:36 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										    var text = res.source_code
							 
						 
					
						
							
								
									
										
										
										
											2020-07-03 20:24:54 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										    # Parsing logic.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-05-15 23:48:59 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										func _get_recognized_extensions():
							 
						 
					
						
							
								
									
										
										
										
											2020-07-25 21:38:34 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										    return ["gd"]
							 
						 
					
						
							
								
									
										
										
										
											2020-09-13 14:45:36 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										[/gdscript]
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										[csharp]
							 
						 
					
						
							
								
									
										
										
										
											2023-01-31 18:21:09 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										public override void _ParseFile(string path, Godot.Collections.Array< string>  msgids, Godot.Collections.Array< Godot.Collections.Array>  msgidsContextPlural)
							 
						 
					
						
							
								
									
										
										
										
											2020-09-13 14:45:36 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										{
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										    var res = ResourceLoader.Load< Script> (path, "Script");
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										    string text = res.SourceCode;
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										    // Parsing logic.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										}
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-01-31 18:21:09 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										public override string[] _GetRecognizedExtensions()
							 
						 
					
						
							
								
									
										
										
										
											2020-09-13 14:45:36 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										{
							 
						 
					
						
							
								
									
										
										
										
											2023-01-31 18:21:09 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										    return new string[] { "gd" };
							 
						 
					
						
							
								
									
										
										
										
											2020-09-13 14:45:36 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										}
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										[/csharp]
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										[/codeblocks]
							 
						 
					
						
							
								
									
										
										
										
											2021-10-15 14:30:58 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										To use [EditorTranslationParserPlugin], register it using the [method EditorPlugin.add_translation_parser_plugin] method first.
							 
						 
					
						
							
								
									
										
										
										
											2020-06-23 13:48:59 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									</description> 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									<tutorials > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									</tutorials> 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									<methods > 
							 
						 
					
						
							
								
									
										
										
										
											2021-08-21 22:52:44 -03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										<method  name= "_get_recognized_extensions"  qualifiers= "virtual const" > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											<return  type= "PackedStringArray"  /> 
							 
						 
					
						
							
								
									
										
										
										
											2020-06-23 13:48:59 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
											<description > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												Gets the list of file extensions to associate with this parser, e.g. [code]["csv"][/code].
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											</description> 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										</method> 
							 
						 
					
						
							
								
									
										
										
										
											2021-05-15 23:48:59 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										<method  name= "_parse_file"  qualifiers= "virtual" > 
							 
						 
					
						
							
								
									
										
										
										
											2021-07-30 15:28:05 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											<return  type= "void"  /> 
							 
						 
					
						
							
								
									
										
										
										
											2022-08-06 21:11:48 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											<param  index= "0"  name= "path"  type= "String"  /> 
							 
						 
					
						
							
								
									
										
										
										
											2022-08-31 19:24:04 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											<param  index= "1"  name= "msgids"  type= "String[]"  /> 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											<param  index= "2"  name= "msgids_context_plural"  type= "Array[]"  /> 
							 
						 
					
						
							
								
									
										
										
										
											2020-06-23 13:48:59 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
											<description > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												Override this method to define a custom parsing logic to extract the translatable strings.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											</description> 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										</method> 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									</methods> 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								</class>