locale/locale.lua

39 lines
998 B
Lua

-- Improved gettext
--- Er2 Locale
--- (c) Er2 2021 <er2@dismail.de>
--- Zlib License
local gtext = {
dloc = 'en_US', sdloc = 'en',
pref = '$'
}
function gtext:__call(str, t)
t = type(t) == 'table' and t or {}
t.plural = t.plural or 0
local plf = t.plural + 1
local tr = self.trans[self.locale or self.floc]
if tr and tr[str] and tr[str][plf] then str = tr[str][plf]
else
tr = self.trans[self.floc]
if tr and tr[str] and tr[str][plf] then str = tr[str][plf] end
end
-- Interpolation
str = str:gsub('(.?)%'..gtext.pref..'([%w_]+)', function(p, v)
if p == '\\' then return gtext.pref..v end
return p.. tostring(t[v] or '')
end)
return str
end
return function(path)
local self = setmetatable({
floc = gtext.dloc,
trans = require(path..'.loc')
}, gtext)
if not self.trans[self.floc] then self.floc = gtext.sdloc end
if not self.trans[self.floc] then self.floc = l:match '([^\n]+)' end
self.locale = self.floc
_, gettext = self, self
end