summaryrefslogtreecommitdiffhomepage
path: root/modules/luci-base/luasrc/i18n.lua
blob: 323912b65022ef10cfe3dd63315cca8c99896f38 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
-- Copyright 2008 Steven Barth <steven@midlink.org>
-- Licensed to the public under the Apache License 2.0.

local tparser  = require "luci.template.parser"
local util     = require "luci.util"
local tostring = tostring

module "luci.i18n"

i18ndir = util.libpath() .. "/i18n/"
context = util.threadlocal()
default = "en"


function setlanguage(lang)
	local code, subcode = lang:match("^([A-Za-z][A-Za-z])[%-_]([A-Za-z][A-Za-z])$")
	if not (code and subcode) then
		subcode = lang:match("^([A-Za-z][A-Za-z])$")
		if not subcode then
			return nil
		end
	end

	context.parent = code and code:lower()
	context.lang   = context.parent and context.parent.."-"..subcode:lower() or subcode:lower()

	if tparser.load_catalog(context.lang, i18ndir) and
	   tparser.change_catalog(context.lang)
	then
		return context.lang

	elseif context.parent then
		if tparser.load_catalog(context.parent, i18ndir) and
		   tparser.change_catalog(context.parent)
		then
			return context.parent
		end
	end

	return nil
end

function translate(key)
	return tparser.translate(key) or key
end

function translatef(key, ...)
	return tostring(translate(key)):format(...)
end

function dump()
	local rv = {}
	tparser.get_translations(function(k, v) rv[k] = v end)
	return rv
end