随着业务的扩展,有的软件有多语言化的需求。那么如果软件已经很多写死的文字内容如何快速进行语言化替换呢,一个一个去改工作量太大。
于是开发了个小工具用来替换现有内容并生成语音包,原理就是采用正则表达式进行匹配控件关键字以及中文进行多语言组装解析。
关键正则表达式
string pattern = @"this\.(\w+)\.Text = ""([^""]*[\u4e00-\u9fa5]+[^""]*)""";
string pattern = @"(?<!this, )(?<!@)\""[^\""@\n]*[\u4e00-\u9fa5]+[^\""@\n]*\""(?!@)";
语言包组装
try
{
// 根据行列进行 XML生成
var lines = TxtLanguage.Lines.ToList();
List<string> xmlList = new List<string>();
xmlList.Add($@"!{TXTCH.Text}
<Form Name = ""{TxtFormName.Text}"">
<Item 属性=""Text"" CN = ""{TXTCH.Text}"" EN = ""{TXTENG.Text}"" RU ="""" />");
lines.ForEach(line =>
{
var lineArr = line.Split("\t");
if (lineArr.Length > 2)
{
// 第一位是表单名称
// 第二位是控件名称
// 第三位是中文
// 第四位是英文
// 第五位是墨西哥 。。。
var controlName = lineArr[1];
var chinese = lineArr[2];
var eng = lineArr.Length > 3 ? lineArr[3] : "";
var es = lineArr.Length > 4 ? lineArr[4] : "";
string controlText = $@"<Control Name=""{controlName}"">
<Item 属性=""Text"" CN = ""{chinese}"" EN = ""{eng}"" RU =""{es}""/>
<Item 属性=""Font"" CN = ""9"" EN = ""9"" RU =""9"" />
</Control>";
xmlList.Add(controlText);
}
});
xmlList.Add("</Form>");
TxtXml.Lines = xmlList.ToArray();
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
!test<Form Name = "test"><Item 属性="Text" CN = "test" EN = "test" RU ="" />
<Control Name="请输入表单name"><Item 属性="Text" CN = "请输入表单name" EN = "Please enter the form name " RU ="Введите формуname "/><Item 属性="Font" CN = "9" EN = "9" RU ="9" /></Control>
<Control Name="$1MultiLanguage.GetInstance().SelectLanguage(this);//界面语言"><Item 属性="Text" CN = "$1MultiLanguage.GetInstance().SelectLanguage(this);//界面语言" EN = "$1MultiLanguage.GetInstance (). SelectLanguage (this); //Interface language " RU ="$1MultiLanguage. GetInstance(). SelectLanguage (this); //язык интерфейса "/><Item 属性="Font" CN = "9" EN = "9" RU ="9" /></Control>
<Control Name="翻译异常"><Item 属性="Text" CN = "翻译异常" EN = "Translation anomaly " RU ="аномалия перевода "/><Item 属性="Font" CN = "9" EN = "9" RU ="9" /></Control>
<Control Name="控件名称: "><Item 属性="Text" CN = "控件名称: " EN = "Control name: " RU ="Имя элемента управления: "/><Item 属性="Font" CN = "9" EN = "9" RU ="9" /></Control>
<Control Name="匹配内容: "><Item 属性="Text" CN = "匹配内容: " EN = "Matching content: " RU ="Сопоставление содержимого: "/><Item 属性="Font" CN = "9" EN = "9" RU ="9" /></Control>
</Form>