整了大半天,终于有所得,整理一下。之前那个晕哦。
之所以选择GETTEXT多语种方案用在.NET开发中,是因为只有GETTEXT才能做到代码和翻译分离,让翻译人员不接触源代码的情况下进行多语种翻译,甚至可以外包给第三方翻译公司。从长远来看比微软.NET自带的方案要容易维护。
网上搜《基于Gettext的asp.net网站多语言解决方案》可以看到一大堆,原始出处:http://www.blogwind.com/Wuvist/54115.shtml。但是在开发环境搭建过程中会碰到N多问题。
GETTEXT是GNU的开源项目,编译一般是基于LINUX的。在开始尝试用MSYS+MINGW搭建环境做编译,一会儿是iconv.h找不到,安装了libiconv之后又出现libxml/encoding.c里有错误。查一下发现根本无法继续下去,于是继续找纯WINDOWS环境下使用GETTEXT软件的方式。
GETTEXT分为TOOLS和RUNTIME两个部分。网上一般只能搜到1.3版本的官方有下载的WIN32版本。后来在http://groups.google.com/group/Django-I18N/browse_thread/thread/577afdaef1392958找到下载链接:
http://ftp.gnome.org/pub/gnome/binaries/win32/dependencies/gettext-tools-0.17.zip
http://ftp.gnome.org/pub/gnome/binaries/win32/dependencies/gettext-runtime-0.17-1.zip
将gettext-tools-0.17里的bin目录解压之后尝试运行会提醒intl.dll找不到,这个文件在gettext-runtime-0.17-1.zip中,将其放出即可。
好了,接下去可以测试将PO文件生成RESOURCE了。随便网上找一个PO文件,用类似这样的命令:
msgfmt --csharp -r test -l zh_CN -d . test.zh_CN.po
居然看到错误信息:“msgfmt: C# compiler not found, try installing pnet ”
缺少PNET?搜索一下发现又是GNU的Portable.Net,项目地址为http://www.gnu.org/software/dotgnu/。啊哈,还要找PNET得WIN32下安装包。幸好有现成的,下载地址http://www.steki.net/dotGNU/JIT/。
安装dotGNU_0_8_0.exe之后,默认路径:C:/Program Files/Portable.NET/0.8.0
要让msgfmt调用cscc编译程序,还是最偷懒的办法,将原来gettext tool里所有文件拷贝到C:/Program Files/Portable.NET/0.8.0/bin里面。运行C:/Program Files/Portable.NET/0.8.0/bin>msgfmt --csharp -r test -l zh_CN -d . test.zh_CN.po,没有报错了。(如果要看详细信息最后加参数 --verbose)
生成的文件去哪里了?就在bin目录下的zh-CN/test.resources.dll。呼呼
接下去的工作就要参考
http://www.gnu.org/software/hello/manual/gettext/C_0023.html
和之前那篇牛人的博文了。另外还可参考:http://www.cnblogs.com/armtop/archive/2008/09/25/1299102.html
继续研究,待续集