From 661919aaafddadb8af79ecf01f39ad89880f77b4 Mon Sep 17 00:00:00 2001 From: Sokomine Date: Mon, 25 Dec 2017 02:08:06 +0100 Subject: [PATCH] added localization (inttlib); added german --- depends.txt | 1 + doors.lua | 5 +- elevator.lua | 50 +++++++------- init.lua | 154 +++++++++++++++++++++++++------------------- locale/de.txt | 92 ++++++++++++++++++++++++++ locale/template.txt | 92 ++++++++++++++++++++++++++ travelnet.lua | 6 +- 7 files changed, 305 insertions(+), 95 deletions(-) create mode 100644 locale/de.txt create mode 100644 locale/template.txt diff --git a/depends.txt b/depends.txt index 7696547..c20c0f0 100644 --- a/depends.txt +++ b/depends.txt @@ -1 +1,2 @@ mesecons? +intllib? diff --git a/doors.lua b/doors.lua index a2ee90d..1ca64c1 100644 --- a/doors.lua +++ b/doors.lua @@ -2,11 +2,12 @@ -- All doors (not only these here) in front of a travelnet or elevator are opened automaticly when a player arrives -- and are closed when a player departs from the travelnet or elevator. -- Autor: Sokomine +local S = travelnet.S; travelnet.register_door = function( node_base_name, def_tiles, material ) minetest.register_node( node_base_name.."_open", { - description = "elevator door (open)", + description = S("elevator door (open)"), drawtype = "nodebox", -- top, bottom, side1, side2, inner, outer tiles = def_tiles, @@ -36,7 +37,7 @@ travelnet.register_door = function( node_base_name, def_tiles, material ) }) minetest.register_node(node_base_name.."_closed", { - description = "elevator door (closed)", + description = S("elevator door (closed)"), drawtype = "nodebox", -- top, bottom, side1, side2, inner, outer tiles = def_tiles, diff --git a/elevator.lua b/elevator.lua index c43a8b1..722a73a 100644 --- a/elevator.lua +++ b/elevator.lua @@ -1,6 +1,7 @@ -- This version of the travelnet box allows to move up or down only. -- The network name is determined automaticly from the position (x/z coordinates). -- >utor: Sokomine +local S = travelnet.S; travelnet.show_nearest_elevator = function( pos, owner_name, param2 ) if( not( pos ) or not(pos.x) or not(pos.z) or not( owner_name )) then @@ -8,9 +9,9 @@ travelnet.show_nearest_elevator = function( pos, owner_name, param2 ) end if( not( travelnet.targets[ owner_name ] )) then - minetest.chat_send_player( owner_name, "Congratulations! This is your first elevator.".. + minetest.chat_send_player( owner_name, S("Congratulations! This is your first elevator.".. "You can build an elevator network by placing further elevators somewhere above ".. - "or below this one. Just make sure that the x and z coordinate are the same."); + "or below this one. Just make sure that the x and z coordinate are the same.")); return; end @@ -19,10 +20,10 @@ travelnet.show_nearest_elevator = function( pos, owner_name, param2 ) if( travelnet.targets[ owner_name ][ network_name ] -- does the network have any members at all? and next( travelnet.targets[ owner_name ][ network_name ], nil )) then - minetest.chat_send_player( owner_name, "This elevator will automaticly connect to the ".. + minetest.chat_send_player( owner_name, S("This elevator will automaticly connect to the ".. "other elevators you have placed at diffrent heights. Just enter a station name ".. "and click on \"store\" to set it up. Or just punch it to set the height as station ".. - "name."); + "name.")); return; end @@ -47,46 +48,47 @@ travelnet.show_nearest_elevator = function( pos, owner_name, param2 ) end end if( nearest_name ~= "" ) then - local text = "Your nearest elevator network is located "; + local text = S("Your nearest elevator network is located").." "; -- in front of/behind if( (param2==0 and nearest_dist_z>=0)or (param2==2 and nearest_dist_z<=0)) then - text = text..tostring( math.abs(nearest_dist_z )).." m behind this elevator and "; + text = text..tostring( math.abs(nearest_dist_z )).." "..S("m behind this elevator and"); elseif((param2==1 and nearest_dist_x>=0)or (param2==3 and nearest_dist_x<=0)) then - text = text..tostring( math.abs(nearest_dist_x )).." m behind this elevator and "; + text = text..tostring( math.abs(nearest_dist_x )).." "..S("m behind this elevator and"); elseif((param2==0 and nearest_dist_z< 0)or (param2==2 and nearest_dist_z> 0)) then - text = text..tostring( math.abs(nearest_dist_z )).." m in front of this elevator and "; + text = text..tostring( math.abs(nearest_dist_z )).." "..S("m in front of this elevator and"); elseif((param2==1 and nearest_dist_x< 0)or (param2==3 and nearest_dist_x> 0)) then - text = text..tostring( math.abs(nearest_dist_x )).." m in front of this elevator and "; - else text = text.." ERROR "; + text = text..tostring( math.abs(nearest_dist_x )).." "..S("m in front of this elevator and"); + else text = text..S(" ERROR"); end + text = text.." "; -- right/left if( (param2==0 and nearest_dist_x< 0)or (param2==2 and nearest_dist_x> 0)) then - text = text..tostring( math.abs(nearest_dist_x )).." m to the left"; + text = text..tostring( math.abs(nearest_dist_x )).." "..S("m to the left"); elseif((param2==1 and nearest_dist_z>=0)or (param2==3 and nearest_dist_z<=0)) then - text = text..tostring( math.abs(nearest_dist_z )).." m to the left"; + text = text..tostring( math.abs(nearest_dist_z )).." "..S("m to the left"); elseif((param2==0 and nearest_dist_x>=0)or (param2==2 and nearest_dist_x<=0)) then - text = text..tostring( math.abs(nearest_dist_x )).." m to the right"; + text = text..tostring( math.abs(nearest_dist_x )).." "..S("m to the right"); elseif((param2==1 and nearest_dist_z< 0)or (param2==3 and nearest_dist_z> 0)) then - text = text..tostring( math.abs(nearest_dist_z )).." m to the right"; - else text = text.." ERROR "; + text = text..tostring( math.abs(nearest_dist_z )).." "..S("m to the right"); + else text = text..S(" ERROR"); end minetest.chat_send_player( owner_name, text.. - ", located at x="..tostring( pos.x+nearest_dist_x).. + S(", located at x").."="..tostring( pos.x+nearest_dist_x).. ", z="..tostring( pos.z+nearest_dist_z).. - " This elevator here will start a new shaft/network." ); + ". "..S("This elevator here will start a new shaft/network.")); else - minetest.chat_send_player( owner_name, "This is your first elevator. It differs from ".. + minetest.chat_send_player( owner_name, S("This is your first elevator. It differs from ".. "travelnet networks by only allowing movement in vertical direction (up or down). ".. "All further elevators which you will place at the same x,z coordinates at differnt ".. - "heights will be able to connect to this elevator."); + "heights will be able to connect to this elevator.")); end end minetest.register_node("travelnet:elevator", { - description = "Elevator", + description = S("Elevator"), drawtype = "mesh", mesh = "travelnet_elevator.obj", sunlight_propagates = true, @@ -127,17 +129,17 @@ minetest.register_node("travelnet:elevator", { after_place_node = function(pos, placer, itemstack) local meta = minetest.get_meta(pos); - meta:set_string("infotext", "Elevator (unconfigured)"); + meta:set_string("infotext", S("Elevator (unconfigured)")); meta:set_string("station_name", ""); meta:set_string("station_network",""); meta:set_string("owner", placer:get_player_name() ); -- request initial data meta:set_string("formspec", "size[12,10]".. - "field[0.3,5.6;6,0.7;station_name;Name of this station:;]".. + "field[0.3,5.6;6,0.7;station_name;"..S("Name of this station:")..";]".. -- "field[0.3,6.6;6,0.7;station_network;Assign to Network:;]".. -- "field[0.3,7.6;6,0.7;owner_name;(optional) owned by:;]".. - "button_exit[6.3,6.2;1.7,0.7;station_set;Store]" ); + "button_exit[6.3,6.2;1.7,0.7;station_set;"..S("Store").."]" ); local p = {x=pos.x, y=pos.y+1, z=pos.z} local p2 = minetest.dir_to_facedir(placer:get_look_dir()) @@ -170,7 +172,7 @@ minetest.register_node("travelnet:elevator", { local node = minetest.get_node({x=pos.x, y=pos.y+1, z=pos.z}); -- leftover elevator_top nodes can be removed by placing a new elevator underneath if( node ~= nil and node.name ~= "air" and node.name ~= 'travelnet:elevator_top') then - minetest.chat_send_player( placer:get_player_name(), 'Not enough vertical space to place the travelnet box!' ) + minetest.chat_send_player( placer:get_player_name(), S('Not enough vertical space to place the travelnet box!')) return; end return minetest.item_place(itemstack, placer, pointed_thing); diff --git a/init.lua b/init.lua index 4453884..5be6cac 100644 --- a/init.lua +++ b/init.lua @@ -22,6 +22,8 @@ Please configure this mod in config.lua Changelog: + 24.12.17 - Added support for localization through intllib. + Added localization for German (de). 17.07.17 - Added more detailled licence information. TNT and DungeonMasters ought to leave travelnets and elevators untouched now. Added function to register elevator doors. @@ -73,13 +75,21 @@ --]] -minetest.register_privilege("travelnet_attach", { description = "allows to attach travelnet boxes to travelnets of other players", give_to_singleplayer = false}); -minetest.register_privilege("travelnet_remove", { description = "allows to dig travelnet boxes which belog to nets of other players", give_to_singleplayer = false}); - travelnet = {}; travelnet.targets = {}; +-- Boilerplate to support localized strings if intllib mod is installed. +if minetest.get_modpath( "intllib" ) and intllib then + travelnet.S = intllib.Getter() +else + travelnet.S = function(s) return s end +end + +local S = travelnet.S; + +minetest.register_privilege("travelnet_attach", { description = S("allows to attach travelnet boxes to travelnets of other players"), give_to_singleplayer = false}); +minetest.register_privilege("travelnet_remove", { description = S("allows to dig travelnet boxes which belog to nets of other players"), give_to_singleplayer = false}); -- read the configuration dofile(minetest.get_modpath("travelnet").."/config.lua"); -- the normal, default travelnet @@ -98,7 +108,7 @@ travelnet.save_data = function() file:write( data ); file:close(); else - print("[Mod travelnet] Error: Savefile '"..tostring( path ).."' could not be written."); + print(S("[Mod travelnet] Error: Savefile '%s' could not be written."):format(tostring(path))); end end @@ -113,7 +123,7 @@ travelnet.restore_data = function() travelnet.targets = minetest.deserialize( data ); file:close(); else - print("[Mod travelnet] Error: Savefile '"..tostring( path ).."' not found."); + print(S("[Mod travelnet] Error: Savefile '%s' not found."):format(tostring(path))); end end @@ -145,8 +155,8 @@ travelnet.show_message = function( pos, player_name, title, message ) local formspec = "size[8,3]".. "label[3,0;"..minetest.formspec_escape( title or "Error").."]".. "textlist[0,0.5;8,1.5;;"..minetest.formspec_escape( message or "- nothing -")..";]".. - "button_exit[3.5,2.5;1.0,0.5;back;Back]".. - "button_exit[6.8,2.5;1.0,0.5;station_exit;Exit]".. + "button_exit[3.5,2.5;1.0,0.5;back;"..S("Back").."]".. + "button_exit[6.8,2.5;1.0,0.5;station_exit;"..S("Exit").."]".. "field[20,20;0.1,0.1;pos2str;Pos;".. minetest.pos_to_string( pos ).."]"; minetest.show_formspec(player_name, "travelnet:show", formspec); end @@ -189,7 +199,7 @@ travelnet.reset_formspec = function( meta ) if( not( meta )) then return; end - meta:set_string("infotext", "Travelnet-box (unconfigured)"); + meta:set_string("infotext", S("Travelnet-box (unconfigured)")); meta:set_string("station_name", ""); meta:set_string("station_network",""); meta:set_string("owner", ""); @@ -201,19 +211,19 @@ travelnet.reset_formspec = function( meta ) -- request initinal data meta:set_string("formspec", "size[10,6.0]".. - "label[2.0,0.0;--> Configure this travelnet station <--]".. - "field[0.3,1.2;9,0.9;station_name;Name of this station:;".. + "label[2.0,0.0;--> "..S("Configure this travelnet station").." <--]".. + "field[0.3,1.2;9,0.9;station_name;"..S("Name of this station")..":;".. minetest.formspec_escape(station_name or "").."]".. - "label[0.3,1.5;How do you call this place here? Example: \"my first house\", \"mine\", \"shop\"...]".. + "label[0.3,1.5;"..S("How do you call this place here? Example: \"my first house\", \"mine\", \"shop\"...").."]".. - "field[0.3,2.8;9,0.9;station_network;Assign to Network:;".. + "field[0.3,2.8;9,0.9;station_network;"..S("Assign to Network:")..";".. minetest.formspec_escape(station_network or "").."]".. - "label[0.3,3.1;You can have more than one network. If unsure, use \""..tostring(station_network).."\".]".. - "field[0.3,4.4;9,0.9;owner;Owned by:;]".. - "label[0.3,4.7;Unless you know what you are doing, leave this empty.]".. - "button_exit[1.3,5.3;1.7,0.7;station_help_setup;Help]".. - "button_exit[3.8,5.3;1.7,0.7;station_set;Save]".. - "button_exit[6.3,5.3;1.7,0.7;station_exit;Exit]"); + "label[0.3,3.1;"..S("You can have more than one network. If unsure, use \"%s\""):format(tostring(station_network)).."\".]".. + "field[0.3,4.4;9,0.9;owner;"..S("Owned by:")..";]".. + "label[0.3,4.7;"..S("Unless you know what you are doing, leave this empty.").."]".. + "button_exit[1.3,5.3;1.7,0.7;station_help_setup;"..S("Help").."]".. + "button_exit[3.8,5.3;1.7,0.7;station_set;"..S("Save").."]".. + "button_exit[6.3,5.3;1.7,0.7;station_exit;"..S("Exit").."]"); end @@ -252,7 +262,7 @@ travelnet.update_formspec = function( pos, puncher_name, fields ) travelnet.reset_formspec( meta ); - travelnet.show_message( pos, puncher_name, "Error", "Update failed! Resetting this box on the travelnet." ); + travelnet.show_message( pos, puncher_name, "Error", S("Update failed! Resetting this box on the travelnet.")); return; end @@ -280,7 +290,8 @@ travelnet.update_formspec = function( pos, puncher_name, fields ) -- add this station travelnet.targets[ owner_name ][ station_network ][ station_name ] = {pos=pos, timestamp=zeit }; - minetest.chat_send_player(owner_name, "Station '"..station_name.."' has been reattached to the network '"..station_network.."'."); + minetest.chat_send_player(owner_name, S("Station '%s'"):format(station_name).." ".. + S(" has been reattached to the network '%s'."):format(station_network)); travelnet.save_data(); end @@ -289,15 +300,15 @@ travelnet.update_formspec = function( pos, puncher_name, fields ) local zusatzstr = ""; local trheight = "10"; if( this_node and this_node.name=="locked_travelnet:travelnet" ) then - zusatzstr = "field[0.3,11;6,0.7;locks_sent_lock_command;Locked travelnet. Type /help for help:;]"; + zusatzstr = "field[0.3,11;6,0.7;locks_sent_lock_command;"..S("Locked travelnet. Type /help for help:")..";]"; trheight = "11.5"; end local formspec = "size[12,"..trheight.."]".. - "label[3.3,0.0;Travelnet-Box:]".."label[6.3,0.0;Punch box to update target list.]".. - "label[0.3,0.4;Name of this station:]".."label[6.3,0.4;"..minetest.formspec_escape(station_name or "?").."]".. - "label[0.3,0.8;Assigned to Network:]" .."label[6.3,0.8;"..minetest.formspec_escape(station_network or "?").."]".. - "label[0.3,1.2;Owned by:]" .."label[6.3,1.2;"..minetest.formspec_escape(owner_name or "?").."]".. - "label[3.3,1.6;Click on target to travel there:]".. + "label[3.3,0.0;"..S("Travelnet-Box")..":]".."label[6.3,0.0;"..S("Punch box to update target list.").."]".. + "label[0.3,0.4;"..S("Name of this station:").."]".."label[6.3,0.4;"..minetest.formspec_escape(station_name or "?").."]".. + "label[0.3,0.8;"..S("Assigned to Network:").."]" .."label[6.3,0.8;"..minetest.formspec_escape(station_network or "?").."]".. + "label[0.3,1.2;"..S("Owned by:").."]" .."label[6.3,1.2;"..minetest.formspec_escape(owner_name or "?").."]".. + "label[3.3,1.6;"..S("Click on target to travel there:").."]".. zusatzstr; -- "button_exit[5.3,0.3;8,0.8;do_update;Punch box to update destination list. Click on target to travel there.]".. local x = 0; @@ -330,7 +341,7 @@ travelnet.update_formspec = function( pos, puncher_name, fields ) end for index,k in ipairs( stations ) do if( index == ground_level ) then - travelnet.targets[ owner_name ][ station_network ][ k ].nr = 'G'; + travelnet.targets[ owner_name ][ station_network ][ k ].nr = S('G'); else travelnet.targets[ owner_name ][ station_network ][ k ].nr = tostring( ground_level - index ); end @@ -368,10 +379,10 @@ travelnet.update_formspec = function( pos, puncher_name, fields ) end -- handle errors if( swap_with_pos < 1) then - travelnet.show_message( pos, puncher_name, "Info", "This station is already the first one on the list."); + travelnet.show_message( pos, puncher_name, "Info", S("This station is already the first one on the list.")); return; elseif( swap_with_pos > #stations ) then - travelnet.show_message( pos, puncher_name, "Info", "This station is already the last one on the list."); + travelnet.show_message( pos, puncher_name, "Info", S("This station is already the last one on the list.")); return; else -- swap the actual data by which the stations are sorted @@ -436,15 +447,17 @@ travelnet.update_formspec = function( pos, puncher_name, fields ) end end formspec = formspec.. - "label[8.0,1.6;Position in list:]".. - "button_exit[11.3,0.0;1.0,0.5;station_exit;Exit]".. - "button_exit[9.6,1.6;1.4,0.5;move_up;move up]".. - "button_exit[10.9,1.6;1.4,0.5;move_down;move down]"; + "label[8.0,1.6;"..S("Position in list:").."]".. + "button_exit[11.3,0.0;1.0,0.5;station_exit;"..S("Exit").."]".. + "button_exit[9.6,1.6;1.4,0.5;move_up;"..S("move up").."]".. + "button_exit[10.9,1.6;1.4,0.5;move_down;"..S("move down").."]"; meta:set_string( "formspec", formspec ); - meta:set_string( "infotext", "Station '"..tostring( station_name ).."' on travelnet '"..tostring( station_network ).. - "' (owned by "..tostring( owner_name )..") ready for usage. Right-click to travel, punch to update."); + meta:set_string( "infotext", S("Station '%s'"):format(tostring( station_name )).." ".. + S("on travelnet '%s'"):format(tostring( station_network )).." ".. + S("(owned by %s)"):format(tostring( owner_name )).." ".. + S("ready for usage. Right-click to travel, punch to update.")); -- show the player the updated formspec travelnet.show_current_formspec( pos, meta, puncher_name ); @@ -464,18 +477,18 @@ travelnet.add_target = function( station_name, network_name, pos, player_name, m is_elevator = true; network_name = tostring( pos.x )..','..tostring( pos.z ); if( not( station_name ) or station_name == '' ) then - station_name = 'at '..tostring( pos.y )..'m'; + station_name = S('at %s m'):format(tostring( pos.y )); end end if( station_name == "" or not(station_name )) then - travelnet.show_message( pos, player_name, "Error", "Please provide a name for this station." ); + travelnet.show_message( pos, player_name, S("Error"), S("Please provide a name for this station." )); return; end if( network_name == "" or not( network_name )) then - travelnet.show_message( pos, player_name, "Error", - "Please provide the name of the network this station ought to be connected to." ); + travelnet.show_message( pos, player_name, S("Error"), + S("Please provide the name of the network this station ought to be connected to.")); return; end @@ -487,16 +500,16 @@ travelnet.add_target = function( station_name, network_name, pos, player_name, m elseif( not( minetest.check_player_privs(player_name, {interact=true}))) then - travelnet.show_message( pos, player_name, "Error", - "There is no player with interact privilege named '"..tostring( player_name ).."'. Aborting."); + travelnet.show_message( pos, player_name, S("Error"), + S("There is no player with interact privilege named '%s'. Aborting."):format(tostring( player_name ))); return; elseif( not( minetest.check_player_privs(player_name, {travelnet_attach=true})) and not( travelnet.allow_attach( player_name, owner_name, network_name ))) then - travelnet.show_message( pos, player_name, "Error", - "You do not have the travelnet_attach priv which is required to attach your box to ".. - "the network of someone else. Aborting."); + travelnet.show_message( pos, player_name, S("Error"), + S("You do not have the travelnet_attach priv which is required to attach your box to ".. + "the network of someone else. Aborting.")); return; end @@ -515,8 +528,8 @@ travelnet.add_target = function( station_name, network_name, pos, player_name, m for k,v in pairs( travelnet.targets[ owner_name ][ network_name ] ) do if( k == station_name ) then - travelnet.show_message( pos, player_name, "Error", - "A station named '"..station_name.."' already exists on this network. Please choose a diffrent name!"); + travelnet.show_message( pos, player_name, S("Error"), + S("A station named '%s' already exists on this network. Please choose a diffrent name!"):format(station_name)); return; end @@ -525,10 +538,10 @@ travelnet.add_target = function( station_name, network_name, pos, player_name, m -- we don't want too many stations in the same network because that would get confusing when displaying the targets if( anz+1 > travelnet.MAX_STATIONS_PER_NETWORK ) then - travelnet.show_message( pos, player_name, "Error", - "Network '"..network_name.."' already contains the maximum number (=".. - (travelnet.MAX_STATIONS_PER_NETWORK)..") of allowed stations per network. ".. - "Please choose a diffrent/new network name."); + travelnet.show_message( pos, player_name, S("Error"), + S("Network '%s',"):format(network_name).." ".. + S("already contains the maximum number (=%s) of allowed stations per network. ".. + "Please choose a diffrent/new network name."):format(travelnet.MAX_STATIONS_PER_NETWORK)); return; end @@ -538,8 +551,9 @@ travelnet.add_target = function( station_name, network_name, pos, player_name, m -- do we have a new node to set up? (and are not just reading from a safefile?) if( meta ) then - minetest.chat_send_player(player_name, "Station '"..station_name.."' has been added to the network '" - ..network_name.."', which now consists of "..( anz+1 ).." station(s)."); + minetest.chat_send_player(player_name, S("Station '%s'"):format(station_name).." ".. + S("has been added to the network '%s'"):format(network_name).. + S(", which now consists of %s station(s)."):format(anz+1)); meta:set_string( "station_name", station_name ); meta:set_string( "station_network", network_name ); @@ -548,8 +562,8 @@ travelnet.add_target = function( station_name, network_name, pos, player_name, m meta:set_string("formspec", "size[12,10]".. - "field[0.3,0.6;6,0.7;station_name;Station:;".. minetest.formspec_escape(meta:get_string("station_name")).."]".. - "field[0.3,3.6;6,0.7;station_network;Network:;"..minetest.formspec_escape(meta:get_string("station_network")).."]" ); + "field[0.3,0.6;6,0.7;station_name;"..S("Station:")..";".. minetest.formspec_escape(meta:get_string("station_name")).."]".. + "field[0.3,3.6;6,0.7;station_network;"..S("Network:")..";"..minetest.formspec_escape(meta:get_string("station_network")).."]" ); -- display a list of all stations that can be reached from here travelnet.update_formspec( pos, player_name, nil ); @@ -626,7 +640,7 @@ travelnet.on_receive_fields = function(pos, formname, fields, player) if( node and node.name and minetest.registered_nodes[ node.name ] ) then travelnet.show_message( pos, name, "--> Help <--", -- TODO: actually add help page - "If only there would be any help for "..tostring( node.name )..".."); + S("No help available yet.")); end return; end @@ -650,7 +664,7 @@ travelnet.on_receive_fields = function(pos, formname, fields, player) end if( not( fields.target )) then - minetest.chat_send_player(name, "Please click on the target you want to travel to."); + minetest.chat_send_player(name, S("Please click on the target you want to travel to.")); return; end @@ -672,7 +686,8 @@ travelnet.on_receive_fields = function(pos, formname, fields, player) and station_network ) then travelnet.add_target( station_name, station_network, pos, owner_name, meta, owner_name ); else - minetest.chat_send_player(name, "Error: There is something wrong with the configuration of this station. ".. + minetest.chat_send_player(name, S("Error")..": ".. + S("There is something wrong with the configuration of this station.").. " DEBUG DATA: owner: "..( owner_name or "?").. " station_name: "..(station_name or "?").. " station_network: "..(station_network or "?").."."); @@ -685,7 +700,8 @@ travelnet.on_receive_fields = function(pos, formname, fields, player) or not( travelnet.targets ) or not( travelnet.targets[ owner_name ] ) or not( travelnet.targets[ owner_name ][ station_network ] )) then - minetest.chat_send_player(name, "Error: This travelnet is lacking data and/or improperly configured."); + minetest.chat_send_player(name, S("Error")..": ".. + S("This travelnet is lacking data and/or improperly configured.")); print( "ERROR: The travelnet at "..minetest.pos_to_string( pos ).." has a problem: ".. " DATA: owner: "..( owner_name or "?").. " station_name: "..(station_name or "?").. @@ -707,7 +723,8 @@ travelnet.on_receive_fields = function(pos, formname, fields, player) -- if the target station is gone if( not( travelnet.targets[ owner_name ][ station_network ][ fields.target ] )) then - minetest.chat_send_player(name, "Station '"..( fields.target or "?").." does not exist (anymore?) on this network."); + minetest.chat_send_player(name, S("Station '%s'"):format( fields.target or "?").." ".. + S("does not exist (anymore?) on this network.")); travelnet.update_formspec( pos, name, nil ); return; end @@ -716,7 +733,7 @@ travelnet.on_receive_fields = function(pos, formname, fields, player) if( not( travelnet.allow_travel( name, owner_name, station_network, station_name, fields.target ))) then return; end - minetest.chat_send_player(name, "Initiating transfer to station '"..( fields.target or "?").."'.'"); + minetest.chat_send_player(name, S("Initiating transfer to station '%s'."):format( fields.target or "?")); @@ -782,7 +799,8 @@ end travelnet.remove_box = function( pos, oldnode, oldmetadata, digger ) if( not( oldmetadata ) or oldmetadata=="nil" or not(oldmetadata.fields)) then - minetest.chat_send_player( digger:get_player_name(), "Error: Could not find information about the station that is to be removed."); + minetest.chat_send_player( digger:get_player_name(), S("Error")..": ".. + S("Could not find information about the station that is to be removed.")); return; end @@ -797,16 +815,19 @@ travelnet.remove_box = function( pos, oldnode, oldmetadata, digger ) or not( travelnet.targets[ owner_name ] ) or not( travelnet.targets[ owner_name ][ station_network ] )) then - minetest.chat_send_player( digger:get_player_name(), "Error: Could not find the station that is to be removed."); + minetest.chat_send_player( digger:get_player_name(), S("Error")..": ".. + S("Could not find the station that is to be removed.")); return; end travelnet.targets[ owner_name ][ station_network ][ station_name ] = nil; -- inform the owner - minetest.chat_send_player( owner_name, "Station '"..station_name.."' has been REMOVED from the network '"..station_network.."'."); + minetest.chat_send_player( owner_name, S("Station '%s'"):format(station_name ).." ".. + S("has been REMOVED from the network '%s'."):format(station_network)); if( digger ~= nil and owner_name ~= digger:get_player_name() ) then - minetest.chat_send_player( digger:get_player_name(), "Station '"..station_name.."' has been REMOVED from the network '"..station_network.."'."); + minetest.chat_send_player( digger:get_player_name(), S("Station '%s'"):format(station_name).. + S("has been REMOVED from the network '%s'."):format(station_network)); end -- save the updated network data in a savefile over server restart @@ -832,11 +853,11 @@ travelnet.can_dig = function( pos, player, description ) end if( not( meta ) or not( owner) or owner=='') then - minetest.chat_send_player(name, "This "..description.." has not been configured yet. Please set it up first to claim it. Afterwards you can remove it because you are then the owner."); + minetest.chat_send_player(name, S("This %s has not been configured yet. Please set it up first to claim it. Afterwards you can remove it because you are then the owner."):format(description)); return false; elseif( owner ~= name ) then - minetest.chat_send_player(name, "This "..description.." belongs to "..tostring( meta:get_string('owner'))..". You can't remove it."); + minetest.chat_send_player(name, S("This %s belongs to %s. You can't remove it."):format(description, tostring( meta:get_string('owner')))); return false; end return true; @@ -895,4 +916,3 @@ end -- upon server start, read the savefile travelnet.restore_data(); - diff --git a/locale/de.txt b/locale/de.txt new file mode 100644 index 0000000..2675c13 --- /dev/null +++ b/locale/de.txt @@ -0,0 +1,92 @@ +# Template + +### config.lua ### + +### init.lua ### + +allows to attach travelnet boxes to travelnets of other players = erlaubt es, Stationen zu den Reisenetzwerken anderer Spieler hinzuzufügen +allows to dig travelnet boxes which belog to nets of other players = erlaubt es, die Reisenetz-Stationen anderer Spieler zu entfernen + +[Mod travelnet] Error: Savefile '%s' could not be written. = [Mod travelnet] Fehler: Sicherungsdatei '%s' konnte nicht geschrieben werden. +[Mod travelnet] Error: Savefile '%s' not found. = [Mod travelnet] Fehler: Sicherungsdatei '%s' nicht gefunden. + +Back = Zurück +Exit = Ende + +Travelnet-box (unconfigured) = Reisenetz-Box (nicht konfiguriert) + +Configure this travelnet station = Konfiguration dieser Reisenetz-Box +Name of this station = Name dieser Reisenetz-Box +How do you call this place here? Example: \"my first house\", \"mine\", \"shop\"... = Wie willst du diesen Ort nennen? Beispiel: \"mein erstes Haus\", \"Mine\", \"Laden\"... +Assign to Network: = Station dem folgendem Netzwerk zuweisen: +You can have more than one network. If unsure, use \"%s\" = Du kannst mehrere Netzwerke anlegen. Falls du nicht weißt, was du tun sollst, wähle \"%s\" +Owned by: = Besitzer: +Unless you know what you are doing, leave this empty. = Wenn du nicht weißt, wozu dieses Feld dient, laß es leer. +Help = Hilfe +Save = Speichern +Update failed! Resetting this box on the travelnet. = Aktualisierung gescheitert. Konfiguration der Reisenetz-Box wird zurückgesetzt. +Station '%s' = Station '%s' +has been reattached to the network '%s'. = wurde dem Netzwerk '%s' wieder hinzugefügt. +Locked travelnet. Type /help for help: = Abgeschlossene Reisenetz-Box. Tippe /help für Hilfe: +Punch box to update target list. = Reisenetz-Box mit Linksklick aktualisieren. +Travelnet-Box = Reisenetz-Box +Name of this station: = Name dieser Station: +Assigned to Network: = Zugehöriges Netzwerk: +Click on target to travel there: = Klicke auf das Ziel um dorthin zu reisen: +G = E +This station is already the first one on the list. = Diese Reisenetz-Box ist bereits die erste auf der Liste. +This station is already the last one on the list. = Diese Reisenetz-Box ist bereits die letzte auf der Liste. +Position in list: = Listenposition: +move up = hoch +move down = runter +on travelnet '%s' = im Reisenetzwerk '%s' +owned by %s = Eigentum von %s +ready for usage. Right-click to travel, punch to update. = bereit für die Nutzung. Rechtsklick um zu Reisen, Linksklick für Update. +at %s m = in %s m Höhe +Error = Fehler +Please provide a name for this station. = Bitte gib einen Namen für diese Reisenetz-Box an. +Please provide the name of the network this station ought to be connected to. = Bitte gib einen Namen für das Netzwerk an zu dem diese Reisenetz-Box gehören soll. +There is no player with interact privilege named '%s'. Aborting. = Es gibt keinen Spieler mit interact-Recht names '%s'. Abbruch. +You do not have the travelnet_attach priv which is required to attach your box to the network of someone else. Aborting. = Dir fehlt das travelnet_attach-Recht, welches für das Hinzufügen von Reisenetz-Boxen zu Netzwerken nötig ist, die anderen Spielern gehören. Abbruch. +A station named '%s' already exists on this network. Please choose a diffrent name! = Eine Reisenetz-Box namens '%s' existiert bereits in diesem Netzwerk. Abbruch. +Network '%s' = Netzwerk '%s' +already contains the maximum number (=%s) of allowed stations per network. Please choose a diffrent/new network name. = enthält bereits die maixmale Anzahl (=%s) erlaubert Stationen pro Netzwerk. Bitte wähle ein anderes bzw. neues Netzwerk. +has been added to the network '%s' = wurde an das Netzwerk '%s' angeschlossen. +, which now consists of %s station(s). = , das nun aus %s Station(en) besteht. +Station: = Station: +Network: = Netzwerk: +No help available yet. = Noch keine Hilfe eingebaut. +Please click on the target you want to travel to. = Bitte klicke auf das Ziel zu dem du reisen willst. +There is something wrong with the configuration of this station. = Die Konfiguration dieser Reisenetz-Box ist fehlerhaft. +This travelnet is lacking data and/or improperly configured. = Diese Reisenetz-Box ist fehlerhaft oder unvollständig konfiguriert. +does not exist (anymore?) on this network. = gibt es nicht (mehr?) in diesem Netzwerk. +Initiating transfer to station '%s'. = leite Reise zur Station '%s' ein. +Could not find information about the station that is to be removed. = Konnte keine Informationen über die zu entfernende Station finden. +Could not find the station that is to be removed. = Konnte die zu entfernende Station nicht finden. +has been REMOVED from the network '%s'. = wurde vom Netzwerk '%s' ENTFERNT. +This %s has not been configured yet. Please set it up first to claim it. Afterwards you can remove it because you are then the owner. = Diese Reisenetz-Box wurde noch nicht konfiguriert. Bitte konfiguriere sie um sie in Besitz zu nehmen. Anschließend kannst du sie auch wieder entfernen da du dann der Besitzer bist. +This %s belongs to %s. You can't remove it. = Diese Reisenetz-Box gehört %s. Du kannst sie nicht entfernen. + + +### travelnet.lua ### +Not enough vertical space to place the travelnet box! = Nicht genug Platz (vertikal) um die Reisenetz-Box zu setzen! + + +### elevator.lua ### +Congratulations! This is your first elevator. You can build an elevator network by placing further elevators somewhere above or below this one. Just make sure that the x and z coordinate are the same. = +This elevator will automaticly connect to the other elevators you have placed at diffrent heights. Just enter a station name and click on \"store\" to set it up. Or just punch it to set the height as station name. = Dieser Aufzug wird sich automatisch mit anderen Aufzügen verbinden die du auf unterschiedlichen Höhen positioniert hast. Gib einfach einen Namen für diese Station hier ein und klicke auf \"Speichern\" um die Station einzurichten. Oder mache einen Linksklick um die Höhe als Stationsname zu setzen. +Your nearest elevator network is located = Dein nächstgelegenes Aufzugs-Netzwerk befindet sich +m behind this elevator and = m hinter diesem Aufzug und +m in front of this elevator and = m vor diesem Aufzug und +m to the left = m links +m to the right = m rechts +, located at x = , an Position x +This elevator here will start a new shaft/network. = Dieser Aufzug hier wird einen neuen Schaft bzw. ein neues Netzwerk erstellen. +This is your first elevator. It differs from travelnet networks by only allowing movement in vertical direction (up or down). All further elevators which you will place at the same x,z coordinates at differnt heights will be able to connect to this elevator. = Dies ist dein erster Aufzug. Der Aufzug unterscheidet sich von Reisenetz-Boxen insofern als daß er nur Reisen in vertikaler Richtung (hoch und runter) erlaubt. Alle folgenden Aufzüge, die du an die selben x,z Koordinaten auf verschiedenen Höhenpositionen setzen wirst, werden sich automatisch mit diesem Aufzug verbinden. +Elevator = Aufzug +Elevator (unconfigured) = Aufzug (nicht konfiguriert) + + +### doors.lua ### +elevator door (open) = Aufzugstür (offen) +elevator door (closed) = Aufzugstür (geschlossen) diff --git a/locale/template.txt b/locale/template.txt new file mode 100644 index 0000000..661dbdd --- /dev/null +++ b/locale/template.txt @@ -0,0 +1,92 @@ +# Template + +### config.lua ### + +### init.lua ### + +allows to attach travelnet boxes to travelnets of other players = +allows to dig travelnet boxes which belog to nets of other players = + +[Mod travelnet] Error: Savefile '%s' could not be written. = +[Mod travelnet] Error: Savefile '%s' not found. = + +Back = +Exit = + +Travelnet-box (unconfigured) = + +Configure this travelnet station = +Name of this station = +How do you call this place here? Example: \"my first house\", \"mine\", \"shop\"... = +Assign to Network: = +You can have more than one network. If unsure, use \"%s\" = +Owned by: = +Unless you know what you are doing, leave this empty. = +Help = +Save = +Update failed! Resetting this box on the travelnet. = +Station '%s' = +has been reattached to the network '%s'. = +Locked travelnet. Type /help for help: = +Punch box to update target list. = +Travelnet-Box = +Name of this station: = +Assigned to Network: = +Click on target to travel there: = +G = +This station is already the first one on the list. = +This station is already the last one on the list. = +Position in list: = +move up = +move down = +on travelnet '%s' = +owned by %s = +ready for usage. Right-click to travel, punch to update. = +at %s m = +Error = +Please provide a name for this station. = +Please provide the name of the network this station ought to be connected to. = +There is no player with interact privilege named '%s'. Aborting. = +You do not have the travelnet_attach priv which is required to attach your box to the network of someone else. Aborting. = +A station named '%s' already exists on this network. Please choose a diffrent name! = +Network '%s' = +already contains the maximum number (=%s) of allowed stations per network. Please choose a diffrent/new network name. = +has been added to the network '%s' = +, which now consists of %s station(s). = +Station: = +Network: = +No help available yet. = +Please click on the target you want to travel to. = +There is something wrong with the configuration of this station. = +This travelnet is lacking data and/or improperly configured. = +does not exist (anymore?) on this network. = +Initiating transfer to station '%s'. = +Could not find information about the station that is to be removed. = +Could not find the station that is to be removed. = +has been REMOVED from the network '%s'. = +This %s has not been configured yet. Please set it up first to claim it. Afterwards you can remove it because you are then the owner. = +This %s belongs to %s. You can't remove it. = + + +### travelnet.lua ### +Not enough vertical space to place the travelnet box! = + + +### elevator.lua ### +Congratulations! This is your first elevator. You can build an elevator network by placing further elevators somewhere above or below this one. Just make sure that the x and z coordinate are the same. = +This elevator will automaticly connect to the other elevators you have placed at diffrent heights. Just enter a station name and click on \"store\" to set it up. Or just punch it to set the height as station name. = +Your nearest elevator network is located = +m behind this elevator and = +m in front of this elevator and = +m to the left = +m to the right = +, located at x = +This elevator here will start a new shaft/network. = +This is your first elevator. It differs from travelnet networks by only allowing movement in vertical direction (up or down). All further elevators which you will place at the same x,z coordinates at differnt heights will be able to connect to this elevator. = +Elevator = +Elevator (unconfigured) = + + +### doors.lua ### +elevator door (open) = +elevator door (closed) = diff --git a/travelnet.lua b/travelnet.lua index 7bf534b..aee7f64 100644 --- a/travelnet.lua +++ b/travelnet.lua @@ -3,9 +3,11 @@ -- digging of such a travelnet is limited to the owner and to people with the travelnet_remove priv (useful for admins to clean up) -- (this can be overrided in config.lua) -- Author: Sokomine +local S = travelnet.S; + minetest.register_node("travelnet:travelnet", { - description = "Travelnet box", + description = S("Travelnet-Box"), drawtype = "mesh", mesh = "travelnet.obj", @@ -81,7 +83,7 @@ minetest.register_node("travelnet:travelnet", { local pos = pointed_thing.above; if( minetest.get_node({x=pos.x, y=pos.y+1, z=pos.z}).name ~= "air" ) then - minetest.chat_send_player( placer:get_player_name(), 'Not enough vertical space to place the travelnet box!' ) + minetest.chat_send_player( placer:get_player_name(), S('Not enough vertical space to place the travelnet box!')) return; end return minetest.item_place(itemstack, placer, pointed_thing);