summaryrefslogtreecommitdiff
path: root/intllib.lua
blob: bc89db3849743826fbe79733542b3134daa8b1ac (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
56
57
58
59
60
61
62
63
64
65
66

intllib = { };

local strings = { };

local INTLLIB_DEBUG = true;

local LANG = minetest.setting_get("language") or os.getenv("LANG") or "en";
LANG = LANG:sub(1, 2);

local TRACE;

if (INTLLIB_DEBUG) then
    TRACE = function ( s )
        print("*** DEBUG: "..s);
    end
else
    TRACE = function ( ) end
end

local function do_load_strings ( f )
    local msgstr = { };
    for line in f:lines() do
        line = line:trim();
        if ((line ~= "") and (line:sub(1, 1) ~= "#")) then
            local pos = line:find("=", 1, true);
            if (pos) then
                local msgid = line:sub(1, pos - 1):trim();
                msgstr[msgid] = line:sub(pos + 1):trim();
            end
        end
    end
    return msgstr;
end

function load_strings ( modname, lang )
    lang = lang or LANG;
    local f, e = io.open(minetest.get_modpath(modname).."/locale/"..lang..".txt");
    if (not f) then
        f, e = io.open(minetest.get_modpath("intllib").."/locale/"..modname.."/"..lang..".txt");
        if (not f) then
            return nil;
        end
    end
    local strings;
    strings = do_load_strings(f);
    f:close();
    return strings;
end

local getters = { };

function intllib.Getter ( modname )
    if (not modname) then modname = minetest.get_current_modname(); end
    if (not getters[modname]) then 
        local msgstr = load_strings(modname, lang) or { };
        getters[modname] = function ( s )
            return msgstr[repr(s)] or s;
        end;
    end
    return getters[modname];
end

function intllib.get_current_language ( )
    return LANG;
end