X-Git-Url: http://git.openwrt.org/?p=project%2Fluci.git;a=blobdiff_plain;f=libs%2Fweb%2Fluasrc%2Fi18n.lua;h=545a8aed939bfd13880b4adaeeb921a28660f73a;hp=082a6007835646614302edef5be5b8a3bb0219f3;hb=839dcdc01299869bc714990c19d8e244f18318b5;hpb=2bd86ec208521b48a79710d4be798a5ac25ebb4e;ds=sidebyside diff --git a/libs/web/luasrc/i18n.lua b/libs/web/luasrc/i18n.lua index 082a600783..545a8aed93 100644 --- a/libs/web/luasrc/i18n.lua +++ b/libs/web/luasrc/i18n.lua @@ -28,6 +28,8 @@ limitations under the License. module("luci.i18n", package.seeall) require("luci.util") +local tparser = require "luci.template.parser" + table = {} i18ndir = luci.util.libpath() .. "/i18n/" loaded = {} @@ -36,7 +38,6 @@ default = "en" --- Clear the translation table. function clear() - table = {} end --- Load a translation and copy its data into the translation table. @@ -45,24 +46,6 @@ end -- @param force Force reload even if already loaded (optional) -- @return Success status 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") - - if f then - table[lang] = table[lang] or {} - setfenv(f, table[lang]) - f() - loaded[lang] = loaded[lang] or {} - loaded[lang][file] = true - return true - else - return false - end - else - return true - end end --- Load a translation file using the default translation language. @@ -70,9 +53,6 @@ end -- @param file Language file -- @param force Force reload even if already loaded (optional) function loadc(file, force) - load(file, default, force) - if context.parent then load(file, context.parent, force) end - return load(file, context.lang, force) end --- Set the context default translation language. @@ -80,24 +60,45 @@ end function setlanguage(lang) context.lang = lang:gsub("_", "-") context.parent = (context.lang:match("^([a-z][a-z])_")) + if not tparser.load_catalog(context.lang, i18ndir) then + if context.parent then + tparser.load_catalog(context.parent, i18ndir) + return context.parent + end + end + return context.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) - 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 +function translate(key) + return tparser.translate(key) 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