X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=libs%2Fweb%2Fluasrc%2Fi18n.lua;h=816d90310af692298b830b6cbbd8be47ebc1eaae;hb=70706cf388f8ac100778831e9ef9d7b1eb74c752;hp=082a6007835646614302edef5be5b8a3bb0219f3;hpb=2bd86ec208521b48a79710d4be798a5ac25ebb4e;p=oweals%2Fluci.git diff --git a/libs/web/luasrc/i18n.lua b/libs/web/luasrc/i18n.lua index 082a60078..816d90310 100644 --- a/libs/web/luasrc/i18n.lua +++ b/libs/web/luasrc/i18n.lua @@ -27,6 +27,7 @@ limitations under the License. --- LuCI translation library. module("luci.i18n", package.seeall) require("luci.util") +require("lmo") table = {} i18ndir = luci.util.libpath() .. "/i18n/" @@ -47,13 +48,22 @@ end function load(file, lang, force) lang = lang and lang:gsub("_", "-") or "" if force or not loaded[lang] or not loaded[lang][file] then - local f = loadfile(i18ndir .. file .. "." .. lang .. ".lua") or - loadfile(i18ndir .. file .. "." .. lang .. ".lua.gz") - + local f = lmo.open(i18ndir .. file .. "." .. lang .. ".lmo") if f then - table[lang] = table[lang] or {} - setfenv(f, table[lang]) - f() + if not table[lang] then + table[lang] = { f } + setmetatable(table[lang], { + __index = function(tbl, key) + for i = 1, #tbl do + local s = rawget(tbl, i):lookup(key) + if s then return s end + end + end + }) + else + table[lang][#table[lang]+1] = f + end + loaded[lang] = loaded[lang] or {} loaded[lang][file] = true return true @@ -83,21 +93,38 @@ function setlanguage(lang) end --- Return the translated value for a specific translation key. --- @param key Translation key --- @param def Default translation +-- @param key Default translation text -- @return Translated string -function translate(key, def) +function translate(key) return (table[context.lang] and table[context.lang][key]) or (table[context.parent] and table[context.parent][key]) or (table[default] and table[default][key]) - or def + or key +end + +--- Return the translated value for a specific translation key and use it as sprintf pattern. +-- @param key Default translation text +-- @param ... Format parameters +-- @return Translated and formatted string +function translatef(key, ...) + return tostring(translate(key)):format(...) +end + +--- Return the translated value for a specific translation key +-- and ensure that the returned value is a Lua string value. +-- This is the same as calling tostring(translate(...)) +-- @param key Default translation text +-- @return Translated string +function string(key) + return tostring(translate(key)) end --- Return the translated value for a specific translation key and use it as sprintf pattern. --- @param key Translation key --- @param default Default translation +-- Ensure that the returned value is a Lua string value. +-- This is the same as calling tostring(translatef(...)) +-- @param key Default translation text -- @param ... Format parameters -- @return Translated and formatted string -function translatef(key, default, ...) - return translate(key, default):format(...) +function stringf(key, ...) + return tostring(translate(key)):format(...) end