• 从Setting.settings到Resource.resx


    之前由于经验不足,将常用的App提示信息串(string)放置在了配置文件中(*.Settings)。目前需要将App国际化,对这些信息的翻译有两个途径:
    1. 直接翻译,将参数中的提示信息串用英文或者其他语言替换。这在语义上是改变了App的配置参数。
    2. 将这些提示信息串提取出来,放入资源文件,统一对资源文件进行国际化。
    个人更倾向于第2个方案。一是因为语义上比较一致;二是可以将资源统一处理。更可以建立新的DLL项目,将资源放置在DLL中。采用第2个方案需要两个
    步骤:1.将Settings中的名值对提取出来;2.将名值对生成为资源文件。如下Code,提取出名值对,以key=value的形式保存在中间文件(.txt)中。该中间文件
    能够被Resgen.exe进行识别,利用resgen.exe生成C#强类型的资源文件。
      
     *资源文件生成器 (Resgen.exe) 将文本(.txt 或 .restext)文件和基于 XML 的资源格式 (.resx) 文件转换为公共语言运行时二进制 (.resources) 文件,后者可嵌入到运行时二进制可执行文件或附属程序集中。

    示例Code如下:

    /// <summary> /// 将制定的参数集合以名值对的形式转储到制定的文本文件(utf-8)中。 /// </summary> /// <param name="stettings">参数集合</param> /// <param name="txtPath">输出路径</param> /// <exception cref="System.IO.IOException"></exception> public static void DumpSettingsToKvTxt(SettingsPropertyCollection stettings, string txtPath) { using (var fio = new StreamWriter(txtPath, true, Encoding.UTF8, 2048)) { foreach (var p in stettings) { var sp = p as SettingsProperty; fio.WriteLine($"{sp.Name}={sp.DefaultValue.ToString()}"); } fio.Flush(); } } /// <summary> /// resgen Hello.resource.txt /str:cs Hello.resource.resx /// </summary> /// <param name="txtPath">名值对的txt文本</param> /// <param name="resxName">目标强类型(C#/cs)*.resx资源文件</param> public static void ConvertKvTxtToResx(string txtPath, string resxName) { try { System.Diagnostics.Process.Start(@"resgen.exe", $"{txtPath} /str:cs {resxName}"); }catch(Exception ex) { System.Diagnostics.Debug.WriteLine(ex.Message); } }
    var txt = "Hello.resource.txt";
    var resx = "Hello.resx";
    
    DumpSettingsToKvTxt(Properties.Settings.Default.Properties, txt);
    DumpSettingsToKvTxt(Properties.Hints.Default.Properties, txt);
    ConvertKvTxtToResx(txt, resx);

    可以将多个*.settings全部统一存到最终的*.resx,但此代码没有考虑到名值对重复的问题。转换之后,直接添加.resx文件到工程即可。

    将名值对转换为C#强类型.Resx对象。
    resgen hints.txt Hints.resx /str:C#,Test.Properties /publicClass

    reference:

    [1] Resgen.exe, https://msdn.microsoft.com/zh-cn/library/ccec7sz1(v=vs.110).aspx

     
  • 相关阅读:
    大厂机密!30 个提升团队研发效能的锦囊
    爆肝 200 小时,我做了个编程导航!
    AJAX数据传输之请求与发送
    JS高级技巧之函数节流
    JS实战笔记
    JS获取DOM元素位置与大小
    JS实现快排算法
    构造可重用的Ajax对象
    JS字符串操作总结
    JS常用函数小结
  • 原文地址:https://www.cnblogs.com/jjseen/p/5315722.html
Copyright © 2020-2023  润新知