Skip to content

Latest commit

 

History

History
81 lines (63 loc) · 2.21 KB

1.自定义Localization解析和创建.md

File metadata and controls

81 lines (63 loc) · 2.21 KB

创建一个自定义的Localization配置解析器及创建器的过程(Config的配置器和解析器创建过程也是类似):

  1. 首先创建一个LanguageObject,从LanguageObject派生
  2. 可以从LocalizationCreateAndParseBase派生,也可以自己创建,创建器实现ILocalizationCreate接口,解析器实现ILocalizationParse

内置的CSV大体代码,具体代码看Cabin Icarus\UnityEditorFrame\Editor\Scripts\Localization\CsvLocalization路径下的代码:

public partial class CsvLanguageObject: LanguageObject
{
	//绘制CsvLanguageObject,因为CsvLanguageObject就是一个特殊的CSV配置,第一行是Language类型,所以绘制的时候直接调用CSV配置的绘制就行
	public override void Draw(LocalizationManager localizationManager,object userData)
	{
		base.Draw(localizationManager,userData);

		_config?.Draw(localizationManager,userData);
	}
}

//解析器和创建器,同样,解析器和创建器具体的解析和创建都是调用CSV配置的,但是先要去除第一行,因为第一行CSV配置无法识别
public class CsvLocalizationCreateAndParse : LocalizationCreateAndParseBase<CsvLanguageObject>
{
	public override bool IsSupport(string content)
	{
		if (_parse == null)
		{
			_parse = new CsvConfigParse(CsvLanguageObject.DefaultSeparator);
		}

		var index = content.IndexOf('\n');

		if (index == -1)
		{
			index = content.IndexOf('\r');
		}

		if (index > -1)
		{
			content = content.Remove(0, index);
		}

		return _parse.IsSupport(content);
	}

	public override CsvLanguageObject Parse(string filePath)
	{
		if (!File.Exists(filePath))
		{
			goto Return;
		}

		var languageStr = FileUtil.GetFileLinesContent(filePath, 1, Encoding.UTF8);

		Language language;

		bool result = Enum.TryParse(languageStr, out language);

		if (!result)
		{
			language = Language.Unspecified;
		}

		if (_parse == null)
		{
			_parse = new CsvConfigParse(CsvLanguageObject.DefaultSeparator);
		}

		var content = FileUtil.GetFileRanageContent(filePath, Encoding.UTF8, 1);

		var configParse = _parse;

		if (configParse.IsSupport(content))
		{
			var config = configParse.Parse(content);

			return new CsvLanguageObject(language,config);
		}
		Return:
		return new CsvLanguageObject(Language.Unspecified);
	}
}