X-Git-Url: https://git.archive.openwrt.org/?p=project%2Fluci.git;a=blobdiff_plain;f=libs%2Fweb%2Fluasrc%2Fi18n.lua;h=4b3adf7ebb635418be484ec6275d6dc457101dfc;hp=546429933b050067fd39138da53bb6b26e720328;hb=9d85bd73e5562ae72715935187ce0d55c3009d24;hpb=b454395a8da4013aff2ecd64cd7eafc01fc6a5a2 diff --git a/libs/web/luasrc/i18n.lua b/libs/web/luasrc/i18n.lua index 546429933..4b3adf7eb 100644 --- a/libs/web/luasrc/i18n.lua +++ b/libs/web/luasrc/i18n.lua @@ -12,9 +12,9 @@ Copyright 2008 Steven Barth Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. -You may obtain a copy of the License at +You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 + http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, @@ -24,26 +24,36 @@ limitations under the License. ]]-- +--- LuCI translation library. module("luci.i18n", package.seeall) -require("luci.sys") +require("luci.util") table = {} -i18ndir = luci.sys.libpath() .. "/i18n/" +i18ndir = luci.util.libpath() .. "/i18n/" loaded = {} +context = luci.util.threadlocal() +default = "en" --- Clears the translation table +--- Clear the translation table. function clear() table = {} end --- Loads a translation and copies its data into the global translation table -function load(file, force) - if force or not loaded[file] then - local f = loadfile(i18ndir..file..".lua") or loadfile(i18ndir..file) +--- Load a translation and copy its data into the translation table. +-- @param file Language file +-- @param lang Two-letter language code +-- @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") if f then - setfenv(f, table) + table[lang] = table[lang] or {} + setfenv(f, table[lang]) f() - loaded[file] = true + loaded[lang] = loaded[lang] or {} + loaded[lang][file] = true return true else return false @@ -53,17 +63,36 @@ function load(file, force) end end --- Same as load but autocompletes the filename with .LANG from config.lang +--- Load a translation file using the default translation language. +-- Alternatively load the translation of the fallback language. +-- @param file Language file +-- @param force Force reload even if already loaded (optional) function loadc(file, force) - return load(file .. "." .. require("luci.config").main.lang, force) + load(file, default, force) + return load(file, context.lang, force) end --- Returns the i18n-value defined by "key" or if there is no such: "default" -function translate(key, default) - return table[key] or default +--- Set the context default translation language. +-- @param lang Two-letter language code +function setlanguage(lang) + context.lang = lang:gsub("_", "-") end --- Translate shourtcut with sprintf/string.format inclusion +--- Return the translated value for a specific translation key. +-- @param key Translation key +-- @param def Default translation +-- @return Translated string +function translate(key, def) + return (table[context.lang] and table[context.lang][key]) + or (table[default] and table[default][key]) + or def +end + +--- Return the translated value for a specific translation key and use it as sprintf pattern. +-- @param key Translation key +-- @param default Default translation +-- @param ... Format parameters +-- @return Translated and formatted string function translatef(key, default, ...) return translate(key, default):format(...) -end \ No newline at end of file +end