diff --git a/docs/l10n.md b/docs/l10n.md index e6e5f14..833a952 100644 --- a/docs/l10n.md +++ b/docs/l10n.md @@ -36,7 +36,7 @@ 制作本地化映射表 -![pipeline](docs/images/examples/c_22.jpg) +![pipeline](images/examples/c_22.jpg) 映射到英语后的导出数据(只截取了部分数据)为 ```json diff --git a/src/Luban.Job.Cfg/Source/DataSources/Excel/Sheet.cs b/src/Luban.Job.Cfg/Source/DataSources/Excel/Sheet.cs index 3120854..c2567bd 100644 --- a/src/Luban.Job.Cfg/Source/DataSources/Excel/Sheet.cs +++ b/src/Luban.Job.Cfg/Source/DataSources/Excel/Sheet.cs @@ -690,9 +690,9 @@ namespace Luban.Job.Cfg.DataSources.Excel { foreach (var recordNamedRow in NamedRow.CreateMultiRowNamedRow(this._rowColumns, this._rootTitle, type)) { - bool isTest = DataUtil.IsTestTag(GetRowTag(recordNamedRow.Rows[0])); + var tags = DataUtil.ParseTags(GetRowTag(recordNamedRow.Rows[0])); var data = (DBean)ExcelNamedRowDataCreator.Ins.ReadExcel(recordNamedRow, type); - yield return new Record(data, RawUrl, isTest); + yield return new Record(data, RawUrl, tags); } } } diff --git a/src/Luban.Job.Cfg/Source/DataSources/Json/JsonDataSource.cs b/src/Luban.Job.Cfg/Source/DataSources/Json/JsonDataSource.cs index 48759ab..9d09fd7 100644 --- a/src/Luban.Job.Cfg/Source/DataSources/Json/JsonDataSource.cs +++ b/src/Luban.Job.Cfg/Source/DataSources/Json/JsonDataSource.cs @@ -27,7 +27,7 @@ namespace Luban.Job.Cfg.DataSources.Json public override Record ReadOne(TBean type) { - bool isTest = false; + List tags; if (_data.TryGetProperty(TAG_KEY, out var tagEle)) { var tagName = tagEle.GetString(); @@ -35,11 +35,15 @@ namespace Luban.Job.Cfg.DataSources.Json { return null; } - isTest = DataUtil.IsTestTag(tagName); + tags = DataUtil.ParseTags(tagName); + } + else + { + tags = null; } var data = (DBean)type.Apply(JsonDataCreator.Ins, _data, (DefAssembly)type.Bean.AssemblyBase); - return new Record(data, RawUrl, isTest); + return new Record(data, RawUrl, tags); } } } diff --git a/src/Luban.Job.Cfg/Source/DataSources/Lua/LuaDataSource.cs b/src/Luban.Job.Cfg/Source/DataSources/Lua/LuaDataSource.cs index 47ef694..f59030d 100644 --- a/src/Luban.Job.Cfg/Source/DataSources/Lua/LuaDataSource.cs +++ b/src/Luban.Job.Cfg/Source/DataSources/Lua/LuaDataSource.cs @@ -53,8 +53,8 @@ namespace Luban.Job.Cfg.DataSources.Lua return null; } var data = (DBean)type.Apply(LuaDataCreator.Ins, table, (DefAssembly)type.Bean.AssemblyBase); - var isTest = DataUtil.IsTestTag(tagName); - return new Record(data, RawUrl, isTest); + var tags = DataUtil.ParseTags(tagName); + return new Record(data, RawUrl, tags); } } } diff --git a/src/Luban.Job.Cfg/Source/DataSources/Xml/XmlDataSource.cs b/src/Luban.Job.Cfg/Source/DataSources/Xml/XmlDataSource.cs index 7329e18..534b559 100644 --- a/src/Luban.Job.Cfg/Source/DataSources/Xml/XmlDataSource.cs +++ b/src/Luban.Job.Cfg/Source/DataSources/Xml/XmlDataSource.cs @@ -33,8 +33,8 @@ namespace Luban.Job.Cfg.DataSources.Xml return null; } var data = (DBean)type.Apply(XmlDataCreator.Ins, _doc, (DefAssembly)type.Bean.AssemblyBase); - bool isTest = DataUtil.IsTestTag(tagName); - return new Record(data, RawUrl, isTest); + var tags = DataUtil.ParseTags(tagName); + return new Record(data, RawUrl, tags); } } } diff --git a/src/Luban.Job.Cfg/Source/DataSources/Yaml/YamlDataSource.cs b/src/Luban.Job.Cfg/Source/DataSources/Yaml/YamlDataSource.cs index d475fa5..5e94b55 100644 --- a/src/Luban.Job.Cfg/Source/DataSources/Yaml/YamlDataSource.cs +++ b/src/Luban.Job.Cfg/Source/DataSources/Yaml/YamlDataSource.cs @@ -58,8 +58,8 @@ namespace Luban.Job.Cfg.DataSources.Yaml return null; } var data = (DBean)type.Apply(YamlDataCreator.Ins, _root, (DefAssembly)type.Bean.AssemblyBase); - bool isTest = DataUtil.IsTestTag(tagName); - return new Record(data, RawUrl, isTest); + var tags = DataUtil.ParseTags(tagName); + return new Record(data, RawUrl, tags); } } } diff --git a/src/Luban.Job.Cfg/Source/Datas/Record.cs b/src/Luban.Job.Cfg/Source/Datas/Record.cs index 0a3a95c..ac023de 100644 --- a/src/Luban.Job.Cfg/Source/Datas/Record.cs +++ b/src/Luban.Job.Cfg/Source/Datas/Record.cs @@ -1,4 +1,7 @@ -namespace Luban.Job.Cfg.Datas +using Luban.Job.Cfg.Utils; +using System.Collections.Generic; + +namespace Luban.Job.Cfg.Datas { public class Record { @@ -6,15 +9,17 @@ public string Source { get; } + public List Tags { get; } + public int Index { get; set; } - public bool IsTest { get; } + public bool IsTest => Tags != null && DataUtil.IsTestTag(Tags); - public Record(DBean data, string source, bool isTest) + public Record(DBean data, string source, List tags) { Data = data; Source = source; - IsTest = isTest; + Tags = tags; } } } diff --git a/src/Luban.Job.Cfg/Source/GenArgs.cs b/src/Luban.Job.Cfg/Source/GenArgs.cs index e408370..5256ea7 100644 --- a/src/Luban.Job.Cfg/Source/GenArgs.cs +++ b/src/Luban.Job.Cfg/Source/GenArgs.cs @@ -35,6 +35,9 @@ namespace Luban.Job.Cfg [Option("export_test_data", Required = false, HelpText = "export test data")] public bool ExportTestData { get; set; } = false; + [Option("export_tag_filter", Required = false, HelpText = "export tag filter")] + public string ExportTagFilter { get; set; } = ""; + [Option('t', "l10n_timezone", Required = false, HelpText = "timezone")] public string TimeZone { get; set; } diff --git a/src/Luban.Job.Cfg/Source/Utils/DataUtil.cs b/src/Luban.Job.Cfg/Source/Utils/DataUtil.cs index 6e61f45..7abbfd1 100644 --- a/src/Luban.Job.Cfg/Source/Utils/DataUtil.cs +++ b/src/Luban.Job.Cfg/Source/Utils/DataUtil.cs @@ -1,7 +1,9 @@ using Luban.Job.Cfg.Datas; using Luban.Job.Common.Types; using System; +using System.Collections.Generic; using System.IO; +using System.Linq; namespace Luban.Job.Cfg.Utils { @@ -122,7 +124,7 @@ namespace Luban.Job.Cfg.Utils ); } - public static bool IsTestTag(string tagName) + private static bool IsTestTag(string tagName) { return !string.IsNullOrEmpty(tagName) && (tagName.Equals("test", System.StringComparison.OrdinalIgnoreCase) @@ -130,6 +132,21 @@ namespace Luban.Job.Cfg.Utils ); } + public static bool IsTestTag(List tagNames) + { + return tagNames.Any(IsTestTag); + } + + public static List ParseTags(string rawTagStr) + { + if (string.IsNullOrWhiteSpace(rawTagStr)) + { + return null; + } + var tags = new List(rawTagStr.Split(',').Select(t => t.Trim()).Where(t => !string.IsNullOrEmpty(t))); + return tags.Count > 0 ? tags : null; + } + //public static string Data2String(DType data) //{ // var s = new StringBuilder();