自制资源文件转换工具(.txt -> .resources)

       现在是个软件都讲国际化,俗称多语言版本。就是能够把界面上的文字在多个语言间切来换去。实现国际化最常用的就是资源文件。

       在原来的Web程序中也适用过如:ApplicationResources.properties、ApplicationResources_zh_CN.properties这样的资源文件(如同.net中的文本资源文件)。.NET中的资源文件有三种: 文本(.txt )文件、 XML 格式的.Resx 文件和.Resources 文件。文本文件只能包含形如“ 名称= 值”格式的字符串资源。.Resx文件和.Resources 文件中不仅能保存字符串资源,还能保存图像等可序列化的持久对象资源。但是只有.resources 文件格式的资源文件才能被嵌入到运行库可执行文件中,或被编译为附属程序集。

      .net  资源文件相关类在System.Resources中,ResourceWriter用于写资源文件,ResourceManager用于读资源文件中的资源。

      在知道.net提供了resgen命令将不同语言文本文件分别转换为resources文件之前,自己写了一个将多语言文本文件转换为resources文件的小工具。其实后来看起来原理差不多:
常用的方法:
          rm.GetString("menuItem1_Text",ci)   // 用第二个参数CultureInfo区分语言
我的方法:
         rm.GetString("menuItem1_Text"+appender) // 在资源id上做文章,写资源文件的时候用相应的后缀标识资源

      最后的效果是,将形如:
// a.txt
menuFile 文件 File
menuEdit 编辑 Edit
       以上文件转换成一个资源文件a.resources,其中
rm.GetString("menuFile_cn")  == “文件”
rm.GetString("menuFile_en")  == “File”

      遇到的问题:
      1. ResourceManager   rm   =   new   ResourceManager("ResOper.a",   Assembly.GetExecutingAssembly ( )  )  ; // 生成资源文件a.resources, 第一个参数由两部分构成,ResOper表示工程的命名空间,a表示资源文件名a.resources的根名称,即点号有前部分a。
          如果错误会报错:Message="未能找到任何适合于指定的区域性或非特定区域性的资源。请确保在编译时已将“a.resources”正确嵌入或链接到程序集“ResourceFileOper”,或者确保所有需要的附属程序集都可加载并已进行了完全签名。"

      2. 生成资源文件的txt文件如果包含中文,文件编码方式必须为utf-8,可以用utraledit转换,vs.net也有这个功能。

      3. 生成的.resources文件必须嵌入工程再编译才能生效,不需要同.exe一起发布。



 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值