码迷,mamicode.com
首页 > 其他好文 > 详细

从Setting.settings到Resource.resx

时间:2016-03-24 16:16:54      阅读:173      评论:0      收藏:0      [点我收藏+]

标签:

之前由于经验不足,将常用的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文件到工程即可。

reference:

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

 

 

从Setting.settings到Resource.resx

标签:

原文地址:http://www.cnblogs.com/jjseen/p/5315722.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!