源码已经更新在CSDN的码库里:
git clone https://gitcode.com/funsion/CLua.git
在src文件夹下的linit.c初始化库的函数,用于lua.c和其他客户端。
增加加载中文库宏名列表,保留英文库宏名列表。
原始的代码为:
static const luaL_Reg loadedlibs[] = {
{LUA_GNAME, luaopen_base},
{LUA_LOADLIBNAME, luaopen_package},
{LUA_COLIBNAME, luaopen_coroutine},
{LUA_TABLIBNAME, luaopen_table},
{LUA_IOLIBNAME, luaopen_io},
{LUA_OSLIBNAME, luaopen_os},
{LUA_STRLIBNAME, luaopen_string},
{LUA_MATHLIBNAME, luaopen_math},
{LUA_UTF8LIBNAME, luaopen_utf8},
{LUA_DBLIBNAME, luaopen_debug},
{NULL, NULL}
};
更改成以下代码:
static const luaL_Reg loadedlibs[] = {
{LUA_GNAME, luaopen_base}, /* Lua基础库 */
{LUA_LOADLIBNAME, luaopen_package}, /* Lua包加载库 */
{LUA_LOADLIBNAME_C, luaopen_package},
{LUA_COLIBNAME, luaopen_coroutine}, /* Lua协程库 */
{LUA_COLIBNAME_C, luaopen_coroutine},
{LUA_TABLIBNAME, luaopen_table}, /* Lua表库 */
{LUA_TABLIBNAME_C, luaopen_table},
{LUA_IOLIBNAME, luaopen_io}, /* Lua I/O库 */
{LUA_IOLIBNAME_C, luaopen_io},
{LUA_OSLIBNAME, luaopen_os}, /* Lua操作系统库 */
{LUA_OSLIBNAME_C, luaopen_os},
{LUA_STRLIBNAME, luaopen_string}, /* Lua字符串库 */
{LUA_STRLIBNAME_C, luaopen_string},
{LUA_MATHLIBNAME, luaopen_math}, /* Lua数学库 */
{LUA_MATHLIBNAME_C, luaopen_math},
{LUA_UTF8LIBNAME, luaopen_utf8}, /* Lua UTF-8库 */
{LUA_DBLIBNAME, luaopen_debug}, /* Lua调试库 */
{LUA_DBLIBNAME_C, luaopen_debug},
{NULL, NULL} /* 结束标志 */
};
为了保证中英文宏名都可以加载,以便你可以复制英文原码来进行更改。所以保留了英文的宏名列表,这样就只能使用两个库的宏名表,
LUA_COLIBNAME, luaopen_coroutine 英文协程宏名,协程加载库名,
LUA_COLIBNAME_C, luaopen_coroutine 中文协程宏名,协程加载库名,
其实它们都是加载同样的库名,算是加载了2次,以Lua内部算法,应该只会加载一次。
更改完之后,同样需要重新编译Lua的源码,实现以上列出的关键词的中文化。
注意,在Window系统下编译Lua, 最好将所有Lua的源码,重新保存成ANSI格式的文件,刚下载的默认的源码会是UTF-8格式的。
这个事情说三遍,
1,不然就会出现,Window下的UTF-8源码可编译,但Shell里的中文输出会乱码。
2,要不然就是Window的ANSI源码不可编译(假如你没做以上步骤),
3,如果是用ANSI格式的源码编译的Lua.exe,对应的,你在Window下写的Lua程序也是需要保存成ANSI格式的。这样就可以在Shell里输出正确的中文显示。