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

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

其中把JSON转换为类对象需要两个类,对翻译结果进行转换,如下代码所示。


internal class TranslationJson
  {
    public string from { get; set; }
    public string to { get; set; }
    public List<TranslationResult> trans_result { get; set; }
  }
  internal class TranslationResult
  {
    public string src { get; set; }
    public string dst { get; set; }
  }

这样我们在多语言处理的时候,可以对默认输入为空的键值进行翻译即可(如英文翻译)。


//遍历集合进行翻译
  var value = dict[key];
  if (string.IsNullOrWhiteSpace(value))
  {
    //如果值为空,那么调用翻译接口处理
    var newValue = TranslationHelper.Translate(key, from, to);
    if (!string.IsNullOrWhiteSpace(newValue))
    {
      dict[key] = newValue;
    }
  }

然后重新更新我们的资源文件就可以了


 //不排序
  var newContent = JsonConvert.SerializeObject(dict, Formatting.Indented);

  File.WriteAllText(file, newContent, Encoding.UTF8);

如果需要对键值进行排序,那么使用SortDictionary进行包装下即可


//进行排序
  SortedDictionary<string, string> sortedDict = new SortedDictionary<string, string>(dict);
  var newContent = JsonConvert.SerializeObject(sortedDict, Formatting.Indented);

在多语言处理的时候,我们一般不必要一次填写完毕中英文对照的资源,我们可以先把字典键值的键写出来,值保留为空,如下文件所示。

WinForm,应用程序,多语言

运行程序的时候,让翻译的接口先行翻译,然后我们再对翻译的资源进行调整,适应我们程序的语境即可,翻译后的内容后如下所示。