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

 

转载于:https://www.cnblogs.com/jjseen/p/5315722.html

从Setting.settings到Resource.resx相关推荐

  1. C# Setting.settings . 配置用法

    1.定义 在Settings.settings文件中定义配置字段.把作用范围定义为:User则运行时可更改(用户范围的字段数据更改存储在用户信息中,不在该程序文件中),Applicatiion则运行时 ...

  2. window setting.settings 详解。

    摘自:http://edu.admin5.com/article/20110124/0124431N2011.shtml C# 应用程序设置 来源: 字体:[ 大 中 小] C# 应用程序设置 官方参 ...

  3. You must define a PAYPAL_PAYFLOW_VENDOR_ID setting

    Django-oscar报错: A problem occurred while processing payment for this order - no payment has been tak ...

  4. android限制安装包来源,Android系统设置settings应用学习(一)--允许未知来源应用安装...

    settings,是Android系统应用--设置的源代码,包名称为:com.android.settings 安全设置代码:SecuritySettings.java /* * Copyright ...

  5. C#配置文件之App.config和.settings

    文章目录 1. App.config 1.1 创建 1.2 文件操作(增加.修改.删除.读取) 2. App.config文件中自定义节点 2.1 第一种 使用.Net自带的几种数据类型 2.1.1 ...

  6. 全局配置文件之settings [运行时行为设置]

    全局配置文件之settings(运行时行为设置) settings设置的是Mybatis中极为重要的调整设置, 它们会改变Mybatis的运行时行为, settings中包含了很多重要的设置项, 其中 ...

  7. [es7]在往elasticsearch插数据之前,mapping和setting要怎么配置呢?

    文章目录 中文常用es插件 mapping和setting settings和mappings的意义 mapping和setting的设置过程 ES的mapping如何用?什么时候需要手动,什么时候需 ...

  8. Winform误删Resource目录下图片,引发严重故障:不存在类型或命名空间名“Resources”

    首先,必须申明一点,在Resource中添加图片时,名称不要重复,否则更新不了新图片! 今天我就犯了这样一个错误,我添加的图片重名了,于是我就删除了Resource目录下的重名图片,结果编译时马上报错 ...

  9. MFC,QT与WinForm,WPF简介

    编程语言的组成 编程语言做为一种语言自然和英语这些自然语言有类似的地方.学英语时我们知道要先记26个字母,然后单词及其发音,接下来就是词组,句子.反正简单的说就是记单词,熟悉词法,句法.接下来就是应用 ...

最新文章

  1. 繁凡的ACM算法全家桶(全新的模板整合计划)
  2. eclipse工程中查看android源码
  3. c语言课程思政教案设计,设计类专业课程思政教学案例及教学设计
  4. 问题 C: 完美的数(思维)
  5. 类加载的双亲委派机制
  6. Unity打包失败解决方案
  7. RabbitMQ管控台操作手册
  8. django 1.8 官方文档翻译:6-3 Django异常
  9. 前端开发~uni-app ·[项目-仿糗事百科] 学习笔记 ·004【App.vue引入全局公共样式】
  10. 三角数数列与杨辉三角
  11. P1215 [USACO1.4]母亲的牛奶 Mother's Milk
  12. 计算机远程桌面相关服务,远程桌面服务是哪个
  13. 大话2正在连接登录服务器,大话西游手游服务器连接失败进不去解决办法
  14. sql语句中----删除表数据的三兄弟
  15. java guardedby_JAVA多线程(五)模式-Guarded Suspension
  16. Linux系统下搭建DNS服务器——原理总结
  17. 用PYQT5实现非常基本sqlite的编辑器
  18. INTERIGHT 京东自营旗舰店-京东 要把凡客给弄残啊这是。。
  19. 微信小程序+PHP 搜索+分页
  20. 三台服务器同时服务一个网站,三台服务器同时热备

热门文章

  1. SPV、SPV节点和SPV钱包
  2. Ubuntu系统如何安装nodejs及npm
  3. 【区块链基础知识系列】 第6课 区块链之分片技术(sharding)-区块链扩容问题的良方
  4. IBM HyperLedger fabric 详解
  5. android电视打印信息解析,液晶电视获取打印信息的方法与操作
  6. 韩信点兵python源代码_少儿编程|Python小课堂 – 韩信点兵
  7. bme280 环境传感器开发板_盘一盘那些年我们常用的物联网开发板!
  8. 颠倒整数的C语言程序,帮忙解决c语言题目1.编写一个程序,用户输入一个小于5位的正整数,把它的各位数字前后颠倒一下,并输出颠倒后的结果。2.编...
  9. 笔记本电脑锁_联想都不敢想之2020年笔记本电脑推荐
  10. 算法的威力:法国人用台式机打破由超级计算机创造的圆周率运算世界记录