nic*_*ckb 9 lua web-applications internationalization
我构建了一个Lua Web应用程序,很明显我需要开始为我的海外客户国际化("i18n")它.
在Lua,我的应用程序国际化的最佳方式是什么?
我意识到这是一项重大任务,特别是因为我的一些显示器是在HTML模板中硬编码的,而一些数据字段在我目前面向美国英语的数据库中.
任何指导将不胜感激.
编辑:添加了metatable东西
有人会介意上面的示例代码更清晰一些
当然.
在一个文件中,您可以i18n使用以下方法定义变量:
local i18n = { locales = {} }
local currentLocale = 'en' -- the default language
function i18n.setLocale(newLocale)
currentLocale = newLocale
assert(i18n.locales[currentLocale], ("The locale %q was unknown"):format(newLocale))
end
local function translate(id)
local result = i18n.locales[currentLocale][id]
assert(result, ("The id %q was not found in the current locale (%q)"):format(id, currentLocale)
return result
end
i18n.translate = translate
setmetatable(i18n, {__call = function(_,...) return translate(id) end})
return i18n
Run Code Online (Sandbox Code Playgroud)
在同一文件或其他文件中,您包含了您需要的语言环境i18n.locales.
local i18n = require 'i18n' -- remove this line if on the same file as before
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"
}
...
Run Code Online (Sandbox Code Playgroud)
用法:
local i18n = require 'i18n'
require 'locales' -- if using a separate file for the locales, require it too
print( i18n.translate('helloWorld') ) -- Hello world
i18n.setLocale('es')
-- using i18n() instead of i18n.translate()
print( i18n('helloWorld') ) -- Hola mundo
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1386 次 |
| 最近记录: |