Lua - 如何进行国际化?
2012-1-16 22:25:39
收藏:0
阅读:197
评论:3
我建立了一个 Lua web 应用程序,现在清楚地看到我需要开始国际化("i18n")为我的海外客户。
在 Lua 中,什么是国际化我的应用程序的最佳方法?
我意识到这是一项重大任务,特别是由于我的某些显示是硬编码在 HTML 模板中的,并且我的一些数据字段是针对当前美国英语定向的数据库。
我们将不胜感激地接受任何指导。
原文链接 https://stackoverflow.com/questions/8886615
点赞
stackoverflow用户513763
我基本上是以lhf在bib.lua中的回答方式解决这个问题的,使用一个定义字符串表的模块。我想分享一下,这样你就可以看到一些真正使用类似东西的代码了。
它在bib/trans.lua中。
我使用的一些方法可能还可以添加以下内容:
- 检查使用的翻译是否完整,例如在使用的语言中定义了所有在“参考”语言中定义的字符串。或者更好的是,甚至检查程序中定义的所有字符串是否都已定义。
2.在不同的“非参考”语言上使用metatable机制来发出警告,并返回“参考”语言标签,如果在使用的语言中不可用。
除了这些事情之外,我觉得现在就很舒适了。唯一的困难是,如果字符串块由于语言结构的差异而不完全匹配,我不知道该怎么解决。
2012-01-17 07:58:44
stackoverflow用户312586
有人可以把上面的示例代码稍微讲清楚一些吗?
当然可以。
在一个文件中,您定义了一个带有以下方法的 i18n
变量:
local i18n = { locales = {} }
local currentLocale = 'en' -- 默认语言
function i18n.setLocale(newLocale)
currentLocale = newLocale
assert(i18n.locales[currentLocale], ("未知的语言环境:%q"):format(newLocale))
end
local function translate(id)
local result = i18n.locales[currentLocale][id]
assert(result, ("当前语言环境(%q)中未找到id%q"):format(currentLocale, id))
return result
end
i18n.translate = translate
setmetatable(i18n, {__call = function(_,...) return translate(id) end})
return i18n
在同一个文件中或其他文件中,您需要包含所需的语言环境在 i18n.locales
中。
local i18n = require 'i18n' -- 如果在之前的文件中,请删除此行。
i18n.locales.en = {
helloWorld = "Hello world",
loginWarning = "You need to be logged in to do that"
}
i18n.locales.es = {
helloWorld = "Hola mundo",
loginWarning = "Debes haber iniciado una sesión para hacer eso"
}
...
用法:
local i18n = require 'i18n'
require 'locales' -- 如果使用单独的文件用于语言环境,请也需要将其引入。
print( i18n.translate('helloWorld') ) -- Hello world
i18n.setLocale('es')
-- 使用 i18n() 而不是 i18n.translate()
print( i18n('helloWorld') ) -- Hola mundo
2012-01-17 08:28:52
评论区的留言会收到邮件通知哦~
推荐文章
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
- 如何编写 Lua 模式将字符串(嵌套数组)转换为真正的数组?
在 Lua 中使用翻译表非常简单。首先编写代码,使得每个需要翻译的字符串都通过函数调用来使用,例如
i18n"Hello World"
。然后为要支持的语言编写翻译表。例如,English={["Hello World"]="Hello World"}
(或者添加一个索引元方法,只返回键,以避免重复字符串),以及French={["Hello World"]="Salut le monde"}
。最后编写function i18n(s) return Language[s] end
,然后在需要时设置Language=French
。