之前由于经验不足,将常用的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. .git文件过大!删除大文件

    在我们日常使用Git的时候,一般比较小的项目,我们可能不会注意到.git 这个文件. 其实, .git文件主要用来记录每次提交的变动,当我们的项目越来越大的时候,我们发现 .git文件越来越大. 很大 ...

  2. C++ assert()断言

    assert是一个宏定义,原型定义在<assert.h>中: #include <assert.h> void assert( int expression ); 其作用是:如 ...

  3. .NET常用类库--苏飞合集

    在线网站:http://tool.sufeinet.com/CodePreview/CodeView.aspx?action=view&file=Zip/SharpZip.cs C#基类库大全 ...

  4. hdu oj Period (kmp的应用)

    Period Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Sub ...

  5. Windows编写bat执行文件

    1:建立TXT文件 Rem nping用来测试IP地址的连通性 Rem nping --tcp -p 80 --flags rst --ttl 2 192.168.1.1 date 2:重命名为bat ...

  6. POJ 2376 Cleaning Shifts 贪心

    Cleaning Shifts 题目连接: http://poj.org/problem?id=2376 Description Farmer John is assigning some of hi ...

  7. hdu 4493 Tutor 水题

    Tutor Time Limit: 20 Sec  Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=4493 D ...

  8. 使用SurfaceView和MediaPlayer实现视频做为背景

    场景:像我们在Uber应用开场,看到一一段视频作为開始.这样子让用户非常快投入应用使用的场景中去,这样的以视频作为开场的应用,我们是不是认为非常高大上呢,哈哈,事实上是使用了SerfaceView去载 ...

  9. [Angular2 Router] Use Params from Angular 2 Routes Inside of Components

    Angular 2’s ActivatedRoute allows you to get the details of the current route into your components. ...

  10. Adding DTrace Probes to PHP Extensions

      By cj on Dec 06, 2012 The powerful DTrace tracing facility has some PHP-specific probes that can b ...