mirror of
https://github.com/minetest/minetest.git
synced 2024-11-30 03:23:45 +01:00
Translate builtin (#10693)
This PR is the second attempt to translate builtin. Server-sent translation files can be added to `builtin/locale/`, whereas client-side translations depend on gettext.
This commit is contained in:
parent
ac8ac19169
commit
cafad6ac03
3
.gitignore
vendored
3
.gitignore
vendored
@ -86,8 +86,7 @@ src/test_config.h
|
|||||||
src/cmake_config.h
|
src/cmake_config.h
|
||||||
src/cmake_config_githash.h
|
src/cmake_config_githash.h
|
||||||
src/unittest/test_world/world.mt
|
src/unittest/test_world/world.mt
|
||||||
src/lua/build/
|
/locale/
|
||||||
locale/
|
|
||||||
.directory
|
.directory
|
||||||
*.cbp
|
*.cbp
|
||||||
*.layout
|
*.layout
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
-- Minetest: builtin/client/chatcommands.lua
|
-- Minetest: builtin/client/chatcommands.lua
|
||||||
|
|
||||||
|
|
||||||
core.register_on_sending_chat_message(function(message)
|
core.register_on_sending_chat_message(function(message)
|
||||||
if message:sub(1,2) == ".." then
|
if message:sub(1,2) == ".." then
|
||||||
return false
|
return false
|
||||||
@ -8,7 +7,7 @@ core.register_on_sending_chat_message(function(message)
|
|||||||
|
|
||||||
local first_char = message:sub(1,1)
|
local first_char = message:sub(1,1)
|
||||||
if first_char == "/" or first_char == "." then
|
if first_char == "/" or first_char == "." then
|
||||||
core.display_chat_message(core.gettext("issued command: ") .. message)
|
core.display_chat_message(core.gettext("Issued command: ") .. message)
|
||||||
end
|
end
|
||||||
|
|
||||||
if first_char ~= "." then
|
if first_char ~= "." then
|
||||||
@ -19,7 +18,7 @@ core.register_on_sending_chat_message(function(message)
|
|||||||
param = param or ""
|
param = param or ""
|
||||||
|
|
||||||
if not cmd then
|
if not cmd then
|
||||||
core.display_chat_message(core.gettext("-!- Empty command"))
|
core.display_chat_message("-!- " .. core.gettext("Empty command."))
|
||||||
return true
|
return true
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -36,7 +35,7 @@ core.register_on_sending_chat_message(function(message)
|
|||||||
core.display_chat_message(result)
|
core.display_chat_message(result)
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
core.display_chat_message(core.gettext("-!- Invalid command: ") .. cmd)
|
core.display_chat_message("-!- " .. core.gettext("Invalid command: ") .. cmd)
|
||||||
end
|
end
|
||||||
|
|
||||||
return true
|
return true
|
||||||
@ -66,7 +65,7 @@ core.register_chatcommand("clear_chat_queue", {
|
|||||||
description = core.gettext("Clear the out chat queue"),
|
description = core.gettext("Clear the out chat queue"),
|
||||||
func = function(param)
|
func = function(param)
|
||||||
core.clear_out_chat_queue()
|
core.clear_out_chat_queue()
|
||||||
return true, core.gettext("The out chat queue is now empty")
|
return true, core.gettext("The out chat queue is now empty.")
|
||||||
end,
|
end,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
-- handled by the engine.
|
-- handled by the engine.
|
||||||
|
|
||||||
core.register_on_death(function()
|
core.register_on_death(function()
|
||||||
core.display_chat_message("You died.")
|
core.display_chat_message(core.gettext("You died."))
|
||||||
local formspec = "size[11,5.5]bgcolor[#320000b4;true]" ..
|
local formspec = "size[11,5.5]bgcolor[#320000b4;true]" ..
|
||||||
"label[4.85,1.35;" .. fgettext("You died") ..
|
"label[4.85,1.35;" .. fgettext("You died") ..
|
||||||
"]button_exit[4,3;3,0.5;btn_respawn;".. fgettext("Respawn") .."]"
|
"]button_exit[4,3;3,0.5;btn_respawn;".. fgettext("Respawn") .."]"
|
||||||
|
@ -1,5 +1,9 @@
|
|||||||
-- Minetest: builtin/common/chatcommands.lua
|
-- Minetest: builtin/common/chatcommands.lua
|
||||||
|
|
||||||
|
-- For server-side translations (if INIT == "game")
|
||||||
|
-- Otherwise, use core.gettext
|
||||||
|
local S = core.get_translator("__builtin")
|
||||||
|
|
||||||
core.registered_chatcommands = {}
|
core.registered_chatcommands = {}
|
||||||
|
|
||||||
function core.register_chatcommand(cmd, def)
|
function core.register_chatcommand(cmd, def)
|
||||||
@ -29,25 +33,12 @@ function core.override_chatcommand(name, redefinition)
|
|||||||
core.registered_chatcommands[name] = chatcommand
|
core.registered_chatcommands[name] = chatcommand
|
||||||
end
|
end
|
||||||
|
|
||||||
local cmd_marker = "/"
|
|
||||||
|
|
||||||
local function gettext(...)
|
|
||||||
return ...
|
|
||||||
end
|
|
||||||
|
|
||||||
local function gettext_replace(text, replace)
|
|
||||||
return text:gsub("$1", replace)
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
if INIT == "client" then
|
|
||||||
cmd_marker = "."
|
|
||||||
gettext = core.gettext
|
|
||||||
gettext_replace = fgettext_ne
|
|
||||||
end
|
|
||||||
|
|
||||||
local function do_help_cmd(name, param)
|
local function do_help_cmd(name, param)
|
||||||
local function format_help_line(cmd, def)
|
local function format_help_line(cmd, def)
|
||||||
|
local cmd_marker = "/"
|
||||||
|
if INIT == "client" then
|
||||||
|
cmd_marker = "."
|
||||||
|
end
|
||||||
local msg = core.colorize("#00ffff", cmd_marker .. cmd)
|
local msg = core.colorize("#00ffff", cmd_marker .. cmd)
|
||||||
if def.params and def.params ~= "" then
|
if def.params and def.params ~= "" then
|
||||||
msg = msg .. " " .. def.params
|
msg = msg .. " " .. def.params
|
||||||
@ -65,9 +56,21 @@ local function do_help_cmd(name, param)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
table.sort(cmds)
|
table.sort(cmds)
|
||||||
return true, gettext("Available commands: ") .. table.concat(cmds, " ") .. "\n"
|
local msg
|
||||||
.. gettext_replace("Use '$1help <cmd>' to get more information,"
|
if INIT == "game" then
|
||||||
.. " or '$1help all' to list everything.", cmd_marker)
|
msg = S("Available commands: @1",
|
||||||
|
table.concat(cmds, " ")) .. "\n"
|
||||||
|
.. S("Use '/help <cmd>' to get more "
|
||||||
|
.. "information, or '/help all' to list "
|
||||||
|
.. "everything.")
|
||||||
|
else
|
||||||
|
msg = core.gettext("Available commands: ")
|
||||||
|
.. table.concat(cmds, " ") .. "\n"
|
||||||
|
.. core.gettext("Use '.help <cmd>' to get more "
|
||||||
|
.. "information, or '.help all' to list "
|
||||||
|
.. "everything.")
|
||||||
|
end
|
||||||
|
return true, msg
|
||||||
elseif param == "all" then
|
elseif param == "all" then
|
||||||
local cmds = {}
|
local cmds = {}
|
||||||
for cmd, def in pairs(core.registered_chatcommands) do
|
for cmd, def in pairs(core.registered_chatcommands) do
|
||||||
@ -76,19 +79,31 @@ local function do_help_cmd(name, param)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
table.sort(cmds)
|
table.sort(cmds)
|
||||||
return true, gettext("Available commands:").."\n"..table.concat(cmds, "\n")
|
local msg
|
||||||
|
if INIT == "game" then
|
||||||
|
msg = S("Available commands:")
|
||||||
|
else
|
||||||
|
msg = core.gettext("Available commands:")
|
||||||
|
end
|
||||||
|
return true, msg.."\n"..table.concat(cmds, "\n")
|
||||||
elseif INIT == "game" and param == "privs" then
|
elseif INIT == "game" and param == "privs" then
|
||||||
local privs = {}
|
local privs = {}
|
||||||
for priv, def in pairs(core.registered_privileges) do
|
for priv, def in pairs(core.registered_privileges) do
|
||||||
privs[#privs + 1] = priv .. ": " .. def.description
|
privs[#privs + 1] = priv .. ": " .. def.description
|
||||||
end
|
end
|
||||||
table.sort(privs)
|
table.sort(privs)
|
||||||
return true, "Available privileges:\n"..table.concat(privs, "\n")
|
return true, S("Available privileges:").."\n"..table.concat(privs, "\n")
|
||||||
else
|
else
|
||||||
local cmd = param
|
local cmd = param
|
||||||
local def = core.registered_chatcommands[cmd]
|
local def = core.registered_chatcommands[cmd]
|
||||||
if not def then
|
if not def then
|
||||||
return false, gettext("Command not available: ")..cmd
|
local msg
|
||||||
|
if INIT == "game" then
|
||||||
|
msg = S("Command not available: @1", cmd)
|
||||||
|
else
|
||||||
|
msg = core.gettext("Command not available: ") .. cmd
|
||||||
|
end
|
||||||
|
return false, msg
|
||||||
else
|
else
|
||||||
return true, format_help_line(cmd, def)
|
return true, format_help_line(cmd, def)
|
||||||
end
|
end
|
||||||
@ -97,16 +112,16 @@ end
|
|||||||
|
|
||||||
if INIT == "client" then
|
if INIT == "client" then
|
||||||
core.register_chatcommand("help", {
|
core.register_chatcommand("help", {
|
||||||
params = gettext("[all | <cmd>]"),
|
params = core.gettext("[all | <cmd>]"),
|
||||||
description = gettext("Get help for commands"),
|
description = core.gettext("Get help for commands"),
|
||||||
func = function(param)
|
func = function(param)
|
||||||
return do_help_cmd(nil, param)
|
return do_help_cmd(nil, param)
|
||||||
end,
|
end,
|
||||||
})
|
})
|
||||||
else
|
else
|
||||||
core.register_chatcommand("help", {
|
core.register_chatcommand("help", {
|
||||||
params = "[all | privs | <cmd>]",
|
params = S("[all | privs | <cmd>]"),
|
||||||
description = "Get help for commands or list privileges",
|
description = S("Get help for commands or list privileges"),
|
||||||
func = do_help_cmd,
|
func = do_help_cmd,
|
||||||
})
|
})
|
||||||
end
|
end
|
||||||
|
@ -20,7 +20,8 @@ local LIST_FORMSPEC_DESCRIPTION = [[
|
|||||||
button_exit[5,7;3,1;quit;%s]
|
button_exit[5,7;3,1;quit;%s]
|
||||||
]]
|
]]
|
||||||
|
|
||||||
local formspec_escape = core.formspec_escape
|
local F = core.formspec_escape
|
||||||
|
local S = core.get_translator("__builtin")
|
||||||
local check_player_privs = core.check_player_privs
|
local check_player_privs = core.check_player_privs
|
||||||
|
|
||||||
|
|
||||||
@ -51,22 +52,23 @@ core.after(0, load_mod_command_tree)
|
|||||||
|
|
||||||
local function build_chatcommands_formspec(name, sel, copy)
|
local function build_chatcommands_formspec(name, sel, copy)
|
||||||
local rows = {}
|
local rows = {}
|
||||||
rows[1] = "#FFF,0,Command,Parameters"
|
rows[1] = "#FFF,0,"..F(S("Command"))..","..F(S("Parameters"))
|
||||||
|
|
||||||
local description = "For more information, click on any entry in the list.\n" ..
|
local description = S("For more information, click on "
|
||||||
"Double-click to copy the entry to the chat history."
|
.. "any entry in the list.").. "\n" ..
|
||||||
|
S("Double-click to copy the entry to the chat history.")
|
||||||
|
|
||||||
for i, data in ipairs(mod_cmds) do
|
for i, data in ipairs(mod_cmds) do
|
||||||
rows[#rows + 1] = COLOR_BLUE .. ",0," .. formspec_escape(data[1]) .. ","
|
rows[#rows + 1] = COLOR_BLUE .. ",0," .. F(data[1]) .. ","
|
||||||
for j, cmds in ipairs(data[2]) do
|
for j, cmds in ipairs(data[2]) do
|
||||||
local has_priv = check_player_privs(name, cmds[2].privs)
|
local has_priv = check_player_privs(name, cmds[2].privs)
|
||||||
rows[#rows + 1] = ("%s,1,%s,%s"):format(
|
rows[#rows + 1] = ("%s,1,%s,%s"):format(
|
||||||
has_priv and COLOR_GREEN or COLOR_GRAY,
|
has_priv and COLOR_GREEN or COLOR_GRAY,
|
||||||
cmds[1], formspec_escape(cmds[2].params))
|
cmds[1], F(cmds[2].params))
|
||||||
if sel == #rows then
|
if sel == #rows then
|
||||||
description = cmds[2].description
|
description = cmds[2].description
|
||||||
if copy then
|
if copy then
|
||||||
core.chat_send_player(name, ("Command: %s %s"):format(
|
core.chat_send_player(name, S("Command: @1 @2",
|
||||||
core.colorize("#0FF", "/" .. cmds[1]), cmds[2].params))
|
core.colorize("#0FF", "/" .. cmds[1]), cmds[2].params))
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@ -74,9 +76,9 @@ local function build_chatcommands_formspec(name, sel, copy)
|
|||||||
end
|
end
|
||||||
|
|
||||||
return LIST_FORMSPEC_DESCRIPTION:format(
|
return LIST_FORMSPEC_DESCRIPTION:format(
|
||||||
"Available commands: (see also: /help <cmd>)",
|
F(S("Available commands: (see also: /help <cmd>)")),
|
||||||
table.concat(rows, ","), sel or 0,
|
table.concat(rows, ","), sel or 0,
|
||||||
description, "Close"
|
F(description), F(S("Close"))
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -91,19 +93,19 @@ local function build_privs_formspec(name)
|
|||||||
table.sort(privs, function(a, b) return a[1] < b[1] end)
|
table.sort(privs, function(a, b) return a[1] < b[1] end)
|
||||||
|
|
||||||
local rows = {}
|
local rows = {}
|
||||||
rows[1] = "#FFF,0,Privilege,Description"
|
rows[1] = "#FFF,0,"..F(S("Privilege"))..","..F(S("Description"))
|
||||||
|
|
||||||
local player_privs = core.get_player_privs(name)
|
local player_privs = core.get_player_privs(name)
|
||||||
for i, data in ipairs(privs) do
|
for i, data in ipairs(privs) do
|
||||||
rows[#rows + 1] = ("%s,0,%s,%s"):format(
|
rows[#rows + 1] = ("%s,0,%s,%s"):format(
|
||||||
player_privs[data[1]] and COLOR_GREEN or COLOR_GRAY,
|
player_privs[data[1]] and COLOR_GREEN or COLOR_GRAY,
|
||||||
data[1], formspec_escape(data[2].description))
|
data[1], F(data[2].description))
|
||||||
end
|
end
|
||||||
|
|
||||||
return LIST_FORMSPEC:format(
|
return LIST_FORMSPEC:format(
|
||||||
"Available privileges:",
|
F(S("Available privileges:")),
|
||||||
table.concat(rows, ","),
|
table.concat(rows, ","),
|
||||||
"Close"
|
F(S("Close"))
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -1,5 +1,7 @@
|
|||||||
-- Minetest: builtin/privileges.lua
|
-- Minetest: builtin/privileges.lua
|
||||||
|
|
||||||
|
local S = core.get_translator("__builtin")
|
||||||
|
|
||||||
--
|
--
|
||||||
-- Privileges
|
-- Privileges
|
||||||
--
|
--
|
||||||
@ -15,7 +17,7 @@ function core.register_privilege(name, param)
|
|||||||
def.give_to_admin = def.give_to_singleplayer
|
def.give_to_admin = def.give_to_singleplayer
|
||||||
end
|
end
|
||||||
if def.description == nil then
|
if def.description == nil then
|
||||||
def.description = "(no description)"
|
def.description = S("(no description)")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
local def
|
local def
|
||||||
@ -28,69 +30,69 @@ function core.register_privilege(name, param)
|
|||||||
core.registered_privileges[name] = def
|
core.registered_privileges[name] = def
|
||||||
end
|
end
|
||||||
|
|
||||||
core.register_privilege("interact", "Can interact with things and modify the world")
|
core.register_privilege("interact", S("Can interact with things and modify the world"))
|
||||||
core.register_privilege("shout", "Can speak in chat")
|
core.register_privilege("shout", S("Can speak in chat"))
|
||||||
core.register_privilege("basic_privs", "Can modify 'shout' and 'interact' privileges")
|
core.register_privilege("basic_privs", S("Can modify 'shout' and 'interact' privileges"))
|
||||||
core.register_privilege("privs", "Can modify privileges")
|
core.register_privilege("privs", S("Can modify privileges"))
|
||||||
|
|
||||||
core.register_privilege("teleport", {
|
core.register_privilege("teleport", {
|
||||||
description = "Can teleport self",
|
description = S("Can teleport self"),
|
||||||
give_to_singleplayer = false,
|
give_to_singleplayer = false,
|
||||||
})
|
})
|
||||||
core.register_privilege("bring", {
|
core.register_privilege("bring", {
|
||||||
description = "Can teleport other players",
|
description = S("Can teleport other players"),
|
||||||
give_to_singleplayer = false,
|
give_to_singleplayer = false,
|
||||||
})
|
})
|
||||||
core.register_privilege("settime", {
|
core.register_privilege("settime", {
|
||||||
description = "Can set the time of day using /time",
|
description = S("Can set the time of day using /time"),
|
||||||
give_to_singleplayer = false,
|
give_to_singleplayer = false,
|
||||||
})
|
})
|
||||||
core.register_privilege("server", {
|
core.register_privilege("server", {
|
||||||
description = "Can do server maintenance stuff",
|
description = S("Can do server maintenance stuff"),
|
||||||
give_to_singleplayer = false,
|
give_to_singleplayer = false,
|
||||||
give_to_admin = true,
|
give_to_admin = true,
|
||||||
})
|
})
|
||||||
core.register_privilege("protection_bypass", {
|
core.register_privilege("protection_bypass", {
|
||||||
description = "Can bypass node protection in the world",
|
description = S("Can bypass node protection in the world"),
|
||||||
give_to_singleplayer = false,
|
give_to_singleplayer = false,
|
||||||
})
|
})
|
||||||
core.register_privilege("ban", {
|
core.register_privilege("ban", {
|
||||||
description = "Can ban and unban players",
|
description = S("Can ban and unban players"),
|
||||||
give_to_singleplayer = false,
|
give_to_singleplayer = false,
|
||||||
give_to_admin = true,
|
give_to_admin = true,
|
||||||
})
|
})
|
||||||
core.register_privilege("kick", {
|
core.register_privilege("kick", {
|
||||||
description = "Can kick players",
|
description = S("Can kick players"),
|
||||||
give_to_singleplayer = false,
|
give_to_singleplayer = false,
|
||||||
give_to_admin = true,
|
give_to_admin = true,
|
||||||
})
|
})
|
||||||
core.register_privilege("give", {
|
core.register_privilege("give", {
|
||||||
description = "Can use /give and /giveme",
|
description = S("Can use /give and /giveme"),
|
||||||
give_to_singleplayer = false,
|
give_to_singleplayer = false,
|
||||||
})
|
})
|
||||||
core.register_privilege("password", {
|
core.register_privilege("password", {
|
||||||
description = "Can use /setpassword and /clearpassword",
|
description = S("Can use /setpassword and /clearpassword"),
|
||||||
give_to_singleplayer = false,
|
give_to_singleplayer = false,
|
||||||
give_to_admin = true,
|
give_to_admin = true,
|
||||||
})
|
})
|
||||||
core.register_privilege("fly", {
|
core.register_privilege("fly", {
|
||||||
description = "Can use fly mode",
|
description = S("Can use fly mode"),
|
||||||
give_to_singleplayer = false,
|
give_to_singleplayer = false,
|
||||||
})
|
})
|
||||||
core.register_privilege("fast", {
|
core.register_privilege("fast", {
|
||||||
description = "Can use fast mode",
|
description = S("Can use fast mode"),
|
||||||
give_to_singleplayer = false,
|
give_to_singleplayer = false,
|
||||||
})
|
})
|
||||||
core.register_privilege("noclip", {
|
core.register_privilege("noclip", {
|
||||||
description = "Can fly through solid nodes using noclip mode",
|
description = S("Can fly through solid nodes using noclip mode"),
|
||||||
give_to_singleplayer = false,
|
give_to_singleplayer = false,
|
||||||
})
|
})
|
||||||
core.register_privilege("rollback", {
|
core.register_privilege("rollback", {
|
||||||
description = "Can use the rollback functionality",
|
description = S("Can use the rollback functionality"),
|
||||||
give_to_singleplayer = false,
|
give_to_singleplayer = false,
|
||||||
})
|
})
|
||||||
core.register_privilege("debug", {
|
core.register_privilege("debug", {
|
||||||
description = "Allows enabling various debug options that may affect gameplay",
|
description = S("Allows enabling various debug options that may affect gameplay"),
|
||||||
give_to_singleplayer = false,
|
give_to_singleplayer = false,
|
||||||
give_to_admin = true,
|
give_to_admin = true,
|
||||||
})
|
})
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
-- Minetest: builtin/misc_register.lua
|
-- Minetest: builtin/misc_register.lua
|
||||||
|
|
||||||
|
local S = core.get_translator("__builtin")
|
||||||
|
|
||||||
--
|
--
|
||||||
-- Make raw registration functions inaccessible to anyone except this file
|
-- Make raw registration functions inaccessible to anyone except this file
|
||||||
--
|
--
|
||||||
@ -326,7 +328,7 @@ end
|
|||||||
|
|
||||||
core.register_item(":unknown", {
|
core.register_item(":unknown", {
|
||||||
type = "none",
|
type = "none",
|
||||||
description = "Unknown Item",
|
description = S("Unknown Item"),
|
||||||
inventory_image = "unknown_item.png",
|
inventory_image = "unknown_item.png",
|
||||||
on_place = core.item_place,
|
on_place = core.item_place,
|
||||||
on_secondary_use = core.item_secondary_use,
|
on_secondary_use = core.item_secondary_use,
|
||||||
@ -336,7 +338,7 @@ core.register_item(":unknown", {
|
|||||||
})
|
})
|
||||||
|
|
||||||
core.register_node(":air", {
|
core.register_node(":air", {
|
||||||
description = "Air",
|
description = S("Air"),
|
||||||
inventory_image = "air.png",
|
inventory_image = "air.png",
|
||||||
wield_image = "air.png",
|
wield_image = "air.png",
|
||||||
drawtype = "airlike",
|
drawtype = "airlike",
|
||||||
@ -353,7 +355,7 @@ core.register_node(":air", {
|
|||||||
})
|
})
|
||||||
|
|
||||||
core.register_node(":ignore", {
|
core.register_node(":ignore", {
|
||||||
description = "Ignore",
|
description = S("Ignore"),
|
||||||
inventory_image = "ignore.png",
|
inventory_image = "ignore.png",
|
||||||
wield_image = "ignore.png",
|
wield_image = "ignore.png",
|
||||||
drawtype = "airlike",
|
drawtype = "airlike",
|
||||||
@ -370,7 +372,7 @@ core.register_node(":ignore", {
|
|||||||
core.chat_send_player(
|
core.chat_send_player(
|
||||||
placer:get_player_name(),
|
placer:get_player_name(),
|
||||||
core.colorize("#FF0000",
|
core.colorize("#FF0000",
|
||||||
"You can't place 'ignore' nodes!"))
|
S("You can't place 'ignore' nodes!")))
|
||||||
return ""
|
return ""
|
||||||
end,
|
end,
|
||||||
})
|
})
|
||||||
|
224
builtin/locale/template.txt
Normal file
224
builtin/locale/template.txt
Normal file
@ -0,0 +1,224 @@
|
|||||||
|
# textdomain: __builtin
|
||||||
|
Empty command.=
|
||||||
|
Invalid command: @1=
|
||||||
|
Invalid command usage.=
|
||||||
|
You don't have permission to run this command (missing privileges: @1).=
|
||||||
|
Unable to get position of player @1.=
|
||||||
|
Incorrect area format. Expected: (x1,y1,z1) (x2,y2,z2)=
|
||||||
|
<action>=
|
||||||
|
Show chat action (e.g., '/me orders a pizza' displays '<player name> orders a pizza')=
|
||||||
|
Show the name of the server owner=
|
||||||
|
The administrator of this server is @1.=
|
||||||
|
There's no administrator named in the config file.=
|
||||||
|
[<name>]=
|
||||||
|
Show privileges of yourself or another player=
|
||||||
|
Player @1 does not exist.=
|
||||||
|
Privileges of @1: @2=
|
||||||
|
<privilege>=
|
||||||
|
Return list of all online players with privilege=
|
||||||
|
Invalid parameters (see /help haspriv).=
|
||||||
|
Unknown privilege!=
|
||||||
|
Players online with the "@1" privilege: @2=
|
||||||
|
Your privileges are insufficient.=
|
||||||
|
Unknown privilege: @1=
|
||||||
|
@1 granted you privileges: @2=
|
||||||
|
<name> (<privilege> | all)=
|
||||||
|
Give privileges to player=
|
||||||
|
Invalid parameters (see /help grant).=
|
||||||
|
<privilege> | all=
|
||||||
|
Grant privileges to yourself=
|
||||||
|
Invalid parameters (see /help grantme).=
|
||||||
|
@1 revoked privileges from you: @2=
|
||||||
|
Remove privileges from player=
|
||||||
|
Invalid parameters (see /help revoke).=
|
||||||
|
Revoke privileges from yourself=
|
||||||
|
Invalid parameters (see /help revokeme).=
|
||||||
|
<name> <password>=
|
||||||
|
Set player's password=
|
||||||
|
Name field required.=
|
||||||
|
Your password was cleared by @1.=
|
||||||
|
Password of player "@1" cleared.=
|
||||||
|
Your password was set by @1.=
|
||||||
|
Password of player "@1" set.=
|
||||||
|
<name>=
|
||||||
|
Set empty password for a player=
|
||||||
|
Reload authentication data=
|
||||||
|
Done.=
|
||||||
|
Failed.=
|
||||||
|
Remove a player's data=
|
||||||
|
Player "@1" removed.=
|
||||||
|
No such player "@1" to remove.=
|
||||||
|
Player "@1" is connected, cannot remove.=
|
||||||
|
Unhandled remove_player return code @1.=
|
||||||
|
Cannot teleport out of map bounds!=
|
||||||
|
Cannot get player with name @1.=
|
||||||
|
Cannot teleport, @1 is attached to an object!=
|
||||||
|
Teleporting @1 to @2.=
|
||||||
|
One does not teleport to oneself.=
|
||||||
|
Cannot get teleportee with name @1.=
|
||||||
|
Cannot get target player with name @1.=
|
||||||
|
Teleporting @1 to @2 at @3.=
|
||||||
|
<X>,<Y>,<Z> | <to_name> | <name> <X>,<Y>,<Z> | <name> <to_name>=
|
||||||
|
Teleport to position or player=
|
||||||
|
You don't have permission to teleport other players (missing privilege: @1).=
|
||||||
|
([-n] <name> <value>) | <name>=
|
||||||
|
Set or read server configuration setting=
|
||||||
|
Failed. Use '/set -n <name> <value>' to create a new setting.=
|
||||||
|
@1 @= @2=
|
||||||
|
<not set>=
|
||||||
|
Invalid parameters (see /help set).=
|
||||||
|
Finished emerging @1 blocks in @2ms.=
|
||||||
|
emergeblocks update: @1/@2 blocks emerged (@3%)=
|
||||||
|
(here [<radius>]) | (<pos1> <pos2>)=
|
||||||
|
Load (or, if nonexistent, generate) map blocks contained in area pos1 to pos2 (<pos1> and <pos2> must be in parentheses)=
|
||||||
|
Started emerge of area ranging from @1 to @2.=
|
||||||
|
Delete map blocks contained in area pos1 to pos2 (<pos1> and <pos2> must be in parentheses)=
|
||||||
|
Successfully cleared area ranging from @1 to @2.=
|
||||||
|
Failed to clear one or more blocks in area.=
|
||||||
|
Resets lighting in the area between pos1 and pos2 (<pos1> and <pos2> must be in parentheses)=
|
||||||
|
Successfully reset light in the area ranging from @1 to @2.=
|
||||||
|
Failed to load one or more blocks in area.=
|
||||||
|
List mods installed on the server=
|
||||||
|
Cannot give an empty item.=
|
||||||
|
Cannot give an unknown item.=
|
||||||
|
Giving 'ignore' is not allowed.=
|
||||||
|
@1 is not a known player.=
|
||||||
|
@1 partially added to inventory.=
|
||||||
|
@1 could not be added to inventory.=
|
||||||
|
@1 added to inventory.=
|
||||||
|
@1 partially added to inventory of @2.=
|
||||||
|
@1 could not be added to inventory of @2.=
|
||||||
|
@1 added to inventory of @2.=
|
||||||
|
<name> <ItemString> [<count> [<wear>]]=
|
||||||
|
Give item to player=
|
||||||
|
Name and ItemString required.=
|
||||||
|
<ItemString> [<count> [<wear>]]=
|
||||||
|
Give item to yourself=
|
||||||
|
ItemString required.=
|
||||||
|
<EntityName> [<X>,<Y>,<Z>]=
|
||||||
|
Spawn entity at given (or your) position=
|
||||||
|
EntityName required.=
|
||||||
|
Unable to spawn entity, player is nil.=
|
||||||
|
Cannot spawn an unknown entity.=
|
||||||
|
Invalid parameters (@1).=
|
||||||
|
@1 spawned.=
|
||||||
|
@1 failed to spawn.=
|
||||||
|
Destroy item in hand=
|
||||||
|
Unable to pulverize, no player.=
|
||||||
|
Unable to pulverize, no item in hand.=
|
||||||
|
An item was pulverized.=
|
||||||
|
[<range>] [<seconds>] [<limit>]=
|
||||||
|
Check who last touched a node or a node near it within the time specified by <seconds>. Default: range @= 0, seconds @= 86400 @= 24h, limit @= 5. Set <seconds> to inf for no time limit=
|
||||||
|
Rollback functions are disabled.=
|
||||||
|
That limit is too high!=
|
||||||
|
Checking @1 ...=
|
||||||
|
Nobody has touched the specified location in @1 seconds.=
|
||||||
|
@1 @2 @3 -> @4 @5 seconds ago.=
|
||||||
|
Punch a node (range@=@1, seconds@=@2, limit@=@3).=
|
||||||
|
(<name> [<seconds>]) | (:<actor> [<seconds>])=
|
||||||
|
Revert actions of a player. Default for <seconds> is 60. Set <seconds> to inf for no time limit=
|
||||||
|
Invalid parameters. See /help rollback and /help rollback_check.=
|
||||||
|
Reverting actions of player '@1' since @2 seconds.=
|
||||||
|
Reverting actions of @1 since @2 seconds.=
|
||||||
|
(log is too long to show)=
|
||||||
|
Reverting actions succeeded.=
|
||||||
|
Reverting actions FAILED.=
|
||||||
|
Show server status=
|
||||||
|
This command was disabled by a mod or game.=
|
||||||
|
[<0..23>:<0..59> | <0..24000>]=
|
||||||
|
Show or set time of day=
|
||||||
|
Current time is @1:@2.=
|
||||||
|
You don't have permission to run this command (missing privilege: @1).=
|
||||||
|
Invalid time.=
|
||||||
|
Time of day changed.=
|
||||||
|
Invalid hour (must be between 0 and 23 inclusive).=
|
||||||
|
Invalid minute (must be between 0 and 59 inclusive).=
|
||||||
|
Show day count since world creation=
|
||||||
|
Current day is @1.=
|
||||||
|
[<delay_in_seconds> | -1] [reconnect] [<message>]=
|
||||||
|
Shutdown server (-1 cancels a delayed shutdown)=
|
||||||
|
Server shutting down (operator request).=
|
||||||
|
Ban the IP of a player or show the ban list=
|
||||||
|
The ban list is empty.=
|
||||||
|
Ban list: @1=
|
||||||
|
Player is not online.=
|
||||||
|
Failed to ban player.=
|
||||||
|
Banned @1.=
|
||||||
|
<name> | <IP_address>=
|
||||||
|
Remove IP ban belonging to a player/IP=
|
||||||
|
Failed to unban player/IP.=
|
||||||
|
Unbanned @1.=
|
||||||
|
<name> [<reason>]=
|
||||||
|
Kick a player=
|
||||||
|
Failed to kick player @1.=
|
||||||
|
Kicked @1.=
|
||||||
|
[full | quick]=
|
||||||
|
Clear all objects in world=
|
||||||
|
Invalid usage, see /help clearobjects.=
|
||||||
|
Clearing all objects. This may take a long time. You may experience a timeout. (by @1)=
|
||||||
|
Cleared all objects.=
|
||||||
|
<name> <message>=
|
||||||
|
Send a direct message to a player=
|
||||||
|
Invalid usage, see /help msg.=
|
||||||
|
The player @1 is not online.=
|
||||||
|
DM from @1: @2=
|
||||||
|
Message sent.=
|
||||||
|
Get the last login time of a player or yourself=
|
||||||
|
@1's last login time was @2.=
|
||||||
|
@1's last login time is unknown.=
|
||||||
|
Clear the inventory of yourself or another player=
|
||||||
|
You don't have permission to clear another player's inventory (missing privilege: @1).=
|
||||||
|
@1 cleared your inventory.=
|
||||||
|
Cleared @1's inventory.=
|
||||||
|
Player must be online to clear inventory!=
|
||||||
|
Players can't be killed, damage has been disabled.=
|
||||||
|
Player @1 is not online.=
|
||||||
|
You are already dead.=
|
||||||
|
@1 is already dead.=
|
||||||
|
@1 has been killed.=
|
||||||
|
Kill player or yourself=
|
||||||
|
Available commands: @1=
|
||||||
|
Use '/help <cmd>' to get more information, or '/help all' to list everything.=
|
||||||
|
Available commands:=
|
||||||
|
Command not available: @1=
|
||||||
|
[all | privs | <cmd>]=
|
||||||
|
Get help for commands or list privileges=
|
||||||
|
Available privileges:=
|
||||||
|
Command=
|
||||||
|
Parameters=
|
||||||
|
For more information, click on any entry in the list.=
|
||||||
|
Double-click to copy the entry to the chat history.=
|
||||||
|
Command: @1 @2=
|
||||||
|
Available commands: (see also: /help <cmd>)=
|
||||||
|
Close=
|
||||||
|
Privilege=
|
||||||
|
Description=
|
||||||
|
print [<filter>] | dump [<filter>] | save [<format> [<filter>]] | reset=
|
||||||
|
Handle the profiler and profiling data=
|
||||||
|
Statistics written to action log.=
|
||||||
|
Statistics were reset.=
|
||||||
|
Usage: @1=
|
||||||
|
Format can be one of txt, csv, lua, json, json_pretty (structures may be subject to change).=
|
||||||
|
(no description)=
|
||||||
|
Can interact with things and modify the world=
|
||||||
|
Can speak in chat=
|
||||||
|
Can modify 'shout' and 'interact' privileges=
|
||||||
|
Can modify privileges=
|
||||||
|
Can teleport self=
|
||||||
|
Can teleport other players=
|
||||||
|
Can set the time of day using /time=
|
||||||
|
Can do server maintenance stuff=
|
||||||
|
Can bypass node protection in the world=
|
||||||
|
Can ban and unban players=
|
||||||
|
Can kick players=
|
||||||
|
Can use /give and /giveme=
|
||||||
|
Can use /setpassword and /clearpassword=
|
||||||
|
Can use fly mode=
|
||||||
|
Can use fast mode=
|
||||||
|
Can fly through solid nodes using noclip mode=
|
||||||
|
Can use the rollback functionality=
|
||||||
|
Allows enabling various debug options that may affect gameplay=
|
||||||
|
Unknown Item=
|
||||||
|
Air=
|
||||||
|
Ignore=
|
||||||
|
You can't place 'ignore' nodes!=
|
@ -15,6 +15,8 @@
|
|||||||
--with this program; if not, write to the Free Software Foundation, Inc.,
|
--with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
--51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
--51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
|
||||||
|
local S = core.get_translator("__builtin")
|
||||||
|
|
||||||
local function get_bool_default(name, default)
|
local function get_bool_default(name, default)
|
||||||
local val = core.settings:get_bool(name)
|
local val = core.settings:get_bool(name)
|
||||||
if val == nil then
|
if val == nil then
|
||||||
@ -40,9 +42,9 @@ function profiler.init_chatcommand()
|
|||||||
instrumentation.init_chatcommand()
|
instrumentation.init_chatcommand()
|
||||||
end
|
end
|
||||||
|
|
||||||
local param_usage = "print [filter] | dump [filter] | save [format [filter]] | reset"
|
local param_usage = S("print [<filter>] | dump [<filter>] | save [<format> [<filter>]] | reset")
|
||||||
core.register_chatcommand("profiler", {
|
core.register_chatcommand("profiler", {
|
||||||
description = "handle the profiler and profiling data",
|
description = S("Handle the profiler and profiling data"),
|
||||||
params = param_usage,
|
params = param_usage,
|
||||||
privs = { server=true },
|
privs = { server=true },
|
||||||
func = function(name, param)
|
func = function(name, param)
|
||||||
@ -51,21 +53,19 @@ function profiler.init_chatcommand()
|
|||||||
|
|
||||||
if command == "dump" then
|
if command == "dump" then
|
||||||
core.log("action", reporter.print(sampler.profile, arg0))
|
core.log("action", reporter.print(sampler.profile, arg0))
|
||||||
return true, "Statistics written to action log"
|
return true, S("Statistics written to action log.")
|
||||||
elseif command == "print" then
|
elseif command == "print" then
|
||||||
return true, reporter.print(sampler.profile, arg0)
|
return true, reporter.print(sampler.profile, arg0)
|
||||||
elseif command == "save" then
|
elseif command == "save" then
|
||||||
return reporter.save(sampler.profile, args[1] or "txt", args[2])
|
return reporter.save(sampler.profile, args[1] or "txt", args[2])
|
||||||
elseif command == "reset" then
|
elseif command == "reset" then
|
||||||
sampler.reset()
|
sampler.reset()
|
||||||
return true, "Statistics were reset"
|
return true, S("Statistics were reset.")
|
||||||
end
|
end
|
||||||
|
|
||||||
return false, string.format(
|
return false,
|
||||||
"Usage: %s\n" ..
|
S("Usage: @1", param_usage) .. "\n" ..
|
||||||
"Format can be one of txt, csv, lua, json, json_pretty (structures may be subject to change).",
|
S("Format can be one of txt, csv, lua, json, json_pretty (structures may be subject to change).")
|
||||||
param_usage
|
|
||||||
)
|
|
||||||
end
|
end
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@ -2496,7 +2496,9 @@ void Server::fillMediaCache()
|
|||||||
|
|
||||||
// Collect all media file paths
|
// Collect all media file paths
|
||||||
std::vector<std::string> paths;
|
std::vector<std::string> paths;
|
||||||
// The paths are ordered in descending priority
|
|
||||||
|
// ordered in descending priority
|
||||||
|
paths.push_back(getBuiltinLuaPath() + DIR_DELIM + "locale");
|
||||||
fs::GetRecursiveDirs(paths, porting::path_user + DIR_DELIM + "textures" + DIR_DELIM + "server");
|
fs::GetRecursiveDirs(paths, porting::path_user + DIR_DELIM + "textures" + DIR_DELIM + "server");
|
||||||
fs::GetRecursiveDirs(paths, m_gamespec.path + DIR_DELIM + "textures");
|
fs::GetRecursiveDirs(paths, m_gamespec.path + DIR_DELIM + "textures");
|
||||||
m_modmgr->getModsMediaPaths(paths);
|
m_modmgr->getModsMediaPaths(paths);
|
||||||
|
@ -58,6 +58,7 @@ xgettext --package-name=minetest \
|
|||||||
--keyword=fgettext_ne \
|
--keyword=fgettext_ne \
|
||||||
--keyword=strgettext \
|
--keyword=strgettext \
|
||||||
--keyword=wstrgettext \
|
--keyword=wstrgettext \
|
||||||
|
--keyword=core.gettext \
|
||||||
--keyword=showTranslatedStatusText \
|
--keyword=showTranslatedStatusText \
|
||||||
--output $potfile \
|
--output $potfile \
|
||||||
--from-code=utf-8 \
|
--from-code=utf-8 \
|
||||||
|
Loading…
Reference in New Issue
Block a user