背景:
1、本地语言包有官方版的,但需要原始强名才可以进行编译,否则编译出来的语言名程序集与控件程序集强名不一致无法使用;
2、官方指定代理商提供的,需要花钱购买;
3、民间汉化的,以前不要钱,最近发现好像也收费了;
4、如何同步官方的版本,而不需要大量的手工汉化工作呢?
解决办法:
1、参照官方说明,这个是告诉我们怎么自己做翻译,自己做本地语言包。
http://documentation.devexpress.com/#WindowsForms/CustomDocument1862
2、这个是官方放出的,需要有原始强名才能编译的本地化资源包。
http://www.devexpress.com/Support/Center/KB/p/A421.aspx
3、好了,有官方的语言名,和汉化办法,咱们把二者结合一下吧。
这个是改造后的 “本地化语言处理类”(这个名怎么叫合适,我没太想好,先这样吧)。
代码
public class LocalizerCN : Localizer
{
static Dictionary<string, string> Dict = new Dictionary<string, string>();
static string strResname = @"zh-CN\DevExpress.XtraEditors\LocalizationRes.zh-CN.resx";
static LocalizerCN()
{
DSDictionary dsDictionary = new DSDictionary();
ResXResourceReader rsxr = new ResXResourceReader(strResname);
foreach (DictionaryEntry d in rsxr)
{
Dict.Add(d.Key.ToString(), d.Value.ToString());
}
}
public override string GetLocalizedString(StringId id)
{
if (Dict.ContainsKey(id.GetType().Name + "." + id.ToString()))
return Dict[id.GetType().Name + "." + id.ToString()];
else
return id.ToString();
}
}
{
static Dictionary<string, string> Dict = new Dictionary<string, string>();
static string strResname = @"zh-CN\DevExpress.XtraEditors\LocalizationRes.zh-CN.resx";
static LocalizerCN()
{
DSDictionary dsDictionary = new DSDictionary();
ResXResourceReader rsxr = new ResXResourceReader(strResname);
foreach (DictionaryEntry d in rsxr)
{
Dict.Add(d.Key.ToString(), d.Value.ToString());
}
}
public override string GetLocalizedString(StringId id)
{
if (Dict.ContainsKey(id.GetType().Name + "." + id.ToString()))
return Dict[id.GetType().Name + "." + id.ToString()];
else
return id.ToString();
}
}
在程序入口的地方,这样写一下。
Localizer.Active = new LocalizerCN();
4、当然,还有其它的类文件需要写,方法通用。