SDL中文论坛
标题:
Visual Studio编译gettext
[打印本页]
作者:
ancientcc
时间:
2017-1-22 14:38
标题:
Visual Studio编译gettext
源码说明
1:源码基于libiconv-1.11.1、gettext-0.15。(这是两个最后有支持MSVC编译器的官方版本)。
2:项目使用.Net默认的*.sln和*.suo。不再是gettext官方提供的nmake命令行方式。
3:源码作过改动。针对Woe32系统,_nl_locale_name_posix中增加以GetEnvironmentVariable方法检查LANG环境变量。
4、为方便生成开发时包,编译前请在gettext-msvc-0.15同级目录下创建gettext-framework目录,gettext编译结束会把开发时需要的libintl.h、intl.lib和intl.dll复制在gettext-framework下。
为什么我要基于Visual Studio编译gettext
“王国战争”支持多语言用的是gettext机制。一直来翻译是可以了,但不支持游戏中切换语言。——很怪,wesnoth代码就可以。
为找出是哪里问题,不得不看gettext源码。要懂得源码,较好办法就是让运行起来,用Visual Studio调试器进行跟踪。
针对msvc编译器gettext提供了nmake,对于这种方式我总认为有缺陷,不方便。于是决定基于官方给的nmake生成*.sln和*.suo。
结果,我查出造成游戏中切换语言失败的原因是
exe和dll中的getenv/_putenv不一致
。举个例子,程序一启动时环境变量区中不存在LANG这个环境变量,exe把LANG这个环境变量置为了zh_TW,exe用getenv回读LANG确实已是zh_TW,但在dll,读回的值却是NULL,即和一开始一样未设置。基于gettenv/_putenv失败,于是我改用GetEnvironmentVariable/SetEnvironmentVariable,为此修改了gettext源码。
项目说明
gettext涉及两个开源项目,libiconv和gettext。因而在编译时,这两个项目都要编译,当然,这里使用了“最小”编译,像gettext不用libiconv中的charset.lib,在此就不编译了。
此个源码给的libiconv和gettext都不是最新的,而是两个最后有支持MSVC编译器的官方版本。有了这个工程作基础,然后对比相关源文件,只要过程中细心,要升级到最高版本应该也是可以的。——或许吧,我将来会做这个事,但现在还是将就着用。
欢迎光临 SDL中文论坛 (http://www.libsdl.cn/bbs/)
Powered by Discuz! X3.3