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