From 4179917eb49a1a07a0469c51eea0f5e62fb009c9 Mon Sep 17 00:00:00 2001 From: Louis Royer <55180044+louisroyer@users.noreply.github.com> Date: Sun, 8 Mar 2020 22:15:00 +0100 Subject: [PATCH] Add translation support --- .luacheckrc | 1 - chatcommands.lua | 242 +++++++++++++++++++++++--------------------- hud.lua | 6 +- interact.lua | 3 +- internal.lua | 15 +-- legacy.lua | 23 +++-- locale/template.txt | 137 +++++++++++++++++++++++++ pos.lua | 66 ++++++------ 8 files changed, 324 insertions(+), 169 deletions(-) create mode 100644 locale/template.txt diff --git a/.luacheckrc b/.luacheckrc index c0ea991..fc9c148 100644 --- a/.luacheckrc +++ b/.luacheckrc @@ -9,7 +9,6 @@ read_globals = { "VoxelManip", "VoxelArea", "PseudoRandom", "ItemStack", "AreaStore", - "intllib", "default", table = { fields = { "copy", "getn" } } } diff --git a/chatcommands.lua b/chatcommands.lua index faffb03..fd63d81 100644 --- a/chatcommands.lua +++ b/chatcommands.lua @@ -1,15 +1,16 @@ +local S = minetest.get_translator("areas") minetest.register_chatcommand("protect", { - params = "", - description = "Protect your own area", + params = S(""), + description = S("Protect your own area"), privs = {[areas.config.self_protection_privilege]=true}, func = function(name, param) if param == "" then - return false, "Invalid usage, see /help protect." + return false, S("Invalid usage, see /help @1.", "protect") end local pos1, pos2 = areas:getPos(name) if not (pos1 and pos2) then - return false, "You need to select an area first." + return false, S("You need to select an area first.") end minetest.log("action", "/protect invoked, owner="..name.. @@ -19,38 +20,37 @@ minetest.register_chatcommand("protect", { local canAdd, errMsg = areas:canPlayerAddArea(pos1, pos2, name) if not canAdd then - return false, "You can't protect that area: "..errMsg + return false, S("You can't protect that area: @1", errMsg) end local id = areas:add(name, param, pos1, pos2, nil) areas:save() - return true, "Area protected. ID: "..id + return true, S("Area protected. ID: @1", id) end }) minetest.register_chatcommand("set_owner", { - params = " ", - description = "Protect an area beetween two positions and give" + params = S("").." "..S(""), + description = S("Protect an area beetween two positions and give" .." a player access to it without setting the parent of the" - .." area to any existing area", + .." area to any existing area"), privs = areas.adminPrivs, func = function(name, param) local ownerName, areaName = param:match('^(%S+)%s(.+)$') if not ownerName then - return false, "Incorrect usage, see /help set_owner." + return false, S("Invalid usage, see /help @1.", "set_owner") end local pos1, pos2 = areas:getPos(name) if not (pos1 and pos2) then - return false, "You need to select an area first." + return false, S("You need to select an area first.") end if not areas:player_exists(ownerName) then - return false, "The player \"" - ..ownerName.."\" does not exist." + return false, S("The player \"@1\" does not exist.", ownerName) end minetest.log("action", name.." runs /set_owner. Owner = "..ownerName.. @@ -62,34 +62,34 @@ minetest.register_chatcommand("set_owner", { areas:save() minetest.chat_send_player(ownerName, - "You have been granted control over area #".. - id..". Type /list_areas to show your areas.") - return true, "Area protected. ID: "..id + S("You have been granted control over area #@1. ".. + "Type /list_areas to show your areas.", id)) + return true, S("Area protected. ID: @1", id) end }) minetest.register_chatcommand("add_owner", { - params = " ", - description = "Give a player access to a sub-area beetween two" + params = S("").." "..S("").." "..S(""), + description = S("Give a player access to a sub-area beetween two" .." positions that have already been protected," - .." Use set_owner if you don't want the parent to be set.", + .." Use set_owner if you don't want the parent to be set."), func = function(name, param) local pid, ownerName, areaName = param:match('^(%d+) ([^ ]+) (.+)$') if not pid then - minetest.chat_send_player(name, "Incorrect usage, see /help add_owner") + minetest.chat_send_player(name, S("Invalid usage, see /help @1.", "add_owner")) return end local pos1, pos2 = areas:getPos(name) if not (pos1 and pos2) then - return false, "You need to select an area first." + return false, S("You need to select an area first.") end if not areas:player_exists(ownerName) then - return false, "The player \""..ownerName.."\" does not exist." + return false, S("The player \"@1\" does not exist.", ownerName) end minetest.log("action", name.." runs /add_owner. Owner = "..ownerName.. @@ -101,52 +101,52 @@ minetest.register_chatcommand("add_owner", { pid = tonumber(pid) if (not areas:isAreaOwner(pid, name)) or (not areas:isSubarea(pos1, pos2, pid)) then - return false, "You can't protect that area." + return false, S("You can't protect that area.") end local id = areas:add(ownerName, areaName, pos1, pos2, pid) areas:save() minetest.chat_send_player(ownerName, - "You have been granted control over area #".. - id..". Type /list_areas to show your areas.") - return true, "Area protected. ID: "..id + S("You have been granted control over area #@1. ".. + "Type /list_areas to show your areas.", id)) + return true, S("Area protected. ID: @1", id) end }) minetest.register_chatcommand("rename_area", { - params = " ", - description = "Rename a area that you own", + params = S("").." "..S(""), + description = S("Rename a area that you own"), func = function(name, param) local id, newName = param:match("^(%d+)%s(.+)$") if not id then - return false, "Invalid usage, see /help rename_area." + return false, S("Invalid usage, see /help @1.", "rename_area") end id = tonumber(id) if not id then - return false, "That area doesn't exist." + return false, S("That area doesn't exist.") end if not areas:isAreaOwner(id, name) then - return true, "You don't own that area." + return true, S("You don't own that area.") end areas.areas[id].name = newName areas:save() - return true, "Area renamed." + return true, S("Area renamed.") end }) minetest.register_chatcommand("find_areas", { - params = "", - description = "Find areas using a Lua regular expression", + params = S(""), + description = S("Find areas using a Lua regular expression"), privs = areas.adminPrivs, func = function(name, param) if param == "" then - return false, "A regular expression is required." + return false, S("A regular expression is required.") end -- Check expression for validity @@ -154,7 +154,7 @@ minetest.register_chatcommand("find_areas", { ("Test [1]: Player (0,0,0) (0,0,0)"):find(param) end if not pcall(testRegExp) then - return false, "Invalid regular expression." + return false, S("Invalid regular expression.") end local matches = {} @@ -167,14 +167,14 @@ minetest.register_chatcommand("find_areas", { if #matches > 0 then return true, table.concat(matches, "\n") else - return true, "No matches found." + return true, S("No matches found.") end end }) minetest.register_chatcommand("list_areas", { - description = "List your areas, or all areas if you are an admin.", + description = S("List your areas, or all areas if you are an admin."), func = function(name, param) local admin = minetest.check_player_privs(name, areas.adminPrivs) local areaStrings = {} @@ -184,7 +184,7 @@ minetest.register_chatcommand("list_areas", { end end if #areaStrings == 0 then - return true, "No visible areas." + return true, S("No visible areas.") end return true, table.concat(areaStrings, "\n") end @@ -192,154 +192,154 @@ minetest.register_chatcommand("list_areas", { minetest.register_chatcommand("recursive_remove_areas", { - params = "", - description = "Recursively remove areas using an id", + params = S(""), + description = S("Recursively remove areas using an id"), func = function(name, param) local id = tonumber(param) if not id then - return false, "Invalid usage, see" - .." /help recursive_remove_areas" + return false, S("Invalid usage, see" + .." /help @1.", "recursive_remove_areas") end if not areas:isAreaOwner(id, name) then - return false, "Area "..id.." does not exist or is" - .." not owned by you." + return false, S("Area @1 does not exist or is" + .." not owned by you.", id) end areas:remove(id, true) areas:save() - return true, "Removed area "..id.." and it's sub areas." + return true, S("Removed area @1 and it's sub areas.", id) end }) minetest.register_chatcommand("remove_area", { - params = "", - description = "Remove an area using an id", + params = S(""), + description = S("Remove an area using an id"), func = function(name, param) local id = tonumber(param) if not id then - return false, "Invalid usage, see /help remove_area" + return false, S("Invalid usage, see /help @1.", "remove_area") end if not areas:isAreaOwner(id, name) then - return false, "Area "..id.." does not exist or" - .." is not owned by you." + return false, S("Area @1 does not exist or" + .." is not owned by you.", id) end areas:remove(id) areas:save() - return true, "Removed area "..id + return true, S("Removed area @1", id) end }) minetest.register_chatcommand("change_owner", { - params = " ", - description = "Change the owner of an area using it's ID", + params = S("").." "..S(""), + description = S("Change the owner of an area using it's ID"), func = function(name, param) local id, newOwner = param:match("^(%d+)%s(%S+)$") if not id then - return false, "Invalid usage, see" - .." /help change_owner." + return false, S("Invalid usage, see" + .." /help @1.", "change_owner") end if not areas:player_exists(newOwner) then - return false, "The player \""..newOwner - .."\" does not exist." + return false, S("The player \"@1\" does not exist.", newOwner) end id = tonumber(id) if not areas:isAreaOwner(id, name) then - return false, "Area "..id.." does not exist" - .." or is not owned by you." + return false, S("Area @1 does not exist" + .." or is not owned by you.", id) end areas.areas[id].owner = newOwner areas:save() minetest.chat_send_player(newOwner, - ("%s has given you control over the area %q (ID %d).") - :format(name, areas.areas[id].name, id)) - return true, "Owner changed." + S("@1 has given you control over the area \"@2\" (ID @3).", + name, areas.areas[id].name, id)) + return true, S("Owner changed.") end }) minetest.register_chatcommand("area_open", { - params = "", - description = "Toggle an area open (anyone can interact) or closed", + params = S(""), + description = S("Toggle an area open (anyone can interact) or closed"), func = function(name, param) local id = tonumber(param) if not id then - return false, "Invalid usage, see /help area_open." + return false, S("Invalid usage, see /help @1.", "area_open") end if not areas:isAreaOwner(id, name) then - return false, "Area "..id.." does not exist" - .." or is not owned by you." + return false, S("Area @1 does not exist" + .." or is not owned by you.", id) end local open = not areas.areas[id].open -- Save false as nil to avoid inflating the DB. areas.areas[id].open = open or nil areas:save() - return true, ("Area %s."):format(open and "opened" or "closed") + return true, open and S("Area opened.") or S("Area closed.") end }) if areas.factions_available then minetest.register_chatcommand("area_faction_open", { - params = "", - description = "Toggle an area open/closed for members in your faction.", + params = S(""), + description = S("Toggle an area open/closed for members in your faction."), func = function(name, param) local id = tonumber(param) if not id then - return false, "Invalid usage, see /help area_faction_open." + return false, S("Invalid usage, see /help @1.", "area_faction_open") end if not areas:isAreaOwner(id, name) then - return false, "Area "..id.." does not exist" - .." or is not owned by you." + return false, S("Area @1 does not exist" + .." or is not owned by you.", id) end local open = not areas.areas[id].faction_open -- Save false as nil to avoid inflating the DB. areas.areas[id].faction_open = open or nil areas:save() - return true, ("Area %s for faction members."):format(open and "opened" or "closed") + return true, open and S("Area opened for faction members.") + or S("Area closed for faction members.") end }) end minetest.register_chatcommand("move_area", { - params = "", - description = "Move (or resize) an area to the current positions.", + params = S(""), + description = S("Move (or resize) an area to the current positions."), privs = areas.adminPrivs, func = function(name, param) local id = tonumber(param) if not id then - return false, "Invalid usage, see /help move_area." + return false, S("Invalid usage, see /help @1.", "move_area") end local area = areas.areas[id] if not area then - return false, "Area does not exist." + return false, S("Area does not exist.") end local pos1, pos2 = areas:getPos(name) if not pos1 then - return false, "You need to select an area first." + return false, S("You need to select an area first.") end areas:move(id, area, pos1, pos2) areas:save() - return true, "Area successfully moved." + return true, S("Area successfully moved.") end, }) minetest.register_chatcommand("area_info", { - description = "Get information about area configuration and usage.", + description = S("Get information about area configuration and usage."), func = function(name, param) local lines = {} local privs = minetest.get_player_privs(name) @@ -362,26 +362,33 @@ minetest.register_chatcommand("area_info", { size_limit_high or size_limit -- Privilege information - local self_prot_line = ("Self protection is %sabled"):format( - self_prot and "en" or "dis") - if self_prot and prot_priv then - self_prot_line = self_prot_line.. - (" %s have the neccessary privilege (%q).") - :format( - has_prot_priv and "and you" or - "but you don't", - prot_priv) - else - self_prot_line = self_prot_line.."." - end + local self_prot_line = (self_prot and prot_priv) and + (has_prot_priv and + (self_prot and + S("Self protection is enabled and you have the ".. + "necessary privilege (\"@1\").", prot_priv) or + S("Self protection is disabled and you have the ".. + "necessary privilege (\"@1\").", prot_priv) + ) or + (self_prot and + S("Self protection is enabled but you don't have the ".. + "necessary privilege (\"@1\").", prot_priv) or + S("Self protection is disabled but you don't have the ".. + "necessary privilege (\"@1\").", prot_priv) + ) + ) or + (self_prot and + S("Self protection is enabled.") or + S("Self protection is disabled.") + ) table.insert(lines, self_prot_line) if privs.areas then - table.insert(lines, "You are an area".. - " administrator (\"areas\" privilege).") + table.insert(lines, S("You are an area".. + " administrator (\"areas\" privilege).")) elseif has_high_limit then table.insert(lines, - "You have extended area protection".. - " limits (\"areas_high_limit\" privilege).") + S("You have extended area protection".. + " limits (\"areas_high_limit\" privilege).")) end -- Area count @@ -391,26 +398,35 @@ minetest.register_chatcommand("area_info", { area_num = area_num + 1 end end - local count_line = ("You have %d area%s"):format( - area_num, area_num == 1 and "" or "s") - if privs.areas then - count_line = count_line.. - " and have no area protection limits." - elseif can_prot then - count_line = count_line..(", out of a maximum of %d.") - :format(max_count) - end + local count_line = privs.areas and + ((area_num <= 1) and + S("You have @1 area and have no area ".. + "protection limits.", area_num) or + S("You have @1 areas and have no area ".. + "protection limits.", area_num) + ) or + (can_prot and ( + (area_num <= 1) and + S("You have @1 area, out of a ".. + "maximum of @2.", area_num, max_count) or + S("You have @1 areas, out of a ".. + "maximum of @2.", area_num, max_count) + ) or + (area_num <= 1) and + S("You have @1 area.", area_num) or + S("You have @1 areas.", area_num) + ) table.insert(lines, count_line) -- Area size limits local function size_info(str, size) - table.insert(lines, ("%s spanning up to %dx%dx%d.") - :format(str, size.x, size.y, size.z)) + table.insert(lines, S("@1 spanning up to @2x@3x@4.", + str, size.x, size.y, size.z)) end local function priv_limit_info(lpriv, lmax_count, lmax_size) - size_info(("Players with the %q privilege".. - " can protect up to %d areas"):format( - lpriv, lmax_count), lmax_size) + size_info(S("Players with the \"@1\" privilege".. + " can protect up to @2 areas", lpriv, lmax_count), + lmax_size) end if self_prot then if privs.areas then @@ -419,7 +435,7 @@ minetest.register_chatcommand("area_info", { priv_limit_info("areas_high_limit", limit_high, size_limit_high) elseif has_prot_priv then - size_info("You can protect areas", max_size) + size_info(S("You can protect areas"), max_size) end end diff --git a/hud.lua b/hud.lua index ffe764e..9d13b80 100644 --- a/hud.lua +++ b/hud.lua @@ -1,5 +1,5 @@ -- This is inspired by the landrush mod by Bremaweb - +local S = minetest.get_translator("areas") areas.hud = {} areas.hud.refresh = 0 @@ -26,7 +26,7 @@ minetest.register_globalstep(function(dtime) area.faction_open = faction_info table.insert(areaStrings, ("%s [%u] (%s%s%s)") :format(area.name, id, area.owner, - area.open and ":open" or "", + area.open and S(":open") or "", faction_info and ":"..faction_info or "")) end @@ -38,7 +38,7 @@ minetest.register_globalstep(function(dtime) table.insert(areaStrings, str) end - local areaString = "Areas:" + local areaString = S("Areas:") if #areaStrings > 0 then areaString = areaString.."\n".. table.concat(areaStrings, "\n") diff --git a/interact.lua b/interact.lua index 2e54800..4e575fb 100644 --- a/interact.lua +++ b/interact.lua @@ -1,3 +1,4 @@ +local S = minetest.get_translator("areas") local old_is_protected = minetest.is_protected function minetest.is_protected(pos, name) @@ -11,7 +12,7 @@ minetest.register_on_protection_violation(function(pos, name) if not areas:canInteract(pos, name) then local owners = areas:getNodeOwners(pos) minetest.chat_send_player(name, - ("%s is protected by %s."):format( + S("@1 is protected by @2.", minetest.pos_to_string(pos), table.concat(owners, ", "))) end diff --git a/internal.lua b/internal.lua index 27f85ed..a7979e5 100644 --- a/internal.lua +++ b/internal.lua @@ -1,3 +1,4 @@ +local S = minetest.get_translator("areas") function areas:player_exists(name) return minetest.get_auth_handler().get_auth(name) ~= nil @@ -212,8 +213,8 @@ function areas:canPlayerAddArea(pos1, pos2, name) -- and if the area is too big. if not self.config.self_protection or not privs[areas.config.self_protection_privilege] then - return false, "Self protection is disabled or you do not have" - .." the necessary privilege." + return false, S("Self protection is disabled or you do not have" + .." the necessary privilege.") end local max_size = privs.areas_high_limit and @@ -223,7 +224,7 @@ function areas:canPlayerAddArea(pos1, pos2, name) (pos2.x - pos1.x) > max_size.x or (pos2.y - pos1.y) > max_size.y or (pos2.z - pos1.z) > max_size.z then - return false, "Area is too big." + return false, S("Area is too big.") end -- Check number of areas the user has and make sure it not above the max @@ -237,16 +238,16 @@ function areas:canPlayerAddArea(pos1, pos2, name) self.config.self_protection_max_areas_high or self.config.self_protection_max_areas if count >= max_areas then - return false, "You have reached the maximum amount of" - .." areas that you are allowed to protect." + return false, S("You have reached the maximum amount of" + .." areas that you are allowed to protect.") end -- Check intersecting areas local can, id = self:canInteractInArea(pos1, pos2, name) if not can then local area = self.areas[id] - return false, ("The area intersects with %s [%u] (%s).") - :format(area.name, id, area.owner) + return false, S("The area intersects with @1 [@2] (@3).", + area.name, id, area.owner) end return true diff --git a/legacy.lua b/legacy.lua index 876b88d..c68afb2 100644 --- a/legacy.lua +++ b/legacy.lua @@ -1,25 +1,26 @@ -- This file contains functions to convert from -- the old areas format and other compatability code. +local S = minetest.get_translator("areas") minetest.register_chatcommand("legacy_load_areas", { - params = "", - description = "Loads, converts, and saves the areas from" - .." a legacy save file.", + params = S(""), + description = S("Loads, converts, and saves the areas from" + .." a legacy save file."), privs = {areas=true, server=true}, func = function(name, param) - minetest.chat_send_player(name, "Converting areas...") + minetest.chat_send_player(name, S("Converting areas…")) local version = tonumber(param) if version == 0 then local err = areas:node_ownership_load() if err then - minetest.chat_send_player(name, "Error loading legacy file: "..err) + minetest.chat_send_player(name, S("Error loading legacy file: @1", err)) return end else - minetest.chat_send_player(name, "Invalid version number. (0 allowed)") + minetest.chat_send_player(name, S("Invalid version number. (0 allowed)")) return end - minetest.chat_send_player(name, "Legacy file loaded.") + minetest.chat_send_player(name, S("Legacy file loaded.")) for k, area in pairs(areas.areas) do -- New position format @@ -34,15 +35,15 @@ minetest.register_chatcommand("legacy_load_areas", { areas:sortPos(area.pos1, area.pos2) -- Add name - area.name = "unnamed" + area.name = S("unnamed") -- Remove ID area.id = nil end - minetest.chat_send_player(name, "Table format updated.") + minetest.chat_send_player(name, S("Table format updated.")) areas:save() - minetest.chat_send_player(name, "Converted areas saved. Done.") + minetest.chat_send_player(name, S("Converted areas saved. Done.")) end }) @@ -130,7 +131,7 @@ if areas.config.legacy_table then {x=a.x2, y=a.y2, z=a.z2} a.x1, a.y1, a.z1, a.x2, a.y2, a.z2 = nil, nil, nil, nil, nil, nil - a.name = a.name or "unnamed" + a.name = a.name or S("unnamed") a.id = nil return rawset(areas.areas, key, a) end diff --git a/locale/template.txt b/locale/template.txt new file mode 100644 index 0000000..db223bd --- /dev/null +++ b/locale/template.txt @@ -0,0 +1,137 @@ +# textdomain: areas + + +### chatcommands.lua ### + += += += += += += +@1 has given you control over the area "@2" (ID @3).= +@1 spanning up to @2x@3x@4.= +A regular expression is required.= +Area @1 does not exist or is not owned by you.= +Area closed for faction members.= +Area closed.= +Area does not exist.= +Area opened for faction members.= +Area opened.= +Area protected. ID: @1= +Area renamed.= +Area successfully moved.= +Change the owner of an area using it's ID= +Find areas using a Lua regular expression= +Get information about area configuration and usage.= + +Give a player access to a sub-area beetween two positions that have already been protected, Use set_owner if you don't want the parent to be set.= + +Invalid regular expression.= +List your areas, or all areas if you are an admin.= +Move (or resize) an area to the current positions.= +No matches found.= +No visible areas.= +Owner changed.= +Players with the "@1" privilege can protect up to @2 areas= + +Protect an area beetween two positions and give a player access to it without setting the parent of the area to any existing area= + +Protect your own area= +Recursively remove areas using an id= +Remove an area using an id= +Removed area @1= +Removed area @1 and it's sub areas.= +Rename a area that you own= + +Self protection is disabled and you have the necessary privilege ("@1").= + +Self protection is disabled but you don't have the necessary privilege ("@1").= + +Self protection is disabled.= + +Self protection is enabled and you have the necessary privilege ("@1").= + +Self protection is enabled but you don't have the necessary privilege ("@1").= + +Self protection is enabled.= +That area doesn't exist.= +The player "@1" does not exist.= +Toggle an area open (anyone can interact) or closed= +Toggle an area open/closed for members in your faction.= +You are an area administrator ("areas" privilege).= +You can protect areas= +You can't protect that area.= +You can't protect that area: @1= +You don't own that area.= +You have @1 area and have no area protection limits.= +You have @1 area, out of a maximum of @2.= +You have @1 area.= +You have @1 areas and have no area protection limits.= +You have @1 areas, out of a maximum of @2.= +You have @1 areas.= + +You have been granted control over area #@1. Type /list_areas to show your areas.= + +You have extended area protection limits ("areas_high_limit" privilege).= + +You need to select an area first.= + +### chatcommands.lua ### +### pos.lua ### + += +Invalid usage, see /help @1.= + +### hud.lua ### + +:open= +Areas:= + +### interact.lua ### + +@1 is protected by @2.= + +### internal.lua ### + +Area is too big.= + +Self protection is disabled or you do not have the necessary privilege.= + +The area intersects with @1 [@2] (@3).= + +You have reached the maximum amount of areas that you are allowed to protect.= + + +### legacy.lua ### + += +Converted areas saved. Done.= +Converting areas…= +Error loading legacy file: @1= +Invalid version number. (0 allowed)= +Legacy file loaded.= + +Loads, converts, and saves the areas from a legacy save file.= + +Table format updated.= +unnamed= + +### pos.lua ### + += +Area @1 selected.= +Area position @1 set to @2= +Position @1 set to @2= +Position @1: = +Select a area by id.= +Select position @1 by punching a node.= +Select positions by punching two nodes.= + +Set area protection region position @1 to your location or the one specified= + +Set area protection region, position 1, or position 2 by punching nodes, or display the region= + +The area @1 does not exist.= +Unable to get position.= +Unknown subcommand: @1= diff --git a/pos.lua b/pos.lua index 323d55d..6cb641d 100644 --- a/pos.lua +++ b/pos.lua @@ -1,4 +1,4 @@ - +local S = minetest.get_translator("areas") -- I could depend on WorldEdit for this, but you need to have the 'worldedit' -- permission to use those commands and you don't have -- /area_pos{1,2} [X Y Z|X,Y,Z]. @@ -22,27 +22,27 @@ local function posLimit(pos) end minetest.register_chatcommand("select_area", { - params = "", - description = "Select a area by id.", + params = S(""), + description = S("Select a area by id."), func = function(name, param) local id = tonumber(param) if not id then - return false, "Invalid usage, see /help select_area." + return false, S("Invalid usage, see /help @1.", "select_area") end if not areas.areas[id] then - return false, "The area "..id.." does not exist." + return false, S("The area @1 does not exist.", id) end areas:setPos1(name, areas.areas[id].pos1) areas:setPos2(name, areas.areas[id].pos2) - return true, "Area "..id.." selected." + return true, S("Area @1 selected.", id) end, }) minetest.register_chatcommand("area_pos1", { params = "[X Y Z|X,Y,Z]", - description = "Set area protection region position 1 to your" - .." location or the one specified", + description = S("Set area protection region position @1 to your" + .." location or the one specified", "1"), privs = {}, func = function(name, param) local pos @@ -55,22 +55,22 @@ minetest.register_chatcommand("area_pos1", { if player then pos = player:get_pos() else - return false, "Unable to get position." + return false, S("Unable to get position.") end else - return false, "Invalid usage, see /help area_pos1." + return false, S("Invalid usage, see /help @1.", "area_pos1") end pos = posLimit(vector.round(pos)) areas:setPos1(name, pos) - return true, "Area position 1 set to " - ..minetest.pos_to_string(pos) + return true, S("Area position @1 set to @2", "1", + minetest.pos_to_string(pos)) end, }) minetest.register_chatcommand("area_pos2", { params = "[X Y Z|X,Y,Z]", - description = "Set area protection region position 2 to your" - .." location or the one specified", + description = S("Set area protection region position @1 to your" + .." location or the one specified", "2"), func = function(name, param) local pos local found, _, x, y, z = param:find( @@ -82,48 +82,48 @@ minetest.register_chatcommand("area_pos2", { if player then pos = player:get_pos() else - return false, "Unable to get position." + return false, S("Unable to get position.") end else - return false, "Invalid usage, see /help area_pos2." + return false, S("Invalid usage, see /help @1.", "area_pos2") end pos = posLimit(vector.round(pos)) areas:setPos2(name, pos) - return true, "Area position 2 set to " - ..minetest.pos_to_string(pos) + return true, S("Area position @1 set to @2", "2", + minetest.pos_to_string(pos)) end, }) minetest.register_chatcommand("area_pos", { params = "set/set1/set2/get", - description = "Set area protection region, position 1, or position 2" - .." by punching nodes, or display the region", + description = S("Set area protection region, position 1, or position 2" + .." by punching nodes, or display the region"), func = function(name, param) if param == "set" then -- Set both area positions areas.set_pos[name] = "pos1" - return true, "Select positions by punching two nodes." + return true, S("Select positions by punching two nodes.") elseif param == "set1" then -- Set area position 1 areas.set_pos[name] = "pos1only" - return true, "Select position 1 by punching a node." + return true, S("Select position @1 by punching a node.", "1") elseif param == "set2" then -- Set area position 2 areas.set_pos[name] = "pos2" - return true, "Select position 2 by punching a node." + return true, S("Select position @1 by punching a node.", "2") elseif param == "get" then -- Display current area positions - local pos1str, pos2str = "Position 1: ", "Position 2: " + local pos1str, pos2str = S("Position @1: ", "1"), S("Position @1: ", "2") if areas.pos1[name] then pos1str = pos1str..minetest.pos_to_string(areas.pos1[name]) else - pos1str = pos1str.."" + pos1str = pos1str..S("") end if areas.pos2[name] then pos2str = pos2str..minetest.pos_to_string(areas.pos2[name]) else - pos2str = pos2str.."" + pos2str = pos2str..S("") end return true, pos1str.."\n"..pos2str else - return false, "Unknown subcommand: "..param + return false, S("Unknown subcommand: @1", param) end end, }) @@ -159,22 +159,22 @@ minetest.register_on_punchnode(function(pos, node, puncher) areas.markPos1(name) areas.set_pos[name] = "pos2" minetest.chat_send_player(name, - "Position 1 set to " - ..minetest.pos_to_string(pos)) + S("Position @1 set to @2", "1", + minetest.pos_to_string(pos))) elseif areas.set_pos[name] == "pos1only" then areas.pos1[name] = pos areas.markPos1(name) areas.set_pos[name] = nil minetest.chat_send_player(name, - "Position 1 set to " - ..minetest.pos_to_string(pos)) + S("Position @1 set to @2", "1", + minetest.pos_to_string(pos))) elseif areas.set_pos[name] == "pos2" then areas.pos2[name] = pos areas.markPos2(name) areas.set_pos[name] = nil minetest.chat_send_player(name, - "Position 2 set to " - ..minetest.pos_to_string(pos)) + S("Position @1 set to @2", "2", + minetest.pos_to_string(pos))) end end end)