Editar: se ha añadido material metatabla
qué alguien cuenta que el código de ejemplo anterior un poco más clara
Ciertamente.
En un archivo que define una variable i18n
con los siguientes métodos:
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
En el mismo archivo, o en otra (s), se incluyen los lugares que necesita dentro 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"
}
...
Uso:
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
Esta es una manera de gran pregunta a responder. Estrechar las cosas un poco. ¿Cuál es tu aplicación? ¿Qué necesita ser traducido? ¿Qué estás usando para generar páginas web exactamente? Etcétera. –