之前由于经验不足,将常用的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, ))
{
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

 

从Setting.settings到Resource.resx的更多相关文章

  1. C# winform中Setting.settings 相关知识点

    1.在Settings.settings文件中定义配置字段.包含字段名.类型.范围.值四部分的属性. 字段名.类型和值类似编程中字段的定义一样使用,不再过多的解释.重点讲一下”范围“字段的含义与区别. ...

  2. VS C#开发中WinForm中Setting.settings的作用

    .定义 在Settings.settings文件中定义配置字段.把作用范围定义为:User则运行时可更改,Applicatiion则运行时不可更改.可以使用数据网格视图,很方便: .读取配置值 tex ...

  3. 转:C# 使用资源文件 Resource.resx 的方法

    在写程序时, 可以把用到的 图标,图片,声音等外部资源,放在一个  .resx (资源文件)中. 这样的好处是不用考虑什么路径的问题.而且还对资源有保护的做用. 1.创建一个 ResourceFile ...

  4. C# Setting.settings . 用法 2 使用配置文件(.settings、.config)存储应用程序配置

    引言 我不知大家早先是如何保存应用程序配置,以备下次打开时使用的,反正我开始学.Net的时候就去研究序列化,以二进制或XML格式的序列化来保存应用程序配置.这样每次都要建立单独的配置类,并书写读写配置 ...

  5. C# Setting.settings . 用法

    1.定义 在Settings.settings文件中定义配置字段.把作用范围定义为:User则运行时可更改,Applicatiion则运行时不可更改.可以使用数据网格视图,很方便: 2.读取配置值 t ...

  6. Localizing WPF with .resx files

    WPF用Resource.resX中的字符串进行国际化 增加命名空间 xmlns:prop="clr-namespace:XXAppName.Properties" 引用的地方的格 ...

  7. Creating a settings table that can handle almost any type of value

    Update: Updated article here. Today I wanted to be able to have a table store any type of value as a ...

  8. c#配置文件app.config 与 Settings.settings

    本篇博客将介绍C#中Settings的使用.参考:https://docs.microsoft.com/zh-cn/visualstudio/ide/managing-application-sett ...

  9. 在django项目中手动模拟实现settings的配置

    一  文件结构目录 手写配置文件 有两套配置文件,默认配置,用户的配置 如果某个字段,用户配置了,就用用户的,如果没配置,就用默认的 1.1  test import os os.environ.se ...

随机推荐

  1. Chrome developer tool:本人钟爱的 console、Network 功能简谈

    在最开始时,本人调试查看网页,一直用的是 firefox 的 firebug 插件,并没有使用 chrome 的 developer tool .只不过,在日常生活使用过程中,一直使用的是 chrom ...

  2. POJ3928、LA4329【树状数组】

    借此题试验一下各种做法的效果~ 这题为ACM2008北京站某题,介于简单与中等之间,做出来,罚时不多基本可以铜了,所以这样的题还必须得会,进阶之路. add(a[i]+1,1)这样处理之后,再用sum ...

  3. CodeForces 163A Substring and Subsequence dp

    A. Substring and Subsequence 题目连接: http://codeforces.com/contest/163/problem/A Description One day P ...

  4. Codeforces Good Bye 2015 C. New Year and Domino 前缀和

    C. New Year and Domino 题目连接: http://www.codeforces.com/contest/611/problem/C Description They say &q ...

  5. linux C高手成长过程---书籍推荐

    建议学习路径: 首先先学学编辑器,vim, emacs什么的都行. 然后学make file文件,只要知道一点就行,这样就可以准备编程序了. 然后看看<C程序设计语言>K&R,这样 ...

  6. Handler具体解释

    首先下载Android api 进行查阅 ,API下载地址:http://pan.baidu.com/s/1i33dTGT 以下的描写叙述假设那里错了,请大家吐槽,我也是第一次学习,共同进步 Hand ...

  7. Android获取联系人示例,从数据库加载,带首字母标签

    这几天打算学习下Android联系人方便的一些东西,之前稍有涉略,不过每次都是浅尝辄止. 推荐国内两个Link: http://fanfq.iteye.com/blog/779569 http://w ...

  8. iOS 2D绘图详解(Quartz 2D)之阴影和渐变(Shadow,Gradient)

    前言:这个系列写道这里已经是第五篇了,本文会介绍下阴影和渐变的基础知识,以及一些基本的Demo Code展示,应该还会有两篇,介绍下Bitmap绘制以及Pattern等知识. Shadow shado ...

  9. 深入解析ext2文件系统之mke2fs

      上一遍博文的重点其实将ext2整体的组织框架,我们知道了ext2文件系统由块组组成,每个块组里面的组织形式.我们甚至直接把超级块和组描述符里面的内容,用十六进制形式展现了出来.这篇博文主要讲述如何 ...

  10. PCA MATLAB

    之前princomp函数还可以正常使用,但是今天突然不能使了!总是显示错误使用 pca输入参数太多. 出错 princomp (line 29)    [varargout{1:nargout}]=p ...