mirror of
https://github.com/minetest-mods/intllib.git
synced 2025-01-22 07:50:24 +01:00
Export language detection function.
This commit is contained in:
parent
7889a4dcd7
commit
17eb88812a
62
gettext.lua
62
gettext.lua
@ -1,18 +1,7 @@
|
|||||||
|
|
||||||
local strfind, strsub, strrep = string.find, string.sub, string.rep
|
local strsub, strrep = string.sub, string.rep
|
||||||
local strmatch, strgsub = string.match, string.gsub
|
local strmatch, strgsub = string.match, string.gsub
|
||||||
|
|
||||||
local function split(str, sep)
|
|
||||||
local pos, endp = 1, #str+1
|
|
||||||
return function()
|
|
||||||
if (not pos) or pos > endp then return end
|
|
||||||
local s, e = strfind(str, sep, pos, true)
|
|
||||||
local part = strsub(str, pos, s and s-1)
|
|
||||||
pos = e and e + 1
|
|
||||||
return part
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
local function trim(str)
|
local function trim(str)
|
||||||
return strmatch(str, "^%s*(.-)%s*$")
|
return strmatch(str, "^%s*(.-)%s*$")
|
||||||
end
|
end
|
||||||
@ -37,7 +26,7 @@ local function parse_po(str)
|
|||||||
local function perror(msg)
|
local function perror(msg)
|
||||||
return error(msg.." at line "..lineno)
|
return error(msg.." at line "..lineno)
|
||||||
end
|
end
|
||||||
for line in split(str, "\n") do repeat
|
for _, line in ipairs(str:split("\n")) do repeat
|
||||||
lineno = lineno + 1
|
lineno = lineno + 1
|
||||||
line = trim(line)
|
line = trim(line)
|
||||||
|
|
||||||
@ -110,49 +99,6 @@ end
|
|||||||
|
|
||||||
local M = { }
|
local M = { }
|
||||||
|
|
||||||
local langs
|
|
||||||
|
|
||||||
local function detect_languages()
|
|
||||||
if langs then return langs end
|
|
||||||
|
|
||||||
langs = { }
|
|
||||||
|
|
||||||
local function addlang(l)
|
|
||||||
local sep
|
|
||||||
langs[#langs+1] = l
|
|
||||||
sep = strfind(l, ".", 1, true)
|
|
||||||
if sep then
|
|
||||||
l = strsub(l, 1, sep-1)
|
|
||||||
langs[#langs+1] = l
|
|
||||||
end
|
|
||||||
sep = strfind(l, "_", 1, true)
|
|
||||||
if sep then
|
|
||||||
langs[#langs+1] = strsub(l, 1, sep-1)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
local v
|
|
||||||
|
|
||||||
v = minetest.setting_get("language")
|
|
||||||
if v and v~="" then
|
|
||||||
addlang(v)
|
|
||||||
end
|
|
||||||
|
|
||||||
v = os.getenv("LANGUAGE")
|
|
||||||
if v then
|
|
||||||
for item in split(v, ":") do
|
|
||||||
addlang(item)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
v = os.getenv("LANG")
|
|
||||||
if v then
|
|
||||||
addlang(v)
|
|
||||||
end
|
|
||||||
|
|
||||||
return langs
|
|
||||||
end
|
|
||||||
|
|
||||||
local function warn(msg)
|
local function warn(msg)
|
||||||
minetest.log("warning", "[intllib] "..msg)
|
minetest.log("warning", "[intllib] "..msg)
|
||||||
end
|
end
|
||||||
@ -204,7 +150,7 @@ end
|
|||||||
|
|
||||||
local function parse_headers(str)
|
local function parse_headers(str)
|
||||||
local headers = { }
|
local headers = { }
|
||||||
for line in split(str, "\n") do
|
for _, line in ipairs(str:split("\n")) do
|
||||||
local k, v = strmatch(line, "^([^:]+):%s*(.*)")
|
local k, v = strmatch(line, "^([^:]+):%s*(.*)")
|
||||||
if k then
|
if k then
|
||||||
headers[k] = v
|
headers[k] = v
|
||||||
@ -264,7 +210,7 @@ local function load_catalog(filename)
|
|||||||
end
|
end
|
||||||
|
|
||||||
function M.load_catalogs(path)
|
function M.load_catalogs(path)
|
||||||
detect_languages()
|
local langs = intllib.get_detected_languages()
|
||||||
|
|
||||||
local cats = { }
|
local cats = { }
|
||||||
for _, lang in ipairs(langs) do
|
for _, lang in ipairs(langs) do
|
||||||
|
56
init.lua
56
init.lua
@ -71,6 +71,62 @@ function intllib.Getter(modname)
|
|||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
local strfind, strsub = string.find, string.sub
|
||||||
|
local langs
|
||||||
|
|
||||||
|
local function split(str, sep)
|
||||||
|
local pos, endp = 1, #str+1
|
||||||
|
return function()
|
||||||
|
if (not pos) or pos > endp then return end
|
||||||
|
local s, e = strfind(str, sep, pos, true)
|
||||||
|
local part = strsub(str, pos, s and s-1)
|
||||||
|
pos = e and e + 1
|
||||||
|
return part
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function intllib.get_detected_languages()
|
||||||
|
if langs then return langs end
|
||||||
|
|
||||||
|
langs = { }
|
||||||
|
|
||||||
|
local function addlang(l)
|
||||||
|
local sep
|
||||||
|
langs[#langs+1] = l
|
||||||
|
sep = strfind(l, ".", 1, true)
|
||||||
|
if sep then
|
||||||
|
l = strsub(l, 1, sep-1)
|
||||||
|
langs[#langs+1] = l
|
||||||
|
end
|
||||||
|
sep = strfind(l, "_", 1, true)
|
||||||
|
if sep then
|
||||||
|
langs[#langs+1] = strsub(l, 1, sep-1)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
local v
|
||||||
|
|
||||||
|
v = minetest.setting_get("language")
|
||||||
|
if v and v~="" then
|
||||||
|
addlang(v)
|
||||||
|
end
|
||||||
|
|
||||||
|
v = os.getenv("LANGUAGE")
|
||||||
|
if v then
|
||||||
|
for item in split(v, ":") do
|
||||||
|
addlang(item)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
v = os.getenv("LANG")
|
||||||
|
if v then
|
||||||
|
addlang(v)
|
||||||
|
end
|
||||||
|
|
||||||
|
return langs
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
local gettext = dofile(minetest.get_modpath("intllib").."/gettext.lua")
|
local gettext = dofile(minetest.get_modpath("intllib").."/gettext.lua")
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user