diff options
author | Jo-Philipp Wich <jow@openwrt.org> | 2012-11-25 19:17:55 +0000 |
---|---|---|
committer | Jo-Philipp Wich <jow@openwrt.org> | 2012-11-25 19:17:55 +0000 |
commit | 0e50aa690af6cd9f37fa97b4a521fe523cce3c39 (patch) | |
tree | c0ab4edc0dd221dfa3e6fb4eeba049ecc05326fe /libs/web/luasrc | |
parent | c647ff9f0e1af211a762dc9a773c1b5c4aacd168 (diff) |
libs/web: rewrite template engine, merge lmo library
- template parser: merge lmo library
- template parser: rewrite to operate on memory mapped files
- template parser: implement proper line number reporting on syntax errors
- template parser: process translate tags directly and bypass Lua
- template lmo: introduce load_catalog(), change_catalog() and close_catalog()
- template lmo: rewrite index processing to operate directly on the memory mapped file
- template lmo: implement binary search keys, reducing the lookup complexity to O(log n)
- po2lmo: write sorted indixes when generating *.lmo archives
- i18n: use the template parser for translations
- i18n: stub load(), loadc() and clear()
- i18n: map setlanguage() to load_catalog()
Diffstat (limited to 'libs/web/luasrc')
-rw-r--r-- | libs/web/luasrc/i18n.lua | 44 | ||||
-rw-r--r-- | libs/web/luasrc/template.lua | 5 |
2 files changed, 10 insertions, 39 deletions
diff --git a/libs/web/luasrc/i18n.lua b/libs/web/luasrc/i18n.lua index 816d90310..ff917c6f3 100644 --- a/libs/web/luasrc/i18n.lua +++ b/libs/web/luasrc/i18n.lua @@ -27,7 +27,8 @@ limitations under the License. --- LuCI translation library. module("luci.i18n", package.seeall) require("luci.util") -require("lmo") + +local tparser = require "luci.template.parser" table = {} i18ndir = luci.util.libpath() .. "/i18n/" @@ -37,7 +38,6 @@ default = "en" --- Clear the translation table. function clear() - table = {} end --- Load a translation and copy its data into the translation table. @@ -46,33 +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 = lmo.open(i18ndir .. file .. "." .. lang .. ".lmo") - if f then - 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 - else - return false - end - else - return true - end end --- Load a translation file using the default translation language. @@ -80,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. @@ -90,16 +60,18 @@ 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) + end + end end --- Return the translated value for a specific translation key. -- @param key Default translation text -- @return Translated string 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 key + return tparser.translate(key) or key end --- Return the translated value for a specific translation key and use it as sprintf pattern. diff --git a/libs/web/luasrc/template.lua b/libs/web/luasrc/template.lua index 962c2ea88..72127d1df 100644 --- a/libs/web/luasrc/template.lua +++ b/libs/web/luasrc/template.lua @@ -79,9 +79,8 @@ function Template.__init__(self, name) -- If we have no valid template throw error, otherwise cache the template if not self.template then error("Failed to load template '" .. name .. "'.\n" .. - "Error while parsing template '" .. sourcefile .. "'.\n" .. - "A syntax error occured near '" .. - (err or "(nil)"):gsub("\t", "\\t"):gsub("\n", "\\n") .. "'.") + "Error while parsing template '" .. sourcefile .. "':\n" .. + (err or "Unknown syntax error")) else self.cache[name] = self.template end |