From c7d88fa1bb4d837dd0875e85bd0f8c634b1ea6d9 Mon Sep 17 00:00:00 2001 From: fat115 Date: Wed, 2 Aug 2017 23:44:06 +0200 Subject: [PATCH] add i18n with po/pot file method from intllib, add french translation --- dbimport.lua | 13 +- depends.txt | 1 + gui.lua | 21 ++-- importers/minetest.lua | 5 +- importers/v1.lua | 5 +- importers/v2.lua | 3 +- init.lua | 96 ++++++++------- intllib.lua | 45 +++++++ locale/fr.po | 271 +++++++++++++++++++++++++++++++++++++++++ locale/template.pot | 270 ++++++++++++++++++++++++++++++++++++++++ 10 files changed, 664 insertions(+), 66 deletions(-) create mode 100644 depends.txt create mode 100644 intllib.lua create mode 100644 locale/fr.po create mode 100644 locale/template.pot diff --git a/dbimport.lua b/dbimport.lua index 0d342bf..3ad564e 100644 --- a/dbimport.lua +++ b/dbimport.lua @@ -1,3 +1,4 @@ +local S = xban.intllib xban.importers = { } @@ -6,7 +7,7 @@ dofile(xban.MP.."/importers/v1.lua") dofile(xban.MP.."/importers/v2.lua") minetest.register_chatcommand("xban_dbi", { - description = "Import old databases", + description = S("Import old databases"), params = "", privs = { server=true }, func = function(name, params) @@ -16,23 +17,23 @@ minetest.register_chatcommand("xban_dbi", { table.insert(importers, importer) end minetest.chat_send_player(name, - ("[xban] Known importers: %s"):format( + (S("[xban] Known importers: %s")):format( table.concat(importers, ", "))) return elseif not xban.importers[params] then minetest.chat_send_player(name, - ("[xban] Unknown importer `%s'"):format(params)) - minetest.chat_send_player(name, "[xban] Try `--list'") + (S("[xban] Unknown importer `%s'")):format(params)) + minetest.chat_send_player(name, S("[xban] Try `--list'")) return end local f = xban.importers[params] local ok, err = f() if ok then minetest.chat_send_player(name, - "[xban] Import successfull") + S("[xban] Import successfull")) else minetest.chat_send_player(name, - ("[xban] Import failed: %s"):format(err)) + (S("[xban] Import failed: %s")):format(err)) end end, }) diff --git a/depends.txt b/depends.txt new file mode 100644 index 0000000..d9b8b81 --- /dev/null +++ b/depends.txt @@ -0,0 +1 @@ +intllib? \ No newline at end of file diff --git a/gui.lua b/gui.lua index d3306e2..a7e1bae 100644 --- a/gui.lua +++ b/gui.lua @@ -1,3 +1,4 @@ +local S = xban.intllib local FORMNAME = "xban2:main" local MAXLISTSIZE = 100 @@ -37,14 +38,14 @@ end local function get_record_simple(name) local e = xban.find_entry(name) if not e then - return nil, ("No entry for `%s'"):format(name) + return nil, (S("No entry for `%s'")):format(name) elseif (not e.record) or (#e.record == 0) then - return nil, ("`%s' has no ban records"):format(name) + return nil, (S("`%s' has no ban records")):format(name) end local record = { } for _, rec in ipairs(e.record) do - local msg = (os.date("%Y-%m-%d %H:%M:%S", rec.time).." | " - ..(rec.reason or "No reason given.")) + local msg = (os.date(S("%Y-%m-%d %H:%M:%S"), rec.time).." | " + ..(rec.reason or S("No reason given."))) table.insert(record, msg) end return record, e.record @@ -61,7 +62,7 @@ local function make_fs(name) "size[16,12]", "label[0,-.1;Filter]", "field[1.5,0;12.8,1;filter;;"..ESC(filter).."]", - "button[14,-.3;2,1;search;Search]", + "button[14,-.3;2,1;search;"..S("Search").."]", } local fsn = #fs fsn=fsn+1 fs[fsn] = format("textlist[0,.8;4,9.3;player;%s;%d;0]", @@ -79,8 +80,8 @@ local function make_fs(name) local rec = e[ei] if rec then fsn=fsn+1 fs[fsn] = format("label[0,10.3;%s]", - ESC("Source: "..(rec.source or "") - .."\nTime: "..os.date("%c", rec.time) + ESC(S("Source: ")..(rec.source or "") + .."\n"..S("Time: ")..os.date("%c", rec.time) .."\n"..(rec.expires and os.date("%c", rec.expires) or "")), pli) @@ -90,7 +91,7 @@ local function make_fs(name) fsn=fsn+1 fs[fsn] = "label[0,10.3;"..ESC(e).."]" end else - local e = "No entry matches the query." + local e = S("No entry matches the query.") fsn=fsn+1 fs[fsn] = "textlist[4.2,.8;11.7,9.3;err;"..ESC(e)..";0]" fsn=fsn+1 fs[fsn] = "label[0,10.3;"..ESC(e).."]" end @@ -102,7 +103,7 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) local name = player:get_player_name() if not minetest.check_player_privs(name, { ban=true }) then minetest.log("warning", - "[xban2] Received fields from unauthorized user: "..name) + S("[xban2] Received fields from unauthorized user: ")..name) return end local state = get_state(name) @@ -131,7 +132,7 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) end) minetest.register_chatcommand("xban_gui", { - description = "Show XBan GUI", + description = S("Show XBan GUI"), params = "", privs = { ban=true, }, func = function(name, params) diff --git a/importers/minetest.lua b/importers/minetest.lua index e19c3c6..477862c 100644 --- a/importers/minetest.lua +++ b/importers/minetest.lua @@ -1,8 +1,9 @@ +local S = xban.intllib function xban.importers.minetest() local f, e = io.open(minetest.get_worldpath().."/ipban.txt") if not f then - return false, "Unable to open `ipban.txt': "..e + return false, S("Unable to open `ipban.txt': ")..e end for line in f:lines() do local ip, name = line:match("([^|]+)%|(.+)") @@ -10,7 +11,7 @@ function xban.importers.minetest() local entry entry = xban.find_entry(ip, true) entry.banned = true - entry.reason = "Banned in `ipban.txt'" + entry.reason = S("Banned in `ipban.txt'") entry.names[name] = true entry.names[ip] = true entry.time = os.time() diff --git a/importers/v1.lua b/importers/v1.lua index a3722c7..2aec0a0 100644 --- a/importers/v1.lua +++ b/importers/v1.lua @@ -1,8 +1,9 @@ +local S = xban.intllib function xban.importers.v1() local f, e = io.open(minetest.get_worldpath().."/players.iplist") if not f then - return false, "Unable to open `players.iplist': "..e + return false, S("Unable to open `players.iplist': ")..e end for line in f:lines() do local list = line:split("|") @@ -15,7 +16,7 @@ function xban.importers.v1() entry.names[name] = true end if banned then - entry.reason = "Banned in `players.iplist'" + entry.reason = S("Banned in `players.iplist'") entry.time = os.time() entry.expires = nil entry.source = "xban:importer_v1" diff --git a/importers/v2.lua b/importers/v2.lua index 739063f..12e7512 100644 --- a/importers/v2.lua +++ b/importers/v2.lua @@ -1,9 +1,10 @@ +local S = xban.intllib function xban.importers.v2() return pcall(function() local f, e = io.open(minetest.get_worldpath().."/players.iplist.v2") if not f then - error("Unable to open `players.iplist.v2': "..e) + error(S("Unable to open `players.iplist.v2': ")..e) end local text = f:read("*a") f:close() diff --git a/init.lua b/init.lua index dad13af..abf12d2 100644 --- a/init.lua +++ b/init.lua @@ -1,6 +1,12 @@ xban = { MP = minetest.get_modpath(minetest.get_current_modname()) } +-- Load support for intllib. +local MP = minetest.get_modpath(minetest.get_current_modname()) +local S, NS = dofile(MP.."/intllib.lua") + +xban.intllib = S + dofile(xban.MP.."/serialize.lua") local db = { } @@ -64,18 +70,18 @@ end function xban.get_info(player) --> ip_name_list, banned, last_record local e = xban.find_entry(player) if not e then - return nil, "No such entry" + return nil, S("No such entry") end return e.names, e.banned, e.record[#e.record] end function xban.ban_player(player, source, expires, reason) --> bool, err if xban.get_whitelist(player) then - return nil, "Player is whitelisted; remove from whitelist first" + return nil, S("Player is whitelisted; remove from whitelist first") end local e = xban.find_entry(player, true) if e.banned then - return nil, "Already banned" + return nil, S("Already banned") end local rec = { source = source, @@ -99,39 +105,39 @@ function xban.ban_player(player, source, expires, reason) --> bool, err e.banned = true local msg local date = (expires and os.date("%c", expires) - or "the end of time") + or S("the end of time")) if expires then table.insert(tempbans, e) - msg = ("Banned: Expires: %s, Reason: %s"):format(date, reason) + msg = (S("Banned: Expires: %s, Reason: %s")):format(date, reason) else - msg = ("Banned: Reason: %s"):format(reason) + msg = (S("Banned: Reason: %s")):format(reason) end for nm in pairs(e.names) do minetest.kick_player(nm, msg) end - ACTION("%s bans %s until %s for reason: %s", source, player, + ACTION(S("%s bans %s until %s for reason: %s"), source, player, date, reason) - ACTION("Banned Names/IPs: %s", table.concat(e.names, ", ")) + ACTION(S("Banned Names/IPs: %s"), table.concat(e.names, ", ")) return true end function xban.unban_player(player, source) --> bool, err local e = xban.find_entry(player) if not e then - return nil, "No such entry" + return nil, S("No such entry") end local rec = { source = source, time = os.time(), - reason = "Unbanned", + reason = S("Unbanned"), } table.insert(e.record, rec) e.banned = false e.reason = nil e.expires = nil e.time = nil - ACTION("%s unbans %s", source, player) - ACTION("Unbanned Names/IPs: %s", table.concat(e.names, ", ")) + ACTION(S("%s unbans %s"), source, player) + ACTION(S("Unbanned Names/IPs: %s"), table.concat(e.names, ", ")) return true end @@ -160,15 +166,15 @@ end function xban.get_record(player) local e = xban.find_entry(player) if not e then - return nil, ("No entry for `%s'"):format(player) + return nil, (S("No entry for `%s'")):format(player) elseif (not e.record) or (#e.record == 0) then - return nil, ("`%s' has no ban records"):format(player) + return nil, (S("`%s' has no ban records")):format(player) end local record = { } for _, rec in ipairs(e.record) do - local msg = rec.reason or "No reason given." + local msg = rec.reason or S("No reason given.") if rec.expires then - msg = msg..(", Expires: %s"):format(os.date("%c", e.expires)) + msg = msg..(S(", Expires: %s")):format(os.date("%c", e.expires)) end if rec.source then msg = msg..", Source: "..rec.source @@ -177,7 +183,7 @@ function xban.get_record(player) end local last_pos if e.last_pos then - last_pos = ("User was last seen at %s"):format( + last_pos = (S("User was last seen at %s")):format( minetest.pos_to_string(e.last_pos)) end return record, last_pos @@ -190,8 +196,8 @@ minetest.register_on_prejoinplayer(function(name, ip) if not e then return end if e.banned then local date = (e.expires and os.date("%c", e.expires) - or "the end of time") - return ("Banned: Expires: %s, Reason: %s"):format( + or S("the end of time")) + return (S("Banned: Expires: %s, Reason: %s")):format( date, e.reason) end end) @@ -215,63 +221,63 @@ minetest.register_on_joinplayer(function(player) end) minetest.register_chatcommand("xban", { - description = "XBan a player", + description = S("XBan a player"), params = " ", privs = { ban=true }, func = function(name, params) local plname, reason = params:match("(%S+)%s+(.+)") if not (plname and reason) then - return false, "Usage: /xban " + return false, S("Usage: /xban ") end local ok, e = xban.ban_player(plname, name, nil, reason) - return ok, ok and ("Banned %s."):format(plname) or e + return ok, ok and (S("Banned %s.")):format(plname) or e end, }) minetest.register_chatcommand("xtempban", { - description = "XBan a player temporarily", + description = S("XBan a player temporarily"), params = "