这些资源文件采用中文-英文的参照方式,我们以我们常规的母语开发,即使我们不做多语言,也不影响代码的正常处理,我们只需要把窗体上和代码里面的中文提取出来,然后进行多语言处理(如变为英文)即可。
由于我们使用键值字典对象的JSON内容,那么我们就可以把这些内容序列号为字典集合,如下代码我们可以通过 JSON.NET 组件把它们序列化为字典集合,这些字典集合就是我们用来做多语言的关键。
var content = File.ReadAllText(file, Encoding.UTF8);
if (!string.IsNullOrEmpty(content))
{
var dict = JsonConvert.DeserializeObject<Dictionary<string, string>>(content);
foreach (string key in dict.Keys)
{
//遍历集合如果语言资源键值不存在,则创建,否则更新
if (!resources.ContainsKey(key))
{
resources.Add(key, dict[key]);
}
else
{
resources[key] = dict[key];
}
}
}
加载多语言处理的时候,我们遍历相对目录下的lang/***里面的文件即可实现多语言信息的加载,如下代码所示。
/// <summary>
/// 根据语言初始化信息。
/// 加载对应语言的JSON信息,把翻译信息存储在全属性resources里面。
/// </summary>
/// <param name="language">默认的语言类型,如zh-Hans,en-US等</param>
private void LoadLanguage(string language = "")
{
if (string.IsNullOrEmpty(language))
{
language = System.Threading.Thread.CurrentThread.CurrentUICulture.Name;
}
this.resources = new Dictionary<string, string>();
string dir = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, string.Format("lang/{0}", language));
if (Directory.Exists(dir))
{
var jsonFiles = Directory.GetFiles(dir, "*.json", SearchOption.AllDirectories);
foreach (string file in jsonFiles)
{
LoadFile(file);
}
}
}











