不需要了解任何底层知识,就可以汉化!Let`s go!!!
2013-10-16 21:53
357 查看
汉化?莫要被这两个字吓到。
其实你也可以汉化,跟着我的步骤来,你也可以进行汉化,Let`s go!!!(大鸟飘过)
这里汉化的是微软企业类库的配置管理工具EntLibConfig.exe。当然,这里的企业类库是3.0版本的。
准备工作:
你需要下载Entprise Library,然后找到配置管理工具EntLibConfig.exe。
将EntLibConfig.exe及其依赖的文件放置在D:\el目录下
如果不想下载微软企业类库,也没有关系,这里的方法还是适用的。
首先看一下,要汉化的软件界面:
View Code
总结:
可以先将要汉化的程序集,通过ildasm反汇编器将其反汇编,此时会生成一堆.il文件和.resource文件。你可以在.resource文件中找到要替换的英文。
由于.resource文件的内部结构时不公开的,但是可以通过System.Resources.ResourceReader和System.Resources.ReousrceWriter来读取和写入.resource文件(通过研究这两个类的源码,也可以知道.resoruce文件的内部布局),当然,你可以使用我封装好的rsc工具来读取和写入.resource文件。
使用rsc文件将.resoruce文件中的资源提取到一个文本文件中,然后搜索要汉化的字符差,将其替换成中文,最后在使用rsc将其保存到源文件中。
到此为止,汉化以基本完成。此时使用ilasm汇编器将生成的il文件重新编译,汉化完成!!
其实你也可以汉化,跟着我的步骤来,你也可以进行汉化,Let`s go!!!(大鸟飘过)
这里汉化的是微软企业类库的配置管理工具EntLibConfig.exe。当然,这里的企业类库是3.0版本的。
准备工作:
你需要下载Entprise Library,然后找到配置管理工具EntLibConfig.exe。
将EntLibConfig.exe及其依赖的文件放置在D:\el目录下
如果不想下载微软企业类库,也没有关系,这里的方法还是适用的。
首先看一下,要汉化的软件界面:
using System; using System.Collections.Generic; using System.Text; using System.IO; using Wbs; namespace rsc { class Program { static void Main(string[] args) { if(args.Length ==0) { Console.WriteLine("假设要汉化a.resource资源文件,请参考如下步骤实现(注:只能汉化字符串资源,如果想要汉化字体颜色等资源请....自己弄去。)"); Console.WriteLine("第一步:从a.resource中提取资源到r.txt中,请输入如下命令行:rsc a.resource r r.txt"); Console.WriteLine("第二步:修改r.txt中需要汉化的资源"); Console.WriteLine("第三步:从r.txt中将资源写会到a.resource中,请输入如下命令行:rsc a.resource w r.txt"); return; } string fileName = args[0]; string readOrWrite = args[1]; string outputFile = fileName; if (args.Length == 3) { outputFile = args[2]; } if (readOrWrite == "r") { Dictionary<int,Resource> resources = ResourceHelper.GetResources(fileName); WriteTextTo(outputFile, resources); Console.WriteLine("已将资源以文本形式写入到{0}中",outputFile); return; } if (readOrWrite == "w") { Dictionary<int ,Resource>originalResources= ResourceHelper.GetResources(fileName); IEnumerable<Resource> resourceNew = ReadFrom(outputFile); ChangeResource(originalResources, resourceNew); ResourceHelper.WriteResources(fileName,originalResources.Values); Console.WriteLine("已经资源写入到{0}中",fileName); return; } } /// <summary> /// 将资源以文本形式写入到指定的文件 /// </summary> /// <param name="fileName">要将资源写入到的文件</param> /// <param name="resources">资源</param> private static void WriteTextTo(string fileName,Dictionary<int,Resource> resources) { System.IO.FileStream fs = new System.IO.FileStream(fileName, System.IO.FileMode.Create); System.IO.StreamWriter sw = new System.IO.StreamWriter(fs,Encoding.UTF8); StringBuilder resourceTextBuilder = new StringBuilder(); foreach (var eachResource in resources) { resourceTextBuilder.AppendFormat("{0},{1},{2}\r\n", eachResource.Key,eachResource.Value.Key, eachResource.Value.Value); } sw.WriteLine(resourceTextBuilder.ToString()); sw.Close(); } /// <summary> /// 从指定的资源文本文件中读取资源。 /// </summary /// <param name="fileNameForText">资源文本文件名</param> /// <returns>返回一个资源集合</returns> private static IEnumerable<Resource> ReadFrom(string fileNameForText) { FileStream fs = new FileStream(fileNameForText, FileMode.Open, FileAccess.Read); StreamReader reader = new StreamReader(fs,Encoding.Default); string line; List<Resource> resources = new List<Resource>(); while ((line = reader.ReadLine()) !="") { int resourceID =Convert.ToInt32( line.Substring(0, line.IndexOf(','))); string keyvValuePair = line.Substring(line.IndexOf(',') + 1); string key=keyvValuePair.Substring(0,keyvValuePair.IndexOf(',')); string value=keyvValuePair.Substring(keyvValuePair.IndexOf(',')+1); Resource newResource = new Resource(resourceID,key,value,null); resources.Add(newResource); } return resources; } /// <summary> /// 将资源修改为指定的资源 /// </summary> /// <param name="originalResource">要修改的资源</param> /// <param name="resourceNew">要将资源修改成的新资源</param> private static void ChangeResource(Dictionary<int, Resource> originalResource, IEnumerable<Resource> resourceNew) { foreach (Resource eachResource in resourceNew) { if(originalResource[eachResource.ID].ResourceType.FullName=="System.String") originalResource[eachResource.ID].Value = eachResource.Value; } } } }
View Code
总结:
可以先将要汉化的程序集,通过ildasm反汇编器将其反汇编,此时会生成一堆.il文件和.resource文件。你可以在.resource文件中找到要替换的英文。
由于.resource文件的内部结构时不公开的,但是可以通过System.Resources.ResourceReader和System.Resources.ReousrceWriter来读取和写入.resource文件(通过研究这两个类的源码,也可以知道.resoruce文件的内部布局),当然,你可以使用我封装好的rsc工具来读取和写入.resource文件。
使用rsc文件将.resoruce文件中的资源提取到一个文本文件中,然后搜索要汉化的字符差,将其替换成中文,最后在使用rsc将其保存到源文件中。
到此为止,汉化以基本完成。此时使用ilasm汇编器将生成的il文件重新编译,汉化完成!!
相关文章推荐
- 不需要了解任何底层知识,就可以汉化!Let`s go!!!
- 程序是如何运行的和调用的?看什么书可以了解相关知识?
- Mantis 1.1.2不需要任何修改就可以支持中文
- 不是白日做梦!!! 不需要任何后台服务也可以跑windows
- 5段SQL可以测试出你对SQL性能优化知识了解多少
- ios 中调用函数的方法是消息传递,这个和普通的函数调用的区别是,你可以随时对一个对象传递任何消息,而不需要在编译的时候声明这些方法。所以Objective-C可以在runtime的时候
- 通用权限管理系统组件 (GPM - General Permissions Manager) 不需要任何配置文件,程序都可以正常运行
- LINQ学习笔记(10) LINQ to Entities---不需要编写任何数据访问代码就可以查询数据库
- 5段SQL可以测试出你对SQL性能优化知识了解多少
- 虚拟字符驱动,申请n页内存,使用mmap映射到应用程序空间,用户就可以直接访问不需要任何同步机制
- 学习资源分享,想了解某个协议的基础知识可以去H3C的网站学习,挺好~~
- 学会这些你就可以做PM了 程序员也应该了解UI知识
- 通用权限管理系统组件 (GPM - General Permissions Manager) 不需要任何配置文件,程序都可以正常运行
- ECU底层软件工程师需要了解的发动机基本知识
- 5段SQL可以测试出你对SQL性能优化知识了解多少
- 下面我这个方法可以实现限制某些QQ号登陆,而没有被限制的QQ号可以登陆,不需要借助任何工具。
- PHP If 语句的一些知识,大家可以看下哦,了解多点哦
- 5段SQL可以测试出你对SQL性能优化知识了解多少
- go 基本语法了解
- 为什么有消息说这次地震比以前的同级地震危害更大,这就要关注地震的另一个指标,烈度。这有一些资料可以为您解释烈度的概念。将地震的震级和烈度了解清楚,区分开来。