在WinForm应用程序中快速实现多语言的处理的方法

2020-01-05 09:18:15王旭

WinForm,应用程序,多语言

这些资源文件采用中文-英文的参照方式,我们以我们常规的母语开发,即使我们不做多语言,也不影响代码的正常处理,我们只需要把窗体上和代码里面的中文提取出来,然后进行多语言处理(如变为英文)即可。

由于我们使用键值字典对象的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);
        }
      }
    }