lua 多国语言文本解决方案
发布时间:2020-12-14 22:16:19 所属栏目:大数据 来源:网络整理
导读:lua 多国语言文本解决方案 以前用c++做游戏,文本处理往往是从excel导出各语言文本的自定义二进制格式文件,游戏根据相应的语言读取相应的文件。同时导出工具还会生成一个索引文件,用来从文本数据中索引文本。这个索引一般是整形的,这样文本可以直接用数组
lua 多国语言文本解决方案
以前用c++做游戏,文本处理往往是从excel导出各语言文本的自定义二进制格式文件,游戏根据相应的语言读取相应的文件。同时导出工具还会生成一个索引文件,用来从文本数据中索引文本。这个索引一般是整形的,这样文本可以直接用数组保存,效率很高,并且比较节约内存。
现在我们使用Lua开发游戏,可以利用lua语言的特点,直接生成包含文本数据的lua代码,并作为模块引用。这种用法比使用c++载入文件的方式要简单一些。
下面介绍一下我的做法:
首先,使用工具从excel文件中自动生成文本索引的lua文件和文本内容的lua文件:
(使用lua的好处是,在写这个工具之前,我可以先直接手写lua文件验证这个方案,而c++必须先把工具实现了才能接着做)
1)索引文件 textindex.lua
string_hello = 1
string_world = 2
这儿索引是以全局变量形式存在,可以方便的被其他lua脚本require,并直接使用。
2)各语言的文本内容的lua文件,以中英文为例
英文的 en.lua
require('textindex')? --引入索引
local texts = {} texts[string_hello] = 'Hello' texts[string_world] = 'World'
return texts
中文的 ch.lua
require('textindex')? --引入索引
local texts = {} texts[string_hello] = '你好' texts[string_world] = '世界'
return texts
然后,我们写一个简单的文本管理模块 text.lua :
module(...,package.seeall)
local textPack local currentLanguageType = CCApplication:sharedApplication():getCurrentLanguage() --使用cocos2d-x相关方法获取当前语言 if currentLanguageType == kLanguageEnglish then ??? textPack = require('en') elseif currentLanguageType == kLanguageChinese then ??? textPack = require('zh') else ?? ?textPack = require('en') --找不到对应语言的文件,使用英文的。ps: cocos2d-x居然不区分简体中文和繁体中文 end function get(index) ?? ?return textPack[index] or '?' --注意这儿要防止文本不存在,返回一个'?'方便测试查出问题同时又避免lua错误退出
end
这个模块载入的时候会根据当前系统的语言选择载入一个文本内容的Lua文件(当然如果你希望动态切语言可以增加相应的方法,不过要注意释放老语言包),同时该模块提供了一个get方法用于根据索引获取文本。
最后,看看我们如何使用:
例如 mainmenu.lua:
local text = require('text').get? --这样可以很方便的使用 text(id)来获取文本
--某个需要使用文本的地方
local testStr = text(string_hello) --得到了当前语言的文本
ps:我使用的是Lua5.1
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- java – 我应该捕获EmptyResultDataAccessException吗?
- wikioi 3116 高精度练习之加法
- 用Perl、Shell脚本基于Tomcat6开发cgi程序环境配置
- [每月好书] 写给大家看的算法书(来自漫画帝国的图解算法书
- perl 脚本去掉 word 自定义属性
- Perl:如何在X秒后获得IO :: Socket :: INET超时?
- php – 检查laravel中的朋友
- 制作golang1.8 with glide(package management for golang)
- perl使用xml::simple来读写xml
- Golang用DYNAMIC键解析一个json