diff options
85 files changed, 17673 insertions, 2773 deletions
diff --git a/advtrains/atc.lua b/advtrains/atc.lua index 8e54b08..e14e5c1 100644 --- a/advtrains/atc.lua +++ b/advtrains/atc.lua @@ -1,6 +1,9 @@ --atc.lua --registers and controls the ATC system +-- Get current translator +local S = advtrains.translate + local atc={} local eval_conditional @@ -107,7 +110,7 @@ local apn_func=function(pos) -- FIX for long-persisting ndb bug: there's no node in parameter 2 of this function! local meta=minetest.get_meta(pos) if meta then - meta:set_string("infotext", attrans("Unconfigured ATC controller")) + meta:set_string("infotext", S("Unconfigured ATC controller")) meta:set_string("formspec", atc.get_atc_controller_formspec(pos, meta)) end end @@ -129,27 +132,15 @@ advtrains.atc_function = function(def, preset, suffix, rotation) local meta=minetest.get_meta(pos) if meta then if not fields.save then - --[[--maybe only the dropdown changed - if fields.mode then - meta:set_string("mode", idxtrans[fields.mode]) - if fields.mode=="digiline" then - meta:set_string("infotext", attrans("ATC controller, mode @1\nChannel: @2", fields.mode, meta:get_string("command")) ) - else - meta:set_string("infotext", attrans("ATC controller, mode @1\nCommand: @2", fields.mode, meta:get_string("command")) ) - end - meta:set_string("formspec", atc.get_atc_controller_formspec(pos, meta)) - end]]-- return end --meta:set_string("mode", idxtrans[fields.mode]) meta:set_string("command", fields.command) --meta:set_string("command_on", fields.command_on) meta:set_string("channel", fields.channel) - --if fields.mode=="digiline" then - -- meta:set_string("infotext", attrans("ATC controller, mode @1\nChannel: @2", fields.mode, meta:get_string("command")) ) - --else - meta:set_string("infotext", attrans("ATC controller, mode @1\nCommand: @2", "-", meta:get_string("command")) ) - --end + + meta:set_string("infotext", S("ATC controller, Command: @1", meta:get_string("command")) ) + meta:set_string("formspec", atc.get_atc_controller_formspec(pos, meta)) local pts=minetest.pos_to_string(pos) @@ -178,16 +169,11 @@ function atc.get_atc_controller_formspec(pos, meta) if mode<3 then formspec=formspec .."style[command;font=mono]" - .."field[0.8,1.5;7,1;command;"..attrans("Command")..";"..minetest.formspec_escape(command).."]" - if tonumber(mode)==2 then - formspec=formspec - .."style[command_on;font=mono]" - .."field[0.8,3;7,1;command_on;"..attrans("Command (on)")..";"..minetest.formspec_escape(command_on).."]" - end + .."field[0.8,1.5;7,1;command;"..S("Command")..";"..minetest.formspec_escape(command).."]" else - formspec=formspec.."field[0.8,1.5;7,1;channel;"..attrans("Digiline channel")..";"..minetest.formspec_escape(channel).."]" + formspec=formspec.."field[0.8,1.5;7,1;channel;"..S("Digiline channel")..";"..minetest.formspec_escape(channel).."]" end - return formspec.."button_exit[0.5,4.5;7,1;save;"..attrans("Save").."]" + return formspec.."button_exit[0.5,4.5;7,1;save;"..S("Save").."]" end --from trainlogic.lua train step @@ -234,7 +220,7 @@ local matchptn={ advtrains.train_ensure_init(id, train) -- no one minds if this failed... this shouldn't even be called without train being initialized... else - atwarn(sid(id), attrans("ATC Reverse command warning: didn't reverse train, train moving.")) + atwarn(sid(id), S("ATC Reverse command warning: didn't reverse train, train moving.")) end return 1 end, @@ -246,11 +232,11 @@ local matchptn={ end, ["K"] = function(id, train) if train.door_open == 0 then - atwarn(sid(id), attrans("ATC Kick command warning: doors are closed.")) + atwarn(sid(id), S("ATC Kick command warning: doors are closed.")) return 1 end if train.velocity > 0 then - atwarn(sid(id), attrans("ATC Kick command warning: train moving.")) + atwarn(sid(id), S("ATC Kick command warning: train moving.")) return 1 end local tp = train.trainparts @@ -324,7 +310,7 @@ eval_conditional = function(command, arrow, speed) local nest, pos, elsepos=0, 1 while nest>=0 do if pos>#rest then - atwarn(sid(id), attrans("ATC command syntax error: I statement not closed: @1",command)) + atwarn(sid(id), S("ATC command syntax error: I statement not closed: @1",command)) return "" end local char=string.sub(rest, pos, pos) @@ -388,7 +374,7 @@ function atc.execute_atc_command(id, train) return end end - atwarn(sid(id), attrans("ATC command parse error: Unknown command: @1", command)) + atwarn(sid(id), S("ATC command parse error: Unknown command: @1", command)) atc.train_reset_command(train, true) end diff --git a/advtrains/copytool.lua b/advtrains/copytool.lua index c63551e..cdfbd2e 100644 --- a/advtrains/copytool.lua +++ b/advtrains/copytool.lua @@ -4,8 +4,11 @@ -- 4.712389 = 1.5pi; sin(1.5pi) = -1 -- 7.853981 = 2.5pi; sin(2.5pi) = 1 +-- Get current translator +local S = advtrains.translate + minetest.register_tool("advtrains:copytool", { - description = attrans("Train copy/paste tool\n\nLeft-click: copy train\nRight-click: paste train"), + description = S("Train copy/paste tool\n\nLeft-click: copy train\nRight-click: paste train"), inventory_image = "advtrains_copytool.png", wield_image = "advtrains_copytool.png", stack_max = 1, @@ -38,23 +41,23 @@ minetest.register_tool("advtrains:copytool", { local prevpos = advtrains.get_adjacent_rail(pointed_thing.under, tconns, plconnid, {default=true}) if not prevpos then - minetest.chat_send_player(pname, attrans("The track you are trying to place the wagon on is not long enough.")) + minetest.chat_send_player(pname, S("The track you are trying to place the wagon on is not long enough.")) return end local meta = itemstack:get_meta() if not meta then - minetest.chat_send_player(pname, attrans("The clipboard couldn't access the metadata. Paste failed.")) + minetest.chat_send_player(pname, S("The clipboard couldn't access the metadata. Paste failed.")) return end local clipboard = meta:get_string("clipboard") if (clipboard == "") then - minetest.chat_send_player(pname, attrans("The clipboard is empty.")); + minetest.chat_send_player(pname, S("The clipboard is empty.")); return end clipboard = minetest.deserialize(clipboard) if (clipboard.wagons == nil) then - minetest.chat_send_player(pname, attrans("The clipboard is empty.")); + minetest.chat_send_player(pname, S("The clipboard is empty.")); return end @@ -71,7 +74,7 @@ minetest.register_tool("advtrains:copytool", { local train = advtrains.trains[id] train.off_track = train.end_index<train.path_trk_b if (train.off_track) then - minetest.chat_send_player(pname, attrans("Back of train would end up off track, cancelling.")) + minetest.chat_send_player(pname, S("Back of train would end up off track, cancelling.")) advtrains.remove_train(id) return end @@ -89,19 +92,19 @@ minetest.register_tool("advtrains:copytool", { local le = pointed_thing.ref:get_luaentity() if (le == nil) then - minetest.chat_send_player(user:get_player_name(), attrans("No such lua entity.")) + minetest.chat_send_player(user:get_player_name(), S("No such lua entity.")) return end local wagon = advtrains.wagons[le.id] if (not (le.id and advtrains.wagons[le.id])) then - minetest.chat_send_player(user:get_player_name(), attrans("No such wagon: @1.", le.id)) + minetest.chat_send_player(user:get_player_name(), S("No such wagon: @1.", le.id)) return end local train = advtrains.trains[wagon.train_id] if (not train) then - minetest.chat_send_player(user:get_player_name(), attrans("No such train: @1.", wagon.train_id)) + minetest.chat_send_player(user:get_player_name(), S("No such train: @1.", wagon.train_id)) return end @@ -173,11 +176,11 @@ minetest.register_tool("advtrains:copytool", { local meta = itemstack:get_meta() if not meta then - minetest.chat_send_player(pname, attrans("The clipboard couldn't access the metadata. Copy failed.")) + minetest.chat_send_player(pname, S("The clipboard couldn't access the metadata. Copy failed.")) return end meta:set_string("clipboard", minetest.serialize(clipboard)) - minetest.chat_send_player(user:get_player_name(), attrans("Train copied.")) + minetest.chat_send_player(user:get_player_name(), S("Train copied.")) return itemstack end }) diff --git a/advtrains/couple.lua b/advtrains/couple.lua index 4933dd8..cb325a0 100644 --- a/advtrains/couple.lua +++ b/advtrains/couple.lua @@ -18,6 +18,9 @@ -- train.couple_* contain references to ObjectRefs of couple objects, which contain all relevant information -- These objectRefs will delete themselves once the couples no longer match (see below) +-- Get current translator +local S = advtrains.translate + advtrains.coupler_types = {} function advtrains.register_coupler_type(code, name) @@ -25,8 +28,8 @@ function advtrains.register_coupler_type(code, name) end -- Register some default couplers -advtrains.register_coupler_type("chain", attrans("Buffer and Chain Coupler")) -advtrains.register_coupler_type("scharfenberg", attrans("Scharfenberg Coupler")) +advtrains.register_coupler_type("chain", S("Buffer and Chain Coupler")) +advtrains.register_coupler_type("scharfenberg", S("Scharfenberg Coupler")) for _, name in pairs {"couple", "decouple"} do local t = {} @@ -245,7 +248,7 @@ function advtrains.couple_trains(init_train, invert_init_train, stat_train, stat -- sanity check, prevent coupling if train would be longer than 20 after coupling local tot_len = init_wagoncnt + stat_wagoncnt if tot_len > advtrains.TRAIN_MAX_WAGONS then - atwarn("Cannot couple",stat_train.id,"and",init_train.id,"- train would have length",tot_len,"which is above the limit of",advtrains.TRAIN_MAX_WAGONS) + atwarn(S("Cannot couple @1 and @2 - train would have length @3 which is above the limit of @4", stat_train.id, init_train.id, tot_len, advtrains.TRAIN_MAX_WAGONS)) return end @@ -351,12 +354,12 @@ function advtrains.check_matching_coupler_types(t1, t1_front, t2, t2_front) for typ,_ in pairs(t1_cplt) do table.insert(t1_cplhr, advtrains.coupler_types[typ] or typ) end - if #t1_cplhr==0 then t1_cplhr[1]=attrans("<No coupler>") end + if #t1_cplhr==0 then t1_cplhr[1]=S("<No coupler>") end for typ,_ in pairs(t2_cplt) do table.insert(t2_cplhr, advtrains.coupler_types[typ] or typ) end - if #t2_cplhr==0 then t2_cplhr[1]=attrans("<No coupler>") end - return false, attrans("Can not couple: The couplers of the trains do not match (@1 and @2).", table.concat(t1_cplhr, ","), table.concat(t2_cplhr, ",")) + if #t2_cplhr==0 then t2_cplhr[1]=S("<No coupler>") end + return false, S("Can not couple: The couplers of the trains do not match (@1 and @2).", table.concat(t1_cplhr, ","), table.concat(t2_cplhr, ",")) end -- DECOUPLING -- diff --git a/advtrains/craft_items.lua b/advtrains/craft_items.lua index 1188b64..6b1dcef 100644 --- a/advtrains/craft_items.lua +++ b/advtrains/craft_items.lua @@ -1,23 +1,26 @@ +-- Get current translator +local S = advtrains.translate + core.register_craftitem("advtrains:boiler", { - description = attrans("Boiler"), + description = S("Boiler"), inventory_image = "advtrains_boiler.png", }) core.register_craftitem("advtrains:driver_cab", { - description = attrans("Driver's cab"), + description = S("Driver's cab"), inventory_image = "advtrains_driver_cab.png", }) core.register_craftitem("advtrains:wheel", { - description = attrans("Wheel"), + description = S("Wheel"), inventory_image = "advtrains_wheel.png", }) core.register_craftitem("advtrains:chimney", { - description = attrans("Chimney"), + description = S("Chimney"), inventory_image = "advtrains_chimney.png", }) diff --git a/advtrains/formspec.lua b/advtrains/formspec.lua index 8894354..86d8b27 100644 --- a/advtrains/formspec.lua +++ b/advtrains/formspec.lua @@ -1,6 +1,9 @@ local sformat = string.format local fsescape = minetest.formspec_escape +-- Get current translator +local S = advtrains.translate + local function make_list(entries) local t = {} for k, v in ipairs(entries) do @@ -12,7 +15,7 @@ end local function S_wrapper(f, i0) return function(...) local args = {...} - args[i0] = attrans(unpack(args,i0)) + args[i0] = S(unpack(args,i0)) return f(unpack(args,1,i0)) end end diff --git a/advtrains/init.lua b/advtrains/init.lua index 0d76ec0..cd63104 100644 --- a/advtrains/init.lua +++ b/advtrains/init.lua @@ -22,12 +22,6 @@ Copyright (C) 2016-2020 Moritz Blei (orwell96) and contributors local lot = os.clock() minetest.log("action", "[advtrains] Loading...") --- There is no need to support 0.4.x anymore given that the compatitability with it is already broken by 1bb1d825f46af3562554c12fba35a31b9f7973ff -attrans = minetest.get_translator ("advtrains") -function attrans_formspec(...) - return minetest.formspec_escape(attrans(...)) -end - --advtrains advtrains = {trains={}, player_to_train_mapping={}} @@ -56,6 +50,17 @@ advtrains.TRAIN_MAX_WAGONS = 20 -- ========================================================================== +advtrains.modpath = minetest.get_modpath("advtrains") + +-- Initialize internationalization (using ywang's poconvert) +advtrains.poconvert = dofile(advtrains.modpath.."/poconvert.lua") +advtrains.poconvert.from_flat("advtrains") +-- ask engine for translator instance, this will load the translation files +advtrains.translate = core.get_translator("advtrains") + +-- Get current translator +local S = advtrains.translate + -- Use a global slowdown factor to slow down train movements. Now a setting advtrains.DTIME_LIMIT = tonumber(minetest.settings:get("advtrains_dtime_limit")) or 0.2 advtrains.SAVE_INTERVAL = tonumber(minetest.settings:get("advtrains_save_interval")) or 60 @@ -73,7 +78,7 @@ end local no_action=false local function reload_saves() - atwarn("Restoring saved state in 1 second...") + atwarn(S("Restoring saved state in 1 second...")) no_action=true advtrains.lock_path_inval = false --read last save state and continue, as if server was restarted @@ -84,13 +89,11 @@ local function reload_saves() end minetest.after(1, function() advtrains.load() - atwarn("Reload successful!") + atwarn(S("Reload successful!")) advtrains.ndb.restore_all() end) end -advtrains.modpath = minetest.get_modpath("advtrains") - --Advtrains dump (special treatment of pos and sigd) function atdump(t, intend) local str @@ -204,10 +207,6 @@ advtrains.meseconrules = advtrains.fpath=minetest.get_worldpath().."/advtrains" -advtrains.poconvert = dofile(advtrains.modpath.."/poconvert.lua") -advtrains.poconvert.from_flat("advtrains") -attrans = minetest.get_translator("advtrains") - advtrains.speed = dofile(advtrains.modpath.."/speed.lua") advtrains.formspec = dofile(advtrains.modpath.."/formspec.lua") advtrains.texture = dofile(advtrains.modpath.."/texture.lua") @@ -349,7 +348,7 @@ function advtrains.avt_load() end end for wid, _ in pairs(todel) do - atwarn("Removing unused wagon", wid, "from wagon_save table.") + atwarn(S("Removing unused wagon"), wid, S("from wagon_save table.")) advtrains.wagon_save[wid]=nil end else @@ -414,7 +413,7 @@ function advtrains.load_version_4() end end for wid, _ in pairs(todel) do - atwarn("Removing unused wagon", wid, "from wagon_save table.") + atwarn(S("Removing unused wagon"), wid, S("from wagon_save table.")) advtrains.wagon_save[wid]=nil end end @@ -502,7 +501,7 @@ advtrains.avt_save = function(remove_players_from_wagons) --then save it tmp_trains[id]=v else - atwarn("Train",id,"had no wagons left because of some bug. It is being deleted. Wave it goodbye!") + atwarn(S("Train @1 had no wagons left because of some bug. It is being deleted. Wave it goodbye!", id)) advtrains.remove_train(id) end end @@ -583,7 +582,7 @@ advtrains.avt_save = function(remove_players_from_wagons) local succ, err = serialize_lib.save_atomic_multiple(parts_table, advtrains.fpath.."_", callbacks_table) if not succ then - atwarn("Saving failed: "..err) + atwarn(S("Saving failed: @1", err)) else -- store version advtrains.save_component(4, "version") @@ -686,7 +685,7 @@ end function advtrains.save(remove_players_from_wagons) if not init_load then --wait... we haven't loaded yet?! - atwarn("Instructed to save() but load() was never called!") + atwarn(S("Instructed to save() but load() was never called!")) return end @@ -715,7 +714,7 @@ function advtrains.save(remove_players_from_wagons) end minetest.register_on_shutdown(function() if within_mainstep then - atwarn("Crash during advtrains main step - skipping the shutdown save operation to not save inconsistent data!") + atwarn(S("Crash during advtrains main step - skipping the shutdown save operation to not save inconsistent data!")) else advtrains.save() end @@ -727,10 +726,10 @@ end) minetest.register_chatcommand("at_empty_seats", { params = "", -- Short parameter description - description = "Detach all players, especially the offline ones, from all trains. Use only when no one serious is on a train.", -- Full description + description = S("Detach all players, especially the offline ones, from all trains. Use only when no one serious is on a train."), -- Full description privs = {train_operator=true, server=true}, -- Require the "privs" privilege to run func = function(name, param) - atwarn("Data is being saved. While saving, advtrains will remove the players from trains. Save files will be reloaded afterwards!") + atwarn(S("Data is being saved. While saving, advtrains will remove the players from trains. Save files will be reloaded afterwards!")) advtrains.save(true) reload_saves() end, @@ -739,60 +738,60 @@ minetest.register_chatcommand("at_empty_seats", minetest.register_chatcommand("at_reroute", { params = "", - description = "Delete all train routes, force them to recalculate", + description = S("Delete all train routes, force them to recalculate"), privs = {train_operator=true}, -- Only train operator is required, since this is relatively safe. func = function(name, param) advtrains.invalidate_all_paths() - return true, "Successfully invalidated train routes" + return true, S("Successfully invalidated train routes") end, }) minetest.register_chatcommand("at_whereis", { params = "<train id>", - description = "Returns the position of the train with the given id", + description = S("Returns the position of the train with the given id"), privs = {train_operator = true}, func = function(name,param) local train = advtrains.trains[param] if not train or not train.last_pos then - return false, "Train "..param.." does not exist or is invalid" + return false, S("Train @1 does not exist or is invalid", param) else - return true, "Train "..param.." is at "..minetest.pos_to_string(train.last_pos) + return true, S("Train @1 is at @2", param, minetest.pos_to_string(train.last_pos)) end end, }) minetest.register_chatcommand("at_tp", { params = "<train id>", - description = "Teleports you to the position of the train with the given id", + description = S("Teleports you to the position of the train with the given id"), privs = {train_operator = true, teleport = true}, func = function(name,param) local train = advtrains.trains[param] if not train or not train.last_pos then - return false, "Train "..param.." does not exist or is invalid" + return false, S("Train @1 does not exist or is invalid", param) else minetest.get_player_by_name(name):set_pos(train.last_pos) - return true, "Teleporting to train "..param + return true, S("Teleporting to train @1", param) end end, }) minetest.register_chatcommand("at_disable_step", { params = "<yes/no>", - description = "Disable the advtrains globalstep temporarily", + description = S("Disable the advtrains globalstep temporarily"), privs = {server=true}, func = function(name, param) if minetest.is_yes(param) then -- disable everything, and turn off saving no_action = true; - atwarn("The advtrains globalstep has been disabled. Trains are not moving, and no data is saved! Run '/at_disable_step no' to enable again!") - return true, "Disabled advtrains successfully" + atwarn(S("The advtrains globalstep has been disabled. Trains are not moving, and no data is saved! Run '/at_disable_step no' to enable again!")) + return true, S("Disabled advtrains successfully") elseif no_action then - atwarn("Re-enabling advtrains globalstep...") + atwarn(S("Re-enabling advtrains globalstep...")) reload_saves() return true else - return false, "Advtrains is already running normally!" + return false, S("Advtrains is already running normally!") end end, }) @@ -800,10 +799,10 @@ minetest.register_chatcommand("at_disable_step", minetest.register_chatcommand("at_status", { params = "", - description = "Print advtrains status info", + description = S("Print advtrains status info"), privs = {train_operator = true}, func = function(name, param) - return true, advtrains.print_concat_table({"Advtrains Status: no_action",no_action,"slowdown",advtrains.global_slowdown,"(log",math.log(advtrains.global_slowdown),")"}) + return true, S("Advtrains Status: no_action @1 slowdown @2 (log @3)", no_action, advtrains.global_slowdown, math.log(advtrains.global_slowdown)) end, }) diff --git a/advtrains/misc_nodes.lua b/advtrains/misc_nodes.lua index bcf7329..8720272 100644 --- a/advtrains/misc_nodes.lua +++ b/advtrains/misc_nodes.lua @@ -1,5 +1,8 @@ --all nodes that do not fit in any other category +-- Get current translator +local S = advtrains.translate + function advtrains.register_platform(modprefix, preset) local ndef=minetest.registered_nodes[preset] if not ndef then @@ -13,7 +16,7 @@ function advtrains.register_platform(modprefix, preset) local desc=ndef.description or "" local nodename=string.match(preset, ":(.+)$") minetest.register_node(modprefix .. ":platform_low_"..nodename, { - description = attrans("@1 Platform (low)", desc), + description = S("@1 Platform (low)", desc), tiles = {btex.."^advtrains_platform.png", btex, btex, btex, btex, btex}, groups = {cracky = 1, not_blocking_trains = 1, platform=1}, sounds = ndef.sounds, @@ -30,7 +33,7 @@ function advtrains.register_platform(modprefix, preset) sunlight_propagates = true, }) minetest.register_node(modprefix .. ":platform_high_"..nodename, { - description = attrans("@1 Platform (high)", desc), + description = S("@1 Platform (high)", desc), tiles = {btex.."^advtrains_platform.png", btex, btex, btex, btex, btex}, groups = {cracky = 1, not_blocking_trains = 1, platform=2}, sounds = ndef.sounds, @@ -56,7 +59,7 @@ function advtrains.register_platform(modprefix, preset) } } minetest.register_node(modprefix..":platform_45_"..nodename, { - description = attrans("@1 Platform (45 degree)", desc), + description = S("@1 Platform (45 degree)", desc), groups = {cracky = 1, not_blocking_trains = 1, platform=2}, sounds = ndef.sounds, drawtype = "mesh", @@ -78,7 +81,7 @@ function advtrains.register_platform(modprefix, preset) } } minetest.register_node(modprefix..":platform_45_low_"..nodename, { - description = attrans("@1 Platform (low, 45 degree)", desc), + description = S("@1 Platform (low, 45 degree)", desc), groups = {cracky = 1, not_blocking_trains = 1, platform=2}, sounds = ndef.sounds, drawtype = "mesh", diff --git a/advtrains/po/advtrains.pot b/advtrains/po/advtrains.pot index 6fda1d7..db19fc9 100644 --- a/advtrains/po/advtrains.pot +++ b/advtrains/po/advtrains.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: advtrains\n" "Report-Msgid-Bugs-To: advtrains-discuss@lists.sr.ht\n" -"POT-Creation-Date: 2023-10-09 11:02+0200\n" +"POT-Creation-Date: 2025-06-10 21:40+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -17,54 +17,47 @@ msgstr "" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" -#: advtrains/atc.lua:109 +#: atc.lua msgid "Unconfigured ATC controller" msgstr "" -#: advtrains/atc.lua:150 -msgid "" -"ATC controller, mode @1\n" -"Command: @2" +#: atc.lua +msgid "ATC controller, Command: @1" msgstr "" -#: advtrains/atc.lua:180 +#: atc.lua msgid "Command" msgstr "" -#: advtrains/atc.lua:184 -msgid "Command (on)" -msgstr "" - -#: advtrains/atc.lua:187 +#: atc.lua msgid "Digiline channel" msgstr "" -#: advtrains/atc.lua:189 advtrains_line_automation/stoprail.lua:65 -#: advtrains_luaautomation/active_common.lua:48 +#: atc.lua wagons.lua msgid "Save" msgstr "" -#: advtrains/atc.lua:236 +#: atc.lua msgid "ATC Reverse command warning: didn't reverse train, train moving." msgstr "" -#: advtrains/atc.lua:248 +#: atc.lua msgid "ATC Kick command warning: doors are closed." msgstr "" -#: advtrains/atc.lua:252 +#: atc.lua msgid "ATC Kick command warning: train moving." msgstr "" -#: advtrains/atc.lua:322 +#: atc.lua msgid "ATC command syntax error: I statement not closed: @1" msgstr "" -#: advtrains/atc.lua:385 +#: atc.lua msgid "ATC command parse error: Unknown command: @1" msgstr "" -#: advtrains/copytool.lua:8 +#: copytool.lua msgid "" "Train copy/paste tool\n" "\n" @@ -72,561 +65,561 @@ msgid "" "Right-click: paste train" msgstr "" -#: advtrains/copytool.lua:29 +#: copytool.lua msgid "You do not have the @1 privilege." msgstr "" -#: advtrains/copytool.lua:41 +#: copytool.lua msgid "The track you are trying to place the wagon on is not long enough." msgstr "" -#: advtrains/copytool.lua:47 +#: copytool.lua msgid "The clipboard couldn't access the metadata. Paste failed." msgstr "" -#: advtrains/copytool.lua:52 advtrains/copytool.lua:57 +#: copytool.lua msgid "The clipboard is empty." msgstr "" -#: advtrains/copytool.lua:74 +#: copytool.lua msgid "Back of train would end up off track, cancelling." msgstr "" -#: advtrains/copytool.lua:92 +#: copytool.lua msgid "No such lua entity." msgstr "" -#: advtrains/copytool.lua:98 +#: copytool.lua msgid "No such wagon: @1." msgstr "" -#: advtrains/copytool.lua:104 +#: copytool.lua msgid "No such train: @1." msgstr "" -#: advtrains/copytool.lua:176 +#: copytool.lua msgid "The clipboard couldn't access the metadata. Copy failed." msgstr "" -#: advtrains/copytool.lua:180 +#: copytool.lua msgid "Train copied." msgstr "" -#: advtrains/couple.lua:28 +#: couple.lua msgid "Buffer and Chain Coupler" msgstr "" -#: advtrains/couple.lua:29 +#: couple.lua msgid "Scharfenberg Coupler" msgstr "" -#: advtrains/couple.lua:185 +#: couple.lua msgid "" "You are not allowed to couple trains without the train_operator privilege." msgstr "" -#: advtrains/couple.lua:329 advtrains/couple.lua:333 +#: couple.lua +msgid "" +"Cannot couple @1 and @2 - train would have length @3 which is above the " +"limit of @4" +msgstr "" + +#: couple.lua msgid "<No coupler>" msgstr "" -#: advtrains/couple.lua:334 +#: couple.lua msgid "Can not couple: The couplers of the trains do not match (@1 and @2)." msgstr "" -#: advtrains/craft_items.lua:3 +#: craft_items.lua msgid "Boiler" msgstr "" -#: advtrains/craft_items.lua:9 +#: craft_items.lua msgid "Driver's cab" msgstr "" -#: advtrains/craft_items.lua:15 +#: craft_items.lua msgid "Wheel" msgstr "" -#: advtrains/craft_items.lua:21 +#: craft_items.lua msgid "Chimney" msgstr "" -#: advtrains/misc_nodes.lua:16 -msgid "@1 Platform (low)" -msgstr "" - -#: advtrains/misc_nodes.lua:33 -msgid "@1 Platform (high)" +#: init.lua +msgid "Restoring saved state in 1 second..." msgstr "" -#: advtrains/misc_nodes.lua:59 -msgid "@1 Platform (45 degree)" +#: init.lua +msgid "Reload successful!" msgstr "" -#: advtrains/misc_nodes.lua:81 -msgid "@1 Platform (low, 45 degree)" +#: init.lua +msgid "Removing unused wagon" msgstr "" -#: advtrains/protection.lua:7 -msgid "Can place, remove and operate trains" +#: init.lua +msgid "from wagon_save table." msgstr "" -#: advtrains/protection.lua:12 +#: init.lua msgid "" -"Can place, remove and operate any train, regardless of owner, whitelist, or " -"protection" +"Train @1 had no wagons left because of some bug. It is being deleted. Wave " +"it goodbye!" msgstr "" -#: advtrains/protection.lua:18 -msgid "Can place and dig tracks in unprotected areas" +#: init.lua +msgid "Saving failed: @1" msgstr "" -#: advtrains/protection.lua:24 -msgid "Can operate turnouts and signals in unprotected areas" +#: init.lua +msgid "Instructed to save() but load() was never called!" msgstr "" -#: advtrains/protection.lua:148 +#: init.lua msgid "" -"You are not allowed to build near tracks without the track_builder privilege." +"Crash during advtrains main step - skipping the shutdown save operation to " +"not save inconsistent data!" msgstr "" -#: advtrains/protection.lua:148 +#: init.lua msgid "" -"You are not allowed to build tracks without the track_builder privilege." +"Detach all players, especially the offline ones, from all trains. Use only " +"when no one serious is on a train." msgstr "" -#: advtrains/protection.lua:153 -msgid "You are not allowed to build near tracks at this protected position." +#: init.lua +msgid "" +"Data is being saved. While saving, advtrains will remove the players from " +"trains. Save files will be reloaded afterwards!" msgstr "" -#: advtrains/protection.lua:153 -msgid "You are not allowed to build tracks at this protected position." +#: init.lua +msgid "Delete all train routes, force them to recalculate" msgstr "" -#: advtrains/protection.lua:184 -msgid "" -"You are not allowed to operate turnouts and signals without the " -"railway_operator privilege." +#: init.lua +msgid "Successfully invalidated train routes" msgstr "" -#: advtrains/signals.lua:63 -msgid "Lampless Signal" +#: init.lua +msgid "Returns the position of the train with the given id" msgstr "" -#: advtrains/signals.lua:127 -msgid "Signal" +#: init.lua +msgid "Train @1 does not exist or is invalid" msgstr "" -#: advtrains/signals.lua:191 -msgid "Wallmounted Signal (left)" +#: init.lua +msgid "Train @1 is at @2" msgstr "" -#: advtrains/signals.lua:192 -msgid "Wallmounted Signal (right)" +#: init.lua +msgid "Teleports you to the position of the train with the given id" msgstr "" -#: advtrains/signals.lua:193 -msgid "Wallmounted Signal (top)" +#: init.lua +msgid "Teleporting to train @1" msgstr "" -#: advtrains/signals.lua:281 advtrains/signals.lua:322 -msgid "Andrew's Cross" +#: init.lua +msgid "Disable the advtrains globalstep temporarily" msgstr "" -#: advtrains/trackplacer.lua:313 +#: init.lua msgid "" -"Track Worker Tool\n" -"\n" -"Left-click: change rail type (straight/curve/switch)\n" -"Right-click: rotate object" +"The advtrains globalstep has been disabled. Trains are not moving, and no " +"data is saved! Run '/at_disable_step no' to enable again!" msgstr "" -#: advtrains/trackplacer.lua:340 advtrains/trackplacer.lua:377 -msgid "This node can't be rotated using the trackworker." +#: init.lua +msgid "Disabled advtrains successfully" msgstr "" -#: advtrains/trackplacer.lua:350 -msgid "This track can not be rotated." +#: init.lua +msgid "Re-enabling advtrains globalstep..." msgstr "" -#: advtrains/trackplacer.lua:404 -msgid "This node can't be changed using the trackworker." +#: init.lua +msgid "Advtrains is already running normally!" msgstr "" -#: advtrains/trackplacer.lua:414 -msgid "This track can not be changed." +#: init.lua +msgid "Print advtrains status info" msgstr "" -#: advtrains/tracks.lua:449 -msgid "This track can not be removed." +#: init.lua +msgid "Advtrains Status: no_action @1 slowdown @2 (log @3)" msgstr "" -#: advtrains/tracks.lua:616 -msgid "Position is occupied by a train." +#: misc_nodes.lua +msgid "@1 Platform (low)" msgstr "" -#: advtrains/tracks.lua:622 -msgid "There's a Track Circuit Break here." +#: misc_nodes.lua +msgid "@1 Platform (high)" msgstr "" -#: advtrains/tracks.lua:626 -msgid "There's a Signal Influence Point here." +#: misc_nodes.lua +msgid "@1 Platform (45 degree)" msgstr "" -#: advtrains/tracks.lua:637 -msgid "@1 Slope" +#: misc_nodes.lua +msgid "@1 Platform (low, 45 degree)" msgstr "" -#: advtrains/tracks.lua:648 advtrains/tracks.lua:653 -msgid "Can't place slope: not pointing at node." +#: protection.lua +msgid "Can place, remove and operate trains" msgstr "" -#: advtrains/tracks.lua:658 -msgid "Can't place slope: space occupied." +#: protection.lua +msgid "" +"Can place, remove and operate any train, regardless of owner, whitelist, or " +"protection" msgstr "" -#: advtrains/tracks.lua:711 -msgid "Can't place slope: Not enough slope items left (@1 required)." +#: protection.lua +msgid "Can place and dig tracks in unprotected areas" msgstr "" -#: advtrains/tracks.lua:714 -msgid "Can't place slope: There's no slope of length @1." +#: protection.lua +msgid "Can operate turnouts and signals in unprotected areas" msgstr "" -#: advtrains/tracks.lua:721 -msgid "Can't place slope: no supporting node at upper end." +#: protection.lua +msgid "" +"You are not allowed to build near tracks without the track_builder privilege." msgstr "" -#: advtrains/trainhud.lua:305 -msgid "OVERRUN RED SIGNAL! Examine situation and reverse train to move again." +#: protection.lua +msgid "" +"You are not allowed to build tracks without the track_builder privilege." msgstr "" -#: advtrains/wagons.lua:179 -msgid "This wagon is owned by @1, you can't destroy it." +#: protection.lua +msgid "You are not allowed to build near tracks at this protected position." msgstr "" -#: advtrains/wagons.lua:203 -msgid "The wagon's inventory is not empty." +#: protection.lua +msgid "You are not allowed to build tracks at this protected position." msgstr "" -#: advtrains/wagons.lua:210 -msgid "Wagon needs to be decoupled from other wagons in order to destroy it." +#: protection.lua +msgid "" +"You are not allowed to operate turnouts and signals without the " +"railway_operator privilege." msgstr "" -#: advtrains/wagons.lua:216 -msgid "" -"Warning: If you destroy this wagon, you only get some steel back! If you are " -"sure, hold Sneak and left-click the wagon." +#: signals.lua +msgid "Lampless Signal (deprecated!)" msgstr "" -#: advtrains/wagons.lua:649 advtrains/wagons.lua:850 -msgid "Show Inventory" +#: signals.lua +msgid "Signal (deprecated!)" msgstr "" -#: advtrains/wagons.lua:652 -msgid "Onboard Computer" +#: signals.lua +msgid "Wallmounted Signal (left) (deprecated!)" msgstr "" -#: advtrains/wagons.lua:655 advtrains/wagons.lua:1328 -msgid "Wagon properties" +#: signals.lua +msgid "Wallmounted Signal (right) (deprecated!)" msgstr "" -#: advtrains/wagons.lua:658 -msgid "Get off" +#: signals.lua +msgid "Wallmounted Signal (top) (deprecated!)" msgstr "" -#: advtrains/wagons.lua:661 -msgid "Get off (forced)" +#: signals.lua +msgid "Andrew's Cross" msgstr "" -#: advtrains/wagons.lua:663 -msgid "(Doors closed)" +#: track_reg_helper.lua tracks.lua +msgid "This track can not be removed!" msgstr "" -#: advtrains/wagons.lua:692 -msgid "This wagon has no seats." +#: track_reg_helper.lua +msgid "@1 Slope" msgstr "" -#: advtrains/wagons.lua:703 -msgid "This wagon is full." +#: track_reg_helper.lua +msgid "Can't place: not pointing at node" msgstr "" -#: advtrains/wagons.lua:706 -msgid "Doors are closed! (Try holding sneak key!)" +#: track_reg_helper.lua +msgid "Can't place: space occupied!" msgstr "" -#: advtrains/wagons.lua:712 -msgid "You can't get on this wagon." +#: track_reg_helper.lua +msgid "Can't place: Not enough slope items left (@1 required)" msgstr "" -#: advtrains/wagons.lua:838 -msgid "Select seat:" +#: track_reg_helper.lua +msgid "Can't place: There's no slope of length @1" msgstr "" -#: advtrains/wagons.lua:880 -msgid "Save wagon properties" +#: track_reg_helper.lua +msgid "Can't place: no supporting node at upper end." msgstr "" -#: advtrains/wagons.lua:965 -msgid "Text displayed outside on train" +#: trackplacer.lua +msgid "" +"Track Worker Tool\n" +"\n" +"Left-click: change rail type (straight/curve/switch)\n" +"Right-click: rotate object" msgstr "" -#: advtrains/wagons.lua:966 -msgid "Text displayed inside train" +#: trackplacer.lua +msgid "This node can't be rotated using the trackworker!" msgstr "" -#: advtrains/wagons.lua:967 -msgid "Line" +#: trackplacer.lua +msgid "This track can not be rotated!" msgstr "" -#: advtrains/wagons.lua:968 -msgid "Routingcode" +#: trackplacer.lua +msgid "This node can't be changed using the trackworker!" msgstr "" -#: advtrains/wagons.lua:1241 -msgid "" -"Doors are closed. Use Sneak+rightclick to ignore the closed doors and get " -"off." +#: tracks.lua +msgid "Position is occupied by a train." msgstr "" -#: advtrains/wagons.lua:1250 -msgid "You are not allowed to access the driver stand." +#: tracks.lua +msgid "There's a Track Circuit Break here." msgstr "" -#: advtrains_interlocking/tsr_rail.lua:13 -msgid "Point speed restriction: @1" +#: tracks.lua +msgid "There's a Signal Influence Point here." msgstr "" -#: advtrains_interlocking/tsr_rail.lua:14 -msgid "Set point speed restriction:" +#: trainhud.lua +msgid "OVERRUN RED SIGNAL! Examine situation and reverse train to move again." msgstr "" -#: advtrains_interlocking/tsr_rail.lua:30 -msgid "You are not allowed to configure this track without the @1 privilege." +#: wagonprop_tool.lua +msgid "" +"Wagon Properties Tool\n" +"Punch a wagon to view and edit the Wagon Properties" msgstr "" -#: advtrains_interlocking/tsr_rail.lua:34 -#: advtrains_line_automation/stoprail.lua:31 -#: advtrains_line_automation/stoprail.lua:76 -msgid "You are not allowed to configure this track." +#: wagonprop_tool.lua +msgid "Wagon Properties Tool" msgstr "" -#: advtrains_interlocking/tsr_rail.lua:64 -msgid "Point Speed Restriction Track" +#: wagonprop_tool.lua +msgid "Insufficient privileges to use this!" msgstr "" -#: advtrains_line_automation/stoprail.lua:54 -msgid "Station Code" +#: wagons.lua +msgid "Uninitialized, removing" msgstr "" -#: advtrains_line_automation/stoprail.lua:55 -msgid "Station Name" +#: wagons.lua +msgid "This wagon is owned by @1, you can't destroy it." msgstr "" -#: advtrains_line_automation/stoprail.lua:56 -msgid "Door Delay" +#: wagons.lua +msgid "" +"Destroying wagon with inventory, but inventory is not found? Shouldn't " +"happen!" msgstr "" -#: advtrains_line_automation/stoprail.lua:57 -msgid "Dep. Speed" +#: wagons.lua +msgid "The wagon's inventory is not empty." msgstr "" -#: advtrains_line_automation/stoprail.lua:58 advtrains_train_track/init.lua:11 -#: advtrains_train_track/init.lua:156 -msgid "Track" +#: wagons.lua +msgid "Wagon needs to be decoupled from other wagons in order to destroy it." msgstr "" -#: advtrains_line_automation/stoprail.lua:59 -msgid "Stop Time" +#: wagons.lua +msgid "" +"Warning: If you destroy this wagon, you only get some steel back! If you are " +"sure, hold Sneak and left-click the wagon." msgstr "" -#: advtrains_line_automation/stoprail.lua:60 -msgid "Door Side" +#: wagons.lua +msgid "!!! Train off track !!!" msgstr "" -#: advtrains_line_automation/stoprail.lua:62 -msgid "Reverse train" +#: wagons.lua +msgid " units" msgstr "" -#: advtrains_line_automation/stoprail.lua:63 -msgid "Kick out passengers" +#: wagons.lua +msgid "Liquid: " msgstr "" -#: advtrains_line_automation/stoprail.lua:97 -msgid "Station code \"@1\" already exists and is owned by @2." +#: wagons.lua +msgid "Liquid: empty" msgstr "" -#: advtrains_line_automation/stoprail.lua:111 -msgid "This station is owned by @1. You are not allowed to edit its name." +#: wagons.lua +msgid "Show Inventory" msgstr "" -#: advtrains_line_automation/stoprail.lua:221 -msgid "Station/Stop Track" +#: wagons.lua +msgid "Onboard Computer" msgstr "" -#: advtrains_luaautomation/active_common.lua:17 -msgid "Unconfigured LuaATC component" +#: wagons.lua +msgid "Wagon properties" msgstr "" -#: advtrains_luaautomation/active_common.lua:46 -msgid "LuaATC Environment" +#: wagons.lua +msgid "Get off" msgstr "" -#: advtrains_luaautomation/active_common.lua:49 -msgid "Clear Local Environment" +#: wagons.lua +msgid "Get off (forced)" msgstr "" -#: advtrains_luaautomation/active_common.lua:50 -msgid "Code" +#: wagons.lua +msgid "(Doors closed)" msgstr "" -#: advtrains_luaautomation/active_common.lua:64 -msgid "" -"You are not allowed to configure this LuaATC component without the @1 " -"privilege." +#: wagons.lua +msgid "This wagon has no seats." msgstr "" -#: advtrains_luaautomation/active_common.lua:94 -msgid "LuaATC component assigned to environment '@1'" +#: wagons.lua +msgid "This wagon is full." msgstr "" -#: advtrains_luaautomation/active_common.lua:96 -msgid "LuaATC component assigned to an invalid environment" +#: wagons.lua +msgid "Doors are closed! (Try holding sneak key!)" msgstr "" -#: advtrains_luaautomation/active_common.lua:171 -msgid "LuaATC component with error: @1" +#: wagons.lua +msgid "You can't get on this wagon." msgstr "" -#: advtrains_luaautomation/init.lua:13 -msgid "" -"Can place and configure LuaATC components, including execute potentially " -"harmful Lua code" +#: wagons.lua +msgid "Select seat:" msgstr "" -#: advtrains_luaautomation/mesecon_controller.lua:211 -msgid "LuaATC Mesecon Controller" +#: wagons.lua +msgid "This Wagon ID" msgstr "" -#: advtrains_luaautomation/operation_panel.lua:11 -msgid "LuaATC Operation Panel" +#: wagons.lua +msgid "Allow these players to access your wagon:" msgstr "" -#: advtrains_luaautomation/pcnaming.lua:28 -msgid "" -"Passive Component Naming Tool\n" -"\n" -"Right-click to name a passive component." +#: wagons.lua +msgid "Wagon road number:" msgstr "" -#: advtrains_luaautomation/pcnaming.lua:39 -msgid "" -"You are not allowed to name LuaATC passive components without the @1 " -"privilege." +#: wagons.lua +msgid "Freight Code:" msgstr "" -#: advtrains_luaautomation/pcnaming.lua:62 -msgid "Set name of component (empty to clear)" +#: wagons.lua +msgid "Prev FC" msgstr "" -#: advtrains_train_industrial/init.lua:10 -#: advtrains_train_industrial/init.lua:49 advtrains_train_steam/init.lua:20 -#: advtrains_train_steam/init.lua:91 -msgid "Driver Stand (right)" +#: wagons.lua +msgid "Current FC: " msgstr "" -#: advtrains_train_industrial/init.lua:17 -#: advtrains_train_industrial/init.lua:56 advtrains_train_steam/init.lua:14 -#: advtrains_train_steam/init.lua:85 -msgid "Driver Stand (left)" +#: wagons.lua +msgid "Next FC:" msgstr "" -#: advtrains_train_industrial/init.lua:40 -msgid "Industrial Train Engine" +#: wagons.lua +msgid "Save wagon properties" msgstr "" -#: advtrains_train_industrial/init.lua:79 -msgid "Big Industrial Train Engine" +#: wagons.lua +msgid "Train ID" msgstr "" -#: advtrains_train_industrial/init.lua:98 -msgid "Industrial tank wagon" +#: wagons.lua +msgid "Text displayed outside on train" msgstr "" -#: advtrains_train_industrial/init.lua:116 -msgid "Industrial wood wagon" +#: wagons.lua +msgid "Text displayed inside train" msgstr "" -#: advtrains_train_japan/init.lua:4 -msgid "Japanese Train Inter-Wagon Connection" +#: wagons.lua +msgid "Line" msgstr "" -#: advtrains_train_japan/init.lua:37 -msgid "Driver stand" +#: wagons.lua +msgid "Routingcode" msgstr "" -#: advtrains_train_japan/init.lua:101 -msgid "Japanese Train Engine" +#: wagons.lua +msgid "Train overview /coupling control:" msgstr "" -#: advtrains_train_japan/init.lua:176 -msgid "Japanese Train Wagon" +#: wagons.lua +msgid "Train overview / coupling control is only shown when the train stands." msgstr "" -#: advtrains_train_steam/init.lua:75 -msgid "Steam Engine" +#: wagons.lua +msgid "Remote Routesetting" msgstr "" -#: advtrains_train_steam/init.lua:159 -msgid "Detailed Steam Engine" +#: wagons.lua +msgid "Clear 'Disable ARS' flag" msgstr "" -#: advtrains_train_steam/init.lua:206 -msgid "Passenger Wagon" +#: wagons.lua +msgid "" +"Doors are closed. Use Sneak+rightclick to ignore the closed doors and get " +"off." msgstr "" -#: advtrains_train_steam/init.lua:226 -msgid "Box Wagon" +#: wagons.lua +msgid "You are not allowed to access the driver stand." msgstr "" -#: advtrains_train_subway/init.lua:144 -msgid "Subway Passenger Wagon" +#: wagons.lua +msgid "Missing train_operator privilege" msgstr "" -#: advtrains_train_track/init.lua:31 -msgid "Y-turnout" +#: wagons.lua +msgid "Not allowed to do this." msgstr "" -#: advtrains_train_track/init.lua:49 -msgid "3-way turnout" +#: wagons.lua +msgid "You don't have the train_operator privilege." msgstr "" -#: advtrains_train_track/init.lua:69 -msgid "Perpendicular Diamond Crossing Track" +#: wagons.lua +msgid "The track you are trying to place the wagon on is not long enough!" msgstr "" -#: advtrains_train_track/init.lua:91 -msgid "90+Angle Diamond Crossing Track" +#: wagons.lua +msgid "Wagon placeholder" msgstr "" -#: advtrains_train_track/init.lua:132 -msgid "Diagonal Diamond Crossing Track" +#: wagons.lua +msgid "Please specify a player name to transfer ownership to." msgstr "" -#: advtrains_train_track/init.lua:179 -msgid "Bumper" +#: wagons.lua +msgid "That player does not exist!" msgstr "" -#: advtrains_train_track/init.lua:201 -msgid "ATC controller" +#: wagons.lua +msgid "Not a valid wagon id." msgstr "" -#: advtrains_train_track/init.lua:317 -msgid "Unloading Track" +#: wagons.lua +msgid "That wagon does not exist!" msgstr "" -#: advtrains_train_track/init.lua:342 -msgid "Loading Track" +#: wagons.lua +msgid "You have been given ownership of wagon @1" msgstr "" -#: advtrains_train_track/init.lua:406 -msgid "Detector Rail" +#: wagons.lua +msgid "Wagon @1 ownership changed from @2 to @3" msgstr "" diff --git a/advtrains/po/de.po b/advtrains/po/de.po index 8821fe3..f83b760 100644 --- a/advtrains/po/de.po +++ b/advtrains/po/de.po @@ -2,414 +2,508 @@ msgid "" msgstr "" "Project-Id-Version: advtrains\n" "Report-Msgid-Bugs-To: advtrains-discuss@lists.sr.ht\n" -"POT-Creation-Date: 2023-10-09 11:02+0200\n" -"PO-Revision-Date: 2023-10-09 11:18+0200\n" +"POT-Creation-Date: 2025-06-10 21:40+0200\n" +"PO-Revision-Date: 2025-06-11 22:55+0200\n" "Last-Translator: Y. Wang <yw05@forksworld.de>\n" "Language-Team: German\n" "Language: de\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 3.3.2\n" +"X-Generator: Poedit 3.2.2\n" -#: advtrains/atc.lua:109 -msgid "Unconfigured ATC controller" -msgstr "Nicht konfiguiertes Zugbeeinflussungsgleis" - -#: advtrains/atc.lua:150 -msgid "" -"ATC controller, mode @1\n" -"Command: @2" -msgstr "" -"Zugbeeinflussungsgleis in Betriebsart „@1“\n" -"Befehl: @2" - -#: advtrains/atc.lua:180 -msgid "Command" -msgstr "Befehl" - -#: advtrains/atc.lua:184 -msgid "Command (on)" -msgstr "Befehl (wenn aktiviert)" - -#: advtrains/atc.lua:187 -msgid "Digiline channel" -msgstr "Digiline-Kanal" - -#: advtrains/atc.lua:189 advtrains_line_automation/stoprail.lua:65 -#: advtrains_luaautomation/active_common.lua:48 -msgid "Save" -msgstr "Speichern" - -#: advtrains/atc.lua:236 -msgid "ATC Reverse command warning: didn't reverse train, train moving." -msgstr "" -"Zugbeeinflussung: Der Zug befindet sich in Bewegung und kann nicht umgekehrt " -"werden." - -#: advtrains/atc.lua:248 +#: atc.lua msgid "ATC Kick command warning: doors are closed." msgstr "" "Zugbeeinflussung: Wegen geschlossener Türen werden Fahrgäste nicht zum " "Ausstieg gezwungen." -#: advtrains/atc.lua:252 +#: atc.lua msgid "ATC Kick command warning: train moving." msgstr "" "Zugbeeinflussung: Der Zug befindet sich in Bewegung, Fahrgäste werden nicht " "zum Ausstieg gezwungen." -#: advtrains/atc.lua:322 -msgid "ATC command syntax error: I statement not closed: @1" -msgstr "Zugbeeinflussung: Unvollständiger I-Befehl: @1" +#: atc.lua +msgid "ATC Reverse command warning: didn't reverse train, train moving." +msgstr "" +"Zugbeeinflussung: Der Zug befindet sich in Bewegung und kann nicht umgekehrt " +"werden." -#: advtrains/atc.lua:385 +#: atc.lua msgid "ATC command parse error: Unknown command: @1" msgstr "Zugbeeinflussung: Unbekannter Befehl: @1" -#: advtrains/copytool.lua:8 -msgid "" -"Train copy/paste tool\n" -"\n" -"Left-click: copy train\n" -"Right-click: paste train" -msgstr "" -"Werkzeug zur Erstellung von Zugkopien\n" -"\n" -"Linksklick: Zug ins Clipboard kopieren\n" -"Right-click: Kopierten Zug einfügen" +#: atc.lua +msgid "ATC command syntax error: I statement not closed: @1" +msgstr "Zugbeeinflussung: Unvollständiger I-Befehl: @1" -#: advtrains/copytool.lua:29 -msgid "You do not have the @1 privilege." -msgstr "Ihnen fehlt das „@1“-Privileg." +#: atc.lua +msgid "ATC controller, Command: @1" +msgstr "Zugbeeinflussungsgleis, Befehl: @1" -#: advtrains/copytool.lua:41 -msgid "The track you are trying to place the wagon on is not long enough." -msgstr "Das Gleis, auf dem der Waggon platziert werden woll, ist zu kurz." +#: atc.lua +msgid "Command" +msgstr "Befehl" -#: advtrains/copytool.lua:47 -msgid "The clipboard couldn't access the metadata. Paste failed." -msgstr "" -"Wegen des fehlgeschlagenen Zugriffs auf die Metadaten konnte eine Kopie des " -"Zuges nicht eingefügt werden." +#: atc.lua +msgid "Digiline channel" +msgstr "Digiline-Kanal" -#: advtrains/copytool.lua:52 advtrains/copytool.lua:57 -msgid "The clipboard is empty." -msgstr "Das Clipboard ist leer." +#: atc.lua wagons.lua +msgid "Save" +msgstr "Speichern" + +#: atc.lua +msgid "Unconfigured ATC controller" +msgstr "Nicht konfiguiertes Zugbeeinflussungsgleis" -#: advtrains/copytool.lua:74 +#: copytool.lua msgid "Back of train would end up off track, cancelling." msgstr "Der hinterer Teil dez Zuges wäre nicht auf dem Gleis." -#: advtrains/copytool.lua:92 +#: copytool.lua msgid "No such lua entity." msgstr "" "Sie zeigen nicht auf einem Objekt, das mit diesem Werkzeug kopiert werden " "kann." -#: advtrains/copytool.lua:98 -msgid "No such wagon: @1." -msgstr "Es gibt keinen mit „@1“ identifizierbaren Waggon." - -#: advtrains/copytool.lua:104 +#: copytool.lua msgid "No such train: @1." msgstr "Es gibt keinen mit „@1“ identifizierbaren Zug." -#: advtrains/copytool.lua:176 +#: copytool.lua +msgid "No such wagon: @1." +msgstr "Es gibt keinen mit „@1“ identifizierbaren Waggon." + +#: copytool.lua msgid "The clipboard couldn't access the metadata. Copy failed." msgstr "" "Wegen des fehlgeschlagenen Zugriffs auf die Metadaten konnte der Zug nicht " "kopiert werden." -#: advtrains/copytool.lua:180 +#: copytool.lua +msgid "The clipboard couldn't access the metadata. Paste failed." +msgstr "" +"Wegen des fehlgeschlagenen Zugriffs auf die Metadaten konnte eine Kopie des " +"Zuges nicht eingefügt werden." + +#: copytool.lua +msgid "The clipboard is empty." +msgstr "Das Clipboard ist leer." + +#: copytool.lua +msgid "The track you are trying to place the wagon on is not long enough." +msgstr "Das Gleis, auf dem der Waggon platziert werden woll, ist zu kurz." + +#: copytool.lua msgid "Train copied." -msgstr "Der Zug wurde Kopiert." +msgstr "Der Zug wurde kopiert." -#: advtrains/couple.lua:28 +#: copytool.lua +msgid "" +"Train copy/paste tool\n" +"\n" +"Left-click: copy train\n" +"Right-click: paste train" +msgstr "" +"Werkzeug zur Erstellung von Zugkopien\n" +"\n" +"Linksklick: Zug ins Clipboard kopieren\n" +"Right-click: Kopierten Zug einfügen" + +#: copytool.lua +msgid "You do not have the @1 privilege." +msgstr "Ihnen fehlt das „@1“-Privileg." + +#: couple.lua +msgid "<No coupler>" +msgstr "<Keine Kupplung vorhanden>" + +#: couple.lua msgid "Buffer and Chain Coupler" msgstr "Schraubenkupplung" -#: advtrains/couple.lua:29 +#: couple.lua +msgid "Can not couple: The couplers of the trains do not match (@1 and @2)." +msgstr "Die Kupplungen der Züge passen nicht zueinander (@1 und @2)." + +#: couple.lua +msgid "" +"Cannot couple @1 and @2 - train would have length @3 which is above the " +"limit of @4" +msgstr "" +"Züge @1 und @2 können nicht gekuppelt werden - die resultierende Zuglänge @3 " +"wäre länger als das Maximum von @4" + +#: couple.lua msgid "Scharfenberg Coupler" msgstr "Scharfenbergkupplung" -#: advtrains/couple.lua:185 +#: couple.lua msgid "" "You are not allowed to couple trains without the train_operator privilege." msgstr "Sie dürfen ohne das „train_operator“-Privileg keine Züge ankuppeln." -#: advtrains/couple.lua:329 advtrains/couple.lua:333 -msgid "<No coupler>" -msgstr "<Keine Kupplung vorhanden>" - -#: advtrains/couple.lua:334 -msgid "Can not couple: The couplers of the trains do not match (@1 and @2)." -msgstr "Die Kupplungen der Züge passen nicht zueinander (@1 und @2)." - -#: advtrains/craft_items.lua:3 +#: craft_items.lua msgid "Boiler" -msgstr "" +msgstr "Kessel" + +#: craft_items.lua +msgid "Chimney" +msgstr "Schornstein" -#: advtrains/craft_items.lua:9 +#: craft_items.lua msgid "Driver's cab" msgstr "Führerstand" -#: advtrains/craft_items.lua:15 +#: craft_items.lua msgid "Wheel" +msgstr "Rad" + +#: init.lua +msgid "Advtrains Status: no_action @1 slowdown @2 (log @3)" msgstr "" +"Advtrains Status: keine Aktion: @1 Verlangsamungsfaktor: @2 (logarithmisch " +"@3)" -#: advtrains/craft_items.lua:21 -msgid "Chimney" +#: init.lua +msgid "Advtrains is already running normally!" +msgstr "Advtrains läuft bereits normal!" + +#: init.lua +msgid "" +"Crash during advtrains main step - skipping the shutdown save operation to " +"not save inconsistent data!" msgstr "" +"Advtrains ist während der Ausführung des Main Step abgestürzt - Daten werden " +"nicht gespeichert um Inkonsistenzen zu verhindern!" -#: advtrains/misc_nodes.lua:16 -msgid "@1 Platform (low)" -msgstr "Niedriger @1-Bahnsteig" +#: init.lua +msgid "" +"Data is being saved. While saving, advtrains will remove the players from " +"trains. Save files will be reloaded afterwards!" +msgstr "" +"Daten werden gespeichert. Beim Speichern werden alle Spieler aus Waggons " +"entfernt. Anschließend werden die Speicherdateien neu geladen!" -#: advtrains/misc_nodes.lua:33 -msgid "@1 Platform (high)" -msgstr "Hoher @1-Bahnsteig" +#: init.lua +msgid "Delete all train routes, force them to recalculate" +msgstr "Erzwingt die Neuberechnung der Bewegungspfade aller Züge" + +#: init.lua +msgid "" +"Detach all players, especially the offline ones, from all trains. Use only " +"when no one serious is on a train." +msgstr "" +"Bewirkt, dass alle Spieler (insbesondere Offline-Spieler) aus Waggons " +"entfernt werden. Nur benutzen, wenn niemand ernsthaft in einem Zug sitzt." + +#: init.lua +msgid "Disable the advtrains globalstep temporarily" +msgstr "Advtrains-Schrittverarbeitung temporär deaktivieren" + +#: init.lua +msgid "Disabled advtrains successfully" +msgstr "Advtrains erfolgreich deaktiviert" + +#: init.lua +msgid "Instructed to save() but load() was never called!" +msgstr "Speichern angefordert, aber Speicherdateien wurden nie geladen!" + +#: init.lua +msgid "Print advtrains status info" +msgstr "Advtrains-Statusinformationen ausgeben" + +#: init.lua +msgid "Re-enabling advtrains globalstep..." +msgstr "Advtrains-Schrittverarbeitung wird wieder aktiviert..." + +#: init.lua +msgid "Reload successful!" +msgstr "Neu Laden Erfolgreich!" + +#: init.lua +msgid "Removing unused wagon" +msgstr "Ungenutzer Waggon wird entfernt" + +#: init.lua +msgid "Restoring saved state in 1 second..." +msgstr "Speicherstand wird in 1 Sekunde wiederhergestellt..." + +#: init.lua +msgid "Returns the position of the train with the given id" +msgstr "Gibt die Position des Zugs mit der gegebenen ID aus" + +#: init.lua +msgid "Saving failed: @1" +msgstr "Speichern ist fehlgeschlagen: @1" + +#: init.lua +msgid "Successfully invalidated train routes" +msgstr "Bewegungspfade der Züge erfolgreich invalidiert" + +#: init.lua +msgid "Teleporting to train @1" +msgstr "Teleportiere zu Zug @1" + +#: init.lua +msgid "Teleports you to the position of the train with the given id" +msgstr "Teleportiere dich zu dem Zug mit der gegebenen ID" + +#: init.lua +msgid "" +"The advtrains globalstep has been disabled. Trains are not moving, and no " +"data is saved! Run '/at_disable_step no' to enable again!" +msgstr "" +"Advtrains-Schrittverarbeitung ist deaktiviert. Züge bewegen sich nicht und " +"Änderungen werden nicht gespeichert. Führe '/at_disable_step no' aus um sie " +"wieder zu aktivieren!" + +#: init.lua +msgid "Train @1 does not exist or is invalid" +msgstr "Zug @1 existiert nicht oder ist ungültig" + +#: init.lua +msgid "" +"Train @1 had no wagons left because of some bug. It is being deleted. Wave " +"it goodbye!" +msgstr "" +"Zug @1 hat keine Wagen mehr und sollte nicht mehr existieren. Er wird " +"gelöscht. Auf Wiedersehen!" + +#: init.lua +msgid "Train @1 is at @2" +msgstr "Zug @1 ist bei @2" -#: advtrains/misc_nodes.lua:59 +#: init.lua +msgid "from wagon_save table." +msgstr "aus der wagon_save table" + +#: misc_nodes.lua msgid "@1 Platform (45 degree)" msgstr "Hoher @1-Bahnsteig (45°)" -#: advtrains/misc_nodes.lua:81 +#: misc_nodes.lua +msgid "@1 Platform (high)" +msgstr "Hoher @1-Bahnsteig" + +#: misc_nodes.lua +msgid "@1 Platform (low)" +msgstr "Niedriger @1-Bahnsteig" + +#: misc_nodes.lua msgid "@1 Platform (low, 45 degree)" msgstr "Niedriger @1-Bahnsteig (45°)" -#: advtrains/protection.lua:7 -msgid "Can place, remove and operate trains" -msgstr "" +#: protection.lua +msgid "Can operate turnouts and signals in unprotected areas" +msgstr "Darf Weichen und Signale in ungeschütztem Gebiet stellen" -#: advtrains/protection.lua:12 +#: protection.lua +msgid "Can place and dig tracks in unprotected areas" +msgstr "Darf Gleise in ungeschütztem Gebiet verlegen und entfernen" + +#: protection.lua msgid "" "Can place, remove and operate any train, regardless of owner, whitelist, or " "protection" -msgstr "" +msgstr "Darf, unabhängig von Besitzer oder Schutz, sämtliche Züge steuern" -#: advtrains/protection.lua:18 -msgid "Can place and dig tracks in unprotected areas" -msgstr "" +#: protection.lua +msgid "Can place, remove and operate trains" +msgstr "Darf Züge platzieren, entfernen und steuern" -#: advtrains/protection.lua:24 -msgid "Can operate turnouts and signals in unprotected areas" -msgstr "" +#: protection.lua +msgid "You are not allowed to build near tracks at this protected position." +msgstr "Sie dürfen an geschützten Stellen nicht in der Nähe von Gleisen bauen." -#: advtrains/protection.lua:148 +#: protection.lua msgid "" "You are not allowed to build near tracks without the track_builder privilege." msgstr "" "Sie dürfen ohne das „track_builder“-Privileg nicht in der Nähe von Gleisen " "bauen." -#: advtrains/protection.lua:148 +#: protection.lua +msgid "You are not allowed to build tracks at this protected position." +msgstr "Sie dürfen an geschützten Stellen kein Gleis bauen." + +#: protection.lua msgid "" "You are not allowed to build tracks without the track_builder privilege." msgstr "Sie dürfen ohne das „track_builder“-Privileg kein Gleis bauen." -#: advtrains/protection.lua:153 -msgid "You are not allowed to build near tracks at this protected position." -msgstr "Sie dürfen an geschützten Stellen nicht in der Nähe von Gleisen bauen." - -#: advtrains/protection.lua:153 -msgid "You are not allowed to build tracks at this protected position." -msgstr "Sie dürfen an geschützten Stellen kein Gleis bauen." - -#: advtrains/protection.lua:184 +#: protection.lua msgid "" "You are not allowed to operate turnouts and signals without the " "railway_operator privilege." msgstr "" "Sie dürfen ohne das „railway_operator“-Privileg keine Bahnanlage operieren." -#: advtrains/signals.lua:63 -msgid "Lampless Signal" -msgstr "Mechanisches Signal" - -#: advtrains/signals.lua:127 -msgid "Signal" -msgstr "Lichtsignal" - -#: advtrains/signals.lua:191 -msgid "Wallmounted Signal (left)" -msgstr "An der linken Seite montiertes Signal" - -#: advtrains/signals.lua:192 -msgid "Wallmounted Signal (right)" -msgstr "An der rechten Seite montiertes Signal" - -#: advtrains/signals.lua:193 -msgid "Wallmounted Signal (top)" -msgstr "An der Decke montiertes Signal" - -#: advtrains/signals.lua:281 advtrains/signals.lua:322 +#: signals.lua msgid "Andrew's Cross" msgstr "Andreaskreuz" -#: advtrains/trackplacer.lua:313 -msgid "" -"Track Worker Tool\n" -"\n" -"Left-click: change rail type (straight/curve/switch)\n" -"Right-click: rotate object" -msgstr "" -"Gleiswerkzeug\n" -"\n" -"Linksklick: Gleistyp ändern\n" -"Rechtsklick: Objekt drehen" +#: signals.lua +msgid "Lampless Signal (deprecated!)" +msgstr "Mechanisches Signal (veraltet!)" -#: advtrains/trackplacer.lua:340 advtrains/trackplacer.lua:377 -msgid "This node can't be rotated using the trackworker." -msgstr "Dieser Block kann nicht mit dem Gleiswerkzeug gedreht werden." +#: signals.lua +msgid "Signal (deprecated!)" +msgstr "Signal (veraltet!)" -#: advtrains/trackplacer.lua:350 -msgid "This track can not be rotated." -msgstr "Dieses Gleis kann nicht gedreht werden." +#: signals.lua +msgid "Wallmounted Signal (left) (deprecated!)" +msgstr "An der linken Seite montiertes Signal (veraltet!)" -#: advtrains/trackplacer.lua:404 -msgid "This node can't be changed using the trackworker." -msgstr "Dieser Block kann nicht mit dem Gleiswerkzeug bearbeitet werden." +#: signals.lua +msgid "Wallmounted Signal (right) (deprecated!)" +msgstr "An der rechten Seite montiertes Signal (veraltet!)" -#: advtrains/trackplacer.lua:414 -msgid "This track can not be changed." -msgstr "Dieses Gleis kann nicht geändert werden." +#: signals.lua +msgid "Wallmounted Signal (top) (deprecated!)" +msgstr "An der Decke montiertes Signal (veraltet!)" -#: advtrains/tracks.lua:449 -msgid "This track can not be removed." -msgstr "Dieses Gleis kann nicht entfernt werden." - -#: advtrains/tracks.lua:616 -msgid "Position is occupied by a train." -msgstr "Ein Zug steht an dieser Position." - -#: advtrains/tracks.lua:622 -msgid "There's a Track Circuit Break here." -msgstr "Hier ist eine Gleisabschnittsgrenze (TCB)." - -#: advtrains/tracks.lua:626 -msgid "There's a Signal Influence Point here." -msgstr "Hier ist ein Signal-Beeinflussungspunkt." - -#: advtrains/tracks.lua:637 +#: track_reg_helper.lua msgid "@1 Slope" msgstr "@1 Steigung" -#: advtrains/tracks.lua:648 advtrains/tracks.lua:653 -msgid "Can't place slope: not pointing at node." -msgstr "Es kann nicht platziert werden: Sie zeigen nicht auf einem Block." - -#: advtrains/tracks.lua:658 -msgid "Can't place slope: space occupied." -msgstr "Es kann nicht platziert werden: Diese Position ist besetzt." - -#: advtrains/tracks.lua:711 -msgid "Can't place slope: Not enough slope items left (@1 required)." +#: track_reg_helper.lua +#, fuzzy +msgid "Can't place: Not enough slope items left (@1 required)" msgstr "" "Es kann nicht platziert werden: Sie haben nicht genug Steigungsblöcke, es " "werden insgesamt @1 benötigt." -#: advtrains/tracks.lua:714 -msgid "Can't place slope: There's no slope of length @1." +#: track_reg_helper.lua +#, fuzzy +msgid "Can't place: There's no slope of length @1" msgstr "" "Es kann nicht platziert werden: die Steigung der Länge @1 ist nicht " "definiert." -#: advtrains/tracks.lua:721 -msgid "Can't place slope: no supporting node at upper end." +#: track_reg_helper.lua +#, fuzzy +msgid "Can't place: no supporting node at upper end." msgstr "" "Es kann nicht platziert werden: es gibt keinen unterstützenden Block am Ende " "der Steigung." -#: advtrains/trainhud.lua:305 -msgid "OVERRUN RED SIGNAL! Examine situation and reverse train to move again." -msgstr "" +#: track_reg_helper.lua +#, fuzzy +msgid "Can't place: not pointing at node" +msgstr "Es kann nicht platziert werden: Sie zeigen nicht auf einem Block." -#: advtrains/wagons.lua:179 -msgid "This wagon is owned by @1, you can't destroy it." -msgstr "Dieser Waggon gehört @1, Sie dürfen ihn nicht abbauen." +#: track_reg_helper.lua +#, fuzzy +msgid "Can't place: space occupied!" +msgstr "Es kann nicht platziert werden: Diese Position ist besetzt." -#: advtrains/wagons.lua:203 -msgid "The wagon's inventory is not empty." -msgstr "Das Inventar dieses Waggons ist nicht leer." +#: track_reg_helper.lua tracks.lua +#, fuzzy +msgid "This track can not be removed!" +msgstr "Dieses Gleis kann nicht entfernt werden." -#: advtrains/wagons.lua:210 -msgid "Wagon needs to be decoupled from other wagons in order to destroy it." -msgstr "Der Waggon muss abgekoppelt sein, damit Sie ihn abbauen können." +#: trackplacer.lua +#, fuzzy +msgid "This node can't be changed using the trackworker!" +msgstr "Dieser Block kann nicht mit dem Gleiswerkzeug bearbeitet werden." -#: advtrains/wagons.lua:216 -msgid "" -"Warning: If you destroy this wagon, you only get some steel back! If you are " -"sure, hold Sneak and left-click the wagon." -msgstr "" -"Warnung: Durch den Abbau des Waggons erhalten Sie nur etwas Stahl zurück. " -"Nutzen Sie Schleichen+Linksklick, um dem Waggon abzubauen." +#: trackplacer.lua +#, fuzzy +msgid "This node can't be rotated using the trackworker!" +msgstr "Dieser Block kann nicht mit dem Gleiswerkzeug gedreht werden." -#: advtrains/wagons.lua:649 advtrains/wagons.lua:850 -msgid "Show Inventory" -msgstr "Inventar Zeigen" +#: trackplacer.lua +#, fuzzy +msgid "This track can not be rotated!" +msgstr "Dieses Gleis kann nicht gedreht werden." -#: advtrains/wagons.lua:652 -msgid "Onboard Computer" +#: trackplacer.lua +msgid "" +"Track Worker Tool\n" +"\n" +"Left-click: change rail type (straight/curve/switch)\n" +"Right-click: rotate object" msgstr "" +"Gleiswerkzeug\n" +"\n" +"Linksklick: Gleistyp ändern\n" +"Rechtsklick: Objekt drehen" -#: advtrains/wagons.lua:655 advtrains/wagons.lua:1328 -msgid "Wagon properties" -msgstr "Waggon-Einstellungen" +#: tracks.lua +msgid "Position is occupied by a train." +msgstr "Ein Zug steht an dieser Position." -#: advtrains/wagons.lua:658 -msgid "Get off" -msgstr "Aussteigen" +#: tracks.lua +msgid "There's a Signal Influence Point here." +msgstr "Hier ist ein Signal-Beeinflussungspunkt." -#: advtrains/wagons.lua:661 -msgid "Get off (forced)" -msgstr "Ausstieg zwingen" +#: tracks.lua +msgid "There's a Track Circuit Break here." +msgstr "Hier ist eine Gleisabschnittsgrenze (TCB)." -#: advtrains/wagons.lua:663 -msgid "(Doors closed)" -msgstr "(Türen geschlossen)" +#: trainhud.lua +msgid "OVERRUN RED SIGNAL! Examine situation and reverse train to move again." +msgstr "" +"ROTES SIGNAL ÜBERFAHREN! Situation überprüfen und Fahrtrichtung wechseln, um " +"Bewegungssperre aufzuheben." -#: advtrains/wagons.lua:692 -msgid "This wagon has no seats." -msgstr "In diesem Waggon ist kein Sitzplatz vorhanden." +#: wagonprop_tool.lua +msgid "Insufficient privileges to use this!" +msgstr "Unzureichende Privilegien, um dies zu benutzen!" -#: advtrains/wagons.lua:703 -msgid "This wagon is full." -msgstr "Der Waggon ist voll." +#: wagonprop_tool.lua +#, fuzzy +msgid "Wagon Properties Tool" +msgstr "Waggon-Einstellungen" -#: advtrains/wagons.lua:706 -msgid "Doors are closed! (Try holding sneak key!)" -msgstr "Die Türen sind geschlossen." +#: wagonprop_tool.lua +msgid "" +"Wagon Properties Tool\n" +"Punch a wagon to view and edit the Wagon Properties" +msgstr "" +"Waggon-Einstellungstool\n" +"Auf Waggon anwenden um Waggon-Einstellungen aufzurufen" -#: advtrains/wagons.lua:712 -msgid "You can't get on this wagon." -msgstr "Sie können nicht in diesen Waggon einsteigen." +#: wagons.lua +msgid " units" +msgstr " Einheiten" -#: advtrains/wagons.lua:838 -msgid "Select seat:" -msgstr "Wählen Sie einen Sitzplatz aus:" +#: wagons.lua +msgid "!!! Train off track !!!" +msgstr "!!! Abseits vom Gleis !!!" -#: advtrains/wagons.lua:880 -msgid "Save wagon properties" -msgstr "Waggon-Einstellungen speichern" +#: wagons.lua +msgid "(Doors closed)" +msgstr "(Türen geschlossen)" -#: advtrains/wagons.lua:965 -msgid "Text displayed outside on train" -msgstr "Äußere Anzeige" +#: wagons.lua +msgid "Allow these players to access your wagon:" +msgstr "Diese Spieler dürfen auf den Waggon zugreifen:" -#: advtrains/wagons.lua:966 -msgid "Text displayed inside train" -msgstr "Innere Anzeige" +#: wagons.lua +msgid "Clear 'Disable ARS' flag" +msgstr "ARS-Sperre aufheben" -#: advtrains/wagons.lua:967 -msgid "Line" -msgstr "Linie" +#: wagons.lua +msgid "Current FC: " +msgstr "Aktueller FC:" -#: advtrains/wagons.lua:968 -msgid "Routingcode" +#: wagons.lua +msgid "" +"Destroying wagon with inventory, but inventory is not found? Shouldn't " +"happen!" msgstr "" +"Waggon mit Inventar zerstört, aber Inventar nicht gefunden? Sollte nicht " +"passieren!" -#: advtrains/wagons.lua:1241 +#: wagons.lua +msgid "Doors are closed! (Try holding sneak key!)" +msgstr "Die Türen sind geschlossen! (Probiere Schleichen-Taste!)" + +#: wagons.lua msgid "" "Doors are closed. Use Sneak+rightclick to ignore the closed doors and get " "off." @@ -417,258 +511,188 @@ msgstr "" "Die Türen sind geschlossen. Nutzen Sie Schleichen+Rechtsklick, um trotz " "geschlossener Türen auszusteigen." -#: advtrains/wagons.lua:1250 -msgid "You are not allowed to access the driver stand." -msgstr "Sie haben keinen Zugang zum Führerstand." - -#: advtrains_interlocking/tsr_rail.lua:13 -msgid "Point speed restriction: @1" -msgstr "Geschwindigkeitskontrolle: @1" - -#: advtrains_interlocking/tsr_rail.lua:14 -msgid "Set point speed restriction:" -msgstr "" - -#: advtrains_interlocking/tsr_rail.lua:30 -msgid "You are not allowed to configure this track without the @1 privilege." -msgstr "Sie dürfen ohne das „@1“-Privileg dieses Gleis nicht konfigurieren." - -#: advtrains_interlocking/tsr_rail.lua:34 -#: advtrains_line_automation/stoprail.lua:31 -#: advtrains_line_automation/stoprail.lua:76 -msgid "You are not allowed to configure this track." -msgstr "Sie dürfen dieses Gleis nicht konfigurieren." - -#: advtrains_interlocking/tsr_rail.lua:64 -msgid "Point Speed Restriction Track" -msgstr "Geschwindigkeitskontrollgleis" +#: wagons.lua +msgid "Freight Code:" +msgstr "Frachtcode:" -#: advtrains_line_automation/stoprail.lua:54 -msgid "Station Code" -msgstr "Kennzeichen der Haltestelle" - -#: advtrains_line_automation/stoprail.lua:55 -msgid "Station Name" -msgstr "Name der Haltestelle" - -#: advtrains_line_automation/stoprail.lua:56 -msgid "Door Delay" -msgstr "Zeit für die Türschließung" - -#: advtrains_line_automation/stoprail.lua:57 -msgid "Dep. Speed" -msgstr "Zielgeschwindigkeit bei Abfahrt" - -#: advtrains_line_automation/stoprail.lua:58 advtrains_train_track/init.lua:11 -#: advtrains_train_track/init.lua:156 -msgid "Track" -msgstr "Gleis" - -#: advtrains_line_automation/stoprail.lua:59 -msgid "Stop Time" -msgstr "Wartezeit" - -#: advtrains_line_automation/stoprail.lua:60 -msgid "Door Side" -msgstr "Türseite" - -#: advtrains_line_automation/stoprail.lua:62 -msgid "Reverse train" -msgstr "Zug Umkehren" +#: wagons.lua +msgid "Get off" +msgstr "Aussteigen" -#: advtrains_line_automation/stoprail.lua:63 -msgid "Kick out passengers" -msgstr "Fahrgäste zum Ausstieg zwingen" +#: wagons.lua +msgid "Get off (forced)" +msgstr "Ausstieg zwingen" -#: advtrains_line_automation/stoprail.lua:97 -msgid "Station code \"@1\" already exists and is owned by @2." -msgstr "" -"Die Haltestelle mit dem Kennzeichen „@1“ ist bereits vorhanden und wird von " -"@2 verwaltet." +#: wagons.lua +msgid "Line" +msgstr "Linie" -#: advtrains_line_automation/stoprail.lua:111 -msgid "This station is owned by @1. You are not allowed to edit its name." -msgstr "" -"Diese Haltestelle wird von @1 verwaltet. Sie dürfen sie nicht umbenennen." +#: wagons.lua +msgid "Liquid: " +msgstr "Flüssigkeit:" -#: advtrains_line_automation/stoprail.lua:221 -msgid "Station/Stop Track" -msgstr "Gleis zur Kennzeichnung einer Haltestelle" +#: wagons.lua +msgid "Liquid: empty" +msgstr "Flüssigkeit: leer" -#: advtrains_luaautomation/active_common.lua:17 -msgid "Unconfigured LuaATC component" -msgstr "Nicht konfiguierter LuaATC-Bauteil" +#: wagons.lua +msgid "Missing train_operator privilege" +msgstr "Fehlendes train_operator Privileg" -#: advtrains_luaautomation/active_common.lua:46 -msgid "LuaATC Environment" -msgstr "" +#: wagons.lua +msgid "Next FC:" +msgstr "Nächster FC:" -#: advtrains_luaautomation/active_common.lua:49 -msgid "Clear Local Environment" -msgstr "" +#: wagons.lua +msgid "Not a valid wagon id." +msgstr "Keine gültige Waggon-ID" -#: advtrains_luaautomation/active_common.lua:50 -msgid "Code" -msgstr "" +#: wagons.lua +msgid "Not allowed to do this." +msgstr "Sie dürfen dies nicht tun." -#: advtrains_luaautomation/active_common.lua:64 -msgid "" -"You are not allowed to configure this LuaATC component without the @1 " -"privilege." -msgstr "" -"Sie dürfen ohne das „@1“-Privileg diesen LuaATC-Bauteil nicht konfigurieren." +#: wagons.lua +msgid "Onboard Computer" +msgstr "Bordcomputer" -#: advtrains_luaautomation/active_common.lua:94 -msgid "LuaATC component assigned to environment '@1'" +#: wagons.lua +msgid "Please specify a player name to transfer ownership to." msgstr "" +"Geben Sie einen Spielernamen an, an den der Besitz übertragen werden soll." -#: advtrains_luaautomation/active_common.lua:96 -msgid "LuaATC component assigned to an invalid environment" -msgstr "" +#: wagons.lua +msgid "Prev FC" +msgstr "Vorheriger FC" -#: advtrains_luaautomation/active_common.lua:171 -msgid "LuaATC component with error: @1" -msgstr "LuaATC-Bauteil mit Fehlermeldung: @1" +#: wagons.lua +msgid "Remote Routesetting" +msgstr "Fahrstraße entfernt stellen" -#: advtrains_luaautomation/init.lua:13 -msgid "" -"Can place and configure LuaATC components, including execute potentially " -"harmful Lua code" -msgstr "" -"Kann LuaATC-Bauteile platzieren und konfigurieren (auch evtl. schädliche " -"Programme ausführen)" +#: wagons.lua +msgid "Routingcode" +msgstr "Routingcode" -#: advtrains_luaautomation/mesecon_controller.lua:211 -msgid "LuaATC Mesecon Controller" -msgstr "" +#: wagons.lua +msgid "Save wagon properties" +msgstr "Waggon-Einstellungen speichern" -#: advtrains_luaautomation/operation_panel.lua:11 -msgid "LuaATC Operation Panel" -msgstr "" +#: wagons.lua +msgid "Select seat:" +msgstr "Wählen Sie einen Sitzplatz aus:" -#: advtrains_luaautomation/pcnaming.lua:28 -msgid "" -"Passive Component Naming Tool\n" -"\n" -"Right-click to name a passive component." -msgstr "" -"PC-Benennungswerkzeug\n" -"\n" -"Rechtsklick zur Benennung der passiven Komponente." +#: wagons.lua +msgid "Show Inventory" +msgstr "Inventar Zeigen" -#: advtrains_luaautomation/pcnaming.lua:39 -msgid "" -"You are not allowed to name LuaATC passive components without the @1 " -"privilege." -msgstr "Sie dürfen ohne das „@1“ keinen passiven LuaATC-Bauteil benennen." +#: wagons.lua +msgid "Text displayed inside train" +msgstr "Innere Anzeige" -#: advtrains_luaautomation/pcnaming.lua:62 -msgid "Set name of component (empty to clear)" -msgstr "" +#: wagons.lua +msgid "Text displayed outside on train" +msgstr "Äußere Anzeige" -#: advtrains_train_industrial/init.lua:10 -#: advtrains_train_industrial/init.lua:49 advtrains_train_steam/init.lua:20 -#: advtrains_train_steam/init.lua:91 -msgid "Driver Stand (right)" -msgstr "Führerstand Rechts" +#: wagons.lua +msgid "That player does not exist!" +msgstr "Dieser Spieler existiert nicht!" -#: advtrains_train_industrial/init.lua:17 -#: advtrains_train_industrial/init.lua:56 advtrains_train_steam/init.lua:14 -#: advtrains_train_steam/init.lua:85 -msgid "Driver Stand (left)" -msgstr "Führerstand Links" +#: wagons.lua +msgid "That wagon does not exist!" +msgstr "Dieser Wagen existiert nicht!" -#: advtrains_train_industrial/init.lua:40 -msgid "Industrial Train Engine" -msgstr "Industrielle Lokomotive" +#: wagons.lua +msgid "The track you are trying to place the wagon on is not long enough!" +msgstr "Das Gleis, auf dem der Waggon platziert werden woll, ist zu kurz!" -#: advtrains_train_industrial/init.lua:79 -msgid "Big Industrial Train Engine" -msgstr "Große Industrielle Lokomotive" +#: wagons.lua +msgid "The wagon's inventory is not empty." +msgstr "Das Inventar dieses Waggons ist nicht leer." -#: advtrains_train_industrial/init.lua:98 -msgid "Industrial tank wagon" -msgstr "Tankwaggon" +#: wagons.lua +msgid "This Wagon ID" +msgstr "Dieser Wagen ID" -#: advtrains_train_industrial/init.lua:116 -msgid "Industrial wood wagon" -msgstr "Holztransportwaggon" +#: wagons.lua +msgid "This wagon has no seats." +msgstr "In diesem Waggon ist kein Sitzplatz vorhanden." -#: advtrains_train_japan/init.lua:4 -msgid "Japanese Train Inter-Wagon Connection" -msgstr "Waggonzwischenverbindung Japanischer Personenzüge" +#: wagons.lua +msgid "This wagon is full." +msgstr "Der Waggon ist voll." -#: advtrains_train_japan/init.lua:37 -msgid "Driver stand" -msgstr "Führerstand" +#: wagons.lua +msgid "This wagon is owned by @1, you can't destroy it." +msgstr "Dieser Waggon gehört @1, Sie dürfen ihn nicht abbauen." -#: advtrains_train_japan/init.lua:101 -msgid "Japanese Train Engine" -msgstr "Japanische Personenzug-Lokomotive" +#: wagons.lua +msgid "Train ID" +msgstr "Zug-ID" -#: advtrains_train_japan/init.lua:176 -msgid "Japanese Train Wagon" -msgstr "Japanischer Personenzug-Passagierwaggon" +#: wagons.lua +msgid "Train overview / coupling control is only shown when the train stands." +msgstr "Zugübersicht / Kupplungssteuerung nur im Stillstand verfügbar." -#: advtrains_train_steam/init.lua:75 -msgid "Steam Engine" -msgstr "Dampflokomotive" +#: wagons.lua +msgid "Train overview /coupling control:" +msgstr "Zugübersicht / Kupplungssteuerung:" -#: advtrains_train_steam/init.lua:159 -msgid "Detailed Steam Engine" -msgstr "Detaillierte Dampflokomotive" +#: wagons.lua +msgid "Uninitialized, removing" +msgstr "Nicht initialisiert, entferne" -#: advtrains_train_steam/init.lua:206 -msgid "Passenger Wagon" -msgstr "Passagierwaggon" +#: wagons.lua +msgid "Wagon @1 ownership changed from @2 to @3" +msgstr "Besitzer von Waggon @1 geändert von @2 auf @3" -#: advtrains_train_steam/init.lua:226 -msgid "Box Wagon" -msgstr "Güterwaggon" +#: wagons.lua +msgid "Wagon needs to be decoupled from other wagons in order to destroy it." +msgstr "Der Waggon muss abgekoppelt sein, damit Sie ihn abbauen können." -#: advtrains_train_subway/init.lua:144 -msgid "Subway Passenger Wagon" -msgstr "U-Bahn-Waggon" +#: wagons.lua +msgid "Wagon placeholder" +msgstr "Waggon-Platzhalter" -#: advtrains_train_track/init.lua:31 -msgid "Y-turnout" -msgstr "Y-Weiche" +#: wagons.lua +msgid "Wagon properties" +msgstr "Waggon-Einstellungen" -#: advtrains_train_track/init.lua:49 -msgid "3-way turnout" -msgstr "Dreiwegweiche" +#: wagons.lua +msgid "Wagon road number:" +msgstr "Wagennummer:" -#: advtrains_train_track/init.lua:69 -msgid "Perpendicular Diamond Crossing Track" -msgstr "Kreuzung mit zueinander orthogonalen Gleisen" +#: wagons.lua +msgid "" +"Warning: If you destroy this wagon, you only get some steel back! If you are " +"sure, hold Sneak and left-click the wagon." +msgstr "" +"Warnung: Durch den Abbau des Waggons erhalten Sie nur etwas Stahl zurück. " +"Nutzen Sie Schleichen+Linksklick, um dem Waggon abzubauen." -#: advtrains_train_track/init.lua:91 -msgid "90+Angle Diamond Crossing Track" -msgstr "Kreuzung mit einem achsenparallelen Gleis" +#: wagons.lua +msgid "You are not allowed to access the driver stand." +msgstr "Sie haben keinen Zugang zum Führerstand." -#: advtrains_train_track/init.lua:132 -msgid "Diagonal Diamond Crossing Track" -msgstr "Diagonale Gleiskreuzung" +#: wagons.lua +msgid "You can't get on this wagon." +msgstr "Sie können nicht in diesen Waggon einsteigen." -#: advtrains_train_track/init.lua:179 -msgid "Bumper" -msgstr "Prellbock" +#: wagons.lua +#, fuzzy +msgid "You don't have the train_operator privilege." +msgstr "Ihnen fehlt das „@1“-Privileg." -#: advtrains_train_track/init.lua:201 -msgid "ATC controller" -msgstr "Zugbeeinflussungsgleis" +#: wagons.lua +msgid "You have been given ownership of wagon @1" +msgstr "Sie sind nun der Besitzer von Waggon @1" -#: advtrains_train_track/init.lua:317 -msgid "Unloading Track" -msgstr "Abladungsgleis" +#~ msgid "3-way turnout" +#~ msgstr "Dreiwegweiche" -#: advtrains_train_track/init.lua:342 -msgid "Loading Track" -msgstr "Beladungsgleis" +#~ msgid "90+Angle Diamond Crossing Track" +#~ msgstr "Kreuzung mit einem achsenparallelen Gleis" -#: advtrains_train_track/init.lua:406 -msgid "Detector Rail" -msgstr "Detektorgleis" +#~ msgid "ATC controller" +#~ msgstr "Zugbeeinflussungsgleis" #~ msgid "" #~ "ATC controller, mode @1\n" @@ -680,6 +704,22 @@ msgstr "Detektorgleis" #~ msgid "Access to @1" #~ msgstr "Zugang zu @1" +#~ msgid "Big Industrial Train Engine" +#~ msgstr "Große Industrielle Lokomotive" + +#~ msgid "Box Wagon" +#~ msgstr "Güterwaggon" + +#~ msgid "Bumper" +#~ msgstr "Prellbock" + +#~ msgid "" +#~ "Can place and configure LuaATC components, including execute potentially " +#~ "harmful Lua code" +#~ msgstr "" +#~ "Kann LuaATC-Bauteile platzieren und konfigurieren (auch evtl. schädliche " +#~ "Programme ausführen)" + #~ msgid "Can't get on: wagon full or doors closed!" #~ msgstr "" #~ "Sie können nicht einsteigen: der Waggon ist voll oder die Türen sind " @@ -688,37 +728,198 @@ msgstr "Detektorgleis" #~ msgid "Can't place: protected position!" #~ msgstr "Es kann nicht platziert werden: diese Position ist geschützt." +#~ msgid "Command (on)" +#~ msgstr "Befehl (wenn aktiviert)" + #~ msgid "Default Seat" #~ msgstr "Standardsitzplatz" #~ msgid "Default Seat (driver stand)" #~ msgstr "Standardsitzplatz (Führerstand)" +#~ msgid "Dep. Speed" +#~ msgstr "Zielgeschwindigkeit bei Abfahrt" + #~ msgid "Deprecated Track" #~ msgstr "ausrangiertes Gleis, nicht verwenden." +#~ msgid "Detailed Steam Engine" +#~ msgstr "Detaillierte Dampflokomotive" + +#~ msgid "Detector Rail" +#~ msgstr "Detektorgleis" + +#~ msgid "Diagonal Diamond Crossing Track" +#~ msgstr "Diagonale Gleiskreuzung" + +#~ msgid "Door Delay" +#~ msgstr "Zeit für die Türschließung" + +#~ msgid "Door Side" +#~ msgstr "Türseite" + +#, fuzzy +#~ msgid "Driver Stand" +#~ msgstr "Führerstand" + +#~ msgid "Driver Stand (left)" +#~ msgstr "Führerstand Links" + +#~ msgid "Driver Stand (right)" +#~ msgstr "Führerstand Rechts" + +#~ msgid "Driver stand" +#~ msgstr "Führerstand" + +#~ msgid "Industrial Train Engine" +#~ msgstr "Industrielle Lokomotive" + +#~ msgid "Industrial tank wagon" +#~ msgstr "Tankwaggon" + +#~ msgid "Industrial wood wagon" +#~ msgstr "Holztransportwaggon" + +#~ msgid "Japanese Train Engine" +#~ msgstr "Japanische Personenzug-Lokomotive" + +#~ msgid "Japanese Train Inter-Wagon Connection" +#~ msgstr "Waggonzwischenverbindung Japanischer Personenzüge" + +#~ msgid "Japanese Train Wagon" +#~ msgstr "Japanischer Personenzug-Passagierwaggon" + +#, fuzzy +#~ msgid "Japanese signal pole" +#~ msgstr "Japanischer Personenzug-Passagierwaggon" + +#~ msgid "Kick out passengers" +#~ msgstr "Fahrgäste zum Ausstieg zwingen" + +#~ msgid "Loading Track" +#~ msgstr "Beladungsgleis" + #~ msgid "Lock couples" #~ msgstr "Kupplungen sperren" +#~ msgid "LuaATC component with error: @1" +#~ msgstr "LuaATC-Bauteil mit Fehlermeldung: @1" + +#~ msgid "Passenger Wagon" +#~ msgstr "Passagierwaggon" + +#, fuzzy +#~ msgid "Passenger area" +#~ msgstr "Passagierwaggon" + +#~ msgid "" +#~ "Passive Component Naming Tool\n" +#~ "\n" +#~ "Right-click to name a passive component." +#~ msgstr "" +#~ "PC-Benennungswerkzeug\n" +#~ "\n" +#~ "Rechtsklick zur Benennung der passiven Komponente." + +#~ msgid "Perpendicular Diamond Crossing Track" +#~ msgstr "Kreuzung mit zueinander orthogonalen Gleisen" + +#~ msgid "Point Speed Restriction Track" +#~ msgstr "Geschwindigkeitskontrollgleis" + +#~ msgid "Point speed restriction: @1" +#~ msgstr "Geschwindigkeitskontrolle: @1" + +#~ msgid "Reverse train" +#~ msgstr "Zug Umkehren" + +#~ msgid "Signal" +#~ msgstr "Lichtsignal" + #~ msgid "Speed:" #~ msgstr "Geschw.:" +#~ msgid "Station Code" +#~ msgstr "Kennzeichen der Haltestelle" + +#~ msgid "Station Name" +#~ msgstr "Name der Haltestelle" + +#~ msgid "Station code \"@1\" already exists and is owned by @2." +#~ msgstr "" +#~ "Die Haltestelle mit dem Kennzeichen „@1“ ist bereits vorhanden und wird " +#~ "von @2 verwaltet." + +#~ msgid "Station/Stop Track" +#~ msgstr "Gleis zur Kennzeichnung einer Haltestelle" + +#~ msgid "Steam Engine" +#~ msgstr "Dampflokomotive" + +#~ msgid "Stop Time" +#~ msgstr "Wartezeit" + +#~ msgid "Subway Passenger Wagon" +#~ msgstr "U-Bahn-Waggon" + #~ msgid "Target:" #~ msgstr "Zielges.:" #~ msgid "This position is protected!" #~ msgstr "Diese Position ist geschützt!" +#~ msgid "This station is owned by @1. You are not allowed to edit its name." +#~ msgstr "" +#~ "Diese Haltestelle wird von @1 verwaltet. Sie dürfen sie nicht umbenennen." + +#~ msgid "This track can not be changed." +#~ msgstr "Dieses Gleis kann nicht geändert werden." + +#~ msgid "Track" +#~ msgstr "Gleis" + +#, fuzzy +#~ msgid "Train " +#~ msgstr "Der Zug wurde Kopiert." + +#~ msgid "Unconfigured LuaATC component" +#~ msgstr "Nicht konfiguierter LuaATC-Bauteil" + +#~ msgid "Unloading Track" +#~ msgstr "Abladungsgleis" + #~ msgid "Use Sneak+rightclick to bypass closed doors!" #~ msgstr "" #~ "Nutzen Sie Schleichen+Rechtsklick, um trotz geschlossener Türen " #~ "einzusteigen." +#~ msgid "Y-turnout" +#~ msgstr "Y-Weiche" + +#~ msgid "" +#~ "You are not allowed to configure this LuaATC component without the @1 " +#~ "privilege." +#~ msgstr "" +#~ "Sie dürfen ohne das „@1“-Privileg diesen LuaATC-Bauteil nicht " +#~ "konfigurieren." + +#~ msgid "" +#~ "You are not allowed to configure this track without the @1 privilege." +#~ msgstr "Sie dürfen ohne das „@1“-Privileg dieses Gleis nicht konfigurieren." + +#~ msgid "You are not allowed to configure this track." +#~ msgstr "Sie dürfen dieses Gleis nicht konfigurieren." + #, fuzzy #~ msgid "You are not allowed to modify this protected track." #~ msgstr "Sie dürfen an geschützten Stellen kein Gleis bauen." #~ msgid "" +#~ "You are not allowed to name LuaATC passive components without the @1 " +#~ "privilege." +#~ msgstr "Sie dürfen ohne das „@1“ keinen passiven LuaATC-Bauteil benennen." + +#~ msgid "" #~ "You need to own at least one neighboring wagon to destroy this couple." #~ msgstr "" #~ "Sie müssen Besitzer eines angrenzenden Waggons sein, um hier abzukuppeln." diff --git a/advtrains/po/fr.po b/advtrains/po/fr.po index c744d2c..b2a54da 100644 --- a/advtrains/po/fr.po +++ b/advtrains/po/fr.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: advtrains\n" "Report-Msgid-Bugs-To: advtrains-discuss@lists.sr.ht\n" -"POT-Creation-Date: 2023-10-09 11:02+0200\n" -"PO-Revision-Date: 2024-11-02 21:31+0100\n" +"POT-Creation-Date: 2025-06-10 21:40+0200\n" +"PO-Revision-Date: 2025-03-25 15:06+0100\n" "Last-Translator: Tanavit <tanavit@posto.ovh>\n" "Language-Team: French\n" "Language: fr\n" @@ -12,57 +12,87 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Poedit 2.4.2\n" -#: advtrains/atc.lua:109 -msgid "Unconfigured ATC controller" -msgstr "Controlleur ATC, non-configuré" +#: atc.lua +msgid "ATC Kick command warning: doors are closed." +msgstr "Avertissement commande ATC Éjecter : portes closes." -#: advtrains/atc.lua:150 -msgid "" -"ATC controller, mode @1\n" -"Command: @2" +#: atc.lua +msgid "ATC Kick command warning: train moving." +msgstr "Avertissement commande ATC Éjecter : train en mouvement." + +#: atc.lua +msgid "ATC Reverse command warning: didn't reverse train, train moving." +msgstr "" +"Attention : Commande ATC de renversement impossible car le train se déplace." + +#: atc.lua +msgid "ATC command parse error: Unknown command: @1" +msgstr "Erreur d'analyse de commande ATC : Commande inconnue : @1" + +#: atc.lua +msgid "ATC command syntax error: I statement not closed: @1" +msgstr "Erreur de syntaxe de commande ATC : instruction \"I\" incomplète : @1" + +#: atc.lua +#, fuzzy +msgid "ATC controller, Command: @1" msgstr "" "Controlleur ATC, mode @1\n" "Commande : @2" -#: advtrains/atc.lua:180 +#: atc.lua msgid "Command" msgstr "Commande" -#: advtrains/atc.lua:184 -msgid "Command (on)" -msgstr "Commande (marche)" - -#: advtrains/atc.lua:187 +#: atc.lua msgid "Digiline channel" msgstr "Canal Digiline" -#: advtrains/atc.lua:189 advtrains_line_automation/stoprail.lua:65 -#: advtrains_luaautomation/active_common.lua:48 +#: atc.lua wagons.lua msgid "Save" msgstr "Sauvegarder" -#: advtrains/atc.lua:236 -msgid "ATC Reverse command warning: didn't reverse train, train moving." -msgstr "" -"Attention : Commande ATC de renversement impossible car le train se déplace." +#: atc.lua +msgid "Unconfigured ATC controller" +msgstr "Controlleur ATC, non-configuré" -#: advtrains/atc.lua:248 -msgid "ATC Kick command warning: doors are closed." -msgstr "Avertissement commande ATC Éjecter : portes closes." +#: copytool.lua +msgid "Back of train would end up off track, cancelling." +msgstr "La fin du train serait hors voie : annulation." -#: advtrains/atc.lua:252 -msgid "ATC Kick command warning: train moving." -msgstr "Avertissement commande ATC Éjecter : train en mouvement." +#: copytool.lua +msgid "No such lua entity." +msgstr "Pas de telle entité lua." -#: advtrains/atc.lua:322 -msgid "ATC command syntax error: I statement not closed: @1" -msgstr "Erreur de syntaxe de commande ATC : instruction \"I\" incomplète : @1" +#: copytool.lua +msgid "No such train: @1." +msgstr "Pas de tel train : @1." -#: advtrains/atc.lua:385 -msgid "ATC command parse error: Unknown command: @1" -msgstr "Erreur d'analyse de commande ATC : Commande inconnue : @1" +#: copytool.lua +msgid "No such wagon: @1." +msgstr "Pas de tel wagon : @1." -#: advtrains/copytool.lua:8 +#: copytool.lua +msgid "The clipboard couldn't access the metadata. Copy failed." +msgstr "Le presse-papier ne peut accéder aux métadonnées. Échec de la copie." + +#: copytool.lua +msgid "The clipboard couldn't access the metadata. Paste failed." +msgstr "Le presse-papier ne peut accéder aux métadonnées. Échec du collage." + +#: copytool.lua +msgid "The clipboard is empty." +msgstr "Le presse-papier est vide." + +#: copytool.lua +msgid "The track you are trying to place the wagon on is not long enough." +msgstr "La voie sur laquelle vous tentez de placer le wagon est trop courte." + +#: copytool.lua +msgid "Train copied." +msgstr "Train copié." + +#: copytool.lua msgid "" "Train copy/paste tool\n" "\n" @@ -75,108 +105,209 @@ msgstr "" "\n" "Clic-Droit : collage" -#: advtrains/copytool.lua:29 +#: copytool.lua msgid "You do not have the @1 privilege." msgstr "Vous ne possédez pas le privilège \"@1\"." -#: advtrains/copytool.lua:41 -msgid "The track you are trying to place the wagon on is not long enough." -msgstr "La voie sur laquelle vous tentez de placer le wagon est trop courte." - -#: advtrains/copytool.lua:47 -msgid "The clipboard couldn't access the metadata. Paste failed." -msgstr "Le presse-papier ne peut accéder aux métadonnées. Échec du collage." - -#: advtrains/copytool.lua:52 advtrains/copytool.lua:57 -msgid "The clipboard is empty." -msgstr "Le presse-papier est vide." - -#: advtrains/copytool.lua:74 -msgid "Back of train would end up off track, cancelling." -msgstr "La fin du train serait hors voie : annulation." - -#: advtrains/copytool.lua:92 -msgid "No such lua entity." -msgstr "Pas de telle entité lua." - -#: advtrains/copytool.lua:98 -msgid "No such wagon: @1." -msgstr "Pas de tel wagon : @1." - -#: advtrains/copytool.lua:104 -msgid "No such train: @1." -msgstr "Pas de tel train : @1." - -#: advtrains/copytool.lua:176 -msgid "The clipboard couldn't access the metadata. Copy failed." -msgstr "Le presse-papier ne peut accéder aux métadonnées. Échec de la copie." - -#: advtrains/copytool.lua:180 -msgid "Train copied." -msgstr "Train copié." +#: couple.lua +msgid "<No coupler>" +msgstr "<Pas de coupleur>" -#: advtrains/couple.lua:28 +#: couple.lua msgid "Buffer and Chain Coupler" msgstr "Attelage à tampon et vis" -#: advtrains/couple.lua:29 +#: couple.lua +msgid "Can not couple: The couplers of the trains do not match (@1 and @2)." +msgstr "" +"Accouplement impossible: les attelages des trains ne concordent pas (@1 et " +"@2)." + +#: couple.lua +msgid "" +"Cannot couple @1 and @2 - train would have length @3 which is above the " +"limit of @4" +msgstr "" + +#: couple.lua msgid "Scharfenberg Coupler" msgstr "Attelage Scharfenberg" -#: advtrains/couple.lua:185 +#: couple.lua msgid "" "You are not allowed to couple trains without the train_operator privilege." msgstr "" "Vous n'êtes pas autorisé à coupler des trains sans le privilège " "\"train_operator\"." -#: advtrains/couple.lua:329 advtrains/couple.lua:333 -msgid "<No coupler>" -msgstr "<Pas de coupleur>" - -#: advtrains/couple.lua:334 -msgid "Can not couple: The couplers of the trains do not match (@1 and @2)." -msgstr "" -"Accouplement impossible: les attelages des trains ne concordent pas (@1 et " -"@2)." - -#: advtrains/craft_items.lua:3 +#: craft_items.lua msgid "Boiler" msgstr "Chaudière à vapeur" -#: advtrains/craft_items.lua:9 +#: craft_items.lua +msgid "Chimney" +msgstr "Cheminée" + +#: craft_items.lua msgid "Driver's cab" msgstr "Cabine de pilotage" -#: advtrains/craft_items.lua:15 +#: craft_items.lua msgid "Wheel" msgstr "Roue" -#: advtrains/craft_items.lua:21 -msgid "Chimney" -msgstr "Cheminée" +#: init.lua +#, fuzzy +msgid "Advtrains Status: no_action @1 slowdown @2 (log @3)" +msgstr "État d'advtrains : aucune action" -#: advtrains/misc_nodes.lua:16 -msgid "@1 Platform (low)" -msgstr "Quai @1 (bas)" +#: init.lua +msgid "Advtrains is already running normally!" +msgstr "Advtrains fonctionne déjà correctement !" -#: advtrains/misc_nodes.lua:33 -msgid "@1 Platform (high)" -msgstr "Quai @1 (haut)" +#: init.lua +msgid "" +"Crash during advtrains main step - skipping the shutdown save operation to " +"not save inconsistent data!" +msgstr "" +"Crash durant le pas principal d'advtrains - saut de l'opération de " +"sauvegarde de terminaison pour éviter l'enregistrement de données " +"corrompues !" + +#: init.lua +msgid "" +"Data is being saved. While saving, advtrains will remove the players from " +"trains. Save files will be reloaded afterwards!" +msgstr "" +"Données en cours de sauvegarde. Durant cette phase, advtrains débarquera les " +"joueurs des trains. Les fichiers de sauvegarde seront ultérieurement " +"rechargés !" + +# Routage est il le bon terme ? +#: init.lua +msgid "Delete all train routes, force them to recalculate" +msgstr "Suppression et recalcul de tous les routages" + +#: init.lua +msgid "" +"Detach all players, especially the offline ones, from all trains. Use only " +"when no one serious is on a train." +msgstr "" +"Débarque tous les joueurs, en particulier ceux déconnectés, de tous les " +"trains. À n'utiliser que quand aucun joueur sérieux n'a embarqué." + +#: init.lua +msgid "Disable the advtrains globalstep temporarily" +msgstr "Désactive temporairement le pas global d'advtrains" + +#: init.lua +msgid "Disabled advtrains successfully" +msgstr "Succès de la désactivation d'advtrains" + +#: init.lua +msgid "Instructed to save() but load() was never called!" +msgstr "Appel de save() requis sans appel préalable de load() !" + +#: init.lua +msgid "Print advtrains status info" +msgstr "Affiche les informations d'état d'advtrains" + +#: init.lua +msgid "Re-enabling advtrains globalstep..." +msgstr "Réacivation du pas global d'advtrains..." + +#: init.lua +msgid "Reload successful!" +msgstr "Succès du rechargement !" + +#: init.lua +msgid "Removing unused wagon" +msgstr "Suppression d'un wagon inutilisé" + +#: init.lua +msgid "Restoring saved state in 1 second..." +msgstr "Restauration du l'état sauvegardé dans une seconde..." + +#: init.lua +msgid "Returns the position of the train with the given id" +msgstr "Affiche la position du train identifié" + +#: init.lua +#, fuzzy +msgid "Saving failed: @1" +msgstr "Échec de sauvegarde : " + +# Routage est il le bon terme ? +#: init.lua +msgid "Successfully invalidated train routes" +msgstr "Succès d'invalidation des routages des trains" + +#: init.lua +#, fuzzy +msgid "Teleporting to train @1" +msgstr "Téléportation au train " + +#: init.lua +msgid "Teleports you to the position of the train with the given id" +msgstr "Vous téléporte à la position du train identifié" -#: advtrains/misc_nodes.lua:59 +#: init.lua +msgid "" +"The advtrains globalstep has been disabled. Trains are not moving, and no " +"data is saved! Run '/at_disable_step no' to enable again!" +msgstr "" +"Le pas global d'advtrains est désactivé. Les trains sont immobiles et aucune " +"donnée n'est sauvegardée. Exécutez '/at_disable_step no ' pour le réactiver !" + +#: init.lua +#, fuzzy +msgid "Train @1 does not exist or is invalid" +msgstr " n'existe pas ou est invalide" + +#: init.lua +#, fuzzy +msgid "" +"Train @1 had no wagons left because of some bug. It is being deleted. Wave " +"it goodbye!" +msgstr "" +"n'a plus de wagon à cause d'un bug quelconque. Il est détruit. Faites lui " +"coucou !" + +#: init.lua +msgid "Train @1 is at @2" +msgstr "" + +#: init.lua +msgid "from wagon_save table." +msgstr "de la table wagon_save." + +#: misc_nodes.lua msgid "@1 Platform (45 degree)" msgstr "Quai @1 (haut, 45°)" -#: advtrains/misc_nodes.lua:81 +#: misc_nodes.lua +msgid "@1 Platform (high)" +msgstr "Quai @1 (haut)" + +#: misc_nodes.lua +msgid "@1 Platform (low)" +msgstr "Quai @1 (bas)" + +#: misc_nodes.lua msgid "@1 Platform (low, 45 degree)" msgstr "Quai @1 (bas, 45°)" -#: advtrains/protection.lua:7 -msgid "Can place, remove and operate trains" -msgstr "Possibilité de poser, retirer ou opérer les trains" +#: protection.lua +msgid "Can operate turnouts and signals in unprotected areas" +msgstr "" +"Possibilité d'opérer des embranchements et signaux dans les zones non " +"protégées" + +#: protection.lua +msgid "Can place and dig tracks in unprotected areas" +msgstr "Possibilité de poser ou retirer des voies dans les zones non protégées" -#: advtrains/protection.lua:12 +#: protection.lua msgid "" "Can place, remove and operate any train, regardless of owner, whitelist, or " "protection" @@ -184,40 +315,34 @@ msgstr "" "Possibilité de poser, retirer ou opérer un quelconque train, indépendamment " "du propriétaire, de la liste blanche ou de protection" -#: advtrains/protection.lua:18 -msgid "Can place and dig tracks in unprotected areas" -msgstr "Possibilité de poser ou retirer des voies dans les zones non protégées" +#: protection.lua +msgid "Can place, remove and operate trains" +msgstr "Possibilité de poser, retirer ou opérer les trains" -#: advtrains/protection.lua:24 -msgid "Can operate turnouts and signals in unprotected areas" +#: protection.lua +msgid "You are not allowed to build near tracks at this protected position." msgstr "" -"Possibilité d'opérer des embranchements et signaux dans les zones non " -"protégées" +"Vous ne pouvez pas construire à proximité d'une voie à cet emplacement " +"protégé." -#: advtrains/protection.lua:148 +#: protection.lua msgid "" "You are not allowed to build near tracks without the track_builder privilege." msgstr "" "Vous ne pouvez pas construire à proximité d'une voie sans le privilège " "\"track_builder\" (?)" -#: advtrains/protection.lua:148 +#: protection.lua +msgid "You are not allowed to build tracks at this protected position." +msgstr "Vous ne pouvez pas construire une voie à cet emplacement protégé." + +#: protection.lua msgid "" "You are not allowed to build tracks without the track_builder privilege." msgstr "" "Vous ne pouvez pas construire une voie sans le privilège \"track_builder\"." -#: advtrains/protection.lua:153 -msgid "You are not allowed to build near tracks at this protected position." -msgstr "" -"Vous ne pouvez pas construire à proximité d'une voie à cet emplacement " -"protégé." - -#: advtrains/protection.lua:153 -msgid "You are not allowed to build tracks at this protected position." -msgstr "Vous ne pouvez pas construire une voie à cet emplacement protégé." - -#: advtrains/protection.lua:184 +#: protection.lua msgid "" "You are not allowed to operate turnouts and signals without the " "railway_operator privilege." @@ -225,31 +350,76 @@ msgstr "" "Vous ne pouvez pas actionner les aiguillages ou les signaux (privilège " "\"railway_operator\" manquant)" -#: advtrains/signals.lua:63 -msgid "Lampless Signal" +#: signals.lua +msgid "Andrew's Cross" +msgstr "Croix de Saint André" + +#: signals.lua +#, fuzzy +msgid "Lampless Signal (deprecated!)" msgstr "Sémaphore" -#: advtrains/signals.lua:127 -msgid "Signal" -msgstr "Signal" +#: signals.lua +msgid "Signal (deprecated!)" +msgstr "" -#: advtrains/signals.lua:191 -msgid "Wallmounted Signal (left)" +#: signals.lua +#, fuzzy +msgid "Wallmounted Signal (left) (deprecated!)" msgstr "Signal mural (gauche)" -#: advtrains/signals.lua:192 -msgid "Wallmounted Signal (right)" +#: signals.lua +#, fuzzy +msgid "Wallmounted Signal (right) (deprecated!)" msgstr "Signal mural (droit)" -#: advtrains/signals.lua:193 -msgid "Wallmounted Signal (top)" +#: signals.lua +#, fuzzy +msgid "Wallmounted Signal (top) (deprecated!)" msgstr "Signal mural (plafond)" -#: advtrains/signals.lua:281 advtrains/signals.lua:322 -msgid "Andrew's Cross" -msgstr "Croix de Saint André" +#: track_reg_helper.lua +msgid "@1 Slope" +msgstr "Pente @1" + +#: track_reg_helper.lua +msgid "Can't place: Not enough slope items left (@1 required)" +msgstr "" +"Placement impossible : quantité insuffisante de voie pentue (@1 manquant)" + +#: track_reg_helper.lua +msgid "Can't place: There's no slope of length @1" +msgstr "Placement impossible : il n'y a pas de voie pentue de longueur @1" + +#: track_reg_helper.lua +msgid "Can't place: no supporting node at upper end." +msgstr "Placement impossible : pas de nœud d'appui à l'extrémité supérieure." + +#: track_reg_helper.lua +msgid "Can't place: not pointing at node" +msgstr "Placement impossible : ne pointe pas un nœud" -#: advtrains/trackplacer.lua:313 +#: track_reg_helper.lua +msgid "Can't place: space occupied!" +msgstr "Placement impossible : espace occupé !" + +#: track_reg_helper.lua tracks.lua +msgid "This track can not be removed!" +msgstr "Cette voie ne peut pas être enlevée !" + +#: trackplacer.lua +msgid "This node can't be changed using the trackworker!" +msgstr "Ce nœud ne peut être modifié avec l'outil \"Trackworker\" !" + +#: trackplacer.lua +msgid "This node can't be rotated using the trackworker!" +msgstr "Ce nœud ne peut être tourné avec l'outil \"Trackworker\" !" + +#: trackplacer.lua +msgid "This track can not be rotated!" +msgstr "Cette voie ne peut pas être tournée !" + +#: trackplacer.lua msgid "" "Track Worker Tool\n" "\n" @@ -262,413 +432,277 @@ msgstr "" "\n" "Clic-Droit : tourne l'objet" -#: advtrains/trackplacer.lua:340 advtrains/trackplacer.lua:377 -msgid "This node can't be rotated using the trackworker." -msgstr "Ce nœud ne peut être tourné avec l'outil \"Trackworker\"." - -#: advtrains/trackplacer.lua:350 -msgid "This track can not be rotated." -msgstr "Cette voie ne peut pas être tournée." - -#: advtrains/trackplacer.lua:404 -msgid "This node can't be changed using the trackworker." -msgstr "Ce nœud ne peut être modifié avec l'outil \"Trackworker\"." - -#: advtrains/trackplacer.lua:414 -msgid "This track can not be changed." -msgstr "Cette voie ne peut pas être modifiée." - -#: advtrains/tracks.lua:449 -msgid "This track can not be removed." -msgstr "Cette voie ne peut pas être enlevée." - -#: advtrains/tracks.lua:616 +#: tracks.lua msgid "Position is occupied by a train." msgstr "Cet emplacement est occupé par un train." -#: advtrains/tracks.lua:622 -msgid "There's a Track Circuit Break here." -msgstr "Il y a un \"Track Circuit Break\" ici." - -#: advtrains/tracks.lua:626 +#: tracks.lua msgid "There's a Signal Influence Point here." msgstr "Il y a un \"Signal Influence Point\" ici." -#: advtrains/tracks.lua:637 -msgid "@1 Slope" -msgstr "Pente @1" +#: tracks.lua +msgid "There's a Track Circuit Break here." +msgstr "Il y a un \"Track Circuit Break\" ici." + +#: trainhud.lua +msgid "OVERRUN RED SIGNAL! Examine situation and reverse train to move again." +msgstr "" +"Franchissement de signal rouge : examinez la situation et inversez le sens " +"de marche du train." -#: advtrains/tracks.lua:648 advtrains/tracks.lua:653 -msgid "Can't place slope: not pointing at node." -msgstr "Placement impossible : ne pointe pas un nœud." +#: wagonprop_tool.lua +msgid "Insufficient privileges to use this!" +msgstr "Privilèges insuffisants pour utiliser ceci !" -#: advtrains/tracks.lua:658 -msgid "Can't place slope: space occupied." -msgstr "Placement impossible : espace occupé." +#: wagonprop_tool.lua +msgid "Wagon Properties Tool" +msgstr "Outil de propriété du wagon" -#: advtrains/tracks.lua:711 -msgid "Can't place slope: Not enough slope items left (@1 required)." +#: wagonprop_tool.lua +msgid "" +"Wagon Properties Tool\n" +"Punch a wagon to view and edit the Wagon Properties" msgstr "" -"Placement impossible : quantité insuffisante de voie pentue (@1 manquant)." +"Outil de propriété du wagon\n" +"Frappez un wagon pour voir et modifier ses propriétés" -#: advtrains/tracks.lua:714 -msgid "Can't place slope: There's no slope of length @1." -msgstr "Placement impossible : il n'y a pas de voie pentue de longueur @1." +#: wagons.lua +msgid " units" +msgstr " Unités" -#: advtrains/tracks.lua:721 -msgid "Can't place slope: no supporting node at upper end." -msgstr "Placement impossible : pas de nœud d'appui à l'extrémité supérieure." +#: wagons.lua +msgid "!!! Train off track !!!" +msgstr "!!! Train hors voie !!!" -#: advtrains/trainhud.lua:305 -msgid "OVERRUN RED SIGNAL! Examine situation and reverse train to move again." -msgstr "" -"Franchissement de signal rouge : examinez la situation et inversez le sens " -"de marche du train." +#: wagons.lua +msgid "(Doors closed)" +msgstr "(Portes closes)" -#: advtrains/wagons.lua:179 -msgid "This wagon is owned by @1, you can't destroy it." -msgstr "Ce wagon est la propriété de @1, vous ne pouvez pas le détruire." +#: wagons.lua +msgid "Allow these players to access your wagon:" +msgstr "Autoriser ces joueurs à embarquer :" -#: advtrains/wagons.lua:203 -msgid "The wagon's inventory is not empty." -msgstr "Le stock de ce wagon n'est pas vide." +#: wagons.lua +msgid "Clear 'Disable ARS' flag" +msgstr "Effacer le drapeau \"Désactiver l'ARS\"" -#: advtrains/wagons.lua:210 -msgid "Wagon needs to be decoupled from other wagons in order to destroy it." -msgstr "" -"Les wagons doivent être désaccouplés des autres pour pouvoir être détruits." +#: wagons.lua +msgid "Current FC: " +msgstr "Code de fret courant: " -#: advtrains/wagons.lua:216 +#: wagons.lua msgid "" -"Warning: If you destroy this wagon, you only get some steel back! If you are " -"sure, hold Sneak and left-click the wagon." -msgstr "" -"Attention: Si vous détruisez ce wagon, vous ne récupérerez que de la " -"ferraille ! Si vous êtes sûr de vous, appuyez la touche \"Marcher lentement " -"(Sneak)\" et Clic-Gauche." +"Destroying wagon with inventory, but inventory is not found? Shouldn't " +"happen!" +msgstr "Desctruction d'un wagon avec inventaire introuvable ? Anomalie !" -#: advtrains/wagons.lua:649 advtrains/wagons.lua:850 -msgid "Show Inventory" -msgstr "Montrer le stock" +#: wagons.lua +msgid "Doors are closed! (Try holding sneak key!)" +msgstr "Portes closes : (Essayez la \"sneak key\"!\")" -#: advtrains/wagons.lua:652 -msgid "Onboard Computer" -msgstr "Ordinateur embarqué" +#: wagons.lua +msgid "" +"Doors are closed. Use Sneak+rightclick to ignore the closed doors and get " +"off." +msgstr "" +"Portes closes ! Utilisez \"Marcher lentement (Sneak)\" et Clic-Droit pour " +"franchir les portes et débarquer." -#: advtrains/wagons.lua:655 advtrains/wagons.lua:1328 -msgid "Wagon properties" -msgstr "Propriétés du wagon" +#: wagons.lua +msgid "Freight Code:" +msgstr "Code de frêt :" -#: advtrains/wagons.lua:658 +#: wagons.lua msgid "Get off" msgstr "Débarquer" -#: advtrains/wagons.lua:661 +#: wagons.lua msgid "Get off (forced)" msgstr "Débarquer (de force)" -#: advtrains/wagons.lua:663 -msgid "(Doors closed)" -msgstr "(Portes closes)" +#: wagons.lua +msgid "Line" +msgstr "Ligne" -#: advtrains/wagons.lua:692 -msgid "This wagon has no seats." -msgstr "Ce wagon n'a pas de siège." +#: wagons.lua +msgid "Liquid: " +msgstr "Liquide : " -#: advtrains/wagons.lua:703 -msgid "This wagon is full." -msgstr "Ce wagon est plein." +#: wagons.lua +msgid "Liquid: empty" +msgstr "Liquide : vide" -#: advtrains/wagons.lua:706 -msgid "Doors are closed! (Try holding sneak key!)" -msgstr "Portes closes : (Essayez la \"sneak key\"!\")" +#: wagons.lua +msgid "Missing train_operator privilege" +msgstr "Privilège \"train_operator\" manquant" -#: advtrains/wagons.lua:712 -msgid "You can't get on this wagon." -msgstr "Montée impossible dans ce wagon." +#: wagons.lua +msgid "Next FC:" +msgstr "Code de fret suivant :" -#: advtrains/wagons.lua:838 -msgid "Select seat:" -msgstr "Choisir le siège :" +#: wagons.lua +msgid "Not a valid wagon id." +msgstr "Identificateur de wagon invalide." -#: advtrains/wagons.lua:880 -msgid "Save wagon properties" -msgstr "Sauvegarder les propriétés du wagon" +#: wagons.lua +msgid "Not allowed to do this." +msgstr "Vous n'êtes pas autorisé effectuer ceci." -#: advtrains/wagons.lua:965 -msgid "Text displayed outside on train" -msgstr "Texte affiché à l'extérieur du train" +#: wagons.lua +msgid "Onboard Computer" +msgstr "Ordinateur embarqué" -#: advtrains/wagons.lua:966 -msgid "Text displayed inside train" -msgstr "Texte affiché à l'intérieur du train" +#: wagons.lua +msgid "Please specify a player name to transfer ownership to." +msgstr "" +"Spécifiez le nom du joueur à qui la propriété doit être transférée, SVP." -#: advtrains/wagons.lua:967 -msgid "Line" -msgstr "Ligne" +#: wagons.lua +msgid "Prev FC" +msgstr "Code de fret précédent" + +#: wagons.lua +msgid "Remote Routesetting" +msgstr "Routage à distance" -#: advtrains/wagons.lua:968 +#: wagons.lua msgid "Routingcode" msgstr "Code de routage" -#: advtrains/wagons.lua:1241 -msgid "" -"Doors are closed. Use Sneak+rightclick to ignore the closed doors and get " -"off." -msgstr "" -"Portes closes ! Utilisez \"Marcher lentement (Sneak)\" et Clic-Droit pour " -"franchir les portes et débarquer." - -#: advtrains/wagons.lua:1250 -msgid "You are not allowed to access the driver stand." -msgstr "Accès interdit au poste de pilotage." +#: wagons.lua +msgid "Save wagon properties" +msgstr "Sauvegarder les propriétés du wagon" -#: advtrains_interlocking/tsr_rail.lua:13 -msgid "Point speed restriction: @1" -msgstr "Point de limitation de vitesse : @1" +#: wagons.lua +msgid "Select seat:" +msgstr "Choisir le siège :" -#: advtrains_interlocking/tsr_rail.lua:14 -msgid "Set point speed restriction:" -msgstr "Placez un point de limitation de vitesse :" +#: wagons.lua +msgid "Show Inventory" +msgstr "Montrer le stock" -#: advtrains_interlocking/tsr_rail.lua:30 -msgid "You are not allowed to configure this track without the @1 privilege." -msgstr "Vous n'êtes pas autorisé à configurer cette voie sans le privilège @1." +#: wagons.lua +msgid "Text displayed inside train" +msgstr "Texte affiché à l'intérieur du train" -#: advtrains_interlocking/tsr_rail.lua:34 -#: advtrains_line_automation/stoprail.lua:31 -#: advtrains_line_automation/stoprail.lua:76 -msgid "You are not allowed to configure this track." -msgstr "Vous n'êtes pas autorisé à configurer cette voie." +#: wagons.lua +msgid "Text displayed outside on train" +msgstr "Texte affiché à l'extérieur du train" -#: advtrains_interlocking/tsr_rail.lua:64 -msgid "Point Speed Restriction Track" -msgstr "Voie de point de limitation de vitesse" +#: wagons.lua +msgid "That player does not exist!" +msgstr "Ce joueur n'existe pas !" -#: advtrains_line_automation/stoprail.lua:54 -msgid "Station Code" -msgstr "Code de Station" +#: wagons.lua +msgid "That wagon does not exist!" +msgstr "Ce wagon n'a pas de siège !" -#: advtrains_line_automation/stoprail.lua:55 -msgid "Station Name" -msgstr "Nom de Station" +#: wagons.lua +msgid "The track you are trying to place the wagon on is not long enough!" +msgstr "La voie sur laquelle vous tentez de placer le wagon est trop courte !" -#: advtrains_line_automation/stoprail.lua:56 -msgid "Door Delay" -msgstr "Durée d'ouverture des portes" +#: wagons.lua +msgid "The wagon's inventory is not empty." +msgstr "Le stock de ce wagon n'est pas vide." -#: advtrains_line_automation/stoprail.lua:57 -msgid "Dep. Speed" -msgstr "Vitesse de départ" +#: wagons.lua +msgid "This Wagon ID" +msgstr "Identificateur du wagon" -#: advtrains_line_automation/stoprail.lua:58 advtrains_train_track/init.lua:11 -#: advtrains_train_track/init.lua:156 -msgid "Track" -msgstr "Voie" +#: wagons.lua +msgid "This wagon has no seats." +msgstr "Ce wagon n'a pas de siège." -#: advtrains_line_automation/stoprail.lua:59 -msgid "Stop Time" -msgstr "Durée d'arrêt" +#: wagons.lua +msgid "This wagon is full." +msgstr "Ce wagon est plein." -#: advtrains_line_automation/stoprail.lua:60 -msgid "Door Side" -msgstr "Coté d'ouvertures des portes" +#: wagons.lua +msgid "This wagon is owned by @1, you can't destroy it." +msgstr "Ce wagon est la propriété de @1, vous ne pouvez pas le détruire." -#: advtrains_line_automation/stoprail.lua:62 -msgid "Reverse train" -msgstr "Inversion du sens de marche" +#: wagons.lua +msgid "Train ID" +msgstr "Identificateur du train" -#: advtrains_line_automation/stoprail.lua:63 -msgid "Kick out passengers" -msgstr "Éjecter les passagers" +#: wagons.lua +msgid "Train overview / coupling control is only shown when the train stands." +msgstr "" +"Aperçu du train / commande d'accouplement montré uniquement à l'arrêt du " +"train." -#: advtrains_line_automation/stoprail.lua:97 -msgid "Station code \"@1\" already exists and is owned by @2." -msgstr "Le code de station \"@1\" existe et est possédé par @2." +#: wagons.lua +msgid "Train overview /coupling control:" +msgstr "Aperçu du train / commande d'accouplement :" -#: advtrains_line_automation/stoprail.lua:111 -msgid "This station is owned by @1. You are not allowed to edit its name." -msgstr "" -"Cette station est la propriété de @1. Vous n'êtes pas autorisé à modifier " -"son nom." +#: wagons.lua +msgid "Uninitialized, removing" +msgstr "Non initialisé, retiré" -#: advtrains_line_automation/stoprail.lua:221 -msgid "Station/Stop Track" -msgstr "Voie d'arrêt en station" +#: wagons.lua +msgid "Wagon @1 ownership changed from @2 to @3" +msgstr "La propriété du wagon @1 a été transférée de @2 à @3" -#: advtrains_luaautomation/active_common.lua:17 -msgid "Unconfigured LuaATC component" -msgstr "Composant LuaATC non configuré" +#: wagons.lua +msgid "Wagon needs to be decoupled from other wagons in order to destroy it." +msgstr "" +"Les wagons doivent être désaccouplés des autres pour pouvoir être détruits." -#: advtrains_luaautomation/active_common.lua:46 -msgid "LuaATC Environment" -msgstr "Environnement LuaATC" +#: wagons.lua +#, fuzzy +msgid "Wagon placeholder" +msgstr ", dans un espace réservé" -#: advtrains_luaautomation/active_common.lua:49 -msgid "Clear Local Environment" -msgstr "Effacer l'environnement LuaATC" +#: wagons.lua +msgid "Wagon properties" +msgstr "Propriétés du wagon" -#: advtrains_luaautomation/active_common.lua:50 -msgid "Code" -msgstr "Code" +#: wagons.lua +msgid "Wagon road number:" +msgstr "Immatriculation du wagon :" -#: advtrains_luaautomation/active_common.lua:64 +#: wagons.lua msgid "" -"You are not allowed to configure this LuaATC component without the @1 " -"privilege." -msgstr "Vous ne pouvez configurer ce composant LuaATC sans le privilege @1." +"Warning: If you destroy this wagon, you only get some steel back! If you are " +"sure, hold Sneak and left-click the wagon." +msgstr "" +"Attention: Si vous détruisez ce wagon, vous ne récupérerez que de la " +"ferraille ! Si vous êtes sûr de vous, appuyez la touche \"Marcher lentement " +"(Sneak)\" et Clic-Gauche." -#: advtrains_luaautomation/active_common.lua:94 -msgid "LuaATC component assigned to environment '@1'" -msgstr "Composant LuaATC assigné à l'environnement '@1'" +#: wagons.lua +msgid "You are not allowed to access the driver stand." +msgstr "Accès interdit au poste de pilotage." -#: advtrains_luaautomation/active_common.lua:96 -msgid "LuaATC component assigned to an invalid environment" -msgstr "Composant LuaATC assigné à un environnement invalide" +#: wagons.lua +msgid "You can't get on this wagon." +msgstr "Montée impossible dans ce wagon." -#: advtrains_luaautomation/active_common.lua:171 -msgid "LuaATC component with error: @1" -msgstr "Erreur @1 du composant LuaATC" +#: wagons.lua +msgid "You don't have the train_operator privilege." +msgstr "Vous ne possédez pas le privilège \"train_operator\"." -#: advtrains_luaautomation/init.lua:13 -msgid "" -"Can place and configure LuaATC components, including execute potentially " -"harmful Lua code" -msgstr "" -"Permet le placement et la configuration de composants LuaATC avec risque " -"d'exécution de code Lua dangereux" +#: wagons.lua +msgid "You have been given ownership of wagon @1" +msgstr "La propriété du wagon @1 vous a été transférée" -#: advtrains_luaautomation/mesecon_controller.lua:211 -msgid "LuaATC Mesecon Controller" -msgstr "Commande Mesecon de LuaATC" +#~ msgid " is at " +#~ msgstr " est à la position " -#: advtrains_luaautomation/operation_panel.lua:11 -msgid "LuaATC Operation Panel" -msgstr "Panneau de commande de LuaATC" +#~ msgid " wagon:destroy(): data is not set!" +#~ msgstr " Appel de wagon:destroy() : données non définies !" -#: advtrains_luaautomation/pcnaming.lua:28 -msgid "" -"Passive Component Naming Tool\n" -"\n" -"Right-click to name a passive component." -msgstr "" -"Outil de nommage de composant passif\n" -"\n" -"Clic-Droit pour nommer un composant passif." +#~ msgid "(log" +#~ msgstr "(log" -#: advtrains_luaautomation/pcnaming.lua:39 -msgid "" -"You are not allowed to name LuaATC passive components without the @1 " -"privilege." -msgstr "Vous ne pouvez nommer un composant LuaATC passif sans le privilege @1." - -#: advtrains_luaautomation/pcnaming.lua:62 -msgid "Set name of component (empty to clear)" -msgstr "Nommer le composant (chaîne vide pour effacer)" - -#: advtrains_train_industrial/init.lua:10 -#: advtrains_train_industrial/init.lua:49 advtrains_train_steam/init.lua:20 -#: advtrains_train_steam/init.lua:91 -msgid "Driver Stand (right)" -msgstr "Poste de pilotage (droit)" - -#: advtrains_train_industrial/init.lua:17 -#: advtrains_train_industrial/init.lua:56 advtrains_train_steam/init.lua:14 -#: advtrains_train_steam/init.lua:85 -msgid "Driver Stand (left)" -msgstr "Poste de pilotage (gauche)" - -#: advtrains_train_industrial/init.lua:40 -msgid "Industrial Train Engine" -msgstr "Locomotive industrielle" - -#: advtrains_train_industrial/init.lua:79 -msgid "Big Industrial Train Engine" -msgstr "Grosse locomotive industrielle" - -#: advtrains_train_industrial/init.lua:98 -msgid "Industrial tank wagon" -msgstr "Wagon-citerne industriel" - -#: advtrains_train_industrial/init.lua:116 -msgid "Industrial wood wagon" -msgstr "Wagon grumier industriel" - -#: advtrains_train_japan/init.lua:4 -msgid "Japanese Train Inter-Wagon Connection" -msgstr "Passage inter-voiture de train Japonais" - -#: advtrains_train_japan/init.lua:37 -msgid "Driver stand" -msgstr "Poste de pilotage" - -#: advtrains_train_japan/init.lua:101 -msgid "Japanese Train Engine" -msgstr "Motrice Japonaise" - -#: advtrains_train_japan/init.lua:176 -msgid "Japanese Train Wagon" -msgstr "Voiture Japonaise" - -#: advtrains_train_steam/init.lua:75 -msgid "Steam Engine" -msgstr "Locomotive à vapeur" - -#: advtrains_train_steam/init.lua:159 -msgid "Detailed Steam Engine" -msgstr "Locomotive à vapeur complexe" - -#: advtrains_train_steam/init.lua:206 -msgid "Passenger Wagon" -msgstr "Voiture passager" - -#: advtrains_train_steam/init.lua:226 -msgid "Box Wagon" -msgstr "Wagon de frêt" - -#: advtrains_train_subway/init.lua:144 -msgid "Subway Passenger Wagon" -msgstr "Voiture de Métropolitain" - -#: advtrains_train_track/init.lua:31 -msgid "Y-turnout" -msgstr "Embranchement en Y" - -#: advtrains_train_track/init.lua:49 -msgid "3-way turnout" -msgstr "Embranchement triple" - -#: advtrains_train_track/init.lua:69 -msgid "Perpendicular Diamond Crossing Track" -msgstr "Croisement perpendiculaire" - -#: advtrains_train_track/init.lua:91 -msgid "90+Angle Diamond Crossing Track" -msgstr "Croisement perpendiculo-diagonal" - -#: advtrains_train_track/init.lua:132 -msgid "Diagonal Diamond Crossing Track" -msgstr "Croisement diagonal" - -#: advtrains_train_track/init.lua:179 -msgid "Bumper" -msgstr "Heurtoir" - -#: advtrains_train_track/init.lua:201 -msgid "ATC controller" -msgstr "Controlleur ATC" - -#: advtrains_train_track/init.lua:317 -msgid "Unloading Track" -msgstr "Voie de Déchargement" +#~ msgid "3-way turnout" +#~ msgstr "Embranchement triple" -#: advtrains_train_track/init.lua:342 -msgid "Loading Track" -msgstr "Voie de Chargement" +#~ msgid "90+Angle Diamond Crossing Track" +#~ msgstr "Croisement perpendiculo-diagonal" -#: advtrains_train_track/init.lua:406 -msgid "Detector Rail" -msgstr "Voie détectrice" +#~ msgid "ATC controller" +#~ msgstr "Controlleur ATC" #~ msgid "" #~ "ATC controller, mode @1\n" @@ -680,6 +714,22 @@ msgstr "Voie détectrice" #~ msgid "Access to @1" #~ msgstr "Accès à @1" +#~ msgid "Big Industrial Train Engine" +#~ msgstr "Grosse locomotive industrielle" + +#~ msgid "Box Wagon" +#~ msgstr "Wagon de frêt" + +#~ msgid "Bumper" +#~ msgstr "Heurtoir" + +#~ msgid "" +#~ "Can place and configure LuaATC components, including execute potentially " +#~ "harmful Lua code" +#~ msgstr "" +#~ "Permet le placement et la configuration de composants LuaATC avec risque " +#~ "d'exécution de code Lua dangereux" + #~ msgid "Can't get on: wagon full or doors closed!" #~ msgstr "" #~ "Embarquement impossible : le wagon est plein ou ses portes sont closes !" @@ -687,21 +737,204 @@ msgstr "Voie détectrice" #~ msgid "Can't place: protected position!" #~ msgstr "Placement impossible : emplacement protégé" +#~ msgid "Caution" +#~ msgstr "Attention" + +#~ msgid "Clear (proceed)" +#~ msgstr "Autorisation (procédez)" + +#~ msgid "Clear Local Environment" +#~ msgstr "Effacer l'environnement LuaATC" + +#~ msgid "Closed" +#~ msgstr "Fermé" + +#~ msgid "Code" +#~ msgstr "Code" + +#~ msgid "Command (on)" +#~ msgstr "Commande (marche)" + +#~ msgid "Danger (halt)" +#~ msgstr "Danger (stop)" + #~ msgid "Default Seat" #~ msgstr "Siège par défaut" #~ msgid "Default Seat (driver stand)" #~ msgstr "Siège par défaut (poste de pilotage)" +#~ msgid "Dep. Speed" +#~ msgstr "Vit. de départ" + #~ msgid "Deprecated Track" #~ msgstr "Voie déconseillée" +#~ msgid "Detailed Steam Engine" +#~ msgstr "Locomotive à vapeur complexe" + +#~ msgid "Detector Rail" +#~ msgstr "Voie détectrice" + +#~ msgid "Diagonal Diamond Crossing Track" +#~ msgstr "Croisement diagonal" + +#~ msgid "Door Delay" +#~ msgstr "Durée d'ouverture des portes" + +#~ msgid "Door Side" +#~ msgstr "Ouv. des portes coté" + +#~ msgid "Driver Stand" +#~ msgstr "Poste de pilotage" + +#~ msgid "Driver Stand (left)" +#~ msgstr "Poste de pilotage (gauche)" + +#~ msgid "Driver Stand (right)" +#~ msgstr "Poste de pilotage (droit)" + +#~ msgid "Driver stand" +#~ msgstr "Poste de pilotage" + +#~ msgid "Industrial Train Engine" +#~ msgstr "Locomotive industrielle" + +#~ msgid "Industrial tank wagon" +#~ msgstr "Wagon-citerne industriel" + +#~ msgid "Industrial wood wagon" +#~ msgstr "Wagon grumier industriel" + +#~ msgid "Japanese Train Engine" +#~ msgstr "Motrice Japonaise" + +#~ msgid "Japanese Train Inter-Wagon Connection" +#~ msgstr "Passage inter-voiture de train Japonais" + +#~ msgid "Japanese Train Wagon" +#~ msgstr "Voiture Japonaise" + +#~ msgid "Japanese signal pole" +#~ msgstr "Voiture Japonaise" + +#~ msgid "Kick out passengers" +#~ msgstr "Éjecter les passagers" + +#~ msgid "Left" +#~ msgstr "Gauche" + +#~ msgid "Left,Right,Closed;" +#~ msgstr "Gauche,Droit,Fermé;" + +#~ msgid "Loading Track" +#~ msgstr "Voie de Chargement" + #~ msgid "Lock couples" #~ msgstr "Verrouiller l'accouplement" +#~ msgid "LuaATC Environment" +#~ msgstr "Environnement LuaATC" + +#~ msgid "LuaATC Mesecon Controller" +#~ msgstr "Commande Mesecon de LuaATC" + +#~ msgid "LuaATC Operation Panel" +#~ msgstr "Panneau de commande de LuaATC" + +#~ msgid "LuaATC component assigned to an invalid environment" +#~ msgstr "Composant LuaATC assigné à un environnement invalide" + +#~ msgid "LuaATC component assigned to environment '@1'" +#~ msgstr "Composant LuaATC assigné à l'environnement '@1'" + +#~ msgid "LuaATC component with error: @1" +#~ msgstr "Erreur @1 du composant LuaATC" + +#~ msgid "Munich U-Bahn Distant Signal (" +#~ msgstr "Signal distant métro de Munich (" + +#~ msgid "Munich U-Bahn Main Signal (" +#~ msgstr "Signal principal métro de Munich (" + +#~ msgid "Next Stop:\n" +#~ msgstr "Prochain arrêt :\n" + +#~ msgid "No callback to handle schedule" +#~ msgstr "Absence de fonction de gestion de planning" + +#~ msgid "Passenger Wagon" +#~ msgstr "Voiture passager" + +#~ msgid "Passenger area" +#~ msgstr "Voiture Passager" + +#~ msgid "" +#~ "Passive Component Naming Tool\n" +#~ "\n" +#~ "Right-click to name a passive component." +#~ msgstr "" +#~ "Outil de nommage de composant passif\n" +#~ "\n" +#~ "Clic-Droit pour nommer un composant passif." + +#~ msgid "Perpendicular Diamond Crossing Track" +#~ msgstr "Croisement perpendiculaire" + +#~ msgid "Point Speed Restriction Track" +#~ msgstr "Voie de point de limitation de vitesse" + +#~ msgid "Point speed restriction: @1" +#~ msgstr "Point de limitation de vitesse : @1" + +#~ msgid "Reduced speed" +#~ msgstr "Vitesse réduite" + +#~ msgid "Restricted speed" +#~ msgstr "Vitesse limitée" + +#~ msgid "Reverse train" +#~ msgstr "Inversion du sens de marche" + +#~ msgid "Right" +#~ msgstr "Droit" + +#~ msgid "Route state changed." +#~ msgstr "Changement d'état de l'itinéraire." + +#~ msgid "Set name of component (empty to clear)" +#~ msgstr "Nommer le composant (chaîne vide pour effacer)" + +#~ msgid "Set point speed restriction:" +#~ msgstr "Placez un point de limitation de vitesse :" + +#~ msgid "Signal" +#~ msgstr "Signal" + #~ msgid "Speed:" #~ msgstr "Vitesse : " +#~ msgid "Station Code" +#~ msgstr "Code de Station" + +#~ msgid "Station Name" +#~ msgstr "Nom de Station" + +#~ msgid "Station code \"@1\" already exists and is owned by @2." +#~ msgstr "Le code de station \"@1\" existe et est possédé par @2." + +#~ msgid "Station/Stop Track" +#~ msgstr "Voie d'arrêt en station" + +#~ msgid "Steam Engine" +#~ msgstr "Locomotive à vapeur" + +#~ msgid "Stop Time" +#~ msgstr "Durée d'arrêt" + +#~ msgid "Subway Passenger Wagon" +#~ msgstr "Voiture de Métropolitain" + #~ msgid "Target:" #~ msgstr "Destination : " @@ -712,17 +945,80 @@ msgstr "Voie détectrice" #~ msgid "This position is protected!" #~ msgstr "Cet emplacement est protégé !" +#~ msgid "This station is owned by @1. You are not allowed to edit its name." +#~ msgstr "" +#~ "Cette station est la propriété de @1. Vous n'êtes pas autorisé à modifier " +#~ "son nom." + +#~ msgid "This track can not be changed." +#~ msgstr "Cette voie ne peut pas être modifiée." + +#~ msgid "Track" +#~ msgstr "Voie" + +#~ msgid "Train" +#~ msgstr "Identificateur du train" + +#~ msgid "Train " +#~ msgstr "Identificateur du train " + +#~ msgid "Trains stopping here (ARS rules)" +#~ msgstr "Trains marquant l'arrêt (règles ARS)" + +#~ msgid "Unable to load wagon type" +#~ msgstr "Impossible de charger le type du wagon" + +#~ msgid "Unconfigured LuaATC component" +#~ msgstr "Composant LuaATC non configuré" + +#~ msgid "Uninitialized init=" +#~ msgstr "Variable init non initialisée" + +#~ msgid "Unknown Station" +#~ msgstr "Gare inconnue" + +#~ msgid "Unloading Track" +#~ msgstr "Voie de Déchargement" + #~ msgid "Use Sneak+rightclick to bypass closed doors!" #~ msgstr "" #~ "Utilisez \"Marcher lentement (Sneak)\" et Clic-Droit pour franchir les " #~ "portes closes !" +#~ msgid "Wait for signal to clear" +#~ msgstr "En attente de signal d'autorisation" + +#~ msgid "Y-turnout" +#~ msgstr "Embranchement en Y" + +#~ msgid "" +#~ "You are not allowed to configure this LuaATC component without the @1 " +#~ "privilege." +#~ msgstr "Vous ne pouvez configurer ce composant LuaATC sans le privilege @1." + +#~ msgid "" +#~ "You are not allowed to configure this track without the @1 privilege." +#~ msgstr "" +#~ "Vous n'êtes pas autorisé à configurer cette voie sans le privilège @1." + +#~ msgid "You are not allowed to configure this track." +#~ msgstr "Vous n'êtes pas autorisé à configurer cette voie." + #, fuzzy #~ msgid "You are not allowed to modify this protected track." #~ msgstr "Vous ne pouvez pas construire une voie à cet emplacement protégé" #~ msgid "" +#~ "You are not allowed to name LuaATC passive components without the @1 " +#~ "privilege." +#~ msgstr "" +#~ "Vous ne pouvez nommer un composant LuaATC passif sans le privilege @1." + +#~ msgid "" #~ "You need to own at least one neighboring wagon to destroy this couple." #~ msgstr "" #~ "Vous devez être propriétaire d'au moins un wagon voisin pour supprimer " #~ "cet attelage." + +#~ msgid "slowdown" +#~ msgstr "ralentissement" diff --git a/advtrains/po/update-translations.sh b/advtrains/po/update-translations.sh index 3a56c7c..3228037 100755 --- a/advtrains/po/update-translations.sh +++ b/advtrains/po/update-translations.sh @@ -1,24 +1,24 @@ #!/bin/sh -# NOTE: Please make sure you also have basic_trains installed, as it uses attrans for historical reasons + +MODNAME="advtrains" +MSGID_BUGS_ADDR='advtrains-discuss@lists.sr.ht' PODIR=`dirname "$0"` -ATDIR="$PODIR/../.." -BTDIR="$ATDIR/../basic_trains" -POTFILE="$PODIR/advtrains.pot" +ATDIR="$PODIR/.." +POTFILE="$PODIR/$MODNAME.pot" xgettext \ -D "$ATDIR" \ - -D "$BTDIR" \ - -d advtrains \ + -d "$MODNAME" \ -o "$POTFILE" \ -p . \ -L lua \ + --add-location=file \ --from-code=UTF-8 \ --sort-by-file \ - --keyword='attrans' \ --keyword='S' \ - --package-name='advtrains' \ - --msgid-bugs-address='advtrains-discuss@lists.sr.ht' \ + --package-name="$MODNAME" \ + --msgid-bugs-address="$MSGID_BUGS_ADDR" \ `find $ATDIR $BTDIR -name '*.lua' -printf '%P\n'` \ && for i in "$PODIR"/*.po; do diff --git a/advtrains/po/zh_CN.po b/advtrains/po/zh_CN.po index 5bcc316..4fa4502 100644 --- a/advtrains/po/zh_CN.po +++ b/advtrains/po/zh_CN.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: advtrains\n" "Report-Msgid-Bugs-To: advtrains-discuss@lists.sr.ht\n" -"POT-Creation-Date: 2023-10-09 11:02+0200\n" +"POT-Creation-Date: 2025-06-10 21:40+0200\n" "PO-Revision-Date: 2023-10-09 11:24+0200\n" "Last-Translator: Y. Wang <yw05@forksworld.de>\n" "Language-Team: Chinese (Simplified)\n" @@ -12,57 +12,87 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Poedit 3.3.2\n" -#: advtrains/atc.lua:109 -msgid "Unconfigured ATC controller" -msgstr "ATC 控制器 (未配置)" +#: atc.lua +msgid "ATC Kick command warning: doors are closed." +msgstr "ATC 警告:车门已关闭,无法踢出乘客。" -#: advtrains/atc.lua:150 -msgid "" -"ATC controller, mode @1\n" -"Command: @2" +#: atc.lua +msgid "ATC Kick command warning: train moving." +msgstr "ATC 警告:火车正在移动,无法踢出乘客。" + +#: atc.lua +msgid "ATC Reverse command warning: didn't reverse train, train moving." +msgstr "ATC 警告:火车正在移动,无法改变行车方向。" + +#: atc.lua +msgid "ATC command parse error: Unknown command: @1" +msgstr "ATC 语法错误:未知命令:@1" + +#: atc.lua +msgid "ATC command syntax error: I statement not closed: @1" +msgstr "ATC 语法错误:“I”命令不完整:@1" + +#: atc.lua +#, fuzzy +msgid "ATC controller, Command: @1" msgstr "" "ATC 控制器\n" "模式:@1\n" "命令:@2" -#: advtrains/atc.lua:180 +#: atc.lua msgid "Command" msgstr "命令" -#: advtrains/atc.lua:184 -msgid "Command (on)" -msgstr "命令 (激活时)" - -#: advtrains/atc.lua:187 +#: atc.lua msgid "Digiline channel" msgstr "Digiline 频道" -#: advtrains/atc.lua:189 advtrains_line_automation/stoprail.lua:65 -#: advtrains_luaautomation/active_common.lua:48 +#: atc.lua wagons.lua msgid "Save" msgstr "保存" -#: advtrains/atc.lua:236 -msgid "ATC Reverse command warning: didn't reverse train, train moving." -msgstr "ATC 警告:火车正在移动,无法改变行车方向。" +#: atc.lua +msgid "Unconfigured ATC controller" +msgstr "ATC 控制器 (未配置)" -#: advtrains/atc.lua:248 -msgid "ATC Kick command warning: doors are closed." -msgstr "ATC 警告:车门已关闭,无法踢出乘客。" +#: copytool.lua +msgid "Back of train would end up off track, cancelling." +msgstr "火车后部不在轨道上。" -#: advtrains/atc.lua:252 -msgid "ATC Kick command warning: train moving." -msgstr "ATC 警告:火车正在移动,无法踢出乘客。" +#: copytool.lua +msgid "No such lua entity." +msgstr "您没有指向一个可以用火车复制工具复制的物体。" -#: advtrains/atc.lua:322 -msgid "ATC command syntax error: I statement not closed: @1" -msgstr "ATC 语法错误:“I”命令不完整:@1" +#: copytool.lua +msgid "No such train: @1." +msgstr "ID 为“@1”的列车不存在。" -#: advtrains/atc.lua:385 -msgid "ATC command parse error: Unknown command: @1" -msgstr "ATC 语法错误:未知命令:@1" +#: copytool.lua +msgid "No such wagon: @1." +msgstr "ID 为“@1”的车厢不存在。" + +#: copytool.lua +msgid "The clipboard couldn't access the metadata. Copy failed." +msgstr "无法复制:剪贴板无法访问元数据。" + +#: copytool.lua +msgid "The clipboard couldn't access the metadata. Paste failed." +msgstr "无法粘贴:剪贴板无法访问元数据。" + +#: copytool.lua +msgid "The clipboard is empty." +msgstr "剪贴板是空的。" + +#: copytool.lua +msgid "The track you are trying to place the wagon on is not long enough." +msgstr "轨道太短。" + +#: copytool.lua +msgid "Train copied." +msgstr "已复制列车。" -#: advtrains/copytool.lua:8 +#: copytool.lua msgid "" "Train copy/paste tool\n" "\n" @@ -74,166 +104,295 @@ msgstr "" "左键单击:复制\n" "右键单击:粘帖" -#: advtrains/copytool.lua:29 +#: copytool.lua msgid "You do not have the @1 privilege." msgstr "您没有“@1”权限。" -#: advtrains/copytool.lua:41 -msgid "The track you are trying to place the wagon on is not long enough." -msgstr "轨道太短。" - -#: advtrains/copytool.lua:47 -msgid "The clipboard couldn't access the metadata. Paste failed." -msgstr "无法粘贴:剪贴板无法访问元数据。" - -#: advtrains/copytool.lua:52 advtrains/copytool.lua:57 -msgid "The clipboard is empty." -msgstr "剪贴板是空的。" - -#: advtrains/copytool.lua:74 -msgid "Back of train would end up off track, cancelling." -msgstr "火车后部不在轨道上。" - -#: advtrains/copytool.lua:92 -msgid "No such lua entity." -msgstr "您没有指向一个可以用火车复制工具复制的物体。" - -#: advtrains/copytool.lua:98 -msgid "No such wagon: @1." -msgstr "ID 为“@1”的车厢不存在。" - -#: advtrains/copytool.lua:104 -msgid "No such train: @1." -msgstr "ID 为“@1”的列车不存在。" - -#: advtrains/copytool.lua:176 -msgid "The clipboard couldn't access the metadata. Copy failed." -msgstr "无法复制:剪贴板无法访问元数据。" - -#: advtrains/copytool.lua:180 -msgid "Train copied." -msgstr "已复制列车。" +#: couple.lua +msgid "<No coupler>" +msgstr "<没有车钩>" -#: advtrains/couple.lua:28 +#: couple.lua msgid "Buffer and Chain Coupler" msgstr "链式车钩" -#: advtrains/couple.lua:29 +#: couple.lua +msgid "Can not couple: The couplers of the trains do not match (@1 and @2)." +msgstr "您无法连接这两节车厢:这两节车厢使用不同的车钩 (@1和@2)。" + +#: couple.lua +msgid "" +"Cannot couple @1 and @2 - train would have length @3 which is above the " +"limit of @4" +msgstr "" + +#: couple.lua msgid "Scharfenberg Coupler" msgstr "Scharfenberg 式车钩" -#: advtrains/couple.lua:185 +#: couple.lua msgid "" "You are not allowed to couple trains without the train_operator privilege." msgstr "您没有“train_operator”权限,不能连接这两节车厢。" -#: advtrains/couple.lua:329 advtrains/couple.lua:333 -msgid "<No coupler>" -msgstr "<没有车钩>" - -#: advtrains/couple.lua:334 -msgid "Can not couple: The couplers of the trains do not match (@1 and @2)." -msgstr "您无法连接这两节车厢:这两节车厢使用不同的车钩 (@1和@2)。" - -#: advtrains/craft_items.lua:3 +#: craft_items.lua msgid "Boiler" msgstr "锅炉" -#: advtrains/craft_items.lua:9 +#: craft_items.lua +msgid "Chimney" +msgstr "烟囱" + +#: craft_items.lua msgid "Driver's cab" msgstr "驾驶室" -#: advtrains/craft_items.lua:15 +#: craft_items.lua msgid "Wheel" msgstr "车轮" -#: advtrains/craft_items.lua:21 -msgid "Chimney" -msgstr "烟囱" +#: init.lua +msgid "Advtrains Status: no_action @1 slowdown @2 (log @3)" +msgstr "" -#: advtrains/misc_nodes.lua:16 -msgid "@1 Platform (low)" -msgstr "较低的@1站台" +#: init.lua +msgid "Advtrains is already running normally!" +msgstr "" -#: advtrains/misc_nodes.lua:33 -msgid "@1 Platform (high)" -msgstr "较高的@1站台" +#: init.lua +msgid "" +"Crash during advtrains main step - skipping the shutdown save operation to " +"not save inconsistent data!" +msgstr "" + +#: init.lua +msgid "" +"Data is being saved. While saving, advtrains will remove the players from " +"trains. Save files will be reloaded afterwards!" +msgstr "" + +#: init.lua +msgid "Delete all train routes, force them to recalculate" +msgstr "" + +#: init.lua +msgid "" +"Detach all players, especially the offline ones, from all trains. Use only " +"when no one serious is on a train." +msgstr "" + +#: init.lua +msgid "Disable the advtrains globalstep temporarily" +msgstr "" + +#: init.lua +msgid "Disabled advtrains successfully" +msgstr "" + +#: init.lua +msgid "Instructed to save() but load() was never called!" +msgstr "" + +#: init.lua +msgid "Print advtrains status info" +msgstr "" + +#: init.lua +msgid "Re-enabling advtrains globalstep..." +msgstr "" + +#: init.lua +msgid "Reload successful!" +msgstr "" + +#: init.lua +msgid "Removing unused wagon" +msgstr "" + +#: init.lua +msgid "Restoring saved state in 1 second..." +msgstr "" + +#: init.lua +msgid "Returns the position of the train with the given id" +msgstr "" + +#: init.lua +msgid "Saving failed: @1" +msgstr "" -#: advtrains/misc_nodes.lua:59 +#: init.lua +msgid "Successfully invalidated train routes" +msgstr "" + +#: init.lua +msgid "Teleporting to train @1" +msgstr "" + +#: init.lua +msgid "Teleports you to the position of the train with the given id" +msgstr "" + +#: init.lua +msgid "" +"The advtrains globalstep has been disabled. Trains are not moving, and no " +"data is saved! Run '/at_disable_step no' to enable again!" +msgstr "" + +#: init.lua +msgid "Train @1 does not exist or is invalid" +msgstr "" + +#: init.lua +msgid "" +"Train @1 had no wagons left because of some bug. It is being deleted. Wave " +"it goodbye!" +msgstr "" + +#: init.lua +msgid "Train @1 is at @2" +msgstr "" + +#: init.lua +msgid "from wagon_save table." +msgstr "" + +#: misc_nodes.lua msgid "@1 Platform (45 degree)" msgstr "较高的@1站台 (45°)" -#: advtrains/misc_nodes.lua:81 +#: misc_nodes.lua +msgid "@1 Platform (high)" +msgstr "较高的@1站台" + +#: misc_nodes.lua +msgid "@1 Platform (low)" +msgstr "较低的@1站台" + +#: misc_nodes.lua msgid "@1 Platform (low, 45 degree)" msgstr "较低的@1站台 (45°)" -#: advtrains/protection.lua:7 -msgid "Can place, remove and operate trains" +#: protection.lua +msgid "Can operate turnouts and signals in unprotected areas" +msgstr "" + +#: protection.lua +msgid "Can place and dig tracks in unprotected areas" msgstr "" -#: advtrains/protection.lua:12 +#: protection.lua msgid "" "Can place, remove and operate any train, regardless of owner, whitelist, or " "protection" msgstr "" -#: advtrains/protection.lua:18 -msgid "Can place and dig tracks in unprotected areas" +#: protection.lua +msgid "Can place, remove and operate trains" msgstr "" -#: advtrains/protection.lua:24 -msgid "Can operate turnouts and signals in unprotected areas" -msgstr "" +#: protection.lua +msgid "You are not allowed to build near tracks at this protected position." +msgstr "这里已被保护,您不能在这里的铁路附近建任何东西。" -#: advtrains/protection.lua:148 +#: protection.lua msgid "" "You are not allowed to build near tracks without the track_builder privilege." msgstr "您没有“train_operator”权限,不能在铁路附近建任何东西。" -#: advtrains/protection.lua:148 +#: protection.lua +msgid "You are not allowed to build tracks at this protected position." +msgstr "这里已被保护,您不能在这里建造铁路。" + +#: protection.lua msgid "" "You are not allowed to build tracks without the track_builder privilege." msgstr "您没有“train_operator”权限,不能在这里建造铁路。" -#: advtrains/protection.lua:153 -msgid "You are not allowed to build near tracks at this protected position." -msgstr "这里已被保护,您不能在这里的铁路附近建任何东西。" - -#: advtrains/protection.lua:153 -msgid "You are not allowed to build tracks at this protected position." -msgstr "这里已被保护,您不能在这里建造铁路。" - -#: advtrains/protection.lua:184 +#: protection.lua msgid "" "You are not allowed to operate turnouts and signals without the " "railway_operator privilege." msgstr "您没有“railway_operator”权限,不能控制铁路设施。" -#: advtrains/signals.lua:63 -msgid "Lampless Signal" +#: signals.lua +msgid "Andrew's Cross" +msgstr "铁路道口信号灯" + +#: signals.lua +#, fuzzy +msgid "Lampless Signal (deprecated!)" msgstr "臂板信号机" -#: advtrains/signals.lua:127 -msgid "Signal" -msgstr "信号灯" +#: signals.lua +msgid "Signal (deprecated!)" +msgstr "" -#: advtrains/signals.lua:191 -msgid "Wallmounted Signal (left)" +#: signals.lua +#, fuzzy +msgid "Wallmounted Signal (left) (deprecated!)" msgstr "壁挂式信号灯 (左侧)" -#: advtrains/signals.lua:192 -msgid "Wallmounted Signal (right)" +#: signals.lua +#, fuzzy +msgid "Wallmounted Signal (right) (deprecated!)" msgstr "壁挂式信号灯 (右侧)" -#: advtrains/signals.lua:193 -msgid "Wallmounted Signal (top)" +#: signals.lua +#, fuzzy +msgid "Wallmounted Signal (top) (deprecated!)" msgstr "悬挂式信号灯" -#: advtrains/signals.lua:281 advtrains/signals.lua:322 -msgid "Andrew's Cross" -msgstr "铁路道口信号灯" +#: track_reg_helper.lua +msgid "@1 Slope" +msgstr "@1斜坡" + +#: track_reg_helper.lua +#, fuzzy +msgid "Can't place: Not enough slope items left (@1 required)" +msgstr "无法放置斜坡:您没有足够的铁路斜坡放置工具 (您总共需要@1个)" + +#: track_reg_helper.lua +#, fuzzy +msgid "Can't place: There's no slope of length @1" +msgstr "无法放置斜坡:advtrains 不支持长度为@1米的斜坡。" + +#: track_reg_helper.lua +#, fuzzy +msgid "Can't place: no supporting node at upper end." +msgstr "无法放置斜坡:较高端没有支撑方块。" + +#: track_reg_helper.lua +#, fuzzy +msgid "Can't place: not pointing at node" +msgstr "无法放置斜坡:您没有选择任何方块。" + +#: track_reg_helper.lua +#, fuzzy +msgid "Can't place: space occupied!" +msgstr "无法放置斜坡:此区域已被占用。" + +#: track_reg_helper.lua tracks.lua +#, fuzzy +msgid "This track can not be removed!" +msgstr "您不能移除这段轨道。" + +#: trackplacer.lua +#, fuzzy +msgid "This node can't be changed using the trackworker!" +msgstr "您不能使用铁路调整工具调整这个方块。" + +#: trackplacer.lua +#, fuzzy +msgid "This node can't be rotated using the trackworker!" +msgstr "您不能使用铁路调整工具旋转这个方块。" + +#: trackplacer.lua +#, fuzzy +msgid "This track can not be rotated!" +msgstr "您不能旋转这段轨道。" -#: advtrains/trackplacer.lua:313 +#: trackplacer.lua msgid "" "Track Worker Tool\n" "\n" @@ -245,435 +404,407 @@ msgstr "" "左键单击:切换轨道类型\n" "右键单击:旋转方块" -#: advtrains/trackplacer.lua:340 advtrains/trackplacer.lua:377 -msgid "This node can't be rotated using the trackworker." -msgstr "您不能使用铁路调整工具旋转这个方块。" - -#: advtrains/trackplacer.lua:350 -msgid "This track can not be rotated." -msgstr "您不能旋转这段轨道。" - -#: advtrains/trackplacer.lua:404 -msgid "This node can't be changed using the trackworker." -msgstr "您不能使用铁路调整工具调整这个方块。" - -#: advtrains/trackplacer.lua:414 -msgid "This track can not be changed." -msgstr "您不能调整这段轨道。" - -#: advtrains/tracks.lua:449 -msgid "This track can not be removed." -msgstr "您不能移除这段轨道。" - -#: advtrains/tracks.lua:616 +#: tracks.lua msgid "Position is occupied by a train." msgstr "" -#: advtrains/tracks.lua:622 +#: tracks.lua +msgid "There's a Signal Influence Point here." +msgstr "" + +#: tracks.lua msgid "There's a Track Circuit Break here." msgstr "" -#: advtrains/tracks.lua:626 -msgid "There's a Signal Influence Point here." +#: trainhud.lua +msgid "OVERRUN RED SIGNAL! Examine situation and reverse train to move again." msgstr "" -#: advtrains/tracks.lua:637 -msgid "@1 Slope" -msgstr "@1斜坡" +#: wagonprop_tool.lua +msgid "Insufficient privileges to use this!" +msgstr "" -#: advtrains/tracks.lua:648 advtrains/tracks.lua:653 -msgid "Can't place slope: not pointing at node." -msgstr "无法放置斜坡:您没有选择任何方块。" +#: wagonprop_tool.lua +#, fuzzy +msgid "Wagon Properties Tool" +msgstr "车厢属性" -#: advtrains/tracks.lua:658 -msgid "Can't place slope: space occupied." -msgstr "无法放置斜坡:此区域已被占用。" +#: wagonprop_tool.lua +msgid "" +"Wagon Properties Tool\n" +"Punch a wagon to view and edit the Wagon Properties" +msgstr "" -#: advtrains/tracks.lua:711 -msgid "Can't place slope: Not enough slope items left (@1 required)." -msgstr "无法放置斜坡:您没有足够的铁路斜坡放置工具 (您总共需要@1个)" +#: wagons.lua +msgid " units" +msgstr "" -#: advtrains/tracks.lua:714 -msgid "Can't place slope: There's no slope of length @1." -msgstr "无法放置斜坡:advtrains 不支持长度为@1米的斜坡。" +#: wagons.lua +msgid "!!! Train off track !!!" +msgstr "" -#: advtrains/tracks.lua:721 -msgid "Can't place slope: no supporting node at upper end." -msgstr "无法放置斜坡:较高端没有支撑方块。" +#: wagons.lua +msgid "(Doors closed)" +msgstr "(车门已关闭)" -#: advtrains/trainhud.lua:305 -msgid "OVERRUN RED SIGNAL! Examine situation and reverse train to move again." +#: wagons.lua +msgid "Allow these players to access your wagon:" msgstr "" -#: advtrains/wagons.lua:179 -msgid "This wagon is owned by @1, you can't destroy it." -msgstr "这是 @1 的车厢,您不能摧毁它。" - -#: advtrains/wagons.lua:203 -msgid "The wagon's inventory is not empty." +#: wagons.lua +msgid "Clear 'Disable ARS' flag" msgstr "" -#: advtrains/wagons.lua:210 -msgid "Wagon needs to be decoupled from other wagons in order to destroy it." +#: wagons.lua +msgid "Current FC: " msgstr "" -#: advtrains/wagons.lua:216 +#: wagons.lua msgid "" -"Warning: If you destroy this wagon, you only get some steel back! If you are " -"sure, hold Sneak and left-click the wagon." +"Destroying wagon with inventory, but inventory is not found? Shouldn't " +"happen!" msgstr "" -"警告:如果您摧毁此车厢,您只能拿到一些钢方块。如果您确定要摧毁这节车厢,请按" -"潜行键并左键单击此车厢。" -#: advtrains/wagons.lua:649 advtrains/wagons.lua:850 -msgid "Show Inventory" -msgstr "显示物品栏" - -#: advtrains/wagons.lua:652 -msgid "Onboard Computer" +#: wagons.lua +msgid "Doors are closed! (Try holding sneak key!)" msgstr "" -#: advtrains/wagons.lua:655 advtrains/wagons.lua:1328 -msgid "Wagon properties" -msgstr "车厢属性" +#: wagons.lua +msgid "" +"Doors are closed. Use Sneak+rightclick to ignore the closed doors and get " +"off." +msgstr "车门已关闭,请使用潜行+右键单击下车。" -#: advtrains/wagons.lua:658 +#: wagons.lua +msgid "Freight Code:" +msgstr "" + +#: wagons.lua msgid "Get off" msgstr "下车" -#: advtrains/wagons.lua:661 +#: wagons.lua msgid "Get off (forced)" msgstr "强制下车" -#: advtrains/wagons.lua:663 -msgid "(Doors closed)" -msgstr "(车门已关闭)" - -#: advtrains/wagons.lua:692 -msgid "This wagon has no seats." -msgstr "这节车厢没有座位。" - -#: advtrains/wagons.lua:703 -msgid "This wagon is full." -msgstr "车厢已满。" +#: wagons.lua +msgid "Line" +msgstr "火车线路" -#: advtrains/wagons.lua:706 -msgid "Doors are closed! (Try holding sneak key!)" +#: wagons.lua +msgid "Liquid: " msgstr "" -#: advtrains/wagons.lua:712 -msgid "You can't get on this wagon." +#: wagons.lua +msgid "Liquid: empty" msgstr "" -#: advtrains/wagons.lua:838 -msgid "Select seat:" -msgstr "请选择座位:" - -#: advtrains/wagons.lua:880 -msgid "Save wagon properties" -msgstr "保存车厢属性" - -#: advtrains/wagons.lua:965 -msgid "Text displayed outside on train" -msgstr "车厢外部显示" - -#: advtrains/wagons.lua:966 -msgid "Text displayed inside train" -msgstr "车厢内部显示" +#: wagons.lua +msgid "Missing train_operator privilege" +msgstr "" -#: advtrains/wagons.lua:967 -msgid "Line" -msgstr "火车线路" +#: wagons.lua +msgid "Next FC:" +msgstr "" -#: advtrains/wagons.lua:968 -msgid "Routingcode" -msgstr "路由码" +#: wagons.lua +msgid "Not a valid wagon id." +msgstr "" -#: advtrains/wagons.lua:1241 -msgid "" -"Doors are closed. Use Sneak+rightclick to ignore the closed doors and get " -"off." -msgstr "车门已关闭,请使用潜行+右键单击下车。" +#: wagons.lua +#, fuzzy +msgid "Not allowed to do this." +msgstr "您不能调整这段轨道。" -#: advtrains/wagons.lua:1250 -msgid "You are not allowed to access the driver stand." +#: wagons.lua +msgid "Onboard Computer" msgstr "" -#: advtrains_interlocking/tsr_rail.lua:13 -msgid "Point speed restriction: @1" +#: wagons.lua +msgid "Please specify a player name to transfer ownership to." msgstr "" -#: advtrains_interlocking/tsr_rail.lua:14 -msgid "Set point speed restriction:" +#: wagons.lua +msgid "Prev FC" msgstr "" -#: advtrains_interlocking/tsr_rail.lua:30 -msgid "You are not allowed to configure this track without the @1 privilege." -msgstr "您没有“@1”权限,不能调整这段轨道。" - -#: advtrains_interlocking/tsr_rail.lua:34 -#: advtrains_line_automation/stoprail.lua:31 -#: advtrains_line_automation/stoprail.lua:76 -msgid "You are not allowed to configure this track." -msgstr "您不能调整这段轨道。" - -#: advtrains_interlocking/tsr_rail.lua:64 -msgid "Point Speed Restriction Track" +#: wagons.lua +msgid "Remote Routesetting" msgstr "" -#: advtrains_line_automation/stoprail.lua:54 -msgid "Station Code" -msgstr "车站代码" +#: wagons.lua +msgid "Routingcode" +msgstr "路由码" -#: advtrains_line_automation/stoprail.lua:55 -msgid "Station Name" -msgstr "车站名称" +#: wagons.lua +msgid "Save wagon properties" +msgstr "保存车厢属性" -#: advtrains_line_automation/stoprail.lua:56 -msgid "Door Delay" -msgstr "车门关闭时间" +#: wagons.lua +msgid "Select seat:" +msgstr "请选择座位:" -#: advtrains_line_automation/stoprail.lua:57 -msgid "Dep. Speed" -msgstr "出发速度" +#: wagons.lua +msgid "Show Inventory" +msgstr "显示物品栏" -#: advtrains_line_automation/stoprail.lua:58 advtrains_train_track/init.lua:11 -#: advtrains_train_track/init.lua:156 -msgid "Track" -msgstr "轨道" +#: wagons.lua +msgid "Text displayed inside train" +msgstr "车厢内部显示" -#: advtrains_line_automation/stoprail.lua:59 -msgid "Stop Time" -msgstr "停站时间" +#: wagons.lua +msgid "Text displayed outside on train" +msgstr "车厢外部显示" -#: advtrains_line_automation/stoprail.lua:60 -msgid "Door Side" +#: wagons.lua +msgid "That player does not exist!" msgstr "" -#: advtrains_line_automation/stoprail.lua:62 -msgid "Reverse train" -msgstr "改变行车方向" +#: wagons.lua +#, fuzzy +msgid "That wagon does not exist!" +msgstr "这节车厢没有座位。" -#: advtrains_line_automation/stoprail.lua:63 -msgid "Kick out passengers" -msgstr "踢出乘客" +#: wagons.lua +#, fuzzy +msgid "The track you are trying to place the wagon on is not long enough!" +msgstr "轨道太短。" -#: advtrains_line_automation/stoprail.lua:97 -msgid "Station code \"@1\" already exists and is owned by @2." +#: wagons.lua +msgid "The wagon's inventory is not empty." msgstr "" -#: advtrains_line_automation/stoprail.lua:111 -msgid "This station is owned by @1. You are not allowed to edit its name." -msgstr "" +#: wagons.lua +#, fuzzy +msgid "This Wagon ID" +msgstr "车厢已满。" -#: advtrains_line_automation/stoprail.lua:221 -msgid "Station/Stop Track" -msgstr "车站轨道" +#: wagons.lua +msgid "This wagon has no seats." +msgstr "这节车厢没有座位。" -#: advtrains_luaautomation/active_common.lua:17 -msgid "Unconfigured LuaATC component" -msgstr "LuaATC 部件 (未配置)" +#: wagons.lua +msgid "This wagon is full." +msgstr "车厢已满。" -#: advtrains_luaautomation/active_common.lua:46 -msgid "LuaATC Environment" -msgstr "" +#: wagons.lua +msgid "This wagon is owned by @1, you can't destroy it." +msgstr "这是 @1 的车厢,您不能摧毁它。" -#: advtrains_luaautomation/active_common.lua:49 -msgid "Clear Local Environment" +#: wagons.lua +msgid "Train ID" msgstr "" -#: advtrains_luaautomation/active_common.lua:50 -msgid "Code" +#: wagons.lua +msgid "Train overview / coupling control is only shown when the train stands." msgstr "" -#: advtrains_luaautomation/active_common.lua:64 -msgid "" -"You are not allowed to configure this LuaATC component without the @1 " -"privilege." -msgstr "您没有“@1”权限,不能配置这个 LuaATC 部件。" +#: wagons.lua +msgid "Train overview /coupling control:" +msgstr "" -#: advtrains_luaautomation/active_common.lua:94 -msgid "LuaATC component assigned to environment '@1'" +#: wagons.lua +msgid "Uninitialized, removing" msgstr "" -#: advtrains_luaautomation/active_common.lua:96 -msgid "LuaATC component assigned to an invalid environment" +#: wagons.lua +msgid "Wagon @1 ownership changed from @2 to @3" msgstr "" -#: advtrains_luaautomation/active_common.lua:171 -msgid "LuaATC component with error: @1" +#: wagons.lua +msgid "Wagon needs to be decoupled from other wagons in order to destroy it." msgstr "" -#: advtrains_luaautomation/init.lua:13 -msgid "" -"Can place and configure LuaATC components, including execute potentially " -"harmful Lua code" +#: wagons.lua +#, fuzzy +msgid "Wagon placeholder" +msgstr "车厢属性" + +#: wagons.lua +msgid "Wagon properties" +msgstr "车厢属性" + +#: wagons.lua +msgid "Wagon road number:" msgstr "" -#: advtrains_luaautomation/mesecon_controller.lua:211 -msgid "LuaATC Mesecon Controller" +#: wagons.lua +msgid "" +"Warning: If you destroy this wagon, you only get some steel back! If you are " +"sure, hold Sneak and left-click the wagon." msgstr "" +"警告:如果您摧毁此车厢,您只能拿到一些钢方块。如果您确定要摧毁这节车厢,请按" +"潜行键并左键单击此车厢。" -#: advtrains_luaautomation/operation_panel.lua:11 -msgid "LuaATC Operation Panel" +#: wagons.lua +msgid "You are not allowed to access the driver stand." msgstr "" -#: advtrains_luaautomation/pcnaming.lua:28 -msgid "" -"Passive Component Naming Tool\n" -"\n" -"Right-click to name a passive component." +#: wagons.lua +msgid "You can't get on this wagon." msgstr "" -"被动元件命名工具\n" -"\n" -"右键单击命名所选元件。" -#: advtrains_luaautomation/pcnaming.lua:39 -msgid "" -"You are not allowed to name LuaATC passive components without the @1 " -"privilege." -msgstr "您没有“@1”权限,不能命名被动元件。" +#: wagons.lua +#, fuzzy +msgid "You don't have the train_operator privilege." +msgstr "您没有“@1”权限。" -#: advtrains_luaautomation/pcnaming.lua:62 -msgid "Set name of component (empty to clear)" +#: wagons.lua +msgid "You have been given ownership of wagon @1" msgstr "" -#: advtrains_train_industrial/init.lua:10 -#: advtrains_train_industrial/init.lua:49 advtrains_train_steam/init.lua:20 -#: advtrains_train_steam/init.lua:91 -msgid "Driver Stand (right)" -msgstr "右侧司机座位" +#~ msgid "3-way turnout" +#~ msgstr "三开道岔" -#: advtrains_train_industrial/init.lua:17 -#: advtrains_train_industrial/init.lua:56 advtrains_train_steam/init.lua:14 -#: advtrains_train_steam/init.lua:85 -msgid "Driver Stand (left)" -msgstr "左侧司机座位" +#~ msgid "90+Angle Diamond Crossing Track" +#~ msgstr "交叉轨道 (其中一条轨道与坐标轴平行)" -#: advtrains_train_industrial/init.lua:40 -msgid "Industrial Train Engine" -msgstr "工业用火车头" +#~ msgid "ATC controller" +#~ msgstr "ATC 控制器" -#: advtrains_train_industrial/init.lua:79 -msgid "Big Industrial Train Engine" -msgstr "大型工业用火车头" +#~ msgid "" +#~ "ATC controller, mode @1\n" +#~ "Channel: @2" +#~ msgstr "" +#~ "ATC 控制器\n" +#~ "模式:@1\n" +#~ "频道:@2" -#: advtrains_train_industrial/init.lua:98 -msgid "Industrial tank wagon" -msgstr "液体运输车厢" +#~ msgid "Access to @1" +#~ msgstr "可前往@1" -#: advtrains_train_industrial/init.lua:116 -msgid "Industrial wood wagon" -msgstr "木材运输车厢" +#~ msgid "Big Industrial Train Engine" +#~ msgstr "大型工业用火车头" -#: advtrains_train_japan/init.lua:4 -msgid "Japanese Train Inter-Wagon Connection" -msgstr "日本火车车钩" +#~ msgid "Box Wagon" +#~ msgstr "货运车厢" -#: advtrains_train_japan/init.lua:37 -msgid "Driver stand" -msgstr "司机座位" +#~ msgid "Bumper" +#~ msgstr "保险杠" -#: advtrains_train_japan/init.lua:101 -msgid "Japanese Train Engine" -msgstr "高速列车车头" +#~ msgid "Can't get on: wagon full or doors closed!" +#~ msgstr "无法上车:车门已关闭或车厢已满。" -#: advtrains_train_japan/init.lua:176 -msgid "Japanese Train Wagon" -msgstr "高速列车车厢" +#~ msgid "Can't place: protected position!" +#~ msgstr "无法放置:此区域已被保护。" -#: advtrains_train_steam/init.lua:75 -msgid "Steam Engine" -msgstr "蒸汽机车" +#~ msgid "Command (on)" +#~ msgstr "命令 (激活时)" -#: advtrains_train_steam/init.lua:159 -msgid "Detailed Steam Engine" -msgstr "精细的蒸汽机车" +#~ msgid "Default Seat" +#~ msgstr "默认座位" -#: advtrains_train_steam/init.lua:206 -msgid "Passenger Wagon" -msgstr "客车" +#~ msgid "Default Seat (driver stand)" +#~ msgstr "默认座位 (司机座位)" -#: advtrains_train_steam/init.lua:226 -msgid "Box Wagon" -msgstr "货运车厢" +#~ msgid "Dep. Speed" +#~ msgstr "出发速度" -#: advtrains_train_subway/init.lua:144 -msgid "Subway Passenger Wagon" -msgstr "地铁车厢" +#~ msgid "Deprecated Track" +#~ msgstr "请不要使用" -#: advtrains_train_track/init.lua:31 -msgid "Y-turnout" -msgstr "对称道岔" +#~ msgid "Detailed Steam Engine" +#~ msgstr "精细的蒸汽机车" -#: advtrains_train_track/init.lua:49 -msgid "3-way turnout" -msgstr "三开道岔" +#~ msgid "Detector Rail" +#~ msgstr "探测轨道" -#: advtrains_train_track/init.lua:69 -msgid "Perpendicular Diamond Crossing Track" -msgstr "垂直交叉轨道" +#~ msgid "Diagonal Diamond Crossing Track" +#~ msgstr "交叉轨道" -#: advtrains_train_track/init.lua:91 -msgid "90+Angle Diamond Crossing Track" -msgstr "交叉轨道 (其中一条轨道与坐标轴平行)" +#~ msgid "Door Delay" +#~ msgstr "车门关闭时间" -#: advtrains_train_track/init.lua:132 -msgid "Diagonal Diamond Crossing Track" -msgstr "交叉轨道" +#, fuzzy +#~ msgid "Driver Stand" +#~ msgstr "司机座位" -#: advtrains_train_track/init.lua:179 -msgid "Bumper" -msgstr "保险杠" +#~ msgid "Driver Stand (left)" +#~ msgstr "左侧司机座位" -#: advtrains_train_track/init.lua:201 -msgid "ATC controller" -msgstr "ATC 控制器" +#~ msgid "Driver Stand (right)" +#~ msgstr "右侧司机座位" -#: advtrains_train_track/init.lua:317 -msgid "Unloading Track" -msgstr "卸货轨道" +#~ msgid "Driver stand" +#~ msgstr "司机座位" -#: advtrains_train_track/init.lua:342 -msgid "Loading Track" -msgstr "装货轨道" +#~ msgid "Industrial Train Engine" +#~ msgstr "工业用火车头" -#: advtrains_train_track/init.lua:406 -msgid "Detector Rail" -msgstr "探测轨道" +#~ msgid "Industrial tank wagon" +#~ msgstr "液体运输车厢" -#~ msgid "" -#~ "ATC controller, mode @1\n" -#~ "Channel: @2" -#~ msgstr "" -#~ "ATC 控制器\n" -#~ "模式:@1\n" -#~ "频道:@2" +#~ msgid "Industrial wood wagon" +#~ msgstr "木材运输车厢" -#~ msgid "Access to @1" -#~ msgstr "可前往@1" +#~ msgid "Japanese Train Engine" +#~ msgstr "高速列车车头" -#~ msgid "Can't get on: wagon full or doors closed!" -#~ msgstr "无法上车:车门已关闭或车厢已满。" +#~ msgid "Japanese Train Inter-Wagon Connection" +#~ msgstr "日本火车车钩" -#~ msgid "Can't place: protected position!" -#~ msgstr "无法放置:此区域已被保护。" +#~ msgid "Japanese Train Wagon" +#~ msgstr "高速列车车厢" -#~ msgid "Default Seat" -#~ msgstr "默认座位" +#, fuzzy +#~ msgid "Japanese signal pole" +#~ msgstr "高速列车车厢" -#~ msgid "Default Seat (driver stand)" -#~ msgstr "默认座位 (司机座位)" +#~ msgid "Kick out passengers" +#~ msgstr "踢出乘客" -#~ msgid "Deprecated Track" -#~ msgstr "请不要使用" +#~ msgid "Loading Track" +#~ msgstr "装货轨道" #~ msgid "Lock couples" #~ msgstr "锁定连接处" +#~ msgid "Passenger Wagon" +#~ msgstr "客车" + +#, fuzzy +#~ msgid "Passenger area" +#~ msgstr "客车" + +#~ msgid "" +#~ "Passive Component Naming Tool\n" +#~ "\n" +#~ "Right-click to name a passive component." +#~ msgstr "" +#~ "被动元件命名工具\n" +#~ "\n" +#~ "右键单击命名所选元件。" + +#~ msgid "Perpendicular Diamond Crossing Track" +#~ msgstr "垂直交叉轨道" + +#~ msgid "Reverse train" +#~ msgstr "改变行车方向" + +#~ msgid "Signal" +#~ msgstr "信号灯" + #~ msgid "Speed:" #~ msgstr "速度" +#~ msgid "Station Code" +#~ msgstr "车站代码" + +#~ msgid "Station Name" +#~ msgstr "车站名称" + +#~ msgid "Station/Stop Track" +#~ msgstr "车站轨道" + +#~ msgid "Steam Engine" +#~ msgstr "蒸汽机车" + +#~ msgid "Stop Time" +#~ msgstr "停站时间" + +#~ msgid "Subway Passenger Wagon" +#~ msgstr "地铁车厢" + #~ msgid "Target:" #~ msgstr "目标速度" @@ -684,13 +815,49 @@ msgstr "探测轨道" #~ msgid "This position is protected!" #~ msgstr "这里已被保护。" +#~ msgid "This track can not be changed." +#~ msgstr "您不能调整这段轨道。" + +#~ msgid "Track" +#~ msgstr "轨道" + +#, fuzzy +#~ msgid "Train " +#~ msgstr "已复制列车。" + +#~ msgid "Unconfigured LuaATC component" +#~ msgstr "LuaATC 部件 (未配置)" + +#~ msgid "Unloading Track" +#~ msgstr "卸货轨道" + #~ msgid "Use Sneak+rightclick to bypass closed doors!" #~ msgstr "请使用潜行+右键上车。" +#~ msgid "Y-turnout" +#~ msgstr "对称道岔" + +#~ msgid "" +#~ "You are not allowed to configure this LuaATC component without the @1 " +#~ "privilege." +#~ msgstr "您没有“@1”权限,不能配置这个 LuaATC 部件。" + +#~ msgid "" +#~ "You are not allowed to configure this track without the @1 privilege." +#~ msgstr "您没有“@1”权限,不能调整这段轨道。" + +#~ msgid "You are not allowed to configure this track." +#~ msgstr "您不能调整这段轨道。" + #, fuzzy #~ msgid "You are not allowed to modify this protected track." #~ msgstr "这里已被保护,您不能在这里建造铁路。" #~ msgid "" +#~ "You are not allowed to name LuaATC passive components without the @1 " +#~ "privilege." +#~ msgstr "您没有“@1”权限,不能命名被动元件。" + +#~ msgid "" #~ "You need to own at least one neighboring wagon to destroy this couple." #~ msgstr "您必须至少拥有其中一节车厢才能分开这两节车厢。" diff --git a/advtrains/po/zh_TW.po b/advtrains/po/zh_TW.po index ece82c3..b46de64 100644 --- a/advtrains/po/zh_TW.po +++ b/advtrains/po/zh_TW.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: advtrains\n" "Report-Msgid-Bugs-To: advtrains-discuss@lists.sr.ht\n" -"POT-Creation-Date: 2023-10-09 11:02+0200\n" +"POT-Creation-Date: 2025-06-10 21:40+0200\n" "PO-Revision-Date: 2023-10-09 11:31+0200\n" "Last-Translator: Y. Wang <yw05@forksworld.de>\n" "Language-Team: Chinese (Traditional)\n" @@ -12,57 +12,87 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Poedit 3.3.2\n" -#: advtrains/atc.lua:109 -msgid "Unconfigured ATC controller" -msgstr "ATC 控制器 (未配置)" +#: atc.lua +msgid "ATC Kick command warning: doors are closed." +msgstr "ATC 警告:車門已關閉,無法踢出乘客。" -#: advtrains/atc.lua:150 -msgid "" -"ATC controller, mode @1\n" -"Command: @2" +#: atc.lua +msgid "ATC Kick command warning: train moving." +msgstr "ATC 警告:火車正在移動,無法踢出乘客。" + +#: atc.lua +msgid "ATC Reverse command warning: didn't reverse train, train moving." +msgstr "ATC 警告:火車正在移動,無法改變行車方向。" + +#: atc.lua +msgid "ATC command parse error: Unknown command: @1" +msgstr "ATC 語法錯誤:未知命令:@1" + +#: atc.lua +msgid "ATC command syntax error: I statement not closed: @1" +msgstr "ATC 語法錯誤:「I」命令不完整:@1" + +#: atc.lua +#, fuzzy +msgid "ATC controller, Command: @1" msgstr "" "ATC 控制器\n" "模式:@1\n" "命令:@2" -#: advtrains/atc.lua:180 +#: atc.lua msgid "Command" msgstr "命令" -#: advtrains/atc.lua:184 -msgid "Command (on)" -msgstr "命令 (啟用時)" - -#: advtrains/atc.lua:187 +#: atc.lua msgid "Digiline channel" msgstr "Digiline 頻道" -#: advtrains/atc.lua:189 advtrains_line_automation/stoprail.lua:65 -#: advtrains_luaautomation/active_common.lua:48 +#: atc.lua wagons.lua msgid "Save" msgstr "儲存" -#: advtrains/atc.lua:236 -msgid "ATC Reverse command warning: didn't reverse train, train moving." -msgstr "ATC 警告:火車正在移動,無法改變行車方向。" +#: atc.lua +msgid "Unconfigured ATC controller" +msgstr "ATC 控制器 (未配置)" -#: advtrains/atc.lua:248 -msgid "ATC Kick command warning: doors are closed." -msgstr "ATC 警告:車門已關閉,無法踢出乘客。" +#: copytool.lua +msgid "Back of train would end up off track, cancelling." +msgstr "火車後部不在軌道上。" -#: advtrains/atc.lua:252 -msgid "ATC Kick command warning: train moving." -msgstr "ATC 警告:火車正在移動,無法踢出乘客。" +#: copytool.lua +msgid "No such lua entity." +msgstr "您沒有指向一個可以用火車複製工具複製的物體。" -#: advtrains/atc.lua:322 -msgid "ATC command syntax error: I statement not closed: @1" -msgstr "ATC 語法錯誤:「I」命令不完整:@1" +#: copytool.lua +msgid "No such train: @1." +msgstr "ID 為「@1」的列車不存在。" -#: advtrains/atc.lua:385 -msgid "ATC command parse error: Unknown command: @1" -msgstr "ATC 語法錯誤:未知命令:@1" +#: copytool.lua +msgid "No such wagon: @1." +msgstr "ID 為「@1」的車廂不存在。" + +#: copytool.lua +msgid "The clipboard couldn't access the metadata. Copy failed." +msgstr "無法複製:剪貼簿無法訪問元資料。" + +#: copytool.lua +msgid "The clipboard couldn't access the metadata. Paste failed." +msgstr "無法貼上:剪貼簿無法訪問元資料。" + +#: copytool.lua +msgid "The clipboard is empty." +msgstr "剪貼簿是空的。" + +#: copytool.lua +msgid "The track you are trying to place the wagon on is not long enough." +msgstr "軌道太短。" + +#: copytool.lua +msgid "Train copied." +msgstr "已複製火車。" -#: advtrains/copytool.lua:8 +#: copytool.lua msgid "" "Train copy/paste tool\n" "\n" @@ -74,166 +104,295 @@ msgstr "" "左鍵單擊:複製\n" "右鍵單擊:粘帖" -#: advtrains/copytool.lua:29 +#: copytool.lua msgid "You do not have the @1 privilege." msgstr "您沒有「@1」許可權。" -#: advtrains/copytool.lua:41 -msgid "The track you are trying to place the wagon on is not long enough." -msgstr "軌道太短。" - -#: advtrains/copytool.lua:47 -msgid "The clipboard couldn't access the metadata. Paste failed." -msgstr "無法貼上:剪貼簿無法訪問元資料。" - -#: advtrains/copytool.lua:52 advtrains/copytool.lua:57 -msgid "The clipboard is empty." -msgstr "剪貼簿是空的。" - -#: advtrains/copytool.lua:74 -msgid "Back of train would end up off track, cancelling." -msgstr "火車後部不在軌道上。" - -#: advtrains/copytool.lua:92 -msgid "No such lua entity." -msgstr "您沒有指向一個可以用火車複製工具複製的物體。" - -#: advtrains/copytool.lua:98 -msgid "No such wagon: @1." -msgstr "ID 為「@1」的車廂不存在。" - -#: advtrains/copytool.lua:104 -msgid "No such train: @1." -msgstr "ID 為「@1」的列車不存在。" - -#: advtrains/copytool.lua:176 -msgid "The clipboard couldn't access the metadata. Copy failed." -msgstr "無法複製:剪貼簿無法訪問元資料。" - -#: advtrains/copytool.lua:180 -msgid "Train copied." -msgstr "已複製火車。" +#: couple.lua +msgid "<No coupler>" +msgstr "<無連結器>" -#: advtrains/couple.lua:28 +#: couple.lua msgid "Buffer and Chain Coupler" msgstr "鏈式連結器" -#: advtrains/couple.lua:29 +#: couple.lua +msgid "Can not couple: The couplers of the trains do not match (@1 and @2)." +msgstr "您無法連結這兩節車廂:這兩節車廂使用不同的連結器 (@1和@2)。" + +#: couple.lua +msgid "" +"Cannot couple @1 and @2 - train would have length @3 which is above the " +"limit of @4" +msgstr "" + +#: couple.lua msgid "Scharfenberg Coupler" msgstr "Scharfenberg 式連結器" -#: advtrains/couple.lua:185 +#: couple.lua msgid "" "You are not allowed to couple trains without the train_operator privilege." msgstr "您沒有「train_operator」許可權,不能連結這兩節車廂。" -#: advtrains/couple.lua:329 advtrains/couple.lua:333 -msgid "<No coupler>" -msgstr "<無連結器>" - -#: advtrains/couple.lua:334 -msgid "Can not couple: The couplers of the trains do not match (@1 and @2)." -msgstr "您無法連結這兩節車廂:這兩節車廂使用不同的連結器 (@1和@2)。" - -#: advtrains/craft_items.lua:3 +#: craft_items.lua msgid "Boiler" msgstr "鍋爐" -#: advtrains/craft_items.lua:9 +#: craft_items.lua +msgid "Chimney" +msgstr "煙囪" + +#: craft_items.lua msgid "Driver's cab" msgstr "駕駛室" -#: advtrains/craft_items.lua:15 +#: craft_items.lua msgid "Wheel" msgstr "車輪" -#: advtrains/craft_items.lua:21 -msgid "Chimney" -msgstr "煙囪" +#: init.lua +msgid "Advtrains Status: no_action @1 slowdown @2 (log @3)" +msgstr "" -#: advtrains/misc_nodes.lua:16 -msgid "@1 Platform (low)" -msgstr "較低的@1月臺" +#: init.lua +msgid "Advtrains is already running normally!" +msgstr "" -#: advtrains/misc_nodes.lua:33 -msgid "@1 Platform (high)" -msgstr "較高的@1月臺" +#: init.lua +msgid "" +"Crash during advtrains main step - skipping the shutdown save operation to " +"not save inconsistent data!" +msgstr "" + +#: init.lua +msgid "" +"Data is being saved. While saving, advtrains will remove the players from " +"trains. Save files will be reloaded afterwards!" +msgstr "" + +#: init.lua +msgid "Delete all train routes, force them to recalculate" +msgstr "" + +#: init.lua +msgid "" +"Detach all players, especially the offline ones, from all trains. Use only " +"when no one serious is on a train." +msgstr "" + +#: init.lua +msgid "Disable the advtrains globalstep temporarily" +msgstr "" + +#: init.lua +msgid "Disabled advtrains successfully" +msgstr "" + +#: init.lua +msgid "Instructed to save() but load() was never called!" +msgstr "" + +#: init.lua +msgid "Print advtrains status info" +msgstr "" + +#: init.lua +msgid "Re-enabling advtrains globalstep..." +msgstr "" + +#: init.lua +msgid "Reload successful!" +msgstr "" + +#: init.lua +msgid "Removing unused wagon" +msgstr "" + +#: init.lua +msgid "Restoring saved state in 1 second..." +msgstr "" + +#: init.lua +msgid "Returns the position of the train with the given id" +msgstr "" + +#: init.lua +msgid "Saving failed: @1" +msgstr "" -#: advtrains/misc_nodes.lua:59 +#: init.lua +msgid "Successfully invalidated train routes" +msgstr "" + +#: init.lua +msgid "Teleporting to train @1" +msgstr "" + +#: init.lua +msgid "Teleports you to the position of the train with the given id" +msgstr "" + +#: init.lua +msgid "" +"The advtrains globalstep has been disabled. Trains are not moving, and no " +"data is saved! Run '/at_disable_step no' to enable again!" +msgstr "" + +#: init.lua +msgid "Train @1 does not exist or is invalid" +msgstr "" + +#: init.lua +msgid "" +"Train @1 had no wagons left because of some bug. It is being deleted. Wave " +"it goodbye!" +msgstr "" + +#: init.lua +msgid "Train @1 is at @2" +msgstr "" + +#: init.lua +msgid "from wagon_save table." +msgstr "" + +#: misc_nodes.lua msgid "@1 Platform (45 degree)" msgstr "較高的@1月臺 (45°)" -#: advtrains/misc_nodes.lua:81 +#: misc_nodes.lua +msgid "@1 Platform (high)" +msgstr "較高的@1月臺" + +#: misc_nodes.lua +msgid "@1 Platform (low)" +msgstr "較低的@1月臺" + +#: misc_nodes.lua msgid "@1 Platform (low, 45 degree)" msgstr "較低的@1月臺 (45°)" -#: advtrains/protection.lua:7 -msgid "Can place, remove and operate trains" +#: protection.lua +msgid "Can operate turnouts and signals in unprotected areas" +msgstr "" + +#: protection.lua +msgid "Can place and dig tracks in unprotected areas" msgstr "" -#: advtrains/protection.lua:12 +#: protection.lua msgid "" "Can place, remove and operate any train, regardless of owner, whitelist, or " "protection" msgstr "" -#: advtrains/protection.lua:18 -msgid "Can place and dig tracks in unprotected areas" +#: protection.lua +msgid "Can place, remove and operate trains" msgstr "" -#: advtrains/protection.lua:24 -msgid "Can operate turnouts and signals in unprotected areas" -msgstr "" +#: protection.lua +msgid "You are not allowed to build near tracks at this protected position." +msgstr "這裡已被保護,您不能在這裡的鐵路附近建任何東西。" -#: advtrains/protection.lua:148 +#: protection.lua msgid "" "You are not allowed to build near tracks without the track_builder privilege." msgstr "您沒有「train_operator」許可權,不能在鐵路附近建任何東西。" -#: advtrains/protection.lua:148 +#: protection.lua +msgid "You are not allowed to build tracks at this protected position." +msgstr "這裡已被保護,您不能在這裡建造鐵路。" + +#: protection.lua msgid "" "You are not allowed to build tracks without the track_builder privilege." msgstr "您沒有「train_operator」許可權,不能在這裡建造鐵路。" -#: advtrains/protection.lua:153 -msgid "You are not allowed to build near tracks at this protected position." -msgstr "這裡已被保護,您不能在這裡的鐵路附近建任何東西。" - -#: advtrains/protection.lua:153 -msgid "You are not allowed to build tracks at this protected position." -msgstr "這裡已被保護,您不能在這裡建造鐵路。" - -#: advtrains/protection.lua:184 +#: protection.lua msgid "" "You are not allowed to operate turnouts and signals without the " "railway_operator privilege." msgstr "您沒有「railway_operator」許可權,不能控制鐵路設施。" -#: advtrains/signals.lua:63 -msgid "Lampless Signal" +#: signals.lua +msgid "Andrew's Cross" +msgstr "平交道號誌燈" + +#: signals.lua +#, fuzzy +msgid "Lampless Signal (deprecated!)" msgstr "臂木式號誌機" -#: advtrains/signals.lua:127 -msgid "Signal" -msgstr "色燈號誌機" +#: signals.lua +msgid "Signal (deprecated!)" +msgstr "" -#: advtrains/signals.lua:191 -msgid "Wallmounted Signal (left)" +#: signals.lua +#, fuzzy +msgid "Wallmounted Signal (left) (deprecated!)" msgstr "壁掛式色燈號誌機 (左側)" -#: advtrains/signals.lua:192 -msgid "Wallmounted Signal (right)" +#: signals.lua +#, fuzzy +msgid "Wallmounted Signal (right) (deprecated!)" msgstr "壁掛式色燈號誌機 (右側)" -#: advtrains/signals.lua:193 -msgid "Wallmounted Signal (top)" +#: signals.lua +#, fuzzy +msgid "Wallmounted Signal (top) (deprecated!)" msgstr "懸掛式色燈號誌機" -#: advtrains/signals.lua:281 advtrains/signals.lua:322 -msgid "Andrew's Cross" -msgstr "平交道號誌燈" +#: track_reg_helper.lua +msgid "@1 Slope" +msgstr "@1斜坡" + +#: track_reg_helper.lua +#, fuzzy +msgid "Can't place: Not enough slope items left (@1 required)" +msgstr "無法放置斜坡:您沒有足夠的鐵路斜坡放置工具 (您總共需要@1個)" + +#: track_reg_helper.lua +#, fuzzy +msgid "Can't place: There's no slope of length @1" +msgstr "無法放置斜坡:advtrains 不支援長度為@1米的斜坡。" + +#: track_reg_helper.lua +#, fuzzy +msgid "Can't place: no supporting node at upper end." +msgstr "無法放置斜坡:較高階沒有支撐方塊。" + +#: track_reg_helper.lua +#, fuzzy +msgid "Can't place: not pointing at node" +msgstr "無法放置斜坡:您沒有選擇任何方塊。" + +#: track_reg_helper.lua +#, fuzzy +msgid "Can't place: space occupied!" +msgstr "無法放置斜坡:此區域已被佔用。" + +#: track_reg_helper.lua tracks.lua +#, fuzzy +msgid "This track can not be removed!" +msgstr "您不能移除這段軌道。" + +#: trackplacer.lua +#, fuzzy +msgid "This node can't be changed using the trackworker!" +msgstr "您不能使用鐵路調整工具調整這個方塊。" + +#: trackplacer.lua +#, fuzzy +msgid "This node can't be rotated using the trackworker!" +msgstr "您不能使用鐵路調整工具旋轉這個方塊。" + +#: trackplacer.lua +#, fuzzy +msgid "This track can not be rotated!" +msgstr "您不能旋轉這段軌道。" -#: advtrains/trackplacer.lua:313 +#: trackplacer.lua msgid "" "Track Worker Tool\n" "\n" @@ -245,435 +404,407 @@ msgstr "" "左鍵單擊:切換軌道型別\n" "右鍵單擊:旋轉方塊" -#: advtrains/trackplacer.lua:340 advtrains/trackplacer.lua:377 -msgid "This node can't be rotated using the trackworker." -msgstr "您不能使用鐵路調整工具旋轉這個方塊。" - -#: advtrains/trackplacer.lua:350 -msgid "This track can not be rotated." -msgstr "您不能旋轉這段軌道。" - -#: advtrains/trackplacer.lua:404 -msgid "This node can't be changed using the trackworker." -msgstr "您不能使用鐵路調整工具調整這個方塊。" - -#: advtrains/trackplacer.lua:414 -msgid "This track can not be changed." -msgstr "您不能調整這段軌道。" - -#: advtrains/tracks.lua:449 -msgid "This track can not be removed." -msgstr "您不能移除這段軌道。" - -#: advtrains/tracks.lua:616 +#: tracks.lua msgid "Position is occupied by a train." msgstr "" -#: advtrains/tracks.lua:622 +#: tracks.lua +msgid "There's a Signal Influence Point here." +msgstr "" + +#: tracks.lua msgid "There's a Track Circuit Break here." msgstr "" -#: advtrains/tracks.lua:626 -msgid "There's a Signal Influence Point here." +#: trainhud.lua +msgid "OVERRUN RED SIGNAL! Examine situation and reverse train to move again." msgstr "" -#: advtrains/tracks.lua:637 -msgid "@1 Slope" -msgstr "@1斜坡" +#: wagonprop_tool.lua +msgid "Insufficient privileges to use this!" +msgstr "" -#: advtrains/tracks.lua:648 advtrains/tracks.lua:653 -msgid "Can't place slope: not pointing at node." -msgstr "無法放置斜坡:您沒有選擇任何方塊。" +#: wagonprop_tool.lua +#, fuzzy +msgid "Wagon Properties Tool" +msgstr "車廂屬性" -#: advtrains/tracks.lua:658 -msgid "Can't place slope: space occupied." -msgstr "無法放置斜坡:此區域已被佔用。" +#: wagonprop_tool.lua +msgid "" +"Wagon Properties Tool\n" +"Punch a wagon to view and edit the Wagon Properties" +msgstr "" -#: advtrains/tracks.lua:711 -msgid "Can't place slope: Not enough slope items left (@1 required)." -msgstr "無法放置斜坡:您沒有足夠的鐵路斜坡放置工具 (您總共需要@1個)" +#: wagons.lua +msgid " units" +msgstr "" -#: advtrains/tracks.lua:714 -msgid "Can't place slope: There's no slope of length @1." -msgstr "無法放置斜坡:advtrains 不支援長度為@1米的斜坡。" +#: wagons.lua +msgid "!!! Train off track !!!" +msgstr "" -#: advtrains/tracks.lua:721 -msgid "Can't place slope: no supporting node at upper end." -msgstr "無法放置斜坡:較高階沒有支撐方塊。" +#: wagons.lua +msgid "(Doors closed)" +msgstr "(車門已關閉)" -#: advtrains/trainhud.lua:305 -msgid "OVERRUN RED SIGNAL! Examine situation and reverse train to move again." +#: wagons.lua +msgid "Allow these players to access your wagon:" msgstr "" -#: advtrains/wagons.lua:179 -msgid "This wagon is owned by @1, you can't destroy it." -msgstr "這是 @1 的車廂,您不能摧毀它。" - -#: advtrains/wagons.lua:203 -msgid "The wagon's inventory is not empty." +#: wagons.lua +msgid "Clear 'Disable ARS' flag" msgstr "" -#: advtrains/wagons.lua:210 -msgid "Wagon needs to be decoupled from other wagons in order to destroy it." +#: wagons.lua +msgid "Current FC: " msgstr "" -#: advtrains/wagons.lua:216 +#: wagons.lua msgid "" -"Warning: If you destroy this wagon, you only get some steel back! If you are " -"sure, hold Sneak and left-click the wagon." +"Destroying wagon with inventory, but inventory is not found? Shouldn't " +"happen!" msgstr "" -"警告:如果您摧毀此車廂,您只能拿到一些鋼方塊。如果您確定要摧毀這節車廂,請按" -"潛行鍵並左鍵單擊此車廂。" -#: advtrains/wagons.lua:649 advtrains/wagons.lua:850 -msgid "Show Inventory" -msgstr "顯示物品欄" - -#: advtrains/wagons.lua:652 -msgid "Onboard Computer" +#: wagons.lua +msgid "Doors are closed! (Try holding sneak key!)" msgstr "" -#: advtrains/wagons.lua:655 advtrains/wagons.lua:1328 -msgid "Wagon properties" -msgstr "車廂屬性" +#: wagons.lua +msgid "" +"Doors are closed. Use Sneak+rightclick to ignore the closed doors and get " +"off." +msgstr "車門已關閉,請使用潛行+右鍵單擊下車。" -#: advtrains/wagons.lua:658 +#: wagons.lua +msgid "Freight Code:" +msgstr "" + +#: wagons.lua msgid "Get off" msgstr "下車" -#: advtrains/wagons.lua:661 +#: wagons.lua msgid "Get off (forced)" msgstr "強制下車" -#: advtrains/wagons.lua:663 -msgid "(Doors closed)" -msgstr "(車門已關閉)" - -#: advtrains/wagons.lua:692 -msgid "This wagon has no seats." -msgstr "這節車廂沒有座位。" - -#: advtrains/wagons.lua:703 -msgid "This wagon is full." -msgstr "車廂已滿。" +#: wagons.lua +msgid "Line" +msgstr "火車線路" -#: advtrains/wagons.lua:706 -msgid "Doors are closed! (Try holding sneak key!)" +#: wagons.lua +msgid "Liquid: " msgstr "" -#: advtrains/wagons.lua:712 -msgid "You can't get on this wagon." +#: wagons.lua +msgid "Liquid: empty" msgstr "" -#: advtrains/wagons.lua:838 -msgid "Select seat:" -msgstr "請選擇座位:" - -#: advtrains/wagons.lua:880 -msgid "Save wagon properties" -msgstr "儲存車廂屬性" - -#: advtrains/wagons.lua:965 -msgid "Text displayed outside on train" -msgstr "車廂外部顯示" - -#: advtrains/wagons.lua:966 -msgid "Text displayed inside train" -msgstr "車廂內部顯示" +#: wagons.lua +msgid "Missing train_operator privilege" +msgstr "" -#: advtrains/wagons.lua:967 -msgid "Line" -msgstr "火車線路" +#: wagons.lua +msgid "Next FC:" +msgstr "" -#: advtrains/wagons.lua:968 -msgid "Routingcode" -msgstr "路由碼" +#: wagons.lua +msgid "Not a valid wagon id." +msgstr "" -#: advtrains/wagons.lua:1241 -msgid "" -"Doors are closed. Use Sneak+rightclick to ignore the closed doors and get " -"off." -msgstr "車門已關閉,請使用潛行+右鍵單擊下車。" +#: wagons.lua +#, fuzzy +msgid "Not allowed to do this." +msgstr "您不能調整這段軌道。" -#: advtrains/wagons.lua:1250 -msgid "You are not allowed to access the driver stand." +#: wagons.lua +msgid "Onboard Computer" msgstr "" -#: advtrains_interlocking/tsr_rail.lua:13 -msgid "Point speed restriction: @1" +#: wagons.lua +msgid "Please specify a player name to transfer ownership to." msgstr "" -#: advtrains_interlocking/tsr_rail.lua:14 -msgid "Set point speed restriction:" +#: wagons.lua +msgid "Prev FC" msgstr "" -#: advtrains_interlocking/tsr_rail.lua:30 -msgid "You are not allowed to configure this track without the @1 privilege." -msgstr "您沒有「@1」許可權,不能調整這段軌道。" - -#: advtrains_interlocking/tsr_rail.lua:34 -#: advtrains_line_automation/stoprail.lua:31 -#: advtrains_line_automation/stoprail.lua:76 -msgid "You are not allowed to configure this track." -msgstr "您不能調整這段軌道。" - -#: advtrains_interlocking/tsr_rail.lua:64 -msgid "Point Speed Restriction Track" +#: wagons.lua +msgid "Remote Routesetting" msgstr "" -#: advtrains_line_automation/stoprail.lua:54 -msgid "Station Code" -msgstr "車站碼" +#: wagons.lua +msgid "Routingcode" +msgstr "路由碼" -#: advtrains_line_automation/stoprail.lua:55 -msgid "Station Name" -msgstr "車站名稱" +#: wagons.lua +msgid "Save wagon properties" +msgstr "儲存車廂屬性" -#: advtrains_line_automation/stoprail.lua:56 -msgid "Door Delay" -msgstr "車門關閉時間" +#: wagons.lua +msgid "Select seat:" +msgstr "請選擇座位:" -#: advtrains_line_automation/stoprail.lua:57 -msgid "Dep. Speed" -msgstr "出發速度" +#: wagons.lua +msgid "Show Inventory" +msgstr "顯示物品欄" -#: advtrains_line_automation/stoprail.lua:58 advtrains_train_track/init.lua:11 -#: advtrains_train_track/init.lua:156 -msgid "Track" -msgstr "軌道" +#: wagons.lua +msgid "Text displayed inside train" +msgstr "車廂內部顯示" -#: advtrains_line_automation/stoprail.lua:59 -msgid "Stop Time" -msgstr "停站時間" +#: wagons.lua +msgid "Text displayed outside on train" +msgstr "車廂外部顯示" -#: advtrains_line_automation/stoprail.lua:60 -msgid "Door Side" +#: wagons.lua +msgid "That player does not exist!" msgstr "" -#: advtrains_line_automation/stoprail.lua:62 -msgid "Reverse train" -msgstr "改變行車方向" +#: wagons.lua +#, fuzzy +msgid "That wagon does not exist!" +msgstr "這節車廂沒有座位。" -#: advtrains_line_automation/stoprail.lua:63 -msgid "Kick out passengers" -msgstr "踢出乘客" +#: wagons.lua +#, fuzzy +msgid "The track you are trying to place the wagon on is not long enough!" +msgstr "軌道太短。" -#: advtrains_line_automation/stoprail.lua:97 -msgid "Station code \"@1\" already exists and is owned by @2." +#: wagons.lua +msgid "The wagon's inventory is not empty." msgstr "" -#: advtrains_line_automation/stoprail.lua:111 -msgid "This station is owned by @1. You are not allowed to edit its name." -msgstr "" +#: wagons.lua +#, fuzzy +msgid "This Wagon ID" +msgstr "車廂已滿。" -#: advtrains_line_automation/stoprail.lua:221 -msgid "Station/Stop Track" -msgstr "車站軌道" +#: wagons.lua +msgid "This wagon has no seats." +msgstr "這節車廂沒有座位。" -#: advtrains_luaautomation/active_common.lua:17 -msgid "Unconfigured LuaATC component" -msgstr "LuaATC 元件 (未配置)" +#: wagons.lua +msgid "This wagon is full." +msgstr "車廂已滿。" -#: advtrains_luaautomation/active_common.lua:46 -msgid "LuaATC Environment" -msgstr "" +#: wagons.lua +msgid "This wagon is owned by @1, you can't destroy it." +msgstr "這是 @1 的車廂,您不能摧毀它。" -#: advtrains_luaautomation/active_common.lua:49 -msgid "Clear Local Environment" +#: wagons.lua +msgid "Train ID" msgstr "" -#: advtrains_luaautomation/active_common.lua:50 -msgid "Code" +#: wagons.lua +msgid "Train overview / coupling control is only shown when the train stands." msgstr "" -#: advtrains_luaautomation/active_common.lua:64 -msgid "" -"You are not allowed to configure this LuaATC component without the @1 " -"privilege." -msgstr "您沒有「@1」許可權,不能配置這個 LuaATC 元件。" +#: wagons.lua +msgid "Train overview /coupling control:" +msgstr "" -#: advtrains_luaautomation/active_common.lua:94 -msgid "LuaATC component assigned to environment '@1'" +#: wagons.lua +msgid "Uninitialized, removing" msgstr "" -#: advtrains_luaautomation/active_common.lua:96 -msgid "LuaATC component assigned to an invalid environment" +#: wagons.lua +msgid "Wagon @1 ownership changed from @2 to @3" msgstr "" -#: advtrains_luaautomation/active_common.lua:171 -msgid "LuaATC component with error: @1" +#: wagons.lua +msgid "Wagon needs to be decoupled from other wagons in order to destroy it." msgstr "" -#: advtrains_luaautomation/init.lua:13 -msgid "" -"Can place and configure LuaATC components, including execute potentially " -"harmful Lua code" +#: wagons.lua +#, fuzzy +msgid "Wagon placeholder" +msgstr "車廂屬性" + +#: wagons.lua +msgid "Wagon properties" +msgstr "車廂屬性" + +#: wagons.lua +msgid "Wagon road number:" msgstr "" -#: advtrains_luaautomation/mesecon_controller.lua:211 -msgid "LuaATC Mesecon Controller" +#: wagons.lua +msgid "" +"Warning: If you destroy this wagon, you only get some steel back! If you are " +"sure, hold Sneak and left-click the wagon." msgstr "" +"警告:如果您摧毀此車廂,您只能拿到一些鋼方塊。如果您確定要摧毀這節車廂,請按" +"潛行鍵並左鍵單擊此車廂。" -#: advtrains_luaautomation/operation_panel.lua:11 -msgid "LuaATC Operation Panel" +#: wagons.lua +msgid "You are not allowed to access the driver stand." msgstr "" -#: advtrains_luaautomation/pcnaming.lua:28 -msgid "" -"Passive Component Naming Tool\n" -"\n" -"Right-click to name a passive component." +#: wagons.lua +msgid "You can't get on this wagon." msgstr "" -"被動元件命名工具\n" -"\n" -"右鍵單擊命名所選元件。" -#: advtrains_luaautomation/pcnaming.lua:39 -msgid "" -"You are not allowed to name LuaATC passive components without the @1 " -"privilege." -msgstr "您沒有「@1」許可權,不能命名這個元件。" +#: wagons.lua +#, fuzzy +msgid "You don't have the train_operator privilege." +msgstr "您沒有「@1」許可權。" -#: advtrains_luaautomation/pcnaming.lua:62 -msgid "Set name of component (empty to clear)" +#: wagons.lua +msgid "You have been given ownership of wagon @1" msgstr "" -#: advtrains_train_industrial/init.lua:10 -#: advtrains_train_industrial/init.lua:49 advtrains_train_steam/init.lua:20 -#: advtrains_train_steam/init.lua:91 -msgid "Driver Stand (right)" -msgstr "右側司機座位" +#~ msgid "3-way turnout" +#~ msgstr "三開道岔" -#: advtrains_train_industrial/init.lua:17 -#: advtrains_train_industrial/init.lua:56 advtrains_train_steam/init.lua:14 -#: advtrains_train_steam/init.lua:85 -msgid "Driver Stand (left)" -msgstr "左側司機座位" +#~ msgid "90+Angle Diamond Crossing Track" +#~ msgstr "交叉軌道 (其中一條軌道與座標軸平行)" -#: advtrains_train_industrial/init.lua:40 -msgid "Industrial Train Engine" -msgstr "工業用火車頭" +#~ msgid "ATC controller" +#~ msgstr "ATC 控制器" -#: advtrains_train_industrial/init.lua:79 -msgid "Big Industrial Train Engine" -msgstr "大型工業用火車頭" +#~ msgid "" +#~ "ATC controller, mode @1\n" +#~ "Channel: @2" +#~ msgstr "" +#~ "ATC 控制器\n" +#~ "模式:@1\n" +#~ "頻道:@2" -#: advtrains_train_industrial/init.lua:98 -msgid "Industrial tank wagon" -msgstr "液體運輸車廂" +#~ msgid "Access to @1" +#~ msgstr "可前往@1" -#: advtrains_train_industrial/init.lua:116 -msgid "Industrial wood wagon" -msgstr "木材運輸車廂" +#~ msgid "Big Industrial Train Engine" +#~ msgstr "大型工業用火車頭" -#: advtrains_train_japan/init.lua:4 -msgid "Japanese Train Inter-Wagon Connection" -msgstr "日本火車連結器" +#~ msgid "Box Wagon" +#~ msgstr "貨運車廂" -#: advtrains_train_japan/init.lua:37 -msgid "Driver stand" -msgstr "司機座位" +#~ msgid "Bumper" +#~ msgstr "保險槓" -#: advtrains_train_japan/init.lua:101 -msgid "Japanese Train Engine" -msgstr "高速列車車頭" +#~ msgid "Can't get on: wagon full or doors closed!" +#~ msgstr "無法上車:車門已關閉或車廂已滿。" -#: advtrains_train_japan/init.lua:176 -msgid "Japanese Train Wagon" -msgstr "高速列車車廂" +#~ msgid "Can't place: protected position!" +#~ msgstr "無法放置:此區域已被保護。" -#: advtrains_train_steam/init.lua:75 -msgid "Steam Engine" -msgstr "蒸汽機車" +#~ msgid "Command (on)" +#~ msgstr "命令 (啟用時)" -#: advtrains_train_steam/init.lua:159 -msgid "Detailed Steam Engine" -msgstr "精細的蒸汽機車" +#~ msgid "Default Seat" +#~ msgstr "預設座位" -#: advtrains_train_steam/init.lua:206 -msgid "Passenger Wagon" -msgstr "客車" +#~ msgid "Default Seat (driver stand)" +#~ msgstr "預設座位 (司機座位)" -#: advtrains_train_steam/init.lua:226 -msgid "Box Wagon" -msgstr "貨運車廂" +#~ msgid "Dep. Speed" +#~ msgstr "出發速度" -#: advtrains_train_subway/init.lua:144 -msgid "Subway Passenger Wagon" -msgstr "地鐵車廂" +#~ msgid "Deprecated Track" +#~ msgstr "請不要使用" -#: advtrains_train_track/init.lua:31 -msgid "Y-turnout" -msgstr "對稱道岔" +#~ msgid "Detailed Steam Engine" +#~ msgstr "精細的蒸汽機車" -#: advtrains_train_track/init.lua:49 -msgid "3-way turnout" -msgstr "三開道岔" +#~ msgid "Detector Rail" +#~ msgstr "探測軌道" -#: advtrains_train_track/init.lua:69 -msgid "Perpendicular Diamond Crossing Track" -msgstr "垂直交叉軌道" +#~ msgid "Diagonal Diamond Crossing Track" +#~ msgstr "交叉軌道" -#: advtrains_train_track/init.lua:91 -msgid "90+Angle Diamond Crossing Track" -msgstr "交叉軌道 (其中一條軌道與座標軸平行)" +#~ msgid "Door Delay" +#~ msgstr "車門關閉時間" -#: advtrains_train_track/init.lua:132 -msgid "Diagonal Diamond Crossing Track" -msgstr "交叉軌道" +#, fuzzy +#~ msgid "Driver Stand" +#~ msgstr "司機座位" -#: advtrains_train_track/init.lua:179 -msgid "Bumper" -msgstr "保險槓" +#~ msgid "Driver Stand (left)" +#~ msgstr "左側司機座位" -#: advtrains_train_track/init.lua:201 -msgid "ATC controller" -msgstr "ATC 控制器" +#~ msgid "Driver Stand (right)" +#~ msgstr "右側司機座位" -#: advtrains_train_track/init.lua:317 -msgid "Unloading Track" -msgstr "卸貨軌道" +#~ msgid "Driver stand" +#~ msgstr "司機座位" -#: advtrains_train_track/init.lua:342 -msgid "Loading Track" -msgstr "裝貨軌道" +#~ msgid "Industrial Train Engine" +#~ msgstr "工業用火車頭" -#: advtrains_train_track/init.lua:406 -msgid "Detector Rail" -msgstr "探測軌道" +#~ msgid "Industrial tank wagon" +#~ msgstr "液體運輸車廂" -#~ msgid "" -#~ "ATC controller, mode @1\n" -#~ "Channel: @2" -#~ msgstr "" -#~ "ATC 控制器\n" -#~ "模式:@1\n" -#~ "頻道:@2" +#~ msgid "Industrial wood wagon" +#~ msgstr "木材運輸車廂" -#~ msgid "Access to @1" -#~ msgstr "可前往@1" +#~ msgid "Japanese Train Engine" +#~ msgstr "高速列車車頭" -#~ msgid "Can't get on: wagon full or doors closed!" -#~ msgstr "無法上車:車門已關閉或車廂已滿。" +#~ msgid "Japanese Train Inter-Wagon Connection" +#~ msgstr "日本火車連結器" -#~ msgid "Can't place: protected position!" -#~ msgstr "無法放置:此區域已被保護。" +#~ msgid "Japanese Train Wagon" +#~ msgstr "高速列車車廂" -#~ msgid "Default Seat" -#~ msgstr "預設座位" +#, fuzzy +#~ msgid "Japanese signal pole" +#~ msgstr "高速列車車廂" -#~ msgid "Default Seat (driver stand)" -#~ msgstr "預設座位 (司機座位)" +#~ msgid "Kick out passengers" +#~ msgstr "踢出乘客" -#~ msgid "Deprecated Track" -#~ msgstr "請不要使用" +#~ msgid "Loading Track" +#~ msgstr "裝貨軌道" #~ msgid "Lock couples" #~ msgstr "鎖定連結處" +#~ msgid "Passenger Wagon" +#~ msgstr "客車" + +#, fuzzy +#~ msgid "Passenger area" +#~ msgstr "客車" + +#~ msgid "" +#~ "Passive Component Naming Tool\n" +#~ "\n" +#~ "Right-click to name a passive component." +#~ msgstr "" +#~ "被動元件命名工具\n" +#~ "\n" +#~ "右鍵單擊命名所選元件。" + +#~ msgid "Perpendicular Diamond Crossing Track" +#~ msgstr "垂直交叉軌道" + +#~ msgid "Reverse train" +#~ msgstr "改變行車方向" + +#~ msgid "Signal" +#~ msgstr "色燈號誌機" + #~ msgid "Speed:" #~ msgstr "速度" +#~ msgid "Station Code" +#~ msgstr "車站碼" + +#~ msgid "Station Name" +#~ msgstr "車站名稱" + +#~ msgid "Station/Stop Track" +#~ msgstr "車站軌道" + +#~ msgid "Steam Engine" +#~ msgstr "蒸汽機車" + +#~ msgid "Stop Time" +#~ msgstr "停站時間" + +#~ msgid "Subway Passenger Wagon" +#~ msgstr "地鐵車廂" + #~ msgid "Target:" #~ msgstr "目標速度" @@ -684,13 +815,49 @@ msgstr "探測軌道" #~ msgid "This position is protected!" #~ msgstr "這裡已被保護。" +#~ msgid "This track can not be changed." +#~ msgstr "您不能調整這段軌道。" + +#~ msgid "Track" +#~ msgstr "軌道" + +#, fuzzy +#~ msgid "Train " +#~ msgstr "已複製火車。" + +#~ msgid "Unconfigured LuaATC component" +#~ msgstr "LuaATC 元件 (未配置)" + +#~ msgid "Unloading Track" +#~ msgstr "卸貨軌道" + #~ msgid "Use Sneak+rightclick to bypass closed doors!" #~ msgstr "請使用潛行+右鍵上車。" +#~ msgid "Y-turnout" +#~ msgstr "對稱道岔" + +#~ msgid "" +#~ "You are not allowed to configure this LuaATC component without the @1 " +#~ "privilege." +#~ msgstr "您沒有「@1」許可權,不能配置這個 LuaATC 元件。" + +#~ msgid "" +#~ "You are not allowed to configure this track without the @1 privilege." +#~ msgstr "您沒有「@1」許可權,不能調整這段軌道。" + +#~ msgid "You are not allowed to configure this track." +#~ msgstr "您不能調整這段軌道。" + #, fuzzy #~ msgid "You are not allowed to modify this protected track." #~ msgstr "這裡已被保護,您不能在這裡建造鐵路。" #~ msgid "" +#~ "You are not allowed to name LuaATC passive components without the @1 " +#~ "privilege." +#~ msgstr "您沒有「@1」許可權,不能命名這個元件。" + +#~ msgid "" #~ "You need to own at least one neighboring wagon to destroy this couple." #~ msgstr "您必須至少擁有其中一節車廂才能分開這兩節車廂。" diff --git a/advtrains/protection.lua b/advtrains/protection.lua index ac1cd66..6bb1ccb 100644 --- a/advtrains/protection.lua +++ b/advtrains/protection.lua @@ -1,27 +1,29 @@ -- advtrains -- protection.lua: privileges and rail protection, and some helpers +-- Get current translator +local S = advtrains.translate -- Privileges to control TRAIN DRIVING/COUPLING minetest.register_privilege("train_operator", { - description = attrans("Can place, remove and operate trains"), + description = S("Can place, remove and operate trains"), give_to_singleplayer= true, }); minetest.register_privilege("train_admin", { - description = attrans("Can place, remove and operate any train, regardless of owner, whitelist, or protection"), + description = S("Can place, remove and operate any train, regardless of owner, whitelist, or protection"), give_to_singleplayer= true, }); -- Privileges to control TRACK BUILDING minetest.register_privilege("track_builder", { - description = attrans("Can place and dig tracks in unprotected areas"), + description = S("Can place and dig tracks in unprotected areas"), give_to_singleplayer= true, }); -- Privileges to control OPERATING TURNOUTS/SIGNALS minetest.register_privilege("railway_operator", { - description = attrans("Can operate turnouts and signals in unprotected areas"), + description = S("Can operate turnouts and signals in unprotected areas"), give_to_singleplayer= true, }); @@ -145,12 +147,12 @@ function advtrains.check_track_protection(pos, pname, near, prot_p) --atdebug("CTP: ",pos,pname,near,prot_p,"priv=",priv,"prot=",prot,"dprot=",dprot) if not priv and (not boo or prot or not dprot) then - minetest.chat_send_player(pname, near and attrans("You are not allowed to build near tracks without the track_builder privilege.") or attrans("You are not allowed to build tracks without the track_builder privilege.")) + minetest.chat_send_player(pname, near and S("You are not allowed to build near tracks without the track_builder privilege.") or S("You are not allowed to build tracks without the track_builder privilege.")) minetest.log("action", pname.." tried to modify terrain "..nears.."track at "..minetest.pos_to_string(apos).." but is not permitted to (no privilege)") return false end if prot then - minetest.chat_send_player(pname, near and attrans("You are not allowed to build near tracks at this protected position.") or attrans("You are not allowed to build tracks at this protected position.")) + minetest.chat_send_player(pname, near and S("You are not allowed to build near tracks at this protected position.") or S("You are not allowed to build tracks at this protected position.")) minetest.record_protection_violation(pos, pname) minetest.log("action", pname.." tried to modify "..nears.."track at "..minetest.pos_to_string(apos).." but position is protected!") return false @@ -181,7 +183,7 @@ function advtrains.check_turnout_signal_protection(pos, pname) nocheck=false return true else - minetest.chat_send_player(pname, attrans("You are not allowed to operate turnouts and signals without the railway_operator privilege.")) + minetest.chat_send_player(pname, S("You are not allowed to operate turnouts and signals without the railway_operator privilege.")) minetest.log("action", pname.." tried to operate turnout/signal at "..minetest.pos_to_string(pos).." but does not have railway_operator") nocheck=false return false diff --git a/advtrains/signals.lua b/advtrains/signals.lua index 2b7362e..198507a 100644 --- a/advtrains/signals.lua +++ b/advtrains/signals.lua @@ -1,6 +1,9 @@ --advtrains by orwell96 --signals.lua +-- Get current translator +local S = advtrains.translate + local mrules_wallsignal = advtrains.meseconrules local function can_dig_func(pos, player) @@ -59,7 +62,7 @@ for r,f in pairs({on={as="off", ls="green", als="red"}, off={as="on", ls="red", tiles = {"advtrains_retrosignal.png"}, inventory_image="advtrains_retrosignal_inv.png", drop="advtrains:retrosignal_off", - description=attrans("Lampless Signal"), + description=S("Lampless Signal (deprecated!)"), sunlight_propagates=true, groups = { cracky=3, @@ -83,7 +86,7 @@ for r,f in pairs({on={as="off", ls="green", als="red"}, off={as="on", ls="red", on_rightclick=function(pos, node, player) local pname = player:get_player_name() local sigd = advtrains.interlocking and advtrains.interlocking.db.get_sigd_for_signal(pos) - if sigd then + if sigd and not player:get_player_control().aux1 then advtrains.interlocking.show_signalling_form(sigd, pname) elseif advtrains.interlocking and player:get_player_control().aux1 then advtrains.interlocking.show_ip_form(pos, pname) @@ -122,7 +125,7 @@ for r,f in pairs({on={as="off", ls="green", als="red"}, off={as="on", ls="red", tiles = {"advtrains_signal_"..r..".png"}, inventory_image="advtrains_signal_inv.png", drop="advtrains:signal_off", - description=attrans("Signal"), + description=S("Signal (deprecated!)"), groups = { cracky=3, not_blocking_trains=1, @@ -141,7 +144,7 @@ for r,f in pairs({on={as="off", ls="green", als="red"}, off={as="on", ls="red", on_rightclick=function(pos, node, player) local pname = player:get_player_name() local sigd = advtrains.interlocking and advtrains.interlocking.db.get_sigd_for_signal(pos) - if sigd then + if sigd and not player:get_player_control().aux1 then advtrains.interlocking.show_signalling_form(sigd, pname) elseif advtrains.interlocking and player:get_player_control().aux1 then advtrains.interlocking.show_ip_form(pos, pname) @@ -177,9 +180,9 @@ for r,f in pairs({on={as="off", ls="green", als="red"}, off={as="on", ls="red", --tunnel signals. no rotations. local swdesc = { -- needed for xgettext - l = attrans("Wallmounted Signal (left)"), - r = attrans("Wallmounted Signal (right)"), - t = attrans("Wallmounted Signal (top)"), + l = S("Wallmounted Signal (left) (deprecated!)"), + r = S("Wallmounted Signal (right) (deprecated!)"), + t = S("Wallmounted Signal (top) (deprecated!)"), } for loc, sbox in pairs({l={-1/2, -1/2, -1/4, 0, 1/2, 1/4}, r={0, -1/2, -1/4, 1/2, 1/2, 1/4}, t={-1/2, 0, -1/4, 1/2, 1/2, 1/4}}) do minetest.register_node("advtrains:signal_wall_"..loc.."_"..r, { @@ -213,7 +216,7 @@ for r,f in pairs({on={as="off", ls="green", als="red"}, off={as="on", ls="red", on_rightclick=function(pos, node, player) local pname = player:get_player_name() local sigd = advtrains.interlocking and advtrains.interlocking.db.get_sigd_for_signal(pos) - if sigd then + if sigd and not player:get_player_control().aux1 then advtrains.interlocking.show_signalling_form(sigd, pname) elseif advtrains.interlocking and player:get_player_control().aux1 then advtrains.interlocking.show_ip_form(pos, pname) @@ -258,7 +261,7 @@ minetest.register_node("advtrains:across_off", { mesh = "advtrains_across.obj", tiles = {"advtrains_across.png"}, drop="advtrains:across_off", - description=attrans("Andrew's Cross"), + description=S("Andrew's Cross"), groups = { cracky=3, not_blocking_trains=1, @@ -295,7 +298,7 @@ minetest.register_node("advtrains:across_on", { mesh = "advtrains_across.obj", tiles = {{name="advtrains_across_anim.png", animation={type="vertical_frames", aspect_w=64, aspect_h=64, length=1.0}}}, drop="advtrains:across_off", - description=attrans("Andrew's Cross"), + description=S("Andrew's Cross"), groups = { cracky=3, not_blocking_trains=1, diff --git a/advtrains/track_reg_helper.lua b/advtrains/track_reg_helper.lua index 31741d6..fe1d11d 100644 --- a/advtrains/track_reg_helper.lua +++ b/advtrains/track_reg_helper.lua @@ -4,6 +4,9 @@ -- Note to future: This is actually just a work-saver, avoiding me to port over all the crossing nodes as well as the linetrack tracks. -- Future track mods should please directly use the appropriate advtrains.register_node_4rot() API and not rely on this! +-- Get current translator +local S = advtrains.translate + --definition preparation local function conns(c1, c2, r1, r2) return {{c=c1, y=r1}, {c=c2, y=r2}} end local function conns3(c1, c2, c3, r1, r2, r3) return {{c=c1, y=r1}, {c=c2, y=r2}, {c=c3, y=r3}} end @@ -471,7 +474,7 @@ Depending on the number of connections: local function can_dig_callback(pos, player) local ok, reason = advtrains.can_dig_or_modify_track(pos) if not ok and player then - minetest.chat_send_player(player:get_player_name(), attrans("This track can not be removed!") .. " " .. reason) + minetest.chat_send_player(player:get_player_name(), S("This track can not be removed!") .. " " .. reason) end return ok end @@ -484,6 +487,11 @@ local function append_statemap_suffix(state_map, nnpref, rot) return t end +function advtrains.default_suitable_substrate(upos) + return core.registered_nodes[core.get_node(upos).name] + and core.registered_nodes[core.get_node(upos).name].walkable +end + function advtrains.register_tracks(tracktype, def, preset) if not preset.v25_format then error("advtrains.register_tracks(): A track preset for pre-v2.5 is used with advtrains 2.5+. Mod probably defines own track preset instead of using it from the advtrains.ap table! Please check track mod compatibility!") @@ -509,8 +517,7 @@ function advtrains.register_tracks(tracktype, def, preset) return itemstack, false end if minetest.registered_nodes[minetest.get_node(pos).name] and minetest.registered_nodes[minetest.get_node(pos).name].buildable_to then - local s = minetest.registered_nodes[minetest.get_node(upos).name] and minetest.registered_nodes[minetest.get_node(upos).name].walkable - if s then + if (def.suitable_substrate and def.suitable_substrate or advtrains.default_suitable_substrate)(upos) then -- minetest.chat_send_all(nnprefix) local yaw = placer:get_look_horizontal() advtrains.trackplacer.place_track(pos, nnprefix, name, yaw) @@ -652,7 +659,7 @@ end local sl={} function sl.register_placer(def, preset) minetest.register_craftitem(":"..def.nodename_prefix.."_slopeplacer",{ - description = attrans("@1 Slope", def.description), + description = S("@1 Slope", def.description), inventory_image = def.texture_prefix.."_slopeplacer.png", wield_image = def.texture_prefix.."_slopeplacer.png", groups={}, @@ -663,17 +670,17 @@ end function sl.create_slopeplacer_on_place(def, preset) return function(istack, player, pt) if not pt.type=="node" then - minetest.chat_send_player(player:get_player_name(), attrans("Can't place: not pointing at node")) + minetest.chat_send_player(player:get_player_name(), S("Can't place: not pointing at node")) return istack end local pos=pt.above if not pos then - minetest.chat_send_player(player:get_player_name(), attrans("Can't place: not pointing at node")) + minetest.chat_send_player(player:get_player_name(), S("Can't place: not pointing at node")) return istack end local node=minetest.get_node(pos) if not minetest.registered_nodes[node.name] or not minetest.registered_nodes[node.name].buildable_to then - minetest.chat_send_player(player:get_player_name(), attrans("Can't place: space occupied!")) + minetest.chat_send_player(player:get_player_name(), S("Can't place: space occupied!")) return istack end if not advtrains.check_track_protection(pos, player:get_player_name()) then @@ -726,17 +733,17 @@ function sl.create_slopeplacer_on_place(def, preset) pos=vector.subtract(pos, dirvec) end else - minetest.chat_send_player(player:get_player_name(), attrans("Can't place: Not enough slope items left (@1 required)", step)) + minetest.chat_send_player(player:get_player_name(), S("Can't place: Not enough slope items left (@1 required)", step)) end else - minetest.chat_send_player(player:get_player_name(), attrans("Can't place: There's no slope of length @1",step)) + minetest.chat_send_player(player:get_player_name(), S("Can't place: There's no slope of length @1",step)) end return istack end step=step+1 pos=vector.add(pos, dirvec) end - minetest.chat_send_player(player:get_player_name(), attrans("Can't place: no supporting node at upper end.")) + minetest.chat_send_player(player:get_player_name(), S("Can't place: no supporting node at upper end.")) return itemstack end end diff --git a/advtrains/trackplacer.lua b/advtrains/trackplacer.lua index 3278b8c..0bcde77 100644 --- a/advtrains/trackplacer.lua +++ b/advtrains/trackplacer.lua @@ -1,6 +1,9 @@ --trackplacer.lua --holds code for the track-placing system. the default 'track' item will be a craftitem that places rails as needed. this will neither place or change switches nor place vertical rails. +-- Get current translator +local S = advtrains.translate + --all new trackplacer code local tp={ groups={} @@ -237,7 +240,7 @@ end minetest.register_craftitem("advtrains:trackworker",{ - description = attrans("Track Worker Tool\n\nLeft-click: change rail type (straight/curve/switch)\nRight-click: rotate object"), + description = S("Track Worker Tool\n\nLeft-click: change rail type (straight/curve/switch)\nRight-click: rotate object"), groups = {cracky=1}, -- key=name, value=rating; rating=1..3. inventory_image = "advtrains_trackworker.png", wield_image = "advtrains_trackworker.png", @@ -260,7 +263,7 @@ minetest.register_craftitem("advtrains:trackworker",{ local ndef = minetest.registered_nodes[node.name] if not ndef.advtrains or not ndef.advtrains.trackworker_next_rot then - minetest.chat_send_player(placer:get_player_name(), attrans("This node can't be rotated using the trackworker!")) + minetest.chat_send_player(placer:get_player_name(), S("This node can't be rotated using the trackworker!")) return end @@ -269,7 +272,7 @@ minetest.register_craftitem("advtrains:trackworker",{ -- is a track, we can query local can_modify, reason = advtrains.can_dig_or_modify_track(pos) if not can_modify then - local str = attrans("This track can not be rotated!") + local str = S("This track can not be rotated!") if reason then str = str .. " " .. reason end @@ -309,7 +312,7 @@ minetest.register_craftitem("advtrains:trackworker",{ local ndef = minetest.registered_nodes[node.name] if not ndef.advtrains or not ndef.advtrains.trackworker_next_var then - minetest.chat_send_player(name, attrans("This node can't be changed using the trackworker!")) + minetest.chat_send_player(name, S("This node can't be changed using the trackworker!")) return end @@ -318,7 +321,7 @@ minetest.register_craftitem("advtrains:trackworker",{ -- is a track, we can query local can_modify, reason = advtrains.can_dig_or_modify_track(pos) if not can_modify then - local str = attrans("This track can not be rotated!") + local str = S("This track can not be rotated!") if reason then str = str .. " " .. reason end diff --git a/advtrains/tracks.lua b/advtrains/tracks.lua index fa7b702..e6d08a7 100644 --- a/advtrains/tracks.lua +++ b/advtrains/tracks.lua @@ -1,6 +1,8 @@ -- tracks.lua
-- rewritten with advtrains 2.5 according to new track registration system
+-- Get current translator
+local S = advtrains.translate
--[[
@@ -125,7 +127,7 @@ Switchable nodes (turnouts, single/double-slip switches) are implemented by havi function advtrains.track_can_dig_callback(pos, player)
local ok, reason = advtrains.can_dig_or_modify_track(pos)
if not ok and player then
- minetest.chat_send_player(player:get_player_name(), attrans("This track can not be removed!") .. " " .. reason)
+ minetest.chat_send_player(player:get_player_name(), S("This track can not be removed!") .. " " .. reason)
end
return ok
end
@@ -256,17 +258,17 @@ end -- Impl Note: possibly duplicate code in "self contained TCB" - see interlocking/tcb_ts_ui.lua!
function advtrains.can_dig_or_modify_track(pos)
if advtrains.get_train_at_pos(pos) then
- return false, attrans("Position is occupied by a train.")
+ return false, S("Position is occupied by a train.")
end
-- interlocking: tcb, signal IP a.s.o.
if advtrains.interlocking then
-- TCB?
if advtrains.interlocking.db.get_tcb(pos) then
- return false, attrans("There's a Track Circuit Break here.")
+ return false, S("There's a Track Circuit Break here.")
end
-- signal ip?
if advtrains.interlocking.db.is_ip_at(pos, true) then -- is_ip_at with purge parameter
- return false, attrans("There's a Signal Influence Point here.")
+ return false, S("There's a Signal Influence Point here.")
end
end
return true
diff --git a/advtrains/trainhud.lua b/advtrains/trainhud.lua index 9d9d475..eeebff0 100644 --- a/advtrains/trainhud.lua +++ b/advtrains/trainhud.lua @@ -1,5 +1,8 @@ --trainhud.lua: holds all the code for train controlling +-- Get current translator +local S = advtrains.translate + local T = advtrains.texture advtrains.hud = {} @@ -274,7 +277,7 @@ function advtrains.hud_train_format(train, flip) hud:add_n7seg(131, 18, 28, 14, lzbdisp.d, 3, lzbdisp.c) if res and res == 0 then - table.insert(st, attrans("OVERRUN RED SIGNAL! Examine situation and reverse train to move again.")) + table.insert(st, S("OVERRUN RED SIGNAL! Examine situation and reverse train to move again.")) end if train.atc_command then diff --git a/advtrains/trainlogic.lua b/advtrains/trainlogic.lua index c49d7e3..c0ac179 100644 --- a/advtrains/trainlogic.lua +++ b/advtrains/trainlogic.lua @@ -1,6 +1,9 @@ --trainlogic.lua --controls train entities stuff about connecting/disconnecting/colliding trains and other things +-- Get current translator +local S = advtrains.translate + local setting_overrun_mode = minetest.settings:get("advtrains_overrun_mode") local benchmark=false diff --git a/advtrains/wagonprop_tool.lua b/advtrains/wagonprop_tool.lua index 2a4a9e2..f32dd03 100644 --- a/advtrains/wagonprop_tool.lua +++ b/advtrains/wagonprop_tool.lua @@ -1,6 +1,10 @@ + +-- Get current translator +local S = advtrains.translate + minetest.register_craftitem("advtrains:wagon_prop_tool",{ --craftitem because it does nothing on its own - description = attrans("Wagon Properties Tool\nPunch a wagon to view and edit the Wagon Properties"), - short_description = attrans("Wagon Properties Tool"), + description = S("Wagon Properties Tool\nPunch a wagon to view and edit the Wagon Properties"), + short_description = S("Wagon Properties Tool"), groups = {}, inventory_image = "advtrains_wagon_prop_tool.png", wield_image = "advtrains_wagon_prop_tool.png", @@ -23,7 +27,7 @@ minetest.register_craftitem("advtrains:wagon_prop_tool",{ --craftitem because it --whitelist protection check if not advtrains.check_driving_couple_protection(pname,wagon.owner,wagon.whitelist) then - minetest.chat_send_player(pname, attrans("Insufficient privileges to use this!")) + minetest.chat_send_player(pname, S("Insufficient privileges to use this!")) return end object:show_wagon_properties(pname) @@ -40,4 +44,4 @@ if minetest.get_modpath("default") then --register recipe {"","","group:wood"}, } }) -end
\ No newline at end of file +end diff --git a/advtrains/wagons.lua b/advtrains/wagons.lua index 10576c3..52ce577 100644 --- a/advtrains/wagons.lua +++ b/advtrains/wagons.lua @@ -7,6 +7,9 @@ -- An entity is ONLY spawned by update_trainpart_properties when it finds it useful. -- Only data that are only important to the entity itself are stored in the luaentity +-- Get current translator +local S = advtrains.translate + -- TP delay when getting off wagon local GETOFF_TP_DELAY = 0.5 @@ -154,12 +157,12 @@ function wagon:ensure_init() end end if not self.noninitticks then - atwarn("wagon",self.id,"uninitialized init=",self.initialized) + atwarn("Wagon",self.id,"Uninitialized init=",self.initialized) self.noninitticks=0 end self.noninitticks=self.noninitticks+1 if self.noninitticks>20 then - atwarn("wagon",self.id,"uninitialized, removing") + atwarn("Wagon",self.id,S("Uninitialized, removing")) self:destroy() else self.object:set_velocity({x=0,y=0,z=0}) @@ -182,7 +185,7 @@ function wagon:on_punch(puncher, time_from_last_punch, tool_capabilities, direct return end if data.owner and puncher:get_player_name()~=data.owner and (not minetest.check_player_privs(puncher, {train_admin = true })) then - minetest.chat_send_player(puncher:get_player_name(), attrans("This wagon is owned by @1, you can't destroy it.", data.owner)); + minetest.chat_send_player(puncher:get_player_name(), S("This wagon is owned by @1, you can't destroy it.", data.owner)); return end @@ -201,25 +204,25 @@ function wagon:on_punch(puncher, time_from_last_punch, tool_capabilities, direct if self.has_inventory then local inv=minetest.get_inventory({type="detached", name="advtrains_wgn_"..self.id}) if not inv then -- inventory is not initialized when wagon was never loaded - should never happen - atwarn("Destroying wagon with inventory, but inventory is not found? Shouldn't happen!") + atwarn(S("Destroying wagon with inventory, but inventory is not found? Shouldn't happen!")) return end for listname, _ in pairs(inv:get_lists()) do if not inv:is_empty(listname) then - minetest.chat_send_player(puncher:get_player_name(), attrans("The wagon's inventory is not empty.")); + minetest.chat_send_player(puncher:get_player_name(), S("The wagon's inventory is not empty.")); return end end end if #(self:train().trainparts)>1 then - minetest.chat_send_player(puncher:get_player_name(), attrans("Wagon needs to be decoupled from other wagons in order to destroy it.")); + minetest.chat_send_player(puncher:get_player_name(), S("Wagon needs to be decoupled from other wagons in order to destroy it.")); return end local pc=puncher:get_player_control() if not pc.sneak then - minetest.chat_send_player(puncher:get_player_name(), attrans("Warning: If you destroy this wagon, you only get some steel back! If you are sure, hold Sneak and left-click the wagon.")) + minetest.chat_send_player(puncher:get_player_name(), S("Warning: If you destroy this wagon, you only get some steel back! If you are sure, hold Sneak and left-click the wagon.")) return end @@ -240,7 +243,7 @@ function wagon:destroy() if self.id then local data = advtrains.wagons[self.id] if not data then - atwarn("wagon:destroy(): data is not set!") + atwarn(" wagon:destroy(): data is not set!") return end @@ -367,15 +370,15 @@ function wagon:on_step(dtime) --show off-track information in outside text instead of notifying the whole server about this if train.off_track then - outside = outside .."\n!!! Train off track !!!" + outside = outside .."\n"..S("!!! Train off track !!!") end -- liquid container: display liquid contents in infotext if self.techage_liquid_capacity then if data.techage_liquid and data.techage_liquid.name then - outside = outside .."\nLiquid: "..data.techage_liquid.name..", "..data.techage_liquid.amount.." units" + outside = outside .."\n"..S("Liquid: ")..data.techage_liquid.name..", "..data.techage_liquid.amount..S(" units") else - outside = outside .."\nLiquid: empty" + outside = outside .."\n"..S("Liquid: empty") end end @@ -669,21 +672,21 @@ function wagon:on_rightclick(clicker) end end if self.has_inventory and self.get_inventory_formspec and advtrains.check_driving_couple_protection(pname, data.owner, data.whitelist) then - poss[#poss+1]={name=attrans("Show Inventory"), key="inv"} + poss[#poss+1]={name=S("Show Inventory"), key="inv"} end if self.seat_groups[sgr].driving_ctrl_access and advtrains.check_driving_couple_protection(pname, data.owner, data.whitelist) then - poss[#poss+1]={name=attrans("Onboard Computer"), key="bordcom"} + poss[#poss+1]={name=S("Onboard Computer"), key="bordcom"} end if data.owner==pname then - poss[#poss+1]={name=attrans("Wagon properties"), key="prop"} + poss[#poss+1]={name=S("Wagon properties"), key="prop"} end if not self.seat_groups[sgr].require_doors_open or self:train().door_open~=0 then - poss[#poss+1]={name=attrans("Get off"), key="off"} + poss[#poss+1]={name=S("Get off"), key="off"} else if clicker:get_player_control().sneak then - poss[#poss+1]={name=attrans("Get off (forced)"), key="off"} + poss[#poss+1]={name=S("Get off (forced)"), key="off"} else - poss[#poss+1]={name=attrans("(Doors closed)"), key="dcwarn"} + poss[#poss+1]={name=S("(Doors closed)"), key="dcwarn"} end end if #poss==0 then @@ -693,7 +696,7 @@ function wagon:on_rightclick(clicker) else local form = "size[5,"..1+(#poss).."]" for pos,ent in ipairs(poss) do - form = form .. "button_exit[0.5,"..(pos-0.5)..";4,1;"..ent.key..";"..ent.name.."]" + form = form.. "button_exit[0.5,"..(pos-0.5)..";4,1;"..ent.key..";"..ent.name.."]" end minetest.show_formspec(pname, "advtrains_seating_"..self.id, form) end @@ -712,7 +715,7 @@ function wagon:on_rightclick(clicker) end local doors_open = self:train().door_open~=0 or clicker:get_player_control().sneak - local allow, rsn=false, attrans("This wagon has no seats.") + local allow, rsn=false, S("This wagon has no seats.") for _,sgr in ipairs(self.assign_to_seat_group) do allow, rsn = self:check_seat_group_access(pname, sgr) if allow then @@ -723,16 +726,16 @@ function wagon:on_rightclick(clicker) self:get_on(clicker, seatid) return else - rsn=attrans("This wagon is full.") + rsn=S("This wagon is full.") end else - rsn=attrans("Doors are closed! (Try holding sneak key!)") + rsn=S("Doors are closed! (Try holding sneak key!)") end end end end end - minetest.chat_send_player(pname, rsn or attrans("You can't get on this wagon.")) + minetest.chat_send_player(pname, rsn or S("You can't get on this wagon.")) else self:show_get_on_form(pname) end @@ -858,7 +861,7 @@ function wagon:show_get_on_form(pname) end return end - local form, comma="size[5,8]label[0.5,0.5;"..attrans("Select seat:").."]textlist[0.5,1;4,6;seat;", "" + local form, comma="size[5,8]label[0.5,0.5;"..S("Select seat:").."]textlist[0.5,1;4,6;seat;", "" for seatno, seattbl in ipairs(self.seats) do local addtext, colorcode="", "" if data.seatp and data.seatp[seatno] then @@ -870,7 +873,7 @@ function wagon:show_get_on_form(pname) end form=form..";0,false]" if self.has_inventory and self.get_inventory_formspec then - form=form.."button_exit[1,7;3,1;inv;"..attrans("Show Inventory").."]" + form=form.."button_exit[1,7;3,1;inv;"..S("Show Inventory").."]" end minetest.show_formspec(pname, "advtrains_geton_"..self.id, form) end @@ -881,27 +884,27 @@ function wagon:show_wagon_properties(pname) button: save ]] local data = advtrains.wagons[self.id] - local form = "size[5,5]" - form = form.."label[0.2,0;"..attrans("This Wagon ID")..": "..self.id.." ("..data.owner..")]" - form = form .. "field[0.5,1;4.5,1;whitelist;Allow these players to access your wagon:;"..minetest.formspec_escape(data.whitelist or "").."]" - form = form .. "field[0.5,2;4.5,1;roadnumber;Wagon road number:;"..minetest.formspec_escape(data.roadnumber or "").."]" + local form="size[5,5]" + form=form.."label[0.2,0;"..S("This Wagon ID")..": "..self.id.." ("..data.owner..")]" + form = form.."field[0.5,1;4.5,1;whitelist;"..S("Allow these players to access your wagon:")..";"..minetest.formspec_escape(data.whitelist or "").."]" + form = form.."field[0.5,2;4.5,1;roadnumber;"..S("Wagon road number:")..";"..minetest.formspec_escape(data.roadnumber or "").."]" local fc = "" if data.fc then fc = table.concat(data.fc, "!") end - form = form .. "field[0.5,3;4.5,1;fc;Freight Code:;"..fc.."]" + form = form.. "field[0.5,3;4.5,1;fc;"..S("Freight Code:")..";"..fc.."]" if data.fc then if not data.fcind then data.fcind = 1 end if data.fcind > 1 then - form=form.."button[0.5,3.5;1,1;fcp;prev FC]" + form=form.."button[0.5,3.5;1,1;fcp;"..S("Prev FC").."]" end - form=form.."label[1.5,3.5;Current FC:]" + form=form.."label[1.5,3.5;"..S("Current FC: ").."]" local cur = data.fc[data.fcind] or "" form=form.."label[1.5,3.75;"..minetest.formspec_escape(cur).."]" - form=form.."button[3.5,3.5;1,1;fcn;next FC]" + form=form.."button[3.5,3.5;1,1;fcn;"..S("Next FC:").."]" end - form=form.."button_exit[0.5,4.5;4,1;save;"..attrans("Save wagon properties").."]" + form=form.."button_exit[0.5,4.5;4,1;save;"..S("Save wagon properties").."]" minetest.show_formspec(pname, "advtrains_prop_"..self.id, form) end @@ -986,30 +989,30 @@ function wagon:show_bordcom(pname) local linhei local form = "size[11,9]label[0.5,0;AdvTrains Boardcom v0.1]" - form=form.."textarea[7.5,0.05;10,1;;"..attrans("Train ID")..": "..(minetest.formspec_escape(train.id or ""))..";]" - form=form.."textarea[0.5,1.5;7,1;text_outside;"..attrans("Text displayed outside on train")..";"..(minetest.formspec_escape(train.text_outside or "")).."]" - form=form.."textarea[0.5,3;7,1;text_inside;"..attrans("Text displayed inside train")..";"..(minetest.formspec_escape(train.text_inside or "")).."]" - form=form.."field[7.5,1.75;3,1;line;"..attrans("Line")..";"..(minetest.formspec_escape(train.line or "")).."]" - form=form.."field[7.5,3.25;3,1;routingcode;"..attrans("Routingcode")..";"..(minetest.formspec_escape(train.routingcode or "")).."]" + form=form.."textarea[7.5,0.05;10,1;;"..S("Train ID")..": "..(minetest.formspec_escape(train.id or ""))..";]" + form=form.."textarea[0.5,1.5;7,1;text_outside;"..S("Text displayed outside on train")..";"..(minetest.formspec_escape(train.text_outside or "")).."]" + form=form.."textarea[0.5,3;7,1;text_inside;"..S("Text displayed inside train")..";"..(minetest.formspec_escape(train.text_inside or "")).."]" + form=form.."field[7.5,1.75;3,1;line;"..S("Line")..";"..(minetest.formspec_escape(train.line or "")).."]" + form=form.."field[7.5,3.25;3,1;routingcode;"..S("Routingcode")..";"..(minetest.formspec_escape(train.routingcode or "")).."]" --row 5 : train overview and autocoupling if train.velocity==0 then - form=form.."label[0.5,4;Train overview /coupling control:]" + form=form.."label[0.5,4;"..S("Train overview /coupling control:").."])" linhei=5 local pre_own, pre_wl, owns_any = nil, nil, minetest.check_player_privs(pname, "train_admin") for i, tpid in ipairs(train.trainparts) do local ent = advtrains.wagons[tpid] if ent then local roadnumber = ent.roadnumber or "" - form = form .. string.format("button[%d,%d;%d,%d;%s;%s]", i, linhei, 1, 0.2, "wgprp"..i, roadnumber) + form = form.. string.format("button[%d,%d;%d,%d;%s;%s]", i, linhei, 1, 0.2, "wgprp"..i, roadnumber) local ename = ent.type - form = form .. "item_image["..i..","..(linhei+0.5)..";1,1;"..ename.."]" + form = form.. "item_image["..i..","..(linhei+0.5)..";1,1;"..ename.."]" if i~=1 then if checklock(pname, ent.owner, pre_own, ent.whitelist, pre_wl) then - form = form .. "image_button["..(i-0.5)..","..(linhei+1.5)..";1,1;advtrains_discouple.png;dcpl_"..i..";]" + form = form.. "image_button["..(i-0.5)..","..(linhei+1.5)..";1,1;advtrains_discouple.png;dcpl_"..i..";]" end end if i == data.pos_in_trainparts then - form = form .. "box["..(i-0.1)..","..(linhei+0.4)..";1,1;green]" + form = form.. "box["..(i-0.1)..","..(linhei+0.4)..";1,1;green]" end pre_own = ent.owner pre_wl = ent.whitelist @@ -1018,24 +1021,24 @@ function wagon:show_bordcom(pname) end if train.movedir==1 then - form = form .. "label["..(#train.trainparts+1)..","..(linhei)..";-->]" + form = form.. "label["..(#train.trainparts+1)..","..(linhei)..";-->]" else - form = form .. "label[0.5,"..(linhei)..";<--]" + form = form.. "label[0.5,"..(linhei)..";<--]" end --check cpl_eid_front and _back of train local couple_front = checkcouple(train.cpl_front) local couple_back = checkcouple(train.cpl_back) if couple_front then - form = form .. "image_button[0.5,"..(linhei+1)..";1,1;advtrains_couple.png;cpl_f;]" + form = form.. "image_button[0.5,"..(linhei+1)..";1,1;advtrains_couple.png;cpl_f;]" end if couple_back then - form = form .. "image_button["..(#train.trainparts+0.5)..","..(linhei+1)..";1,1;advtrains_couple.png;cpl_b;]" + form = form.. "image_button["..(#train.trainparts+0.5)..","..(linhei+1)..";1,1;advtrains_couple.png;cpl_b;]" end else - form=form.."label[0.5,4.5;Train overview / coupling control is only shown when the train stands.]" + form=form.."label[0.5,4.5;"..S("Train overview / coupling control is only shown when the train stands.").."]" end - form = form .. "button[0.5,8;3,1;save;Save]" + form = form.. "button[0.5,8;3,1;save;"..S("Save").."]" -- Interlocking functionality: If the interlocking module is loaded, you can set the signal aspect -- from inside the train @@ -1045,14 +1048,14 @@ function wagon:show_bordcom(pname) local oci = train.lzb.checkpoints[i] if oci.udata and oci.udata.signal_pos then if advtrains.interlocking.db.get_sigd_for_signal(oci.udata.signal_pos) then - form = form .. "button[4.5,8;5,1;ilrs;Remote Routesetting]" + form = form.. "button[4.5,8;5,1;ilrs;"..S("Remote Routesetting").."]" break end end i=i+1 end if train.ars_disable then - form = form .. "button[4.5,7;5,1;ilarsenable;Clear 'Disable ARS' flag]" + form = form.. "button[4.5,7;5,1;ilarsenable;"..S("Clear 'Disable ARS' flag").."]" end end @@ -1269,7 +1272,7 @@ function wagon:seating_from_key_helper(pname, fields, no) self:show_bordcom(pname) end if fields.dcwarn then - minetest.chat_send_player(pname, attrans("Doors are closed. Use Sneak+rightclick to ignore the closed doors and get off.")) + minetest.chat_send_player(pname, S("Doors are closed. Use Sneak+rightclick to ignore the closed doors and get off.")) end if fields.off then self:get_off(no) @@ -1278,7 +1281,7 @@ end function wagon:check_seat_group_access(pname, sgr) local data = advtrains.wagons[self.id] if self.seat_groups[sgr].driving_ctrl_access and not (advtrains.check_driving_couple_protection(pname, data.owner, data.whitelist)) then - return false, attrans("You are not allowed to access the driver stand.") + return false, S("You are not allowed to access the driver stand.") end if self.seat_groups[sgr].driving_ctrl_access then advtrains.log("Drive", pname, self.object:get_pos(), self:train().text_outside) @@ -1298,7 +1301,7 @@ end function advtrains.safe_decouple_wagon(w_id, pname, try_run) if not minetest.check_player_privs(pname, "train_operator") then - minetest.chat_send_player(pname, "Missing train_operator privilege") + minetest.chat_send_player(pname, S("Missing train_operator privilege")) return false end local data = advtrains.wagons[w_id] @@ -1316,7 +1319,7 @@ function advtrains.safe_decouple_wagon(w_id, pname, try_run) end if not checklock(pname, data.owner, owdata.owner, data.whitelist, owdata.whitelist) then - minetest.chat_send_player(pname, "Not allowed to do this.") + minetest.chat_send_player(pname, S("Not allowed to do this.")) return false end @@ -1341,7 +1344,7 @@ function advtrains.get_wagon_prototype(data) end local rt, proto = advtrains.resolve_wagon_alias(wt) if not rt then - --atwarn("Unable to load wagon type",wt,", using placeholder") + --atwarn(S("Unable to load wagon type"),wt,S(", using placeholder")) rt = "advtrains:wagon_placeholder" proto = advtrains.wagon_prototypes[rt] end @@ -1378,7 +1381,7 @@ function advtrains.standard_inventory_formspec(self, pname, invname) local r = "size[8,11]".. "list["..invname..";box;0,0;8,3;]" if data.owner==pname then - r = r .. "button_exit[0,9;4,1;prop;"..attrans("Wagon properties").."]" + r = r .. "button_exit[0,9;4,1;prop;"..S("Wagon properties").."]" end r = r .. "list[current_player;main;0,5;8,4;]".. "listring[]" @@ -1435,7 +1438,7 @@ function advtrains.register_wagon(sysname_p, prototype, desc, inv_img, nincreati return itemstack end if not minetest.check_player_privs(placer, {train_operator = true }) then - minetest.chat_send_player(pname, "You don't have the train_operator privilege.") + minetest.chat_send_player(pname, S("You don't have the train_operator privilege.")) return itemstack end if not minetest.check_player_privs(placer, {train_admin = true }) and minetest.is_protected(pos, placer:get_player_name()) then @@ -1447,7 +1450,7 @@ function advtrains.register_wagon(sysname_p, prototype, desc, inv_img, nincreati local prevpos = advtrains.get_adjacent_rail(pos, tconns, plconnid) if not prevpos then - minetest.chat_send_player(pname, "The track you are trying to place the wagon on is not long enough!") + minetest.chat_send_player(pname, S("The track you are trying to place the wagon on is not long enough!")) return end @@ -1478,7 +1481,7 @@ advtrains.register_wagon("advtrains:wagon_placeholder", { assign_to_seat_group = {}, wagon_span=1, drops={}, -}, "Wagon placeholder", "advtrains_wagon_placeholder.png", true) +}, S("Wagon placeholder"), "advtrains_wagon_placeholder.png", true) @@ -1576,12 +1579,12 @@ minetest.register_chatcommand("at_chown", { local new_owner = params[2] if not wid then return false end --no params added --player name checks - if not new_owner then return false, attrans("Please specify a player name to transfer ownership to.") end --no player name argument - if not core.player_exists(new_owner) then return false, attrans("That player does not exist!") end --is a valid player + if not new_owner then return false, S("Please specify a player name to transfer ownership to.") end --no player name argument + if not core.player_exists(new_owner) then return false, S("That player does not exist!") end --is a valid player --wagon id checks - if not wid:match("%d%d%d%d%d%d") then return false, attrans("Not a valid wagon id.") end -- invalid wagon id + if not wid:match("%d%d%d%d%d%d") then return false, S("Not a valid wagon id.") end -- invalid wagon id local w_data = advtrains.wagons[wid] - if not w_data then return false, attrans("That wagon does not exist!") end + if not w_data then return false, S("That wagon does not exist!") end -- actually chown the wagon local curr_owner = w_data.owner w_data.owner = new_owner @@ -1589,8 +1592,8 @@ minetest.register_chatcommand("at_chown", { advtrains.log("Chown", name, core.get_player_by_name(name):get_pos(), "wid="..wid..", from="..curr_owner..", to="..new_owner) if name ~= new_owner then - core.chat_send_player(new_owner, attrans("You have been given ownership of wagon @1", wid)) + core.chat_send_player(new_owner, S("You have been given ownership of wagon @1", wid)) end - return true, attrans("Wagon @1 ownership changed from @2 to @3", wid, curr_owner, new_owner) + return true, S("Wagon @1 ownership changed from @2 to @3", wid, curr_owner, new_owner) end -})
\ No newline at end of file +}) diff --git a/advtrains_interlocking/ars.lua b/advtrains_interlocking/ars.lua index eb10497..393878a 100644 --- a/advtrains_interlocking/ars.lua +++ b/advtrains_interlocking/ars.lua @@ -3,26 +3,112 @@ --[[ The "ARS table" and its effects: - Every route has (or can have) an associated ARS table. This can either be - ars = { [n] = {ln="<line>"}/{rc="<routingcode>"}/{c="<a comment>"} } - a list of rules involving either line or routingcode matchers (or comments, those are ignored) - The first matching rule determines the route to set. - - or - - ars = {default = true} - this means that all trains that no other rule matches on should use this route + Every route has (or can have) an associated ARS table: + ars = { + [n] = { + ln = "<line>" -- either line + rc = "<routingcode>" -- or routingcode + tl = {min=1, max=2} -- or train length in meters + n = true/false -- true = logical not (matches everything that does not have this line/rc) + conj = { -- and conjunction, optional. This must be true in addition to the main rule + ln=... / rc=... / n=... -- like toplevel + conj=... -- can be nested + -- note that conj cannot have prio, in inherits the prio from main rule + } + prio = <num> -- optional, a priority number. If set, enables "multi-ARS" where train can wait for multiple routes at once + -- or + c="<a comment>" + } + default = true -- Route is the default route for trains + default_prio -- optional, priority for multi-ars with default route + default_conj = {...} -- optional, conditions (conjunction) that need to be fulfilled for this to be considered default route + } - Compound ("and") conjunctions are not supported (--TODO should they?) + In case a train matches the ARS rules of multiple routes, precedence is as follows: + 1. train matches rules without priority in one or more routes -> first matching route is unconditionally set + 2. train matches rules with priority in one or more routes -> all of the matching routes are set (multi-ars) + in the order given by priority, first available route is set + 3. route is default=true, default_prio=nil and train matches default_conj (if present) -> first default route is set + 4. one or more routes are default=true, with default_prio set,and train matches default_conj (if present) + -> all of the matching routes are set (multi-ars) in the order given by priority, first available route is set For editing, those tables are transformed into lines in a text area: {ln=...} -> LN ... {rc=...} -> RC ... {c=...} -> #... {default=true} -> * - See also route_ui.lua + n -> ! (e.g. ln=..., n=true -> !LN ...) + prio -> <num> (e.g. ln=..., prio=1 -> 1 LN ...) + + conj -> goes on the next line, with an & prepended, e.g.: + {ln="S1", conj={rc="Left"}} -> + LN S1 + & RC Left + + Example combining everything: + ars = { + [1] = { + ln = "S1" + n = true + prio = 4 + conj = { + rc = "R4" + } + } + default = true + default_prio = 2 + default_conj = { + rc = "R5" + n = true + } + } -> + 4 !LN S1 + & RC R4 + 2 * + & !RC R5 + ]] local il = advtrains.interlocking +local function parse_trainlen(tlstr) + mins, maxs = string.match(tlstr, "^(%d*)%-(%d+)$") + if mins and maxs then + return {min=tonumber(mins), max=tonumber(maxs)} + end + return {min=tonumber(tlstr)} + -- if it's not parseable at all it will return an empty table which means invalid +end +local function trainlen_to_str(tl) + if tl.min and tl.max then + return tl.min.."-"..tl.max + elseif tl.min then + return tl.min + elseif tl.max then + return "0-"..tl.max + else + return "?" + end +end + + +local function conj_to_text(conj, txt) + while conj do + n = "" + if conj.n then + n = "!" + end + if conj.ln then + txt[#txt+1] = "& "..n.."LN "..conj.ln + elseif conj.rc then + txt[#txt+1] = "& "..n.."RC "..conj.rc + elseif conj.tl then + txt[#txt+1] = "& "..n.."TL "..trainlen_to_str(conj.tl) + end + conj = conj.conj + end +end + -- The ARS data are saved in a table format, but are entered in text format. Utility functions to transform between both. function il.ars_to_text(arstab) if not arstab then @@ -32,103 +118,230 @@ function il.ars_to_text(arstab) local txt = {} for i, arsent in ipairs(arstab) do + local prio = "" + if arsent.prio then + prio = arsent.prio.." " + end local n = "" if arsent.n then n = "!" end if arsent.ln then - txt[#txt+1] = n.."LN "..arsent.ln + txt[#txt+1] = prio..n.."LN "..arsent.ln elseif arsent.rc then - txt[#txt+1] = n.."RC "..arsent.rc + txt[#txt+1] = prio..n.."RC "..arsent.rc + elseif arsent.tl then + txt[#txt+1] = prio..n.."TL "..trainlen_to_str(arsent.tl) elseif arsent.c then txt[#txt+1] = "#"..arsent.c end + conj_to_text(arsent.conj, txt) end if arstab.default then - return "*\n" .. table.concat(txt, "\n") + local prio = "" + if arstab.default_prio then + prio = arstab.default_prio.." " + end + txt[#txt+1] = prio.."*" + conj_to_text(arstab.default_conj, txt) end return table.concat(txt, "\n") end +local function parse_ruleexp(line) + local excl, key, val = string.match(line, "^%s*(!?)%s*([RLT][CNL])%s+(.+)%s*$") + if key == "RC" then + return {rc=val, n=(excl=="!")} + elseif key == "LN" then + return {ln=val, n=(excl=="!")} + elseif key == "TL" then + return {tl=parse_trainlen(val), n=(excl=="!")} + end +end + function il.text_to_ars(t) if not string.match(t, "%S+") then return nil - elseif t=="*" then - return {default=true} end local arstab = {} + local previtem for line in string.gmatch(t, "[^\r\n]+") do - if line=="*" then - arstab.default = true + -- a) comment + local ct = string.match(line, "^#(.*)$") + if ct then + arstab[#arstab+1] = {c = ct} + previtem = nil else - local c, v = string.match(line, "^(...?)%s(.*)$") - if c and v then - local n = nil - if string.sub(c,1,1) == "!" then - n = true - c = string.sub(c,2) - end - local tt=string.upper(c) - if tt=="LN" then - arstab[#arstab+1] = {ln=v, n=n} - elseif tt=="RC" then - arstab[#arstab+1] = {rc=v, n=n} + -- b) Conjunction to the previous item + local conline = string.match(line, "^%s*&(.+)$") + if conline then + local conj = parse_ruleexp(conline) + if conj and previtem==true then + -- previtem was default + arstab.default_conj = conj + previtem = conj + elseif conj and previtem then + previtem.conj = conj + previtem = conj + else + -- dont know what to do with line, put as comment + arstab[#arstab+1] = {c = "? "..line} + previtem = nil end else - local ct = string.match(line, "^#(.*)$") - if ct then arstab[#arstab+1] = {c = ct} end + -- c) Normal rule spec + local prio, ruleline = string.match(line, "^%s*([0-9]*)%s*(.+)%s*$") + if ruleline == "*" then + -- ruleline is the asterisk, this is default + arstab.default = true + arstab.default_prio = tonumber(prio) -- evals to nil if not given + previtem = true -- marks that previtem was asterisk + elseif ruleline then + -- ruleline is present, parse it + local rule = parse_ruleexp(ruleline) + if not rule then + -- dont know what to do with line, put as comment + arstab[#arstab+1] = {c = "? "..line} + previtem = nil + else + rule.prio = tonumber(prio) -- evals to nil if not given + arstab[#arstab+1] = rule + previtem = rule + end + else + -- d) nothing else works, save line as comment + arstab[#arstab+1] = {c = "? "..line} + previtem = nil + end end end end return arstab end -local function find_rtematch(routes, train) - local default - for rteid, route in ipairs(routes) do - if route.ars then - if route.ars.default then - default = rteid - else - if il.ars_check_rule_match(route.ars, train) then - return rteid - end - end + +local function match_arsent(arsent, train) + local rule_matches = false + if arsent.ln then + local line = train.line + rule_matches = line and arsent.ln == line + if arsent.n then rule_matches = not rule_matches end + elseif arsent.rc then + local routingcode = train.routingcode + rule_matches = routingcode and string.find(" "..routingcode.." ", " "..arsent.rc.." ", nil, true) + if arsent.n then rule_matches = not rule_matches end + elseif arsent.tl then + local trainlen = train.trainlen + local lmin, lmax = arsent.tl.min, arsent.tl.max + if lmin and lmax then + rule_matches = (trainlen >= lmin) and (trainlen < lmax) + elseif lmin then + rule_matches = (trainlen >= lmin) + elseif lmax then + rule_matches = (trainlen < lmax) + else + -- errorneous entry never matches end + if arsent.n then rule_matches = not rule_matches end + end + if rule_matches then + -- if the entry has a conjunction, go on checking + if arsent.conj then + return match_arsent(arsent.conj, train) + else + return true + end + else + return false end - return default end --- Checks whether ARS rule explicitly matches. This does not take into account the "default" field, since a wider context is required for this. --- Returns the rule number that matched, or nil if nothing matched +-- Given an ARS rule table, check whether any of the clauses in it match the train. +-- Returns: match_specific, match_default +-- match_specific: One of the clauses explicitly matched (if this is non-false, match_default is not checked and always given false) +-- match_default: The default clause (*) matched (as well as any conjunctions attached to the default clause) +-- both of these can be either true (unconditional match), a number (priority for multi-ars) or false function il.ars_check_rule_match(ars, train) if not ars then - return nil + return nil, nil end - local line = train.line - local routingcode = train.routingcode for arskey, arsent in ipairs(ars) do - --atdebug(arsent, line, routingcode) - if arsent.n then - -- rule is inverse... - if arsent.ln and (not line or arsent.ln ~= line) then - return arskey - elseif arsent.rc and (not routingcode or not string.find(" "..routingcode.." ", " "..arsent.rc.." ", nil, true)) then - return arskey - end - return nil + local rule_matches = match_arsent(arsent, train) + if rule_matches then + return (arsent.prio or true), nil + end + end + if ars.default then + local def_matches = true + if ars.default_conj then + def_matches = match_arsent(ars.default_conj, train) + end + if def_matches then + return false, (ars.default_prio or true) + end + end + return false,false +end + +local function sort_priority(sprio) + -- insertion sort + local order = {} + local oprio = {} + for rteid, prio in pairs(sprio) do + local inspos = 1 + while order[inspos] do + if oprio[inspos] > prio then + -- next item has higher priority number (= less urgent), insert before it + break + elseif oprio[inspos] == prio and order[inspos] > rteid then + -- next item has same priority as current and a higher routeid, insert before it + break + end + inspos = inspos + 1 + end + table.insert(order, inspos, rteid) + table.insert(oprio, inspos, prio) + end + --atdebug("sort_priority",sprio,"result",order,oprio) + if #order == 1 then + return order[1] -- only one route, table doesnt make sense + end + return order +end + +local function find_rtematch(routes, train) + local sprio = {} + local default = nil + local dprio = {} + for rteid, route in ipairs(routes) do + if route.ars then + local mspec, mdefault = il.ars_check_rule_match(route.ars, train) + --atdebug("route",rteid,"ars",route.ars,"gives", mspec, mdefault) + if mspec == true then + return rteid + elseif mspec then + sprio[rteid] = mspec end - - if arsent.ln and line and arsent.ln == line then - return arskey - elseif arsent.rc and routingcode and string.find(" "..routingcode.." ", " "..arsent.rc.." ", nil, true) then - return arskey + if mdefault == true then + if not default then default = rteid end + elseif mdefault then + dprio[rteid] = mdefault end end + end + if next(sprio) then + return sort_priority(sprio) + elseif default then + return default + elseif next(dprio) then + return sort_priority(dprio) + else return nil + end end + function advtrains.interlocking.ars_check(signalpos, train, trig_from_dst) -- check for distant signal -- this whole check must be delayed until after the route setting has taken place, @@ -169,6 +382,7 @@ function advtrains.interlocking.ars_check(signalpos, train, trig_from_dst) local rteid = find_rtematch(tcbs.routes, train) if rteid then + --atdebug("Ars setting ",rteid) --delay routesetting, it should not occur inside train step -- using after here is OK because that gets called on every path recalculation minetest.after(0, il.route.update_route, sigd, tcbs, rteid, nil) diff --git a/advtrains_interlocking/autonaming.lua b/advtrains_interlocking/autonaming.lua index f88ccbd..78886c0 100644 --- a/advtrains_interlocking/autonaming.lua +++ b/advtrains_interlocking/autonaming.lua @@ -1,6 +1,8 @@ -- autonaming.lua -- Automatically set names of signals (and maybe track sections) based on numbering +-- Get current translator +local S = advtrains.interlocking.translate local function find_highest_count(prefix) local cnt = 0 @@ -34,10 +36,10 @@ function advtrains.interlocking.set_autoname_prefix(pname, prefix) -- scan database for this prefix to find out the highest count local count = find_highest_count(prefix) player_prefix_info[pname] = { prefix = prefix, count = count} - return true, "Prefix set, next signal name will be: ".. advtrains.interlocking.get_next_autoname(pname, true) + return true, S("Prefix set, next signal name will be: @1", advtrains.interlocking.get_next_autoname(pname, true)) else player_prefix_info[pname] = nil - return true, "Prefix unset, signals are not auto-named for you!" + return true, S("Prefix unset, signals are not auto-named for you!") end end @@ -62,7 +64,7 @@ end minetest.register_chatcommand("at_nameprefix", { params = "<prefix>", - description = "Sets the current prefix for automatically naming interlocking components. Example: '/at_nameprefix TEST' - signals will be named TEST1, TEST2 and so on", + description = S("Sets the current prefix for automatically naming interlocking components. Example: '/at_nameprefix TEST' - signals will be named TEST1, TEST2 and so on"), privs = {interlocking = true}, func = advtrains.interlocking.set_autoname_prefix, }) diff --git a/advtrains_interlocking/database.lua b/advtrains_interlocking/database.lua index 844d350..bd90e36 100644 --- a/advtrains_interlocking/database.lua +++ b/advtrains_interlocking/database.lua @@ -55,6 +55,9 @@ Every time a repair operation takes place, and on every track edit operation, th ]]-- +-- Get current translator +local S = advtrains.interlocking.translate + local TRAVERSER_LIMIT = 1000 @@ -214,10 +217,11 @@ TCB data structure -- aspect will be set accordingly. routeset = <index in routes> -- Route set from this signal. This is the entry that is cleared once -- train has passed the signal. (which will set the aspect to "danger" again) - route_committed = <boolean> -- When setting/requesting a route, routetar will be set accordingly, + -- routeset may be a table (e.g. {1,2}) while the route is not committed yet, indicating a wait for multiple routes at once (Multi-ARS) + route_committed = <boolean> -- When setting/requesting a route, routeset will be set accordingly, -- while the signal still displays danger and nothing is written to the TCs -- As soon as the route can actually be set, all relevant TCs and turnouts are set and this field - -- is set true, clearing the signal + -- is set true, clearing the signal (when this is true, routeset is never a table) aspect = <asp> -- The aspect the signal should show. If this is nil, should show the most restrictive aspect (red) signal_name = <string> -- The human-readable name of the signal, only for documenting purposes routes = { <route definition> } -- a collection of routes from this signal @@ -379,7 +383,7 @@ function ildb.check_and_repair_ts_at_pos(pos, tcb_connid, notify_pname, force_cr if ts_id ~= tcbs_ts_id then -- inconsistency is found, repair it --atdebug("check_and_repair_ts_at_pos: Inconsistency is found!") - tsrepair_notify(notify_pname, "Track section inconsistent here, repairing...") + tsrepair_notify(notify_pname, S("Track section inconsistent here, repairing...")) return ildb.repair_ts_merge_all(all_tcbs, force_create, notify_pname) -- Step2 check is no longer necessary since we just created that new section end @@ -408,7 +412,7 @@ function ildb.check_and_repair_ts_at_pos(pos, tcb_connid, notify_pname, force_cr -- That means it is sufficient to compare the LENGTHS of both lists, if one is longer then it is inconsistent if #ts.tc_breaks ~= #all_tcbs then --atdebug("check_and_repair_ts_at_pos: Partition is found!") - tsrepair_notify(notify_pname, "Track section partition found, repairing...") + tsrepair_notify(notify_pname, S("Track section partition found, repairing...")) return ildb.repair_ts_merge_all(all_tcbs, force_create, notify_pname) end --tsrepair_notify(notify_pname, "Found section", ts.name or ts_id, "here.") @@ -536,7 +540,7 @@ function ildb.repair_ts_merge_all(all_tcbs, force_create, notify_pname) end -- Create a new fresh track section with all the TCBs we have in our collection local new_ts_id, new_ts = ildb.create_ts_from_tcb_list(all_tcbs) - tsrepair_notify(notify_pname, "Created track section",new_ts_id,"from",#all_tcbs,"TCBs") + tsrepair_notify(notify_pname, S("Created track section @1 from @2 TCBs", new_ts_id, #all_tcbs)) return new_ts_id end @@ -737,7 +741,8 @@ local function recursively_find_routes(s_pos, s_connid, locks_found, result_tabl local end_pkey = advtrains.encode_pos(pos) --atdebug("Found end TCB", pos, end_pkey,", returning") if result_table[end_pkey] then - atwarn("While caching track section routing, found multiple route paths within same track section. Only first one found will be used") + --atwarn("While caching track section routing, found multiple route paths within same track section. Only first one found will be used") + -- this warning appears too often and is typically harmless else result_table[end_pkey] = table.copy(locks_found) end @@ -783,9 +788,9 @@ function ildb.update_rs_cache(ts_id) end end -- warn about superfluous entry - for sup_end_pkey, sup_entry in pairs(result_table) do - atwarn("In update_rs_cache for section",ts_id,"found superfluous endpoint",sup_end_pkey,"->",sup_entry) - end + --for sup_end_pkey, sup_entry in pairs(result_table) do + -- atwarn("In update_rs_cache for section",ts_id,"found superfluous endpoint",sup_end_pkey,"->",sup_entry) + --end -- this warning appears too often and is typically harmless end ts.rs_cache = rscache --atdebug("== Done update_rs_cache for ",ts_id, "result:",rscache) diff --git a/advtrains_interlocking/init.lua b/advtrains_interlocking/init.lua index ee08c30..c30a22f 100644 --- a/advtrains_interlocking/init.lua +++ b/advtrains_interlocking/init.lua @@ -3,6 +3,14 @@ advtrains.interlocking = {} +-- Initialize internationalization (using ywang's poconvert) +advtrains.poconvert.from_flat("advtrains_interlocking") +-- ask engine for translator instance, this will load the translation files +advtrains.interlocking.translate = core.get_translator("advtrains_interlocking") + +-- Get current translator +local S = advtrains.interlocking.translate + advtrains.SHUNT_SPEED_MAX = 6 function advtrains.interlocking.sigd_equal(sigd, cmp) @@ -30,4 +38,4 @@ dofile(modpath.."ars.lua") dofile(modpath.."tsr_rail.lua") -minetest.register_privilege("interlocking", {description = "Can set up track sections, routes and signals.", give_to_singleplayer = true}) +minetest.register_privilege("interlocking", {description = S("Can set up track sections, routes and signals"), give_to_singleplayer = true}) diff --git a/advtrains_interlocking/locale/advtrains_interlocking.de.tr b/advtrains_interlocking/locale/advtrains_interlocking.de.tr new file mode 100644 index 0000000..2c67a9f --- /dev/null +++ b/advtrains_interlocking/locale/advtrains_interlocking.de.tr @@ -0,0 +1,191 @@ +# textdomain: advtrains_interlocking +Prefix set, next signal name will be: @1=Präfix gesetzt, nächster Signalname: @1 +Prefix unset, signals are not auto-named for you!=Präfix gelöscht, automatische Signalbenennung deaktiviert! +Sets the current prefix for automatically naming interlocking components. Example: '/at_nameprefix TEST' - signals will be named TEST1, TEST2 and so on=Setze einen Präfix für die automatische Benennung von neu hinzugefügten Signalen. Beispiel: '/at_nameprefix TEST' - Signale werden mit TEST1, TEST2 usw. benannt +Created track section @1 from @2 TCBs=Gleisabschnitt @1 aus @2 TCBs erstellt +Track section inconsistent here, repairing...=Gleisabschnitt ist inkonsistent, repariere... +Track section partition found, repairing...=Gleisabschnitt partitioniert, repariere... +Can set up track sections, routes and signals=Darf Gleisabschnitte, Fahrstraßen und Signale bearbeiten +@1 Terminal @2=@1 Ziel @2 +@1 is held in @2 position when this route is set and freed =@1 wird durch die Fahrstraße in Position @2 festgelegt +@1 is no longer affected when this route is set.=@1 wird nicht mehr durch die Fahrstraße festgelegt +Added track section @1 to the route.=Gleisabschnitt @1 zur Fahrstraße hinzugefügt. +Advance to next route section=Nächsten Gleisabschnitt hinzufügen +Advance/Complete Route=Fahrstraße fortsetzen/beenden +Advancing over next section is=Fortsetzen über nächsten Gleisabschnitt hinaus +Cancel if you are unsure!=Abbrechen, wenn Sie unsicher sind! +Cancel route programming=Fahrstraßenprogrammierung abbrechen +Cannot program route without a target=Kann keine Fahrstraße ohne Ziel programmieren +End of interlocking=Ende der Zugsicherung +Enter Route Name=Fahrstraßennamen eingeben +Finish programming route=Fahrstraße abschließen +Finish route HERE=Fahrstraße HIER abschließen +Finish route at end of NEXT section=Fahrstraße am Ende des NÄCHSTEN Abschnitts abschließen +Fixed in state @1 by route @2 (punch to unfix)=Festgelegt in Zustand @1 durch Fahrstraße @2 (Schlagen um freizugeben) +Fixed in state @1 by route @2 until segment #@3 is freed.=Festgelegt in Zustand @1 durch Fahrstraße @2, bis Segment @3 freigegeben wird. +Insufficient privileges to use this!=Unzureichende Privilegien, um dies zu benutzen! +Next section is diverging (>2 TCBs)=Nächster Abschnitt enthält eine Weiche (>2 TCBs) +Route discarded.=Fahrstraße verworfen. +Route ends at signal:=Fahrstraße endet bei Signal: +Route leads into=Fahrstraße führt in +Route programming mode active. Punch TCBs to add route segments, punch turnouts to lock them.=Fahrstraßenprogrammierung aktiv. Schlage Gleisabschnittsgrenzen (TCB) um Segmente hinzuzufügen, schlage Weichen um sie festzulegen. +Route section @1 removed.=Fahrstraßenabschnitt @1 entfernt. +Routes should in most cases end at signals.=Fahrstraßen sollten normalerweise an einem Signal enden. +Save Route=Fahrstraße speichern +Step back one section=Einen Abschnitt zurück +Successfully programmed route.=Fahrstraße erfolgreich programmiert. +The origin TCB has become unknown during programming. Try again.=Der Start-TCB ist unbekannt geworden. Versuche nochmal. +This TCB is not suitable as=Diese Gleisabschnittsgrenze ist +This TCB is unconfigured, you first need to assign it to a rail=Diese Gleisabschnittsgrenze ist noch nicht konfiguiert, sie muss erst zugewiesen werden +WARNING: Route does not end at a signal.=ACHTUNG: Fahrstraße endet nicht an einem Signal. +[Route programming] =[Fahrstraßenprogrammierung] +impossible at this place.=ist hier nicht möglich. +non-interlocked area=nicht-überwachtes Gebiet +route continuation.=nicht als Fortsetzung geeignet. +<< Select a route part to edit options=<< Wähle einen Abschnitt, um Optionen zu bearbeiten +<Default Aspect>=<Standardbegriff> +ARS Rule List=ARS-Regelliste +Announce distant signal=Entferntes Hauptsignal ankündigen +Back to signal=Zurück zum Signal +Call-on (section may be occupied)=Abschnitt darf belegt sein +Clone Route=Duplizieren +Delete Route=Fahrstraße löschen +Error:=Fehler: +New From Route=Neu aus dieser FS +No Signal at this TCB=Kein Signal hier +Route name=Fahrstraßenname +Route overview=Fahrstraßenübersicht +Save ARS List=ARS-Liste speichern +Section Options:=Abschnittsoptionen: +Set=Setzen +Signal Aspect:=Signalbegriff: +TCB at @1 has different section than previous TCB=TCB bei @1 hat einen anderen Gleisabschnitt als der vorherige TCB +TCB at @1 is missing=TCB bei @1 fehlt +TCB at @1 is not assigned to previous track section=TCB bei @1 ist dem vorherigen Gleisabschnitt nicht zugewiesen +Track section after @1 missing=Gleisabschnitt nach @1 fehlt +Turnout/component missing at @1=Weiche oder Komponente bei @1 fehlt +Lock conflict at @1, Held locked by:=Sperrenkonflikt bei @1, bereits gesperrt durch: +No TCB found at @1. Please update or reconfigure route!=TCB bei @1 nicht gefunden. Bitte Fahrstraße korrigieren! +No track section adjacent to @1. Please reconfigure route!=Gleisabschnitt nach @1 nicht gefunden. Bitte Fahrstraße korrigieren! +Route @1 from signal @2=Fahrstraße @1 von Signal @2 +Route @1 from signal @2, segment #@3=Fahrstraße @1 von Signal @2, Segment @3 +Section '@1' already has route set from @2:=Abschnitt '@1' bereits durch Fahrstraße von @2 belegt: +Section '@1' is occupied!=Abschnitt '@1' ist durch einen Zug belegt! +Section '@1' not found!=Abschnitt '@1' nicht gefunden! +TCB at @1 has different section than previous TCB. Please update track section or reconfigure route!=TCB bei @1 hat anderen Abschnitt als vorhergehender TCB. Bitte Fahrstraße korrigieren! +Turnout/component missing at @1. Please update track section or reconfigure route!=Weiche/Komponente bei @1 nicht gefunden. Bitte Fahrstraße korrigieren! +<assign distant>=<entf. Hauptsignal festl.> +<none>=<kein> +Assigned distant signal to the main signal at @1=Vorsignal dem Hauptsignal bei @1 zugewiesen +Assigned signal to the TCB at @1=Signal der Gleisabschnittsgrenze bei @1 zugewiesen +Clear=Leeren +Configuring Signal: Influence point of another signal is already present!=Signal einstellen: Beeinflussungspunkt eines anderen Signals bereits vorhanden! +Configuring Signal: Node is too far away. Aborted.=Signal einstellen: Block ist zu weit entfernt. Abbruch. +Configuring Signal: Please look in train's driving direction and punch rail to set influence point.=Signal einstellen: In Fahrtrichtung schauen und Gleis schlagen, um Beeinflussungspunkt zu setzen. +Configuring Signal: Successfully set influence point=Signal einstellen: Beeinflussungspunkt erfolgreich gesetzt +Configuring Signal: This is not a normal two-connection rail! Aborted.=Signal einstellen: Dies ist kein geeignetes Gleis! Abbruch. +Dst: @1=Haupts.: @1 +Influence point is not set.=Beeinflussungspunkt ist nicht gesetzt. +Influence point is set at @1.=Beeinflussungspunkt ist gesetzt bei @1. +Modify=Bearbeiten +Set distant signal: Punch the main signal to assign!=Hauptsignal zuweisen: Bitte schlage das Hauptsignal! +Set influence point=Beeinflussungspunkt setzen +Apply=Anwenden +Route search: @1 found=Fahrstraßensuche: @1 gefunden +Search further=Weitersuchen +Smartroute: No track section directly ahead!=Fahrstraßensuche: Kein Gleisabschnitt voraus! +Smartroute: TCBS or routes don't exist here!=Fahrstraßensuche: Gleisabschnittsgrenze oder Fahrstraßen existieren hier nicht! + (invalid)=(ungültig) +@1 locks in state @2=@1 gesperrt in Position @2 +A route is requested from this signal:=Fahrstraße von diesem Signal: +Add locks=Sperre hinzu. +Assign a signal=Signal zuweisen +Automatic Working is active.=Automatischer Blockbetrieb aktiv. +Automatic routesetting=ARS (autom. Fahrstraßenauswahl) +Boundary TCBs:=Gleisabschnittsgrenzen: +Can't remove TCB: Both sides must have no signal assigned!=Kann Gleisabschnittsgrenze nicht entfernen: mindestens eine Seite hat noch ein Signal zugewiesen! +Can't remove track, a train is here!=Kann Gleisabschnittsgrenze nicht entfernen: hier ist noch ein Zug! +Cancel=Abbruch +Cancel Route=Fahrstraße auflösen +Cannot delete route which has ARS rules, please review and then delete through edit dialog!=Fahrstraße hat ARS-Regeln, bitte überprüfe diese und lösche die Fahrstraße über den Bearbeitungsdialog! +Clear locks=Sperren löschen +Configuring TCB: Already existed at this position, it is now linked to this TCB marker=Gleisabschnittsgrenze einstellen: Existierte hier bereits, der Marker ist nun verbunden +Configuring TCB: Cannot use static signals for routesetting. Aborted.=Gleisabschnittsgrenze einstellen: statische Signale können nicht für Fahrstraßen benutzt werden. Abbruch. +Configuring TCB: Internal error, TCBS doesn't exist. Aborted.=Gleisabschnittsgrenze einstellen: Interner Fehler, TCB existiert nicht. Abbruch. +Configuring TCB: Node is too far away. Aborted.=Gleisabschnittsgrenze einstellen: Block ist zu weit entfernt. Abbruch. +Configuring TCB: Not a compatible signal. Aborted.=Gleisabschnittsgrenze einstellen: Kein kompatibles Signal. Abbruch. +Configuring TCB: Please punch the rail you want to assign this TCB to.=Gleisabschnittsgrenze einstellen: Bitte das Gleis schlagen, wo die Grenze erstellt werden soll. +Configuring TCB: Please punch the signal to assign.=Gleisabschnittsgrenze einstellen: Bitte das zuzuweisende Signal schlagen. +Configuring TCB: Successfully assigned signal.=Gleisabschnittsgrenze einstellen: Signal erfolgreich zugewiesen. +Configuring TCB: Successfully configured TCB=Gleisabschnittsgrenze einstellen: Grenze erfolgreich erstellt +Configuring TCB: This is not a normal two-connection rail! Aborted.=Gleisabschnittsgrenze einstellen: Dies ist kein geeignetes Gleis! Abbruch. +Create Interlocked Track Section=Gleisabschnitt anlegen +Delete this route=Fahrstraße löschen +Disable Automatic Working=Auto. Blockbetrieb aus +Distant signal triggers ARS=Vorsignal kann ARS auslösen +Edit=Bearbeiten +Enable Automatic Working=Automatischer Blockbetrieb +Error: TS modified, abort!=Fehler: Abschnitt verändert, Abbruch! +Final TCBS unset (legacy-style buffer route)=Letzte Abschnittsgrenze fehlt (Prellbockroute aus älterer Version) +Fixed route locks (e.g. level crossings):=Feste Fahrstraßensperren (z.B. Bahnübergang): +Link @1=Verknüpfe @1 +Link: @1=Verknüpfung: @1 +Multiple routes are requested (first available is set):=Mehrere Fahrstraßen angefragt (erste verfügbare wird eingestellt): +NOTE: ARS is disabled.=ACHTUNG: ARS deaktiviert! +New (Manual)=Neu (Manuell) +No Link=Keine Verknüpfung +No routes are yet defined.=Bisher keine Fahrstraßen definiert. +No trains on this section.=Keine Züge auf diesem Abschnitt. +Punch components to add fixed locks. (punch anything else @= end)=Schlage auf Komponenten um diese zu sperren (schlage irgendetwas anderes @= Ende) +Remove Section=Gleisabschnitt löschen +Reset section state=Gleisabschnitt zurücksetzen +Reset track section=Gleisabschnitt zurücksetzen +Reset track section @1!=Streckenabschnitt @1 zurückgesetzt! +Route has been set.=Fahrstraße ist festgelegt. +Route is re-set when a train passed.=Fahrstraße wird nach Passieren eines Zuges nicht aufgelöst. +Route is set over this signal by:=Eine Fahrstraße ist über dieses Signal gestellt von: +Route is set: =Fahrstraße ist festgelegt: +Routes are not automatically set.=Fahrstraßen werden nicht automatisch gestellt. +Routes:=Fahrstraßen: +Section holds @1 route locks.=Abschnitt hält @1 Sperren. +Section name=Name des Streckenabschnitts +Set ARS default route=Setze als ARS-Standardroute +Set Route=Fahrstraße einstellen +Setting fixed locks finished!=Feste Fahrstraßensperren hinzugefügt! +Show=Anzeigen +Show track section=Gleisabschnitt anzeigen +Side @1=Seite @1 +Signal at @1=Signal bei @1 +Signal name=Signalname +Signal on B side already assigned!=Signal auf Seite B bereits zugewiesen! +Signalling=Fahrstraßen stellen +Smart Route=Fahrstraßensuche +TCB Link: Select linked TCB now!=Gleisabschnitte verknüpfen: Zu verknüpfende Gleisabschnittsgrenze jetzt auswählen! +TCB already existed at this position, now linked to this node=Gleisabschnittsgrenze existierte hier bereits, der Block ist nun verbunden +TCB assigned to @1=Gleisabschnittsgrenze an @1 zugewiesen +This TCB has been removed. Please dig marker.=Gleisabschnittsgrenze wurde gelöscht. Bitte Marker entfernen. +This is a pure distant signal@nNo route is currently set through.=Dies ist ein reines Vorsignal@nAktuell keine Fahrstraße eingestellt. +This is an always-halt signal (e.g. a buffer)@nNo routes can be set from here.=Dies ist ein Haltsignal (z.B. Prellbock)@nVon hier aus können keine Fahrstraßen eingestellt werden. +This will clear the list of trains@nand the routesetting status of this section.@nAre you sure?=Dies löscht die Liste der Züge im Abschnitt@nsowie den Fahrstraßenstatus.@nSind Sie sicher? +This will remove the track section and set all its end points to End Of Interlocking=Dies wird den Gleisabschnitt löschen +Track Circuit Break=Gleisabschnittsgrenze +Track Circuit Break Configuration=Einstellungen der Gleisabschnittsgrenze +Track Section Detail - @1=Gleisabschnitts-Details - @1 +Trains on this section:=Züge in diesem Abschnitt +Unconfigured Track Circuit Break, right-click to assign.=Nicht konfiguierte Gleisabschnittsgrenze (TCB). Rechtsklick zum Zuweisen. +Wait for this route to be cancelled in order to do anything here.=Erst nach Auflösung dieser Fahrstraße kann von hier gestellt werden. +Waiting for route to be set...=Warten, bis Fahrstraße verfügbar ist... +Yes=Ja +You cannot modify track sections when a route is set or a train is on the section.=Abschnitt kann nicht bearbeitet werden, wenn eine Fahrstraße gesetzt ist oder der Abschnitt belegt ist. +Emplace manual lock=Manuelle Sperre setzen +Interlocking tool@nPunch: Highlight track section@nPlace: check route locks/show track section info=Zugsicherungswerkzeug@nSchlagen: Gleisabschnitte hervorheben@nPlatzieren: Gleisabschnittsinformation/Fahrstraßensperren anzeigen +No route locks set=Keine Fahrstraßensperren gehalten +No track section at this location!=Kein Gleisabschnitt gefunden! +Node is not a track!=Block ist kein Gleis! +Route lock inspector=Fahrstraßensperren-Inspektor +Route locks currently put:=Gesetzte Fahrstraßensperren: +Point Speed Restriction Track=Geschwindigkeitskontrollgleis +Point speed restriction: @1=Geschwindigkeitskontrolle: @1 +Set point speed restriction:=Setze Kontrollgeschwindigkeit: +You are not allowed to configure this track without the @1 privilege.=Sie dürfen ohne das „@1“-Privileg dieses Gleis nicht konfigurieren. +You are not allowed to configure this track.=Sie dürfen dieses Gleis nicht konfigurieren.
\ No newline at end of file diff --git a/advtrains_interlocking/locale/advtrains_interlocking.fr.tr b/advtrains_interlocking/locale/advtrains_interlocking.fr.tr new file mode 100644 index 0000000..93bbaf2 --- /dev/null +++ b/advtrains_interlocking/locale/advtrains_interlocking.fr.tr @@ -0,0 +1,191 @@ +# textdomain: advtrains_interlocking +Prefix set, next signal name will be: @1= +Prefix unset, signals are not auto-named for you!= +Sets the current prefix for automatically naming interlocking components. Example: '/at_nameprefix TEST' - signals will be named TEST1, TEST2 and so on= +Created track section @1 from @2 TCBs= +Track section inconsistent here, repairing...= +Track section partition found, repairing...= +Can set up track sections, routes and signals= +@1 Terminal @2= +@1 is held in @2 position when this route is set and freed = +@1 is no longer affected when this route is set.= +Added track section @1 to the route.= +Advance to next route section= +Advance/Complete Route= +Advancing over next section is= +Cancel if you are unsure!= +Cancel route programming= +Cannot program route without a target= +End of interlocking= +Enter Route Name= +Finish programming route= +Finish route HERE= +Finish route at end of NEXT section= +Fixed in state @1 by route @2 (punch to unfix)= +Fixed in state @1 by route @2 until segment #@3 is freed.= +Insufficient privileges to use this!=Privilèges insuffisants pour utiliser ceci ! +Next section is diverging (>2 TCBs)= +#Route discarded.=Changement d'état de l'itinéraire. +Route ends at signal:= +Route leads into= +Route programming mode active. Punch TCBs to add route segments, punch turnouts to lock them.= +Route section @1 removed.= +Routes should in most cases end at signals.= +Save Route= +Step back one section= +#Successfully programmed route.=Succès d'invalidation des routages des trains +The origin TCB has become unknown during programming. Try again.= +This TCB is not suitable as= +This TCB is unconfigured, you first need to assign it to a rail= +WARNING: Route does not end at a signal.= +[Route programming] = +impossible at this place.= +non-interlocked area= +route continuation.= +<< Select a route part to edit options= +#<Default Aspect>=Siège par défaut +ARS Rule List= +#Announce distant signal=Signal distant métro de Munich ( +Back to signal= +Call-on (section may be occupied)= +Clone Route= +Delete Route= +Error:= +New From Route= +No Signal at this TCB= +Route name= +Route overview= +Save ARS List= +Section Options:= +Set= +#Signal Aspect:=Signal +TCB at @1 has different section than previous TCB= +TCB at @1 is missing= +TCB at @1 is not assigned to previous track section= +Track section after @1 missing= +Turnout/component missing at @1= +Lock conflict at @1, Held locked by:= +No TCB found at @1. Please update or reconfigure route!= +No track section adjacent to @1. Please reconfigure route!= +Route @1 from signal @2= +Route @1 from signal @2, segment #@3= +Section '@1' already has route set from @2:= +Section '@1' is occupied!= +Section '@1' not found!= +TCB at @1 has different section than previous TCB. Please update track section or reconfigure route!= +Turnout/component missing at @1. Please update track section or reconfigure route!= +<assign distant>= +<none>= +Assigned distant signal to the main signal at @1= +Assigned signal to the TCB at @1= +Clear= +Configuring Signal: Influence point of another signal is already present!= +Configuring Signal: Node is too far away. Aborted.= +Configuring Signal: Please look in train's driving direction and punch rail to set influence point.= +Configuring Signal: Successfully set influence point= +Configuring Signal: This is not a normal two-connection rail! Aborted.= +Dst: @1= +Influence point is not set.= +Influence point is set at @1.= +Modify= +Set distant signal: Punch the main signal to assign!= +Set influence point= +Apply= +Route search: @1 found= +Search further= +Smartroute: No track section directly ahead!= +Smartroute: TCBS or routes don't exist here!= + (invalid)= +@1 locks in state @2= +A route is requested from this signal:= +Add locks= +Assign a signal= +Automatic Working is active.= +#Automatic routesetting=Routage à distance +Boundary TCBs:= +Can't remove TCB: Both sides must have no signal assigned!= +Can't remove track, a train is here!= +Cancel= +Cancel Route= +Cannot delete route which has ARS rules, please review and then delete through edit dialog!= +#Clear locks=Autorisation (procédez) +Configuring TCB: Already existed at this position, it is now linked to this TCB marker= +Configuring TCB: Cannot use static signals for routesetting. Aborted.= +Configuring TCB: Internal error, TCBS doesn't exist. Aborted.= +Configuring TCB: Node is too far away. Aborted.= +Configuring TCB: Not a compatible signal. Aborted.= +Configuring TCB: Please punch the rail you want to assign this TCB to.= +Configuring TCB: Please punch the signal to assign.= +Configuring TCB: Successfully assigned signal.= +Configuring TCB: Successfully configured TCB= +Configuring TCB: This is not a normal two-connection rail! Aborted.= +Create Interlocked Track Section= +Delete this route= +Disable Automatic Working= +Distant signal triggers ARS= +Edit= +Enable Automatic Working= +Error: TS modified, abort!= +Final TCBS unset (legacy-style buffer route)= +Fixed route locks (e.g. level crossings):= +Link @1= +Link: @1= +Multiple routes are requested (first available is set):= +NOTE: ARS is disabled.= +New (Manual)= +No Link= +No routes are yet defined.= +No trains on this section.= +Punch components to add fixed locks. (punch anything else @= end)= +#Remove Section=Routage à distance +Reset section state= +#Reset track section=Inversion du sens de marche +Reset track section @1!= +Route has been set.= +Route is re-set when a train passed.= +Route is set over this signal by:= +Route is set: = +Routes are not automatically set.= +Routes:= +Section holds @1 route locks.= +#Section name=Nom de Station +Set ARS default route= +Set Route= +Setting fixed locks finished!= +Show= +Show track section= +Side @1= +#Signal at @1=Signal +#Signal name=Signal +Signal on B side already assigned!= +#Signalling=Signal +Smart Route= +TCB Link: Select linked TCB now!= +TCB already existed at this position, now linked to this node= +TCB assigned to @1= +This TCB has been removed. Please dig marker.= +This is a pure distant signal@nNo route is currently set through.= +This is an always-halt signal (e.g. a buffer)@nNo routes can be set from here.= +This will clear the list of trains@nand the routesetting status of this section.@nAre you sure?= +This will remove the track section and set all its end points to End Of Interlocking= +#Track Circuit Break=Il y a un "Track Circuit Break" ici. +#Track Circuit Break Configuration=Il y a un "Track Circuit Break" ici. +Track Section Detail - @1= +Trains on this section:= +Unconfigured Track Circuit Break, right-click to assign.= +Wait for this route to be cancelled in order to do anything here.= +Waiting for route to be set...= +Yes= +You cannot modify track sections when a route is set or a train is on the section.= +Emplace manual lock= +Interlocking tool@nPunch: Highlight track section@nPlace: check route locks/show track section info= +No route locks set= +No track section at this location!= +Node is not a track!= +Route lock inspector= +Route locks currently put:= +Point Speed Restriction Track=Voie de point de limitation de vitesse +Point speed restriction: @1=Point de limitation de vitesse : @1 +Set point speed restriction:=Placez un point de limitation de vitesse : +You are not allowed to configure this track without the @1 privilege.=Vous n'êtes pas autorisé à configurer cette voie sans le privilège @1. +You are not allowed to configure this track.=Vous n'êtes pas autorisé à configurer cette voie.
\ No newline at end of file diff --git a/advtrains_interlocking/locale/advtrains_interlocking.zh_CN.tr b/advtrains_interlocking/locale/advtrains_interlocking.zh_CN.tr new file mode 100644 index 0000000..701d283 --- /dev/null +++ b/advtrains_interlocking/locale/advtrains_interlocking.zh_CN.tr @@ -0,0 +1,191 @@ +# textdomain: advtrains_interlocking +Prefix set, next signal name will be: @1= +Prefix unset, signals are not auto-named for you!= +Sets the current prefix for automatically naming interlocking components. Example: '/at_nameprefix TEST' - signals will be named TEST1, TEST2 and so on= +Created track section @1 from @2 TCBs= +Track section inconsistent here, repairing...= +Track section partition found, repairing...= +Can set up track sections, routes and signals= +@1 Terminal @2= +@1 is held in @2 position when this route is set and freed = +@1 is no longer affected when this route is set.= +Added track section @1 to the route.= +Advance to next route section= +Advance/Complete Route= +Advancing over next section is= +Cancel if you are unsure!= +Cancel route programming= +Cannot program route without a target= +End of interlocking= +Enter Route Name= +Finish programming route= +Finish route HERE= +Finish route at end of NEXT section= +Fixed in state @1 by route @2 (punch to unfix)= +Fixed in state @1 by route @2 until segment #@3 is freed.= +Insufficient privileges to use this!= +Next section is diverging (>2 TCBs)= +Route discarded.= +Route ends at signal:= +Route leads into= +Route programming mode active. Punch TCBs to add route segments, punch turnouts to lock them.= +Route section @1 removed.= +Routes should in most cases end at signals.= +Save Route= +Step back one section= +Successfully programmed route.= +The origin TCB has become unknown during programming. Try again.= +This TCB is not suitable as= +This TCB is unconfigured, you first need to assign it to a rail= +WARNING: Route does not end at a signal.= +[Route programming] = +impossible at this place.= +non-interlocked area= +route continuation.= +<< Select a route part to edit options= +#<Default Aspect>=默认座位 +ARS Rule List= +Announce distant signal= +Back to signal= +Call-on (section may be occupied)= +Clone Route= +Delete Route= +Error:= +New From Route= +No Signal at this TCB= +Route name= +Route overview= +Save ARS List= +Section Options:= +Set= +#Signal Aspect:=信号灯 +TCB at @1 has different section than previous TCB= +TCB at @1 is missing= +TCB at @1 is not assigned to previous track section= +Track section after @1 missing= +Turnout/component missing at @1= +Lock conflict at @1, Held locked by:= +No TCB found at @1. Please update or reconfigure route!= +No track section adjacent to @1. Please reconfigure route!= +Route @1 from signal @2= +Route @1 from signal @2, segment #@3= +Section '@1' already has route set from @2:= +Section '@1' is occupied!= +Section '@1' not found!= +TCB at @1 has different section than previous TCB. Please update track section or reconfigure route!= +Turnout/component missing at @1. Please update track section or reconfigure route!= +<assign distant>= +<none>= +Assigned distant signal to the main signal at @1= +Assigned signal to the TCB at @1= +Clear= +Configuring Signal: Influence point of another signal is already present!= +Configuring Signal: Node is too far away. Aborted.= +Configuring Signal: Please look in train's driving direction and punch rail to set influence point.= +Configuring Signal: Successfully set influence point= +Configuring Signal: This is not a normal two-connection rail! Aborted.= +Dst: @1= +Influence point is not set.= +Influence point is set at @1.= +Modify= +Set distant signal: Punch the main signal to assign!= +Set influence point= +Apply= +Route search: @1 found= +Search further= +Smartroute: No track section directly ahead!= +Smartroute: TCBS or routes don't exist here!= + (invalid)= +@1 locks in state @2= +A route is requested from this signal:= +Add locks= +Assign a signal= +Automatic Working is active.= +Automatic routesetting= +Boundary TCBs:= +Can't remove TCB: Both sides must have no signal assigned!= +Can't remove track, a train is here!= +Cancel= +Cancel Route= +Cannot delete route which has ARS rules, please review and then delete through edit dialog!= +Clear locks= +Configuring TCB: Already existed at this position, it is now linked to this TCB marker= +Configuring TCB: Cannot use static signals for routesetting. Aborted.= +Configuring TCB: Internal error, TCBS doesn't exist. Aborted.= +Configuring TCB: Node is too far away. Aborted.= +Configuring TCB: Not a compatible signal. Aborted.= +Configuring TCB: Please punch the rail you want to assign this TCB to.= +Configuring TCB: Please punch the signal to assign.= +Configuring TCB: Successfully assigned signal.= +Configuring TCB: Successfully configured TCB= +Configuring TCB: This is not a normal two-connection rail! Aborted.= +Create Interlocked Track Section= +Delete this route= +Disable Automatic Working= +Distant signal triggers ARS= +Edit= +Enable Automatic Working= +Error: TS modified, abort!= +Final TCBS unset (legacy-style buffer route)= +Fixed route locks (e.g. level crossings):= +Link @1= +Link: @1= +Multiple routes are requested (first available is set):= +NOTE: ARS is disabled.= +New (Manual)= +No Link= +No routes are yet defined.= +No trains on this section.= +Punch components to add fixed locks. (punch anything else @= end)= +Remove Section= +Reset section state= +#Reset track section=改变行车方向 +Reset track section @1!= +Route has been set.= +Route is re-set when a train passed.= +Route is set over this signal by:= +Route is set: = +Routes are not automatically set.= +Routes:= +Section holds @1 route locks.= +#Section name=车站名称 +Set ARS default route= +Set Route= +Setting fixed locks finished!= +Show= +Show track section= +Side @1= +#Signal at @1=信号灯 +#Signal name=信号灯 +Signal on B side already assigned!= +#Signalling=信号灯 +Smart Route= +TCB Link: Select linked TCB now!= +TCB already existed at this position, now linked to this node= +TCB assigned to @1= +This TCB has been removed. Please dig marker.= +This is a pure distant signal@nNo route is currently set through.= +This is an always-halt signal (e.g. a buffer)@nNo routes can be set from here.= +This will clear the list of trains@nand the routesetting status of this section.@nAre you sure?= +This will remove the track section and set all its end points to End Of Interlocking= +Track Circuit Break= +Track Circuit Break Configuration= +Track Section Detail - @1= +Trains on this section:= +Unconfigured Track Circuit Break, right-click to assign.= +Wait for this route to be cancelled in order to do anything here.= +Waiting for route to be set...= +Yes= +You cannot modify track sections when a route is set or a train is on the section.= +Emplace manual lock= +Interlocking tool@nPunch: Highlight track section@nPlace: check route locks/show track section info= +No route locks set= +No track section at this location!= +Node is not a track!= +Route lock inspector= +Route locks currently put:= +Point Speed Restriction Track= +Point speed restriction: @1= +Set point speed restriction:= +You are not allowed to configure this track without the @1 privilege.=您没有“@1”权限,不能调整这段轨道。 +You are not allowed to configure this track.=您不能调整这段轨道。
\ No newline at end of file diff --git a/advtrains_interlocking/locale/advtrains_interlocking.zh_TW.tr b/advtrains_interlocking/locale/advtrains_interlocking.zh_TW.tr new file mode 100644 index 0000000..64e1626 --- /dev/null +++ b/advtrains_interlocking/locale/advtrains_interlocking.zh_TW.tr @@ -0,0 +1,191 @@ +# textdomain: advtrains_interlocking +Prefix set, next signal name will be: @1= +Prefix unset, signals are not auto-named for you!= +Sets the current prefix for automatically naming interlocking components. Example: '/at_nameprefix TEST' - signals will be named TEST1, TEST2 and so on= +Created track section @1 from @2 TCBs= +Track section inconsistent here, repairing...= +Track section partition found, repairing...= +Can set up track sections, routes and signals= +@1 Terminal @2= +@1 is held in @2 position when this route is set and freed = +@1 is no longer affected when this route is set.= +Added track section @1 to the route.= +Advance to next route section= +Advance/Complete Route= +Advancing over next section is= +Cancel if you are unsure!= +Cancel route programming= +Cannot program route without a target= +End of interlocking= +Enter Route Name= +Finish programming route= +Finish route HERE= +Finish route at end of NEXT section= +Fixed in state @1 by route @2 (punch to unfix)= +Fixed in state @1 by route @2 until segment #@3 is freed.= +Insufficient privileges to use this!= +Next section is diverging (>2 TCBs)= +Route discarded.= +Route ends at signal:= +Route leads into= +Route programming mode active. Punch TCBs to add route segments, punch turnouts to lock them.= +Route section @1 removed.= +Routes should in most cases end at signals.= +Save Route= +Step back one section= +Successfully programmed route.= +The origin TCB has become unknown during programming. Try again.= +This TCB is not suitable as= +This TCB is unconfigured, you first need to assign it to a rail= +WARNING: Route does not end at a signal.= +[Route programming] = +impossible at this place.= +non-interlocked area= +route continuation.= +<< Select a route part to edit options= +#<Default Aspect>=預設座位 +ARS Rule List= +Announce distant signal= +Back to signal= +Call-on (section may be occupied)= +Clone Route= +Delete Route= +Error:= +New From Route= +No Signal at this TCB= +Route name= +Route overview= +Save ARS List= +Section Options:= +Set= +#Signal Aspect:=色燈號誌機 +TCB at @1 has different section than previous TCB= +TCB at @1 is missing= +TCB at @1 is not assigned to previous track section= +Track section after @1 missing= +Turnout/component missing at @1= +Lock conflict at @1, Held locked by:= +No TCB found at @1. Please update or reconfigure route!= +No track section adjacent to @1. Please reconfigure route!= +Route @1 from signal @2= +Route @1 from signal @2, segment #@3= +Section '@1' already has route set from @2:= +Section '@1' is occupied!= +Section '@1' not found!= +TCB at @1 has different section than previous TCB. Please update track section or reconfigure route!= +Turnout/component missing at @1. Please update track section or reconfigure route!= +<assign distant>= +<none>= +Assigned distant signal to the main signal at @1= +Assigned signal to the TCB at @1= +Clear= +Configuring Signal: Influence point of another signal is already present!= +Configuring Signal: Node is too far away. Aborted.= +Configuring Signal: Please look in train's driving direction and punch rail to set influence point.= +Configuring Signal: Successfully set influence point= +Configuring Signal: This is not a normal two-connection rail! Aborted.= +Dst: @1= +Influence point is not set.= +Influence point is set at @1.= +Modify= +Set distant signal: Punch the main signal to assign!= +Set influence point= +Apply= +Route search: @1 found= +Search further= +Smartroute: No track section directly ahead!= +Smartroute: TCBS or routes don't exist here!= + (invalid)= +@1 locks in state @2= +A route is requested from this signal:= +Add locks= +Assign a signal= +Automatic Working is active.= +Automatic routesetting= +Boundary TCBs:= +Can't remove TCB: Both sides must have no signal assigned!= +Can't remove track, a train is here!= +Cancel= +Cancel Route= +Cannot delete route which has ARS rules, please review and then delete through edit dialog!= +Clear locks= +Configuring TCB: Already existed at this position, it is now linked to this TCB marker= +Configuring TCB: Cannot use static signals for routesetting. Aborted.= +Configuring TCB: Internal error, TCBS doesn't exist. Aborted.= +Configuring TCB: Node is too far away. Aborted.= +Configuring TCB: Not a compatible signal. Aborted.= +Configuring TCB: Please punch the rail you want to assign this TCB to.= +Configuring TCB: Please punch the signal to assign.= +Configuring TCB: Successfully assigned signal.= +Configuring TCB: Successfully configured TCB= +Configuring TCB: This is not a normal two-connection rail! Aborted.= +Create Interlocked Track Section= +Delete this route= +Disable Automatic Working= +Distant signal triggers ARS= +Edit= +Enable Automatic Working= +Error: TS modified, abort!= +Final TCBS unset (legacy-style buffer route)= +Fixed route locks (e.g. level crossings):= +Link @1= +Link: @1= +Multiple routes are requested (first available is set):= +NOTE: ARS is disabled.= +New (Manual)= +No Link= +No routes are yet defined.= +No trains on this section.= +Punch components to add fixed locks. (punch anything else @= end)= +Remove Section= +Reset section state= +#Reset track section=改變行車方向 +Reset track section @1!= +Route has been set.= +Route is re-set when a train passed.= +Route is set over this signal by:= +Route is set: = +Routes are not automatically set.= +Routes:= +Section holds @1 route locks.= +#Section name=車站名稱 +Set ARS default route= +Set Route= +Setting fixed locks finished!= +Show= +Show track section= +Side @1= +#Signal at @1=色燈號誌機 +#Signal name=色燈號誌機 +Signal on B side already assigned!= +#Signalling=色燈號誌機 +Smart Route= +TCB Link: Select linked TCB now!= +TCB already existed at this position, now linked to this node= +TCB assigned to @1= +This TCB has been removed. Please dig marker.= +This is a pure distant signal@nNo route is currently set through.= +This is an always-halt signal (e.g. a buffer)@nNo routes can be set from here.= +This will clear the list of trains@nand the routesetting status of this section.@nAre you sure?= +This will remove the track section and set all its end points to End Of Interlocking= +Track Circuit Break= +Track Circuit Break Configuration= +Track Section Detail - @1= +Trains on this section:= +Unconfigured Track Circuit Break, right-click to assign.= +Wait for this route to be cancelled in order to do anything here.= +Waiting for route to be set...= +Yes= +You cannot modify track sections when a route is set or a train is on the section.= +Emplace manual lock= +Interlocking tool@nPunch: Highlight track section@nPlace: check route locks/show track section info= +No route locks set= +No track section at this location!= +Node is not a track!= +Route lock inspector= +Route locks currently put:= +Point Speed Restriction Track= +Point speed restriction: @1= +Set point speed restriction:= +You are not allowed to configure this track without the @1 privilege.=您沒有「@1」許可權,不能調整這段軌道。 +You are not allowed to configure this track.=您不能調整這段軌道。
\ No newline at end of file diff --git a/advtrains_interlocking/po/README.md b/advtrains_interlocking/po/README.md new file mode 100644 index 0000000..3e94682 --- /dev/null +++ b/advtrains_interlocking/po/README.md @@ -0,0 +1,70 @@ +# Translations +Please read this document before working on any translations. + +Unlike many other mods, Advtrains uses `.po` files for localization, +which are then automatically converted to `.tr` files when the mod is +loaded. Therefore, please submit patches that edit the `.po` files. + +## Getting Started +The translation files can be edited like any other `.po` file. + +If the translation file for your language does not exist, create it by +copying `template.txt` to `advtrains.XX.tr`, where `XX` is replaced by +the language code. + +Feel free to use the [discussion mailing list][srht-discuss] if you +have any questions regarding localization. + +You can share your `.po` file directly or [as a patch][gsm] to the [dev +mailing list][srht-devel]. The latter is encouraged, but, unlike code +changes, translation files sent directly are also accepted. + +[tr-format]: https://minetest.gitlab.io/minetest/translations/#translation-file-format +[srht-discuss]: https://lists.sr.ht/~gpcf/advtrains-discuss +[srht-devel]: https://lists.sr.ht/~gpcf/advtrains-devel +[gsm]: https://git-send-email.io + +## Translation Notes +* Translations should be consistent. You can use other entries or the +translations in Minetest as a reference. +* Translations do not have to fully correspond to the original text - +they only need to provide the same information. In particular, +translations do not need to have the same linguistical structure as the +original text. +* Replacement sequences (`@1`, `@2`, etc) should not be translated. +* Certain abbreviations or names, such as "Ks" or "Zs 3", should +generally not be translated. + +### (de) German +* Verwenden Sie die neue Rechtschreibung und die Sie-Form. +* Mit der deutschen Tastaturbelegung unter Linux können die +Anführungszeichen „“ mit AltGr-V bzw. AltGr-B eingegeben werden. + +### (zh) Chinese +(This section is written in English to avoid writing the note twice or +using only one of the variants, as most of this section applies to both +the traditional and simplified variants.) + +* Please use the 「」 quotation marks for Traditional Chinese and “” +for Simplified Chinese. +* Please use the fullwidth variants of: , 、 。 ? ! : ; +* Please use the halfwidth variants of: ( ) [ ] / \ | +* Please do not leave any space between Han characters (including +fullwidth punctuation marks). +* Please leave a space between Han characters (excluding fullwidth +punctuation marks) and characters from other scripts (including +halfwidth punctuation marks). However, do not leave any space between +Han characters and Arabic numerals. + +## Notes for developers +* The `update-translations.sh` script can be used to update the +translation files. However, please make sure to install the +`basic_trains` mod before running the script. +* Please make sure that the first argument to `S` (or `attrans`) _only_ +includes string literals without formatting or concatenation. This is +unfortunately a limitation of the `xgettext` utility. +* Avoid word-by-word translations. +* Avoid manipulating translated strings (except for concatenation). Use +server-side translations if you have to modify the text sent to users. +* Avoid truncating strings unless multibyte characters are handled +properly. diff --git a/advtrains_interlocking/po/advtrains_interlocking.pot b/advtrains_interlocking/po/advtrains_interlocking.pot new file mode 100644 index 0000000..312a843 --- /dev/null +++ b/advtrains_interlocking/po/advtrains_interlocking.pot @@ -0,0 +1,807 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the advtrains_interlocking package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: advtrains_interlocking\n" +"Report-Msgid-Bugs-To: advtrains-discuss@lists.sr.ht\n" +"POT-Creation-Date: 2025-06-11 23:21+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=CHARSET\n" +"Content-Transfer-Encoding: 8bit\n" + +#: autonaming.lua +msgid "Prefix set, next signal name will be: @1" +msgstr "" + +#: autonaming.lua +msgid "Prefix unset, signals are not auto-named for you!" +msgstr "" + +#: autonaming.lua +msgid "" +"Sets the current prefix for automatically naming interlocking components. " +"Example: '/at_nameprefix TEST' - signals will be named TEST1, TEST2 and so on" +msgstr "" + +#: database.lua +msgid "Track section inconsistent here, repairing..." +msgstr "" + +#: database.lua +msgid "Track section partition found, repairing..." +msgstr "" + +#: database.lua +msgid "Created track section @1 from @2 TCBs" +msgstr "" + +#: init.lua +msgid "Can set up track sections, routes and signals" +msgstr "" + +#: route_prog.lua +msgid "[Route programming] " +msgstr "" + +#: route_prog.lua +msgid "@1 is no longer affected when this route is set." +msgstr "" + +#: route_prog.lua +msgid "Fixed in state @1 by route @2 until segment #@3 is freed." +msgstr "" + +#: route_prog.lua +msgid "@1 Terminal @2" +msgstr "" + +#: route_prog.lua +msgid "Fixed in state @1 by route @2 (punch to unfix)" +msgstr "" + +#: route_prog.lua route_ui.lua signal_aspect_ui.lua tcb_ts_ui.lua tool.lua +msgid "Insufficient privileges to use this!" +msgstr "" + +#: route_prog.lua +msgid "" +"Route programming mode active. Punch TCBs to add route segments, punch " +"turnouts to lock them." +msgstr "" + +#: route_prog.lua +msgid "Added track section @1 to the route." +msgstr "" + +#: route_prog.lua +msgid "Finish programming route" +msgstr "" + +#: route_prog.lua +msgid "Route ends at signal:" +msgstr "" + +#: route_prog.lua +msgid "WARNING: Route does not end at a signal." +msgstr "" + +#: route_prog.lua +msgid "Routes should in most cases end at signals." +msgstr "" + +#: route_prog.lua +msgid "Cancel if you are unsure!" +msgstr "" + +#: route_prog.lua +msgid "Route leads into" +msgstr "" + +#: route_prog.lua +msgid "non-interlocked area" +msgstr "" + +#: route_prog.lua +msgid "Enter Route Name" +msgstr "" + +#: route_prog.lua +msgid "Save Route" +msgstr "" + +#: route_prog.lua +msgid "Next section is diverging (>2 TCBs)" +msgstr "" + +#: route_prog.lua tcb_ts_ui.lua +msgid "End of interlocking" +msgstr "" + +#: route_prog.lua +msgid "Advance/Complete Route" +msgstr "" + +#: route_prog.lua +msgid "Advance to next route section" +msgstr "" + +#: route_prog.lua +msgid "This TCB is not suitable as" +msgstr "" + +#: route_prog.lua +msgid "route continuation." +msgstr "" + +#: route_prog.lua +msgid "Finish route HERE" +msgstr "" + +#: route_prog.lua +msgid "Finish route at end of NEXT section" +msgstr "" + +#: route_prog.lua +msgid "Advancing over next section is" +msgstr "" + +#: route_prog.lua +msgid "impossible at this place." +msgstr "" + +#: route_prog.lua +msgid "Step back one section" +msgstr "" + +#: route_prog.lua +msgid "Cancel route programming" +msgstr "" + +#: route_prog.lua +msgid "Route section @1 removed." +msgstr "" + +#: route_prog.lua +msgid "Route discarded." +msgstr "" + +#: route_prog.lua +msgid "Cannot program route without a target" +msgstr "" + +#: route_prog.lua +msgid "The origin TCB has become unknown during programming. Try again." +msgstr "" + +#: route_prog.lua +msgid "Successfully programmed route." +msgstr "" + +#: route_prog.lua +msgid "This TCB is unconfigured, you first need to assign it to a rail" +msgstr "" + +#: route_prog.lua +msgid "@1 is held in @2 position when this route is set and freed " +msgstr "" + +#: route_ui.lua +msgid "Route overview" +msgstr "" + +#: route_ui.lua +msgid "Route name" +msgstr "" + +#: route_ui.lua tcb_ts_ui.lua +msgid "Set" +msgstr "" + +#: route_ui.lua tcb_ts_ui.lua +msgid "TCB at @1 is missing" +msgstr "" + +#: route_ui.lua tcb_ts_ui.lua +msgid "Track section after @1 missing" +msgstr "" + +#: route_ui.lua tcb_ts_ui.lua +msgid "Turnout/component missing at @1" +msgstr "" + +#: route_ui.lua tcb_ts_ui.lua +msgid "TCB at @1 is not assigned to previous track section" +msgstr "" + +#: route_ui.lua tcb_ts_ui.lua +msgid "TCB at @1 has different section than previous TCB" +msgstr "" + +#: route_ui.lua signal_aspect_ui.lua +msgid "Signal Aspect:" +msgstr "" + +#: route_ui.lua +msgid "<Default Aspect>" +msgstr "" + +#: route_ui.lua +msgid "Announce distant signal" +msgstr "" + +#: route_ui.lua +msgid "No Signal at this TCB" +msgstr "" + +#: route_ui.lua +msgid "Section Options:" +msgstr "" + +#: route_ui.lua +msgid "Call-on (section may be occupied)" +msgstr "" + +#: route_ui.lua +msgid "Error:" +msgstr "" + +#: route_ui.lua +msgid "<< Select a route part to edit options" +msgstr "" + +#: route_ui.lua +msgid "Delete Route" +msgstr "" + +#: route_ui.lua +msgid "Back to signal" +msgstr "" + +#: route_ui.lua +msgid "Clone Route" +msgstr "" + +#: route_ui.lua +msgid "New From Route" +msgstr "" + +#: route_ui.lua +msgid "ARS Rule List" +msgstr "" + +#: route_ui.lua +msgid "Save ARS List" +msgstr "" + +#: routesetting.lua +msgid "No TCB found at @1. Please update or reconfigure route!" +msgstr "" + +#: routesetting.lua +msgid "No track section adjacent to @1. Please reconfigure route!" +msgstr "" + +#: routesetting.lua +msgid "Section '@1' not found!" +msgstr "" + +#: routesetting.lua +msgid "Section '@1' already has route set from @2:" +msgstr "" + +#: routesetting.lua +msgid "Section '@1' is occupied!" +msgstr "" + +#: routesetting.lua +msgid "Lock conflict at @1, Held locked by:" +msgstr "" + +#: routesetting.lua +msgid "Route @1 from signal @2" +msgstr "" + +#: routesetting.lua +msgid "" +"Turnout/component missing at @1. Please update track section or reconfigure " +"route!" +msgstr "" + +#: routesetting.lua +msgid "" +"TCB at @1 has different section than previous TCB. Please update track " +"section or reconfigure route!" +msgstr "" + +#: routesetting.lua +msgid "Route @1 from signal @2, segment #@3" +msgstr "" + +#: signal_aspect_ui.lua +msgid "Influence point is set at @1." +msgstr "" + +#: signal_aspect_ui.lua +msgid "Modify" +msgstr "" + +#: signal_aspect_ui.lua tool.lua +msgid "Clear" +msgstr "" + +#: signal_aspect_ui.lua +msgid "Influence point is not set." +msgstr "" + +#: signal_aspect_ui.lua +msgid "Set influence point" +msgstr "" + +#: signal_aspect_ui.lua +msgid "<none>" +msgstr "" + +#: signal_aspect_ui.lua +msgid "Dst: @1" +msgstr "" + +#: signal_aspect_ui.lua +msgid "<assign distant>" +msgstr "" + +#: signal_aspect_ui.lua +msgid "" +"Configuring Signal: Please look in train's driving direction and punch rail " +"to set influence point." +msgstr "" + +#: signal_aspect_ui.lua +msgid "Set distant signal: Punch the main signal to assign!" +msgstr "" + +#: signal_aspect_ui.lua +msgid "Assigned signal to the TCB at @1" +msgstr "" + +#: signal_aspect_ui.lua +msgid "Assigned distant signal to the main signal at @1" +msgstr "" + +#: signal_aspect_ui.lua +msgid "Configuring Signal: Successfully set influence point" +msgstr "" + +#: signal_aspect_ui.lua +msgid "" +"Configuring Signal: Influence point of another signal is already present!" +msgstr "" + +#: signal_aspect_ui.lua +msgid "Configuring Signal: This is not a normal two-connection rail! Aborted." +msgstr "" + +#: signal_aspect_ui.lua +msgid "Configuring Signal: Node is too far away. Aborted." +msgstr "" + +#: smartroute.lua +msgid "Smartroute: TCBS or routes don't exist here!" +msgstr "" + +#: smartroute.lua +msgid "Smartroute: No track section directly ahead!" +msgstr "" + +#: smartroute.lua +msgid "Route search: @1 found" +msgstr "" + +#: smartroute.lua +msgid "Search further" +msgstr "" + +#: smartroute.lua +msgid "Apply" +msgstr "" + +#: tcb_ts_ui.lua +msgid "Track Circuit Break" +msgstr "" + +#: tcb_ts_ui.lua +msgid "Unconfigured Track Circuit Break, right-click to assign." +msgstr "" + +#: tcb_ts_ui.lua +msgid "This TCB has been removed. Please dig marker." +msgstr "" + +#: tcb_ts_ui.lua +msgid "Configuring TCB: Please punch the rail you want to assign this TCB to." +msgstr "" + +#: tcb_ts_ui.lua +msgid "Can't remove TCB: Both sides must have no signal assigned!" +msgstr "" + +#: tcb_ts_ui.lua +msgid "" +"Configuring TCB: Already existed at this position, it is now linked to this " +"TCB marker" +msgstr "" + +#: tcb_ts_ui.lua +msgid "TCB assigned to @1" +msgstr "" + +#: tcb_ts_ui.lua +msgid "Configuring TCB: Successfully configured TCB" +msgstr "" + +#: tcb_ts_ui.lua +msgid "Configuring TCB: This is not a normal two-connection rail! Aborted." +msgstr "" + +#: tcb_ts_ui.lua +msgid "Configuring TCB: Node is too far away. Aborted." +msgstr "" + +#: tcb_ts_ui.lua +msgid "Configuring TCB: Successfully assigned signal." +msgstr "" + +#: tcb_ts_ui.lua +msgid "Configuring TCB: Internal error, TCBS doesn't exist. Aborted." +msgstr "" + +#: tcb_ts_ui.lua +msgid "Configuring TCB: Cannot use static signals for routesetting. Aborted." +msgstr "" + +#: tcb_ts_ui.lua +msgid "Configuring TCB: Not a compatible signal. Aborted." +msgstr "" + +#: tcb_ts_ui.lua +msgid "@1 locks in state @2" +msgstr "" + +#: tcb_ts_ui.lua +msgid "Error: TS modified, abort!" +msgstr "" + +#: tcb_ts_ui.lua +msgid "Setting fixed locks finished!" +msgstr "" + +#: tcb_ts_ui.lua +msgid "TCB already existed at this position, now linked to this node" +msgstr "" + +#: tcb_ts_ui.lua +msgid "Signal on B side already assigned!" +msgstr "" + +#: tcb_ts_ui.lua +msgid "Can't remove track, a train is here!" +msgstr "" + +#: tcb_ts_ui.lua +msgid "Side @1" +msgstr "" + +#: tcb_ts_ui.lua +msgid "Show track section" +msgstr "" + +#: tcb_ts_ui.lua +msgid "Create Interlocked Track Section" +msgstr "" + +#: tcb_ts_ui.lua +msgid "Link: @1" +msgstr "" + +#: tcb_ts_ui.lua +msgid "Link @1" +msgstr "" + +#: tcb_ts_ui.lua +msgid "No Link" +msgstr "" + +#: tcb_ts_ui.lua +msgid "Signalling" +msgstr "" + +#: tcb_ts_ui.lua +msgid "Assign a signal" +msgstr "" + +#: tcb_ts_ui.lua +msgid "Track Circuit Break Configuration" +msgstr "" + +#: tcb_ts_ui.lua +msgid "TCB Link: Select linked TCB now!" +msgstr "" + +#: tcb_ts_ui.lua +msgid "Configuring TCB: Please punch the signal to assign." +msgstr "" + +#: tcb_ts_ui.lua +msgid "Track Section Detail - @1" +msgstr "" + +#: tcb_ts_ui.lua +msgid "Section name" +msgstr "" + +#: tcb_ts_ui.lua +msgid "Boundary TCBs:" +msgstr "" + +#: tcb_ts_ui.lua +msgid "Fixed route locks (e.g. level crossings):" +msgstr "" + +#: tcb_ts_ui.lua +msgid "Add locks" +msgstr "" + +#: tcb_ts_ui.lua +msgid "Clear locks" +msgstr "" + +#: tcb_ts_ui.lua +msgid "Remove Section" +msgstr "" + +#: tcb_ts_ui.lua +msgid "" +"This will remove the track section and set all its end points to End Of " +"Interlocking" +msgstr "" + +#: tcb_ts_ui.lua +msgid "Route is set: " +msgstr "" + +#: tcb_ts_ui.lua +msgid "Section holds @1 route locks." +msgstr "" + +#: tcb_ts_ui.lua +msgid "Trains on this section:" +msgstr "" + +#: tcb_ts_ui.lua +msgid "No trains on this section." +msgstr "" + +#: tcb_ts_ui.lua +msgid "Reset section state" +msgstr "" + +#: tcb_ts_ui.lua +msgid "" +"You cannot modify track sections when a route is set or a train is on the " +"section." +msgstr "" + +#: tcb_ts_ui.lua +msgid "Punch components to add fixed locks. (punch anything else = end)" +msgstr "" + +#: tcb_ts_ui.lua +msgid "Reset track section" +msgstr "" + +#: tcb_ts_ui.lua +msgid "" +"This will clear the list of trains\n" +"and the routesetting status of this section.\n" +"Are you sure?" +msgstr "" + +#: tcb_ts_ui.lua +msgid "Yes" +msgstr "" + +#: tcb_ts_ui.lua +msgid "Cancel" +msgstr "" + +#: tcb_ts_ui.lua +msgid "Reset track section @1!" +msgstr "" + +#: tcb_ts_ui.lua +msgid "Final TCBS unset (legacy-style buffer route)" +msgstr "" + +#: tcb_ts_ui.lua +msgid "Signal at @1" +msgstr "" + +#: tcb_ts_ui.lua +msgid "Signal name" +msgstr "" + +#: tcb_ts_ui.lua +msgid "Multiple routes are requested (first available is set):" +msgstr "" + +#: tcb_ts_ui.lua +msgid "A route is requested from this signal:" +msgstr "" + +#: tcb_ts_ui.lua +msgid "Route has been set." +msgstr "" + +#: tcb_ts_ui.lua +msgid "Waiting for route to be set..." +msgstr "" + +#: tcb_ts_ui.lua +msgid "Enable Automatic Working" +msgstr "" + +#: tcb_ts_ui.lua +msgid "Automatic Working is active." +msgstr "" + +#: tcb_ts_ui.lua +msgid "Route is re-set when a train passed." +msgstr "" + +#: tcb_ts_ui.lua +msgid "Disable Automatic Working" +msgstr "" + +#: tcb_ts_ui.lua +msgid "Cancel Route" +msgstr "" + +#: tcb_ts_ui.lua +msgid " (invalid)" +msgstr "" + +#: tcb_ts_ui.lua +msgid "Routes:" +msgstr "" + +#: tcb_ts_ui.lua +msgid "Set Route" +msgstr "" + +#: tcb_ts_ui.lua +msgid "Show" +msgstr "" + +#: tcb_ts_ui.lua +msgid "Set ARS default route" +msgstr "" + +#: tcb_ts_ui.lua +msgid "Edit" +msgstr "" + +#: tcb_ts_ui.lua +msgid "Delete this route" +msgstr "" + +#: tcb_ts_ui.lua +msgid "NOTE: ARS is disabled." +msgstr "" + +#: tcb_ts_ui.lua +msgid "Routes are not automatically set." +msgstr "" + +#: tcb_ts_ui.lua +msgid "Smart Route" +msgstr "" + +#: tcb_ts_ui.lua +msgid "New (Manual)" +msgstr "" + +#: tcb_ts_ui.lua +msgid "Automatic routesetting" +msgstr "" + +#: tcb_ts_ui.lua +msgid "Distant signal triggers ARS" +msgstr "" + +#: tcb_ts_ui.lua +msgid "No routes are yet defined." +msgstr "" + +#: tcb_ts_ui.lua +msgid "" +"This is an always-halt signal (e.g. a buffer)\n" +"No routes can be set from here." +msgstr "" + +#: tcb_ts_ui.lua +msgid "" +"This is a pure distant signal\n" +"No route is currently set through." +msgstr "" + +#: tcb_ts_ui.lua +msgid "Route is set over this signal by:" +msgstr "" + +#: tcb_ts_ui.lua +msgid "Wait for this route to be cancelled in order to do anything here." +msgstr "" + +#: tcb_ts_ui.lua +msgid "" +"Cannot delete route which has ARS rules, please review and then delete " +"through edit dialog!" +msgstr "" + +#: tool.lua +msgid "Route lock inspector" +msgstr "" + +#: tool.lua +msgid "Route locks currently put:" +msgstr "" + +#: tool.lua +msgid "No route locks set" +msgstr "" + +#: tool.lua +msgid "Emplace manual lock" +msgstr "" + +#: tool.lua +msgid "Node is not a track!" +msgstr "" + +#: tool.lua +msgid "No track section at this location!" +msgstr "" + +#: tool.lua +msgid "" +"Interlocking tool\n" +"Punch: Highlight track section\n" +"Place: check route locks/show track section info" +msgstr "" + +#: tsr_rail.lua +msgid "Point speed restriction: @1" +msgstr "" + +#: tsr_rail.lua +msgid "Set point speed restriction:" +msgstr "" + +#: tsr_rail.lua +msgid "You are not allowed to configure this track without the @1 privilege." +msgstr "" + +#: tsr_rail.lua +msgid "You are not allowed to configure this track." +msgstr "" + +#: tsr_rail.lua +msgid "Point Speed Restriction Track" +msgstr "" diff --git a/advtrains_interlocking/po/de.po b/advtrains_interlocking/po/de.po new file mode 100644 index 0000000..d3aa1dc --- /dev/null +++ b/advtrains_interlocking/po/de.po @@ -0,0 +1,1378 @@ +msgid "" +msgstr "" +"Project-Id-Version: advtrains\n" +"Report-Msgid-Bugs-To: advtrains-discuss@lists.sr.ht\n" +"POT-Creation-Date: 2025-06-11 23:21+0200\n" +"PO-Revision-Date: 2025-06-12 22:55+0200\n" +"Last-Translator: Y. Wang <yw05@forksworld.de>\n" +"Language-Team: German\n" +"Language: de\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 3.2.2\n" + +#: autonaming.lua +msgid "Prefix set, next signal name will be: @1" +msgstr "Präfix gesetzt, nächster Signalname: @1" + +#: autonaming.lua +msgid "Prefix unset, signals are not auto-named for you!" +msgstr "Präfix gelöscht, automatische Signalbenennung deaktiviert!" + +#: autonaming.lua +msgid "" +"Sets the current prefix for automatically naming interlocking components. " +"Example: '/at_nameprefix TEST' - signals will be named TEST1, TEST2 and so on" +msgstr "" +"Setze einen Präfix für die automatische Benennung von neu hinzugefügten " +"Signalen. Beispiel: '/at_nameprefix TEST' - Signale werden mit TEST1, TEST2 " +"usw. benannt" + +#: database.lua +msgid "Created track section @1 from @2 TCBs" +msgstr "Gleisabschnitt @1 aus @2 TCBs erstellt" + +#: database.lua +msgid "Track section inconsistent here, repairing..." +msgstr "Gleisabschnitt ist inkonsistent, repariere..." + +#: database.lua +msgid "Track section partition found, repairing..." +msgstr "Gleisabschnitt partitioniert, repariere..." + +#: init.lua +msgid "Can set up track sections, routes and signals" +msgstr "Darf Gleisabschnitte, Fahrstraßen und Signale bearbeiten" + +#: route_prog.lua +msgid "@1 Terminal @2" +msgstr "@1 Ziel @2" + +#: route_prog.lua +msgid "@1 is held in @2 position when this route is set and freed " +msgstr "@1 wird durch die Fahrstraße in Position @2 festgelegt" + +#: route_prog.lua +msgid "@1 is no longer affected when this route is set." +msgstr "@1 wird nicht mehr durch die Fahrstraße festgelegt" + +#: route_prog.lua +msgid "Added track section @1 to the route." +msgstr "Gleisabschnitt @1 zur Fahrstraße hinzugefügt." + +#: route_prog.lua +msgid "Advance to next route section" +msgstr "Nächsten Gleisabschnitt hinzufügen" + +#: route_prog.lua +msgid "Advance/Complete Route" +msgstr "Fahrstraße fortsetzen/beenden" + +#: route_prog.lua +msgid "Advancing over next section is" +msgstr "Fortsetzen über nächsten Gleisabschnitt hinaus" + +#: route_prog.lua +msgid "Cancel if you are unsure!" +msgstr "Abbrechen, wenn Sie unsicher sind!" + +#: route_prog.lua +msgid "Cancel route programming" +msgstr "Fahrstraßenprogrammierung abbrechen" + +#: route_prog.lua +msgid "Cannot program route without a target" +msgstr "Kann keine Fahrstraße ohne Ziel programmieren" + +#: route_prog.lua tcb_ts_ui.lua +msgid "End of interlocking" +msgstr "Ende der Zugsicherung" + +#: route_prog.lua +msgid "Enter Route Name" +msgstr "Fahrstraßennamen eingeben" + +#: route_prog.lua +msgid "Finish programming route" +msgstr "Fahrstraße abschließen" + +#: route_prog.lua +msgid "Finish route HERE" +msgstr "Fahrstraße HIER abschließen" + +#: route_prog.lua +msgid "Finish route at end of NEXT section" +msgstr "Fahrstraße am Ende des NÄCHSTEN Abschnitts abschließen" + +#: route_prog.lua +msgid "Fixed in state @1 by route @2 (punch to unfix)" +msgstr "Festgelegt in Zustand @1 durch Fahrstraße @2 (Schlagen um freizugeben)" + +#: route_prog.lua +msgid "Fixed in state @1 by route @2 until segment #@3 is freed." +msgstr "" +"Festgelegt in Zustand @1 durch Fahrstraße @2, bis Segment @3 freigegeben " +"wird." + +#: route_prog.lua route_ui.lua signal_aspect_ui.lua tcb_ts_ui.lua tool.lua +msgid "Insufficient privileges to use this!" +msgstr "Unzureichende Privilegien, um dies zu benutzen!" + +#: route_prog.lua +msgid "Next section is diverging (>2 TCBs)" +msgstr "Nächster Abschnitt enthält eine Weiche (>2 TCBs)" + +#: route_prog.lua +msgid "Route discarded." +msgstr "Fahrstraße verworfen." + +#: route_prog.lua +msgid "Route ends at signal:" +msgstr "Fahrstraße endet bei Signal:" + +#: route_prog.lua +msgid "Route leads into" +msgstr "Fahrstraße führt in" + +#: route_prog.lua +msgid "" +"Route programming mode active. Punch TCBs to add route segments, punch " +"turnouts to lock them." +msgstr "" +"Fahrstraßenprogrammierung aktiv. Schlage Gleisabschnittsgrenzen (TCB) um " +"Segmente hinzuzufügen, schlage Weichen um sie festzulegen." + +#: route_prog.lua +msgid "Route section @1 removed." +msgstr "Fahrstraßenabschnitt @1 entfernt." + +#: route_prog.lua +msgid "Routes should in most cases end at signals." +msgstr "Fahrstraßen sollten normalerweise an einem Signal enden." + +#: route_prog.lua +msgid "Save Route" +msgstr "Fahrstraße speichern" + +#: route_prog.lua +msgid "Step back one section" +msgstr "Einen Abschnitt zurück" + +#: route_prog.lua +msgid "Successfully programmed route." +msgstr "Fahrstraße erfolgreich programmiert." + +#: route_prog.lua +msgid "The origin TCB has become unknown during programming. Try again." +msgstr "Der Start-TCB ist unbekannt geworden. Versuche nochmal." + +#: route_prog.lua +msgid "This TCB is not suitable as" +msgstr "Diese Gleisabschnittsgrenze ist" + +#: route_prog.lua +msgid "This TCB is unconfigured, you first need to assign it to a rail" +msgstr "" +"Diese Gleisabschnittsgrenze ist noch nicht konfiguiert, sie muss erst " +"zugewiesen werden" + +#: route_prog.lua +msgid "WARNING: Route does not end at a signal." +msgstr "ACHTUNG: Fahrstraße endet nicht an einem Signal." + +#: route_prog.lua +msgid "[Route programming] " +msgstr "[Fahrstraßenprogrammierung] " + +#: route_prog.lua +msgid "impossible at this place." +msgstr "ist hier nicht möglich." + +#: route_prog.lua +msgid "non-interlocked area" +msgstr "nicht-überwachtes Gebiet" + +#: route_prog.lua +msgid "route continuation." +msgstr "nicht als Fortsetzung geeignet." + +#: route_ui.lua +msgid "<< Select a route part to edit options" +msgstr "<< Wähle einen Abschnitt, um Optionen zu bearbeiten" + +#: route_ui.lua +msgid "<Default Aspect>" +msgstr "<Standardbegriff>" + +#: route_ui.lua +msgid "ARS Rule List" +msgstr "ARS-Regelliste" + +#: route_ui.lua +msgid "Announce distant signal" +msgstr "Entferntes Hauptsignal ankündigen" + +#: route_ui.lua +msgid "Back to signal" +msgstr "Zurück zum Signal" + +#: route_ui.lua +msgid "Call-on (section may be occupied)" +msgstr "Abschnitt darf belegt sein" + +#: route_ui.lua +msgid "Clone Route" +msgstr "Duplizieren" + +#: route_ui.lua +msgid "Delete Route" +msgstr "Fahrstraße löschen" + +#: route_ui.lua +msgid "Error:" +msgstr "Fehler:" + +#: route_ui.lua +msgid "New From Route" +msgstr "Neu aus dieser FS" + +#: route_ui.lua +msgid "No Signal at this TCB" +msgstr "Kein Signal hier" + +#: route_ui.lua +msgid "Route name" +msgstr "Fahrstraßenname" + +#: route_ui.lua +msgid "Route overview" +msgstr "Fahrstraßenübersicht" + +#: route_ui.lua +msgid "Save ARS List" +msgstr "ARS-Liste speichern" + +#: route_ui.lua +msgid "Section Options:" +msgstr "Abschnittsoptionen:" + +#: route_ui.lua tcb_ts_ui.lua +msgid "Set" +msgstr "Setzen" + +#: route_ui.lua signal_aspect_ui.lua +msgid "Signal Aspect:" +msgstr "Signalbegriff:" + +#: route_ui.lua tcb_ts_ui.lua +msgid "TCB at @1 has different section than previous TCB" +msgstr "TCB bei @1 hat einen anderen Gleisabschnitt als der vorherige TCB" + +#: route_ui.lua tcb_ts_ui.lua +msgid "TCB at @1 is missing" +msgstr "TCB bei @1 fehlt" + +#: route_ui.lua tcb_ts_ui.lua +msgid "TCB at @1 is not assigned to previous track section" +msgstr "TCB bei @1 ist dem vorherigen Gleisabschnitt nicht zugewiesen" + +#: route_ui.lua tcb_ts_ui.lua +msgid "Track section after @1 missing" +msgstr "Gleisabschnitt nach @1 fehlt" + +#: route_ui.lua tcb_ts_ui.lua +msgid "Turnout/component missing at @1" +msgstr "Weiche oder Komponente bei @1 fehlt" + +#: routesetting.lua +msgid "Lock conflict at @1, Held locked by:" +msgstr "Sperrenkonflikt bei @1, bereits gesperrt durch:" + +#: routesetting.lua +msgid "No TCB found at @1. Please update or reconfigure route!" +msgstr "TCB bei @1 nicht gefunden. Bitte Fahrstraße korrigieren!" + +#: routesetting.lua +msgid "No track section adjacent to @1. Please reconfigure route!" +msgstr "Gleisabschnitt nach @1 nicht gefunden. Bitte Fahrstraße korrigieren!" + +#: routesetting.lua +msgid "Route @1 from signal @2" +msgstr "Fahrstraße @1 von Signal @2" + +#: routesetting.lua +msgid "Route @1 from signal @2, segment #@3" +msgstr "Fahrstraße @1 von Signal @2, Segment @3" + +#: routesetting.lua +msgid "Section '@1' already has route set from @2:" +msgstr "Abschnitt '@1' bereits durch Fahrstraße von @2 belegt:" + +#: routesetting.lua +msgid "Section '@1' is occupied!" +msgstr "Abschnitt '@1' ist durch einen Zug belegt!" + +#: routesetting.lua +msgid "Section '@1' not found!" +msgstr "Abschnitt '@1' nicht gefunden!" + +#: routesetting.lua +msgid "" +"TCB at @1 has different section than previous TCB. Please update track " +"section or reconfigure route!" +msgstr "" +"TCB bei @1 hat anderen Abschnitt als vorhergehender TCB. Bitte Fahrstraße " +"korrigieren!" + +#: routesetting.lua +msgid "" +"Turnout/component missing at @1. Please update track section or reconfigure " +"route!" +msgstr "Weiche/Komponente bei @1 nicht gefunden. Bitte Fahrstraße korrigieren!" + +#: signal_aspect_ui.lua +msgid "<assign distant>" +msgstr "<entf. Hauptsignal festl.>" + +#: signal_aspect_ui.lua +msgid "<none>" +msgstr "<kein>" + +#: signal_aspect_ui.lua +msgid "Assigned distant signal to the main signal at @1" +msgstr "Vorsignal dem Hauptsignal bei @1 zugewiesen" + +#: signal_aspect_ui.lua +msgid "Assigned signal to the TCB at @1" +msgstr "Signal der Gleisabschnittsgrenze bei @1 zugewiesen" + +#: signal_aspect_ui.lua tool.lua +msgid "Clear" +msgstr "Leeren" + +#: signal_aspect_ui.lua +msgid "" +"Configuring Signal: Influence point of another signal is already present!" +msgstr "" +"Signal einstellen: Beeinflussungspunkt eines anderen Signals bereits " +"vorhanden!" + +#: signal_aspect_ui.lua +msgid "Configuring Signal: Node is too far away. Aborted." +msgstr "Signal einstellen: Block ist zu weit entfernt. Abbruch." + +#: signal_aspect_ui.lua +msgid "" +"Configuring Signal: Please look in train's driving direction and punch rail " +"to set influence point." +msgstr "" +"Signal einstellen: In Fahrtrichtung schauen und Gleis schlagen, um " +"Beeinflussungspunkt zu setzen." + +#: signal_aspect_ui.lua +msgid "Configuring Signal: Successfully set influence point" +msgstr "Signal einstellen: Beeinflussungspunkt erfolgreich gesetzt" + +#: signal_aspect_ui.lua +msgid "Configuring Signal: This is not a normal two-connection rail! Aborted." +msgstr "Signal einstellen: Dies ist kein geeignetes Gleis! Abbruch." + +#: signal_aspect_ui.lua +msgid "Dst: @1" +msgstr "Haupts.: @1" + +#: signal_aspect_ui.lua +msgid "Influence point is not set." +msgstr "Beeinflussungspunkt ist nicht gesetzt." + +#: signal_aspect_ui.lua +msgid "Influence point is set at @1." +msgstr "Beeinflussungspunkt ist gesetzt bei @1." + +#: signal_aspect_ui.lua +msgid "Modify" +msgstr "Bearbeiten" + +#: signal_aspect_ui.lua +msgid "Set distant signal: Punch the main signal to assign!" +msgstr "Hauptsignal zuweisen: Bitte schlage das Hauptsignal!" + +#: signal_aspect_ui.lua +msgid "Set influence point" +msgstr "Beeinflussungspunkt setzen" + +#: smartroute.lua +msgid "Apply" +msgstr "Anwenden" + +#: smartroute.lua +msgid "Route search: @1 found" +msgstr "Fahrstraßensuche: @1 gefunden" + +#: smartroute.lua +msgid "Search further" +msgstr "Weitersuchen" + +#: smartroute.lua +msgid "Smartroute: No track section directly ahead!" +msgstr "Fahrstraßensuche: Kein Gleisabschnitt voraus!" + +#: smartroute.lua +msgid "Smartroute: TCBS or routes don't exist here!" +msgstr "" +"Fahrstraßensuche: Gleisabschnittsgrenze oder Fahrstraßen existieren hier " +"nicht!" + +#: tcb_ts_ui.lua +msgid " (invalid)" +msgstr "(ungültig)" + +#: tcb_ts_ui.lua +msgid "@1 locks in state @2" +msgstr "@1 gesperrt in Position @2" + +#: tcb_ts_ui.lua +msgid "A route is requested from this signal:" +msgstr "Fahrstraße von diesem Signal:" + +#: tcb_ts_ui.lua +msgid "Add locks" +msgstr "Sperre hinzu." + +#: tcb_ts_ui.lua +msgid "Assign a signal" +msgstr "Signal zuweisen" + +#: tcb_ts_ui.lua +msgid "Automatic Working is active." +msgstr "Automatischer Blockbetrieb aktiv." + +#: tcb_ts_ui.lua +msgid "Automatic routesetting" +msgstr "ARS (autom. Fahrstraßenauswahl)" + +#: tcb_ts_ui.lua +msgid "Boundary TCBs:" +msgstr "Gleisabschnittsgrenzen:" + +#: tcb_ts_ui.lua +msgid "Can't remove TCB: Both sides must have no signal assigned!" +msgstr "" +"Kann Gleisabschnittsgrenze nicht entfernen: mindestens eine Seite hat noch " +"ein Signal zugewiesen!" + +#: tcb_ts_ui.lua +msgid "Can't remove track, a train is here!" +msgstr "Kann Gleisabschnittsgrenze nicht entfernen: hier ist noch ein Zug!" + +#: tcb_ts_ui.lua +msgid "Cancel" +msgstr "Abbruch" + +#: tcb_ts_ui.lua +msgid "Cancel Route" +msgstr "Fahrstraße auflösen" + +#: tcb_ts_ui.lua +msgid "" +"Cannot delete route which has ARS rules, please review and then delete " +"through edit dialog!" +msgstr "" +"Fahrstraße hat ARS-Regeln, bitte überprüfe diese und lösche die Fahrstraße " +"über den Bearbeitungsdialog!" + +#: tcb_ts_ui.lua +msgid "Clear locks" +msgstr "Sperren löschen" + +#: tcb_ts_ui.lua +msgid "" +"Configuring TCB: Already existed at this position, it is now linked to this " +"TCB marker" +msgstr "" +"Gleisabschnittsgrenze einstellen: Existierte hier bereits, der Marker ist " +"nun verbunden" + +#: tcb_ts_ui.lua +msgid "Configuring TCB: Cannot use static signals for routesetting. Aborted." +msgstr "" +"Gleisabschnittsgrenze einstellen: statische Signale können nicht für " +"Fahrstraßen benutzt werden. Abbruch." + +#: tcb_ts_ui.lua +msgid "Configuring TCB: Internal error, TCBS doesn't exist. Aborted." +msgstr "" +"Gleisabschnittsgrenze einstellen: Interner Fehler, TCB existiert nicht. " +"Abbruch." + +#: tcb_ts_ui.lua +msgid "Configuring TCB: Node is too far away. Aborted." +msgstr "Gleisabschnittsgrenze einstellen: Block ist zu weit entfernt. Abbruch." + +#: tcb_ts_ui.lua +msgid "Configuring TCB: Not a compatible signal. Aborted." +msgstr "Gleisabschnittsgrenze einstellen: Kein kompatibles Signal. Abbruch." + +#: tcb_ts_ui.lua +msgid "Configuring TCB: Please punch the rail you want to assign this TCB to." +msgstr "" +"Gleisabschnittsgrenze einstellen: Bitte das Gleis schlagen, wo die Grenze " +"erstellt werden soll." + +#: tcb_ts_ui.lua +msgid "Configuring TCB: Please punch the signal to assign." +msgstr "" +"Gleisabschnittsgrenze einstellen: Bitte das zuzuweisende Signal schlagen." + +#: tcb_ts_ui.lua +msgid "Configuring TCB: Successfully assigned signal." +msgstr "Gleisabschnittsgrenze einstellen: Signal erfolgreich zugewiesen." + +#: tcb_ts_ui.lua +msgid "Configuring TCB: Successfully configured TCB" +msgstr "Gleisabschnittsgrenze einstellen: Grenze erfolgreich erstellt" + +#: tcb_ts_ui.lua +msgid "Configuring TCB: This is not a normal two-connection rail! Aborted." +msgstr "" +"Gleisabschnittsgrenze einstellen: Dies ist kein geeignetes Gleis! Abbruch." + +#: tcb_ts_ui.lua +msgid "Create Interlocked Track Section" +msgstr "Gleisabschnitt anlegen" + +#: tcb_ts_ui.lua +msgid "Delete this route" +msgstr "Fahrstraße löschen" + +#: tcb_ts_ui.lua +msgid "Disable Automatic Working" +msgstr "Auto. Blockbetrieb aus" + +#: tcb_ts_ui.lua +msgid "Distant signal triggers ARS" +msgstr "Vorsignal kann ARS auslösen" + +#: tcb_ts_ui.lua +msgid "Edit" +msgstr "Bearbeiten" + +#: tcb_ts_ui.lua +msgid "Enable Automatic Working" +msgstr "Automatischer Blockbetrieb" + +#: tcb_ts_ui.lua +msgid "Error: TS modified, abort!" +msgstr "Fehler: Abschnitt verändert, Abbruch!" + +#: tcb_ts_ui.lua +msgid "Final TCBS unset (legacy-style buffer route)" +msgstr "Letzte Abschnittsgrenze fehlt (Prellbockroute aus älterer Version)" + +#: tcb_ts_ui.lua +msgid "Fixed route locks (e.g. level crossings):" +msgstr "Feste Fahrstraßensperren (z.B. Bahnübergang):" + +#: tcb_ts_ui.lua +msgid "Link @1" +msgstr "Verknüpfe @1" + +#: tcb_ts_ui.lua +msgid "Link: @1" +msgstr "Verknüpfung: @1" + +#: tcb_ts_ui.lua +msgid "Multiple routes are requested (first available is set):" +msgstr "Mehrere Fahrstraßen angefragt (erste verfügbare wird eingestellt):" + +#: tcb_ts_ui.lua +msgid "NOTE: ARS is disabled." +msgstr "ACHTUNG: ARS deaktiviert!" + +#: tcb_ts_ui.lua +msgid "New (Manual)" +msgstr "Neu (Manuell)" + +#: tcb_ts_ui.lua +msgid "No Link" +msgstr "Keine Verknüpfung" + +#: tcb_ts_ui.lua +msgid "No routes are yet defined." +msgstr "Bisher keine Fahrstraßen definiert." + +#: tcb_ts_ui.lua +msgid "No trains on this section." +msgstr "Keine Züge auf diesem Abschnitt." + +#: tcb_ts_ui.lua +msgid "Punch components to add fixed locks. (punch anything else = end)" +msgstr "" +"Schlage auf Komponenten um diese zu sperren (schlage irgendetwas anderes = " +"Ende)" + +#: tcb_ts_ui.lua +msgid "Remove Section" +msgstr "Gleisabschnitt löschen" + +#: tcb_ts_ui.lua +msgid "Reset section state" +msgstr "Gleisabschnitt zurücksetzen" + +#: tcb_ts_ui.lua +msgid "Reset track section" +msgstr "Gleisabschnitt zurücksetzen" + +#: tcb_ts_ui.lua +msgid "Reset track section @1!" +msgstr "Streckenabschnitt @1 zurückgesetzt!" + +#: tcb_ts_ui.lua +msgid "Route has been set." +msgstr "Fahrstraße ist festgelegt." + +#: tcb_ts_ui.lua +msgid "Route is re-set when a train passed." +msgstr "Fahrstraße wird nach Passieren eines Zuges nicht aufgelöst." + +#: tcb_ts_ui.lua +msgid "Route is set over this signal by:" +msgstr "Eine Fahrstraße ist über dieses Signal gestellt von:" + +#: tcb_ts_ui.lua +msgid "Route is set: " +msgstr "Fahrstraße ist festgelegt: " + +#: tcb_ts_ui.lua +msgid "Routes are not automatically set." +msgstr "Fahrstraßen werden nicht automatisch gestellt." + +#: tcb_ts_ui.lua +msgid "Routes:" +msgstr "Fahrstraßen:" + +#: tcb_ts_ui.lua +msgid "Section holds @1 route locks." +msgstr "Abschnitt hält @1 Sperren." + +#: tcb_ts_ui.lua +msgid "Section name" +msgstr "Name des Streckenabschnitts" + +#: tcb_ts_ui.lua +msgid "Set ARS default route" +msgstr "Setze als ARS-Standardroute" + +#: tcb_ts_ui.lua +msgid "Set Route" +msgstr "Fahrstraße einstellen" + +#: tcb_ts_ui.lua +msgid "Setting fixed locks finished!" +msgstr "Feste Fahrstraßensperren hinzugefügt!" + +#: tcb_ts_ui.lua +msgid "Show" +msgstr "Anzeigen" + +#: tcb_ts_ui.lua +msgid "Show track section" +msgstr "Gleisabschnitt anzeigen" + +#: tcb_ts_ui.lua +msgid "Side @1" +msgstr "Seite @1" + +#: tcb_ts_ui.lua +msgid "Signal at @1" +msgstr "Signal bei @1" + +#: tcb_ts_ui.lua +msgid "Signal name" +msgstr "Signalname" + +#: tcb_ts_ui.lua +msgid "Signal on B side already assigned!" +msgstr "Signal auf Seite B bereits zugewiesen!" + +#: tcb_ts_ui.lua +msgid "Signalling" +msgstr "Fahrstraßen stellen" + +#: tcb_ts_ui.lua +msgid "Smart Route" +msgstr "Fahrstraßensuche" + +#: tcb_ts_ui.lua +msgid "TCB Link: Select linked TCB now!" +msgstr "" +"Gleisabschnitte verknüpfen: Zu verknüpfende Gleisabschnittsgrenze jetzt " +"auswählen!" + +#: tcb_ts_ui.lua +msgid "TCB already existed at this position, now linked to this node" +msgstr "" +"Gleisabschnittsgrenze existierte hier bereits, der Block ist nun verbunden" + +#: tcb_ts_ui.lua +msgid "TCB assigned to @1" +msgstr "Gleisabschnittsgrenze an @1 zugewiesen" + +#: tcb_ts_ui.lua +msgid "This TCB has been removed. Please dig marker." +msgstr "Gleisabschnittsgrenze wurde gelöscht. Bitte Marker entfernen." + +#: tcb_ts_ui.lua +msgid "" +"This is a pure distant signal\n" +"No route is currently set through." +msgstr "" +"Dies ist ein reines Vorsignal\n" +"Aktuell keine Fahrstraße eingestellt." + +#: tcb_ts_ui.lua +msgid "" +"This is an always-halt signal (e.g. a buffer)\n" +"No routes can be set from here." +msgstr "" +"Dies ist ein Haltsignal (z.B. Prellbock)\n" +"Von hier aus können keine Fahrstraßen eingestellt werden." + +#: tcb_ts_ui.lua +msgid "" +"This will clear the list of trains\n" +"and the routesetting status of this section.\n" +"Are you sure?" +msgstr "" +"Dies löscht die Liste der Züge im Abschnitt\n" +"sowie den Fahrstraßenstatus.\n" +"Sind Sie sicher?" + +#: tcb_ts_ui.lua +msgid "" +"This will remove the track section and set all its end points to End Of " +"Interlocking" +msgstr "Dies wird den Gleisabschnitt löschen" + +#: tcb_ts_ui.lua +msgid "Track Circuit Break" +msgstr "Gleisabschnittsgrenze" + +#: tcb_ts_ui.lua +msgid "Track Circuit Break Configuration" +msgstr "Einstellungen der Gleisabschnittsgrenze" + +#: tcb_ts_ui.lua +msgid "Track Section Detail - @1" +msgstr "Gleisabschnitts-Details - @1" + +#: tcb_ts_ui.lua +msgid "Trains on this section:" +msgstr "Züge in diesem Abschnitt" + +#: tcb_ts_ui.lua +msgid "Unconfigured Track Circuit Break, right-click to assign." +msgstr "" +"Nicht konfiguierte Gleisabschnittsgrenze (TCB). Rechtsklick zum Zuweisen." + +#: tcb_ts_ui.lua +msgid "Wait for this route to be cancelled in order to do anything here." +msgstr "Erst nach Auflösung dieser Fahrstraße kann von hier gestellt werden." + +#: tcb_ts_ui.lua +msgid "Waiting for route to be set..." +msgstr "Warten, bis Fahrstraße verfügbar ist..." + +#: tcb_ts_ui.lua +msgid "Yes" +msgstr "Ja" + +#: tcb_ts_ui.lua +msgid "" +"You cannot modify track sections when a route is set or a train is on the " +"section." +msgstr "" +"Abschnitt kann nicht bearbeitet werden, wenn eine Fahrstraße gesetzt ist " +"oder der Abschnitt belegt ist." + +#: tool.lua +msgid "Emplace manual lock" +msgstr "Manuelle Sperre setzen" + +#: tool.lua +msgid "" +"Interlocking tool\n" +"Punch: Highlight track section\n" +"Place: check route locks/show track section info" +msgstr "" +"Zugsicherungswerkzeug\n" +"Schlagen: Gleisabschnitte hervorheben\n" +"Platzieren: Gleisabschnittsinformation/Fahrstraßensperren anzeigen" + +#: tool.lua +msgid "No route locks set" +msgstr "Keine Fahrstraßensperren gehalten" + +#: tool.lua +msgid "No track section at this location!" +msgstr "Kein Gleisabschnitt gefunden!" + +#: tool.lua +msgid "Node is not a track!" +msgstr "Block ist kein Gleis!" + +#: tool.lua +msgid "Route lock inspector" +msgstr "Fahrstraßensperren-Inspektor" + +#: tool.lua +msgid "Route locks currently put:" +msgstr "Gesetzte Fahrstraßensperren:" + +#: tsr_rail.lua +msgid "Point Speed Restriction Track" +msgstr "Geschwindigkeitskontrollgleis" + +#: tsr_rail.lua +msgid "Point speed restriction: @1" +msgstr "Geschwindigkeitskontrolle: @1" + +#: tsr_rail.lua +msgid "Set point speed restriction:" +msgstr "Setze Kontrollgeschwindigkeit:" + +#: tsr_rail.lua +msgid "You are not allowed to configure this track without the @1 privilege." +msgstr "Sie dürfen ohne das „@1“-Privileg dieses Gleis nicht konfigurieren." + +#: tsr_rail.lua +msgid "You are not allowed to configure this track." +msgstr "Sie dürfen dieses Gleis nicht konfigurieren." + +#~ msgid "(Doors closed)" +#~ msgstr "(Türen geschlossen)" + +#~ msgid "3-way turnout" +#~ msgstr "Dreiwegweiche" + +#~ msgid "90+Angle Diamond Crossing Track" +#~ msgstr "Kreuzung mit einem achsenparallelen Gleis" + +#~ msgid "<No coupler>" +#~ msgstr "<Keine Kupplung vorhanden>" + +#~ msgid "@1 Platform (45 degree)" +#~ msgstr "Hoher @1-Bahnsteig (45°)" + +#~ msgid "@1 Platform (high)" +#~ msgstr "Hoher @1-Bahnsteig" + +#~ msgid "@1 Platform (low)" +#~ msgstr "Niedriger @1-Bahnsteig" + +#~ msgid "@1 Platform (low, 45 degree)" +#~ msgstr "Niedriger @1-Bahnsteig (45°)" + +#~ msgid "@1 Slope" +#~ msgstr "@1 Steigung" + +#~ msgid "ATC Kick command warning: doors are closed." +#~ msgstr "" +#~ "Zugbeeinflussung: Wegen geschlossener Türen werden Fahrgäste nicht zum " +#~ "Ausstieg gezwungen." + +#~ msgid "ATC Kick command warning: train moving." +#~ msgstr "" +#~ "Zugbeeinflussung: Der Zug befindet sich in Bewegung, Fahrgäste werden " +#~ "nicht zum Ausstieg gezwungen." + +#~ msgid "ATC Reverse command warning: didn't reverse train, train moving." +#~ msgstr "" +#~ "Zugbeeinflussung: Der Zug befindet sich in Bewegung und kann nicht " +#~ "umgekehrt werden." + +#~ msgid "ATC command parse error: Unknown command: @1" +#~ msgstr "Zugbeeinflussung: Unbekannter Befehl: @1" + +#~ msgid "ATC command syntax error: I statement not closed: @1" +#~ msgstr "Zugbeeinflussung: Unvollständiger I-Befehl: @1" + +#~ msgid "ATC controller" +#~ msgstr "Zugbeeinflussungsgleis" + +#~ msgid "" +#~ "ATC controller, mode @1\n" +#~ "Channel: @2" +#~ msgstr "" +#~ "Zugbeeinflussungsgleis in Betriebsart „@1“\n" +#~ "Kanal: @2" + +#~ msgid "" +#~ "ATC controller, mode @1\n" +#~ "Command: @2" +#~ msgstr "" +#~ "Zugbeeinflussungsgleis in Betriebsart „@1“\n" +#~ "Befehl: @2" + +#~ msgid "Access to @1" +#~ msgstr "Zugang zu @1" + +#~ msgid "Andrew's Cross" +#~ msgstr "Andreaskreuz" + +#~ msgid "Back of train would end up off track, cancelling." +#~ msgstr "Der hinterer Teil dez Zuges wäre nicht auf dem Gleis." + +#~ msgid "Big Industrial Train Engine" +#~ msgstr "Große Industrielle Lokomotive" + +#~ msgid "Box Wagon" +#~ msgstr "Güterwaggon" + +#~ msgid "Buffer and Chain Coupler" +#~ msgstr "Schraubenkupplung" + +#~ msgid "Bumper" +#~ msgstr "Prellbock" + +#~ msgid "Can not couple: The couplers of the trains do not match (@1 and @2)." +#~ msgstr "Die Kupplungen der Züge passen nicht zueinander (@1 und @2)." + +#~ msgid "" +#~ "Can place and configure LuaATC components, including execute potentially " +#~ "harmful Lua code" +#~ msgstr "" +#~ "Kann LuaATC-Bauteile platzieren und konfigurieren (auch evtl. schädliche " +#~ "Programme ausführen)" + +#~ msgid "Can't get on: wagon full or doors closed!" +#~ msgstr "" +#~ "Sie können nicht einsteigen: der Waggon ist voll oder die Türen sind " +#~ "geschlossen." + +#, fuzzy +#~ msgid "Can't place: Not enough slope items left (@1 required)" +#~ msgstr "" +#~ "Es kann nicht platziert werden: Sie haben nicht genug Steigungsblöcke, es " +#~ "werden insgesamt @1 benötigt." + +#, fuzzy +#~ msgid "Can't place: There's no slope of length @1" +#~ msgstr "" +#~ "Es kann nicht platziert werden: die Steigung der Länge @1 ist nicht " +#~ "definiert." + +#, fuzzy +#~ msgid "Can't place: no supporting node at upper end." +#~ msgstr "" +#~ "Es kann nicht platziert werden: es gibt keinen unterstützenden Block am " +#~ "Ende der Steigung." + +#, fuzzy +#~ msgid "Can't place: not pointing at node" +#~ msgstr "Es kann nicht platziert werden: Sie zeigen nicht auf einem Block." + +#~ msgid "Can't place: protected position!" +#~ msgstr "Es kann nicht platziert werden: diese Position ist geschützt." + +#, fuzzy +#~ msgid "Can't place: space occupied!" +#~ msgstr "Es kann nicht platziert werden: Diese Position ist besetzt." + +#~ msgid "Command" +#~ msgstr "Befehl" + +#~ msgid "Command (on)" +#~ msgstr "Befehl (wenn aktiviert)" + +#~ msgid "Default Seat (driver stand)" +#~ msgstr "Standardsitzplatz (Führerstand)" + +#~ msgid "Dep. Speed" +#~ msgstr "Zielgeschwindigkeit bei Abfahrt" + +#~ msgid "Deprecated Track" +#~ msgstr "ausrangiertes Gleis, nicht verwenden." + +#~ msgid "Detailed Steam Engine" +#~ msgstr "Detaillierte Dampflokomotive" + +#~ msgid "Detector Rail" +#~ msgstr "Detektorgleis" + +#~ msgid "Diagonal Diamond Crossing Track" +#~ msgstr "Diagonale Gleiskreuzung" + +#~ msgid "Digiline channel" +#~ msgstr "Digiline-Kanal" + +#~ msgid "Door Delay" +#~ msgstr "Zeit für die Türschließung" + +#~ msgid "Door Side" +#~ msgstr "Türseite" + +#~ msgid "Doors are closed! (Try holding sneak key!)" +#~ msgstr "Die Türen sind geschlossen." + +#~ msgid "" +#~ "Doors are closed. Use Sneak+rightclick to ignore the closed doors and get " +#~ "off." +#~ msgstr "" +#~ "Die Türen sind geschlossen. Nutzen Sie Schleichen+Rechtsklick, um trotz " +#~ "geschlossener Türen auszusteigen." + +#, fuzzy +#~ msgid "Driver Stand" +#~ msgstr "Führerstand" + +#~ msgid "Driver Stand (left)" +#~ msgstr "Führerstand Links" + +#~ msgid "Driver Stand (right)" +#~ msgstr "Führerstand Rechts" + +#~ msgid "Driver stand" +#~ msgstr "Führerstand" + +#~ msgid "Driver's cab" +#~ msgstr "Führerstand" + +#~ msgid "Get off" +#~ msgstr "Aussteigen" + +#~ msgid "Get off (forced)" +#~ msgstr "Ausstieg zwingen" + +#~ msgid "Industrial Train Engine" +#~ msgstr "Industrielle Lokomotive" + +#~ msgid "Industrial tank wagon" +#~ msgstr "Tankwaggon" + +#~ msgid "Industrial wood wagon" +#~ msgstr "Holztransportwaggon" + +#~ msgid "Japanese Train Engine" +#~ msgstr "Japanische Personenzug-Lokomotive" + +#~ msgid "Japanese Train Inter-Wagon Connection" +#~ msgstr "Waggonzwischenverbindung Japanischer Personenzüge" + +#~ msgid "Japanese Train Wagon" +#~ msgstr "Japanischer Personenzug-Passagierwaggon" + +#, fuzzy +#~ msgid "Japanese signal pole" +#~ msgstr "Japanischer Personenzug-Passagierwaggon" + +#~ msgid "Kick out passengers" +#~ msgstr "Fahrgäste zum Ausstieg zwingen" + +#~ msgid "Lampless Signal" +#~ msgstr "Mechanisches Signal" + +#~ msgid "Line" +#~ msgstr "Linie" + +#~ msgid "Loading Track" +#~ msgstr "Beladungsgleis" + +#~ msgid "Lock couples" +#~ msgstr "Kupplungen sperren" + +#~ msgid "LuaATC component with error: @1" +#~ msgstr "LuaATC-Bauteil mit Fehlermeldung: @1" + +#~ msgid "No such lua entity." +#~ msgstr "" +#~ "Sie zeigen nicht auf einem Objekt, das mit diesem Werkzeug kopiert werden " +#~ "kann." + +#~ msgid "No such train: @1." +#~ msgstr "Es gibt keinen mit „@1“ identifizierbaren Zug." + +#~ msgid "No such wagon: @1." +#~ msgstr "Es gibt keinen mit „@1“ identifizierbaren Waggon." + +#, fuzzy +#~ msgid "Not allowed to do this." +#~ msgstr "Sie dürfen dieses Gleis nicht konfigurieren." + +#~ msgid "Passenger Wagon" +#~ msgstr "Passagierwaggon" + +#, fuzzy +#~ msgid "Passenger area" +#~ msgstr "Passagierwaggon" + +#~ msgid "" +#~ "Passive Component Naming Tool\n" +#~ "\n" +#~ "Right-click to name a passive component." +#~ msgstr "" +#~ "PC-Benennungswerkzeug\n" +#~ "\n" +#~ "Rechtsklick zur Benennung der passiven Komponente." + +#~ msgid "Perpendicular Diamond Crossing Track" +#~ msgstr "Kreuzung mit zueinander orthogonalen Gleisen" + +#~ msgid "Position is occupied by a train." +#~ msgstr "Ein Zug steht an dieser Position." + +#~ msgid "Save" +#~ msgstr "Speichern" + +#~ msgid "Save wagon properties" +#~ msgstr "Waggon-Einstellungen speichern" + +#~ msgid "Scharfenberg Coupler" +#~ msgstr "Scharfenbergkupplung" + +#~ msgid "Select seat:" +#~ msgstr "Wählen Sie einen Sitzplatz aus:" + +#~ msgid "Show Inventory" +#~ msgstr "Inventar Zeigen" + +#~ msgid "Speed:" +#~ msgstr "Geschw.:" + +#~ msgid "Station Code" +#~ msgstr "Kennzeichen der Haltestelle" + +#~ msgid "Station code \"@1\" already exists and is owned by @2." +#~ msgstr "" +#~ "Die Haltestelle mit dem Kennzeichen „@1“ ist bereits vorhanden und wird " +#~ "von @2 verwaltet." + +#~ msgid "Station/Stop Track" +#~ msgstr "Gleis zur Kennzeichnung einer Haltestelle" + +#~ msgid "Steam Engine" +#~ msgstr "Dampflokomotive" + +#~ msgid "Stop Time" +#~ msgstr "Wartezeit" + +#~ msgid "Subway Passenger Wagon" +#~ msgstr "U-Bahn-Waggon" + +#~ msgid "Target:" +#~ msgstr "Zielges.:" + +#~ msgid "Text displayed inside train" +#~ msgstr "Innere Anzeige" + +#~ msgid "Text displayed outside on train" +#~ msgstr "Äußere Anzeige" + +#, fuzzy +#~ msgid "That wagon does not exist!" +#~ msgstr "In diesem Waggon ist kein Sitzplatz vorhanden." + +#~ msgid "The clipboard couldn't access the metadata. Copy failed." +#~ msgstr "" +#~ "Wegen des fehlgeschlagenen Zugriffs auf die Metadaten konnte der Zug " +#~ "nicht kopiert werden." + +#~ msgid "The clipboard couldn't access the metadata. Paste failed." +#~ msgstr "" +#~ "Wegen des fehlgeschlagenen Zugriffs auf die Metadaten konnte eine Kopie " +#~ "des Zuges nicht eingefügt werden." + +#~ msgid "The clipboard is empty." +#~ msgstr "Das Clipboard ist leer." + +#, fuzzy +#~ msgid "The track you are trying to place the wagon on is not long enough!" +#~ msgstr "Das Gleis, auf dem der Waggon platziert werden woll, ist zu kurz." + +#~ msgid "The track you are trying to place the wagon on is not long enough." +#~ msgstr "Das Gleis, auf dem der Waggon platziert werden woll, ist zu kurz." + +#~ msgid "The wagon's inventory is not empty." +#~ msgstr "Das Inventar dieses Waggons ist nicht leer." + +#~ msgid "There's a Signal Influence Point here." +#~ msgstr "Hier ist ein Signal-Beeinflussungspunkt." + +#, fuzzy +#~ msgid "This Wagon ID" +#~ msgstr "Der Waggon ist voll." + +#, fuzzy +#~ msgid "This node can't be changed using the trackworker!" +#~ msgstr "Dieser Block kann nicht mit dem Gleiswerkzeug bearbeitet werden." + +#, fuzzy +#~ msgid "This node can't be rotated using the trackworker!" +#~ msgstr "Dieser Block kann nicht mit dem Gleiswerkzeug gedreht werden." + +#~ msgid "This position is protected!" +#~ msgstr "Diese Position ist geschützt!" + +#~ msgid "This station is owned by @1. You are not allowed to edit its name." +#~ msgstr "" +#~ "Diese Haltestelle wird von @1 verwaltet. Sie dürfen sie nicht umbenennen." + +#~ msgid "This track can not be changed." +#~ msgstr "Dieses Gleis kann nicht geändert werden." + +#, fuzzy +#~ msgid "This track can not be removed!" +#~ msgstr "Dieses Gleis kann nicht entfernt werden." + +#, fuzzy +#~ msgid "This track can not be rotated!" +#~ msgstr "Dieses Gleis kann nicht gedreht werden." + +#~ msgid "This wagon has no seats." +#~ msgstr "In diesem Waggon ist kein Sitzplatz vorhanden." + +#~ msgid "This wagon is full." +#~ msgstr "Der Waggon ist voll." + +#~ msgid "This wagon is owned by @1, you can't destroy it." +#~ msgstr "Dieser Waggon gehört @1, Sie dürfen ihn nicht abbauen." + +#~ msgid "Track" +#~ msgstr "Gleis" + +#~ msgid "" +#~ "Track Worker Tool\n" +#~ "\n" +#~ "Left-click: change rail type (straight/curve/switch)\n" +#~ "Right-click: rotate object" +#~ msgstr "" +#~ "Gleiswerkzeug\n" +#~ "\n" +#~ "Linksklick: Gleistyp ändern\n" +#~ "Rechtsklick: Objekt drehen" + +#, fuzzy +#~ msgid "Train " +#~ msgstr "Der Zug wurde Kopiert." + +#~ msgid "Train copied." +#~ msgstr "Der Zug wurde Kopiert." + +#~ msgid "" +#~ "Train copy/paste tool\n" +#~ "\n" +#~ "Left-click: copy train\n" +#~ "Right-click: paste train" +#~ msgstr "" +#~ "Werkzeug zur Erstellung von Zugkopien\n" +#~ "\n" +#~ "Linksklick: Zug ins Clipboard kopieren\n" +#~ "Right-click: Kopierten Zug einfügen" + +#~ msgid "Unconfigured ATC controller" +#~ msgstr "Nicht konfiguiertes Zugbeeinflussungsgleis" + +#~ msgid "Unconfigured LuaATC component" +#~ msgstr "Nicht konfiguierter LuaATC-Bauteil" + +#~ msgid "Unloading Track" +#~ msgstr "Abladungsgleis" + +#~ msgid "Use Sneak+rightclick to bypass closed doors!" +#~ msgstr "" +#~ "Nutzen Sie Schleichen+Rechtsklick, um trotz geschlossener Türen " +#~ "einzusteigen." + +#, fuzzy +#~ msgid "Wagon Properties Tool" +#~ msgstr "Waggon-Einstellungen" + +#~ msgid "" +#~ "Wagon needs to be decoupled from other wagons in order to destroy it." +#~ msgstr "Der Waggon muss abgekoppelt sein, damit Sie ihn abbauen können." + +#~ msgid "Wagon properties" +#~ msgstr "Waggon-Einstellungen" + +#~ msgid "Wallmounted Signal (left)" +#~ msgstr "An der linken Seite montiertes Signal" + +#~ msgid "Wallmounted Signal (right)" +#~ msgstr "An der rechten Seite montiertes Signal" + +#~ msgid "Wallmounted Signal (top)" +#~ msgstr "An der Decke montiertes Signal" + +#~ msgid "" +#~ "Warning: If you destroy this wagon, you only get some steel back! If you " +#~ "are sure, hold Sneak and left-click the wagon." +#~ msgstr "" +#~ "Warnung: Durch den Abbau des Waggons erhalten Sie nur etwas Stahl zurück. " +#~ "Nutzen Sie Schleichen+Linksklick, um dem Waggon abzubauen." + +#~ msgid "Y-turnout" +#~ msgstr "Y-Weiche" + +#~ msgid "You are not allowed to access the driver stand." +#~ msgstr "Sie haben keinen Zugang zum Führerstand." + +#~ msgid "You are not allowed to build near tracks at this protected position." +#~ msgstr "" +#~ "Sie dürfen an geschützten Stellen nicht in der Nähe von Gleisen bauen." + +#~ msgid "" +#~ "You are not allowed to build near tracks without the track_builder " +#~ "privilege." +#~ msgstr "" +#~ "Sie dürfen ohne das „track_builder“-Privileg nicht in der Nähe von " +#~ "Gleisen bauen." + +#~ msgid "You are not allowed to build tracks at this protected position." +#~ msgstr "Sie dürfen an geschützten Stellen kein Gleis bauen." + +#~ msgid "" +#~ "You are not allowed to build tracks without the track_builder privilege." +#~ msgstr "Sie dürfen ohne das „track_builder“-Privileg kein Gleis bauen." + +#~ msgid "" +#~ "You are not allowed to configure this LuaATC component without the @1 " +#~ "privilege." +#~ msgstr "" +#~ "Sie dürfen ohne das „@1“-Privileg diesen LuaATC-Bauteil nicht " +#~ "konfigurieren." + +#~ msgid "" +#~ "You are not allowed to couple trains without the train_operator privilege." +#~ msgstr "Sie dürfen ohne das „train_operator“-Privileg keine Züge ankuppeln." + +#, fuzzy +#~ msgid "You are not allowed to modify this protected track." +#~ msgstr "Sie dürfen an geschützten Stellen kein Gleis bauen." + +#~ msgid "" +#~ "You are not allowed to name LuaATC passive components without the @1 " +#~ "privilege." +#~ msgstr "Sie dürfen ohne das „@1“ keinen passiven LuaATC-Bauteil benennen." + +#~ msgid "" +#~ "You are not allowed to operate turnouts and signals without the " +#~ "railway_operator privilege." +#~ msgstr "" +#~ "Sie dürfen ohne das „railway_operator“-Privileg keine Bahnanlage " +#~ "operieren." + +#~ msgid "You can't get on this wagon." +#~ msgstr "Sie können nicht in diesen Waggon einsteigen." + +#~ msgid "You do not have the @1 privilege." +#~ msgstr "Ihnen fehlt das „@1“-Privileg." + +#, fuzzy +#~ msgid "You don't have the train_operator privilege." +#~ msgstr "Ihnen fehlt das „@1“-Privileg." + +#~ msgid "" +#~ "You need to own at least one neighboring wagon to destroy this couple." +#~ msgstr "" +#~ "Sie müssen Besitzer eines angrenzenden Waggons sein, um hier abzukuppeln." diff --git a/advtrains_interlocking/po/fr.po b/advtrains_interlocking/po/fr.po new file mode 100644 index 0000000..1ebf2bb --- /dev/null +++ b/advtrains_interlocking/po/fr.po @@ -0,0 +1,1629 @@ +msgid "" +msgstr "" +"Project-Id-Version: advtrains\n" +"Report-Msgid-Bugs-To: advtrains-discuss@lists.sr.ht\n" +"POT-Creation-Date: 2025-06-11 23:21+0200\n" +"PO-Revision-Date: 2025-03-25 15:06+0100\n" +"Last-Translator: Tanavit <tanavit@posto.ovh>\n" +"Language-Team: French\n" +"Language: fr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 2.4.2\n" + +#: autonaming.lua +msgid "Prefix set, next signal name will be: @1" +msgstr "" + +#: autonaming.lua +msgid "Prefix unset, signals are not auto-named for you!" +msgstr "" + +#: autonaming.lua +msgid "" +"Sets the current prefix for automatically naming interlocking components. " +"Example: '/at_nameprefix TEST' - signals will be named TEST1, TEST2 and so on" +msgstr "" + +#: database.lua +msgid "Created track section @1 from @2 TCBs" +msgstr "" + +#: database.lua +msgid "Track section inconsistent here, repairing..." +msgstr "" + +#: database.lua +msgid "Track section partition found, repairing..." +msgstr "" + +#: init.lua +msgid "Can set up track sections, routes and signals" +msgstr "" + +#: route_prog.lua +msgid "@1 Terminal @2" +msgstr "" + +#: route_prog.lua +msgid "@1 is held in @2 position when this route is set and freed " +msgstr "" + +#: route_prog.lua +msgid "@1 is no longer affected when this route is set." +msgstr "" + +#: route_prog.lua +msgid "Added track section @1 to the route." +msgstr "" + +#: route_prog.lua +msgid "Advance to next route section" +msgstr "" + +#: route_prog.lua +msgid "Advance/Complete Route" +msgstr "" + +#: route_prog.lua +msgid "Advancing over next section is" +msgstr "" + +#: route_prog.lua +msgid "Cancel if you are unsure!" +msgstr "" + +#: route_prog.lua +msgid "Cancel route programming" +msgstr "" + +#: route_prog.lua +msgid "Cannot program route without a target" +msgstr "" + +#: route_prog.lua tcb_ts_ui.lua +msgid "End of interlocking" +msgstr "" + +#: route_prog.lua +msgid "Enter Route Name" +msgstr "" + +#: route_prog.lua +msgid "Finish programming route" +msgstr "" + +#: route_prog.lua +msgid "Finish route HERE" +msgstr "" + +#: route_prog.lua +msgid "Finish route at end of NEXT section" +msgstr "" + +#: route_prog.lua +msgid "Fixed in state @1 by route @2 (punch to unfix)" +msgstr "" + +#: route_prog.lua +msgid "Fixed in state @1 by route @2 until segment #@3 is freed." +msgstr "" + +#: route_prog.lua route_ui.lua signal_aspect_ui.lua tcb_ts_ui.lua tool.lua +msgid "Insufficient privileges to use this!" +msgstr "Privilèges insuffisants pour utiliser ceci !" + +#: route_prog.lua +msgid "Next section is diverging (>2 TCBs)" +msgstr "" + +#: route_prog.lua +#, fuzzy +msgid "Route discarded." +msgstr "Changement d'état de l'itinéraire." + +#: route_prog.lua +msgid "Route ends at signal:" +msgstr "" + +#: route_prog.lua +msgid "Route leads into" +msgstr "" + +#: route_prog.lua +msgid "" +"Route programming mode active. Punch TCBs to add route segments, punch " +"turnouts to lock them." +msgstr "" + +#: route_prog.lua +msgid "Route section @1 removed." +msgstr "" + +#: route_prog.lua +msgid "Routes should in most cases end at signals." +msgstr "" + +#: route_prog.lua +msgid "Save Route" +msgstr "" + +#: route_prog.lua +msgid "Step back one section" +msgstr "" + +# Routage est il le bon terme ? +#: route_prog.lua +#, fuzzy +msgid "Successfully programmed route." +msgstr "Succès d'invalidation des routages des trains" + +#: route_prog.lua +msgid "The origin TCB has become unknown during programming. Try again." +msgstr "" + +#: route_prog.lua +msgid "This TCB is not suitable as" +msgstr "" + +#: route_prog.lua +msgid "This TCB is unconfigured, you first need to assign it to a rail" +msgstr "" + +#: route_prog.lua +msgid "WARNING: Route does not end at a signal." +msgstr "" + +#: route_prog.lua +msgid "[Route programming] " +msgstr "" + +#: route_prog.lua +msgid "impossible at this place." +msgstr "" + +#: route_prog.lua +msgid "non-interlocked area" +msgstr "" + +#: route_prog.lua +msgid "route continuation." +msgstr "" + +#: route_ui.lua +msgid "<< Select a route part to edit options" +msgstr "" + +#: route_ui.lua +#, fuzzy +msgid "<Default Aspect>" +msgstr "Siège par défaut" + +#: route_ui.lua +msgid "ARS Rule List" +msgstr "" + +#: route_ui.lua +#, fuzzy +msgid "Announce distant signal" +msgstr "Signal distant métro de Munich (" + +#: route_ui.lua +msgid "Back to signal" +msgstr "" + +#: route_ui.lua +msgid "Call-on (section may be occupied)" +msgstr "" + +#: route_ui.lua +msgid "Clone Route" +msgstr "" + +#: route_ui.lua +msgid "Delete Route" +msgstr "" + +#: route_ui.lua +msgid "Error:" +msgstr "" + +#: route_ui.lua +msgid "New From Route" +msgstr "" + +#: route_ui.lua +msgid "No Signal at this TCB" +msgstr "" + +#: route_ui.lua +msgid "Route name" +msgstr "" + +#: route_ui.lua +msgid "Route overview" +msgstr "" + +#: route_ui.lua +msgid "Save ARS List" +msgstr "" + +#: route_ui.lua +msgid "Section Options:" +msgstr "" + +#: route_ui.lua tcb_ts_ui.lua +msgid "Set" +msgstr "" + +#: route_ui.lua signal_aspect_ui.lua +#, fuzzy +msgid "Signal Aspect:" +msgstr "Signal" + +#: route_ui.lua tcb_ts_ui.lua +msgid "TCB at @1 has different section than previous TCB" +msgstr "" + +#: route_ui.lua tcb_ts_ui.lua +msgid "TCB at @1 is missing" +msgstr "" + +#: route_ui.lua tcb_ts_ui.lua +msgid "TCB at @1 is not assigned to previous track section" +msgstr "" + +#: route_ui.lua tcb_ts_ui.lua +msgid "Track section after @1 missing" +msgstr "" + +#: route_ui.lua tcb_ts_ui.lua +msgid "Turnout/component missing at @1" +msgstr "" + +#: routesetting.lua +msgid "Lock conflict at @1, Held locked by:" +msgstr "" + +#: routesetting.lua +msgid "No TCB found at @1. Please update or reconfigure route!" +msgstr "" + +#: routesetting.lua +msgid "No track section adjacent to @1. Please reconfigure route!" +msgstr "" + +#: routesetting.lua +msgid "Route @1 from signal @2" +msgstr "" + +#: routesetting.lua +msgid "Route @1 from signal @2, segment #@3" +msgstr "" + +#: routesetting.lua +msgid "Section '@1' already has route set from @2:" +msgstr "" + +#: routesetting.lua +msgid "Section '@1' is occupied!" +msgstr "" + +#: routesetting.lua +msgid "Section '@1' not found!" +msgstr "" + +#: routesetting.lua +msgid "" +"TCB at @1 has different section than previous TCB. Please update track " +"section or reconfigure route!" +msgstr "" + +#: routesetting.lua +msgid "" +"Turnout/component missing at @1. Please update track section or reconfigure " +"route!" +msgstr "" + +#: signal_aspect_ui.lua +msgid "<assign distant>" +msgstr "" + +#: signal_aspect_ui.lua +msgid "<none>" +msgstr "" + +#: signal_aspect_ui.lua +msgid "Assigned distant signal to the main signal at @1" +msgstr "" + +#: signal_aspect_ui.lua +msgid "Assigned signal to the TCB at @1" +msgstr "" + +#: signal_aspect_ui.lua tool.lua +msgid "Clear" +msgstr "" + +#: signal_aspect_ui.lua +msgid "" +"Configuring Signal: Influence point of another signal is already present!" +msgstr "" + +#: signal_aspect_ui.lua +msgid "Configuring Signal: Node is too far away. Aborted." +msgstr "" + +#: signal_aspect_ui.lua +msgid "" +"Configuring Signal: Please look in train's driving direction and punch rail " +"to set influence point." +msgstr "" + +#: signal_aspect_ui.lua +msgid "Configuring Signal: Successfully set influence point" +msgstr "" + +#: signal_aspect_ui.lua +msgid "Configuring Signal: This is not a normal two-connection rail! Aborted." +msgstr "" + +#: signal_aspect_ui.lua +msgid "Dst: @1" +msgstr "" + +#: signal_aspect_ui.lua +msgid "Influence point is not set." +msgstr "" + +#: signal_aspect_ui.lua +msgid "Influence point is set at @1." +msgstr "" + +#: signal_aspect_ui.lua +msgid "Modify" +msgstr "" + +#: signal_aspect_ui.lua +msgid "Set distant signal: Punch the main signal to assign!" +msgstr "" + +#: signal_aspect_ui.lua +msgid "Set influence point" +msgstr "" + +#: smartroute.lua +msgid "Apply" +msgstr "" + +#: smartroute.lua +msgid "Route search: @1 found" +msgstr "" + +#: smartroute.lua +msgid "Search further" +msgstr "" + +#: smartroute.lua +msgid "Smartroute: No track section directly ahead!" +msgstr "" + +#: smartroute.lua +msgid "Smartroute: TCBS or routes don't exist here!" +msgstr "" + +#: tcb_ts_ui.lua +msgid " (invalid)" +msgstr "" + +#: tcb_ts_ui.lua +msgid "@1 locks in state @2" +msgstr "" + +#: tcb_ts_ui.lua +msgid "A route is requested from this signal:" +msgstr "" + +#: tcb_ts_ui.lua +msgid "Add locks" +msgstr "" + +#: tcb_ts_ui.lua +msgid "Assign a signal" +msgstr "" + +#: tcb_ts_ui.lua +msgid "Automatic Working is active." +msgstr "" + +#: tcb_ts_ui.lua +#, fuzzy +msgid "Automatic routesetting" +msgstr "Routage à distance" + +#: tcb_ts_ui.lua +msgid "Boundary TCBs:" +msgstr "" + +#: tcb_ts_ui.lua +msgid "Can't remove TCB: Both sides must have no signal assigned!" +msgstr "" + +#: tcb_ts_ui.lua +msgid "Can't remove track, a train is here!" +msgstr "" + +#: tcb_ts_ui.lua +msgid "Cancel" +msgstr "" + +#: tcb_ts_ui.lua +msgid "Cancel Route" +msgstr "" + +#: tcb_ts_ui.lua +msgid "" +"Cannot delete route which has ARS rules, please review and then delete " +"through edit dialog!" +msgstr "" + +#: tcb_ts_ui.lua +#, fuzzy +msgid "Clear locks" +msgstr "Autorisation (procédez)" + +#: tcb_ts_ui.lua +msgid "" +"Configuring TCB: Already existed at this position, it is now linked to this " +"TCB marker" +msgstr "" + +#: tcb_ts_ui.lua +msgid "Configuring TCB: Cannot use static signals for routesetting. Aborted." +msgstr "" + +#: tcb_ts_ui.lua +msgid "Configuring TCB: Internal error, TCBS doesn't exist. Aborted." +msgstr "" + +#: tcb_ts_ui.lua +msgid "Configuring TCB: Node is too far away. Aborted." +msgstr "" + +#: tcb_ts_ui.lua +msgid "Configuring TCB: Not a compatible signal. Aborted." +msgstr "" + +#: tcb_ts_ui.lua +msgid "Configuring TCB: Please punch the rail you want to assign this TCB to." +msgstr "" + +#: tcb_ts_ui.lua +msgid "Configuring TCB: Please punch the signal to assign." +msgstr "" + +#: tcb_ts_ui.lua +msgid "Configuring TCB: Successfully assigned signal." +msgstr "" + +#: tcb_ts_ui.lua +msgid "Configuring TCB: Successfully configured TCB" +msgstr "" + +#: tcb_ts_ui.lua +msgid "Configuring TCB: This is not a normal two-connection rail! Aborted." +msgstr "" + +#: tcb_ts_ui.lua +msgid "Create Interlocked Track Section" +msgstr "" + +#: tcb_ts_ui.lua +msgid "Delete this route" +msgstr "" + +#: tcb_ts_ui.lua +msgid "Disable Automatic Working" +msgstr "" + +#: tcb_ts_ui.lua +msgid "Distant signal triggers ARS" +msgstr "" + +#: tcb_ts_ui.lua +msgid "Edit" +msgstr "" + +#: tcb_ts_ui.lua +msgid "Enable Automatic Working" +msgstr "" + +#: tcb_ts_ui.lua +msgid "Error: TS modified, abort!" +msgstr "" + +#: tcb_ts_ui.lua +msgid "Final TCBS unset (legacy-style buffer route)" +msgstr "" + +#: tcb_ts_ui.lua +msgid "Fixed route locks (e.g. level crossings):" +msgstr "" + +#: tcb_ts_ui.lua +msgid "Link @1" +msgstr "" + +#: tcb_ts_ui.lua +msgid "Link: @1" +msgstr "" + +#: tcb_ts_ui.lua +msgid "Multiple routes are requested (first available is set):" +msgstr "" + +#: tcb_ts_ui.lua +msgid "NOTE: ARS is disabled." +msgstr "" + +#: tcb_ts_ui.lua +msgid "New (Manual)" +msgstr "" + +#: tcb_ts_ui.lua +msgid "No Link" +msgstr "" + +#: tcb_ts_ui.lua +msgid "No routes are yet defined." +msgstr "" + +#: tcb_ts_ui.lua +msgid "No trains on this section." +msgstr "" + +#: tcb_ts_ui.lua +msgid "Punch components to add fixed locks. (punch anything else = end)" +msgstr "" + +#: tcb_ts_ui.lua +#, fuzzy +msgid "Remove Section" +msgstr "Routage à distance" + +#: tcb_ts_ui.lua +msgid "Reset section state" +msgstr "" + +#: tcb_ts_ui.lua +#, fuzzy +msgid "Reset track section" +msgstr "Inversion du sens de marche" + +#: tcb_ts_ui.lua +msgid "Reset track section @1!" +msgstr "" + +#: tcb_ts_ui.lua +msgid "Route has been set." +msgstr "" + +#: tcb_ts_ui.lua +msgid "Route is re-set when a train passed." +msgstr "" + +#: tcb_ts_ui.lua +msgid "Route is set over this signal by:" +msgstr "" + +#: tcb_ts_ui.lua +msgid "Route is set: " +msgstr "" + +#: tcb_ts_ui.lua +msgid "Routes are not automatically set." +msgstr "" + +#: tcb_ts_ui.lua +msgid "Routes:" +msgstr "" + +#: tcb_ts_ui.lua +msgid "Section holds @1 route locks." +msgstr "" + +#: tcb_ts_ui.lua +#, fuzzy +msgid "Section name" +msgstr "Nom de Station" + +#: tcb_ts_ui.lua +msgid "Set ARS default route" +msgstr "" + +#: tcb_ts_ui.lua +msgid "Set Route" +msgstr "" + +#: tcb_ts_ui.lua +msgid "Setting fixed locks finished!" +msgstr "" + +#: tcb_ts_ui.lua +msgid "Show" +msgstr "" + +#: tcb_ts_ui.lua +msgid "Show track section" +msgstr "" + +#: tcb_ts_ui.lua +msgid "Side @1" +msgstr "" + +#: tcb_ts_ui.lua +#, fuzzy +msgid "Signal at @1" +msgstr "Signal" + +#: tcb_ts_ui.lua +#, fuzzy +msgid "Signal name" +msgstr "Signal" + +#: tcb_ts_ui.lua +msgid "Signal on B side already assigned!" +msgstr "" + +#: tcb_ts_ui.lua +#, fuzzy +msgid "Signalling" +msgstr "Signal" + +#: tcb_ts_ui.lua +msgid "Smart Route" +msgstr "" + +#: tcb_ts_ui.lua +msgid "TCB Link: Select linked TCB now!" +msgstr "" + +#: tcb_ts_ui.lua +msgid "TCB already existed at this position, now linked to this node" +msgstr "" + +#: tcb_ts_ui.lua +msgid "TCB assigned to @1" +msgstr "" + +#: tcb_ts_ui.lua +msgid "This TCB has been removed. Please dig marker." +msgstr "" + +#: tcb_ts_ui.lua +msgid "" +"This is a pure distant signal\n" +"No route is currently set through." +msgstr "" + +#: tcb_ts_ui.lua +msgid "" +"This is an always-halt signal (e.g. a buffer)\n" +"No routes can be set from here." +msgstr "" + +#: tcb_ts_ui.lua +msgid "" +"This will clear the list of trains\n" +"and the routesetting status of this section.\n" +"Are you sure?" +msgstr "" + +#: tcb_ts_ui.lua +msgid "" +"This will remove the track section and set all its end points to End Of " +"Interlocking" +msgstr "" + +#: tcb_ts_ui.lua +#, fuzzy +msgid "Track Circuit Break" +msgstr "Il y a un \"Track Circuit Break\" ici." + +#: tcb_ts_ui.lua +#, fuzzy +msgid "Track Circuit Break Configuration" +msgstr "Il y a un \"Track Circuit Break\" ici." + +#: tcb_ts_ui.lua +msgid "Track Section Detail - @1" +msgstr "" + +#: tcb_ts_ui.lua +msgid "Trains on this section:" +msgstr "" + +#: tcb_ts_ui.lua +msgid "Unconfigured Track Circuit Break, right-click to assign." +msgstr "" + +#: tcb_ts_ui.lua +msgid "Wait for this route to be cancelled in order to do anything here." +msgstr "" + +#: tcb_ts_ui.lua +msgid "Waiting for route to be set..." +msgstr "" + +#: tcb_ts_ui.lua +msgid "Yes" +msgstr "" + +#: tcb_ts_ui.lua +msgid "" +"You cannot modify track sections when a route is set or a train is on the " +"section." +msgstr "" + +#: tool.lua +msgid "Emplace manual lock" +msgstr "" + +#: tool.lua +msgid "" +"Interlocking tool\n" +"Punch: Highlight track section\n" +"Place: check route locks/show track section info" +msgstr "" + +#: tool.lua +msgid "No route locks set" +msgstr "" + +#: tool.lua +msgid "No track section at this location!" +msgstr "" + +#: tool.lua +msgid "Node is not a track!" +msgstr "" + +#: tool.lua +msgid "Route lock inspector" +msgstr "" + +#: tool.lua +msgid "Route locks currently put:" +msgstr "" + +#: tsr_rail.lua +msgid "Point Speed Restriction Track" +msgstr "Voie de point de limitation de vitesse" + +#: tsr_rail.lua +msgid "Point speed restriction: @1" +msgstr "Point de limitation de vitesse : @1" + +#: tsr_rail.lua +msgid "Set point speed restriction:" +msgstr "Placez un point de limitation de vitesse :" + +#: tsr_rail.lua +msgid "You are not allowed to configure this track without the @1 privilege." +msgstr "Vous n'êtes pas autorisé à configurer cette voie sans le privilège @1." + +#: tsr_rail.lua +msgid "You are not allowed to configure this track." +msgstr "Vous n'êtes pas autorisé à configurer cette voie." + +#~ msgid " does not exist or is invalid" +#~ msgstr " n'existe pas ou est invalide" + +#~ msgid " is at " +#~ msgstr " est à la position " + +#~ msgid " units" +#~ msgstr " Unités" + +#~ msgid " wagon:destroy(): data is not set!" +#~ msgstr " Appel de wagon:destroy() : données non définies !" + +#~ msgid "!!! Train off track !!!" +#~ msgstr "!!! Train hors voie !!!" + +#~ msgid "(Doors closed)" +#~ msgstr "(Portes closes)" + +#~ msgid "(log" +#~ msgstr "(log" + +#~ msgid ", using placeholder" +#~ msgstr ", dans un espace réservé" + +#~ msgid "3-way turnout" +#~ msgstr "Embranchement triple" + +#~ msgid "90+Angle Diamond Crossing Track" +#~ msgstr "Croisement perpendiculo-diagonal" + +#~ msgid "<No coupler>" +#~ msgstr "<Pas de coupleur>" + +#~ msgid "@1 Platform (45 degree)" +#~ msgstr "Quai @1 (haut, 45°)" + +#~ msgid "@1 Platform (high)" +#~ msgstr "Quai @1 (haut)" + +#~ msgid "@1 Platform (low)" +#~ msgstr "Quai @1 (bas)" + +#~ msgid "@1 Platform (low, 45 degree)" +#~ msgstr "Quai @1 (bas, 45°)" + +#~ msgid "@1 Slope" +#~ msgstr "Pente @1" + +#~ msgid "ATC Kick command warning: doors are closed." +#~ msgstr "Avertissement commande ATC Éjecter : portes closes." + +#~ msgid "ATC Kick command warning: train moving." +#~ msgstr "Avertissement commande ATC Éjecter : train en mouvement." + +#~ msgid "ATC Reverse command warning: didn't reverse train, train moving." +#~ msgstr "" +#~ "Attention : Commande ATC de renversement impossible car le train se " +#~ "déplace." + +#~ msgid "ATC command parse error: Unknown command: @1" +#~ msgstr "Erreur d'analyse de commande ATC : Commande inconnue : @1" + +#~ msgid "ATC command syntax error: I statement not closed: @1" +#~ msgstr "" +#~ "Erreur de syntaxe de commande ATC : instruction \"I\" incomplète : @1" + +#~ msgid "ATC controller" +#~ msgstr "Controlleur ATC" + +#~ msgid "" +#~ "ATC controller, mode @1\n" +#~ "Channel: @2" +#~ msgstr "" +#~ "Controlleur ATC, mode @1\n" +#~ "Canal : @2" + +#~ msgid "" +#~ "ATC controller, mode @1\n" +#~ "Command: @2" +#~ msgstr "" +#~ "Controlleur ATC, mode @1\n" +#~ "Commande : @2" + +#~ msgid "Access to @1" +#~ msgstr "Accès à @1" + +#~ msgid "Advtrains Status: no_action" +#~ msgstr "État d'advtrains : aucune action" + +#~ msgid "Advtrains is already running normally!" +#~ msgstr "Advtrains fonctionne déjà correctement !" + +#~ msgid "Allow these players to access your wagon:" +#~ msgstr "Autoriser ces joueurs à embarquer :" + +#~ msgid "Andrew's Cross" +#~ msgstr "Croix de Saint André" + +#~ msgid "Back of train would end up off track, cancelling." +#~ msgstr "La fin du train serait hors voie : annulation." + +#~ msgid "Big Industrial Train Engine" +#~ msgstr "Grosse locomotive industrielle" + +#~ msgid "Boiler" +#~ msgstr "Chaudière à vapeur" + +#~ msgid "Box Wagon" +#~ msgstr "Wagon de frêt" + +#~ msgid "Buffer and Chain Coupler" +#~ msgstr "Attelage à tampon et vis" + +#~ msgid "Bumper" +#~ msgstr "Heurtoir" + +#~ msgid "Can not couple: The couplers of the trains do not match (@1 and @2)." +#~ msgstr "" +#~ "Accouplement impossible: les attelages des trains ne concordent pas (@1 " +#~ "et @2)." + +#~ msgid "Can operate turnouts and signals in unprotected areas" +#~ msgstr "" +#~ "Possibilité d'opérer des embranchements et signaux dans les zones non " +#~ "protégées" + +#~ msgid "" +#~ "Can place and configure LuaATC components, including execute potentially " +#~ "harmful Lua code" +#~ msgstr "" +#~ "Permet le placement et la configuration de composants LuaATC avec risque " +#~ "d'exécution de code Lua dangereux" + +#~ msgid "Can place and dig tracks in unprotected areas" +#~ msgstr "" +#~ "Possibilité de poser ou retirer des voies dans les zones non protégées" + +#~ msgid "" +#~ "Can place, remove and operate any train, regardless of owner, whitelist, " +#~ "or protection" +#~ msgstr "" +#~ "Possibilité de poser, retirer ou opérer un quelconque train, " +#~ "indépendamment du propriétaire, de la liste blanche ou de protection" + +#~ msgid "Can place, remove and operate trains" +#~ msgstr "Possibilité de poser, retirer ou opérer les trains" + +#~ msgid "Can't get on: wagon full or doors closed!" +#~ msgstr "" +#~ "Embarquement impossible : le wagon est plein ou ses portes sont closes !" + +#~ msgid "Can't place: Not enough slope items left (@1 required)" +#~ msgstr "" +#~ "Placement impossible : quantité insuffisante de voie pentue (@1 manquant)" + +#~ msgid "Can't place: There's no slope of length @1" +#~ msgstr "Placement impossible : il n'y a pas de voie pentue de longueur @1" + +#~ msgid "Can't place: no supporting node at upper end." +#~ msgstr "" +#~ "Placement impossible : pas de nœud d'appui à l'extrémité supérieure." + +#~ msgid "Can't place: not pointing at node" +#~ msgstr "Placement impossible : ne pointe pas un nœud" + +#~ msgid "Can't place: protected position!" +#~ msgstr "Placement impossible : emplacement protégé" + +#~ msgid "Can't place: space occupied!" +#~ msgstr "Placement impossible : espace occupé !" + +#~ msgid "Caution" +#~ msgstr "Attention" + +#~ msgid "Chimney" +#~ msgstr "Cheminée" + +#~ msgid "Clear 'Disable ARS' flag" +#~ msgstr "Effacer le drapeau \"Désactiver l'ARS\"" + +#~ msgid "Clear Local Environment" +#~ msgstr "Effacer l'environnement LuaATC" + +#~ msgid "Closed" +#~ msgstr "Fermé" + +#~ msgid "Code" +#~ msgstr "Code" + +#~ msgid "Command" +#~ msgstr "Commande" + +#~ msgid "Command (on)" +#~ msgstr "Commande (marche)" + +#~ msgid "" +#~ "Crash during advtrains main step - skipping the shutdown save operation " +#~ "to not save inconsistent data!" +#~ msgstr "" +#~ "Crash durant le pas principal d'advtrains - saut de l'opération de " +#~ "sauvegarde de terminaison pour éviter l'enregistrement de données " +#~ "corrompues !" + +#~ msgid "Current FC: " +#~ msgstr "Code de fret courant: " + +#~ msgid "Danger (halt)" +#~ msgstr "Danger (stop)" + +#~ msgid "" +#~ "Data is being saved. While saving, advtrains will remove the players from " +#~ "trains. Save files will be reloaded afterwards!" +#~ msgstr "" +#~ "Données en cours de sauvegarde. Durant cette phase, advtrains débarquera " +#~ "les joueurs des trains. Les fichiers de sauvegarde seront ultérieurement " +#~ "rechargés !" + +#~ msgid "Default Seat (driver stand)" +#~ msgstr "Siège par défaut (poste de pilotage)" + +# Routage est il le bon terme ? +#~ msgid "Delete all train routes, force them to recalculate" +#~ msgstr "Suppression et recalcul de tous les routages" + +#~ msgid "Dep. Speed" +#~ msgstr "Vit. de départ" + +#~ msgid "Deprecated Track" +#~ msgstr "Voie déconseillée" + +#~ msgid "" +#~ "Destroying wagon with inventory, but inventory is not found? Shouldn't " +#~ "happen!" +#~ msgstr "Desctruction d'un wagon avec inventaire introuvable ? Anomalie !" + +#~ msgid "" +#~ "Detach all players, especially the offline ones, from all trains. Use " +#~ "only when no one serious is on a train." +#~ msgstr "" +#~ "Débarque tous les joueurs, en particulier ceux déconnectés, de tous les " +#~ "trains. À n'utiliser que quand aucun joueur sérieux n'a embarqué." + +#~ msgid "Detailed Steam Engine" +#~ msgstr "Locomotive à vapeur complexe" + +#~ msgid "Detector Rail" +#~ msgstr "Voie détectrice" + +#~ msgid "Diagonal Diamond Crossing Track" +#~ msgstr "Croisement diagonal" + +#~ msgid "Digiline channel" +#~ msgstr "Canal Digiline" + +#~ msgid "Disable the advtrains globalstep temporarily" +#~ msgstr "Désactive temporairement le pas global d'advtrains" + +#~ msgid "Disabled advtrains successfully" +#~ msgstr "Succès de la désactivation d'advtrains" + +#~ msgid "Door Delay" +#~ msgstr "Durée d'ouverture des portes" + +#~ msgid "Door Side" +#~ msgstr "Ouv. des portes coté" + +#~ msgid "Doors are closed! (Try holding sneak key!)" +#~ msgstr "Portes closes : (Essayez la \"sneak key\"!\")" + +#~ msgid "" +#~ "Doors are closed. Use Sneak+rightclick to ignore the closed doors and get " +#~ "off." +#~ msgstr "" +#~ "Portes closes ! Utilisez \"Marcher lentement (Sneak)\" et Clic-Droit pour " +#~ "franchir les portes et débarquer." + +#~ msgid "Driver Stand" +#~ msgstr "Poste de pilotage" + +#~ msgid "Driver Stand (left)" +#~ msgstr "Poste de pilotage (gauche)" + +#~ msgid "Driver Stand (right)" +#~ msgstr "Poste de pilotage (droit)" + +#~ msgid "Driver stand" +#~ msgstr "Poste de pilotage" + +#~ msgid "Driver's cab" +#~ msgstr "Cabine de pilotage" + +#~ msgid "Freight Code:" +#~ msgstr "Code de frêt :" + +#~ msgid "Get off" +#~ msgstr "Débarquer" + +#~ msgid "Get off (forced)" +#~ msgstr "Débarquer (de force)" + +#~ msgid "Industrial Train Engine" +#~ msgstr "Locomotive industrielle" + +#~ msgid "Industrial tank wagon" +#~ msgstr "Wagon-citerne industriel" + +#~ msgid "Industrial wood wagon" +#~ msgstr "Wagon grumier industriel" + +#~ msgid "Instructed to save() but load() was never called!" +#~ msgstr "Appel de save() requis sans appel préalable de load() !" + +#~ msgid "Japanese Train Engine" +#~ msgstr "Motrice Japonaise" + +#~ msgid "Japanese Train Inter-Wagon Connection" +#~ msgstr "Passage inter-voiture de train Japonais" + +#~ msgid "Japanese Train Wagon" +#~ msgstr "Voiture Japonaise" + +#~ msgid "Japanese signal pole" +#~ msgstr "Voiture Japonaise" + +#~ msgid "Kick out passengers" +#~ msgstr "Éjecter les passagers" + +#~ msgid "Lampless Signal" +#~ msgstr "Sémaphore" + +#~ msgid "Left" +#~ msgstr "Gauche" + +#~ msgid "Left,Right,Closed;" +#~ msgstr "Gauche,Droit,Fermé;" + +#~ msgid "Line" +#~ msgstr "Ligne" + +#~ msgid "Liquid: " +#~ msgstr "Liquide : " + +#~ msgid "Liquid: empty" +#~ msgstr "Liquide : vide" + +#~ msgid "Loading Track" +#~ msgstr "Voie de Chargement" + +#~ msgid "Lock couples" +#~ msgstr "Verrouiller l'accouplement" + +#~ msgid "LuaATC Environment" +#~ msgstr "Environnement LuaATC" + +#~ msgid "LuaATC Mesecon Controller" +#~ msgstr "Commande Mesecon de LuaATC" + +#~ msgid "LuaATC Operation Panel" +#~ msgstr "Panneau de commande de LuaATC" + +#~ msgid "LuaATC component assigned to an invalid environment" +#~ msgstr "Composant LuaATC assigné à un environnement invalide" + +#~ msgid "LuaATC component assigned to environment '@1'" +#~ msgstr "Composant LuaATC assigné à l'environnement '@1'" + +#~ msgid "LuaATC component with error: @1" +#~ msgstr "Erreur @1 du composant LuaATC" + +#~ msgid "Missing train_operator privilege" +#~ msgstr "Privilège \"train_operator\" manquant" + +#~ msgid "Munich U-Bahn Main Signal (" +#~ msgstr "Signal principal métro de Munich (" + +#~ msgid "Next FC:" +#~ msgstr "Code de fret suivant :" + +#~ msgid "Next Stop:\n" +#~ msgstr "Prochain arrêt :\n" + +#~ msgid "No callback to handle schedule" +#~ msgstr "Absence de fonction de gestion de planning" + +#~ msgid "No such lua entity." +#~ msgstr "Pas de telle entité lua." + +#~ msgid "No such train: @1." +#~ msgstr "Pas de tel train : @1." + +#~ msgid "No such wagon: @1." +#~ msgstr "Pas de tel wagon : @1." + +#~ msgid "Not a valid wagon id." +#~ msgstr "Identificateur de wagon invalide." + +#~ msgid "Not allowed to do this." +#~ msgstr "Vous n'êtes pas autorisé effectuer ceci." + +#~ msgid "" +#~ "OVERRUN RED SIGNAL! Examine situation and reverse train to move again." +#~ msgstr "" +#~ "Franchissement de signal rouge : examinez la situation et inversez le " +#~ "sens de marche du train." + +#~ msgid "Onboard Computer" +#~ msgstr "Ordinateur embarqué" + +#~ msgid "Passenger Wagon" +#~ msgstr "Voiture passager" + +#~ msgid "Passenger area" +#~ msgstr "Voiture Passager" + +#~ msgid "" +#~ "Passive Component Naming Tool\n" +#~ "\n" +#~ "Right-click to name a passive component." +#~ msgstr "" +#~ "Outil de nommage de composant passif\n" +#~ "\n" +#~ "Clic-Droit pour nommer un composant passif." + +#~ msgid "Perpendicular Diamond Crossing Track" +#~ msgstr "Croisement perpendiculaire" + +#~ msgid "Please specify a player name to transfer ownership to." +#~ msgstr "" +#~ "Spécifiez le nom du joueur à qui la propriété doit être transférée, SVP." + +#~ msgid "Position is occupied by a train." +#~ msgstr "Cet emplacement est occupé par un train." + +#~ msgid "Prev FC" +#~ msgstr "Code de fret précédent" + +#~ msgid "Print advtrains status info" +#~ msgstr "Affiche les informations d'état d'advtrains" + +#~ msgid "Re-enabling advtrains globalstep..." +#~ msgstr "Réacivation du pas global d'advtrains..." + +#~ msgid "Reduced speed" +#~ msgstr "Vitesse réduite" + +#~ msgid "Reload successful!" +#~ msgstr "Succès du rechargement !" + +#~ msgid "Removing unused wagon" +#~ msgstr "Suppression d'un wagon inutilisé" + +#~ msgid "Restoring saved state in 1 second..." +#~ msgstr "Restauration du l'état sauvegardé dans une seconde..." + +#~ msgid "Restricted speed" +#~ msgstr "Vitesse limitée" + +#~ msgid "Returns the position of the train with the given id" +#~ msgstr "Affiche la position du train identifié" + +#~ msgid "Right" +#~ msgstr "Droit" + +#~ msgid "Routingcode" +#~ msgstr "Code de routage" + +#~ msgid "Save" +#~ msgstr "Sauvegarder" + +#~ msgid "Save wagon properties" +#~ msgstr "Sauvegarder les propriétés du wagon" + +#~ msgid "Saving failed: " +#~ msgstr "Échec de sauvegarde : " + +#~ msgid "Scharfenberg Coupler" +#~ msgstr "Attelage Scharfenberg" + +#~ msgid "Select seat:" +#~ msgstr "Choisir le siège :" + +#~ msgid "Set name of component (empty to clear)" +#~ msgstr "Nommer le composant (chaîne vide pour effacer)" + +#~ msgid "Show Inventory" +#~ msgstr "Montrer le stock" + +#~ msgid "Speed:" +#~ msgstr "Vitesse : " + +#~ msgid "Station Code" +#~ msgstr "Code de Station" + +#~ msgid "Station code \"@1\" already exists and is owned by @2." +#~ msgstr "Le code de station \"@1\" existe et est possédé par @2." + +#~ msgid "Station/Stop Track" +#~ msgstr "Voie d'arrêt en station" + +#~ msgid "Steam Engine" +#~ msgstr "Locomotive à vapeur" + +#~ msgid "Stop Time" +#~ msgstr "Durée d'arrêt" + +#~ msgid "Subway Passenger Wagon" +#~ msgstr "Voiture de Métropolitain" + +#~ msgid "Target:" +#~ msgstr "Destination : " + +#~ msgid "Teleporting to train " +#~ msgstr "Téléportation au train " + +#~ msgid "Teleports you to the position of the train with the given id" +#~ msgstr "Vous téléporte à la position du train identifié" + +#~ msgid "Text displayed inside train" +#~ msgstr "Texte affiché à l'intérieur du train" + +#~ msgid "Text displayed outside on train" +#~ msgstr "Texte affiché à l'extérieur du train" + +#~ msgid "That player does not exist!" +#~ msgstr "Ce joueur n'existe pas !" + +#~ msgid "That wagon does not exist!" +#~ msgstr "Ce wagon n'a pas de siège !" + +#~ msgid "" +#~ "The advtrains globalstep has been disabled. Trains are not moving, and no " +#~ "data is saved! Run '/at_disable_step no' to enable again!" +#~ msgstr "" +#~ "Le pas global d'advtrains est désactivé. Les trains sont immobiles et " +#~ "aucune donnée n'est sauvegardée. Exécutez '/at_disable_step no ' pour le " +#~ "réactiver !" + +#~ msgid "The clipboard couldn't access the metadata. Copy failed." +#~ msgstr "" +#~ "Le presse-papier ne peut accéder aux métadonnées. Échec de la copie." + +#~ msgid "The clipboard couldn't access the metadata. Paste failed." +#~ msgstr "Le presse-papier ne peut accéder aux métadonnées. Échec du collage." + +#~ msgid "The clipboard is empty." +#~ msgstr "Le presse-papier est vide." + +#~ msgid "The track you are trying to place the wagon on is not long enough!" +#~ msgstr "" +#~ "La voie sur laquelle vous tentez de placer le wagon est trop courte !" + +#~ msgid "The track you are trying to place the wagon on is not long enough." +#~ msgstr "" +#~ "La voie sur laquelle vous tentez de placer le wagon est trop courte." + +#~ msgid "The wagon's inventory is not empty." +#~ msgstr "Le stock de ce wagon n'est pas vide." + +#~ msgid "There's a Signal Influence Point here." +#~ msgstr "Il y a un \"Signal Influence Point\" ici." + +#~ msgid "This Wagon ID" +#~ msgstr "Identificateur du wagon" + +#~ msgid "This node can't be changed using the trackworker!" +#~ msgstr "Ce nœud ne peut être modifié avec l'outil \"Trackworker\" !" + +#~ msgid "This node can't be rotated using the trackworker!" +#~ msgstr "Ce nœud ne peut être tourné avec l'outil \"Trackworker\" !" + +#, fuzzy +#~ msgid "This node can't be rotated using the trackworker," +#~ msgstr "Ce nœud ne peut être tourné avec l'outil \"Trackworker\" !" + +#~ msgid "This position is protected!" +#~ msgstr "Cet emplacement est protégé !" + +#~ msgid "This station is owned by @1. You are not allowed to edit its name." +#~ msgstr "" +#~ "Cette station est la propriété de @1. Vous n'êtes pas autorisé à modifier " +#~ "son nom." + +#~ msgid "This track can not be changed." +#~ msgstr "Cette voie ne peut pas être modifiée." + +#~ msgid "This track can not be removed!" +#~ msgstr "Cette voie ne peut pas être enlevée !" + +#~ msgid "This track can not be rotated!" +#~ msgstr "Cette voie ne peut pas être tournée !" + +#~ msgid "This wagon has no seats." +#~ msgstr "Ce wagon n'a pas de siège." + +#~ msgid "This wagon is full." +#~ msgstr "Ce wagon est plein." + +#~ msgid "This wagon is owned by @1, you can't destroy it." +#~ msgstr "Ce wagon est la propriété de @1, vous ne pouvez pas le détruire." + +#~ msgid "Track" +#~ msgstr "Voie" + +#~ msgid "" +#~ "Track Worker Tool\n" +#~ "\n" +#~ "Left-click: change rail type (straight/curve/switch)\n" +#~ "Right-click: rotate object" +#~ msgstr "" +#~ "Outil \"Trackworker\"\n" +#~ "\n" +#~ "Clic-Gauche : change le type de rail (droit/courbé/aiguillage)\n" +#~ "\n" +#~ "Clic-Droit : tourne l'objet" + +#~ msgid "Train" +#~ msgstr "Identificateur du train" + +#~ msgid "Train " +#~ msgstr "Identificateur du train " + +#~ msgid "Train ID" +#~ msgstr "Identificateur du train" + +#~ msgid "Train copied." +#~ msgstr "Train copié." + +#~ msgid "" +#~ "Train copy/paste tool\n" +#~ "\n" +#~ "Left-click: copy train\n" +#~ "Right-click: paste train" +#~ msgstr "" +#~ "Outil de copie/collage de train\n" +#~ "\n" +#~ "Clic-Gauche : copie\n" +#~ "\n" +#~ "Clic-Droit : collage" + +#~ msgid "" +#~ "Train overview / coupling control is only shown when the train stands." +#~ msgstr "" +#~ "Aperçu du train / commande d'accouplement montré uniquement à l'arrêt du " +#~ "train." + +#~ msgid "Train overview /coupling control:" +#~ msgstr "Aperçu du train / commande d'accouplement :" + +#~ msgid "Trains stopping here (ARS rules)" +#~ msgstr "Trains marquant l'arrêt (règles ARS)" + +#~ msgid "Unable to load wagon type" +#~ msgstr "Impossible de charger le type du wagon" + +#~ msgid "Unconfigured ATC controller" +#~ msgstr "Controlleur ATC, non-configuré" + +#~ msgid "Unconfigured LuaATC component" +#~ msgstr "Composant LuaATC non configuré" + +#~ msgid "Uninitialized init=" +#~ msgstr "Variable init non initialisée" + +#~ msgid "Uninitialized, removing" +#~ msgstr "Non initialisé, retiré" + +#~ msgid "Unknown Station" +#~ msgstr "Gare inconnue" + +#~ msgid "Unloading Track" +#~ msgstr "Voie de Déchargement" + +#~ msgid "Use Sneak+rightclick to bypass closed doors!" +#~ msgstr "" +#~ "Utilisez \"Marcher lentement (Sneak)\" et Clic-Droit pour franchir les " +#~ "portes closes !" + +#~ msgid "Wagon @1 ownership changed from @2 to @3" +#~ msgstr "La propriété du wagon @1 a été transférée de @2 à @3" + +#~ msgid "Wagon Properties Tool" +#~ msgstr "Outil de propriété du wagon" + +#~ msgid "" +#~ "Wagon Properties Tool\n" +#~ "Punch a wagon to view and edit the Wagon Properties" +#~ msgstr "" +#~ "Outil de propriété du wagon\n" +#~ "Frappez un wagon pour voir et modifier ses propriétés" + +#~ msgid "" +#~ "Wagon needs to be decoupled from other wagons in order to destroy it." +#~ msgstr "" +#~ "Les wagons doivent être désaccouplés des autres pour pouvoir être " +#~ "détruits." + +#~ msgid "Wagon properties" +#~ msgstr "Propriétés du wagon" + +#~ msgid "Wagon road number:" +#~ msgstr "Immatriculation du wagon :" + +#~ msgid "Wait for signal to clear" +#~ msgstr "En attente de signal d'autorisation" + +#~ msgid "Wallmounted Signal (left)" +#~ msgstr "Signal mural (gauche)" + +#~ msgid "Wallmounted Signal (right)" +#~ msgstr "Signal mural (droit)" + +#~ msgid "Wallmounted Signal (top)" +#~ msgstr "Signal mural (plafond)" + +#~ msgid "" +#~ "Warning: If you destroy this wagon, you only get some steel back! If you " +#~ "are sure, hold Sneak and left-click the wagon." +#~ msgstr "" +#~ "Attention: Si vous détruisez ce wagon, vous ne récupérerez que de la " +#~ "ferraille ! Si vous êtes sûr de vous, appuyez la touche \"Marcher " +#~ "lentement (Sneak)\" et Clic-Gauche." + +#~ msgid "Wheel" +#~ msgstr "Roue" + +#~ msgid "Y-turnout" +#~ msgstr "Embranchement en Y" + +#~ msgid "You are not allowed to access the driver stand." +#~ msgstr "Accès interdit au poste de pilotage." + +#~ msgid "You are not allowed to build near tracks at this protected position." +#~ msgstr "" +#~ "Vous ne pouvez pas construire à proximité d'une voie à cet emplacement " +#~ "protégé." + +#~ msgid "" +#~ "You are not allowed to build near tracks without the track_builder " +#~ "privilege." +#~ msgstr "" +#~ "Vous ne pouvez pas construire à proximité d'une voie sans le privilège " +#~ "\"track_builder\" (?)" + +#~ msgid "You are not allowed to build tracks at this protected position." +#~ msgstr "Vous ne pouvez pas construire une voie à cet emplacement protégé." + +#~ msgid "" +#~ "You are not allowed to build tracks without the track_builder privilege." +#~ msgstr "" +#~ "Vous ne pouvez pas construire une voie sans le privilège " +#~ "\"track_builder\"." + +#~ msgid "" +#~ "You are not allowed to configure this LuaATC component without the @1 " +#~ "privilege." +#~ msgstr "Vous ne pouvez configurer ce composant LuaATC sans le privilege @1." + +#~ msgid "" +#~ "You are not allowed to couple trains without the train_operator privilege." +#~ msgstr "" +#~ "Vous n'êtes pas autorisé à coupler des trains sans le privilège " +#~ "\"train_operator\"." + +#, fuzzy +#~ msgid "You are not allowed to modify this protected track." +#~ msgstr "Vous ne pouvez pas construire une voie à cet emplacement protégé" + +#~ msgid "" +#~ "You are not allowed to name LuaATC passive components without the @1 " +#~ "privilege." +#~ msgstr "" +#~ "Vous ne pouvez nommer un composant LuaATC passif sans le privilege @1." + +#~ msgid "" +#~ "You are not allowed to operate turnouts and signals without the " +#~ "railway_operator privilege." +#~ msgstr "" +#~ "Vous ne pouvez pas actionner les aiguillages ou les signaux (privilège " +#~ "\"railway_operator\" manquant)" + +#~ msgid "You can't get on this wagon." +#~ msgstr "Montée impossible dans ce wagon." + +#~ msgid "You do not have the @1 privilege." +#~ msgstr "Vous ne possédez pas le privilège \"@1\"." + +#~ msgid "You don't have the train_operator privilege." +#~ msgstr "Vous ne possédez pas le privilège \"train_operator\"." + +#~ msgid "You have been given ownership of wagon @1" +#~ msgstr "La propriété du wagon @1 vous a été transférée" + +#~ msgid "" +#~ "You need to own at least one neighboring wagon to destroy this couple." +#~ msgstr "" +#~ "Vous devez être propriétaire d'au moins un wagon voisin pour supprimer " +#~ "cet attelage." + +#~ msgid "from wagon_save table." +#~ msgstr "de la table wagon_save." + +#~ msgid "" +#~ "had no wagons left because of some bug. It is being deleted. Wave it " +#~ "goodbye!" +#~ msgstr "" +#~ "n'a plus de wagon à cause d'un bug quelconque. Il est détruit. Faites lui " +#~ "coucou !" + +#~ msgid "slowdown" +#~ msgstr "ralentissement" diff --git a/advtrains_interlocking/po/update-translations.sh b/advtrains_interlocking/po/update-translations.sh new file mode 100644 index 0000000..5c42e7b --- /dev/null +++ b/advtrains_interlocking/po/update-translations.sh @@ -0,0 +1,28 @@ +#!/bin/sh + +MODNAME="advtrains_interlocking" +MSGID_BUGS_ADDR='advtrains-discuss@lists.sr.ht' + +PODIR=`dirname "$0"` +ATDIR="$PODIR/.." +POTFILE="$PODIR/$MODNAME.pot" + +xgettext \ + -D "$ATDIR" \ + -d "$MODNAME" \ + -o "$POTFILE" \ + -p . \ + -L lua \ + --add-location=file \ + --from-code=UTF-8 \ + --sort-by-file \ + --keyword='S' \ + --package-name="$MODNAME" \ + --msgid-bugs-address="$MSGID_BUGS_ADDR" \ + `find $ATDIR $BTDIR -name '*.lua' -printf '%P\n'` \ + && +for i in "$PODIR"/*.po; do + msgmerge -U \ + --sort-by-file \ + $i "$POTFILE" +done diff --git a/advtrains_interlocking/po/zh_CN.po b/advtrains_interlocking/po/zh_CN.po new file mode 100644 index 0000000..48c5805 --- /dev/null +++ b/advtrains_interlocking/po/zh_CN.po @@ -0,0 +1,1278 @@ +msgid "" +msgstr "" +"Project-Id-Version: advtrains\n" +"Report-Msgid-Bugs-To: advtrains-discuss@lists.sr.ht\n" +"POT-Creation-Date: 2025-06-11 23:21+0200\n" +"PO-Revision-Date: 2023-10-09 11:24+0200\n" +"Last-Translator: Y. Wang <yw05@forksworld.de>\n" +"Language-Team: Chinese (Simplified)\n" +"Language: zh_CN\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 3.3.2\n" + +#: autonaming.lua +msgid "Prefix set, next signal name will be: @1" +msgstr "" + +#: autonaming.lua +msgid "Prefix unset, signals are not auto-named for you!" +msgstr "" + +#: autonaming.lua +msgid "" +"Sets the current prefix for automatically naming interlocking components. " +"Example: '/at_nameprefix TEST' - signals will be named TEST1, TEST2 and so on" +msgstr "" + +#: database.lua +msgid "Created track section @1 from @2 TCBs" +msgstr "" + +#: database.lua +msgid "Track section inconsistent here, repairing..." +msgstr "" + +#: database.lua +msgid "Track section partition found, repairing..." +msgstr "" + +#: init.lua +msgid "Can set up track sections, routes and signals" +msgstr "" + +#: route_prog.lua +msgid "@1 Terminal @2" +msgstr "" + +#: route_prog.lua +msgid "@1 is held in @2 position when this route is set and freed " +msgstr "" + +#: route_prog.lua +msgid "@1 is no longer affected when this route is set." +msgstr "" + +#: route_prog.lua +msgid "Added track section @1 to the route." +msgstr "" + +#: route_prog.lua +msgid "Advance to next route section" +msgstr "" + +#: route_prog.lua +msgid "Advance/Complete Route" +msgstr "" + +#: route_prog.lua +msgid "Advancing over next section is" +msgstr "" + +#: route_prog.lua +msgid "Cancel if you are unsure!" +msgstr "" + +#: route_prog.lua +msgid "Cancel route programming" +msgstr "" + +#: route_prog.lua +msgid "Cannot program route without a target" +msgstr "" + +#: route_prog.lua tcb_ts_ui.lua +msgid "End of interlocking" +msgstr "" + +#: route_prog.lua +msgid "Enter Route Name" +msgstr "" + +#: route_prog.lua +msgid "Finish programming route" +msgstr "" + +#: route_prog.lua +msgid "Finish route HERE" +msgstr "" + +#: route_prog.lua +msgid "Finish route at end of NEXT section" +msgstr "" + +#: route_prog.lua +msgid "Fixed in state @1 by route @2 (punch to unfix)" +msgstr "" + +#: route_prog.lua +msgid "Fixed in state @1 by route @2 until segment #@3 is freed." +msgstr "" + +#: route_prog.lua route_ui.lua signal_aspect_ui.lua tcb_ts_ui.lua tool.lua +msgid "Insufficient privileges to use this!" +msgstr "" + +#: route_prog.lua +msgid "Next section is diverging (>2 TCBs)" +msgstr "" + +#: route_prog.lua +msgid "Route discarded." +msgstr "" + +#: route_prog.lua +msgid "Route ends at signal:" +msgstr "" + +#: route_prog.lua +msgid "Route leads into" +msgstr "" + +#: route_prog.lua +msgid "" +"Route programming mode active. Punch TCBs to add route segments, punch " +"turnouts to lock them." +msgstr "" + +#: route_prog.lua +msgid "Route section @1 removed." +msgstr "" + +#: route_prog.lua +msgid "Routes should in most cases end at signals." +msgstr "" + +#: route_prog.lua +msgid "Save Route" +msgstr "" + +#: route_prog.lua +msgid "Step back one section" +msgstr "" + +#: route_prog.lua +msgid "Successfully programmed route." +msgstr "" + +#: route_prog.lua +msgid "The origin TCB has become unknown during programming. Try again." +msgstr "" + +#: route_prog.lua +msgid "This TCB is not suitable as" +msgstr "" + +#: route_prog.lua +msgid "This TCB is unconfigured, you first need to assign it to a rail" +msgstr "" + +#: route_prog.lua +msgid "WARNING: Route does not end at a signal." +msgstr "" + +#: route_prog.lua +msgid "[Route programming] " +msgstr "" + +#: route_prog.lua +msgid "impossible at this place." +msgstr "" + +#: route_prog.lua +msgid "non-interlocked area" +msgstr "" + +#: route_prog.lua +msgid "route continuation." +msgstr "" + +#: route_ui.lua +msgid "<< Select a route part to edit options" +msgstr "" + +#: route_ui.lua +#, fuzzy +msgid "<Default Aspect>" +msgstr "默认座位" + +#: route_ui.lua +msgid "ARS Rule List" +msgstr "" + +#: route_ui.lua +msgid "Announce distant signal" +msgstr "" + +#: route_ui.lua +msgid "Back to signal" +msgstr "" + +#: route_ui.lua +msgid "Call-on (section may be occupied)" +msgstr "" + +#: route_ui.lua +msgid "Clone Route" +msgstr "" + +#: route_ui.lua +msgid "Delete Route" +msgstr "" + +#: route_ui.lua +msgid "Error:" +msgstr "" + +#: route_ui.lua +msgid "New From Route" +msgstr "" + +#: route_ui.lua +msgid "No Signal at this TCB" +msgstr "" + +#: route_ui.lua +msgid "Route name" +msgstr "" + +#: route_ui.lua +msgid "Route overview" +msgstr "" + +#: route_ui.lua +msgid "Save ARS List" +msgstr "" + +#: route_ui.lua +msgid "Section Options:" +msgstr "" + +#: route_ui.lua tcb_ts_ui.lua +msgid "Set" +msgstr "" + +#: route_ui.lua signal_aspect_ui.lua +#, fuzzy +msgid "Signal Aspect:" +msgstr "信号灯" + +#: route_ui.lua tcb_ts_ui.lua +msgid "TCB at @1 has different section than previous TCB" +msgstr "" + +#: route_ui.lua tcb_ts_ui.lua +msgid "TCB at @1 is missing" +msgstr "" + +#: route_ui.lua tcb_ts_ui.lua +msgid "TCB at @1 is not assigned to previous track section" +msgstr "" + +#: route_ui.lua tcb_ts_ui.lua +msgid "Track section after @1 missing" +msgstr "" + +#: route_ui.lua tcb_ts_ui.lua +msgid "Turnout/component missing at @1" +msgstr "" + +#: routesetting.lua +msgid "Lock conflict at @1, Held locked by:" +msgstr "" + +#: routesetting.lua +msgid "No TCB found at @1. Please update or reconfigure route!" +msgstr "" + +#: routesetting.lua +msgid "No track section adjacent to @1. Please reconfigure route!" +msgstr "" + +#: routesetting.lua +msgid "Route @1 from signal @2" +msgstr "" + +#: routesetting.lua +msgid "Route @1 from signal @2, segment #@3" +msgstr "" + +#: routesetting.lua +msgid "Section '@1' already has route set from @2:" +msgstr "" + +#: routesetting.lua +msgid "Section '@1' is occupied!" +msgstr "" + +#: routesetting.lua +msgid "Section '@1' not found!" +msgstr "" + +#: routesetting.lua +msgid "" +"TCB at @1 has different section than previous TCB. Please update track " +"section or reconfigure route!" +msgstr "" + +#: routesetting.lua +msgid "" +"Turnout/component missing at @1. Please update track section or reconfigure " +"route!" +msgstr "" + +#: signal_aspect_ui.lua +msgid "<assign distant>" +msgstr "" + +#: signal_aspect_ui.lua +msgid "<none>" +msgstr "" + +#: signal_aspect_ui.lua +msgid "Assigned distant signal to the main signal at @1" +msgstr "" + +#: signal_aspect_ui.lua +msgid "Assigned signal to the TCB at @1" +msgstr "" + +#: signal_aspect_ui.lua tool.lua +msgid "Clear" +msgstr "" + +#: signal_aspect_ui.lua +msgid "" +"Configuring Signal: Influence point of another signal is already present!" +msgstr "" + +#: signal_aspect_ui.lua +msgid "Configuring Signal: Node is too far away. Aborted." +msgstr "" + +#: signal_aspect_ui.lua +msgid "" +"Configuring Signal: Please look in train's driving direction and punch rail " +"to set influence point." +msgstr "" + +#: signal_aspect_ui.lua +msgid "Configuring Signal: Successfully set influence point" +msgstr "" + +#: signal_aspect_ui.lua +msgid "Configuring Signal: This is not a normal two-connection rail! Aborted." +msgstr "" + +#: signal_aspect_ui.lua +msgid "Dst: @1" +msgstr "" + +#: signal_aspect_ui.lua +msgid "Influence point is not set." +msgstr "" + +#: signal_aspect_ui.lua +msgid "Influence point is set at @1." +msgstr "" + +#: signal_aspect_ui.lua +msgid "Modify" +msgstr "" + +#: signal_aspect_ui.lua +msgid "Set distant signal: Punch the main signal to assign!" +msgstr "" + +#: signal_aspect_ui.lua +msgid "Set influence point" +msgstr "" + +#: smartroute.lua +msgid "Apply" +msgstr "" + +#: smartroute.lua +msgid "Route search: @1 found" +msgstr "" + +#: smartroute.lua +msgid "Search further" +msgstr "" + +#: smartroute.lua +msgid "Smartroute: No track section directly ahead!" +msgstr "" + +#: smartroute.lua +msgid "Smartroute: TCBS or routes don't exist here!" +msgstr "" + +#: tcb_ts_ui.lua +msgid " (invalid)" +msgstr "" + +#: tcb_ts_ui.lua +msgid "@1 locks in state @2" +msgstr "" + +#: tcb_ts_ui.lua +msgid "A route is requested from this signal:" +msgstr "" + +#: tcb_ts_ui.lua +msgid "Add locks" +msgstr "" + +#: tcb_ts_ui.lua +msgid "Assign a signal" +msgstr "" + +#: tcb_ts_ui.lua +msgid "Automatic Working is active." +msgstr "" + +#: tcb_ts_ui.lua +msgid "Automatic routesetting" +msgstr "" + +#: tcb_ts_ui.lua +msgid "Boundary TCBs:" +msgstr "" + +#: tcb_ts_ui.lua +msgid "Can't remove TCB: Both sides must have no signal assigned!" +msgstr "" + +#: tcb_ts_ui.lua +msgid "Can't remove track, a train is here!" +msgstr "" + +#: tcb_ts_ui.lua +msgid "Cancel" +msgstr "" + +#: tcb_ts_ui.lua +msgid "Cancel Route" +msgstr "" + +#: tcb_ts_ui.lua +msgid "" +"Cannot delete route which has ARS rules, please review and then delete " +"through edit dialog!" +msgstr "" + +#: tcb_ts_ui.lua +msgid "Clear locks" +msgstr "" + +#: tcb_ts_ui.lua +msgid "" +"Configuring TCB: Already existed at this position, it is now linked to this " +"TCB marker" +msgstr "" + +#: tcb_ts_ui.lua +msgid "Configuring TCB: Cannot use static signals for routesetting. Aborted." +msgstr "" + +#: tcb_ts_ui.lua +msgid "Configuring TCB: Internal error, TCBS doesn't exist. Aborted." +msgstr "" + +#: tcb_ts_ui.lua +msgid "Configuring TCB: Node is too far away. Aborted." +msgstr "" + +#: tcb_ts_ui.lua +msgid "Configuring TCB: Not a compatible signal. Aborted." +msgstr "" + +#: tcb_ts_ui.lua +msgid "Configuring TCB: Please punch the rail you want to assign this TCB to." +msgstr "" + +#: tcb_ts_ui.lua +msgid "Configuring TCB: Please punch the signal to assign." +msgstr "" + +#: tcb_ts_ui.lua +msgid "Configuring TCB: Successfully assigned signal." +msgstr "" + +#: tcb_ts_ui.lua +msgid "Configuring TCB: Successfully configured TCB" +msgstr "" + +#: tcb_ts_ui.lua +msgid "Configuring TCB: This is not a normal two-connection rail! Aborted." +msgstr "" + +#: tcb_ts_ui.lua +msgid "Create Interlocked Track Section" +msgstr "" + +#: tcb_ts_ui.lua +msgid "Delete this route" +msgstr "" + +#: tcb_ts_ui.lua +msgid "Disable Automatic Working" +msgstr "" + +#: tcb_ts_ui.lua +msgid "Distant signal triggers ARS" +msgstr "" + +#: tcb_ts_ui.lua +msgid "Edit" +msgstr "" + +#: tcb_ts_ui.lua +msgid "Enable Automatic Working" +msgstr "" + +#: tcb_ts_ui.lua +msgid "Error: TS modified, abort!" +msgstr "" + +#: tcb_ts_ui.lua +msgid "Final TCBS unset (legacy-style buffer route)" +msgstr "" + +#: tcb_ts_ui.lua +msgid "Fixed route locks (e.g. level crossings):" +msgstr "" + +#: tcb_ts_ui.lua +msgid "Link @1" +msgstr "" + +#: tcb_ts_ui.lua +msgid "Link: @1" +msgstr "" + +#: tcb_ts_ui.lua +msgid "Multiple routes are requested (first available is set):" +msgstr "" + +#: tcb_ts_ui.lua +msgid "NOTE: ARS is disabled." +msgstr "" + +#: tcb_ts_ui.lua +msgid "New (Manual)" +msgstr "" + +#: tcb_ts_ui.lua +msgid "No Link" +msgstr "" + +#: tcb_ts_ui.lua +msgid "No routes are yet defined." +msgstr "" + +#: tcb_ts_ui.lua +msgid "No trains on this section." +msgstr "" + +#: tcb_ts_ui.lua +msgid "Punch components to add fixed locks. (punch anything else = end)" +msgstr "" + +#: tcb_ts_ui.lua +msgid "Remove Section" +msgstr "" + +#: tcb_ts_ui.lua +msgid "Reset section state" +msgstr "" + +#: tcb_ts_ui.lua +#, fuzzy +msgid "Reset track section" +msgstr "改变行车方向" + +#: tcb_ts_ui.lua +msgid "Reset track section @1!" +msgstr "" + +#: tcb_ts_ui.lua +msgid "Route has been set." +msgstr "" + +#: tcb_ts_ui.lua +msgid "Route is re-set when a train passed." +msgstr "" + +#: tcb_ts_ui.lua +msgid "Route is set over this signal by:" +msgstr "" + +#: tcb_ts_ui.lua +msgid "Route is set: " +msgstr "" + +#: tcb_ts_ui.lua +msgid "Routes are not automatically set." +msgstr "" + +#: tcb_ts_ui.lua +msgid "Routes:" +msgstr "" + +#: tcb_ts_ui.lua +msgid "Section holds @1 route locks." +msgstr "" + +#: tcb_ts_ui.lua +#, fuzzy +msgid "Section name" +msgstr "车站名称" + +#: tcb_ts_ui.lua +msgid "Set ARS default route" +msgstr "" + +#: tcb_ts_ui.lua +msgid "Set Route" +msgstr "" + +#: tcb_ts_ui.lua +msgid "Setting fixed locks finished!" +msgstr "" + +#: tcb_ts_ui.lua +msgid "Show" +msgstr "" + +#: tcb_ts_ui.lua +msgid "Show track section" +msgstr "" + +#: tcb_ts_ui.lua +msgid "Side @1" +msgstr "" + +#: tcb_ts_ui.lua +#, fuzzy +msgid "Signal at @1" +msgstr "信号灯" + +#: tcb_ts_ui.lua +#, fuzzy +msgid "Signal name" +msgstr "信号灯" + +#: tcb_ts_ui.lua +msgid "Signal on B side already assigned!" +msgstr "" + +#: tcb_ts_ui.lua +#, fuzzy +msgid "Signalling" +msgstr "信号灯" + +#: tcb_ts_ui.lua +msgid "Smart Route" +msgstr "" + +#: tcb_ts_ui.lua +msgid "TCB Link: Select linked TCB now!" +msgstr "" + +#: tcb_ts_ui.lua +msgid "TCB already existed at this position, now linked to this node" +msgstr "" + +#: tcb_ts_ui.lua +msgid "TCB assigned to @1" +msgstr "" + +#: tcb_ts_ui.lua +msgid "This TCB has been removed. Please dig marker." +msgstr "" + +#: tcb_ts_ui.lua +msgid "" +"This is a pure distant signal\n" +"No route is currently set through." +msgstr "" + +#: tcb_ts_ui.lua +msgid "" +"This is an always-halt signal (e.g. a buffer)\n" +"No routes can be set from here." +msgstr "" + +#: tcb_ts_ui.lua +msgid "" +"This will clear the list of trains\n" +"and the routesetting status of this section.\n" +"Are you sure?" +msgstr "" + +#: tcb_ts_ui.lua +msgid "" +"This will remove the track section and set all its end points to End Of " +"Interlocking" +msgstr "" + +#: tcb_ts_ui.lua +msgid "Track Circuit Break" +msgstr "" + +#: tcb_ts_ui.lua +msgid "Track Circuit Break Configuration" +msgstr "" + +#: tcb_ts_ui.lua +msgid "Track Section Detail - @1" +msgstr "" + +#: tcb_ts_ui.lua +msgid "Trains on this section:" +msgstr "" + +#: tcb_ts_ui.lua +msgid "Unconfigured Track Circuit Break, right-click to assign." +msgstr "" + +#: tcb_ts_ui.lua +msgid "Wait for this route to be cancelled in order to do anything here." +msgstr "" + +#: tcb_ts_ui.lua +msgid "Waiting for route to be set..." +msgstr "" + +#: tcb_ts_ui.lua +msgid "Yes" +msgstr "" + +#: tcb_ts_ui.lua +msgid "" +"You cannot modify track sections when a route is set or a train is on the " +"section." +msgstr "" + +#: tool.lua +msgid "Emplace manual lock" +msgstr "" + +#: tool.lua +msgid "" +"Interlocking tool\n" +"Punch: Highlight track section\n" +"Place: check route locks/show track section info" +msgstr "" + +#: tool.lua +msgid "No route locks set" +msgstr "" + +#: tool.lua +msgid "No track section at this location!" +msgstr "" + +#: tool.lua +msgid "Node is not a track!" +msgstr "" + +#: tool.lua +msgid "Route lock inspector" +msgstr "" + +#: tool.lua +msgid "Route locks currently put:" +msgstr "" + +#: tsr_rail.lua +msgid "Point Speed Restriction Track" +msgstr "" + +#: tsr_rail.lua +msgid "Point speed restriction: @1" +msgstr "" + +#: tsr_rail.lua +msgid "Set point speed restriction:" +msgstr "" + +#: tsr_rail.lua +msgid "You are not allowed to configure this track without the @1 privilege." +msgstr "您没有“@1”权限,不能调整这段轨道。" + +#: tsr_rail.lua +msgid "You are not allowed to configure this track." +msgstr "您不能调整这段轨道。" + +#~ msgid "(Doors closed)" +#~ msgstr "(车门已关闭)" + +#~ msgid "3-way turnout" +#~ msgstr "三开道岔" + +#~ msgid "90+Angle Diamond Crossing Track" +#~ msgstr "交叉轨道 (其中一条轨道与坐标轴平行)" + +#~ msgid "<No coupler>" +#~ msgstr "<没有车钩>" + +#~ msgid "@1 Platform (45 degree)" +#~ msgstr "较高的@1站台 (45°)" + +#~ msgid "@1 Platform (high)" +#~ msgstr "较高的@1站台" + +#~ msgid "@1 Platform (low)" +#~ msgstr "较低的@1站台" + +#~ msgid "@1 Platform (low, 45 degree)" +#~ msgstr "较低的@1站台 (45°)" + +#~ msgid "@1 Slope" +#~ msgstr "@1斜坡" + +#~ msgid "ATC Kick command warning: doors are closed." +#~ msgstr "ATC 警告:车门已关闭,无法踢出乘客。" + +#~ msgid "ATC Kick command warning: train moving." +#~ msgstr "ATC 警告:火车正在移动,无法踢出乘客。" + +#~ msgid "ATC Reverse command warning: didn't reverse train, train moving." +#~ msgstr "ATC 警告:火车正在移动,无法改变行车方向。" + +#~ msgid "ATC command parse error: Unknown command: @1" +#~ msgstr "ATC 语法错误:未知命令:@1" + +#~ msgid "ATC command syntax error: I statement not closed: @1" +#~ msgstr "ATC 语法错误:“I”命令不完整:@1" + +#~ msgid "ATC controller" +#~ msgstr "ATC 控制器" + +#~ msgid "" +#~ "ATC controller, mode @1\n" +#~ "Channel: @2" +#~ msgstr "" +#~ "ATC 控制器\n" +#~ "模式:@1\n" +#~ "频道:@2" + +#~ msgid "" +#~ "ATC controller, mode @1\n" +#~ "Command: @2" +#~ msgstr "" +#~ "ATC 控制器\n" +#~ "模式:@1\n" +#~ "命令:@2" + +#~ msgid "Access to @1" +#~ msgstr "可前往@1" + +#~ msgid "Andrew's Cross" +#~ msgstr "铁路道口信号灯" + +#~ msgid "Back of train would end up off track, cancelling." +#~ msgstr "火车后部不在轨道上。" + +#~ msgid "Big Industrial Train Engine" +#~ msgstr "大型工业用火车头" + +#~ msgid "Boiler" +#~ msgstr "锅炉" + +#~ msgid "Box Wagon" +#~ msgstr "货运车厢" + +#~ msgid "Buffer and Chain Coupler" +#~ msgstr "链式车钩" + +#~ msgid "Bumper" +#~ msgstr "保险杠" + +#~ msgid "Can not couple: The couplers of the trains do not match (@1 and @2)." +#~ msgstr "您无法连接这两节车厢:这两节车厢使用不同的车钩 (@1和@2)。" + +#~ msgid "Can't get on: wagon full or doors closed!" +#~ msgstr "无法上车:车门已关闭或车厢已满。" + +#, fuzzy +#~ msgid "Can't place: Not enough slope items left (@1 required)" +#~ msgstr "无法放置斜坡:您没有足够的铁路斜坡放置工具 (您总共需要@1个)" + +#, fuzzy +#~ msgid "Can't place: There's no slope of length @1" +#~ msgstr "无法放置斜坡:advtrains 不支持长度为@1米的斜坡。" + +#, fuzzy +#~ msgid "Can't place: no supporting node at upper end." +#~ msgstr "无法放置斜坡:较高端没有支撑方块。" + +#, fuzzy +#~ msgid "Can't place: not pointing at node" +#~ msgstr "无法放置斜坡:您没有选择任何方块。" + +#~ msgid "Can't place: protected position!" +#~ msgstr "无法放置:此区域已被保护。" + +#, fuzzy +#~ msgid "Can't place: space occupied!" +#~ msgstr "无法放置斜坡:此区域已被占用。" + +#~ msgid "Chimney" +#~ msgstr "烟囱" + +#~ msgid "Command" +#~ msgstr "命令" + +#~ msgid "Command (on)" +#~ msgstr "命令 (激活时)" + +#~ msgid "Default Seat (driver stand)" +#~ msgstr "默认座位 (司机座位)" + +#~ msgid "Dep. Speed" +#~ msgstr "出发速度" + +#~ msgid "Deprecated Track" +#~ msgstr "请不要使用" + +#~ msgid "Detailed Steam Engine" +#~ msgstr "精细的蒸汽机车" + +#~ msgid "Detector Rail" +#~ msgstr "探测轨道" + +#~ msgid "Diagonal Diamond Crossing Track" +#~ msgstr "交叉轨道" + +#~ msgid "Digiline channel" +#~ msgstr "Digiline 频道" + +#~ msgid "Door Delay" +#~ msgstr "车门关闭时间" + +#~ msgid "" +#~ "Doors are closed. Use Sneak+rightclick to ignore the closed doors and get " +#~ "off." +#~ msgstr "车门已关闭,请使用潜行+右键单击下车。" + +#, fuzzy +#~ msgid "Driver Stand" +#~ msgstr "司机座位" + +#~ msgid "Driver Stand (left)" +#~ msgstr "左侧司机座位" + +#~ msgid "Driver Stand (right)" +#~ msgstr "右侧司机座位" + +#~ msgid "Driver stand" +#~ msgstr "司机座位" + +#~ msgid "Driver's cab" +#~ msgstr "驾驶室" + +#~ msgid "Get off" +#~ msgstr "下车" + +#~ msgid "Get off (forced)" +#~ msgstr "强制下车" + +#~ msgid "Industrial Train Engine" +#~ msgstr "工业用火车头" + +#~ msgid "Industrial tank wagon" +#~ msgstr "液体运输车厢" + +#~ msgid "Industrial wood wagon" +#~ msgstr "木材运输车厢" + +#~ msgid "Japanese Train Engine" +#~ msgstr "高速列车车头" + +#~ msgid "Japanese Train Inter-Wagon Connection" +#~ msgstr "日本火车车钩" + +#~ msgid "Japanese Train Wagon" +#~ msgstr "高速列车车厢" + +#, fuzzy +#~ msgid "Japanese signal pole" +#~ msgstr "高速列车车厢" + +#~ msgid "Kick out passengers" +#~ msgstr "踢出乘客" + +#~ msgid "Lampless Signal" +#~ msgstr "臂板信号机" + +#~ msgid "Line" +#~ msgstr "火车线路" + +#~ msgid "Loading Track" +#~ msgstr "装货轨道" + +#~ msgid "Lock couples" +#~ msgstr "锁定连接处" + +#~ msgid "No such lua entity." +#~ msgstr "您没有指向一个可以用火车复制工具复制的物体。" + +#~ msgid "No such train: @1." +#~ msgstr "ID 为“@1”的列车不存在。" + +#~ msgid "No such wagon: @1." +#~ msgstr "ID 为“@1”的车厢不存在。" + +#, fuzzy +#~ msgid "Not allowed to do this." +#~ msgstr "您不能调整这段轨道。" + +#~ msgid "Passenger Wagon" +#~ msgstr "客车" + +#, fuzzy +#~ msgid "Passenger area" +#~ msgstr "客车" + +#~ msgid "" +#~ "Passive Component Naming Tool\n" +#~ "\n" +#~ "Right-click to name a passive component." +#~ msgstr "" +#~ "被动元件命名工具\n" +#~ "\n" +#~ "右键单击命名所选元件。" + +#~ msgid "Perpendicular Diamond Crossing Track" +#~ msgstr "垂直交叉轨道" + +#~ msgid "Routingcode" +#~ msgstr "路由码" + +#~ msgid "Save" +#~ msgstr "保存" + +#~ msgid "Save wagon properties" +#~ msgstr "保存车厢属性" + +#~ msgid "Scharfenberg Coupler" +#~ msgstr "Scharfenberg 式车钩" + +#~ msgid "Select seat:" +#~ msgstr "请选择座位:" + +#~ msgid "Show Inventory" +#~ msgstr "显示物品栏" + +#~ msgid "Speed:" +#~ msgstr "速度" + +#~ msgid "Station Code" +#~ msgstr "车站代码" + +#~ msgid "Station/Stop Track" +#~ msgstr "车站轨道" + +#~ msgid "Steam Engine" +#~ msgstr "蒸汽机车" + +#~ msgid "Stop Time" +#~ msgstr "停站时间" + +#~ msgid "Subway Passenger Wagon" +#~ msgstr "地铁车厢" + +#~ msgid "Target:" +#~ msgstr "目标速度" + +#~ msgid "Text displayed inside train" +#~ msgstr "车厢内部显示" + +#~ msgid "Text displayed outside on train" +#~ msgstr "车厢外部显示" + +#, fuzzy +#~ msgid "That wagon does not exist!" +#~ msgstr "这节车厢没有座位。" + +#~ msgid "The clipboard couldn't access the metadata. Copy failed." +#~ msgstr "无法复制:剪贴板无法访问元数据。" + +#~ msgid "The clipboard couldn't access the metadata. Paste failed." +#~ msgstr "无法粘贴:剪贴板无法访问元数据。" + +#~ msgid "The clipboard is empty." +#~ msgstr "剪贴板是空的。" + +#, fuzzy +#~ msgid "The track you are trying to place the wagon on is not long enough!" +#~ msgstr "轨道太短。" + +#~ msgid "The track you are trying to place the wagon on is not long enough." +#~ msgstr "轨道太短。" + +#, fuzzy +#~ msgid "This Wagon ID" +#~ msgstr "车厢已满。" + +#, fuzzy +#~ msgid "This node can't be changed using the trackworker!" +#~ msgstr "您不能使用铁路调整工具调整这个方块。" + +#, fuzzy +#~ msgid "This node can't be rotated using the trackworker!" +#~ msgstr "您不能使用铁路调整工具旋转这个方块。" + +#, fuzzy +#~ msgid "This node can't be rotated using the trackworker," +#~ msgstr "您不能使用铁路调整工具旋转这个方块。" + +#~ msgid "This position is protected!" +#~ msgstr "这里已被保护。" + +#~ msgid "This track can not be changed." +#~ msgstr "您不能调整这段轨道。" + +#, fuzzy +#~ msgid "This track can not be removed!" +#~ msgstr "您不能移除这段轨道。" + +#, fuzzy +#~ msgid "This track can not be rotated!" +#~ msgstr "您不能旋转这段轨道。" + +#~ msgid "This wagon has no seats." +#~ msgstr "这节车厢没有座位。" + +#~ msgid "This wagon is full." +#~ msgstr "车厢已满。" + +#~ msgid "This wagon is owned by @1, you can't destroy it." +#~ msgstr "这是 @1 的车厢,您不能摧毁它。" + +#~ msgid "Track" +#~ msgstr "轨道" + +#~ msgid "" +#~ "Track Worker Tool\n" +#~ "\n" +#~ "Left-click: change rail type (straight/curve/switch)\n" +#~ "Right-click: rotate object" +#~ msgstr "" +#~ "铁路调整工具\n" +#~ "\n" +#~ "左键单击:切换轨道类型\n" +#~ "右键单击:旋转方块" + +#, fuzzy +#~ msgid "Train " +#~ msgstr "已复制列车。" + +#~ msgid "Train copied." +#~ msgstr "已复制列车。" + +#~ msgid "" +#~ "Train copy/paste tool\n" +#~ "\n" +#~ "Left-click: copy train\n" +#~ "Right-click: paste train" +#~ msgstr "" +#~ "火车复制工具\n" +#~ "\n" +#~ "左键单击:复制\n" +#~ "右键单击:粘帖" + +#~ msgid "Unconfigured ATC controller" +#~ msgstr "ATC 控制器 (未配置)" + +#~ msgid "Unconfigured LuaATC component" +#~ msgstr "LuaATC 部件 (未配置)" + +#~ msgid "Unloading Track" +#~ msgstr "卸货轨道" + +#~ msgid "Use Sneak+rightclick to bypass closed doors!" +#~ msgstr "请使用潜行+右键上车。" + +#, fuzzy +#~ msgid "Wagon Properties Tool" +#~ msgstr "车厢属性" + +#~ msgid "Wagon properties" +#~ msgstr "车厢属性" + +#~ msgid "Wallmounted Signal (left)" +#~ msgstr "壁挂式信号灯 (左侧)" + +#~ msgid "Wallmounted Signal (right)" +#~ msgstr "壁挂式信号灯 (右侧)" + +#~ msgid "Wallmounted Signal (top)" +#~ msgstr "悬挂式信号灯" + +#~ msgid "" +#~ "Warning: If you destroy this wagon, you only get some steel back! If you " +#~ "are sure, hold Sneak and left-click the wagon." +#~ msgstr "" +#~ "警告:如果您摧毁此车厢,您只能拿到一些钢方块。如果您确定要摧毁这节车厢,请" +#~ "按潜行键并左键单击此车厢。" + +#~ msgid "Wheel" +#~ msgstr "车轮" + +#~ msgid "Y-turnout" +#~ msgstr "对称道岔" + +#~ msgid "You are not allowed to build near tracks at this protected position." +#~ msgstr "这里已被保护,您不能在这里的铁路附近建任何东西。" + +#~ msgid "" +#~ "You are not allowed to build near tracks without the track_builder " +#~ "privilege." +#~ msgstr "您没有“train_operator”权限,不能在铁路附近建任何东西。" + +#~ msgid "You are not allowed to build tracks at this protected position." +#~ msgstr "这里已被保护,您不能在这里建造铁路。" + +#~ msgid "" +#~ "You are not allowed to build tracks without the track_builder privilege." +#~ msgstr "您没有“train_operator”权限,不能在这里建造铁路。" + +#~ msgid "" +#~ "You are not allowed to configure this LuaATC component without the @1 " +#~ "privilege." +#~ msgstr "您没有“@1”权限,不能配置这个 LuaATC 部件。" + +#~ msgid "" +#~ "You are not allowed to couple trains without the train_operator privilege." +#~ msgstr "您没有“train_operator”权限,不能连接这两节车厢。" + +#, fuzzy +#~ msgid "You are not allowed to modify this protected track." +#~ msgstr "这里已被保护,您不能在这里建造铁路。" + +#~ msgid "" +#~ "You are not allowed to name LuaATC passive components without the @1 " +#~ "privilege." +#~ msgstr "您没有“@1”权限,不能命名被动元件。" + +#~ msgid "" +#~ "You are not allowed to operate turnouts and signals without the " +#~ "railway_operator privilege." +#~ msgstr "您没有“railway_operator”权限,不能控制铁路设施。" + +#~ msgid "You do not have the @1 privilege." +#~ msgstr "您没有“@1”权限。" + +#, fuzzy +#~ msgid "You don't have the train_operator privilege." +#~ msgstr "您没有“@1”权限。" + +#~ msgid "" +#~ "You need to own at least one neighboring wagon to destroy this couple." +#~ msgstr "您必须至少拥有其中一节车厢才能分开这两节车厢。" diff --git a/advtrains_interlocking/po/zh_TW.po b/advtrains_interlocking/po/zh_TW.po new file mode 100644 index 0000000..6f07afb --- /dev/null +++ b/advtrains_interlocking/po/zh_TW.po @@ -0,0 +1,1278 @@ +msgid "" +msgstr "" +"Project-Id-Version: advtrains\n" +"Report-Msgid-Bugs-To: advtrains-discuss@lists.sr.ht\n" +"POT-Creation-Date: 2025-06-11 23:21+0200\n" +"PO-Revision-Date: 2023-10-09 11:31+0200\n" +"Last-Translator: Y. Wang <yw05@forksworld.de>\n" +"Language-Team: Chinese (Traditional)\n" +"Language: zh_TW\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 3.3.2\n" + +#: autonaming.lua +msgid "Prefix set, next signal name will be: @1" +msgstr "" + +#: autonaming.lua +msgid "Prefix unset, signals are not auto-named for you!" +msgstr "" + +#: autonaming.lua +msgid "" +"Sets the current prefix for automatically naming interlocking components. " +"Example: '/at_nameprefix TEST' - signals will be named TEST1, TEST2 and so on" +msgstr "" + +#: database.lua +msgid "Created track section @1 from @2 TCBs" +msgstr "" + +#: database.lua +msgid "Track section inconsistent here, repairing..." +msgstr "" + +#: database.lua +msgid "Track section partition found, repairing..." +msgstr "" + +#: init.lua +msgid "Can set up track sections, routes and signals" +msgstr "" + +#: route_prog.lua +msgid "@1 Terminal @2" +msgstr "" + +#: route_prog.lua +msgid "@1 is held in @2 position when this route is set and freed " +msgstr "" + +#: route_prog.lua +msgid "@1 is no longer affected when this route is set." +msgstr "" + +#: route_prog.lua +msgid "Added track section @1 to the route." +msgstr "" + +#: route_prog.lua +msgid "Advance to next route section" +msgstr "" + +#: route_prog.lua +msgid "Advance/Complete Route" +msgstr "" + +#: route_prog.lua +msgid "Advancing over next section is" +msgstr "" + +#: route_prog.lua +msgid "Cancel if you are unsure!" +msgstr "" + +#: route_prog.lua +msgid "Cancel route programming" +msgstr "" + +#: route_prog.lua +msgid "Cannot program route without a target" +msgstr "" + +#: route_prog.lua tcb_ts_ui.lua +msgid "End of interlocking" +msgstr "" + +#: route_prog.lua +msgid "Enter Route Name" +msgstr "" + +#: route_prog.lua +msgid "Finish programming route" +msgstr "" + +#: route_prog.lua +msgid "Finish route HERE" +msgstr "" + +#: route_prog.lua +msgid "Finish route at end of NEXT section" +msgstr "" + +#: route_prog.lua +msgid "Fixed in state @1 by route @2 (punch to unfix)" +msgstr "" + +#: route_prog.lua +msgid "Fixed in state @1 by route @2 until segment #@3 is freed." +msgstr "" + +#: route_prog.lua route_ui.lua signal_aspect_ui.lua tcb_ts_ui.lua tool.lua +msgid "Insufficient privileges to use this!" +msgstr "" + +#: route_prog.lua +msgid "Next section is diverging (>2 TCBs)" +msgstr "" + +#: route_prog.lua +msgid "Route discarded." +msgstr "" + +#: route_prog.lua +msgid "Route ends at signal:" +msgstr "" + +#: route_prog.lua +msgid "Route leads into" +msgstr "" + +#: route_prog.lua +msgid "" +"Route programming mode active. Punch TCBs to add route segments, punch " +"turnouts to lock them." +msgstr "" + +#: route_prog.lua +msgid "Route section @1 removed." +msgstr "" + +#: route_prog.lua +msgid "Routes should in most cases end at signals." +msgstr "" + +#: route_prog.lua +msgid "Save Route" +msgstr "" + +#: route_prog.lua +msgid "Step back one section" +msgstr "" + +#: route_prog.lua +msgid "Successfully programmed route." +msgstr "" + +#: route_prog.lua +msgid "The origin TCB has become unknown during programming. Try again." +msgstr "" + +#: route_prog.lua +msgid "This TCB is not suitable as" +msgstr "" + +#: route_prog.lua +msgid "This TCB is unconfigured, you first need to assign it to a rail" +msgstr "" + +#: route_prog.lua +msgid "WARNING: Route does not end at a signal." +msgstr "" + +#: route_prog.lua +msgid "[Route programming] " +msgstr "" + +#: route_prog.lua +msgid "impossible at this place." +msgstr "" + +#: route_prog.lua +msgid "non-interlocked area" +msgstr "" + +#: route_prog.lua +msgid "route continuation." +msgstr "" + +#: route_ui.lua +msgid "<< Select a route part to edit options" +msgstr "" + +#: route_ui.lua +#, fuzzy +msgid "<Default Aspect>" +msgstr "預設座位" + +#: route_ui.lua +msgid "ARS Rule List" +msgstr "" + +#: route_ui.lua +msgid "Announce distant signal" +msgstr "" + +#: route_ui.lua +msgid "Back to signal" +msgstr "" + +#: route_ui.lua +msgid "Call-on (section may be occupied)" +msgstr "" + +#: route_ui.lua +msgid "Clone Route" +msgstr "" + +#: route_ui.lua +msgid "Delete Route" +msgstr "" + +#: route_ui.lua +msgid "Error:" +msgstr "" + +#: route_ui.lua +msgid "New From Route" +msgstr "" + +#: route_ui.lua +msgid "No Signal at this TCB" +msgstr "" + +#: route_ui.lua +msgid "Route name" +msgstr "" + +#: route_ui.lua +msgid "Route overview" +msgstr "" + +#: route_ui.lua +msgid "Save ARS List" +msgstr "" + +#: route_ui.lua +msgid "Section Options:" +msgstr "" + +#: route_ui.lua tcb_ts_ui.lua +msgid "Set" +msgstr "" + +#: route_ui.lua signal_aspect_ui.lua +#, fuzzy +msgid "Signal Aspect:" +msgstr "色燈號誌機" + +#: route_ui.lua tcb_ts_ui.lua +msgid "TCB at @1 has different section than previous TCB" +msgstr "" + +#: route_ui.lua tcb_ts_ui.lua +msgid "TCB at @1 is missing" +msgstr "" + +#: route_ui.lua tcb_ts_ui.lua +msgid "TCB at @1 is not assigned to previous track section" +msgstr "" + +#: route_ui.lua tcb_ts_ui.lua +msgid "Track section after @1 missing" +msgstr "" + +#: route_ui.lua tcb_ts_ui.lua +msgid "Turnout/component missing at @1" +msgstr "" + +#: routesetting.lua +msgid "Lock conflict at @1, Held locked by:" +msgstr "" + +#: routesetting.lua +msgid "No TCB found at @1. Please update or reconfigure route!" +msgstr "" + +#: routesetting.lua +msgid "No track section adjacent to @1. Please reconfigure route!" +msgstr "" + +#: routesetting.lua +msgid "Route @1 from signal @2" +msgstr "" + +#: routesetting.lua +msgid "Route @1 from signal @2, segment #@3" +msgstr "" + +#: routesetting.lua +msgid "Section '@1' already has route set from @2:" +msgstr "" + +#: routesetting.lua +msgid "Section '@1' is occupied!" +msgstr "" + +#: routesetting.lua +msgid "Section '@1' not found!" +msgstr "" + +#: routesetting.lua +msgid "" +"TCB at @1 has different section than previous TCB. Please update track " +"section or reconfigure route!" +msgstr "" + +#: routesetting.lua +msgid "" +"Turnout/component missing at @1. Please update track section or reconfigure " +"route!" +msgstr "" + +#: signal_aspect_ui.lua +msgid "<assign distant>" +msgstr "" + +#: signal_aspect_ui.lua +msgid "<none>" +msgstr "" + +#: signal_aspect_ui.lua +msgid "Assigned distant signal to the main signal at @1" +msgstr "" + +#: signal_aspect_ui.lua +msgid "Assigned signal to the TCB at @1" +msgstr "" + +#: signal_aspect_ui.lua tool.lua +msgid "Clear" +msgstr "" + +#: signal_aspect_ui.lua +msgid "" +"Configuring Signal: Influence point of another signal is already present!" +msgstr "" + +#: signal_aspect_ui.lua +msgid "Configuring Signal: Node is too far away. Aborted." +msgstr "" + +#: signal_aspect_ui.lua +msgid "" +"Configuring Signal: Please look in train's driving direction and punch rail " +"to set influence point." +msgstr "" + +#: signal_aspect_ui.lua +msgid "Configuring Signal: Successfully set influence point" +msgstr "" + +#: signal_aspect_ui.lua +msgid "Configuring Signal: This is not a normal two-connection rail! Aborted." +msgstr "" + +#: signal_aspect_ui.lua +msgid "Dst: @1" +msgstr "" + +#: signal_aspect_ui.lua +msgid "Influence point is not set." +msgstr "" + +#: signal_aspect_ui.lua +msgid "Influence point is set at @1." +msgstr "" + +#: signal_aspect_ui.lua +msgid "Modify" +msgstr "" + +#: signal_aspect_ui.lua +msgid "Set distant signal: Punch the main signal to assign!" +msgstr "" + +#: signal_aspect_ui.lua +msgid "Set influence point" +msgstr "" + +#: smartroute.lua +msgid "Apply" +msgstr "" + +#: smartroute.lua +msgid "Route search: @1 found" +msgstr "" + +#: smartroute.lua +msgid "Search further" +msgstr "" + +#: smartroute.lua +msgid "Smartroute: No track section directly ahead!" +msgstr "" + +#: smartroute.lua +msgid "Smartroute: TCBS or routes don't exist here!" +msgstr "" + +#: tcb_ts_ui.lua +msgid " (invalid)" +msgstr "" + +#: tcb_ts_ui.lua +msgid "@1 locks in state @2" +msgstr "" + +#: tcb_ts_ui.lua +msgid "A route is requested from this signal:" +msgstr "" + +#: tcb_ts_ui.lua +msgid "Add locks" +msgstr "" + +#: tcb_ts_ui.lua +msgid "Assign a signal" +msgstr "" + +#: tcb_ts_ui.lua +msgid "Automatic Working is active." +msgstr "" + +#: tcb_ts_ui.lua +msgid "Automatic routesetting" +msgstr "" + +#: tcb_ts_ui.lua +msgid "Boundary TCBs:" +msgstr "" + +#: tcb_ts_ui.lua +msgid "Can't remove TCB: Both sides must have no signal assigned!" +msgstr "" + +#: tcb_ts_ui.lua +msgid "Can't remove track, a train is here!" +msgstr "" + +#: tcb_ts_ui.lua +msgid "Cancel" +msgstr "" + +#: tcb_ts_ui.lua +msgid "Cancel Route" +msgstr "" + +#: tcb_ts_ui.lua +msgid "" +"Cannot delete route which has ARS rules, please review and then delete " +"through edit dialog!" +msgstr "" + +#: tcb_ts_ui.lua +msgid "Clear locks" +msgstr "" + +#: tcb_ts_ui.lua +msgid "" +"Configuring TCB: Already existed at this position, it is now linked to this " +"TCB marker" +msgstr "" + +#: tcb_ts_ui.lua +msgid "Configuring TCB: Cannot use static signals for routesetting. Aborted." +msgstr "" + +#: tcb_ts_ui.lua +msgid "Configuring TCB: Internal error, TCBS doesn't exist. Aborted." +msgstr "" + +#: tcb_ts_ui.lua +msgid "Configuring TCB: Node is too far away. Aborted." +msgstr "" + +#: tcb_ts_ui.lua +msgid "Configuring TCB: Not a compatible signal. Aborted." +msgstr "" + +#: tcb_ts_ui.lua +msgid "Configuring TCB: Please punch the rail you want to assign this TCB to." +msgstr "" + +#: tcb_ts_ui.lua +msgid "Configuring TCB: Please punch the signal to assign." +msgstr "" + +#: tcb_ts_ui.lua +msgid "Configuring TCB: Successfully assigned signal." +msgstr "" + +#: tcb_ts_ui.lua +msgid "Configuring TCB: Successfully configured TCB" +msgstr "" + +#: tcb_ts_ui.lua +msgid "Configuring TCB: This is not a normal two-connection rail! Aborted." +msgstr "" + +#: tcb_ts_ui.lua +msgid "Create Interlocked Track Section" +msgstr "" + +#: tcb_ts_ui.lua +msgid "Delete this route" +msgstr "" + +#: tcb_ts_ui.lua +msgid "Disable Automatic Working" +msgstr "" + +#: tcb_ts_ui.lua +msgid "Distant signal triggers ARS" +msgstr "" + +#: tcb_ts_ui.lua +msgid "Edit" +msgstr "" + +#: tcb_ts_ui.lua +msgid "Enable Automatic Working" +msgstr "" + +#: tcb_ts_ui.lua +msgid "Error: TS modified, abort!" +msgstr "" + +#: tcb_ts_ui.lua +msgid "Final TCBS unset (legacy-style buffer route)" +msgstr "" + +#: tcb_ts_ui.lua +msgid "Fixed route locks (e.g. level crossings):" +msgstr "" + +#: tcb_ts_ui.lua +msgid "Link @1" +msgstr "" + +#: tcb_ts_ui.lua +msgid "Link: @1" +msgstr "" + +#: tcb_ts_ui.lua +msgid "Multiple routes are requested (first available is set):" +msgstr "" + +#: tcb_ts_ui.lua +msgid "NOTE: ARS is disabled." +msgstr "" + +#: tcb_ts_ui.lua +msgid "New (Manual)" +msgstr "" + +#: tcb_ts_ui.lua +msgid "No Link" +msgstr "" + +#: tcb_ts_ui.lua +msgid "No routes are yet defined." +msgstr "" + +#: tcb_ts_ui.lua +msgid "No trains on this section." +msgstr "" + +#: tcb_ts_ui.lua +msgid "Punch components to add fixed locks. (punch anything else = end)" +msgstr "" + +#: tcb_ts_ui.lua +msgid "Remove Section" +msgstr "" + +#: tcb_ts_ui.lua +msgid "Reset section state" +msgstr "" + +#: tcb_ts_ui.lua +#, fuzzy +msgid "Reset track section" +msgstr "改變行車方向" + +#: tcb_ts_ui.lua +msgid "Reset track section @1!" +msgstr "" + +#: tcb_ts_ui.lua +msgid "Route has been set." +msgstr "" + +#: tcb_ts_ui.lua +msgid "Route is re-set when a train passed." +msgstr "" + +#: tcb_ts_ui.lua +msgid "Route is set over this signal by:" +msgstr "" + +#: tcb_ts_ui.lua +msgid "Route is set: " +msgstr "" + +#: tcb_ts_ui.lua +msgid "Routes are not automatically set." +msgstr "" + +#: tcb_ts_ui.lua +msgid "Routes:" +msgstr "" + +#: tcb_ts_ui.lua +msgid "Section holds @1 route locks." +msgstr "" + +#: tcb_ts_ui.lua +#, fuzzy +msgid "Section name" +msgstr "車站名稱" + +#: tcb_ts_ui.lua +msgid "Set ARS default route" +msgstr "" + +#: tcb_ts_ui.lua +msgid "Set Route" +msgstr "" + +#: tcb_ts_ui.lua +msgid "Setting fixed locks finished!" +msgstr "" + +#: tcb_ts_ui.lua +msgid "Show" +msgstr "" + +#: tcb_ts_ui.lua +msgid "Show track section" +msgstr "" + +#: tcb_ts_ui.lua +msgid "Side @1" +msgstr "" + +#: tcb_ts_ui.lua +#, fuzzy +msgid "Signal at @1" +msgstr "色燈號誌機" + +#: tcb_ts_ui.lua +#, fuzzy +msgid "Signal name" +msgstr "色燈號誌機" + +#: tcb_ts_ui.lua +msgid "Signal on B side already assigned!" +msgstr "" + +#: tcb_ts_ui.lua +#, fuzzy +msgid "Signalling" +msgstr "色燈號誌機" + +#: tcb_ts_ui.lua +msgid "Smart Route" +msgstr "" + +#: tcb_ts_ui.lua +msgid "TCB Link: Select linked TCB now!" +msgstr "" + +#: tcb_ts_ui.lua +msgid "TCB already existed at this position, now linked to this node" +msgstr "" + +#: tcb_ts_ui.lua +msgid "TCB assigned to @1" +msgstr "" + +#: tcb_ts_ui.lua +msgid "This TCB has been removed. Please dig marker." +msgstr "" + +#: tcb_ts_ui.lua +msgid "" +"This is a pure distant signal\n" +"No route is currently set through." +msgstr "" + +#: tcb_ts_ui.lua +msgid "" +"This is an always-halt signal (e.g. a buffer)\n" +"No routes can be set from here." +msgstr "" + +#: tcb_ts_ui.lua +msgid "" +"This will clear the list of trains\n" +"and the routesetting status of this section.\n" +"Are you sure?" +msgstr "" + +#: tcb_ts_ui.lua +msgid "" +"This will remove the track section and set all its end points to End Of " +"Interlocking" +msgstr "" + +#: tcb_ts_ui.lua +msgid "Track Circuit Break" +msgstr "" + +#: tcb_ts_ui.lua +msgid "Track Circuit Break Configuration" +msgstr "" + +#: tcb_ts_ui.lua +msgid "Track Section Detail - @1" +msgstr "" + +#: tcb_ts_ui.lua +msgid "Trains on this section:" +msgstr "" + +#: tcb_ts_ui.lua +msgid "Unconfigured Track Circuit Break, right-click to assign." +msgstr "" + +#: tcb_ts_ui.lua +msgid "Wait for this route to be cancelled in order to do anything here." +msgstr "" + +#: tcb_ts_ui.lua +msgid "Waiting for route to be set..." +msgstr "" + +#: tcb_ts_ui.lua +msgid "Yes" +msgstr "" + +#: tcb_ts_ui.lua +msgid "" +"You cannot modify track sections when a route is set or a train is on the " +"section." +msgstr "" + +#: tool.lua +msgid "Emplace manual lock" +msgstr "" + +#: tool.lua +msgid "" +"Interlocking tool\n" +"Punch: Highlight track section\n" +"Place: check route locks/show track section info" +msgstr "" + +#: tool.lua +msgid "No route locks set" +msgstr "" + +#: tool.lua +msgid "No track section at this location!" +msgstr "" + +#: tool.lua +msgid "Node is not a track!" +msgstr "" + +#: tool.lua +msgid "Route lock inspector" +msgstr "" + +#: tool.lua +msgid "Route locks currently put:" +msgstr "" + +#: tsr_rail.lua +msgid "Point Speed Restriction Track" +msgstr "" + +#: tsr_rail.lua +msgid "Point speed restriction: @1" +msgstr "" + +#: tsr_rail.lua +msgid "Set point speed restriction:" +msgstr "" + +#: tsr_rail.lua +msgid "You are not allowed to configure this track without the @1 privilege." +msgstr "您沒有「@1」許可權,不能調整這段軌道。" + +#: tsr_rail.lua +msgid "You are not allowed to configure this track." +msgstr "您不能調整這段軌道。" + +#~ msgid "(Doors closed)" +#~ msgstr "(車門已關閉)" + +#~ msgid "3-way turnout" +#~ msgstr "三開道岔" + +#~ msgid "90+Angle Diamond Crossing Track" +#~ msgstr "交叉軌道 (其中一條軌道與座標軸平行)" + +#~ msgid "<No coupler>" +#~ msgstr "<無連結器>" + +#~ msgid "@1 Platform (45 degree)" +#~ msgstr "較高的@1月臺 (45°)" + +#~ msgid "@1 Platform (high)" +#~ msgstr "較高的@1月臺" + +#~ msgid "@1 Platform (low)" +#~ msgstr "較低的@1月臺" + +#~ msgid "@1 Platform (low, 45 degree)" +#~ msgstr "較低的@1月臺 (45°)" + +#~ msgid "@1 Slope" +#~ msgstr "@1斜坡" + +#~ msgid "ATC Kick command warning: doors are closed." +#~ msgstr "ATC 警告:車門已關閉,無法踢出乘客。" + +#~ msgid "ATC Kick command warning: train moving." +#~ msgstr "ATC 警告:火車正在移動,無法踢出乘客。" + +#~ msgid "ATC Reverse command warning: didn't reverse train, train moving." +#~ msgstr "ATC 警告:火車正在移動,無法改變行車方向。" + +#~ msgid "ATC command parse error: Unknown command: @1" +#~ msgstr "ATC 語法錯誤:未知命令:@1" + +#~ msgid "ATC command syntax error: I statement not closed: @1" +#~ msgstr "ATC 語法錯誤:「I」命令不完整:@1" + +#~ msgid "ATC controller" +#~ msgstr "ATC 控制器" + +#~ msgid "" +#~ "ATC controller, mode @1\n" +#~ "Channel: @2" +#~ msgstr "" +#~ "ATC 控制器\n" +#~ "模式:@1\n" +#~ "頻道:@2" + +#~ msgid "" +#~ "ATC controller, mode @1\n" +#~ "Command: @2" +#~ msgstr "" +#~ "ATC 控制器\n" +#~ "模式:@1\n" +#~ "命令:@2" + +#~ msgid "Access to @1" +#~ msgstr "可前往@1" + +#~ msgid "Andrew's Cross" +#~ msgstr "平交道號誌燈" + +#~ msgid "Back of train would end up off track, cancelling." +#~ msgstr "火車後部不在軌道上。" + +#~ msgid "Big Industrial Train Engine" +#~ msgstr "大型工業用火車頭" + +#~ msgid "Boiler" +#~ msgstr "鍋爐" + +#~ msgid "Box Wagon" +#~ msgstr "貨運車廂" + +#~ msgid "Buffer and Chain Coupler" +#~ msgstr "鏈式連結器" + +#~ msgid "Bumper" +#~ msgstr "保險槓" + +#~ msgid "Can not couple: The couplers of the trains do not match (@1 and @2)." +#~ msgstr "您無法連結這兩節車廂:這兩節車廂使用不同的連結器 (@1和@2)。" + +#~ msgid "Can't get on: wagon full or doors closed!" +#~ msgstr "無法上車:車門已關閉或車廂已滿。" + +#, fuzzy +#~ msgid "Can't place: Not enough slope items left (@1 required)" +#~ msgstr "無法放置斜坡:您沒有足夠的鐵路斜坡放置工具 (您總共需要@1個)" + +#, fuzzy +#~ msgid "Can't place: There's no slope of length @1" +#~ msgstr "無法放置斜坡:advtrains 不支援長度為@1米的斜坡。" + +#, fuzzy +#~ msgid "Can't place: no supporting node at upper end." +#~ msgstr "無法放置斜坡:較高階沒有支撐方塊。" + +#, fuzzy +#~ msgid "Can't place: not pointing at node" +#~ msgstr "無法放置斜坡:您沒有選擇任何方塊。" + +#~ msgid "Can't place: protected position!" +#~ msgstr "無法放置:此區域已被保護。" + +#, fuzzy +#~ msgid "Can't place: space occupied!" +#~ msgstr "無法放置斜坡:此區域已被佔用。" + +#~ msgid "Chimney" +#~ msgstr "煙囪" + +#~ msgid "Command" +#~ msgstr "命令" + +#~ msgid "Command (on)" +#~ msgstr "命令 (啟用時)" + +#~ msgid "Default Seat (driver stand)" +#~ msgstr "預設座位 (司機座位)" + +#~ msgid "Dep. Speed" +#~ msgstr "出發速度" + +#~ msgid "Deprecated Track" +#~ msgstr "請不要使用" + +#~ msgid "Detailed Steam Engine" +#~ msgstr "精細的蒸汽機車" + +#~ msgid "Detector Rail" +#~ msgstr "探測軌道" + +#~ msgid "Diagonal Diamond Crossing Track" +#~ msgstr "交叉軌道" + +#~ msgid "Digiline channel" +#~ msgstr "Digiline 頻道" + +#~ msgid "Door Delay" +#~ msgstr "車門關閉時間" + +#~ msgid "" +#~ "Doors are closed. Use Sneak+rightclick to ignore the closed doors and get " +#~ "off." +#~ msgstr "車門已關閉,請使用潛行+右鍵單擊下車。" + +#, fuzzy +#~ msgid "Driver Stand" +#~ msgstr "司機座位" + +#~ msgid "Driver Stand (left)" +#~ msgstr "左側司機座位" + +#~ msgid "Driver Stand (right)" +#~ msgstr "右側司機座位" + +#~ msgid "Driver stand" +#~ msgstr "司機座位" + +#~ msgid "Driver's cab" +#~ msgstr "駕駛室" + +#~ msgid "Get off" +#~ msgstr "下車" + +#~ msgid "Get off (forced)" +#~ msgstr "強制下車" + +#~ msgid "Industrial Train Engine" +#~ msgstr "工業用火車頭" + +#~ msgid "Industrial tank wagon" +#~ msgstr "液體運輸車廂" + +#~ msgid "Industrial wood wagon" +#~ msgstr "木材運輸車廂" + +#~ msgid "Japanese Train Engine" +#~ msgstr "高速列車車頭" + +#~ msgid "Japanese Train Inter-Wagon Connection" +#~ msgstr "日本火車連結器" + +#~ msgid "Japanese Train Wagon" +#~ msgstr "高速列車車廂" + +#, fuzzy +#~ msgid "Japanese signal pole" +#~ msgstr "高速列車車廂" + +#~ msgid "Kick out passengers" +#~ msgstr "踢出乘客" + +#~ msgid "Lampless Signal" +#~ msgstr "臂木式號誌機" + +#~ msgid "Line" +#~ msgstr "火車線路" + +#~ msgid "Loading Track" +#~ msgstr "裝貨軌道" + +#~ msgid "Lock couples" +#~ msgstr "鎖定連結處" + +#~ msgid "No such lua entity." +#~ msgstr "您沒有指向一個可以用火車複製工具複製的物體。" + +#~ msgid "No such train: @1." +#~ msgstr "ID 為「@1」的列車不存在。" + +#~ msgid "No such wagon: @1." +#~ msgstr "ID 為「@1」的車廂不存在。" + +#, fuzzy +#~ msgid "Not allowed to do this." +#~ msgstr "您不能調整這段軌道。" + +#~ msgid "Passenger Wagon" +#~ msgstr "客車" + +#, fuzzy +#~ msgid "Passenger area" +#~ msgstr "客車" + +#~ msgid "" +#~ "Passive Component Naming Tool\n" +#~ "\n" +#~ "Right-click to name a passive component." +#~ msgstr "" +#~ "被動元件命名工具\n" +#~ "\n" +#~ "右鍵單擊命名所選元件。" + +#~ msgid "Perpendicular Diamond Crossing Track" +#~ msgstr "垂直交叉軌道" + +#~ msgid "Routingcode" +#~ msgstr "路由碼" + +#~ msgid "Save" +#~ msgstr "儲存" + +#~ msgid "Save wagon properties" +#~ msgstr "儲存車廂屬性" + +#~ msgid "Scharfenberg Coupler" +#~ msgstr "Scharfenberg 式連結器" + +#~ msgid "Select seat:" +#~ msgstr "請選擇座位:" + +#~ msgid "Show Inventory" +#~ msgstr "顯示物品欄" + +#~ msgid "Speed:" +#~ msgstr "速度" + +#~ msgid "Station Code" +#~ msgstr "車站碼" + +#~ msgid "Station/Stop Track" +#~ msgstr "車站軌道" + +#~ msgid "Steam Engine" +#~ msgstr "蒸汽機車" + +#~ msgid "Stop Time" +#~ msgstr "停站時間" + +#~ msgid "Subway Passenger Wagon" +#~ msgstr "地鐵車廂" + +#~ msgid "Target:" +#~ msgstr "目標速度" + +#~ msgid "Text displayed inside train" +#~ msgstr "車廂內部顯示" + +#~ msgid "Text displayed outside on train" +#~ msgstr "車廂外部顯示" + +#, fuzzy +#~ msgid "That wagon does not exist!" +#~ msgstr "這節車廂沒有座位。" + +#~ msgid "The clipboard couldn't access the metadata. Copy failed." +#~ msgstr "無法複製:剪貼簿無法訪問元資料。" + +#~ msgid "The clipboard couldn't access the metadata. Paste failed." +#~ msgstr "無法貼上:剪貼簿無法訪問元資料。" + +#~ msgid "The clipboard is empty." +#~ msgstr "剪貼簿是空的。" + +#, fuzzy +#~ msgid "The track you are trying to place the wagon on is not long enough!" +#~ msgstr "軌道太短。" + +#~ msgid "The track you are trying to place the wagon on is not long enough." +#~ msgstr "軌道太短。" + +#, fuzzy +#~ msgid "This Wagon ID" +#~ msgstr "車廂已滿。" + +#, fuzzy +#~ msgid "This node can't be changed using the trackworker!" +#~ msgstr "您不能使用鐵路調整工具調整這個方塊。" + +#, fuzzy +#~ msgid "This node can't be rotated using the trackworker!" +#~ msgstr "您不能使用鐵路調整工具旋轉這個方塊。" + +#, fuzzy +#~ msgid "This node can't be rotated using the trackworker," +#~ msgstr "您不能使用鐵路調整工具旋轉這個方塊。" + +#~ msgid "This position is protected!" +#~ msgstr "這裡已被保護。" + +#~ msgid "This track can not be changed." +#~ msgstr "您不能調整這段軌道。" + +#, fuzzy +#~ msgid "This track can not be removed!" +#~ msgstr "您不能移除這段軌道。" + +#, fuzzy +#~ msgid "This track can not be rotated!" +#~ msgstr "您不能旋轉這段軌道。" + +#~ msgid "This wagon has no seats." +#~ msgstr "這節車廂沒有座位。" + +#~ msgid "This wagon is full." +#~ msgstr "車廂已滿。" + +#~ msgid "This wagon is owned by @1, you can't destroy it." +#~ msgstr "這是 @1 的車廂,您不能摧毀它。" + +#~ msgid "Track" +#~ msgstr "軌道" + +#~ msgid "" +#~ "Track Worker Tool\n" +#~ "\n" +#~ "Left-click: change rail type (straight/curve/switch)\n" +#~ "Right-click: rotate object" +#~ msgstr "" +#~ "鐵路調整工具\n" +#~ "\n" +#~ "左鍵單擊:切換軌道型別\n" +#~ "右鍵單擊:旋轉方塊" + +#, fuzzy +#~ msgid "Train " +#~ msgstr "已複製火車。" + +#~ msgid "Train copied." +#~ msgstr "已複製火車。" + +#~ msgid "" +#~ "Train copy/paste tool\n" +#~ "\n" +#~ "Left-click: copy train\n" +#~ "Right-click: paste train" +#~ msgstr "" +#~ "火車複製工具\n" +#~ "\n" +#~ "左鍵單擊:複製\n" +#~ "右鍵單擊:粘帖" + +#~ msgid "Unconfigured ATC controller" +#~ msgstr "ATC 控制器 (未配置)" + +#~ msgid "Unconfigured LuaATC component" +#~ msgstr "LuaATC 元件 (未配置)" + +#~ msgid "Unloading Track" +#~ msgstr "卸貨軌道" + +#~ msgid "Use Sneak+rightclick to bypass closed doors!" +#~ msgstr "請使用潛行+右鍵上車。" + +#, fuzzy +#~ msgid "Wagon Properties Tool" +#~ msgstr "車廂屬性" + +#~ msgid "Wagon properties" +#~ msgstr "車廂屬性" + +#~ msgid "Wallmounted Signal (left)" +#~ msgstr "壁掛式色燈號誌機 (左側)" + +#~ msgid "Wallmounted Signal (right)" +#~ msgstr "壁掛式色燈號誌機 (右側)" + +#~ msgid "Wallmounted Signal (top)" +#~ msgstr "懸掛式色燈號誌機" + +#~ msgid "" +#~ "Warning: If you destroy this wagon, you only get some steel back! If you " +#~ "are sure, hold Sneak and left-click the wagon." +#~ msgstr "" +#~ "警告:如果您摧毀此車廂,您只能拿到一些鋼方塊。如果您確定要摧毀這節車廂,請" +#~ "按潛行鍵並左鍵單擊此車廂。" + +#~ msgid "Wheel" +#~ msgstr "車輪" + +#~ msgid "Y-turnout" +#~ msgstr "對稱道岔" + +#~ msgid "You are not allowed to build near tracks at this protected position." +#~ msgstr "這裡已被保護,您不能在這裡的鐵路附近建任何東西。" + +#~ msgid "" +#~ "You are not allowed to build near tracks without the track_builder " +#~ "privilege." +#~ msgstr "您沒有「train_operator」許可權,不能在鐵路附近建任何東西。" + +#~ msgid "You are not allowed to build tracks at this protected position." +#~ msgstr "這裡已被保護,您不能在這裡建造鐵路。" + +#~ msgid "" +#~ "You are not allowed to build tracks without the track_builder privilege." +#~ msgstr "您沒有「train_operator」許可權,不能在這裡建造鐵路。" + +#~ msgid "" +#~ "You are not allowed to configure this LuaATC component without the @1 " +#~ "privilege." +#~ msgstr "您沒有「@1」許可權,不能配置這個 LuaATC 元件。" + +#~ msgid "" +#~ "You are not allowed to couple trains without the train_operator privilege." +#~ msgstr "您沒有「train_operator」許可權,不能連結這兩節車廂。" + +#, fuzzy +#~ msgid "You are not allowed to modify this protected track." +#~ msgstr "這裡已被保護,您不能在這裡建造鐵路。" + +#~ msgid "" +#~ "You are not allowed to name LuaATC passive components without the @1 " +#~ "privilege." +#~ msgstr "您沒有「@1」許可權,不能命名這個元件。" + +#~ msgid "" +#~ "You are not allowed to operate turnouts and signals without the " +#~ "railway_operator privilege." +#~ msgstr "您沒有「railway_operator」許可權,不能控制鐵路設施。" + +#~ msgid "You do not have the @1 privilege." +#~ msgstr "您沒有「@1」許可權。" + +#, fuzzy +#~ msgid "You don't have the train_operator privilege." +#~ msgstr "您沒有「@1」許可權。" + +#~ msgid "" +#~ "You need to own at least one neighboring wagon to destroy this couple." +#~ msgstr "您必須至少擁有其中一節車廂才能分開這兩節車廂。" diff --git a/advtrains_interlocking/route_prog.lua b/advtrains_interlocking/route_prog.lua index 71ebdf3..96bd211 100644 --- a/advtrains_interlocking/route_prog.lua +++ b/advtrains_interlocking/route_prog.lua @@ -19,6 +19,9 @@ C. punch a turnout (or some other passive component) to fix its state (toggle) The route visualization will also be used to visualize routes after they have been programmed. ]]-- +-- Get current translator +local S = advtrains.interlocking.translate + -- TODO duplicate local lntrans = { "A", "B" } local function sigd_to_string(sigd) @@ -123,11 +126,11 @@ the distant signal aspect is determined as DANGER. ]]-- local function chat(pname, message) - minetest.chat_send_player(pname, "[Route programming] "..message) + minetest.chat_send_player(pname, S("[Route programming] ")..message) end local function clear_lock(locks, pname, pts) locks[pts] = nil - chat(pname, pts.." is no longer affected when this route is set.") + chat(pname, S("@1 is no longer affected when this route is set.", pts)) end local function otherside(s) @@ -175,7 +178,12 @@ function advtrains.interlocking.visualize_route(origin, route, context, tmp_lcks -- display locks for pts, state in pairs(v.locks) do local pos = minetest.string_to_pos(pts) - routesprite(context, pos, "fix"..k..pts, "at_il_route_lock.png", "Fixed in state '"..state.."' by route "..route.name.." until segment #"..k.." is freed.") + if not pos then + pos = advtrains.decode_pos(pts) + end + routesprite(context, pos, "fix"..k..pts, "at_il_route_lock.png", + S("Fixed in state @1 by route @2 until segment #@3 is freed.", state, route.name, k) + ) end end @@ -194,7 +202,8 @@ function advtrains.interlocking.visualize_route(origin, route, context, tmp_lcks if node_ok then yaw = advtrains.dir_to_angle(conns[otherside(sigd.s)].c) end - routemarker(context, sigd.p, "rteterm"..i, "at_il_route_end.png", yaw, route.name.." Terminal "..i) + routemarker(context, sigd.p, "rteterm"..i, "at_il_route_end.png", yaw, + S("@1 Terminal @2", route.name, i)) end end end @@ -202,7 +211,8 @@ function advtrains.interlocking.visualize_route(origin, route, context, tmp_lcks -- display locks set by player for pts, state in pairs(tmp_lcks) do local pos = advtrains.decode_pos(pts) - routesprite(context, pos, "fixp"..pts, "at_il_route_lock_edit.png", "Fixed in state '"..state.."' by route "..route.name.." (punch to unfix)", + routesprite(context, pos, "fixp"..pts, "at_il_route_lock_edit.png", + S("Fixed in state @1 by route @2 (punch to unfix)", state, route.name), function() clear_lock(tmp_lcks, pname, pts) end) end end @@ -213,7 +223,7 @@ local player_rte_prog = {} function advtrains.interlocking.init_route_prog(pname, sigd, default_route) if not minetest.check_player_privs(pname, "interlocking") then - minetest.chat_send_player(pname, "Insufficient privileges to use this!") + minetest.chat_send_player(pname, S("Insufficient privileges to use this!")) return end local rp = { @@ -237,7 +247,7 @@ function advtrains.interlocking.init_route_prog(pname, sigd, default_route) end player_rte_prog[pname] = rp advtrains.interlocking.visualize_route(sigd, rp.route, "prog_"..pname, rp.tmp_lcks, pname) - minetest.chat_send_player(pname, "Route programming mode active. Punch TCBs to add route segments, punch turnouts to lock them.") + minetest.chat_send_player(pname, S("Route programming mode active. Punch TCBs to add route segments, punch turnouts to lock them.")) end local function get_last_route_item(origin, route) @@ -250,34 +260,36 @@ end local function do_advance_route(pname, rp, sigd, tsref) table.insert(rp.route, {next = sigd, locks = rp.tmp_lcks}) rp.tmp_lcks = {} - chat(pname, "Added track section '"..(tsref and (tsref.name or "") or "--EOI--").."' to the route.") + chat(pname, S("Added track section @1 to the route.", (tsref and (tsref.name or "") or "--EOI--"))) end local function finishrpform(pname) local rp = player_rte_prog[pname] if not rp then return end - local form = "size[7,6]label[0.5,0.5;Finish programming route]" + rp.route.use_rscache = true + + local form = "size[7,6]label[0.5,0.5;"..S("Finish programming route").."]" local terminal = get_last_route_item(rp.origin, rp.route) if terminal then local term_tcbs = advtrains.interlocking.db.get_tcbs(terminal) if term_tcbs.signal then local signalname = (term_tcbs.signal_name or "") .. sigd_to_string(terminal) - form = form .. "label[0.5,1.5;Route ends at signal:]" + form = form .. "label[0.5,1.5;"..S("Route ends at signal:").."]" form = form .. "label[0.5,2 ;"..signalname.."]" else - form = form .. "label[0.5,1.5;WARNING: Route does not end at a signal.]" - form = form .. "label[0.5,2 ;Routes should in most cases end at signals.]" - form = form .. "label[0.5,2.5;Cancel if you are unsure!]" + form = form .. "label[0.5,1.5;"..S("WARNING: Route does not end at a signal.").."]" + form = form .. "label[0.5,2 ;"..S("Routes should in most cases end at signals.").."]" + form = form .. "label[0.5,2.5;"..S("Cancel if you are unsure!").."]" end else - form = form .. "label[0.5,1.5;Route leads into]" - form = form .. "label[0.5,2 ;non-interlocked area]" + form = form .. "label[0.5,1.5;"..S("Route leads into").."]" + form = form .. "label[0.5,2 ;"..S("non-interlocked area").."]" end - form = form.."field[0.8,3.5;5.2,1;name;Enter Route Name;]" - form = form.."button_exit[0.5,4.5; 5,1;save;Save Route]" - + form = form.."field[0.8,3.5;5.2,1;name;"..S("Enter Route Name")..";]" + form = form.."checkbox[0.8,4.0;use_rscache;"..S("Auto lock turnouts")..";true]" + form = form.."button_exit[0.5,5.0; 5,1;save;"..S("Save Route").."]" minetest.show_formspec(pname, "at_il_routepf", form) end @@ -324,7 +336,7 @@ local function check_advance_valid(tcbpos, rp) local adv_tcbs = advtrains.interlocking.db.get_tcbs(this_sigd) local next_tsid = adv_tcbs.ts_id local can_over, over_ts, next_tc_bs = false, nil, nil - local cannotover_rsn = "Next section is diverging (>2 TCBs)" + local cannotover_rsn = S("Next section is diverging (>2 TCBs)") if next_tsid then -- you may not advance over EOI. While this is technically possible, -- in practise this just enters an unnecessary extra empty route item. @@ -332,7 +344,7 @@ local function check_advance_valid(tcbpos, rp) next_tc_bs = over_ts.tc_breaks can_over = #next_tc_bs <= 2 else - cannotover_rsn = "End of interlocking" + cannotover_rsn = S("End of interlocking") end local over_sigd = nil @@ -374,29 +386,29 @@ local function show_routing_form(pname, tcbpos, message) -- show nothing at all -- In all cases, Discard and Backtrack buttons needed. - local form = "size[7,9.5]label[0.5,0.5;Advance/Complete Route]" + local form = "size[7,9.5]label[0.5,0.5;"..S("Advance/Complete Route").."]" if message then form = form .. "label[0.5,1;"..message.."]" end if advance_valid and not is_endpoint then - form = form.. "label[0.5,1.8;Advance to next route section]" + form = form.. "label[0.5,1.8;"..S("Advance to next route section").."]" form = form.."image_button[0.5,2.2; 5,1;at_il_routep_advance.png;advance;]" form = form.. "label[0.5,3.5;-------------------------]" else - form = form.. "label[0.5,2.3;This TCB is not suitable as]" - form = form.. "label[0.5,2.8;route continuation.]" + form = form.. "label[0.5,2.3;"..S("This TCB is not suitable as").."]" + form = form.. "label[0.5,2.8;"..S("route continuation.").."]" end if advance_valid or is_endpoint then - form = form.. "label[0.5,3.8;Finish route HERE]" + form = form.. "label[0.5,3.8;"..S("Finish route HERE").."]" form = form.."image_button[0.5, 4.2; 5,1;at_il_routep_end_here.png;endhere;]" if can_over then - form = form.. "label[0.5,5.3;Finish route at end of NEXT section]" + form = form.. "label[0.5,5.3;"..S("Finish route at end of NEXT section").."]" form = form.."image_button[0.5,5.7; 5,1;at_il_routep_end_over.png;endover;]" else - form = form.. "label[0.5,5.3;Advancing over next section is]" - form = form.. "label[0.5,5.8;impossible at this place.]" + form = form.. "label[0.5,5.3;"..S("Advancing over next section is").."]" + form = form.. "label[0.5,5.8;"..S("impossible at this place.").."]" if cannotover_rsn then form = form.. "label[0.5,6.3;"..cannotover_rsn.."]" end @@ -405,9 +417,9 @@ local function show_routing_form(pname, tcbpos, message) form = form.. "label[0.5,7;-------------------------]" if #rp.route > 0 then - form = form.."button[0.5,7.4; 5,1;retract;Step back one section]" + form = form.."button[0.5,7.4; 5,1;retract;"..S("Step back one section").."]" end - form = form.."button[0.5,8.4; 5,1;cancel;Cancel route programming]" + form = form.."button[0.5,8.4; 5,1;cancel;"..S("Cancel route programming").."]" minetest.show_formspec(pname, "at_il_rprog_"..minetest.pos_to_string(tcbpos), form) end @@ -458,12 +470,12 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) end rp.tmp_locks = rp.route[#rp.route].locks rp.route[#rp.route] = nil - chat(pname, "Route section "..(#rp.route+1).." removed.") + chat(pname, S("Route section @1 removed.", (#rp.route+1))) end if fields.cancel then player_rte_prog[pname] = nil advtrains.interlocking.clear_visu_context("prog_"..pname) - chat(pname, "Route discarded.") + chat(pname, S("Route discarded.")) minetest.close_formspec(pname, formname) return end @@ -474,6 +486,13 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) end if formname == "at_il_routepf" then + -- if it's the checkbox that changed handle before returning (stupid checkboxes) + if fields.use_rscache then + local rp = player_rte_prog[pname] + if rp then + rp.route.use_rscache = core.is_yes(fields.use_rscache) + end + end if not fields.save or not fields.name then return end if fields.name == "" then -- show form again @@ -484,27 +503,25 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) local rp = player_rte_prog[pname] if rp then if #rp.route <= 0 then - chat(pname, "Cannot program route without a target") + chat(pname, S("Cannot program route without a target")) return end local tcbs = advtrains.interlocking.db.get_tcbs(rp.origin) if not tcbs then - chat(pname, "The origin TCB has become unknown during programming. Try again.") + chat(pname, S("The origin TCB has become unknown during programming. Try again.")) return end local terminal = get_last_route_item(rp.origin, rp.route) rp.route.terminal = terminal rp.route.name = fields.name - -- new routes now always use the rscache - rp.route.use_rscache = true table.insert(tcbs.routes, rp.route) advtrains.interlocking.clear_visu_context("prog_"..pname) player_rte_prog[pname] = nil - chat(pname, "Successfully programmed route.") + chat(pname, S("Successfully programmed route.")) advtrains.interlocking.show_route_edit_form(pname, rp.origin, #tcbs.routes) return @@ -527,7 +544,7 @@ minetest.register_on_punchnode(function(pos, node, player, pointed_thing) local meta = minetest.get_meta(pos) local tcbpts = meta:get_string("tcb_pos") if tcbpts == "" then - chat(pname, "This TCB is unconfigured, you first need to assign it to a rail") + chat(pname, S("This TCB is unconfigured, you first need to assign it to a rail")) return end local tcbpos = minetest.string_to_pos(tcbpts) @@ -550,7 +567,7 @@ minetest.register_on_punchnode(function(pos, node, player, pointed_thing) else local state = advtrains.getstate(pos) rp.tmp_lcks[pts] = state - chat(pname, pts.." is held in "..state.." position when this route is set and freed ") + chat(pname, S("@1 is held in @2 position when this route is set and freed ", pts, state)) end advtrains.interlocking.visualize_route(rp.origin, rp.route, "prog_"..pname, rp.tmp_lcks, pname) return diff --git a/advtrains_interlocking/route_ui.lua b/advtrains_interlocking/route_ui.lua index 3c7bd64..9ecc947 100644 --- a/advtrains_interlocking/route_ui.lua +++ b/advtrains_interlocking/route_ui.lua @@ -1,6 +1,9 @@ -- route_ui.lua -- User interface for showing and editing routes +-- Get current translator +local S = advtrains.interlocking.translate + local atil = advtrains.interlocking local ildb = atil.db local F = advtrains.formspec @@ -17,7 +20,7 @@ local sel_rpartcache = {} function atil.show_route_edit_form(pname, sigd, routeid, sel_rpartidx) if not minetest.check_player_privs(pname, {train_operator=true, interlocking=true}) then - minetest.chat_send_player(pname, "Insufficient privileges to use this!") + minetest.chat_send_player(pname, S("Insufficient privileges to use this!")) return end @@ -26,9 +29,9 @@ function atil.show_route_edit_form(pname, sigd, routeid, sel_rpartidx) local route = tcbs.routes[routeid] if not route then return end - local form = "size[9,11]label[0.5,0.2;Route overview]" - form = form.."field[0.8,1.2;6.5,1;name;Route name;"..minetest.formspec_escape(route.name).."]" - form = form.."button[7.0,0.9;1.5,1;setname;Set]" + local form = "size[9,11]label[0.5,0.2;"..S("Route overview").."]" + form = form.."field[0.8,1.2;6.5,1;name;"..S("Route name")..";"..minetest.formspec_escape(route.name).."]" + form = form.."button[7.0,0.9;1.5,1;setname;"..S("Set").."]" -- construct textlist for route information local tab = {} @@ -47,12 +50,12 @@ function atil.show_route_edit_form(pname, sigd, routeid, sel_rpartidx) while c_sigd and i<=#route do c_tcbs = ildb.get_tcbs(c_sigd) if not c_tcbs then - itab(i, "-!- No TCBS at "..sigd_to_string(c_sigd)..". Please reconfigure route!", "err", nil) + itab(i, "-!- "..S("TCB at @1 is missing", sigd_to_string(c_sigd)), "err", nil) break end c_ts_id = c_tcbs.ts_id if not c_ts_id then - itab(i, "-!- No track section adjacent to "..sigd_to_string(c_sigd)..". Please reconfigure route!", "err", nil) + itab(i, "-!- "..S("Track section after @1 missing", sigd_to_string(c_sigd)), "err", nil) break end c_ts = ildb.get_ts(c_ts_id) @@ -70,7 +73,7 @@ function atil.show_route_edit_form(pname, sigd, routeid, sel_rpartidx) local pos = advtrains.decode_pos(pts) itab(i, "L "..pts.." -> "..state, "lock", pos) if not advtrains.is_passive(pos) then - itab(i, "-!- No passive component at "..pts..". Please reconfigure route!", "err", nil) + itab(i, "-!- "..S("Turnout/component missing at @1", minetest.pos_to_string(pos)), "err", nil) break end end @@ -79,8 +82,14 @@ function atil.show_route_edit_form(pname, sigd, routeid, sel_rpartidx) local nvar = c_rseg.next if nvar then local re_tcbs = ildb.get_tcbs({p = nvar.p, s = (nvar.s==1) and 2 or 1}) - if not re_tcbs or not re_tcbs.ts_id or re_tcbs.ts_id~=c_ts_id then - itab(i, "-!- At "..sigd_to_string(c_sigd)..".Section Start and End do not match!", "err", nil) + if not re_tcbs then + itab(i, "-!- "..S("TCB at @1 is missing", minetest.pos_to_string(nvar.p)), "err", nil) + break + elseif not re_tcbs.ts_id then + itab(i, "-!- "..S("TCB at @1 is not assigned to previous track section", minetest.pos_to_string(nvar.p)), "err", nil) + break + elseif re_tcbs.ts_id~=c_ts_id then + itab(i, "-!- "..S("TCB at @1 has different section than previous TCB", minetest.pos_to_string(nvar.p)), "err", nil) break end end @@ -97,6 +106,8 @@ function atil.show_route_edit_form(pname, sigd, routeid, sel_rpartidx) itab(i, "E (none)", "end", nil) end + itab(i, S("(More Options)"), "advanced", nil) + if not sel_rpartidx then sel_rpartidx = 1 end form = form.."textlist[0.5,2;3.5,3.9;routelog;"..table.concat(tab, ",")..";"..(sel_rpartidx or 1)..";false]" @@ -113,10 +124,10 @@ function atil.show_route_edit_form(pname, sigd, routeid, sel_rpartidx) -- main aspect list local signalpos = s_tcbs and s_tcbs.signal if signalpos and rseg then - form = form..F.label(4.5, 2, "Signal Aspect:") + form = form..F.label(4.5, 2, S("Signal Aspect:")) local ndef = signalpos and advtrains.ndb.get_ndef(signalpos) if ndef and ndef.advtrains and ndef.advtrains.main_aspects then - local entries = { "<Default Aspect>" } + local entries = { S("<Default Aspect>") } local sel = 1 for i, mae in ipairs(ndef.advtrains.main_aspects) do entries[i+1] = mae.description @@ -133,21 +144,25 @@ function atil.show_route_edit_form(pname, sigd, routeid, sel_rpartidx) -- defaults to false for the very first signal and true for all others (= minimal user configuration overhead) -- Note: on save, the value will be fixed at either false or true end - form = form..string.format("checkbox[4.5,4.0;sa_distant;Announce distant signal;%s]", assign_dst) + form = form..string.format("checkbox[4.5,4.0;sa_distant;"..S("Announce distant signal")..";%s]", assign_dst) else - form = form..F.label(4.5, 2, "No Signal at this TCB") + form = form..F.label(4.5, 2, S("No Signal at this TCB")) end elseif sel_rpart and sel_rpart.section then local rseg = route[sel_rpart.seg] if rseg then - form = form..F.label(4.5, 2, "Section Options:") + form = form..F.label(4.5, 2, S("Section Options:")) -- checkbox for call-on - form = form..string.format("checkbox[4.5,4.0;se_callon;Call-on (section may be occupied);%s]", rseg.call_on) + form = form..string.format("checkbox[4.5,4.0;se_callon;"..S("Call-on (section may be occupied)")..";%s]", rseg.call_on) end + elseif sel_rpart and sel_rpart.advanced then + form = form..F.label(4.5, 2, S("Advanced Options:")) + -- checkbox for call-on + form = form..string.format("checkbox[4.5,4.0;ad_use_rscache;"..S("Auto lock turnouts")..";%s]", route.use_rscache) elseif sel_rpart and sel_rpart.err then - form = form.."textarea[4.5,2.5;4,4;errorta;Error:;"..tab[sel_rpartidx].."]" + form = form.."textarea[4.5,2.5;4,4;errorta;"..S("Error:")..";"..tab[sel_rpartidx].."]" else - form = form..F.label(4.5, 2, "<< Select a route part to edit options") + form = form..F.label(4.5, 2, S("<< Select a route part to edit options")) end form = form.."button[0.5,6;1,1;prev;<<<]" @@ -158,15 +173,15 @@ function atil.show_route_edit_form(pname, sigd, routeid, sel_rpartidx) --if route.smartroute_generated or route.default_autoworking then -- form = form.."button[3.5,6;2,1;noautogen;Clr Autogen]" --end - form = form.."button[5.5,6;3,1;delete;Delete Route]" - form = form.."button[0.5,7;3,1;back;Back to signal]" - form = form.."button[3.5,7;2,1;clone;Clone Route]" - form = form.."button[5.5,7;3,1;newfrom;New From Route]" + form = form.."button[5.5,6;3,1;delete;"..S("Delete Route").."]" + form = form.."button[0.5,7;3,1;back;"..S("Back to signal").."]" + form = form.."button[3.5,7;2,1;clone;"..S("Clone Route").."]" + form = form.."button[5.5,7;3,1;newfrom;"..S("New From Route").."]" --atdebug(route.ars) form = form.."style[ars;font=mono]" - form = form.."textarea[0.8,8.3;5,3;ars;ARS Rule List;"..atil.ars_to_text(route.ars).."]" - form = form.."button[5.5,8.23;3,1;savears;Save ARS List]" + form = form.."textarea[0.8,8.3;5,3;ars;"..S("ARS Rule List")..";"..atil.ars_to_text(route.ars).."]" + form = form.."button[5.5,8.23;3,1;savears;"..S("Save ARS List").."]" local formname = "at_il_routeedit_"..minetest.pos_to_string(sigd.p).."_"..sigd.s.."_"..routeid minetest.show_formspec(pname, formname, form) @@ -244,6 +259,9 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) return end end + if fields.ad_use_rscache then + route.use_rscache = minetest.is_yes(fields.ad_use_rscache) + end --if fields.noautogen then -- route.smartroute_generated = nil diff --git a/advtrains_interlocking/routesetting.lua b/advtrains_interlocking/routesetting.lua index 6544a92..353b521 100644 --- a/advtrains_interlocking/routesetting.lua +++ b/advtrains_interlocking/routesetting.lua @@ -1,5 +1,8 @@ -- Setting and clearing routes +-- Get current translator +local S = advtrains.interlocking.translate + -- TODO duplicate local lntrans = { "A", "B" } local function sigd_to_string(sigd) @@ -52,7 +55,7 @@ function ilrs.set_route(signal, route, try) c_tcbs = ildb.get_tcbs(c_sigd) if not c_tcbs then if not try then atwarn("Did not find TCBS",c_sigd,"while setting route",rtename,"of",signal) end - return false, "No TCB found at "..sigd_to_string(c_sigd)..". Please update or reconfigure route!" + return false, S("No TCB found at @1. Please update or reconfigure route!", sigd_to_string(c_sigd)) end if i == 1 then nodst = c_tcbs.nodst @@ -60,7 +63,7 @@ function ilrs.set_route(signal, route, try) c_ts_id = c_tcbs.ts_id if not c_ts_id then if not try then atwarn("Encountered End-Of-Interlocking while setting route",rtename,"of",signal) end - return false, "No track section adjacent to "..sigd_to_string(c_sigd)..". Please reconfigure route!" + return false, S("No track section adjacent to @1. Please reconfigure route!", sigd_to_string(c_sigd)) end c_ts = ildb.get_ts(c_ts_id) c_rseg = route[i] @@ -68,17 +71,18 @@ function ilrs.set_route(signal, route, try) if not c_ts then if not try then atwarn("Encountered ts missing during a real run of routesetting routine, at ts=",c_ts_id,"while setting route",rtename,"of",signal) end - return false, "Section '"..(c_ts_id).."' not found!", c_ts_id, nil + return false, S("Section '@1' not found!", c_ts_id), c_ts_id, nil elseif c_ts.route then if not try then atwarn("Encountered ts lock during a real run of routesetting routine, at ts=",c_ts_id,"while setting route",rtename,"of",signal) end - return false, "Section '"..(c_ts.name or c_ts_id).."' already has route set from "..sigd_to_string(c_ts.route.origin)..":\n"..c_ts.route.rsn, c_ts_id, nil + return false, S("Section '@1' already has route set from @2:", (c_ts.name or c_ts_id), sigd_to_string(c_ts.route.origin)) + .."\n"..c_ts.route.rsn, c_ts_id, nil end if c_ts.trains and #c_ts.trains>0 then if c_rseg.call_on then --atdebug("Routesetting: Call-on situation in", c_ts_id) else if not try then atwarn("Encountered ts occupied during a real run of routesetting routine, at ts=",c_ts_id,"while setting route",rtename,"of",signal) end - return false, "Section '"..(c_ts.name or c_ts_id).."' is occupied!", c_ts_id, nil + return false, S("Section '@1' is occupied!", (c_ts.name or c_ts_id)), c_ts_id, nil end end @@ -86,8 +90,8 @@ function ilrs.set_route(signal, route, try) local c_locks = {} if route.use_rscache and c_ts.rs_cache and c_rseg.next then -- rscache needs to be enabled, present and next must be defined - start_pkey = advtrains.encode_pos(c_sigd.p) - end_pkey = advtrains.encode_pos(c_rseg.next.p) + local start_pkey = advtrains.encode_pos(c_sigd.p) + local end_pkey = advtrains.encode_pos(c_rseg.next.p) if c_ts.rs_cache[start_pkey] and c_ts.rs_cache[start_pkey][end_pkey] then for lp,lst in pairs(c_ts.rs_cache[start_pkey][end_pkey]) do --atdebug("Add lock from RSCache:",lp,"->",lst) @@ -113,18 +117,18 @@ function ilrs.set_route(signal, route, try) local confl = ilrs.has_route_lock(lp) if confl then if not try then atwarn("Encountered route lock while a real run of routesetting routine, at position",pos,"while setting route",rtename,"of",signal) end - return false, "Lock conflict at "..minetest.pos_to_string(pos)..", Held locked by:\n"..confl, nil, lp + return false, S("Lock conflict at @1, Held locked by:", minetest.pos_to_string(pos)).."\n"..confl, nil, lp elseif not try then advtrains.setstate(pos, state) end end if not try then - ilrs.add_route_lock(lp, c_ts_id, "Route '"..rtename.."' from signal '"..signalname.."'", signal) + ilrs.add_route_lock(lp, c_ts_id, S("Route @1 from signal @2", rtename, signalname), signal) c_lckp[#c_lckp+1] = lp end else if not try then atwarn("Encountered route lock misconfiguration (no passive component) while a real run of routesetting routine, at position",pts,"while setting route",rtename,"of",signal) end - return false, "No passive component at "..minetest.pos_to_string(pos)..". Please update track section or reconfigure route!" + return false, S("Turnout/component missing at @1. Please update track section or reconfigure route!", minetest.pos_to_string(pos)) end end -- sanity check, is section at next the same as the current? @@ -134,7 +138,7 @@ function ilrs.set_route(signal, route, try) if (not re_tcbs or not re_tcbs.ts_id or re_tcbs.ts_id~=c_ts_id) and route[i+1] then --FIX 2025-01-08: in old worlds the final TCB may be wrong (it didn't matter back then), don't error out here (route still shown invalid in UI) if not try then atwarn("Encountered inconsistent ts (front~=back) while a real run of routesetting routine, at position",pts,"while setting route",rtename,"of",signal) end - return false, "TCB at "..minetest.pos_to_string(nvar.p).." has different section than previous TCB. Please update track section or reconfigure route!" + return false, S("TCB at @1 has different section than previous TCB. Please update track section or reconfigure route!", minetest.pos_to_string(nvar.p)) end end -- reserve ts and write locks @@ -146,7 +150,7 @@ function ilrs.set_route(signal, route, try) c_ts.route = { origin = signal, entry = c_sigd, - rsn = "Route '"..rtename.."' from signal '"..signalname.."', segment #"..i, + rsn = S("Route @1 from signal @2, segment #@3", rtename, signalname, i), first = first, } c_ts.route_post = { @@ -363,7 +367,7 @@ end -- route setting -- Call this function to set and cancel routes! -- sigd, tcbs: self-explanatory --- newrte: If a new route should be set, the route index of it (in tcbs.routes). nil otherwise +-- newrte: If a new route should be set, the route index of it (in tcbs.routes). Can also be a table (multi-ars). nil otherwise -- cancel: true in combination with newrte=nil causes cancellation of the current route. function ilrs.update_route(sigd, tcbs, newrte, cancel) --atdebug("Update_Route for",sigd,tcbs.signal_name) @@ -390,37 +394,66 @@ function ilrs.update_route(sigd, tcbs, newrte, cancel) if tcbs.route_committed then return end - if newrte then tcbs.routeset = newrte end + if newrte then + if type(newrte)=="table" and not next(newrte) then + error("update_route got multi-ARS with empty table, this is not allowed") + end + tcbs.routeset = newrte + else + if type(tcbs.routeset)=="table" and not next(tcbs.routeset) then + -- just unset, don't error + atwarn(sigd, "had multi-ARS route set with empty list! Cancelled!") + tcbs.routeset = nil + return + end + end --atdebug("Setting:",tcbs.routeset) - local succ, rsn, cbts, cblk - local route = tcbs.routes[tcbs.routeset] - if route then - succ, rsn, cbts, cblk = ilrs.set_route(sigd, route) + -- check: single-ars or multi-ars? + local multi_rte + if type(tcbs.routeset) == "table" then + multi_rte = tcbs.routeset else - succ = false - rsn = attrans("Route state changed.") + multi_rte = {tcbs.routeset} end - if not succ then - tcbs.route_rsn = rsn - --atdebug("Routesetting failed:",rsn) - -- add cbts or cblk to callback table - if cbts then - --atdebug("cbts =",cbts) - if not ilrs.rte_callbacks.ts[cbts] then ilrs.rte_callbacks.ts[cbts]={} end - advtrains.insert_once(ilrs.rte_callbacks.ts[cbts], sigd, sigd_equal) - end - if cblk then - --atdebug("cblk =",cblk) - if not ilrs.rte_callbacks.lck[cblk] then ilrs.rte_callbacks.lck[cblk]={} end - advtrains.insert_once(ilrs.rte_callbacks.lck[cblk], sigd, sigd_equal) + for multi_idx, rteid in ipairs(multi_rte) do + local succ, rsn, cbts, cblk + local route = tcbs.routes[rteid] + if route then + succ, rsn, cbts, cblk = ilrs.set_route(sigd, route) + else + succ = false + rsn = attrans("Route with index @1 not found", rteid) end - else - --atdebug("Committed Route:",tcbs.routeset) - -- set_route now sets the signal aspects - --has_changed_aspect = true - -- route success. apply default_autoworking flag if requested - if route.default_autoworking then - tcbs.route_auto = true --FIX 2025-01-08: never set it to false if it was true! + if not succ then + if multi_idx==1 then + tcbs.route_rsn = rsn + else + tcbs.route_rsn = (tcbs.route_rsn or "").."\n"..rsn + end + --atdebug("Routesetting",rteid,"failed:",rsn,"(multi-idx",multi_idx,")") + -- add cbts or cblk to callback table + if cbts then + --atdebug("cbts =",cbts) + if not ilrs.rte_callbacks.ts[cbts] then ilrs.rte_callbacks.ts[cbts]={} end + advtrains.insert_once(ilrs.rte_callbacks.ts[cbts], sigd, sigd_equal) + end + if cblk then + --atdebug("cblk =",cblk) + if not ilrs.rte_callbacks.lck[cblk] then ilrs.rte_callbacks.lck[cblk]={} end + advtrains.insert_once(ilrs.rte_callbacks.lck[cblk], sigd, sigd_equal) + end + else + --atdebug("Committed Route:",rteid,"(multi-idx",multi_idx,")") + -- replace multi_route by single actually committed route + tcbs.routeset = rteid + -- set_route now sets the signal aspects + --has_changed_aspect = true + -- route success. apply default_autoworking flag if requested + if route.default_autoworking then + tcbs.route_auto = true --FIX 2025-01-08: never set it to false if it was true! + end + -- break out of the for loop, dont try any more routes + break end end end diff --git a/advtrains_interlocking/signal_api.lua b/advtrains_interlocking/signal_api.lua index f624f7a..e7c2248 100644 --- a/advtrains_interlocking/signal_api.lua +++ b/advtrains_interlocking/signal_api.lua @@ -460,7 +460,7 @@ function signal.after_dig(pos, oldnode, oldmetadata, player) local sigd = advtrains.interlocking.db.get_sigd_for_signal(pos) if sigd then advtrains.interlocking.db.unassign_signal_for_tcbs(sigd) - minetest.chat_send_player(player:get_player_name(), "Signal has been unassigned. Name and routes are kept for reuse.") + --minetest.chat_send_player(player:get_player_name(), "Signal has been unassigned. Name and routes are kept for reuse.") end -- clear influence point local ipts,iconnid = advtrains.interlocking.db.get_ip_by_signalpos(pos) diff --git a/advtrains_interlocking/signal_aspect_ui.lua b/advtrains_interlocking/signal_aspect_ui.lua index 98a332a..6ba1f7a 100644 --- a/advtrains_interlocking/signal_aspect_ui.lua +++ b/advtrains_interlocking/signal_aspect_ui.lua @@ -1,5 +1,8 @@ local F = advtrains.formspec +-- Get current translator +local S = advtrains.interlocking.translate + function advtrains.interlocking.show_signal_form(pos, node, pname, aux_key) local sigd = advtrains.interlocking.db.get_sigd_for_signal(pos) if sigd and not aux_key then @@ -38,14 +41,14 @@ function advtrains.interlocking.make_ip_formspec_component(pos, x, y, w) local ipos = minetest.string_to_pos(pts) ipmarker(ipos, connid) return table.concat { - F.S_label(x, y, "Influence point is set at @1.", string.format("%s/%s", pts, connid)), - F.S_button_exit(x, y+0.5, w/2-0.125, "ip_set", "Modify"), - F.S_button_exit(x+w/2+0.125, y+0.5, w/2-0.125, "ip_clear", "Clear"), + F.label(x, y, S("Influence point is set at @1.", string.format("%s/%s", pts, connid))), + F.button_exit(x, y+0.5, w/2-0.125, "ip_set", S("Modify")), + F.button_exit(x+w/2+0.125, y+0.5, w/2-0.125, "ip_clear", S("Clear")), } else return table.concat { - F.S_label(x, y, "Influence point is not set."), - F.S_button_exit(x, y+0.5, w, "ip_set", "Set influence point"), + F.label(x, y, S("Influence point is not set.")), + F.button_exit(x, y+0.5, w, "ip_set", S("Set influence point")), } end end @@ -83,10 +86,10 @@ function advtrains.interlocking.show_ip_sa_form(pos, pname) -- Create Signal aspect formspec elements local ndef = advtrains.ndb.get_ndef(pos) if ndef and ndef.advtrains then - form[#form+1] = F.label(0.5, 2, "Signal Aspect:") + form[#form+1] = F.label(0.5, 2, S("Signal Aspect:")) -- main aspect list if ndef.advtrains.main_aspects then - local entries = { "<none>" } + local entries = { S("<none>") } local sel = 1 for i, mae in ipairs(ndef.advtrains.main_aspects) do entries[i+1] = mae.description @@ -98,9 +101,9 @@ function advtrains.interlocking.show_ip_sa_form(pos, pname) end -- distant signal assign (is shown either when main_aspect is not none, or when pure distant signal) if rpos then - form[#form+1] = F.button_exit(0.5, 3.5, 4, "sa_undistant", "Dst: " .. minetest.pos_to_string(rpos)) + form[#form+1] = F.button_exit(0.5, 3.5, 4, "sa_undistant", S("Dst: @1", minetest.pos_to_string(rpos)) ) elseif (ma and not ma.halt) or not ndef.advtrains.main_aspects then - form[#form+1] = F.button_exit(0.5, 3.5, 4, "sa_distant", "<assign distant>") + form[#form+1] = F.button_exit(0.5, 3.5, 4, "sa_distant", S("<assign distant>")) end end @@ -165,12 +168,12 @@ end) -- inits the signal IP assignment process function advtrains.interlocking.init_ip_assign(pos, pname) if not minetest.check_player_privs(pname, "interlocking") then - minetest.chat_send_player(pname, "Insufficient privileges to use this!") + minetest.chat_send_player(pname, S("Insufficient privileges to use this!")) return end --remove old IP --advtrains.interlocking.db.clear_ip_by_signalpos(pos) - minetest.chat_send_player(pname, "Configuring Signal: Please look in train's driving direction and punch rail to set influence point.") + minetest.chat_send_player(pname, S("Configuring Signal: Please look in train's driving direction and punch rail to set influence point.")) players_assign_ip[pname] = pos end @@ -178,10 +181,10 @@ end -- inits the distant signal assignment process function advtrains.interlocking.init_distant_assign(pos, pname) if not minetest.check_player_privs(pname, "interlocking") then - minetest.chat_send_player(pname, "Insufficient privileges to use this!") + minetest.chat_send_player(pname, S("Insufficient privileges to use this!")) return end - minetest.chat_send_player(pname, "Set distant signal: Punch the main signal to assign!") + minetest.chat_send_player(pname, S("Set distant signal: Punch the main signal to assign!")) players_assign_distant[pname] = pos end @@ -203,7 +206,7 @@ local function try_auto_assign_to_tcb(signalpos, pos, connid, pname) advtrains.interlocking.db.assign_signal_to_tcbs(signalpos, sigd) -- use auto-naming advtrains.interlocking.add_autoname_to_tcbs(tcb[aconnid], pname) - minetest.chat_send_player(pname, "Assigned signal to the TCB at "..core.pos_to_string(apos)) + minetest.chat_send_player(pname, S("Assigned signal to the TCB at @1", core.pos_to_string(apos)) ) advtrains.interlocking.show_tcb_marker(apos) advtrains.interlocking.show_signalling_form(sigd, pname) end @@ -215,7 +218,7 @@ local function try_auto_assign_to_tcb(signalpos, pos, connid, pname) local mainsig = advtrains.interlocking.db.get_ip_signal(pts, aconnid) if mainsig and advtrains.interlocking.signal.get_signal_cap_level(mainsig) >= 3 then advtrains.interlocking.signal.set_aspect(signalpos, "_default", mainsig) - minetest.chat_send_player(pname, "Assigned distant signal to the main signal at "..core.pos_to_string(mainsig)) + minetest.chat_send_player(pname, S("Assigned distant signal to the main signal at @1", core.pos_to_string(mainsig)) ) return end end @@ -245,19 +248,21 @@ minetest.register_on_punchnode(function(pos, node, player, pointed_thing) if not advtrains.interlocking.db.get_ip_signal_asp(pts, plconnid) then advtrains.interlocking.db.set_ip_signal(pts, plconnid, signalpos) ipmarker(pos, plconnid) - minetest.chat_send_player(pname, "Configuring Signal: Successfully set influence point") + minetest.chat_send_player(pname, S("Configuring Signal: Successfully set influence point")) -- Try to find a TCB ahead and auto assign this signal there - if advtrains.interlocking.signal.get_signal_cap_level(signalpos) >= 2 then + local pc = player:get_player_control() + local no_auto_assign = pc.aux1 + if not no_auto_assign and advtrains.interlocking.signal.get_signal_cap_level(signalpos) >= 2 then try_auto_assign_to_tcb(signalpos, pos, plconnid, pname) end else - minetest.chat_send_player(pname, "Configuring Signal: Influence point of another signal is already present!") + minetest.chat_send_player(pname, S("Configuring Signal: Influence point of another signal is already present!")) end else - minetest.chat_send_player(pname, "Configuring Signal: This is not a normal two-connection rail! Aborted.") + minetest.chat_send_player(pname, S("Configuring Signal: This is not a normal two-connection rail! Aborted.")) end else - minetest.chat_send_player(pname, "Configuring Signal: Node is too far away. Aborted.") + minetest.chat_send_player(pname, S("Configuring Signal: Node is too far away. Aborted.")) end players_assign_ip[pname] = nil end diff --git a/advtrains_interlocking/smartroute.lua b/advtrains_interlocking/smartroute.lua index f03ece0..2b9138c 100644 --- a/advtrains_interlocking/smartroute.lua +++ b/advtrains_interlocking/smartroute.lua @@ -1,6 +1,9 @@ -- smartroute.lua -- Implementation of the advtrains auto-route search +-- Get current translator +local S = advtrains.interlocking.translate + local atil = advtrains.interlocking local ildb = atil.db local sr = {} @@ -52,7 +55,7 @@ local RTE_MAX_SECS = 16 -- find_more_than: search is aborted only if more than the specified number of routes are found function sr.rescan(pname, sigd, tcbs, find_more_than, searching_shunt, pname) local found_routes = {} - local restart_tcbs = { {sigd = sigd, tcbseq = {} } } + local restart_tcbs = { {sigd = sigd, tcbseq = {}, secseq = {} } } local last_len = 0 while true do -- take first entry out of restart_tcbs (due to the way it is inserted the first entry will always be the one with the lowest length @@ -94,7 +97,9 @@ function sr.rescan(pname, sigd, tcbs, find_more_than, searching_shunt, pname) local nsigd = {p=end_sigd.p, s = end_sigd.s==1 and 2 or 1} -- invert to other side -- record nsigd in the tcbseq local ntcbseq = table.copy(cur_restart.tcbseq) + local nsecseq = table.copy(cur_restart.secseq) ntcbseq[#ntcbseq+1] = nsigd + nsecseq[#nsecseq+1] = c_ts.name or c_ts_id local shall_continue = true -- check if that sigd is a route target local tcbs = ildb.get_tcbs(nsigd) @@ -109,6 +114,7 @@ function sr.rescan(pname, sigd, tcbs, find_more_than, searching_shunt, pname) -- record the found route in the results found_routes[#found_routes+1] = { tcbseq = ntcbseq, + secseq = nsecseq, shunt_route = not is_mainsignal, name = tcbs.signal_name or atil.sigd_to_string(nsigd) } @@ -122,7 +128,7 @@ function sr.rescan(pname, sigd, tcbs, find_more_than, searching_shunt, pname) end -- unless overridden, insert the next restart point if shall_continue then - restart_tcbs[#restart_tcbs+1] = {sigd = nsigd, tcbseq = ntcbseq } + restart_tcbs[#restart_tcbs+1] = {sigd = nsigd, tcbseq = ntcbseq, secseq = nsecseq } end end end @@ -140,10 +146,10 @@ local players_smartroute_actions = {} function sr.propose_next(pname, sigd, find_more_than, searching_shunt) local tcbs = ildb.get_tcbs(sigd) if not tcbs or not tcbs.routes then - minetest.chat_send_player(pname, "Smartroute: TCBS or routes don't exist here!") + minetest.chat_send_player(pname, S("Smartroute: TCBS or routes don't exist here!")) return elseif not tcbs.ts_id then - minetest.chat_send_player(pname, "Smartroute: No track section directly ahead!") + minetest.chat_send_player(pname, S("Smartroute: No track section directly ahead!")) return end -- Step 1: search for routes using the current settings @@ -155,14 +161,22 @@ function sr.propose_next(pname, sigd, find_more_than, searching_shunt) found_routes = found_routes } -- step 3: build form - local form = "size[5,5]label[0,0;Route search: "..#found_routes.." found]" + local form = "size[8,5]label[0,0;"..S("Route search: @1 found", #found_routes).."]" local tab = {} for idx, froute in ipairs(found_routes) do - tab[idx] = minetest.formspec_escape(froute.name.." (Len="..#froute.tcbseq..")") + local secfl = table.copy(froute.secseq) + table.remove(secfl, 1) -- remove first and last, because it will always be the same + secfl[#secfl]=nil + local viatext = "" + if next(secfl) then + froute.via = table.concat(secfl, ", ") + viatext = " (via "..froute.via..")" + end + tab[idx] = minetest.formspec_escape(froute.name..viatext) end - form=form.."textlist[0.5,1;4,3;rtelist;"..table.concat(tab, ",").."]" - form=form.."button[0.5,4;2,1;continue;Search further]" - form=form.."button[2.5,4;2,1;apply;Apply]" + form=form.."textlist[0.5,1;7,3;rtelist;"..table.concat(tab, ",").."]" + form=form.."button[0.5,4;2,1;continue;"..S("Search further").."]" + form=form.."button[2.5,4;2,1;apply;"..S("Apply").."]" minetest.show_formspec(pname, "at_il_smartroute_propose", form) end @@ -207,11 +221,19 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) end end local new_frte = {} + local endOnce = {} + local endTwice = {} for _,froute in ipairs(found_routes) do local endpoint = froute.tcbseq[#froute.tcbseq] local endstr = advtrains.interlocking.sigd_to_string(endpoint) if not ex_endpts[endstr] then new_frte[#new_frte+1] = froute + -- record duplicate targets in froute + if endOnce[froute.name] then + endTwice[froute.name] = true + else + endOnce[froute.name] = true + end else --atdebug("(Smartroute) Throwing away",froute.name,"because endpoint",endstr,"already reached by route",ex_endpts[endstr]) end @@ -220,6 +242,10 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) -- All remaining routes will be applied to the signal local sel_rte = #tcbs.routes+1 for idx, froute in ipairs(new_frte) do + if endTwice[froute.name] then + -- append via text to deduplicate name + froute.name = froute.name .. " (via "..(froute.via or "direct")..")" + end tcbs.routes[#tcbs.routes+1] = build_route_from_foundroute(froute) end -- if only one route present and it is newly created (there was no route before, thus sel_rte==1), make default diff --git a/advtrains_interlocking/tcb_ts_ui.lua b/advtrains_interlocking/tcb_ts_ui.lua index 814a11a..0111f5e 100755 --- a/advtrains_interlocking/tcb_ts_ui.lua +++ b/advtrains_interlocking/tcb_ts_ui.lua @@ -1,5 +1,8 @@ -- Track Circuit Breaks and Track Sections - Player interaction +-- Get current translator +local S = advtrains.interlocking.translate + local players_assign_tcb = {} local players_assign_signal = {} local players_assign_xlink = {} @@ -30,7 +33,7 @@ minetest.register_node("advtrains_interlocking:tcb_node", { }, mesh = "at_il_tcb_node.obj", tiles = {"at_il_tcb_node.png"}, - description="Track Circuit Break", + description=S("Track Circuit Break"), sunlight_propagates=true, groups = { cracky=3, @@ -40,12 +43,12 @@ minetest.register_node("advtrains_interlocking:tcb_node", { }, after_place_node = function(pos, node, player) local meta = minetest.get_meta(pos) - meta:set_string("infotext", "Unconfigured Track Circuit Break, right-click to assign.") + meta:set_string("infotext", S("Unconfigured Track Circuit Break, right-click to assign.")) end, on_rightclick = function(pos, node, player) local pname = player:get_player_name() if not minetest.check_player_privs(pname, "interlocking") then - minetest.chat_send_player(pname, "Insufficient privileges to use this!") + minetest.chat_send_player(pname, S("Insufficient privileges to use this!")) return end @@ -57,11 +60,11 @@ minetest.register_node("advtrains_interlocking:tcb_node", { if tcb then advtrains.interlocking.show_tcb_form(tcbpos, pname) else - minetest.chat_send_player(pname, "This TCB has been removed. Please dig marker.") + minetest.chat_send_player(pname, S("This TCB has been removed. Please dig marker.")) end else --unconfigured - minetest.chat_send_player(pname, "Configuring TCB: Please punch the rail you want to assign this TCB to.") + minetest.chat_send_player(pname, S("Configuring TCB: Please punch the rail you want to assign this TCB to.")) players_assign_tcb[pname] = pos end @@ -85,7 +88,7 @@ minetest.register_node("advtrains_interlocking:tcb_node", { local tcbpts = meta:get_string("tcb_pos") if tcbpts ~= "" then if not minetest.check_player_privs(pname, "interlocking") then - minetest.chat_send_player(pname, "Insufficient privileges to use this!") + minetest.chat_send_player(pname, S("Insufficient privileges to use this!")) return end local tcbpos = minetest.string_to_pos(tcbpts) @@ -93,7 +96,7 @@ minetest.register_node("advtrains_interlocking:tcb_node", { if not tcb then return true end for connid=1,2 do if tcb[connid].signal then - minetest.chat_send_player(pname, "Can't remove TCB: Both sides must have no signal assigned!") + minetest.chat_send_player(pname, S("Can't remove TCB: Both sides must have no signal assigned!")) return false end end @@ -162,21 +165,21 @@ minetest.register_on_punchnode(function(pos, node, player, pointed_thing) if node_ok and #conns == 2 then -- if there is already a tcb here, reassign it if ildb.get_tcb(pos) then - minetest.chat_send_player(pname, "Configuring TCB: Already existed at this position, it is now linked to this TCB marker") + minetest.chat_send_player(pname, S("Configuring TCB: Already existed at this position, it is now linked to this TCB marker")) else ildb.create_tcb_at(pos, pname) end local meta = minetest.get_meta(tcbnpos) meta:set_string("tcb_pos", minetest.pos_to_string(pos)) - meta:set_string("infotext", "TCB assigned to "..minetest.pos_to_string(pos)) - minetest.chat_send_player(pname, "Configuring TCB: Successfully configured TCB") + meta:set_string("infotext", S("TCB assigned to @1", minetest.pos_to_string(pos))) + minetest.chat_send_player(pname, S("Configuring TCB: Successfully configured TCB")) advtrains.interlocking.show_tcb_marker(pos) else - minetest.chat_send_player(pname, "Configuring TCB: This is not a normal two-connection rail! Aborted.") + minetest.chat_send_player(pname, S("Configuring TCB: This is not a normal two-connection rail! Aborted.")) end else - minetest.chat_send_player(pname, "Configuring TCB: Node is too far away. Aborted.") + minetest.chat_send_player(pname, S("Configuring TCB: Node is too far away. Aborted.")) end players_assign_tcb[pname] = nil end @@ -194,19 +197,19 @@ minetest.register_on_punchnode(function(pos, node, player, pointed_thing) ildb.assign_signal_to_tcbs(pos, sigd) -- use auto-naming advtrains.interlocking.add_autoname_to_tcbs(tcbs, pname) - minetest.chat_send_player(pname, "Configuring TCB: Successfully assigned signal.") + minetest.chat_send_player(pname, S("Configuring TCB: Successfully assigned signal.")) advtrains.interlocking.show_ip_form(pos, pname, true) else - minetest.chat_send_player(pname, "Configuring TCB: Internal error, TCBS doesn't exist. Aborted.") + minetest.chat_send_player(pname, S("Configuring TCB: Internal error, TCBS doesn't exist. Aborted.")) end else - minetest.chat_send_player(pname, "Configuring TCB: Cannot use static signals for routesetting. Aborted.") + minetest.chat_send_player(pname, S("Configuring TCB: Cannot use static signals for routesetting. Aborted.")) end else - minetest.chat_send_player(pname, "Configuring TCB: Not a compatible signal. Aborted.") + minetest.chat_send_player(pname, S("Configuring TCB: Not a compatible signal. Aborted.")) end else - minetest.chat_send_player(pname, "Configuring TCB: Node is too far away. Aborted.") + minetest.chat_send_player(pname, S("Configuring TCB: Node is too far away. Aborted.")) end players_assign_signal[pname] = nil end @@ -219,14 +222,14 @@ minetest.register_on_punchnode(function(pos, node, player, pointed_thing) local state = advtrains.getstate(pos) local ts = ildb.get_ts(ts_id) if ts and ts.fixed_locks then - minetest.chat_send_player(pname, minetest.pos_to_string(pos).." locks in state "..state) + minetest.chat_send_player(pname, S("@1 locks in state @2", minetest.pos_to_string(pos), state)) ts.fixed_locks[pts] = state else - minetest.chat_send_player(pname, "Error: TS modified, abort!") + minetest.chat_send_player(pname, S("Error: TS modified, abort!")) players_assign_fixedlocks[pname] = nil end else - minetest.chat_send_player(pname, "Setting fixed locks finished!") + minetest.chat_send_player(pname, S("Setting fixed locks finished!")) players_assign_fixedlocks[pname] = nil ildb.update_rs_cache(ts_id) advtrains.interlocking.show_ts_form(ts_id, pname) @@ -247,12 +250,12 @@ function advtrains.interlocking.self_tcb_make_after_place_callback(fail_silently local pname = player:get_player_name() if not minetest.check_player_privs(pname, "interlocking") then if not fail_silently_on_noprivs then - minetest.chat_send_player(pname, "Insufficient privileges to use this!") + minetest.chat_send_player(pname, S("Insufficient privileges to use this!")) end return end if ildb.get_tcb(pos) then - minetest.chat_send_player(pname, "TCB already existed at this position, now linked to this node") + minetest.chat_send_player(pname, S("TCB already existed at this position, now linked to this node")) else ildb.create_tcb_at(pos, pname) end @@ -261,7 +264,7 @@ function advtrains.interlocking.self_tcb_make_after_place_callback(fail_silently local tcbs = ildb.get_tcbs(sigd) -- make sure signal doesn't already exist if tcbs.signal then - minetest.chat_send_player(pname, "Signal on B side already assigned!") + minetest.chat_send_player(pname, S("Signal on B side already assigned!")) return end ildb.assign_signal_to_tcbs(pos, sigd) @@ -281,7 +284,7 @@ function advtrains.interlocking.self_tcb_make_can_dig_callback(is_signal) local pname = player and player:get_player_name() or "" -- need to duplicate logic of the regular "can_dig_or_modify_track()" function in core/tracks.lua if advtrains.get_train_at_pos(pos) then - minetest.chat_send_player(pname, "Can't remove track, a train is here!") + minetest.chat_send_player(pname, S("Can't remove track, a train is here!")) return false end -- end of standard checks @@ -335,7 +338,7 @@ function advtrains.interlocking.self_tcb_make_on_rightclick_callback(fail_silent local pname = player:get_player_name() if not minetest.check_player_privs(pname, "interlocking") then if not fail_silently_on_noprivs then - minetest.chat_send_player(pname, "Insufficient privileges to use this!") + minetest.chat_send_player(pname, S("Insufficient privileges to use this!")) end return end @@ -383,30 +386,30 @@ local function mktcbformspec(pos, side, tcbs, offset, pname) ts = ildb.get_ts(tcbs.ts_id) end if ts then - form = form.."label[0.5,"..offset..";Side "..btnpref..": "..minetest.formspec_escape(ts.name or tcbs.ts_id).."]" - form = form.."button[0.5,"..(offset+0.5)..";5,1;"..btnpref.."_gotots;Show track section]" + form = form.."label[0.5,"..offset..";"..S("Side @1", btnpref)..": "..minetest.formspec_escape(ts.name or tcbs.ts_id).."]" + form = form.."button[0.5,"..(offset+0.5)..";5,1;"..btnpref.."_gotots;"..S("Show track section").."]" else tcbs.ts_id = nil - form = form.."label[0.5,"..offset..";Side "..btnpref..": ".."End of interlocking]" - form = form.."button[0.5,"..(offset+0.5)..";5,1;"..btnpref.."_makeil;Create Interlocked Track Section]" + form = form.."label[0.5,"..offset..";Side "..btnpref..": "..S("End of interlocking").."]" + form = form.."button[0.5,"..(offset+0.5)..";5,1;"..btnpref.."_makeil;"..S("Create Interlocked Track Section").."]" end -- xlink if tcbs.xlink then - form = form.."label[0.5,"..(offset+1.5)..";Link:"..ildb.sigd_to_string(tcbs.xlink).."]" + form = form.."label[0.5,"..(offset+1.5)..";"..S("Link: @1", ildb.sigd_to_string(tcbs.xlink)).."]" form = form.."button[4.5,"..(offset+1.5)..";1,1;"..btnpref.."_xlinkdel;X]" else if players_assign_xlink[pname] then - form = form.."button[0.5,"..(offset+1.5)..";4,1;"..btnpref.."_xlinklink;Link "..ildb.sigd_to_string(players_assign_xlink[pname]).."]" + form = form.."button[0.5,"..(offset+1.5)..";4,1;"..btnpref.."_xlinklink;"..S("Link @1", ildb.sigd_to_string(players_assign_xlink[pname])).."]" form = form.."button[4.5,"..(offset+1.5)..";1,1;"..btnpref.."_xlinkabrt;X]" else - form = form.."label[0.5,"..(offset+1.5)..";No Link]" + form = form.."label[0.5,"..(offset+1.5)..";"..S("No Link").."]" form = form.."button[4.5,"..(offset+1.5)..";1,1;"..btnpref.."_xlinkadd;+]" end end if tcbs.signal then - form = form.."button[0.5,"..(offset+2.5)..";5,1;"..btnpref.."_sigdia;Signalling]" + form = form.."button[0.5,"..(offset+2.5)..";5,1;"..btnpref.."_sigdia;"..S("Signalling").."]" else - form = form.."button[0.5,"..(offset+2.5)..";5,1;"..btnpref.."_asnsig;Assign a signal]" + form = form.."button[0.5,"..(offset+2.5)..";5,1;"..btnpref.."_asnsig;"..S("Assign a signal").."]" end return form end @@ -414,13 +417,13 @@ end function advtrains.interlocking.show_tcb_form(pos, pname) if not minetest.check_player_privs(pname, "interlocking") then - minetest.chat_send_player(pname, "Insufficient privileges to use this!") + minetest.chat_send_player(pname, S("Insufficient privileges to use this!")) return end local tcb = ildb.get_tcb(pos) if not tcb then return end - local form = "size[6,9] label[0.5,0.5;Track Circuit Break Configuration]" + local form = "size[6,9] label[0.5,0.5;"..S("Track Circuit Break Configuration").."]" form = form .. mktcbformspec(pos, 1, tcb[1], 1, pname) form = form .. mktcbformspec(pos, 2, tcb[2], 5, pname) @@ -487,14 +490,14 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) else if f_xlinkadd[connid] then players_assign_xlink[pname] = {p=pos, s=connid} - minetest.chat_send_player(pname, "TCB Link: Select linked TCB now!") + minetest.chat_send_player(pname, S("TCB Link: Select linked TCB now!")) minetest.close_formspec(pname, formname) return -- to not reopen form end end end if f_asnsig[connid] and not tcbs.signal then - minetest.chat_send_player(pname, "Configuring TCB: Please punch the signal to assign.") + minetest.chat_send_player(pname, S("Configuring TCB: Please punch the signal to assign.")) players_assign_signal[pname] = {p=pos, s=connid} minetest.close_formspec(pname, formname) return @@ -516,15 +519,15 @@ end) function advtrains.interlocking.show_ts_form(ts_id, pname) if not minetest.check_player_privs(pname, "interlocking") then - minetest.chat_send_player(pname, "Insufficient privileges to use this!") + minetest.chat_send_player(pname, S("Insufficient privileges to use this!")) return end local ts = ildb.get_ts(ts_id) if not ts_id then return end - local form = "size[10.5,10]label[0.5,0.5;Track Section Detail - "..ts_id.."]" - form = form.."field[0.8,2;5.2,1;name;Section name;"..minetest.formspec_escape(ts.name or "").."]" - form = form.."button[5.5,1.7;1,1;setname;Set]" + local form = "size[10.5,10]label[0.5,0.5;"..S("Track Section Detail - @1", ts_id).."]" + form = form.."field[0.8,2;5.2,1;name;"..S("Section name")..";"..minetest.formspec_escape(ts.name or "").."]" + form = form.."button[5.5,1.7;1,1;setname;"..S("Set").."]" local hint local strtab = {} @@ -533,7 +536,7 @@ function advtrains.interlocking.show_ts_form(ts_id, pname) advtrains.interlocking.show_tcb_marker(sigd.p) end - form = form.."label[0.5,2.5;Boundary TCBs:]" + form = form.."label[0.5,2.5;"..S("Boundary TCBs:").."]" form = form.."textlist[0.5,3;4,3;tcblist;"..table.concat(strtab, ",").."]" -- additional route locks (e.g. for level crossings) @@ -545,36 +548,36 @@ function advtrains.interlocking.show_ts_form(ts_id, pname) minetest.pos_to_string(advtrains.decode_pos(pts)).." = "..state) end end - form = form.."label[5.5,2.5;Fixed route locks (e.g. level crossings):]" + form = form.."label[5.5,2.5;"..S("Fixed route locks (e.g. level crossings):").."]" form = form.."textlist[5.5,3;4,3;fixedlocks;"..table.concat(strtab, ",").."]" if ildb.may_modify_ts(ts) then - form = form.."button[5.5,6;2,1;flk_add;Add locks]" - form = form.."button[7.5,6;2,1;flk_clear;Clear locks]" + form = form.."button[5.5,6;2,1;flk_add;"..S("Add locks").."]" + form = form.."button[7.5,6;2,1;flk_clear;"..S("Clear locks").."]" - form = form.."button[5.5,8;4,1;remove;Remove Section]" - form = form.."tooltip[remove;This will remove the track section and set all its end points to End Of Interlocking]" + form = form.."button[5.5,8;4,1;remove;"..S("Remove Section").."]" + form = form.."tooltip[remove;"..S("This will remove the track section and set all its end points to End Of Interlocking").."]" else hint=3 end if ts.route then - form = form.."label[0.5,6.1;Route is set: "..ts.route.rsn.."]" + form = form.."label[0.5,6.1;"..S("Route is set: ")..ts.route.rsn.."]" elseif ts.route_post then - form = form.."label[0.5,6.1;Section holds "..#(ts.route_post.lcks or {}).." route locks.]" + form = form.."label[0.5,6.1;"..S("Section holds @1 route locks.", #(ts.route_post.lcks or {})).."]" end -- occupying trains if ts.trains and #ts.trains>0 then - form = form.."label[0.5,7.1;Trains on this section:]" + form = form.."label[0.5,7.1;"..S("Trains on this section:").."]" form = form.."textlist[0.5,7.7;3,2;trnlist;"..table.concat(ts.trains, ",").."]" else - form = form.."label[0.5,7.1;No trains on this section.]" + form = form.."label[0.5,7.1;"..S("No trains on this section.").."]" end - form = form.."button[5.5,7;4,1;reset;Reset section state]" + form = form.."button[5.5,7;4,1;reset;"..S("Reset section state").."]" if hint == 3 then - form = form.."label[0.5,0.75;You cannot modify track sections when a route is set or a train is on the section.]" + form = form.."label[0.5,0.75;"..S("You cannot modify track sections when a route is set or a train is on the section.").."]" --form = form.."label[0.5,1;Trying to unlink a TCB directly connected to this track will not work.]" end @@ -615,7 +618,7 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) ts.fixed_locks = {} end players_assign_fixedlocks[pname] = ts_id - minetest.chat_send_player(pname, "Punch components to add fixed locks. (punch anything else = end)") + minetest.chat_send_player(pname, S("Punch components to add fixed locks. (punch anything else = end)")) minetest.close_formspec(pname, formname) return elseif fields.flk_clear then @@ -625,10 +628,10 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) if fields.reset then -- User requested resetting the section -- Show him what this means... - local form = "size[7,5]label[0.5,0.5;Reset track section]" - form = form.."label[0.5,1;This will clear the list of trains\nand the routesetting status of this section.\nAre you sure?]" - form = form.."button_exit[0.5,2.5; 5,1;reset;Yes]" - form = form.."button_exit[0.5,3.5; 5,1;cancel;Cancel]" + local form = "size[7,5]label[0.5,0.5;"..S("Reset track section").."]" + form = form.."label[0.5,1;"..S("This will clear the list of trains\nand the routesetting status of this section.\nAre you sure?").."]" + form = form.."button_exit[0.5,2.5; 5,1;reset;"..S("Yes").."]" + form = form.."button_exit[0.5,3.5; 5,1;cancel;"..S("Cancel").."]" minetest.show_formspec(pname, "at_il_tsreset_"..ts_id, form) return end @@ -651,7 +654,7 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) local tcbs = ildb.get_tcbs(sigd) advtrains.interlocking.signal.update_route_aspect(tcbs) end - minetest.chat_send_player(pname, "Reset track section "..ts_id.."!") + minetest.chat_send_player(pname, S("Reset track section @1!", ts_id)) end end) @@ -764,11 +767,11 @@ function advtrains.interlocking.check_route_valid(route, sigd) while c_sigd and i<=#route do c_tcbs = ildb.get_tcbs(c_sigd) if not c_tcbs then - return false, "No TCBS at "..sigd_to_string(c_sigd) + return false, S("TCB at @1 is missing", sigd_to_string(c_sigd)) end c_ts_id = c_tcbs.ts_id if not c_ts_id then - return false, "No track section adjacent to "..sigd_to_string(c_sigd) + return false, S("Track section after @1 missing", sigd_to_string(c_sigd)) end c_ts = ildb.get_ts(c_ts_id) @@ -778,7 +781,7 @@ function advtrains.interlocking.check_route_valid(route, sigd) for pts, state in pairs(c_rseg.locks) do local pos = advtrains.decode_pos(pts) if not advtrains.is_passive(pos) then - return false, "No passive component for lock at "..pts + return false, S("Turnout/component missing at @1", minetest.pos_to_string(pos)) end end end @@ -786,8 +789,12 @@ function advtrains.interlocking.check_route_valid(route, sigd) local nvar = c_rseg.next if nvar then local re_tcbs = ildb.get_tcbs({p = nvar.p, s = (nvar.s==1) and 2 or 1}) - if not re_tcbs or not re_tcbs.ts_id or re_tcbs.ts_id~=c_ts_id then - return false, "TCB at "..minetest.pos_to_string(nvar.p).." has different section than previous TCB." + if not re_tcbs then + return false, S("TCB at @1 is missing", minetest.pos_to_string(nvar.p)) + elseif not re_tcbs.ts_id then + return false, S("TCB at @1 is not assigned to previous track section", minetest.pos_to_string(nvar.p)) + elseif re_tcbs.ts_id~=c_ts_id then + return false, S("TCB at @1 has different section than previous TCB", minetest.pos_to_string(nvar.p)) end end -- advance @@ -796,11 +803,11 @@ function advtrains.interlocking.check_route_valid(route, sigd) end -- check end TCB if not c_sigd then - return false, "Final TCBS unset (legacy-style buffer route)" + return false, S("Final TCBS unset (legacy-style buffer route)") end c_tcbs = ildb.get_tcbs(c_sigd) if not c_tcbs then - return false, "Final TCBS missing at "..sigd_to_string(c_sigd) + return false, S("TCB at @1 is missing", sigd_to_string(c_sigd)) end return true, nil, c_sigd end @@ -814,7 +821,7 @@ local p_open_sig_form = {} function advtrains.interlocking.show_signalling_form(sigd, pname, sel_rte, called_from_form_update) if not minetest.check_player_privs(pname, "train_operator") then - minetest.chat_send_player(pname, "Insufficient privileges to use this!") + minetest.chat_send_player(pname, S("Insufficient privileges to use this!")) return end local hasprivs = minetest.check_player_privs(pname, "interlocking") @@ -823,36 +830,51 @@ function advtrains.interlocking.show_signalling_form(sigd, pname, sel_rte, calle if not tcbs.signal then return end if not tcbs.routes then tcbs.routes = {} end - local form = "size[7,10.25]label[0.5,0.5;Signal at "..minetest.pos_to_string(sigd.p).."]" - form = form.."field[0.8,1.5;5.2,1;name;Signal name;"..minetest.formspec_escape(tcbs.signal_name or "").."]" - form = form.."button[5.5,1.2;1,1;setname;Set]" + local form = "size[7,10.25]label[0.5,0.5;"..S("Signal at @1", minetest.pos_to_string(sigd.p)).."]" + form = form.."field[0.8,1.5;5.2,1;name;"..S("Signal name")..";"..minetest.formspec_escape(tcbs.signal_name or "").."]" + form = form.."button[5.5,1.2;1,1;setname;"..S("Set").."]" if tcbs.routeset then - local rte = tcbs.routes[tcbs.routeset] - if not rte then - atwarn("Unknown route set from signal!") - tcbs.routeset = nil - return + if type(tcbs.routeset)=="table" then + local rtenames = {} + for midx,rteid in ipairs(tcbs.routeset) do + local rte = tcbs.routes[rteid] + if not rte then + atwarn("Unknown route set from signal!") + tcbs.routeset = nil + return + end + rtenames[midx] = rte.name + end + form = form.."label[0.5,2.5;"..S("Multiple routes are requested (first available is set):").."]" + form = form.."label[0.5,3.0;"..minetest.formspec_escape(table.concat(rtenames,", ")).."]" + else + local rte = tcbs.routes[tcbs.routeset] + if not rte then + atwarn("Unknown route set from signal!") + tcbs.routeset = nil + return + end + form = form.."label[0.5,2.5;"..S("A route is requested from this signal:").."]" + form = form.."label[0.5,3.0;"..minetest.formspec_escape(rte.name).."]" end - form = form.."label[0.5,2.5;A route is requested from this signal:]" - form = form.."label[0.5,3.0;"..minetest.formspec_escape(rte.name).."]" if tcbs.route_committed then - form = form.."label[0.5,3.5;Route has been set.]" + form = form.."label[0.5,3.5;"..S("Route has been set.").."]" else - form = form.."label[0.5,3.5;Waiting for route to be set...]" + form = form.."label[0.5,3.5;"..S("Waiting for route to be set...").."]" if tcbs.route_rsn then form = form.."label[0.5,4;"..minetest.formspec_escape(tcbs.route_rsn).."]" end end if not tcbs.route_auto then - form = form.."button[0.5,7; 5,1;auto;Enable Automatic Working]" + form = form.."button[0.5,7; 5,1;auto;"..S("Enable Automatic Working").."]" else - form = form.."label[0.5,7 ;Automatic Working is active.]" - form = form.."label[0.5,7.3;Route is re-set when a train passed.]" - form = form.."button[0.5,7.7; 5,1;noauto;Disable Automatic Working]" + form = form.."label[0.5,7 ;"..S("Automatic Working is active.").."]" + form = form.."label[0.5,7.3;"..S("Route is re-set when a train passed.").."]" + form = form.."button[0.5,7.7; 5,1;noauto;"..S("Disable Automatic Working").."]" end - form = form.."button[0.5,6; 5,1;cancelroute;Cancel Route]" + form = form.."button[0.5,6; 5,1;cancelroute;"..S("Cancel Route").."]" else if not tcbs.route_origin then if #tcbs.routes > 0 then @@ -864,7 +886,7 @@ function advtrains.interlocking.show_signalling_form(sigd, pname, sel_rte, calle local clr = "" if not valid then clr = "#FF5555" - rname = rname.." (invalid)" + rname = rname..S(" (invalid)") elseif route.ars then clr = "#FFFF55" if route.ars.default then @@ -873,35 +895,35 @@ function advtrains.interlocking.show_signalling_form(sigd, pname, sel_rte, calle end strtab[#strtab+1] = clr .. minetest.formspec_escape(rname) end - form = form.."label[0.5,2.5;Routes:]" + form = form.."label[0.5,2.5;"..S("Routes:").."]" form = form.."textlist[0.5,3;5,3;rtelist;"..table.concat(strtab, ",") if sel_rte then form = form .. ";" .. sel_rte .."]" - form = form.."button[0.5,6; 5,1;setroute;Set Route]" - form = form.."button[0.5,7;2,1;dsproute;Show]" + form = form.."button[0.5,6; 5,1;setroute;"..S("Set Route").."]" + form = form.."button[0.5,7;2,1;dsproute;"..S("Show").."]" if hasprivs then - form = form.."button[5.5,3.3;1,0.3;setarsdefault;D]tooltip[setarsdefault;Set ARS default route]" - form = form.."button[3.5,7;2,1;editroute;Edit]" + form = form.."button[5.5,3.3;1,0.3;setarsdefault;D]tooltip[setarsdefault;"..S("Set ARS default route").."]" + form = form.."button[3.5,7;2,1;editroute;"..S("Edit").."]" if sel_rte > 1 then form = form .. "button[5.5,4;1,0.3;moveup;↑]" end if sel_rte < #strtab then form = form .. "button[5.5,4.7;1,0.3;movedown;↓]" end - form = form.."button[5.5,5.4;1,0.3;delroute;X]tooltip[delroute;Delete this route]" + form = form.."button[5.5,5.4;1,0.3;delroute;X]tooltip[delroute;"..S("Delete this route").."]" end else form = form .. "]" if tcbs.ars_disabled then - form = form.."label[0.5,6 ;NOTE: ARS is disabled.]" - form = form.."label[0.5,6.5;Routes are not automatically set.]" + form = form.."label[0.5,6 ;"..S("NOTE: ARS is disabled.").."]" + form = form.."label[0.5,6.5;"..S("Routes are not automatically set.").."]" end end if hasprivs then - form = form.."button[0.5,8;2.5,1;smartroute;Smart Route]" - form = form.."button[ 3,8;2.5,1;newroute;New (Manual)]" - form = form..string.format("checkbox[0.5,8.75;ars;Automatic routesetting;%s]", not tcbs.ars_disabled) - form = form..string.format("checkbox[0.5,9.25;dstarstrig;Distant signal triggers ARS;%s]", not tcbs.no_dst_ars_trig) + form = form.."button[0.5,8;2.5,1;smartroute;"..S("Smart Route").."]" + form = form.."button[ 3,8;2.5,1;newroute;"..S("New (Manual)").."]" + form = form..string.format("checkbox[0.5,8.75;ars;"..S("Automatic routesetting")..";%s]", not tcbs.ars_disabled) + form = form..string.format("checkbox[0.5,9.25;dstarstrig;"..S("Distant signal triggers ARS")..";%s]", not tcbs.no_dst_ars_trig) end else -- no route is active, and no route is so far defined @@ -909,29 +931,27 @@ function advtrains.interlocking.show_signalling_form(sigd, pname, sel_rte, calle local caps = advtrains.interlocking.signal.get_signal_cap_level(tcbs.signal) if caps >= 4 then -- offer user the "block signal mode" - form = form.."label[0.5,2.5;No routes are yet defined.]" + form = form.."label[0.5,2.5;"..S("No routes are yet defined.").."]" if hasprivs then - form = form.."button[0.5,4;2.5,1;smartroute;Smart Route]" - form = form.."button[ 3,4;2.5,1;newroute;New (Manual)]" + form = form.."button[0.5,4;2.5,1;smartroute;"..S("Smart Route").."]" + form = form.."button[ 3,4;2.5,1;newroute;"..S("New (Manual)").."]" end elseif caps >= 3 then -- it's a buffer! - form = form.."label[0.5,2.5;This is an always-halt signal (e.g. a buffer)\n" - .."No routes can be set from here.]" + form = form.."label[0.5,2.5;"..S("This is an always-halt signal (e.g. a buffer)\nNo routes can be set from here.").."]" else -- signal caps say it cannot be route start/end - form = form.."label[0.5,2.5;This is a pure distant signal\n" - .."No route is currently set through.]" + form = form.."label[0.5,2.5;"..S("This is a pure distant signal\nNo route is currently set through.").."]" end end elseif sigd_equal(tcbs.route_origin, sigd) then -- something has gone wrong: tcbs.routeset should have been set... - form = form.."label[0.5,2.5;Inconsistent state: route_origin is same TCBS but no route set. Try again.]" + form = form.."label[0.5,2.5;".."Inconsistent state: route_origin is same TCBS but no route set. Try again.".."]" ilrs.cancel_route_from(sigd) else - form = form.."label[0.5,2.5;Route is set over this signal by:\n"..sigd_to_string(tcbs.route_origin).."]" - form = form.."label[0.5,4;Wait for this route to be cancelled in order to do anything here.]" + form = form.."label[0.5,2.5;"..S("Route is set over this signal by:").."\n"..sigd_to_string(tcbs.route_origin).."]" + form = form.."label[0.5,4;"..S("Wait for this route to be cancelled in order to do anything here.").."]" end end sig_pselidx[pname] = sel_rte @@ -1000,9 +1020,7 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) end end if tcbs.routeset and fields.cancelroute then - if tcbs.routes[tcbs.routeset] and tcbs.routes[tcbs.routeset].ars then - tcbs.ars_ignore_next = true - end + tcbs.ars_ignore_next = true -- if route committed, cancel route ts info ilrs.update_route(sigd, tcbs, nil, true) end @@ -1011,11 +1029,13 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) advtrains.interlocking.init_route_prog(pname, sigd) minetest.close_formspec(pname, formname) tcbs.ars_ignore_next = nil + p_open_sig_form[pname] = nil -- form is closed/left, do not reopen return end if fields.smartroute and hasprivs then advtrains.interlocking.smartroute.start(pname, sigd) tcbs.ars_ignore_next = nil + p_open_sig_form[pname] = nil -- form is closed/left, do not reopen return end if sel_rte and tcbs.routes[sel_rte] then @@ -1029,6 +1049,7 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) end if fields.editroute and hasprivs then advtrains.interlocking.show_route_edit_form(pname, sigd, sel_rte) + p_open_sig_form[pname] = nil -- form is closed/left, do not reopen return end if fields.setarsdefault and hasprivs then @@ -1054,7 +1075,7 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) end if fields.delroute and hasprivs then if tcbs.routes[sel_rte] and tcbs.routes[sel_rte].ars then - minetest.chat_send_player(pname, "Cannot delete route which has ARS rules, please review and then delete through edit dialog!") + minetest.chat_send_player(pname, S("Cannot delete route which has ARS rules, please review and then delete through edit dialog!")) else table.remove(tcbs.routes,sel_rte) end diff --git a/advtrains_interlocking/tool.lua b/advtrains_interlocking/tool.lua index 560e129..d7a42b4 100644 --- a/advtrains_interlocking/tool.lua +++ b/advtrains_interlocking/tool.lua @@ -1,21 +1,24 @@ -- tool.lua -- Interlocking tool +-- Get current translator +local S = advtrains.interlocking.translate + local ilrs = advtrains.interlocking.route local function node_right_click(pos, pname, player) if advtrains.is_passive(pos) then - local form = "size[7,5]label[0.5,0.5;Route lock inspector]" + local form = "size[7,5]label[0.5,0.5;"..S("Route lock inspector").."]" local pts = advtrains.encode_pos(pos) local rtl = ilrs.has_route_lock(pts) if rtl then - form = form.."label[0.5,1;Route locks currently put:\n"..rtl.."]" - form = form.."button_exit[0.5,3.5; 5,1;clear;Clear]" + form = form.."label[0.5,1;"..S("Route locks currently put:").."\n"..rtl.."]" + form = form.."button_exit[0.5,3.5; 5,1;clear;"..S("Clear").."]" else - form = form.."label[0.5,1;No route locks set]" - form = form.."button_exit[0.5,3.5; 5,1;emplace;Emplace manual lock]" + form = form.."label[0.5,1;"..S("No route locks set").."]" + form = form.."button_exit[0.5,3.5; 5,1;emplace;"..S("Emplace manual lock").."]" end minetest.show_formspec(pname, "at_il_rtool_"..pts, form) @@ -25,7 +28,7 @@ local function node_right_click(pos, pname, player) -- If not a turnout, check the track section and show a form local node_ok, conns, rail_y=advtrains.get_rail_info_at(pos) if not node_ok then - minetest.chat_send_player(pname, "Node is not a track!") + minetest.chat_send_player(pname, S("Node is not a track!")) return end if advtrains.interlocking.db.get_tcb(pos) then @@ -37,14 +40,14 @@ local function node_right_click(pos, pname, player) if ts_id then advtrains.interlocking.show_ts_form(ts_id, pname) else - minetest.chat_send_player(pname, "No track section at this location!") + minetest.chat_send_player(pname, S("No track section at this location!")) end end local function node_left_click(pos, pname, player) local node_ok, conns, rail_y=advtrains.get_rail_info_at(pos) if not node_ok then - minetest.chat_send_player(pname, "Node is not a track!") + minetest.chat_send_player(pname, S("Node is not a track!")) return end @@ -62,13 +65,13 @@ local function node_left_click(pos, pname, player) advtrains.interlocking.db.update_rs_cache(ts_id) advtrains.interlocking.highlight_track_section(pos) else - minetest.chat_send_player(pname, "No track section at this location!") + minetest.chat_send_player(pname, S("No track section at this location!")) end end minetest.register_craftitem("advtrains_interlocking:tool",{ - description = "Interlocking tool\nPunch: Highlight track section\nPlace: check route locks/show track section info", + description = S("Interlocking tool\nPunch: Highlight track section\nPlace: check route locks/show track section info"), groups = {cracky=1}, -- key=name, value=rating; rating=1..3. inventory_image = "at_il_tool.png", wield_image = "at_il_tool.png", @@ -79,7 +82,7 @@ minetest.register_craftitem("advtrains_interlocking:tool",{ return end if not minetest.check_player_privs(pname, {interlocking=true}) then - minetest.chat_send_player(pname, "Insufficient privileges to use this!") + minetest.chat_send_player(pname, S("Insufficient privileges to use this!")) return end if pointed_thing.type=="node" then @@ -93,7 +96,7 @@ minetest.register_craftitem("advtrains_interlocking:tool",{ return end if not minetest.check_player_privs(pname, {interlocking=true}) then - minetest.chat_send_player(pname, "Insufficient privileges to use this!") + minetest.chat_send_player(pname, S("Insufficient privileges to use this!")) return end if pointed_thing.type=="node" then @@ -124,3 +127,9 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) end end end) + +minetest.register_craft({ + output = "advtrains_interlocking:tool", + type = "shapeless", + recipe = {"dye:green","advtrains:trackworker", "advtrains_interlocking:tcb_node"} +}) diff --git a/advtrains_interlocking/train_sections.lua b/advtrains_interlocking/train_sections.lua index a1ee87f..dab9cae 100644 --- a/advtrains_interlocking/train_sections.lua +++ b/advtrains_interlocking/train_sections.lua @@ -189,7 +189,7 @@ end) advtrains.te_register_on_create(function(id, train) -- let's see what track sections we find here local index = atround(train.index) - local pos = advtrains.path_get(train, index) + local pos = advtrains.round_vector_floor_y(advtrains.path_get(train, index)) local ts_id = ildb.check_and_repair_ts_at_pos(pos, 1) -- passing connid 1 - that always exists if ts_id then local ts = ildb.get_ts(ts_id) diff --git a/advtrains_interlocking/tsr_rail.lua b/advtrains_interlocking/tsr_rail.lua index c1e3c1c..5a808fc 100644 --- a/advtrains_interlocking/tsr_rail.lua +++ b/advtrains_interlocking/tsr_rail.lua @@ -3,7 +3,8 @@ -- Simple rail whose only purpose is to place a TSR on the position, as a temporary solution until the timetable system covers everything. -- This code resembles the code in lines/stoprail.lua -local S = attrans +-- Get current translator +local S = advtrains.interlocking.translate local function updateform(pos) local meta = minetest.get_meta(pos) diff --git a/advtrains_line_automation/init.lua b/advtrains_line_automation/init.lua index e7d0ea6..4c5cbf4 100644 --- a/advtrains_line_automation/init.lua +++ b/advtrains_line_automation/init.lua @@ -18,6 +18,14 @@ advtrains.lines = { local modpath = minetest.get_modpath(minetest.get_current_modname()) .. DIR_DELIM +-- Initialize internationalization (using ywang's poconvert) +advtrains.poconvert.from_flat("advtrains_line_automation") +-- ask engine for translator instance, this will load the translation files +advtrains.lines.translate = core.get_translator("advtrains_line_automation") + +-- Get current translator +local S = advtrains.lines.translate + dofile(modpath.."railwaytime.lua") dofile(modpath.."scheduler.lua") diff --git a/advtrains_line_automation/locale/advtrains_line_automation.de.tr b/advtrains_line_automation/locale/advtrains_line_automation.de.tr new file mode 100644 index 0000000..e020dca --- /dev/null +++ b/advtrains_line_automation/locale/advtrains_line_automation.de.tr @@ -0,0 +1,22 @@ +# textdomain: advtrains_line_automation +Closed=Geschlossen +Dep. Speed=Zielgeschwindigkeit bei Abfahrt +Door Delay=Zeit für die Türschließung +Door Side=Türseite +Kick out passengers=Fahrgäste zum Ausstieg zwingen +Left=Links +Next Stop:@n=Nächste Haltestelle:@n +Reverse train=Zug Umkehren +Right=Rechts +Save=Speichern +Station Code=Kennzeichen der Haltestelle +Station Name=Name der Haltestelle +Station code "@1" already exists and is owned by @2.=Die Haltestelle mit dem Kennzeichen „@1“ ist bereits vorhanden und wird von @2 verwaltet. +Station/Stop Track=Gleis zur Kennzeichnung einer Haltestelle +Stop Time=Wartezeit +This station is owned by @1. You are not allowed to edit its name.=Diese Haltestelle wird von @1 verwaltet. Sie dürfen sie nicht umbenennen. +Track=Gleis +Trains stopping here (ARS rules)=Züge, die hier halten (ARS-Regeln) +Unknown Station=Unbekannte Station +Wait for signal to clear=Warte bis Signal Fahrt zeigt +You are not allowed to configure this track.=Sie dürfen dieses Gleis nicht konfigurieren.
\ No newline at end of file diff --git a/advtrains_line_automation/locale/advtrains_line_automation.fr.tr b/advtrains_line_automation/locale/advtrains_line_automation.fr.tr new file mode 100644 index 0000000..2db6333 --- /dev/null +++ b/advtrains_line_automation/locale/advtrains_line_automation.fr.tr @@ -0,0 +1,22 @@ +# textdomain: advtrains_line_automation +Closed=Fermé +Dep. Speed=Vit. de départ +Door Delay=Durée d'ouverture des portes +Door Side=Ouv. des portes coté +Kick out passengers=Éjecter les passagers +Left=Gauche +Next Stop:@n=Prochain arrêt :@n +Reverse train=Inversion du sens de marche +Right=Droit +Save=Sauvegarder +Station Code=Code de Station +Station Name=Nom de Station +Station code "@1" already exists and is owned by @2.=Le code de station "@1" existe et est possédé par @2. +Station/Stop Track=Voie d'arrêt en station +Stop Time=Durée d'arrêt +This station is owned by @1. You are not allowed to edit its name.=Cette station est la propriété de @1. Vous n'êtes pas autorisé à modifier son nom. +Track=Voie +Trains stopping here (ARS rules)=Trains marquant l'arrêt (règles ARS) +Unknown Station=Gare inconnue +Wait for signal to clear=En attente de signal d'autorisation +You are not allowed to configure this track.=Vous n'êtes pas autorisé à configurer cette voie.
\ No newline at end of file diff --git a/advtrains_line_automation/locale/advtrains_line_automation.zh_CN.tr b/advtrains_line_automation/locale/advtrains_line_automation.zh_CN.tr new file mode 100644 index 0000000..252515c --- /dev/null +++ b/advtrains_line_automation/locale/advtrains_line_automation.zh_CN.tr @@ -0,0 +1,22 @@ +# textdomain: advtrains_line_automation +Closed= +Dep. Speed=出发速度 +Door Delay=车门关闭时间 +Door Side= +Kick out passengers=踢出乘客 +Left= +Next Stop:@n= +Reverse train=改变行车方向 +Right= +Save=保存 +Station Code=车站代码 +Station Name=车站名称 +Station code "@1" already exists and is owned by @2.= +Station/Stop Track=车站轨道 +Stop Time=停站时间 +This station is owned by @1. You are not allowed to edit its name.= +Track=轨道 +Trains stopping here (ARS rules)= +Unknown Station= +Wait for signal to clear= +You are not allowed to configure this track.=您不能调整这段轨道。
\ No newline at end of file diff --git a/advtrains_line_automation/locale/advtrains_line_automation.zh_TW.tr b/advtrains_line_automation/locale/advtrains_line_automation.zh_TW.tr new file mode 100644 index 0000000..2d580dc --- /dev/null +++ b/advtrains_line_automation/locale/advtrains_line_automation.zh_TW.tr @@ -0,0 +1,22 @@ +# textdomain: advtrains_line_automation +Closed= +Dep. Speed=出發速度 +Door Delay=車門關閉時間 +Door Side= +Kick out passengers=踢出乘客 +Left= +Next Stop:@n= +Reverse train=改變行車方向 +Right= +Save=儲存 +Station Code=車站碼 +Station Name=車站名稱 +Station code "@1" already exists and is owned by @2.= +Station/Stop Track=車站軌道 +Stop Time=停站時間 +This station is owned by @1. You are not allowed to edit its name.= +Track=軌道 +Trains stopping here (ARS rules)= +Unknown Station= +Wait for signal to clear= +You are not allowed to configure this track.=您不能調整這段軌道。
\ No newline at end of file diff --git a/advtrains_line_automation/po/README.md b/advtrains_line_automation/po/README.md new file mode 100644 index 0000000..3e94682 --- /dev/null +++ b/advtrains_line_automation/po/README.md @@ -0,0 +1,70 @@ +# Translations +Please read this document before working on any translations. + +Unlike many other mods, Advtrains uses `.po` files for localization, +which are then automatically converted to `.tr` files when the mod is +loaded. Therefore, please submit patches that edit the `.po` files. + +## Getting Started +The translation files can be edited like any other `.po` file. + +If the translation file for your language does not exist, create it by +copying `template.txt` to `advtrains.XX.tr`, where `XX` is replaced by +the language code. + +Feel free to use the [discussion mailing list][srht-discuss] if you +have any questions regarding localization. + +You can share your `.po` file directly or [as a patch][gsm] to the [dev +mailing list][srht-devel]. The latter is encouraged, but, unlike code +changes, translation files sent directly are also accepted. + +[tr-format]: https://minetest.gitlab.io/minetest/translations/#translation-file-format +[srht-discuss]: https://lists.sr.ht/~gpcf/advtrains-discuss +[srht-devel]: https://lists.sr.ht/~gpcf/advtrains-devel +[gsm]: https://git-send-email.io + +## Translation Notes +* Translations should be consistent. You can use other entries or the +translations in Minetest as a reference. +* Translations do not have to fully correspond to the original text - +they only need to provide the same information. In particular, +translations do not need to have the same linguistical structure as the +original text. +* Replacement sequences (`@1`, `@2`, etc) should not be translated. +* Certain abbreviations or names, such as "Ks" or "Zs 3", should +generally not be translated. + +### (de) German +* Verwenden Sie die neue Rechtschreibung und die Sie-Form. +* Mit der deutschen Tastaturbelegung unter Linux können die +Anführungszeichen „“ mit AltGr-V bzw. AltGr-B eingegeben werden. + +### (zh) Chinese +(This section is written in English to avoid writing the note twice or +using only one of the variants, as most of this section applies to both +the traditional and simplified variants.) + +* Please use the 「」 quotation marks for Traditional Chinese and “” +for Simplified Chinese. +* Please use the fullwidth variants of: , 、 。 ? ! : ; +* Please use the halfwidth variants of: ( ) [ ] / \ | +* Please do not leave any space between Han characters (including +fullwidth punctuation marks). +* Please leave a space between Han characters (excluding fullwidth +punctuation marks) and characters from other scripts (including +halfwidth punctuation marks). However, do not leave any space between +Han characters and Arabic numerals. + +## Notes for developers +* The `update-translations.sh` script can be used to update the +translation files. However, please make sure to install the +`basic_trains` mod before running the script. +* Please make sure that the first argument to `S` (or `attrans`) _only_ +includes string literals without formatting or concatenation. This is +unfortunately a limitation of the `xgettext` utility. +* Avoid word-by-word translations. +* Avoid manipulating translated strings (except for concatenation). Use +server-side translations if you have to modify the text sent to users. +* Avoid truncating strings unless multibyte characters are handled +properly. diff --git a/advtrains_line_automation/po/advtrains_line_automation.pot b/advtrains_line_automation/po/advtrains_line_automation.pot new file mode 100644 index 0000000..b7405b6 --- /dev/null +++ b/advtrains_line_automation/po/advtrains_line_automation.pot @@ -0,0 +1,102 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the advtrains_line_automation package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: advtrains_line_automation\n" +"Report-Msgid-Bugs-To: advtrains-discuss@lists.sr.ht\n" +"POT-Creation-Date: 2025-06-11 23:01+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=CHARSET\n" +"Content-Transfer-Encoding: 8bit\n" + +#: stoprail.lua +msgid "You are not allowed to configure this track." +msgstr "" + +#: stoprail.lua +msgid "Station Code" +msgstr "" + +#: stoprail.lua +msgid "Station Name" +msgstr "" + +#: stoprail.lua +msgid "Door Delay" +msgstr "" + +#: stoprail.lua +msgid "Dep. Speed" +msgstr "" + +#: stoprail.lua +msgid "Track" +msgstr "" + +#: stoprail.lua +msgid "Stop Time" +msgstr "" + +#: stoprail.lua +msgid "Door Side" +msgstr "" + +#: stoprail.lua +msgid "Closed" +msgstr "" + +#: stoprail.lua +msgid "Left" +msgstr "" + +#: stoprail.lua +msgid "Right" +msgstr "" + +#: stoprail.lua +msgid "Reverse train" +msgstr "" + +#: stoprail.lua +msgid "Kick out passengers" +msgstr "" + +#: stoprail.lua +msgid "Wait for signal to clear" +msgstr "" + +#: stoprail.lua +msgid "Trains stopping here (ARS rules)" +msgstr "" + +#: stoprail.lua +msgid "Save" +msgstr "" + +#: stoprail.lua +msgid "Station code \"@1\" already exists and is owned by @2." +msgstr "" + +#: stoprail.lua +msgid "This station is owned by @1. You are not allowed to edit its name." +msgstr "" + +#: stoprail.lua +msgid "Unknown Station" +msgstr "" + +#: stoprail.lua +msgid "Next Stop:\n" +msgstr "" + +#: stoprail.lua +msgid "Station/Stop Track" +msgstr "" diff --git a/advtrains_line_automation/po/de.po b/advtrains_line_automation/po/de.po new file mode 100644 index 0000000..b83156c --- /dev/null +++ b/advtrains_line_automation/po/de.po @@ -0,0 +1,610 @@ +msgid "" +msgstr "" +"Project-Id-Version: advtrains\n" +"Report-Msgid-Bugs-To: advtrains-discuss@lists.sr.ht\n" +"POT-Creation-Date: 2025-06-11 23:01+0200\n" +"PO-Revision-Date: 2025-06-11 23:02+0200\n" +"Last-Translator: Y. Wang <yw05@forksworld.de>\n" +"Language-Team: German\n" +"Language: de\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 3.2.2\n" + +#: stoprail.lua +msgid "Closed" +msgstr "Geschlossen" + +#: stoprail.lua +msgid "Dep. Speed" +msgstr "Zielgeschwindigkeit bei Abfahrt" + +#: stoprail.lua +msgid "Door Delay" +msgstr "Zeit für die Türschließung" + +#: stoprail.lua +msgid "Door Side" +msgstr "Türseite" + +#: stoprail.lua +msgid "Kick out passengers" +msgstr "Fahrgäste zum Ausstieg zwingen" + +#: stoprail.lua +msgid "Left" +msgstr "Links" + +#: stoprail.lua +msgid "Next Stop:\n" +msgstr "Nächste Haltestelle:\n" + +#: stoprail.lua +msgid "Reverse train" +msgstr "Zug Umkehren" + +#: stoprail.lua +msgid "Right" +msgstr "Rechts" + +#: stoprail.lua +msgid "Save" +msgstr "Speichern" + +#: stoprail.lua +msgid "Station Code" +msgstr "Kennzeichen der Haltestelle" + +#: stoprail.lua +msgid "Station Name" +msgstr "Name der Haltestelle" + +#: stoprail.lua +msgid "Station code \"@1\" already exists and is owned by @2." +msgstr "" +"Die Haltestelle mit dem Kennzeichen „@1“ ist bereits vorhanden und wird von " +"@2 verwaltet." + +#: stoprail.lua +msgid "Station/Stop Track" +msgstr "Gleis zur Kennzeichnung einer Haltestelle" + +#: stoprail.lua +msgid "Stop Time" +msgstr "Wartezeit" + +#: stoprail.lua +msgid "This station is owned by @1. You are not allowed to edit its name." +msgstr "" +"Diese Haltestelle wird von @1 verwaltet. Sie dürfen sie nicht umbenennen." + +#: stoprail.lua +msgid "Track" +msgstr "Gleis" + +#: stoprail.lua +msgid "Trains stopping here (ARS rules)" +msgstr "Züge, die hier halten (ARS-Regeln)" + +#: stoprail.lua +msgid "Unknown Station" +msgstr "Unbekannte Station" + +#: stoprail.lua +msgid "Wait for signal to clear" +msgstr "Warte bis Signal Fahrt zeigt" + +#: stoprail.lua +msgid "You are not allowed to configure this track." +msgstr "Sie dürfen dieses Gleis nicht konfigurieren." + +#~ msgid "(Doors closed)" +#~ msgstr "(Türen geschlossen)" + +#~ msgid "3-way turnout" +#~ msgstr "Dreiwegweiche" + +#~ msgid "90+Angle Diamond Crossing Track" +#~ msgstr "Kreuzung mit einem achsenparallelen Gleis" + +#~ msgid "<No coupler>" +#~ msgstr "<Keine Kupplung vorhanden>" + +#~ msgid "@1 Platform (45 degree)" +#~ msgstr "Hoher @1-Bahnsteig (45°)" + +#~ msgid "@1 Platform (high)" +#~ msgstr "Hoher @1-Bahnsteig" + +#~ msgid "@1 Platform (low)" +#~ msgstr "Niedriger @1-Bahnsteig" + +#~ msgid "@1 Platform (low, 45 degree)" +#~ msgstr "Niedriger @1-Bahnsteig (45°)" + +#~ msgid "@1 Slope" +#~ msgstr "@1 Steigung" + +#~ msgid "ATC Kick command warning: doors are closed." +#~ msgstr "" +#~ "Zugbeeinflussung: Wegen geschlossener Türen werden Fahrgäste nicht zum " +#~ "Ausstieg gezwungen." + +#~ msgid "ATC Kick command warning: train moving." +#~ msgstr "" +#~ "Zugbeeinflussung: Der Zug befindet sich in Bewegung, Fahrgäste werden " +#~ "nicht zum Ausstieg gezwungen." + +#~ msgid "ATC Reverse command warning: didn't reverse train, train moving." +#~ msgstr "" +#~ "Zugbeeinflussung: Der Zug befindet sich in Bewegung und kann nicht " +#~ "umgekehrt werden." + +#~ msgid "ATC command parse error: Unknown command: @1" +#~ msgstr "Zugbeeinflussung: Unbekannter Befehl: @1" + +#~ msgid "ATC command syntax error: I statement not closed: @1" +#~ msgstr "Zugbeeinflussung: Unvollständiger I-Befehl: @1" + +#~ msgid "ATC controller" +#~ msgstr "Zugbeeinflussungsgleis" + +#~ msgid "" +#~ "ATC controller, mode @1\n" +#~ "Channel: @2" +#~ msgstr "" +#~ "Zugbeeinflussungsgleis in Betriebsart „@1“\n" +#~ "Kanal: @2" + +#~ msgid "" +#~ "ATC controller, mode @1\n" +#~ "Command: @2" +#~ msgstr "" +#~ "Zugbeeinflussungsgleis in Betriebsart „@1“\n" +#~ "Befehl: @2" + +#~ msgid "Access to @1" +#~ msgstr "Zugang zu @1" + +#~ msgid "Andrew's Cross" +#~ msgstr "Andreaskreuz" + +#~ msgid "Back of train would end up off track, cancelling." +#~ msgstr "Der hinterer Teil dez Zuges wäre nicht auf dem Gleis." + +#~ msgid "Big Industrial Train Engine" +#~ msgstr "Große Industrielle Lokomotive" + +#~ msgid "Box Wagon" +#~ msgstr "Güterwaggon" + +#~ msgid "Buffer and Chain Coupler" +#~ msgstr "Schraubenkupplung" + +#~ msgid "Bumper" +#~ msgstr "Prellbock" + +#~ msgid "Can not couple: The couplers of the trains do not match (@1 and @2)." +#~ msgstr "Die Kupplungen der Züge passen nicht zueinander (@1 und @2)." + +#~ msgid "" +#~ "Can place and configure LuaATC components, including execute potentially " +#~ "harmful Lua code" +#~ msgstr "" +#~ "Kann LuaATC-Bauteile platzieren und konfigurieren (auch evtl. schädliche " +#~ "Programme ausführen)" + +#~ msgid "Can't get on: wagon full or doors closed!" +#~ msgstr "" +#~ "Sie können nicht einsteigen: der Waggon ist voll oder die Türen sind " +#~ "geschlossen." + +#, fuzzy +#~ msgid "Can't place: Not enough slope items left (@1 required)" +#~ msgstr "" +#~ "Es kann nicht platziert werden: Sie haben nicht genug Steigungsblöcke, es " +#~ "werden insgesamt @1 benötigt." + +#, fuzzy +#~ msgid "Can't place: There's no slope of length @1" +#~ msgstr "" +#~ "Es kann nicht platziert werden: die Steigung der Länge @1 ist nicht " +#~ "definiert." + +#, fuzzy +#~ msgid "Can't place: no supporting node at upper end." +#~ msgstr "" +#~ "Es kann nicht platziert werden: es gibt keinen unterstützenden Block am " +#~ "Ende der Steigung." + +#, fuzzy +#~ msgid "Can't place: not pointing at node" +#~ msgstr "Es kann nicht platziert werden: Sie zeigen nicht auf einem Block." + +#~ msgid "Can't place: protected position!" +#~ msgstr "Es kann nicht platziert werden: diese Position ist geschützt." + +#, fuzzy +#~ msgid "Can't place: space occupied!" +#~ msgstr "Es kann nicht platziert werden: Diese Position ist besetzt." + +#~ msgid "Command" +#~ msgstr "Befehl" + +#~ msgid "Command (on)" +#~ msgstr "Befehl (wenn aktiviert)" + +#~ msgid "Default Seat" +#~ msgstr "Standardsitzplatz" + +#~ msgid "Default Seat (driver stand)" +#~ msgstr "Standardsitzplatz (Führerstand)" + +#~ msgid "Deprecated Track" +#~ msgstr "ausrangiertes Gleis, nicht verwenden." + +#~ msgid "Detailed Steam Engine" +#~ msgstr "Detaillierte Dampflokomotive" + +#~ msgid "Detector Rail" +#~ msgstr "Detektorgleis" + +#~ msgid "Diagonal Diamond Crossing Track" +#~ msgstr "Diagonale Gleiskreuzung" + +#~ msgid "Digiline channel" +#~ msgstr "Digiline-Kanal" + +#~ msgid "Doors are closed! (Try holding sneak key!)" +#~ msgstr "Die Türen sind geschlossen." + +#~ msgid "" +#~ "Doors are closed. Use Sneak+rightclick to ignore the closed doors and get " +#~ "off." +#~ msgstr "" +#~ "Die Türen sind geschlossen. Nutzen Sie Schleichen+Rechtsklick, um trotz " +#~ "geschlossener Türen auszusteigen." + +#, fuzzy +#~ msgid "Driver Stand" +#~ msgstr "Führerstand" + +#~ msgid "Driver Stand (left)" +#~ msgstr "Führerstand Links" + +#~ msgid "Driver Stand (right)" +#~ msgstr "Führerstand Rechts" + +#~ msgid "Driver stand" +#~ msgstr "Führerstand" + +#~ msgid "Driver's cab" +#~ msgstr "Führerstand" + +#~ msgid "Get off" +#~ msgstr "Aussteigen" + +#~ msgid "Get off (forced)" +#~ msgstr "Ausstieg zwingen" + +#~ msgid "Industrial Train Engine" +#~ msgstr "Industrielle Lokomotive" + +#~ msgid "Industrial tank wagon" +#~ msgstr "Tankwaggon" + +#~ msgid "Industrial wood wagon" +#~ msgstr "Holztransportwaggon" + +#~ msgid "Japanese Train Engine" +#~ msgstr "Japanische Personenzug-Lokomotive" + +#~ msgid "Japanese Train Inter-Wagon Connection" +#~ msgstr "Waggonzwischenverbindung Japanischer Personenzüge" + +#~ msgid "Japanese Train Wagon" +#~ msgstr "Japanischer Personenzug-Passagierwaggon" + +#, fuzzy +#~ msgid "Japanese signal pole" +#~ msgstr "Japanischer Personenzug-Passagierwaggon" + +#~ msgid "Lampless Signal" +#~ msgstr "Mechanisches Signal" + +#~ msgid "Line" +#~ msgstr "Linie" + +#~ msgid "Loading Track" +#~ msgstr "Beladungsgleis" + +#~ msgid "Lock couples" +#~ msgstr "Kupplungen sperren" + +#~ msgid "LuaATC component with error: @1" +#~ msgstr "LuaATC-Bauteil mit Fehlermeldung: @1" + +#~ msgid "No such lua entity." +#~ msgstr "" +#~ "Sie zeigen nicht auf einem Objekt, das mit diesem Werkzeug kopiert werden " +#~ "kann." + +#~ msgid "No such train: @1." +#~ msgstr "Es gibt keinen mit „@1“ identifizierbaren Zug." + +#~ msgid "No such wagon: @1." +#~ msgstr "Es gibt keinen mit „@1“ identifizierbaren Waggon." + +#, fuzzy +#~ msgid "Not allowed to do this." +#~ msgstr "Sie dürfen dieses Gleis nicht konfigurieren." + +#~ msgid "Passenger Wagon" +#~ msgstr "Passagierwaggon" + +#, fuzzy +#~ msgid "Passenger area" +#~ msgstr "Passagierwaggon" + +#~ msgid "" +#~ "Passive Component Naming Tool\n" +#~ "\n" +#~ "Right-click to name a passive component." +#~ msgstr "" +#~ "PC-Benennungswerkzeug\n" +#~ "\n" +#~ "Rechtsklick zur Benennung der passiven Komponente." + +#~ msgid "Perpendicular Diamond Crossing Track" +#~ msgstr "Kreuzung mit zueinander orthogonalen Gleisen" + +#~ msgid "Point Speed Restriction Track" +#~ msgstr "Geschwindigkeitskontrollgleis" + +#~ msgid "Point speed restriction: @1" +#~ msgstr "Geschwindigkeitskontrolle: @1" + +#~ msgid "Position is occupied by a train." +#~ msgstr "Ein Zug steht an dieser Position." + +#~ msgid "Save wagon properties" +#~ msgstr "Waggon-Einstellungen speichern" + +#~ msgid "Scharfenberg Coupler" +#~ msgstr "Scharfenbergkupplung" + +#~ msgid "Select seat:" +#~ msgstr "Wählen Sie einen Sitzplatz aus:" + +#~ msgid "Show Inventory" +#~ msgstr "Inventar Zeigen" + +#~ msgid "Signal" +#~ msgstr "Lichtsignal" + +#~ msgid "Speed:" +#~ msgstr "Geschw.:" + +#~ msgid "Steam Engine" +#~ msgstr "Dampflokomotive" + +#~ msgid "Subway Passenger Wagon" +#~ msgstr "U-Bahn-Waggon" + +#~ msgid "Target:" +#~ msgstr "Zielges.:" + +#~ msgid "Text displayed inside train" +#~ msgstr "Innere Anzeige" + +#~ msgid "Text displayed outside on train" +#~ msgstr "Äußere Anzeige" + +#, fuzzy +#~ msgid "That wagon does not exist!" +#~ msgstr "In diesem Waggon ist kein Sitzplatz vorhanden." + +#~ msgid "The clipboard couldn't access the metadata. Copy failed." +#~ msgstr "" +#~ "Wegen des fehlgeschlagenen Zugriffs auf die Metadaten konnte der Zug " +#~ "nicht kopiert werden." + +#~ msgid "The clipboard couldn't access the metadata. Paste failed." +#~ msgstr "" +#~ "Wegen des fehlgeschlagenen Zugriffs auf die Metadaten konnte eine Kopie " +#~ "des Zuges nicht eingefügt werden." + +#~ msgid "The clipboard is empty." +#~ msgstr "Das Clipboard ist leer." + +#, fuzzy +#~ msgid "The track you are trying to place the wagon on is not long enough!" +#~ msgstr "Das Gleis, auf dem der Waggon platziert werden woll, ist zu kurz." + +#~ msgid "The track you are trying to place the wagon on is not long enough." +#~ msgstr "Das Gleis, auf dem der Waggon platziert werden woll, ist zu kurz." + +#~ msgid "The wagon's inventory is not empty." +#~ msgstr "Das Inventar dieses Waggons ist nicht leer." + +#~ msgid "There's a Signal Influence Point here." +#~ msgstr "Hier ist ein Signal-Beeinflussungspunkt." + +#~ msgid "There's a Track Circuit Break here." +#~ msgstr "Hier ist eine Gleisabschnittsgrenze (TCB)." + +#, fuzzy +#~ msgid "This Wagon ID" +#~ msgstr "Der Waggon ist voll." + +#, fuzzy +#~ msgid "This node can't be changed using the trackworker!" +#~ msgstr "Dieser Block kann nicht mit dem Gleiswerkzeug bearbeitet werden." + +#, fuzzy +#~ msgid "This node can't be rotated using the trackworker!" +#~ msgstr "Dieser Block kann nicht mit dem Gleiswerkzeug gedreht werden." + +#~ msgid "This position is protected!" +#~ msgstr "Diese Position ist geschützt!" + +#~ msgid "This track can not be changed." +#~ msgstr "Dieses Gleis kann nicht geändert werden." + +#, fuzzy +#~ msgid "This track can not be removed!" +#~ msgstr "Dieses Gleis kann nicht entfernt werden." + +#, fuzzy +#~ msgid "This track can not be rotated!" +#~ msgstr "Dieses Gleis kann nicht gedreht werden." + +#~ msgid "This wagon has no seats." +#~ msgstr "In diesem Waggon ist kein Sitzplatz vorhanden." + +#~ msgid "This wagon is full." +#~ msgstr "Der Waggon ist voll." + +#~ msgid "This wagon is owned by @1, you can't destroy it." +#~ msgstr "Dieser Waggon gehört @1, Sie dürfen ihn nicht abbauen." + +#~ msgid "" +#~ "Track Worker Tool\n" +#~ "\n" +#~ "Left-click: change rail type (straight/curve/switch)\n" +#~ "Right-click: rotate object" +#~ msgstr "" +#~ "Gleiswerkzeug\n" +#~ "\n" +#~ "Linksklick: Gleistyp ändern\n" +#~ "Rechtsklick: Objekt drehen" + +#, fuzzy +#~ msgid "Train " +#~ msgstr "Der Zug wurde Kopiert." + +#~ msgid "Train copied." +#~ msgstr "Der Zug wurde Kopiert." + +#~ msgid "" +#~ "Train copy/paste tool\n" +#~ "\n" +#~ "Left-click: copy train\n" +#~ "Right-click: paste train" +#~ msgstr "" +#~ "Werkzeug zur Erstellung von Zugkopien\n" +#~ "\n" +#~ "Linksklick: Zug ins Clipboard kopieren\n" +#~ "Right-click: Kopierten Zug einfügen" + +#~ msgid "Unconfigured ATC controller" +#~ msgstr "Nicht konfiguiertes Zugbeeinflussungsgleis" + +#~ msgid "Unconfigured LuaATC component" +#~ msgstr "Nicht konfiguierter LuaATC-Bauteil" + +#~ msgid "Unloading Track" +#~ msgstr "Abladungsgleis" + +#~ msgid "Use Sneak+rightclick to bypass closed doors!" +#~ msgstr "" +#~ "Nutzen Sie Schleichen+Rechtsklick, um trotz geschlossener Türen " +#~ "einzusteigen." + +#, fuzzy +#~ msgid "Wagon Properties Tool" +#~ msgstr "Waggon-Einstellungen" + +#~ msgid "" +#~ "Wagon needs to be decoupled from other wagons in order to destroy it." +#~ msgstr "Der Waggon muss abgekoppelt sein, damit Sie ihn abbauen können." + +#~ msgid "Wagon properties" +#~ msgstr "Waggon-Einstellungen" + +#~ msgid "Wallmounted Signal (left)" +#~ msgstr "An der linken Seite montiertes Signal" + +#~ msgid "Wallmounted Signal (right)" +#~ msgstr "An der rechten Seite montiertes Signal" + +#~ msgid "Wallmounted Signal (top)" +#~ msgstr "An der Decke montiertes Signal" + +#~ msgid "" +#~ "Warning: If you destroy this wagon, you only get some steel back! If you " +#~ "are sure, hold Sneak and left-click the wagon." +#~ msgstr "" +#~ "Warnung: Durch den Abbau des Waggons erhalten Sie nur etwas Stahl zurück. " +#~ "Nutzen Sie Schleichen+Linksklick, um dem Waggon abzubauen." + +#~ msgid "Y-turnout" +#~ msgstr "Y-Weiche" + +#~ msgid "You are not allowed to access the driver stand." +#~ msgstr "Sie haben keinen Zugang zum Führerstand." + +#~ msgid "You are not allowed to build near tracks at this protected position." +#~ msgstr "" +#~ "Sie dürfen an geschützten Stellen nicht in der Nähe von Gleisen bauen." + +#~ msgid "" +#~ "You are not allowed to build near tracks without the track_builder " +#~ "privilege." +#~ msgstr "" +#~ "Sie dürfen ohne das „track_builder“-Privileg nicht in der Nähe von " +#~ "Gleisen bauen." + +#~ msgid "You are not allowed to build tracks at this protected position." +#~ msgstr "Sie dürfen an geschützten Stellen kein Gleis bauen." + +#~ msgid "" +#~ "You are not allowed to build tracks without the track_builder privilege." +#~ msgstr "Sie dürfen ohne das „track_builder“-Privileg kein Gleis bauen." + +#~ msgid "" +#~ "You are not allowed to configure this LuaATC component without the @1 " +#~ "privilege." +#~ msgstr "" +#~ "Sie dürfen ohne das „@1“-Privileg diesen LuaATC-Bauteil nicht " +#~ "konfigurieren." + +#~ msgid "" +#~ "You are not allowed to configure this track without the @1 privilege." +#~ msgstr "Sie dürfen ohne das „@1“-Privileg dieses Gleis nicht konfigurieren." + +#~ msgid "" +#~ "You are not allowed to couple trains without the train_operator privilege." +#~ msgstr "Sie dürfen ohne das „train_operator“-Privileg keine Züge ankuppeln." + +#, fuzzy +#~ msgid "You are not allowed to modify this protected track." +#~ msgstr "Sie dürfen an geschützten Stellen kein Gleis bauen." + +#~ msgid "" +#~ "You are not allowed to name LuaATC passive components without the @1 " +#~ "privilege." +#~ msgstr "Sie dürfen ohne das „@1“ keinen passiven LuaATC-Bauteil benennen." + +#~ msgid "" +#~ "You are not allowed to operate turnouts and signals without the " +#~ "railway_operator privilege." +#~ msgstr "" +#~ "Sie dürfen ohne das „railway_operator“-Privileg keine Bahnanlage " +#~ "operieren." + +#~ msgid "You can't get on this wagon." +#~ msgstr "Sie können nicht in diesen Waggon einsteigen." + +#~ msgid "You do not have the @1 privilege." +#~ msgstr "Ihnen fehlt das „@1“-Privileg." + +#, fuzzy +#~ msgid "You don't have the train_operator privilege." +#~ msgstr "Ihnen fehlt das „@1“-Privileg." + +#~ msgid "" +#~ "You need to own at least one neighboring wagon to destroy this couple." +#~ msgstr "" +#~ "Sie müssen Besitzer eines angrenzenden Waggons sein, um hier abzukuppeln." diff --git a/advtrains_line_automation/po/fr.po b/advtrains_line_automation/po/fr.po new file mode 100644 index 0000000..1322e89 --- /dev/null +++ b/advtrains_line_automation/po/fr.po @@ -0,0 +1,896 @@ +msgid "" +msgstr "" +"Project-Id-Version: advtrains\n" +"Report-Msgid-Bugs-To: advtrains-discuss@lists.sr.ht\n" +"POT-Creation-Date: 2025-06-11 23:01+0200\n" +"PO-Revision-Date: 2025-03-25 15:06+0100\n" +"Last-Translator: Tanavit <tanavit@posto.ovh>\n" +"Language-Team: French\n" +"Language: fr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 2.4.2\n" + +#: stoprail.lua +msgid "Closed" +msgstr "Fermé" + +#: stoprail.lua +msgid "Dep. Speed" +msgstr "Vit. de départ" + +#: stoprail.lua +msgid "Door Delay" +msgstr "Durée d'ouverture des portes" + +#: stoprail.lua +msgid "Door Side" +msgstr "Ouv. des portes coté" + +#: stoprail.lua +msgid "Kick out passengers" +msgstr "Éjecter les passagers" + +#: stoprail.lua +msgid "Left" +msgstr "Gauche" + +#: stoprail.lua +msgid "Next Stop:\n" +msgstr "Prochain arrêt :\n" + +#: stoprail.lua +msgid "Reverse train" +msgstr "Inversion du sens de marche" + +#: stoprail.lua +msgid "Right" +msgstr "Droit" + +#: stoprail.lua +msgid "Save" +msgstr "Sauvegarder" + +#: stoprail.lua +msgid "Station Code" +msgstr "Code de Station" + +#: stoprail.lua +msgid "Station Name" +msgstr "Nom de Station" + +#: stoprail.lua +msgid "Station code \"@1\" already exists and is owned by @2." +msgstr "Le code de station \"@1\" existe et est possédé par @2." + +#: stoprail.lua +msgid "Station/Stop Track" +msgstr "Voie d'arrêt en station" + +#: stoprail.lua +msgid "Stop Time" +msgstr "Durée d'arrêt" + +#: stoprail.lua +msgid "This station is owned by @1. You are not allowed to edit its name." +msgstr "" +"Cette station est la propriété de @1. Vous n'êtes pas autorisé à modifier " +"son nom." + +#: stoprail.lua +msgid "Track" +msgstr "Voie" + +#: stoprail.lua +msgid "Trains stopping here (ARS rules)" +msgstr "Trains marquant l'arrêt (règles ARS)" + +#: stoprail.lua +msgid "Unknown Station" +msgstr "Gare inconnue" + +#: stoprail.lua +msgid "Wait for signal to clear" +msgstr "En attente de signal d'autorisation" + +#: stoprail.lua +msgid "You are not allowed to configure this track." +msgstr "Vous n'êtes pas autorisé à configurer cette voie." + +#~ msgid " does not exist or is invalid" +#~ msgstr " n'existe pas ou est invalide" + +#~ msgid " is at " +#~ msgstr " est à la position " + +#~ msgid " units" +#~ msgstr " Unités" + +#~ msgid " wagon:destroy(): data is not set!" +#~ msgstr " Appel de wagon:destroy() : données non définies !" + +#~ msgid "!!! Train off track !!!" +#~ msgstr "!!! Train hors voie !!!" + +#~ msgid "(Doors closed)" +#~ msgstr "(Portes closes)" + +#~ msgid "(log" +#~ msgstr "(log" + +#~ msgid ", using placeholder" +#~ msgstr ", dans un espace réservé" + +#~ msgid "3-way turnout" +#~ msgstr "Embranchement triple" + +#~ msgid "90+Angle Diamond Crossing Track" +#~ msgstr "Croisement perpendiculo-diagonal" + +#~ msgid "<No coupler>" +#~ msgstr "<Pas de coupleur>" + +#~ msgid "@1 Platform (45 degree)" +#~ msgstr "Quai @1 (haut, 45°)" + +#~ msgid "@1 Platform (high)" +#~ msgstr "Quai @1 (haut)" + +#~ msgid "@1 Platform (low)" +#~ msgstr "Quai @1 (bas)" + +#~ msgid "@1 Platform (low, 45 degree)" +#~ msgstr "Quai @1 (bas, 45°)" + +#~ msgid "@1 Slope" +#~ msgstr "Pente @1" + +#~ msgid "ATC Kick command warning: doors are closed." +#~ msgstr "Avertissement commande ATC Éjecter : portes closes." + +#~ msgid "ATC Kick command warning: train moving." +#~ msgstr "Avertissement commande ATC Éjecter : train en mouvement." + +#~ msgid "ATC Reverse command warning: didn't reverse train, train moving." +#~ msgstr "" +#~ "Attention : Commande ATC de renversement impossible car le train se " +#~ "déplace." + +#~ msgid "ATC command parse error: Unknown command: @1" +#~ msgstr "Erreur d'analyse de commande ATC : Commande inconnue : @1" + +#~ msgid "ATC command syntax error: I statement not closed: @1" +#~ msgstr "" +#~ "Erreur de syntaxe de commande ATC : instruction \"I\" incomplète : @1" + +#~ msgid "ATC controller" +#~ msgstr "Controlleur ATC" + +#~ msgid "" +#~ "ATC controller, mode @1\n" +#~ "Channel: @2" +#~ msgstr "" +#~ "Controlleur ATC, mode @1\n" +#~ "Canal : @2" + +#~ msgid "" +#~ "ATC controller, mode @1\n" +#~ "Command: @2" +#~ msgstr "" +#~ "Controlleur ATC, mode @1\n" +#~ "Commande : @2" + +#~ msgid "Access to @1" +#~ msgstr "Accès à @1" + +#~ msgid "Advtrains Status: no_action" +#~ msgstr "État d'advtrains : aucune action" + +#~ msgid "Advtrains is already running normally!" +#~ msgstr "Advtrains fonctionne déjà correctement !" + +#~ msgid "Allow these players to access your wagon:" +#~ msgstr "Autoriser ces joueurs à embarquer :" + +#~ msgid "Andrew's Cross" +#~ msgstr "Croix de Saint André" + +#~ msgid "Back of train would end up off track, cancelling." +#~ msgstr "La fin du train serait hors voie : annulation." + +#~ msgid "Big Industrial Train Engine" +#~ msgstr "Grosse locomotive industrielle" + +#~ msgid "Boiler" +#~ msgstr "Chaudière à vapeur" + +#~ msgid "Box Wagon" +#~ msgstr "Wagon de frêt" + +#~ msgid "Buffer and Chain Coupler" +#~ msgstr "Attelage à tampon et vis" + +#~ msgid "Bumper" +#~ msgstr "Heurtoir" + +#~ msgid "Can not couple: The couplers of the trains do not match (@1 and @2)." +#~ msgstr "" +#~ "Accouplement impossible: les attelages des trains ne concordent pas (@1 " +#~ "et @2)." + +#~ msgid "Can operate turnouts and signals in unprotected areas" +#~ msgstr "" +#~ "Possibilité d'opérer des embranchements et signaux dans les zones non " +#~ "protégées" + +#~ msgid "" +#~ "Can place and configure LuaATC components, including execute potentially " +#~ "harmful Lua code" +#~ msgstr "" +#~ "Permet le placement et la configuration de composants LuaATC avec risque " +#~ "d'exécution de code Lua dangereux" + +#~ msgid "Can place and dig tracks in unprotected areas" +#~ msgstr "" +#~ "Possibilité de poser ou retirer des voies dans les zones non protégées" + +#~ msgid "" +#~ "Can place, remove and operate any train, regardless of owner, whitelist, " +#~ "or protection" +#~ msgstr "" +#~ "Possibilité de poser, retirer ou opérer un quelconque train, " +#~ "indépendamment du propriétaire, de la liste blanche ou de protection" + +#~ msgid "Can place, remove and operate trains" +#~ msgstr "Possibilité de poser, retirer ou opérer les trains" + +#~ msgid "Can't get on: wagon full or doors closed!" +#~ msgstr "" +#~ "Embarquement impossible : le wagon est plein ou ses portes sont closes !" + +#~ msgid "Can't place: Not enough slope items left (@1 required)" +#~ msgstr "" +#~ "Placement impossible : quantité insuffisante de voie pentue (@1 manquant)" + +#~ msgid "Can't place: There's no slope of length @1" +#~ msgstr "Placement impossible : il n'y a pas de voie pentue de longueur @1" + +#~ msgid "Can't place: no supporting node at upper end." +#~ msgstr "" +#~ "Placement impossible : pas de nœud d'appui à l'extrémité supérieure." + +#~ msgid "Can't place: not pointing at node" +#~ msgstr "Placement impossible : ne pointe pas un nœud" + +#~ msgid "Can't place: protected position!" +#~ msgstr "Placement impossible : emplacement protégé" + +#~ msgid "Can't place: space occupied!" +#~ msgstr "Placement impossible : espace occupé !" + +#~ msgid "Caution" +#~ msgstr "Attention" + +#~ msgid "Chimney" +#~ msgstr "Cheminée" + +#~ msgid "Clear 'Disable ARS' flag" +#~ msgstr "Effacer le drapeau \"Désactiver l'ARS\"" + +#~ msgid "Clear (proceed)" +#~ msgstr "Autorisation (procédez)" + +#~ msgid "Clear Local Environment" +#~ msgstr "Effacer l'environnement LuaATC" + +#~ msgid "Code" +#~ msgstr "Code" + +#~ msgid "Command" +#~ msgstr "Commande" + +#~ msgid "Command (on)" +#~ msgstr "Commande (marche)" + +#~ msgid "" +#~ "Crash during advtrains main step - skipping the shutdown save operation " +#~ "to not save inconsistent data!" +#~ msgstr "" +#~ "Crash durant le pas principal d'advtrains - saut de l'opération de " +#~ "sauvegarde de terminaison pour éviter l'enregistrement de données " +#~ "corrompues !" + +#~ msgid "Current FC: " +#~ msgstr "Code de fret courant: " + +#~ msgid "Danger (halt)" +#~ msgstr "Danger (stop)" + +#~ msgid "" +#~ "Data is being saved. While saving, advtrains will remove the players from " +#~ "trains. Save files will be reloaded afterwards!" +#~ msgstr "" +#~ "Données en cours de sauvegarde. Durant cette phase, advtrains débarquera " +#~ "les joueurs des trains. Les fichiers de sauvegarde seront ultérieurement " +#~ "rechargés !" + +#~ msgid "Default Seat" +#~ msgstr "Siège par défaut" + +#~ msgid "Default Seat (driver stand)" +#~ msgstr "Siège par défaut (poste de pilotage)" + +# Routage est il le bon terme ? +#~ msgid "Delete all train routes, force them to recalculate" +#~ msgstr "Suppression et recalcul de tous les routages" + +#~ msgid "Deprecated Track" +#~ msgstr "Voie déconseillée" + +#~ msgid "" +#~ "Destroying wagon with inventory, but inventory is not found? Shouldn't " +#~ "happen!" +#~ msgstr "Desctruction d'un wagon avec inventaire introuvable ? Anomalie !" + +#~ msgid "" +#~ "Detach all players, especially the offline ones, from all trains. Use " +#~ "only when no one serious is on a train." +#~ msgstr "" +#~ "Débarque tous les joueurs, en particulier ceux déconnectés, de tous les " +#~ "trains. À n'utiliser que quand aucun joueur sérieux n'a embarqué." + +#~ msgid "Detailed Steam Engine" +#~ msgstr "Locomotive à vapeur complexe" + +#~ msgid "Detector Rail" +#~ msgstr "Voie détectrice" + +#~ msgid "Diagonal Diamond Crossing Track" +#~ msgstr "Croisement diagonal" + +#~ msgid "Digiline channel" +#~ msgstr "Canal Digiline" + +#~ msgid "Disable the advtrains globalstep temporarily" +#~ msgstr "Désactive temporairement le pas global d'advtrains" + +#~ msgid "Disabled advtrains successfully" +#~ msgstr "Succès de la désactivation d'advtrains" + +#~ msgid "Doors are closed! (Try holding sneak key!)" +#~ msgstr "Portes closes : (Essayez la \"sneak key\"!\")" + +#~ msgid "" +#~ "Doors are closed. Use Sneak+rightclick to ignore the closed doors and get " +#~ "off." +#~ msgstr "" +#~ "Portes closes ! Utilisez \"Marcher lentement (Sneak)\" et Clic-Droit pour " +#~ "franchir les portes et débarquer." + +#~ msgid "Driver Stand" +#~ msgstr "Poste de pilotage" + +#~ msgid "Driver Stand (left)" +#~ msgstr "Poste de pilotage (gauche)" + +#~ msgid "Driver Stand (right)" +#~ msgstr "Poste de pilotage (droit)" + +#~ msgid "Driver stand" +#~ msgstr "Poste de pilotage" + +#~ msgid "Driver's cab" +#~ msgstr "Cabine de pilotage" + +#~ msgid "Freight Code:" +#~ msgstr "Code de frêt :" + +#~ msgid "Get off" +#~ msgstr "Débarquer" + +#~ msgid "Get off (forced)" +#~ msgstr "Débarquer (de force)" + +#~ msgid "Industrial Train Engine" +#~ msgstr "Locomotive industrielle" + +#~ msgid "Industrial tank wagon" +#~ msgstr "Wagon-citerne industriel" + +#~ msgid "Industrial wood wagon" +#~ msgstr "Wagon grumier industriel" + +#~ msgid "Instructed to save() but load() was never called!" +#~ msgstr "Appel de save() requis sans appel préalable de load() !" + +#~ msgid "Insufficient privileges to use this!" +#~ msgstr "Privilèges insuffisants pour utiliser ceci !" + +#~ msgid "Japanese Train Engine" +#~ msgstr "Motrice Japonaise" + +#~ msgid "Japanese Train Inter-Wagon Connection" +#~ msgstr "Passage inter-voiture de train Japonais" + +#~ msgid "Japanese Train Wagon" +#~ msgstr "Voiture Japonaise" + +#~ msgid "Japanese signal pole" +#~ msgstr "Voiture Japonaise" + +#~ msgid "Lampless Signal" +#~ msgstr "Sémaphore" + +#~ msgid "Left,Right,Closed;" +#~ msgstr "Gauche,Droit,Fermé;" + +#~ msgid "Line" +#~ msgstr "Ligne" + +#~ msgid "Liquid: " +#~ msgstr "Liquide : " + +#~ msgid "Liquid: empty" +#~ msgstr "Liquide : vide" + +#~ msgid "Loading Track" +#~ msgstr "Voie de Chargement" + +#~ msgid "Lock couples" +#~ msgstr "Verrouiller l'accouplement" + +#~ msgid "LuaATC Environment" +#~ msgstr "Environnement LuaATC" + +#~ msgid "LuaATC Mesecon Controller" +#~ msgstr "Commande Mesecon de LuaATC" + +#~ msgid "LuaATC Operation Panel" +#~ msgstr "Panneau de commande de LuaATC" + +#~ msgid "LuaATC component assigned to an invalid environment" +#~ msgstr "Composant LuaATC assigné à un environnement invalide" + +#~ msgid "LuaATC component assigned to environment '@1'" +#~ msgstr "Composant LuaATC assigné à l'environnement '@1'" + +#~ msgid "LuaATC component with error: @1" +#~ msgstr "Erreur @1 du composant LuaATC" + +#~ msgid "Missing train_operator privilege" +#~ msgstr "Privilège \"train_operator\" manquant" + +#~ msgid "Munich U-Bahn Distant Signal (" +#~ msgstr "Signal distant métro de Munich (" + +#~ msgid "Munich U-Bahn Main Signal (" +#~ msgstr "Signal principal métro de Munich (" + +#~ msgid "Next FC:" +#~ msgstr "Code de fret suivant :" + +#~ msgid "No callback to handle schedule" +#~ msgstr "Absence de fonction de gestion de planning" + +#~ msgid "No such lua entity." +#~ msgstr "Pas de telle entité lua." + +#~ msgid "No such train: @1." +#~ msgstr "Pas de tel train : @1." + +#~ msgid "No such wagon: @1." +#~ msgstr "Pas de tel wagon : @1." + +#~ msgid "Not a valid wagon id." +#~ msgstr "Identificateur de wagon invalide." + +#~ msgid "Not allowed to do this." +#~ msgstr "Vous n'êtes pas autorisé effectuer ceci." + +#~ msgid "" +#~ "OVERRUN RED SIGNAL! Examine situation and reverse train to move again." +#~ msgstr "" +#~ "Franchissement de signal rouge : examinez la situation et inversez le " +#~ "sens de marche du train." + +#~ msgid "Onboard Computer" +#~ msgstr "Ordinateur embarqué" + +#~ msgid "Passenger Wagon" +#~ msgstr "Voiture passager" + +#~ msgid "Passenger area" +#~ msgstr "Voiture Passager" + +#~ msgid "" +#~ "Passive Component Naming Tool\n" +#~ "\n" +#~ "Right-click to name a passive component." +#~ msgstr "" +#~ "Outil de nommage de composant passif\n" +#~ "\n" +#~ "Clic-Droit pour nommer un composant passif." + +#~ msgid "Perpendicular Diamond Crossing Track" +#~ msgstr "Croisement perpendiculaire" + +#~ msgid "Please specify a player name to transfer ownership to." +#~ msgstr "" +#~ "Spécifiez le nom du joueur à qui la propriété doit être transférée, SVP." + +#~ msgid "Point Speed Restriction Track" +#~ msgstr "Voie de point de limitation de vitesse" + +#~ msgid "Point speed restriction: @1" +#~ msgstr "Point de limitation de vitesse : @1" + +#~ msgid "Position is occupied by a train." +#~ msgstr "Cet emplacement est occupé par un train." + +#~ msgid "Prev FC" +#~ msgstr "Code de fret précédent" + +#~ msgid "Print advtrains status info" +#~ msgstr "Affiche les informations d'état d'advtrains" + +#~ msgid "Re-enabling advtrains globalstep..." +#~ msgstr "Réacivation du pas global d'advtrains..." + +#~ msgid "Reduced speed" +#~ msgstr "Vitesse réduite" + +#~ msgid "Reload successful!" +#~ msgstr "Succès du rechargement !" + +#~ msgid "Remote Routesetting" +#~ msgstr "Routage à distance" + +#~ msgid "Removing unused wagon" +#~ msgstr "Suppression d'un wagon inutilisé" + +#~ msgid "Restoring saved state in 1 second..." +#~ msgstr "Restauration du l'état sauvegardé dans une seconde..." + +#~ msgid "Restricted speed" +#~ msgstr "Vitesse limitée" + +#~ msgid "Returns the position of the train with the given id" +#~ msgstr "Affiche la position du train identifié" + +#~ msgid "Route state changed." +#~ msgstr "Changement d'état de l'itinéraire." + +#~ msgid "Routingcode" +#~ msgstr "Code de routage" + +#~ msgid "Save wagon properties" +#~ msgstr "Sauvegarder les propriétés du wagon" + +#~ msgid "Saving failed: " +#~ msgstr "Échec de sauvegarde : " + +#~ msgid "Scharfenberg Coupler" +#~ msgstr "Attelage Scharfenberg" + +#~ msgid "Select seat:" +#~ msgstr "Choisir le siège :" + +#~ msgid "Set name of component (empty to clear)" +#~ msgstr "Nommer le composant (chaîne vide pour effacer)" + +#~ msgid "Set point speed restriction:" +#~ msgstr "Placez un point de limitation de vitesse :" + +#~ msgid "Show Inventory" +#~ msgstr "Montrer le stock" + +#~ msgid "Signal" +#~ msgstr "Signal" + +#~ msgid "Speed:" +#~ msgstr "Vitesse : " + +#~ msgid "Steam Engine" +#~ msgstr "Locomotive à vapeur" + +#~ msgid "Subway Passenger Wagon" +#~ msgstr "Voiture de Métropolitain" + +# Routage est il le bon terme ? +#~ msgid "Successfully invalidated train routes" +#~ msgstr "Succès d'invalidation des routages des trains" + +#~ msgid "Target:" +#~ msgstr "Destination : " + +#~ msgid "Teleporting to train " +#~ msgstr "Téléportation au train " + +#~ msgid "Teleports you to the position of the train with the given id" +#~ msgstr "Vous téléporte à la position du train identifié" + +#~ msgid "Text displayed inside train" +#~ msgstr "Texte affiché à l'intérieur du train" + +#~ msgid "Text displayed outside on train" +#~ msgstr "Texte affiché à l'extérieur du train" + +#~ msgid "That player does not exist!" +#~ msgstr "Ce joueur n'existe pas !" + +#~ msgid "That wagon does not exist!" +#~ msgstr "Ce wagon n'a pas de siège !" + +#~ msgid "" +#~ "The advtrains globalstep has been disabled. Trains are not moving, and no " +#~ "data is saved! Run '/at_disable_step no' to enable again!" +#~ msgstr "" +#~ "Le pas global d'advtrains est désactivé. Les trains sont immobiles et " +#~ "aucune donnée n'est sauvegardée. Exécutez '/at_disable_step no ' pour le " +#~ "réactiver !" + +#~ msgid "The clipboard couldn't access the metadata. Copy failed." +#~ msgstr "" +#~ "Le presse-papier ne peut accéder aux métadonnées. Échec de la copie." + +#~ msgid "The clipboard couldn't access the metadata. Paste failed." +#~ msgstr "Le presse-papier ne peut accéder aux métadonnées. Échec du collage." + +#~ msgid "The clipboard is empty." +#~ msgstr "Le presse-papier est vide." + +#~ msgid "The track you are trying to place the wagon on is not long enough!" +#~ msgstr "" +#~ "La voie sur laquelle vous tentez de placer le wagon est trop courte !" + +#~ msgid "The track you are trying to place the wagon on is not long enough." +#~ msgstr "" +#~ "La voie sur laquelle vous tentez de placer le wagon est trop courte." + +#~ msgid "The wagon's inventory is not empty." +#~ msgstr "Le stock de ce wagon n'est pas vide." + +#~ msgid "There's a Signal Influence Point here." +#~ msgstr "Il y a un \"Signal Influence Point\" ici." + +#~ msgid "There's a Track Circuit Break here." +#~ msgstr "Il y a un \"Track Circuit Break\" ici." + +#~ msgid "This Wagon ID" +#~ msgstr "Identificateur du wagon" + +#~ msgid "This node can't be changed using the trackworker!" +#~ msgstr "Ce nœud ne peut être modifié avec l'outil \"Trackworker\" !" + +#~ msgid "This node can't be rotated using the trackworker!" +#~ msgstr "Ce nœud ne peut être tourné avec l'outil \"Trackworker\" !" + +#, fuzzy +#~ msgid "This node can't be rotated using the trackworker," +#~ msgstr "Ce nœud ne peut être tourné avec l'outil \"Trackworker\" !" + +#~ msgid "This position is protected!" +#~ msgstr "Cet emplacement est protégé !" + +#~ msgid "This track can not be changed." +#~ msgstr "Cette voie ne peut pas être modifiée." + +#~ msgid "This track can not be removed!" +#~ msgstr "Cette voie ne peut pas être enlevée !" + +#~ msgid "This track can not be rotated!" +#~ msgstr "Cette voie ne peut pas être tournée !" + +#~ msgid "This wagon has no seats." +#~ msgstr "Ce wagon n'a pas de siège." + +#~ msgid "This wagon is full." +#~ msgstr "Ce wagon est plein." + +#~ msgid "This wagon is owned by @1, you can't destroy it." +#~ msgstr "Ce wagon est la propriété de @1, vous ne pouvez pas le détruire." + +#~ msgid "" +#~ "Track Worker Tool\n" +#~ "\n" +#~ "Left-click: change rail type (straight/curve/switch)\n" +#~ "Right-click: rotate object" +#~ msgstr "" +#~ "Outil \"Trackworker\"\n" +#~ "\n" +#~ "Clic-Gauche : change le type de rail (droit/courbé/aiguillage)\n" +#~ "\n" +#~ "Clic-Droit : tourne l'objet" + +#~ msgid "Train" +#~ msgstr "Identificateur du train" + +#~ msgid "Train " +#~ msgstr "Identificateur du train " + +#~ msgid "Train ID" +#~ msgstr "Identificateur du train" + +#~ msgid "Train copied." +#~ msgstr "Train copié." + +#~ msgid "" +#~ "Train copy/paste tool\n" +#~ "\n" +#~ "Left-click: copy train\n" +#~ "Right-click: paste train" +#~ msgstr "" +#~ "Outil de copie/collage de train\n" +#~ "\n" +#~ "Clic-Gauche : copie\n" +#~ "\n" +#~ "Clic-Droit : collage" + +#~ msgid "" +#~ "Train overview / coupling control is only shown when the train stands." +#~ msgstr "" +#~ "Aperçu du train / commande d'accouplement montré uniquement à l'arrêt du " +#~ "train." + +#~ msgid "Train overview /coupling control:" +#~ msgstr "Aperçu du train / commande d'accouplement :" + +#~ msgid "Unable to load wagon type" +#~ msgstr "Impossible de charger le type du wagon" + +#~ msgid "Unconfigured ATC controller" +#~ msgstr "Controlleur ATC, non-configuré" + +#~ msgid "Unconfigured LuaATC component" +#~ msgstr "Composant LuaATC non configuré" + +#~ msgid "Uninitialized init=" +#~ msgstr "Variable init non initialisée" + +#~ msgid "Uninitialized, removing" +#~ msgstr "Non initialisé, retiré" + +#~ msgid "Unloading Track" +#~ msgstr "Voie de Déchargement" + +#~ msgid "Use Sneak+rightclick to bypass closed doors!" +#~ msgstr "" +#~ "Utilisez \"Marcher lentement (Sneak)\" et Clic-Droit pour franchir les " +#~ "portes closes !" + +#~ msgid "Wagon @1 ownership changed from @2 to @3" +#~ msgstr "La propriété du wagon @1 a été transférée de @2 à @3" + +#~ msgid "Wagon Properties Tool" +#~ msgstr "Outil de propriété du wagon" + +#~ msgid "" +#~ "Wagon Properties Tool\n" +#~ "Punch a wagon to view and edit the Wagon Properties" +#~ msgstr "" +#~ "Outil de propriété du wagon\n" +#~ "Frappez un wagon pour voir et modifier ses propriétés" + +#~ msgid "" +#~ "Wagon needs to be decoupled from other wagons in order to destroy it." +#~ msgstr "" +#~ "Les wagons doivent être désaccouplés des autres pour pouvoir être " +#~ "détruits." + +#~ msgid "Wagon properties" +#~ msgstr "Propriétés du wagon" + +#~ msgid "Wagon road number:" +#~ msgstr "Immatriculation du wagon :" + +#~ msgid "Wallmounted Signal (left)" +#~ msgstr "Signal mural (gauche)" + +#~ msgid "Wallmounted Signal (right)" +#~ msgstr "Signal mural (droit)" + +#~ msgid "Wallmounted Signal (top)" +#~ msgstr "Signal mural (plafond)" + +#~ msgid "" +#~ "Warning: If you destroy this wagon, you only get some steel back! If you " +#~ "are sure, hold Sneak and left-click the wagon." +#~ msgstr "" +#~ "Attention: Si vous détruisez ce wagon, vous ne récupérerez que de la " +#~ "ferraille ! Si vous êtes sûr de vous, appuyez la touche \"Marcher " +#~ "lentement (Sneak)\" et Clic-Gauche." + +#~ msgid "Wheel" +#~ msgstr "Roue" + +#~ msgid "Y-turnout" +#~ msgstr "Embranchement en Y" + +#~ msgid "You are not allowed to access the driver stand." +#~ msgstr "Accès interdit au poste de pilotage." + +#~ msgid "You are not allowed to build near tracks at this protected position." +#~ msgstr "" +#~ "Vous ne pouvez pas construire à proximité d'une voie à cet emplacement " +#~ "protégé." + +#~ msgid "" +#~ "You are not allowed to build near tracks without the track_builder " +#~ "privilege." +#~ msgstr "" +#~ "Vous ne pouvez pas construire à proximité d'une voie sans le privilège " +#~ "\"track_builder\" (?)" + +#~ msgid "You are not allowed to build tracks at this protected position." +#~ msgstr "Vous ne pouvez pas construire une voie à cet emplacement protégé." + +#~ msgid "" +#~ "You are not allowed to build tracks without the track_builder privilege." +#~ msgstr "" +#~ "Vous ne pouvez pas construire une voie sans le privilège " +#~ "\"track_builder\"." + +#~ msgid "" +#~ "You are not allowed to configure this LuaATC component without the @1 " +#~ "privilege." +#~ msgstr "Vous ne pouvez configurer ce composant LuaATC sans le privilege @1." + +#~ msgid "" +#~ "You are not allowed to configure this track without the @1 privilege." +#~ msgstr "" +#~ "Vous n'êtes pas autorisé à configurer cette voie sans le privilège @1." + +#~ msgid "" +#~ "You are not allowed to couple trains without the train_operator privilege." +#~ msgstr "" +#~ "Vous n'êtes pas autorisé à coupler des trains sans le privilège " +#~ "\"train_operator\"." + +#, fuzzy +#~ msgid "You are not allowed to modify this protected track." +#~ msgstr "Vous ne pouvez pas construire une voie à cet emplacement protégé" + +#~ msgid "" +#~ "You are not allowed to name LuaATC passive components without the @1 " +#~ "privilege." +#~ msgstr "" +#~ "Vous ne pouvez nommer un composant LuaATC passif sans le privilege @1." + +#~ msgid "" +#~ "You are not allowed to operate turnouts and signals without the " +#~ "railway_operator privilege." +#~ msgstr "" +#~ "Vous ne pouvez pas actionner les aiguillages ou les signaux (privilège " +#~ "\"railway_operator\" manquant)" + +#~ msgid "You can't get on this wagon." +#~ msgstr "Montée impossible dans ce wagon." + +#~ msgid "You do not have the @1 privilege." +#~ msgstr "Vous ne possédez pas le privilège \"@1\"." + +#~ msgid "You don't have the train_operator privilege." +#~ msgstr "Vous ne possédez pas le privilège \"train_operator\"." + +#~ msgid "You have been given ownership of wagon @1" +#~ msgstr "La propriété du wagon @1 vous a été transférée" + +#~ msgid "" +#~ "You need to own at least one neighboring wagon to destroy this couple." +#~ msgstr "" +#~ "Vous devez être propriétaire d'au moins un wagon voisin pour supprimer " +#~ "cet attelage." + +#~ msgid "from wagon_save table." +#~ msgstr "de la table wagon_save." + +#~ msgid "" +#~ "had no wagons left because of some bug. It is being deleted. Wave it " +#~ "goodbye!" +#~ msgstr "" +#~ "n'a plus de wagon à cause d'un bug quelconque. Il est détruit. Faites lui " +#~ "coucou !" + +#~ msgid "slowdown" +#~ msgstr "ralentissement" diff --git a/advtrains_line_automation/po/update-translations.sh b/advtrains_line_automation/po/update-translations.sh new file mode 100644 index 0000000..9fb7596 --- /dev/null +++ b/advtrains_line_automation/po/update-translations.sh @@ -0,0 +1,28 @@ +#!/bin/sh + +MODNAME="advtrains_line_automation" +MSGID_BUGS_ADDR='advtrains-discuss@lists.sr.ht' + +PODIR=`dirname "$0"` +ATDIR="$PODIR/.." +POTFILE="$PODIR/$MODNAME.pot" + +xgettext \ + -D "$ATDIR" \ + -d "$MODNAME" \ + -o "$POTFILE" \ + -p . \ + -L lua \ + --add-location=file \ + --from-code=UTF-8 \ + --sort-by-file \ + --keyword='S' \ + --package-name="$MODNAME" \ + --msgid-bugs-address="$MSGID_BUGS_ADDR" \ + `find $ATDIR $BTDIR -name '*.lua' -printf '%P\n'` \ + && +for i in "$PODIR"/*.po; do + msgmerge -U \ + --sort-by-file \ + $i "$POTFILE" +done diff --git a/advtrains_line_automation/po/zh_CN.po b/advtrains_line_automation/po/zh_CN.po new file mode 100644 index 0000000..a4ea048 --- /dev/null +++ b/advtrains_line_automation/po/zh_CN.po @@ -0,0 +1,552 @@ +msgid "" +msgstr "" +"Project-Id-Version: advtrains\n" +"Report-Msgid-Bugs-To: advtrains-discuss@lists.sr.ht\n" +"POT-Creation-Date: 2025-06-11 23:01+0200\n" +"PO-Revision-Date: 2023-10-09 11:24+0200\n" +"Last-Translator: Y. Wang <yw05@forksworld.de>\n" +"Language-Team: Chinese (Simplified)\n" +"Language: zh_CN\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 3.3.2\n" + +#: stoprail.lua +msgid "Closed" +msgstr "" + +#: stoprail.lua +msgid "Dep. Speed" +msgstr "出发速度" + +#: stoprail.lua +msgid "Door Delay" +msgstr "车门关闭时间" + +#: stoprail.lua +msgid "Door Side" +msgstr "" + +#: stoprail.lua +msgid "Kick out passengers" +msgstr "踢出乘客" + +#: stoprail.lua +msgid "Left" +msgstr "" + +#: stoprail.lua +msgid "Next Stop:\n" +msgstr "" + +#: stoprail.lua +msgid "Reverse train" +msgstr "改变行车方向" + +#: stoprail.lua +msgid "Right" +msgstr "" + +#: stoprail.lua +msgid "Save" +msgstr "保存" + +#: stoprail.lua +msgid "Station Code" +msgstr "车站代码" + +#: stoprail.lua +msgid "Station Name" +msgstr "车站名称" + +#: stoprail.lua +msgid "Station code \"@1\" already exists and is owned by @2." +msgstr "" + +#: stoprail.lua +msgid "Station/Stop Track" +msgstr "车站轨道" + +#: stoprail.lua +msgid "Stop Time" +msgstr "停站时间" + +#: stoprail.lua +msgid "This station is owned by @1. You are not allowed to edit its name." +msgstr "" + +#: stoprail.lua +msgid "Track" +msgstr "轨道" + +#: stoprail.lua +msgid "Trains stopping here (ARS rules)" +msgstr "" + +#: stoprail.lua +msgid "Unknown Station" +msgstr "" + +#: stoprail.lua +msgid "Wait for signal to clear" +msgstr "" + +#: stoprail.lua +msgid "You are not allowed to configure this track." +msgstr "您不能调整这段轨道。" + +#~ msgid "(Doors closed)" +#~ msgstr "(车门已关闭)" + +#~ msgid "3-way turnout" +#~ msgstr "三开道岔" + +#~ msgid "90+Angle Diamond Crossing Track" +#~ msgstr "交叉轨道 (其中一条轨道与坐标轴平行)" + +#~ msgid "<No coupler>" +#~ msgstr "<没有车钩>" + +#~ msgid "@1 Platform (45 degree)" +#~ msgstr "较高的@1站台 (45°)" + +#~ msgid "@1 Platform (high)" +#~ msgstr "较高的@1站台" + +#~ msgid "@1 Platform (low)" +#~ msgstr "较低的@1站台" + +#~ msgid "@1 Platform (low, 45 degree)" +#~ msgstr "较低的@1站台 (45°)" + +#~ msgid "@1 Slope" +#~ msgstr "@1斜坡" + +#~ msgid "ATC Kick command warning: doors are closed." +#~ msgstr "ATC 警告:车门已关闭,无法踢出乘客。" + +#~ msgid "ATC Kick command warning: train moving." +#~ msgstr "ATC 警告:火车正在移动,无法踢出乘客。" + +#~ msgid "ATC Reverse command warning: didn't reverse train, train moving." +#~ msgstr "ATC 警告:火车正在移动,无法改变行车方向。" + +#~ msgid "ATC command parse error: Unknown command: @1" +#~ msgstr "ATC 语法错误:未知命令:@1" + +#~ msgid "ATC command syntax error: I statement not closed: @1" +#~ msgstr "ATC 语法错误:“I”命令不完整:@1" + +#~ msgid "ATC controller" +#~ msgstr "ATC 控制器" + +#~ msgid "" +#~ "ATC controller, mode @1\n" +#~ "Channel: @2" +#~ msgstr "" +#~ "ATC 控制器\n" +#~ "模式:@1\n" +#~ "频道:@2" + +#~ msgid "" +#~ "ATC controller, mode @1\n" +#~ "Command: @2" +#~ msgstr "" +#~ "ATC 控制器\n" +#~ "模式:@1\n" +#~ "命令:@2" + +#~ msgid "Access to @1" +#~ msgstr "可前往@1" + +#~ msgid "Andrew's Cross" +#~ msgstr "铁路道口信号灯" + +#~ msgid "Back of train would end up off track, cancelling." +#~ msgstr "火车后部不在轨道上。" + +#~ msgid "Big Industrial Train Engine" +#~ msgstr "大型工业用火车头" + +#~ msgid "Boiler" +#~ msgstr "锅炉" + +#~ msgid "Box Wagon" +#~ msgstr "货运车厢" + +#~ msgid "Buffer and Chain Coupler" +#~ msgstr "链式车钩" + +#~ msgid "Bumper" +#~ msgstr "保险杠" + +#~ msgid "Can not couple: The couplers of the trains do not match (@1 and @2)." +#~ msgstr "您无法连接这两节车厢:这两节车厢使用不同的车钩 (@1和@2)。" + +#~ msgid "Can't get on: wagon full or doors closed!" +#~ msgstr "无法上车:车门已关闭或车厢已满。" + +#, fuzzy +#~ msgid "Can't place: Not enough slope items left (@1 required)" +#~ msgstr "无法放置斜坡:您没有足够的铁路斜坡放置工具 (您总共需要@1个)" + +#, fuzzy +#~ msgid "Can't place: There's no slope of length @1" +#~ msgstr "无法放置斜坡:advtrains 不支持长度为@1米的斜坡。" + +#, fuzzy +#~ msgid "Can't place: no supporting node at upper end." +#~ msgstr "无法放置斜坡:较高端没有支撑方块。" + +#, fuzzy +#~ msgid "Can't place: not pointing at node" +#~ msgstr "无法放置斜坡:您没有选择任何方块。" + +#~ msgid "Can't place: protected position!" +#~ msgstr "无法放置:此区域已被保护。" + +#, fuzzy +#~ msgid "Can't place: space occupied!" +#~ msgstr "无法放置斜坡:此区域已被占用。" + +#~ msgid "Chimney" +#~ msgstr "烟囱" + +#~ msgid "Command" +#~ msgstr "命令" + +#~ msgid "Command (on)" +#~ msgstr "命令 (激活时)" + +#~ msgid "Default Seat" +#~ msgstr "默认座位" + +#~ msgid "Default Seat (driver stand)" +#~ msgstr "默认座位 (司机座位)" + +#~ msgid "Deprecated Track" +#~ msgstr "请不要使用" + +#~ msgid "Detailed Steam Engine" +#~ msgstr "精细的蒸汽机车" + +#~ msgid "Detector Rail" +#~ msgstr "探测轨道" + +#~ msgid "Diagonal Diamond Crossing Track" +#~ msgstr "交叉轨道" + +#~ msgid "Digiline channel" +#~ msgstr "Digiline 频道" + +#~ msgid "" +#~ "Doors are closed. Use Sneak+rightclick to ignore the closed doors and get " +#~ "off." +#~ msgstr "车门已关闭,请使用潜行+右键单击下车。" + +#, fuzzy +#~ msgid "Driver Stand" +#~ msgstr "司机座位" + +#~ msgid "Driver Stand (left)" +#~ msgstr "左侧司机座位" + +#~ msgid "Driver Stand (right)" +#~ msgstr "右侧司机座位" + +#~ msgid "Driver stand" +#~ msgstr "司机座位" + +#~ msgid "Driver's cab" +#~ msgstr "驾驶室" + +#~ msgid "Get off" +#~ msgstr "下车" + +#~ msgid "Get off (forced)" +#~ msgstr "强制下车" + +#~ msgid "Industrial Train Engine" +#~ msgstr "工业用火车头" + +#~ msgid "Industrial tank wagon" +#~ msgstr "液体运输车厢" + +#~ msgid "Industrial wood wagon" +#~ msgstr "木材运输车厢" + +#~ msgid "Japanese Train Engine" +#~ msgstr "高速列车车头" + +#~ msgid "Japanese Train Inter-Wagon Connection" +#~ msgstr "日本火车车钩" + +#~ msgid "Japanese Train Wagon" +#~ msgstr "高速列车车厢" + +#, fuzzy +#~ msgid "Japanese signal pole" +#~ msgstr "高速列车车厢" + +#~ msgid "Lampless Signal" +#~ msgstr "臂板信号机" + +#~ msgid "Line" +#~ msgstr "火车线路" + +#~ msgid "Loading Track" +#~ msgstr "装货轨道" + +#~ msgid "Lock couples" +#~ msgstr "锁定连接处" + +#~ msgid "No such lua entity." +#~ msgstr "您没有指向一个可以用火车复制工具复制的物体。" + +#~ msgid "No such train: @1." +#~ msgstr "ID 为“@1”的列车不存在。" + +#~ msgid "No such wagon: @1." +#~ msgstr "ID 为“@1”的车厢不存在。" + +#, fuzzy +#~ msgid "Not allowed to do this." +#~ msgstr "您不能调整这段轨道。" + +#~ msgid "Passenger Wagon" +#~ msgstr "客车" + +#, fuzzy +#~ msgid "Passenger area" +#~ msgstr "客车" + +#~ msgid "" +#~ "Passive Component Naming Tool\n" +#~ "\n" +#~ "Right-click to name a passive component." +#~ msgstr "" +#~ "被动元件命名工具\n" +#~ "\n" +#~ "右键单击命名所选元件。" + +#~ msgid "Perpendicular Diamond Crossing Track" +#~ msgstr "垂直交叉轨道" + +#~ msgid "Routingcode" +#~ msgstr "路由码" + +#~ msgid "Save wagon properties" +#~ msgstr "保存车厢属性" + +#~ msgid "Scharfenberg Coupler" +#~ msgstr "Scharfenberg 式车钩" + +#~ msgid "Select seat:" +#~ msgstr "请选择座位:" + +#~ msgid "Show Inventory" +#~ msgstr "显示物品栏" + +#~ msgid "Signal" +#~ msgstr "信号灯" + +#~ msgid "Speed:" +#~ msgstr "速度" + +#~ msgid "Steam Engine" +#~ msgstr "蒸汽机车" + +#~ msgid "Subway Passenger Wagon" +#~ msgstr "地铁车厢" + +#~ msgid "Target:" +#~ msgstr "目标速度" + +#~ msgid "Text displayed inside train" +#~ msgstr "车厢内部显示" + +#~ msgid "Text displayed outside on train" +#~ msgstr "车厢外部显示" + +#, fuzzy +#~ msgid "That wagon does not exist!" +#~ msgstr "这节车厢没有座位。" + +#~ msgid "The clipboard couldn't access the metadata. Copy failed." +#~ msgstr "无法复制:剪贴板无法访问元数据。" + +#~ msgid "The clipboard couldn't access the metadata. Paste failed." +#~ msgstr "无法粘贴:剪贴板无法访问元数据。" + +#~ msgid "The clipboard is empty." +#~ msgstr "剪贴板是空的。" + +#, fuzzy +#~ msgid "The track you are trying to place the wagon on is not long enough!" +#~ msgstr "轨道太短。" + +#~ msgid "The track you are trying to place the wagon on is not long enough." +#~ msgstr "轨道太短。" + +#, fuzzy +#~ msgid "This Wagon ID" +#~ msgstr "车厢已满。" + +#, fuzzy +#~ msgid "This node can't be changed using the trackworker!" +#~ msgstr "您不能使用铁路调整工具调整这个方块。" + +#, fuzzy +#~ msgid "This node can't be rotated using the trackworker!" +#~ msgstr "您不能使用铁路调整工具旋转这个方块。" + +#, fuzzy +#~ msgid "This node can't be rotated using the trackworker," +#~ msgstr "您不能使用铁路调整工具旋转这个方块。" + +#~ msgid "This position is protected!" +#~ msgstr "这里已被保护。" + +#~ msgid "This track can not be changed." +#~ msgstr "您不能调整这段轨道。" + +#, fuzzy +#~ msgid "This track can not be removed!" +#~ msgstr "您不能移除这段轨道。" + +#, fuzzy +#~ msgid "This track can not be rotated!" +#~ msgstr "您不能旋转这段轨道。" + +#~ msgid "This wagon has no seats." +#~ msgstr "这节车厢没有座位。" + +#~ msgid "This wagon is full." +#~ msgstr "车厢已满。" + +#~ msgid "This wagon is owned by @1, you can't destroy it." +#~ msgstr "这是 @1 的车厢,您不能摧毁它。" + +#~ msgid "" +#~ "Track Worker Tool\n" +#~ "\n" +#~ "Left-click: change rail type (straight/curve/switch)\n" +#~ "Right-click: rotate object" +#~ msgstr "" +#~ "铁路调整工具\n" +#~ "\n" +#~ "左键单击:切换轨道类型\n" +#~ "右键单击:旋转方块" + +#, fuzzy +#~ msgid "Train " +#~ msgstr "已复制列车。" + +#~ msgid "Train copied." +#~ msgstr "已复制列车。" + +#~ msgid "" +#~ "Train copy/paste tool\n" +#~ "\n" +#~ "Left-click: copy train\n" +#~ "Right-click: paste train" +#~ msgstr "" +#~ "火车复制工具\n" +#~ "\n" +#~ "左键单击:复制\n" +#~ "右键单击:粘帖" + +#~ msgid "Unconfigured ATC controller" +#~ msgstr "ATC 控制器 (未配置)" + +#~ msgid "Unconfigured LuaATC component" +#~ msgstr "LuaATC 部件 (未配置)" + +#~ msgid "Unloading Track" +#~ msgstr "卸货轨道" + +#~ msgid "Use Sneak+rightclick to bypass closed doors!" +#~ msgstr "请使用潜行+右键上车。" + +#, fuzzy +#~ msgid "Wagon Properties Tool" +#~ msgstr "车厢属性" + +#~ msgid "Wagon properties" +#~ msgstr "车厢属性" + +#~ msgid "Wallmounted Signal (left)" +#~ msgstr "壁挂式信号灯 (左侧)" + +#~ msgid "Wallmounted Signal (right)" +#~ msgstr "壁挂式信号灯 (右侧)" + +#~ msgid "Wallmounted Signal (top)" +#~ msgstr "悬挂式信号灯" + +#~ msgid "" +#~ "Warning: If you destroy this wagon, you only get some steel back! If you " +#~ "are sure, hold Sneak and left-click the wagon." +#~ msgstr "" +#~ "警告:如果您摧毁此车厢,您只能拿到一些钢方块。如果您确定要摧毁这节车厢,请" +#~ "按潜行键并左键单击此车厢。" + +#~ msgid "Wheel" +#~ msgstr "车轮" + +#~ msgid "Y-turnout" +#~ msgstr "对称道岔" + +#~ msgid "You are not allowed to build near tracks at this protected position." +#~ msgstr "这里已被保护,您不能在这里的铁路附近建任何东西。" + +#~ msgid "" +#~ "You are not allowed to build near tracks without the track_builder " +#~ "privilege." +#~ msgstr "您没有“train_operator”权限,不能在铁路附近建任何东西。" + +#~ msgid "You are not allowed to build tracks at this protected position." +#~ msgstr "这里已被保护,您不能在这里建造铁路。" + +#~ msgid "" +#~ "You are not allowed to build tracks without the track_builder privilege." +#~ msgstr "您没有“train_operator”权限,不能在这里建造铁路。" + +#~ msgid "" +#~ "You are not allowed to configure this LuaATC component without the @1 " +#~ "privilege." +#~ msgstr "您没有“@1”权限,不能配置这个 LuaATC 部件。" + +#~ msgid "" +#~ "You are not allowed to configure this track without the @1 privilege." +#~ msgstr "您没有“@1”权限,不能调整这段轨道。" + +#~ msgid "" +#~ "You are not allowed to couple trains without the train_operator privilege." +#~ msgstr "您没有“train_operator”权限,不能连接这两节车厢。" + +#, fuzzy +#~ msgid "You are not allowed to modify this protected track." +#~ msgstr "这里已被保护,您不能在这里建造铁路。" + +#~ msgid "" +#~ "You are not allowed to name LuaATC passive components without the @1 " +#~ "privilege." +#~ msgstr "您没有“@1”权限,不能命名被动元件。" + +#~ msgid "" +#~ "You are not allowed to operate turnouts and signals without the " +#~ "railway_operator privilege." +#~ msgstr "您没有“railway_operator”权限,不能控制铁路设施。" + +#~ msgid "You do not have the @1 privilege." +#~ msgstr "您没有“@1”权限。" + +#, fuzzy +#~ msgid "You don't have the train_operator privilege." +#~ msgstr "您没有“@1”权限。" + +#~ msgid "" +#~ "You need to own at least one neighboring wagon to destroy this couple." +#~ msgstr "您必须至少拥有其中一节车厢才能分开这两节车厢。" diff --git a/advtrains_line_automation/po/zh_TW.po b/advtrains_line_automation/po/zh_TW.po new file mode 100644 index 0000000..ddf1b3f --- /dev/null +++ b/advtrains_line_automation/po/zh_TW.po @@ -0,0 +1,552 @@ +msgid "" +msgstr "" +"Project-Id-Version: advtrains\n" +"Report-Msgid-Bugs-To: advtrains-discuss@lists.sr.ht\n" +"POT-Creation-Date: 2025-06-11 23:01+0200\n" +"PO-Revision-Date: 2023-10-09 11:31+0200\n" +"Last-Translator: Y. Wang <yw05@forksworld.de>\n" +"Language-Team: Chinese (Traditional)\n" +"Language: zh_TW\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 3.3.2\n" + +#: stoprail.lua +msgid "Closed" +msgstr "" + +#: stoprail.lua +msgid "Dep. Speed" +msgstr "出發速度" + +#: stoprail.lua +msgid "Door Delay" +msgstr "車門關閉時間" + +#: stoprail.lua +msgid "Door Side" +msgstr "" + +#: stoprail.lua +msgid "Kick out passengers" +msgstr "踢出乘客" + +#: stoprail.lua +msgid "Left" +msgstr "" + +#: stoprail.lua +msgid "Next Stop:\n" +msgstr "" + +#: stoprail.lua +msgid "Reverse train" +msgstr "改變行車方向" + +#: stoprail.lua +msgid "Right" +msgstr "" + +#: stoprail.lua +msgid "Save" +msgstr "儲存" + +#: stoprail.lua +msgid "Station Code" +msgstr "車站碼" + +#: stoprail.lua +msgid "Station Name" +msgstr "車站名稱" + +#: stoprail.lua +msgid "Station code \"@1\" already exists and is owned by @2." +msgstr "" + +#: stoprail.lua +msgid "Station/Stop Track" +msgstr "車站軌道" + +#: stoprail.lua +msgid "Stop Time" +msgstr "停站時間" + +#: stoprail.lua +msgid "This station is owned by @1. You are not allowed to edit its name." +msgstr "" + +#: stoprail.lua +msgid "Track" +msgstr "軌道" + +#: stoprail.lua +msgid "Trains stopping here (ARS rules)" +msgstr "" + +#: stoprail.lua +msgid "Unknown Station" +msgstr "" + +#: stoprail.lua +msgid "Wait for signal to clear" +msgstr "" + +#: stoprail.lua +msgid "You are not allowed to configure this track." +msgstr "您不能調整這段軌道。" + +#~ msgid "(Doors closed)" +#~ msgstr "(車門已關閉)" + +#~ msgid "3-way turnout" +#~ msgstr "三開道岔" + +#~ msgid "90+Angle Diamond Crossing Track" +#~ msgstr "交叉軌道 (其中一條軌道與座標軸平行)" + +#~ msgid "<No coupler>" +#~ msgstr "<無連結器>" + +#~ msgid "@1 Platform (45 degree)" +#~ msgstr "較高的@1月臺 (45°)" + +#~ msgid "@1 Platform (high)" +#~ msgstr "較高的@1月臺" + +#~ msgid "@1 Platform (low)" +#~ msgstr "較低的@1月臺" + +#~ msgid "@1 Platform (low, 45 degree)" +#~ msgstr "較低的@1月臺 (45°)" + +#~ msgid "@1 Slope" +#~ msgstr "@1斜坡" + +#~ msgid "ATC Kick command warning: doors are closed." +#~ msgstr "ATC 警告:車門已關閉,無法踢出乘客。" + +#~ msgid "ATC Kick command warning: train moving." +#~ msgstr "ATC 警告:火車正在移動,無法踢出乘客。" + +#~ msgid "ATC Reverse command warning: didn't reverse train, train moving." +#~ msgstr "ATC 警告:火車正在移動,無法改變行車方向。" + +#~ msgid "ATC command parse error: Unknown command: @1" +#~ msgstr "ATC 語法錯誤:未知命令:@1" + +#~ msgid "ATC command syntax error: I statement not closed: @1" +#~ msgstr "ATC 語法錯誤:「I」命令不完整:@1" + +#~ msgid "ATC controller" +#~ msgstr "ATC 控制器" + +#~ msgid "" +#~ "ATC controller, mode @1\n" +#~ "Channel: @2" +#~ msgstr "" +#~ "ATC 控制器\n" +#~ "模式:@1\n" +#~ "頻道:@2" + +#~ msgid "" +#~ "ATC controller, mode @1\n" +#~ "Command: @2" +#~ msgstr "" +#~ "ATC 控制器\n" +#~ "模式:@1\n" +#~ "命令:@2" + +#~ msgid "Access to @1" +#~ msgstr "可前往@1" + +#~ msgid "Andrew's Cross" +#~ msgstr "平交道號誌燈" + +#~ msgid "Back of train would end up off track, cancelling." +#~ msgstr "火車後部不在軌道上。" + +#~ msgid "Big Industrial Train Engine" +#~ msgstr "大型工業用火車頭" + +#~ msgid "Boiler" +#~ msgstr "鍋爐" + +#~ msgid "Box Wagon" +#~ msgstr "貨運車廂" + +#~ msgid "Buffer and Chain Coupler" +#~ msgstr "鏈式連結器" + +#~ msgid "Bumper" +#~ msgstr "保險槓" + +#~ msgid "Can not couple: The couplers of the trains do not match (@1 and @2)." +#~ msgstr "您無法連結這兩節車廂:這兩節車廂使用不同的連結器 (@1和@2)。" + +#~ msgid "Can't get on: wagon full or doors closed!" +#~ msgstr "無法上車:車門已關閉或車廂已滿。" + +#, fuzzy +#~ msgid "Can't place: Not enough slope items left (@1 required)" +#~ msgstr "無法放置斜坡:您沒有足夠的鐵路斜坡放置工具 (您總共需要@1個)" + +#, fuzzy +#~ msgid "Can't place: There's no slope of length @1" +#~ msgstr "無法放置斜坡:advtrains 不支援長度為@1米的斜坡。" + +#, fuzzy +#~ msgid "Can't place: no supporting node at upper end." +#~ msgstr "無法放置斜坡:較高階沒有支撐方塊。" + +#, fuzzy +#~ msgid "Can't place: not pointing at node" +#~ msgstr "無法放置斜坡:您沒有選擇任何方塊。" + +#~ msgid "Can't place: protected position!" +#~ msgstr "無法放置:此區域已被保護。" + +#, fuzzy +#~ msgid "Can't place: space occupied!" +#~ msgstr "無法放置斜坡:此區域已被佔用。" + +#~ msgid "Chimney" +#~ msgstr "煙囪" + +#~ msgid "Command" +#~ msgstr "命令" + +#~ msgid "Command (on)" +#~ msgstr "命令 (啟用時)" + +#~ msgid "Default Seat" +#~ msgstr "預設座位" + +#~ msgid "Default Seat (driver stand)" +#~ msgstr "預設座位 (司機座位)" + +#~ msgid "Deprecated Track" +#~ msgstr "請不要使用" + +#~ msgid "Detailed Steam Engine" +#~ msgstr "精細的蒸汽機車" + +#~ msgid "Detector Rail" +#~ msgstr "探測軌道" + +#~ msgid "Diagonal Diamond Crossing Track" +#~ msgstr "交叉軌道" + +#~ msgid "Digiline channel" +#~ msgstr "Digiline 頻道" + +#~ msgid "" +#~ "Doors are closed. Use Sneak+rightclick to ignore the closed doors and get " +#~ "off." +#~ msgstr "車門已關閉,請使用潛行+右鍵單擊下車。" + +#, fuzzy +#~ msgid "Driver Stand" +#~ msgstr "司機座位" + +#~ msgid "Driver Stand (left)" +#~ msgstr "左側司機座位" + +#~ msgid "Driver Stand (right)" +#~ msgstr "右側司機座位" + +#~ msgid "Driver stand" +#~ msgstr "司機座位" + +#~ msgid "Driver's cab" +#~ msgstr "駕駛室" + +#~ msgid "Get off" +#~ msgstr "下車" + +#~ msgid "Get off (forced)" +#~ msgstr "強制下車" + +#~ msgid "Industrial Train Engine" +#~ msgstr "工業用火車頭" + +#~ msgid "Industrial tank wagon" +#~ msgstr "液體運輸車廂" + +#~ msgid "Industrial wood wagon" +#~ msgstr "木材運輸車廂" + +#~ msgid "Japanese Train Engine" +#~ msgstr "高速列車車頭" + +#~ msgid "Japanese Train Inter-Wagon Connection" +#~ msgstr "日本火車連結器" + +#~ msgid "Japanese Train Wagon" +#~ msgstr "高速列車車廂" + +#, fuzzy +#~ msgid "Japanese signal pole" +#~ msgstr "高速列車車廂" + +#~ msgid "Lampless Signal" +#~ msgstr "臂木式號誌機" + +#~ msgid "Line" +#~ msgstr "火車線路" + +#~ msgid "Loading Track" +#~ msgstr "裝貨軌道" + +#~ msgid "Lock couples" +#~ msgstr "鎖定連結處" + +#~ msgid "No such lua entity." +#~ msgstr "您沒有指向一個可以用火車複製工具複製的物體。" + +#~ msgid "No such train: @1." +#~ msgstr "ID 為「@1」的列車不存在。" + +#~ msgid "No such wagon: @1." +#~ msgstr "ID 為「@1」的車廂不存在。" + +#, fuzzy +#~ msgid "Not allowed to do this." +#~ msgstr "您不能調整這段軌道。" + +#~ msgid "Passenger Wagon" +#~ msgstr "客車" + +#, fuzzy +#~ msgid "Passenger area" +#~ msgstr "客車" + +#~ msgid "" +#~ "Passive Component Naming Tool\n" +#~ "\n" +#~ "Right-click to name a passive component." +#~ msgstr "" +#~ "被動元件命名工具\n" +#~ "\n" +#~ "右鍵單擊命名所選元件。" + +#~ msgid "Perpendicular Diamond Crossing Track" +#~ msgstr "垂直交叉軌道" + +#~ msgid "Routingcode" +#~ msgstr "路由碼" + +#~ msgid "Save wagon properties" +#~ msgstr "儲存車廂屬性" + +#~ msgid "Scharfenberg Coupler" +#~ msgstr "Scharfenberg 式連結器" + +#~ msgid "Select seat:" +#~ msgstr "請選擇座位:" + +#~ msgid "Show Inventory" +#~ msgstr "顯示物品欄" + +#~ msgid "Signal" +#~ msgstr "色燈號誌機" + +#~ msgid "Speed:" +#~ msgstr "速度" + +#~ msgid "Steam Engine" +#~ msgstr "蒸汽機車" + +#~ msgid "Subway Passenger Wagon" +#~ msgstr "地鐵車廂" + +#~ msgid "Target:" +#~ msgstr "目標速度" + +#~ msgid "Text displayed inside train" +#~ msgstr "車廂內部顯示" + +#~ msgid "Text displayed outside on train" +#~ msgstr "車廂外部顯示" + +#, fuzzy +#~ msgid "That wagon does not exist!" +#~ msgstr "這節車廂沒有座位。" + +#~ msgid "The clipboard couldn't access the metadata. Copy failed." +#~ msgstr "無法複製:剪貼簿無法訪問元資料。" + +#~ msgid "The clipboard couldn't access the metadata. Paste failed." +#~ msgstr "無法貼上:剪貼簿無法訪問元資料。" + +#~ msgid "The clipboard is empty." +#~ msgstr "剪貼簿是空的。" + +#, fuzzy +#~ msgid "The track you are trying to place the wagon on is not long enough!" +#~ msgstr "軌道太短。" + +#~ msgid "The track you are trying to place the wagon on is not long enough." +#~ msgstr "軌道太短。" + +#, fuzzy +#~ msgid "This Wagon ID" +#~ msgstr "車廂已滿。" + +#, fuzzy +#~ msgid "This node can't be changed using the trackworker!" +#~ msgstr "您不能使用鐵路調整工具調整這個方塊。" + +#, fuzzy +#~ msgid "This node can't be rotated using the trackworker!" +#~ msgstr "您不能使用鐵路調整工具旋轉這個方塊。" + +#, fuzzy +#~ msgid "This node can't be rotated using the trackworker," +#~ msgstr "您不能使用鐵路調整工具旋轉這個方塊。" + +#~ msgid "This position is protected!" +#~ msgstr "這裡已被保護。" + +#~ msgid "This track can not be changed." +#~ msgstr "您不能調整這段軌道。" + +#, fuzzy +#~ msgid "This track can not be removed!" +#~ msgstr "您不能移除這段軌道。" + +#, fuzzy +#~ msgid "This track can not be rotated!" +#~ msgstr "您不能旋轉這段軌道。" + +#~ msgid "This wagon has no seats." +#~ msgstr "這節車廂沒有座位。" + +#~ msgid "This wagon is full." +#~ msgstr "車廂已滿。" + +#~ msgid "This wagon is owned by @1, you can't destroy it." +#~ msgstr "這是 @1 的車廂,您不能摧毀它。" + +#~ msgid "" +#~ "Track Worker Tool\n" +#~ "\n" +#~ "Left-click: change rail type (straight/curve/switch)\n" +#~ "Right-click: rotate object" +#~ msgstr "" +#~ "鐵路調整工具\n" +#~ "\n" +#~ "左鍵單擊:切換軌道型別\n" +#~ "右鍵單擊:旋轉方塊" + +#, fuzzy +#~ msgid "Train " +#~ msgstr "已複製火車。" + +#~ msgid "Train copied." +#~ msgstr "已複製火車。" + +#~ msgid "" +#~ "Train copy/paste tool\n" +#~ "\n" +#~ "Left-click: copy train\n" +#~ "Right-click: paste train" +#~ msgstr "" +#~ "火車複製工具\n" +#~ "\n" +#~ "左鍵單擊:複製\n" +#~ "右鍵單擊:粘帖" + +#~ msgid "Unconfigured ATC controller" +#~ msgstr "ATC 控制器 (未配置)" + +#~ msgid "Unconfigured LuaATC component" +#~ msgstr "LuaATC 元件 (未配置)" + +#~ msgid "Unloading Track" +#~ msgstr "卸貨軌道" + +#~ msgid "Use Sneak+rightclick to bypass closed doors!" +#~ msgstr "請使用潛行+右鍵上車。" + +#, fuzzy +#~ msgid "Wagon Properties Tool" +#~ msgstr "車廂屬性" + +#~ msgid "Wagon properties" +#~ msgstr "車廂屬性" + +#~ msgid "Wallmounted Signal (left)" +#~ msgstr "壁掛式色燈號誌機 (左側)" + +#~ msgid "Wallmounted Signal (right)" +#~ msgstr "壁掛式色燈號誌機 (右側)" + +#~ msgid "Wallmounted Signal (top)" +#~ msgstr "懸掛式色燈號誌機" + +#~ msgid "" +#~ "Warning: If you destroy this wagon, you only get some steel back! If you " +#~ "are sure, hold Sneak and left-click the wagon." +#~ msgstr "" +#~ "警告:如果您摧毀此車廂,您只能拿到一些鋼方塊。如果您確定要摧毀這節車廂,請" +#~ "按潛行鍵並左鍵單擊此車廂。" + +#~ msgid "Wheel" +#~ msgstr "車輪" + +#~ msgid "Y-turnout" +#~ msgstr "對稱道岔" + +#~ msgid "You are not allowed to build near tracks at this protected position." +#~ msgstr "這裡已被保護,您不能在這裡的鐵路附近建任何東西。" + +#~ msgid "" +#~ "You are not allowed to build near tracks without the track_builder " +#~ "privilege." +#~ msgstr "您沒有「train_operator」許可權,不能在鐵路附近建任何東西。" + +#~ msgid "You are not allowed to build tracks at this protected position." +#~ msgstr "這裡已被保護,您不能在這裡建造鐵路。" + +#~ msgid "" +#~ "You are not allowed to build tracks without the track_builder privilege." +#~ msgstr "您沒有「train_operator」許可權,不能在這裡建造鐵路。" + +#~ msgid "" +#~ "You are not allowed to configure this LuaATC component without the @1 " +#~ "privilege." +#~ msgstr "您沒有「@1」許可權,不能配置這個 LuaATC 元件。" + +#~ msgid "" +#~ "You are not allowed to configure this track without the @1 privilege." +#~ msgstr "您沒有「@1」許可權,不能調整這段軌道。" + +#~ msgid "" +#~ "You are not allowed to couple trains without the train_operator privilege." +#~ msgstr "您沒有「train_operator」許可權,不能連結這兩節車廂。" + +#, fuzzy +#~ msgid "You are not allowed to modify this protected track." +#~ msgstr "這裡已被保護,您不能在這裡建造鐵路。" + +#~ msgid "" +#~ "You are not allowed to name LuaATC passive components without the @1 " +#~ "privilege." +#~ msgstr "您沒有「@1」許可權,不能命名這個元件。" + +#~ msgid "" +#~ "You are not allowed to operate turnouts and signals without the " +#~ "railway_operator privilege." +#~ msgstr "您沒有「railway_operator」許可權,不能控制鐵路設施。" + +#~ msgid "You do not have the @1 privilege." +#~ msgstr "您沒有「@1」許可權。" + +#, fuzzy +#~ msgid "You don't have the train_operator privilege." +#~ msgstr "您沒有「@1」許可權。" + +#~ msgid "" +#~ "You need to own at least one neighboring wagon to destroy this couple." +#~ msgstr "您必須至少擁有其中一節車廂才能分開這兩節車廂。" diff --git a/advtrains_line_automation/stoprail.lua b/advtrains_line_automation/stoprail.lua index ba3977d..a0e4442 100644 --- a/advtrains_line_automation/stoprail.lua +++ b/advtrains_line_automation/stoprail.lua @@ -1,6 +1,8 @@ -- stoprail.lua -- adds "stop rail". Recognized by lzb. (part of behavior is implemented there) +-- Get current translator +local S = advtrains.lines.translate local function to_int(n) --- Disallow floating-point numbers @@ -22,13 +24,14 @@ local function updatemeta(pos) end local door_dropdown = {L=1, R=2, C=3} -local door_dropdown_rev = {Right="R", Left="L", Closed="C"} +--local door_dropdown_rev = {Right="R", Left="L", Closed="C"} -- Code review : why are the value in an order different than the one in the dropdown box ? +local door_dropdown_code = {"L", "R", "C"} -- switch to numerical index of selection : for conversion of the numerical index in the opening side selection dropdown box to the internal codification local function show_stoprailform(pos, player) local pe = advtrains.encode_pos(pos) local pname = player:get_player_name() if minetest.is_protected(pos, pname) then - minetest.chat_send_player(pname, attrans("You are not allowed to configure this track.")) + minetest.chat_send_player(pname, S("You are not allowed to configure this track.")) return end @@ -51,19 +54,19 @@ local function show_stoprailform(pos, player) local form = "size[8,7]" form = form.."style[stn,ars;font=mono]" - form = form.."field[0.8,0.8;2,1;stn;"..attrans("Station Code")..";"..minetest.formspec_escape(stdata.stn).."]" - form = form.."field[2.8,0.8;5,1;stnname;"..attrans("Station Name")..";"..minetest.formspec_escape(stnname).."]" - form = form.."field[0.80,2.0;1.75,1;ddelay;"..attrans("Door Delay")..";"..minetest.formspec_escape(stdata.ddelay).."]" - form = form.."field[2.55,2.0;1.75,1;speed;"..attrans("Dep. Speed")..";"..minetest.formspec_escape(stdata.speed).."]" - form = form.."field[4.30,2.0;1.75,1;track;"..attrans("Track")..";"..minetest.formspec_escape(stdata.track).."]" - form = form.."field[6.05,2.0;1.75,1;wait;"..attrans("Stop Time")..";"..stdata.wait.."]" - form = form.."label[0.5,2.6;"..attrans("Door Side").."]" - form = form.."dropdown[0.51,3.0;2;doors;Left,Right,Closed;"..door_dropdown[stdata.doors].."]" - form = form.."checkbox[3.00,2.4;reverse;"..attrans("Reverse train")..";"..(stdata.reverse and "true" or "false").."]" - form = form.."checkbox[3.00,2.8;kick;"..attrans("Kick out passengers")..";"..(stdata.kick and "true" or "false").."]" - form = form.."checkbox[3.00,3.2;waitsig;"..attrans("Wait for signal to clear")..";"..(stdata.waitsig and "true" or "false").."]" - form = form.."textarea[0.8,4.2;7,2;ars;Trains stopping here (ARS rules);"..advtrains.interlocking.ars_to_text(stdata.ars).."]" - form = form.."button[0.5,6;7,1;save;"..attrans("Save").."]" + form = form.."field[0.8,0.8;2,1;stn;"..S("Station Code")..";"..minetest.formspec_escape(stdata.stn).."]" + form = form.."field[2.8,0.8;5,1;stnname;"..S("Station Name")..";"..minetest.formspec_escape(stnname).."]" + form = form.."field[0.80,2.0;1.75,1;ddelay;"..S("Door Delay")..";"..minetest.formspec_escape(stdata.ddelay).."]" + form = form.."field[2.55,2.0;1.75,1;speed;"..S("Dep. Speed")..";"..minetest.formspec_escape(stdata.speed).."]" + form = form.."field[4.30,2.0;1.75,1;track;"..S("Track")..";"..minetest.formspec_escape(stdata.track).."]" + form = form.."field[6.05,2.0;1.75,1;wait;"..S("Stop Time")..";"..stdata.wait.."]" + form = form.."label[0.5,2.6;"..S("Door Side").."]" + form = form.."dropdown[0.51,3.0;2;doors;"..S("Left")..","..S("Right")..","..S("Closed")..";"..door_dropdown[stdata.doors]..";true]" -- switch to numerical index of the selection + form = form.."checkbox[3.00,2.4;reverse;"..S("Reverse train")..";"..(stdata.reverse and "true" or "false").."]" + form = form.."checkbox[3.00,2.8;kick;"..S("Kick out passengers")..";"..(stdata.kick and "true" or "false").."]" + form = form.."checkbox[3.00,3.2;waitsig;"..S("Wait for signal to clear")..";"..(stdata.waitsig and "true" or "false").."]" + form = form.."textarea[0.8,4.2;7,2;ars;"..S("Trains stopping here (ARS rules)")..";"..advtrains.interlocking.ars_to_text(stdata.ars).."]" + form = form.."button[0.5,6;7,1;save;"..S("Save").."]" minetest.show_formspec(pname, "at_lines_stop_"..pe, form) end @@ -74,7 +77,7 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) local pos = advtrains.decode_pos(pe) if pos then if minetest.is_protected(pos, pname) then - minetest.chat_send_player(pname, attrans("You are not allowed to configure this track.")) + minetest.chat_send_player(pname, S("You are not allowed to configure this track.")) return end @@ -98,7 +101,7 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) if (stn.owner == pname or minetest.check_player_privs(pname, "train_admin")) then stdata.stn = fields.stn else - minetest.chat_send_player(pname, attrans("Station code \"@1\" already exists and is owned by @2.", fields.stn, stn.owner)) + minetest.chat_send_player(pname, S("Station code \"@1\" already exists and is owned by @2.", fields.stn, stn.owner)) show_stoprailform(pos,player) return end @@ -112,13 +115,13 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) if (stn.owner == pname or minetest.check_player_privs(pname, "train_admin")) then stn.name = fields.stnname else - minetest.chat_send_player(pname, attrans("This station is owned by @1. You are not allowed to edit its name.", stn.owner)) + minetest.chat_send_player(pname, S("This station is owned by @1. You are not allowed to edit its name.", stn.owner)) end end -- dropdowns if fields.doors then - stdata.doors = door_dropdown_rev[fields.doors] or "C" + stdata.doors = door_dropdown_code[tonumber(fields.doors)] or "C" -- switch to numerical index of selection; attention : fields.doors is string typed, needed to be converted to an integer typed index in door_dropdown_code table end if fields.track then @@ -183,8 +186,8 @@ local adefunc = function(def, preset, suffix, rotation) if stdata.ars and (stdata.ars.default or advtrains.interlocking.ars_check_rule_match(stdata.ars, train) ) then advtrains.lzb_add_checkpoint(train, index, 2, nil) local stn = advtrains.lines.stations[stdata.stn] - local stnname = stn and stn.name or "Unknown Station" - train.text_inside = "Next Stop:\n"..stnname + local stnname = stn and stn.name or S("Unknown Station") + train.text_inside = S("Next Stop:\n")..stnname advtrains.interlocking.ars_set_disable(train, true) end end @@ -200,7 +203,7 @@ local adefunc = function(def, preset, suffix, rotation) if stdata.ars and (stdata.ars.default or advtrains.interlocking.ars_check_rule_match(stdata.ars, train) ) then local stn = advtrains.lines.stations[stdata.stn] - local stnname = stn and stn.name or "Unknown Station" + local stnname = stn and stn.name or S("Unknown Station") -- Send ATC command and set text advtrains.atc.train_set_command(train, "B0 W O"..stdata.doors..(stdata.kick and "K" or "") @@ -225,7 +228,7 @@ if minetest.get_modpath("advtrains_train_track") ~= nil then models_prefix="advtrains_dtrack", models_suffix=".b3d", shared_texture="advtrains_dtrack_shared_stop.png", - description=attrans("Station/Stop Track"), + description=S("Station/Stop Track"), formats={}, get_additional_definiton = adefunc, }, advtrains.trackpresets.t_30deg_straightonly) diff --git a/advtrains_luaautomation/active_common.lua b/advtrains_luaautomation/active_common.lua index 074d3b3..d0ae2a4 100644 --- a/advtrains_luaautomation/active_common.lua +++ b/advtrains_luaautomation/active_common.lua @@ -1,4 +1,5 @@ -local S = atltrans +-- Get current translator +local S = atlatc.translate local ac = {nodes={}} diff --git a/advtrains_luaautomation/atc_rail.lua b/advtrains_luaautomation/atc_rail.lua index dd26f51..594de5c 100644 --- a/advtrains_luaautomation/atc_rail.lua +++ b/advtrains_luaautomation/atc_rail.lua @@ -2,6 +2,9 @@ -- registers and handles the ATC rail. Active component. -- This is the only component that can interface with trains, so train interface goes here too. +-- Get current translator +local S = atlatc.translate + --Using subtable local r={} @@ -62,7 +65,7 @@ function r.fire_event(pos, evtdata, appr_internal) local new_id = advtrains.split_train_at_index(train, index) if new_id then minetest.after(1,advtrains.atc.train_set_command,advtrains.trains[new_id], cmd, atc_arrow) - return true + return new_id end return false end, @@ -73,7 +76,7 @@ function r.fire_event(pos, evtdata, appr_internal) if new_id then minetest.after(1,advtrains.atc.train_set_command,advtrains.trains[new_id], cmd, atc_arrow) end - return fc or "" + return (fc or ""), new_id end, split_off_locomotive = function(cmd, len) assertt(cmd, "string") @@ -81,7 +84,8 @@ function r.fire_event(pos, evtdata, appr_internal) local new_id, fc = advtrains.split_train_at_fc(train, true, len) if new_id then minetest.after(1,advtrains.atc.train_set_command,advtrains.trains[new_id], cmd, atc_arrow) - end + end + return (fc or ""), new_id end, train_length = function () if not train_id then return false end @@ -228,7 +232,7 @@ advtrains.register_tracks("default", { models_prefix="advtrains_dtrack", models_suffix=".b3d", shared_texture="advtrains_dtrack_shared_atc.png", - description=atltrans("LuaATC Track"), + description=S("LuaATC Track"), formats={}, get_additional_definiton = function(def, preset, suffix, rotation) return { diff --git a/advtrains_luaautomation/chatcmds.lua b/advtrains_luaautomation/chatcmds.lua index b6ffaee..7691013 100644 --- a/advtrains_luaautomation/chatcmds.lua +++ b/advtrains_luaautomation/chatcmds.lua @@ -1,28 +1,31 @@ --chatcmds.lua --Registers commands to modify the init and step code for LuaAutomation +-- Get current translator +local S = atlatc.translate + local function get_init_form(env, pname) local err = env.init_err or "" local code = env.init_code or "" local form = "size["..atlatc.CODE_FORM_SIZE.."]" .."style[code;font=mono]" - .."button[0.0,0.2;2.5,1;run;Run Init Code]" - .."button[2.5,0.2;2.5,1;cls;Clear S]" - .."button[5.0,0.2;2.5,1;save;Save]" - .."button[7.5,0.2;2.5,1;del;Delete Env.]" - .."textarea[0.3,1.5;"..atlatc.CODE_FORM_SIZE..";code;Environment initialization code;"..minetest.formspec_escape(code).."]" + .."button[0.0,0.2;2.5,1;run;"..S("Run Init Code").."]" + .."button[2.5,0.2;2.5,1;cls;"..S("Clear S").."]" + .."button[5.0,0.2;2.5,1;save;"..S("Save").."]" + .."button[7.5,0.2;2.5,1;del;"..S("Delete Env.").."]" + .."textarea[0.3,1.5;"..atlatc.CODE_FORM_SIZE..";code;"..S("Environment initialization code")..";"..minetest.formspec_escape(code).."]" .."label[0.0,9.7;"..err.."]" return form end core.register_chatcommand("env_setup", { params = "<environment name>", - description = "Set up and modify AdvTrains LuaAutomation environment", + description = S("Set up and modify AdvTrains LuaAutomation environment"), privs = {atlatc=true}, func = function(name, param) local env=atlatc.envs[param] - if not env then return false,"Invalid environment name!" end + if not env then return false,S("Invalid environment name!") end minetest.show_formspec(name, "atlatc_envsetup_"..param, get_init_form(env, name)) return true end, @@ -30,52 +33,52 @@ core.register_chatcommand("env_setup", { core.register_chatcommand("env_create", { params = "<environment name>", - description = "Create an AdvTrains LuaAutomation environment", + description = S("Create an AdvTrains LuaAutomation environment"), privs = {atlatc=true}, func = function(name, param) - if not param or param=="" then return false, "Name required!" end - if string.find(param, "[^a-zA-Z0-9-_]") then return false, "Invalid name (only common characters)" end - if atlatc.envs[param] then return false, "Environment already exists!" end + if not param or param=="" then return false, S("Name required!") end + if string.find(param, "[^a-zA-Z0-9-_]") then return false, S("Invalid name (only common characters)") end + if atlatc.envs[param] then return false, S("Environment already exists!") end atlatc.envs[param] = atlatc.env_new(param) atlatc.envs[param].subscribers = {name} - return true, "Created environment '"..param.."'. Use '/env_setup "..param.."' to define global initialization code, or start building LuaATC components!" + return true, S("Created environment '@1'. Use '/env_setup @2' to define global initialization code, or start building LuaATC components!", param, param) end, }) core.register_chatcommand("env_subscribe", { params = "<environment name>", - description = "Subscribe to the log of an Advtrains LuaATC environment", + description = S("Subscribe to the log of an Advtrains LuaATC environment"), privs = {atlatc=true}, func = function(name, param) local env=atlatc.envs[param] - if not env then return false,"Invalid environment name!" end + if not env then return false,S("Invalid environment name!") end for _,pname in ipairs(env.subscribers) do if pname==name then - return false, "Already subscribed!" + return false, S("Already subscribed!") end end table.insert(env.subscribers, name) - return true, "Subscribed to environment '"..param.."'." + return true, S("Subscribed to environment '@1'.", param) end, }) core.register_chatcommand("env_unsubscribe", { params = "<environment name>", - description = "Unubscribe to the log of an Advtrains LuaATC environment", + description = S("Unubscribe to the log of an Advtrains LuaATC environment"), privs = {atlatc=true}, func = function(name, param) local env=atlatc.envs[param] - if not env then return false,"Invalid environment name!" end + if not env then return false,S("Invalid environment name!") end for index,pname in ipairs(env.subscribers) do if pname==name then table.remove(env.subscribers, index) - return true, "Successfully unsubscribed!" + return true, S("Successfully unsubscribed!") end end - return false, "Not subscribed to environment '"..param.."'." + return false, S("Not subscribed!") end, }) core.register_chatcommand("env_subscriptions", { params = "[environment name]", - description = "List Advtrains LuaATC environments you are subscribed to (no parameters) or subscribers of an environment (giving an env name).", + description = S("List Advtrains LuaATC environments you are subscribed to (no parameters) or subscribers of an environment (giving an env name)."), privs = {atlatc=true}, func = function(name, param) if not param or param=="" then @@ -89,19 +92,19 @@ core.register_chatcommand("env_subscriptions", { end end if none then - return false, "Not subscribed to any!" + return false, S("Not subscribed to any!") end return true end local env=atlatc.envs[param] - if not env then return false,"Invalid environment name!" end + if not env then return false,S("Invalid environment name!") end local none=true for index,pname in ipairs(env.subscribers) do none=false minetest.chat_send_player(name, pname) end if none then - return false, "No subscribers!" + return false, S("No subscribers!") end return true end, @@ -115,7 +118,7 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) local envname=string.match(formname, "^atlatc_delconfirm_(.+)$") if envname and fields.sure=="YES" then atlatc.envs[envname]=nil - minetest.chat_send_player(pname, "Environment deleted!") + minetest.chat_send_player(pname, S("Environment deleted!")) return end @@ -126,7 +129,8 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) if not env then return end if fields.del then - minetest.show_formspec(pname, "atlatc_delconfirm_"..envname, "field[sure;"..minetest.formspec_escape("SURE TO DELETE ENVIRONMENT "..envname.."? Type YES (all uppercase) to continue or just quit form to cancel.")..";]") + minetest.show_formspec(pname, "atlatc_delconfirm_"..envname, "field[sure;" + ..minetest.formspec_escape(S("SURE TO DELETE ENVIRONMENT @1? Type YES (all uppercase) to continue or just quit form to cancel.", envname))..";]") return end diff --git a/advtrains_luaautomation/init.lua b/advtrains_luaautomation/init.lua index b359142..753340d 100644 --- a/advtrains_luaautomation/init.lua +++ b/advtrains_luaautomation/init.lua @@ -2,14 +2,20 @@ -- Lua automation features for advtrains -- Uses global table 'atlatc' (AdvTrains_LuaATC) -atltrans = attrans -local S = atltrans ---Privilege ---Only trusted players should be enabled to build stuff which can break the server. atlatc = { envs = {}} +-- Initialize internationalization (using ywang's poconvert) +advtrains.poconvert.from_flat("advtrains_luaautomation") +-- ask engine for translator instance, this will load the translation files +atlatc.translate = core.get_translator("advtrains_luaautomation") + +-- Get current translator +local S = atlatc.translate + +--Privilege +--Only trusted players should be enabled to build stuff which can break the server. minetest.register_privilege("atlatc", { description = S("Can place and configure LuaATC components, including execute potentially harmful Lua code"), give_to_singleplayer = false, default= false }) --Size of code input forms in X,Y notation. Must be at least 10x10 @@ -40,6 +46,9 @@ dofile(mp.."/pcnaming.lua") dofile(mp.."/chatcmds.lua") +if minetest.settings:get_bool("advtrains_luaautomation_enable_atlac_recipes",false) == true then + dofile(mp.."/recipes.lua") +end local filename=minetest.get_worldpath().."/advtrains_luaautomation" diff --git a/advtrains_luaautomation/locale/advtrains_luaautomation.de.tr b/advtrains_luaautomation/locale/advtrains_luaautomation.de.tr new file mode 100644 index 0000000..8927753 --- /dev/null +++ b/advtrains_luaautomation/locale/advtrains_luaautomation.de.tr @@ -0,0 +1,39 @@ +# textdomain: advtrains_luaautomation +Clear Local Environment=Lokale Umgebung leeren +Code=Quellcode +LuaATC Environment=LuaATC-Umgebung +LuaATC component assigned to an invalid environment=LuaATC-Komponente zugewiesen an ungültige Umgebung +LuaATC component assigned to environment '@1'=LuaATC-Komponente zugewiesen an Umgebung '@1' +LuaATC component with error: @1=LuaATC-Bauteil mit Fehlermeldung: @1 +Save=Speichern +Unconfigured LuaATC component=Nicht konfiguierter LuaATC-Bauteil +You are not allowed to configure this LuaATC component without the @1 privilege.=Sie dürfen ohne das „@1“-Privileg diesen LuaATC-Bauteil nicht konfigurieren. +LuaATC Track=LuaATC-Gleis +Already subscribed!=Bereits abonniert! +Clear S=S leeren +Create an AdvTrains LuaAutomation environment=Eine LuaATC-Umgebung erstellen +Created environment '@1'. Use '/env_setup @2' to define global initialization code, or start building LuaATC components!=Umgebung '@1' erstellt. Nutze '/env_setup @2' um Initialisierungscode zu definieren, oder beginne, LuaATC-Komponenten einzubauen! +Delete Env.=Umg. löschen +Environment already exists!=Umgebung existiert bereits! +Environment deleted!=Umgebung gelöscht! +Environment initialization code=Umgebungs-Initialisierungscode +Invalid environment name!=Ungültiger Umgebungsname! +Invalid name (only common characters)=Ungültiger Name (nur Standardzeichen) +List Advtrains LuaATC environments you are subscribed to (no parameters) or subscribers of an environment (giving an env name).=Abonnierte LuaATC-Umgebungen auflisten (ohne Parameter) oder Abonnenten einer bestimmten Umgebung anzeigen (Name angeben) +Name required!=Name benötigt! +No subscribers!=Keine Abonnenten! +Not subscribed to any!=Zu keiner Umgebung abonniert! +Not subscribed!=Nicht abonniert! +Run Init Code=Init.-Code ausführen +SURE TO DELETE ENVIRONMENT @1? Type YES (all uppercase) to continue or just quit form to cancel.=UMGEBUNG @1 WIRKLICH LÖSCHEN? Geben Sie YES (in Großbuchstaben) ein. Um abzubrechen einfach das Formular schließen. +Set up and modify AdvTrains LuaAutomation environment=LuaATC-Umgebung einstellen und bearbeiten +Subscribe to the log of an Advtrains LuaATC environment=Meldungen aus LuaATC-Umgebung abonnieren +Subscribed to environment '@1'.=Meldungen von '@1' abonniert. +Successfully unsubscribed!=Erfolgreich abgemeldet! +Unubscribe to the log of an Advtrains LuaATC environment=Meldungen aus LuaATC-Umgebung nicht mehr empfangen +Can place and configure LuaATC components, including execute potentially harmful Lua code=Kann LuaATC-Bauteile platzieren und konfigurieren (auch evtl. schädliche Programme ausführen) +LuaATC Mesecon Controller=LuaATC Mesecon-Steuerung +LuaATC Operation Panel=LuaATC-Steuerpanel +Passive Component Naming Tool@n@nRight-click to name a passive component.=PC-Benennungswerkzeug@n@nRechtsklick zur Benennung der passiven Komponente. +Set name of component (empty to clear)=Name der Komponente setzen (leer lassen um zu löschen) +You are not allowed to name LuaATC passive components without the @1 privilege.=Sie dürfen ohne das „@1“ Privileg keinen passiven LuaATC-Bauteil benennen.
\ No newline at end of file diff --git a/advtrains_luaautomation/locale/advtrains_luaautomation.fr.tr b/advtrains_luaautomation/locale/advtrains_luaautomation.fr.tr new file mode 100644 index 0000000..6f82d40 --- /dev/null +++ b/advtrains_luaautomation/locale/advtrains_luaautomation.fr.tr @@ -0,0 +1,39 @@ +# textdomain: advtrains_luaautomation +Clear Local Environment=Effacer l'environnement LuaATC +Code=Code +LuaATC Environment=Environnement LuaATC +LuaATC component assigned to an invalid environment=Composant LuaATC assigné à un environnement invalide +LuaATC component assigned to environment '@1'=Composant LuaATC assigné à l'environnement '@1' +LuaATC component with error: @1=Erreur @1 du composant LuaATC +Save=Sauvegarder +Unconfigured LuaATC component=Composant LuaATC non configuré +You are not allowed to configure this LuaATC component without the @1 privilege.=Vous ne pouvez configurer ce composant LuaATC sans le privilege @1. +#LuaATC Track=Voie de Chargement +Already subscribed!= +Clear S= +Create an AdvTrains LuaAutomation environment= +Created environment '@1'. Use '/env_setup @2' to define global initialization code, or start building LuaATC components!= +Delete Env.= +Environment already exists!= +Environment deleted!= +Environment initialization code= +Invalid environment name!= +Invalid name (only common characters)= +List Advtrains LuaATC environments you are subscribed to (no parameters) or subscribers of an environment (giving an env name).= +Name required!= +No subscribers!= +Not subscribed to any!= +Not subscribed!= +Run Init Code= +SURE TO DELETE ENVIRONMENT @1? Type YES (all uppercase) to continue or just quit form to cancel.= +Set up and modify AdvTrains LuaAutomation environment= +Subscribe to the log of an Advtrains LuaATC environment= +#Subscribed to environment '@1'.=Composant LuaATC assigné à l'environnement '@1' +Successfully unsubscribed!= +Unubscribe to the log of an Advtrains LuaATC environment= +Can place and configure LuaATC components, including execute potentially harmful Lua code=Permet le placement et la configuration de composants LuaATC avec risque d'exécution de code Lua dangereux +LuaATC Mesecon Controller=Commande Mesecon de LuaATC +LuaATC Operation Panel=Panneau de commande de LuaATC +Passive Component Naming Tool@n@nRight-click to name a passive component.=Outil de nommage de composant passif@n@nClic-Droit pour nommer un composant passif. +Set name of component (empty to clear)=Nommer le composant (chaîne vide pour effacer) +You are not allowed to name LuaATC passive components without the @1 privilege.=Vous ne pouvez nommer un composant LuaATC passif sans le privilege @1.
\ No newline at end of file diff --git a/advtrains_luaautomation/locale/advtrains_luaautomation.zh_CN.tr b/advtrains_luaautomation/locale/advtrains_luaautomation.zh_CN.tr new file mode 100644 index 0000000..558907f --- /dev/null +++ b/advtrains_luaautomation/locale/advtrains_luaautomation.zh_CN.tr @@ -0,0 +1,39 @@ +# textdomain: advtrains_luaautomation +Clear Local Environment= +Code= +LuaATC Environment= +LuaATC component assigned to an invalid environment= +LuaATC component assigned to environment '@1'= +LuaATC component with error: @1= +Save=保存 +Unconfigured LuaATC component=LuaATC 部件 (未配置) +You are not allowed to configure this LuaATC component without the @1 privilege.=您没有“@1”权限,不能配置这个 LuaATC 部件。 +#LuaATC Track=装货轨道 +Already subscribed!= +Clear S= +Create an AdvTrains LuaAutomation environment= +Created environment '@1'. Use '/env_setup @2' to define global initialization code, or start building LuaATC components!= +Delete Env.= +Environment already exists!= +Environment deleted!= +Environment initialization code= +Invalid environment name!= +Invalid name (only common characters)= +List Advtrains LuaATC environments you are subscribed to (no parameters) or subscribers of an environment (giving an env name).= +Name required!= +No subscribers!= +Not subscribed to any!= +Not subscribed!= +Run Init Code= +SURE TO DELETE ENVIRONMENT @1? Type YES (all uppercase) to continue or just quit form to cancel.= +Set up and modify AdvTrains LuaAutomation environment= +Subscribe to the log of an Advtrains LuaATC environment= +Subscribed to environment '@1'.= +Successfully unsubscribed!= +Unubscribe to the log of an Advtrains LuaATC environment= +Can place and configure LuaATC components, including execute potentially harmful Lua code= +LuaATC Mesecon Controller= +LuaATC Operation Panel= +Passive Component Naming Tool@n@nRight-click to name a passive component.=被动元件命名工具@n@n右键单击命名所选元件。 +Set name of component (empty to clear)= +You are not allowed to name LuaATC passive components without the @1 privilege.=您没有“@1”权限,不能命名被动元件。
\ No newline at end of file diff --git a/advtrains_luaautomation/locale/advtrains_luaautomation.zh_TW.tr b/advtrains_luaautomation/locale/advtrains_luaautomation.zh_TW.tr new file mode 100644 index 0000000..9743b79 --- /dev/null +++ b/advtrains_luaautomation/locale/advtrains_luaautomation.zh_TW.tr @@ -0,0 +1,39 @@ +# textdomain: advtrains_luaautomation +Clear Local Environment= +Code= +LuaATC Environment= +LuaATC component assigned to an invalid environment= +LuaATC component assigned to environment '@1'= +LuaATC component with error: @1= +Save=儲存 +Unconfigured LuaATC component=LuaATC 元件 (未配置) +You are not allowed to configure this LuaATC component without the @1 privilege.=您沒有「@1」許可權,不能配置這個 LuaATC 元件。 +#LuaATC Track=裝貨軌道 +Already subscribed!= +Clear S= +Create an AdvTrains LuaAutomation environment= +Created environment '@1'. Use '/env_setup @2' to define global initialization code, or start building LuaATC components!= +Delete Env.= +Environment already exists!= +Environment deleted!= +Environment initialization code= +Invalid environment name!= +Invalid name (only common characters)= +List Advtrains LuaATC environments you are subscribed to (no parameters) or subscribers of an environment (giving an env name).= +Name required!= +No subscribers!= +Not subscribed to any!= +Not subscribed!= +Run Init Code= +SURE TO DELETE ENVIRONMENT @1? Type YES (all uppercase) to continue or just quit form to cancel.= +Set up and modify AdvTrains LuaAutomation environment= +Subscribe to the log of an Advtrains LuaATC environment= +Subscribed to environment '@1'.= +Successfully unsubscribed!= +Unubscribe to the log of an Advtrains LuaATC environment= +Can place and configure LuaATC components, including execute potentially harmful Lua code= +LuaATC Mesecon Controller= +LuaATC Operation Panel= +Passive Component Naming Tool@n@nRight-click to name a passive component.=被動元件命名工具@n@n右鍵單擊命名所選元件。 +Set name of component (empty to clear)= +You are not allowed to name LuaATC passive components without the @1 privilege.=您沒有「@1」許可權,不能命名這個元件。
\ No newline at end of file diff --git a/advtrains_luaautomation/mesecon_controller.lua b/advtrains_luaautomation/mesecon_controller.lua index 6981839..9f1a931 100644 --- a/advtrains_luaautomation/mesecon_controller.lua +++ b/advtrains_luaautomation/mesecon_controller.lua @@ -6,7 +6,8 @@ -- From Mesecons mod https://mesecons.net/ -- (c) Jeija and Contributors -local S = atltrans +-- Get current translator +local S = atlatc.translate local BASENAME = "advtrains_luaautomation:mesecon_controller" local rules = { diff --git a/advtrains_luaautomation/operation_panel.lua b/advtrains_luaautomation/operation_panel.lua index 8e12651..adfaf09 100644 --- a/advtrains_luaautomation/operation_panel.lua +++ b/advtrains_luaautomation/operation_panel.lua @@ -1,4 +1,5 @@ -local S = atltrans +-- Get current translator +local S = atlatc.translate local function on_punch(pos,node,player) atlatc.interrupt.add(0, pos, {type="punch", punch=true, name=player:get_player_name()}) diff --git a/advtrains_luaautomation/pcnaming.lua b/advtrains_luaautomation/pcnaming.lua index 0089ae7..7c7f0c9 100644 --- a/advtrains_luaautomation/pcnaming.lua +++ b/advtrains_luaautomation/pcnaming.lua @@ -2,7 +2,8 @@ --a.k.a Passive component naming --Allows to assign names to passive components, so they can be called like: --setstate("iamasignal", "green") -local S = atltrans +-- Get current translator +local S = atlatc.translate atlatc.pcnaming={name_map={}} function atlatc.pcnaming.load(stuff) @@ -86,3 +87,8 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) end end end) +minetest.register_craft({ + output = "advtrains_luaautomation:pcnaming", + type = "shapeless", + recipe = {"dye:red","advtrains:trackworker"} +}) diff --git a/advtrains_luaautomation/po/README.md b/advtrains_luaautomation/po/README.md new file mode 100644 index 0000000..3e94682 --- /dev/null +++ b/advtrains_luaautomation/po/README.md @@ -0,0 +1,70 @@ +# Translations +Please read this document before working on any translations. + +Unlike many other mods, Advtrains uses `.po` files for localization, +which are then automatically converted to `.tr` files when the mod is +loaded. Therefore, please submit patches that edit the `.po` files. + +## Getting Started +The translation files can be edited like any other `.po` file. + +If the translation file for your language does not exist, create it by +copying `template.txt` to `advtrains.XX.tr`, where `XX` is replaced by +the language code. + +Feel free to use the [discussion mailing list][srht-discuss] if you +have any questions regarding localization. + +You can share your `.po` file directly or [as a patch][gsm] to the [dev +mailing list][srht-devel]. The latter is encouraged, but, unlike code +changes, translation files sent directly are also accepted. + +[tr-format]: https://minetest.gitlab.io/minetest/translations/#translation-file-format +[srht-discuss]: https://lists.sr.ht/~gpcf/advtrains-discuss +[srht-devel]: https://lists.sr.ht/~gpcf/advtrains-devel +[gsm]: https://git-send-email.io + +## Translation Notes +* Translations should be consistent. You can use other entries or the +translations in Minetest as a reference. +* Translations do not have to fully correspond to the original text - +they only need to provide the same information. In particular, +translations do not need to have the same linguistical structure as the +original text. +* Replacement sequences (`@1`, `@2`, etc) should not be translated. +* Certain abbreviations or names, such as "Ks" or "Zs 3", should +generally not be translated. + +### (de) German +* Verwenden Sie die neue Rechtschreibung und die Sie-Form. +* Mit der deutschen Tastaturbelegung unter Linux können die +Anführungszeichen „“ mit AltGr-V bzw. AltGr-B eingegeben werden. + +### (zh) Chinese +(This section is written in English to avoid writing the note twice or +using only one of the variants, as most of this section applies to both +the traditional and simplified variants.) + +* Please use the 「」 quotation marks for Traditional Chinese and “” +for Simplified Chinese. +* Please use the fullwidth variants of: , 、 。 ? ! : ; +* Please use the halfwidth variants of: ( ) [ ] / \ | +* Please do not leave any space between Han characters (including +fullwidth punctuation marks). +* Please leave a space between Han characters (excluding fullwidth +punctuation marks) and characters from other scripts (including +halfwidth punctuation marks). However, do not leave any space between +Han characters and Arabic numerals. + +## Notes for developers +* The `update-translations.sh` script can be used to update the +translation files. However, please make sure to install the +`basic_trains` mod before running the script. +* Please make sure that the first argument to `S` (or `attrans`) _only_ +includes string literals without formatting or concatenation. This is +unfortunately a limitation of the `xgettext` utility. +* Avoid word-by-word translations. +* Avoid manipulating translated strings (except for concatenation). Use +server-side translations if you have to modify the text sent to users. +* Avoid truncating strings unless multibyte characters are handled +properly. diff --git a/advtrains_luaautomation/po/advtrains_luaautomation.pot b/advtrains_luaautomation/po/advtrains_luaautomation.pot new file mode 100644 index 0000000..b0adf58 --- /dev/null +++ b/advtrains_luaautomation/po/advtrains_luaautomation.pot @@ -0,0 +1,185 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the advtrains_luaautomation package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: advtrains_luaautomation\n" +"Report-Msgid-Bugs-To: advtrains-discuss@lists.sr.ht\n" +"POT-Creation-Date: 2025-06-11 23:03+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=CHARSET\n" +"Content-Transfer-Encoding: 8bit\n" + +#: active_common.lua +msgid "Unconfigured LuaATC component" +msgstr "" + +#: active_common.lua +msgid "LuaATC Environment" +msgstr "" + +#: active_common.lua chatcmds.lua +msgid "Save" +msgstr "" + +#: active_common.lua +msgid "Clear Local Environment" +msgstr "" + +#: active_common.lua +msgid "Code" +msgstr "" + +#: active_common.lua +msgid "" +"You are not allowed to configure this LuaATC component without the @1 " +"privilege." +msgstr "" + +#: active_common.lua +msgid "LuaATC component assigned to environment '@1'" +msgstr "" + +#: active_common.lua +msgid "LuaATC component assigned to an invalid environment" +msgstr "" + +#: active_common.lua +msgid "LuaATC component with error: @1" +msgstr "" + +#: atc_rail.lua +msgid "LuaATC Track" +msgstr "" + +#: chatcmds.lua +msgid "Run Init Code" +msgstr "" + +#: chatcmds.lua +msgid "Clear S" +msgstr "" + +#: chatcmds.lua +msgid "Delete Env." +msgstr "" + +#: chatcmds.lua +msgid "Environment initialization code" +msgstr "" + +#: chatcmds.lua +msgid "Set up and modify AdvTrains LuaAutomation environment" +msgstr "" + +#: chatcmds.lua +msgid "Invalid environment name!" +msgstr "" + +#: chatcmds.lua +msgid "Create an AdvTrains LuaAutomation environment" +msgstr "" + +#: chatcmds.lua +msgid "Name required!" +msgstr "" + +#: chatcmds.lua +msgid "Invalid name (only common characters)" +msgstr "" + +#: chatcmds.lua +msgid "Environment already exists!" +msgstr "" + +#: chatcmds.lua +msgid "" +"Created environment '@1'. Use '/env_setup @2' to define global " +"initialization code, or start building LuaATC components!" +msgstr "" + +#: chatcmds.lua +msgid "Subscribe to the log of an Advtrains LuaATC environment" +msgstr "" + +#: chatcmds.lua +msgid "Already subscribed!" +msgstr "" + +#: chatcmds.lua +msgid "Subscribed to environment '@1'." +msgstr "" + +#: chatcmds.lua +msgid "Unubscribe to the log of an Advtrains LuaATC environment" +msgstr "" + +#: chatcmds.lua +msgid "Successfully unsubscribed!" +msgstr "" + +#: chatcmds.lua +msgid "Not subscribed!" +msgstr "" + +#: chatcmds.lua +msgid "" +"List Advtrains LuaATC environments you are subscribed to (no parameters) or " +"subscribers of an environment (giving an env name)." +msgstr "" + +#: chatcmds.lua +msgid "Not subscribed to any!" +msgstr "" + +#: chatcmds.lua +msgid "No subscribers!" +msgstr "" + +#: chatcmds.lua +msgid "Environment deleted!" +msgstr "" + +#: chatcmds.lua +msgid "" +"SURE TO DELETE ENVIRONMENT @1? Type YES (all uppercase) to continue or just " +"quit form to cancel." +msgstr "" + +#: init.lua +msgid "" +"Can place and configure LuaATC components, including execute potentially " +"harmful Lua code" +msgstr "" + +#: mesecon_controller.lua +msgid "LuaATC Mesecon Controller" +msgstr "" + +#: operation_panel.lua +msgid "LuaATC Operation Panel" +msgstr "" + +#: pcnaming.lua +msgid "" +"Passive Component Naming Tool\n" +"\n" +"Right-click to name a passive component." +msgstr "" + +#: pcnaming.lua +msgid "" +"You are not allowed to name LuaATC passive components without the @1 " +"privilege." +msgstr "" + +#: pcnaming.lua +msgid "Set name of component (empty to clear)" +msgstr "" diff --git a/advtrains_luaautomation/po/de.po b/advtrains_luaautomation/po/de.po new file mode 100644 index 0000000..7327c77 --- /dev/null +++ b/advtrains_luaautomation/po/de.po @@ -0,0 +1,708 @@ +msgid "" +msgstr "" +"Project-Id-Version: advtrains\n" +"Report-Msgid-Bugs-To: advtrains-discuss@lists.sr.ht\n" +"POT-Creation-Date: 2025-06-11 23:03+0200\n" +"PO-Revision-Date: 2025-06-11 23:13+0200\n" +"Last-Translator: Y. Wang <yw05@forksworld.de>\n" +"Language-Team: German\n" +"Language: de\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 3.2.2\n" + +#: active_common.lua +msgid "Clear Local Environment" +msgstr "Lokale Umgebung leeren" + +#: active_common.lua +msgid "Code" +msgstr "Quellcode" + +#: active_common.lua +msgid "LuaATC Environment" +msgstr "LuaATC-Umgebung" + +#: active_common.lua +msgid "LuaATC component assigned to an invalid environment" +msgstr "LuaATC-Komponente zugewiesen an ungültige Umgebung" + +#: active_common.lua +msgid "LuaATC component assigned to environment '@1'" +msgstr "LuaATC-Komponente zugewiesen an Umgebung '@1'" + +#: active_common.lua +msgid "LuaATC component with error: @1" +msgstr "LuaATC-Bauteil mit Fehlermeldung: @1" + +#: active_common.lua chatcmds.lua +msgid "Save" +msgstr "Speichern" + +#: active_common.lua +msgid "Unconfigured LuaATC component" +msgstr "Nicht konfiguierter LuaATC-Bauteil" + +#: active_common.lua +msgid "" +"You are not allowed to configure this LuaATC component without the @1 " +"privilege." +msgstr "" +"Sie dürfen ohne das „@1“-Privileg diesen LuaATC-Bauteil nicht konfigurieren." + +#: atc_rail.lua +msgid "LuaATC Track" +msgstr "LuaATC-Gleis" + +#: chatcmds.lua +msgid "Already subscribed!" +msgstr "Bereits abonniert!" + +#: chatcmds.lua +msgid "Clear S" +msgstr "S leeren" + +#: chatcmds.lua +msgid "Create an AdvTrains LuaAutomation environment" +msgstr "Eine LuaATC-Umgebung erstellen" + +#: chatcmds.lua +msgid "" +"Created environment '@1'. Use '/env_setup @2' to define global " +"initialization code, or start building LuaATC components!" +msgstr "" +"Umgebung '@1' erstellt. Nutze '/env_setup @2' um Initialisierungscode zu " +"definieren, oder beginne, LuaATC-Komponenten einzubauen!" + +#: chatcmds.lua +msgid "Delete Env." +msgstr "Umg. löschen" + +#: chatcmds.lua +msgid "Environment already exists!" +msgstr "Umgebung existiert bereits!" + +#: chatcmds.lua +msgid "Environment deleted!" +msgstr "Umgebung gelöscht!" + +#: chatcmds.lua +msgid "Environment initialization code" +msgstr "Umgebungs-Initialisierungscode" + +#: chatcmds.lua +msgid "Invalid environment name!" +msgstr "Ungültiger Umgebungsname!" + +#: chatcmds.lua +msgid "Invalid name (only common characters)" +msgstr "Ungültiger Name (nur Standardzeichen)" + +#: chatcmds.lua +msgid "" +"List Advtrains LuaATC environments you are subscribed to (no parameters) or " +"subscribers of an environment (giving an env name)." +msgstr "" +"Abonnierte LuaATC-Umgebungen auflisten (ohne Parameter) oder Abonnenten " +"einer bestimmten Umgebung anzeigen (Name angeben)" + +#: chatcmds.lua +msgid "Name required!" +msgstr "Name benötigt!" + +#: chatcmds.lua +msgid "No subscribers!" +msgstr "Keine Abonnenten!" + +#: chatcmds.lua +msgid "Not subscribed to any!" +msgstr "Zu keiner Umgebung abonniert!" + +#: chatcmds.lua +msgid "Not subscribed!" +msgstr "Nicht abonniert!" + +#: chatcmds.lua +msgid "Run Init Code" +msgstr "Init.-Code ausführen" + +#: chatcmds.lua +msgid "" +"SURE TO DELETE ENVIRONMENT @1? Type YES (all uppercase) to continue or just " +"quit form to cancel." +msgstr "" +"UMGEBUNG @1 WIRKLICH LÖSCHEN? Geben Sie YES (in Großbuchstaben) ein. Um " +"abzubrechen einfach das Formular schließen." + +#: chatcmds.lua +msgid "Set up and modify AdvTrains LuaAutomation environment" +msgstr "LuaATC-Umgebung einstellen und bearbeiten" + +#: chatcmds.lua +msgid "Subscribe to the log of an Advtrains LuaATC environment" +msgstr "Meldungen aus LuaATC-Umgebung abonnieren" + +#: chatcmds.lua +msgid "Subscribed to environment '@1'." +msgstr "Meldungen von '@1' abonniert." + +#: chatcmds.lua +msgid "Successfully unsubscribed!" +msgstr "Erfolgreich abgemeldet!" + +#: chatcmds.lua +msgid "Unubscribe to the log of an Advtrains LuaATC environment" +msgstr "Meldungen aus LuaATC-Umgebung nicht mehr empfangen" + +#: init.lua +msgid "" +"Can place and configure LuaATC components, including execute potentially " +"harmful Lua code" +msgstr "" +"Kann LuaATC-Bauteile platzieren und konfigurieren (auch evtl. schädliche " +"Programme ausführen)" + +#: mesecon_controller.lua +msgid "LuaATC Mesecon Controller" +msgstr "LuaATC Mesecon-Steuerung" + +#: operation_panel.lua +msgid "LuaATC Operation Panel" +msgstr "LuaATC-Steuerpanel" + +#: pcnaming.lua +msgid "" +"Passive Component Naming Tool\n" +"\n" +"Right-click to name a passive component." +msgstr "" +"PC-Benennungswerkzeug\n" +"\n" +"Rechtsklick zur Benennung der passiven Komponente." + +#: pcnaming.lua +msgid "Set name of component (empty to clear)" +msgstr "Name der Komponente setzen (leer lassen um zu löschen)" + +#: pcnaming.lua +msgid "" +"You are not allowed to name LuaATC passive components without the @1 " +"privilege." +msgstr "" +"Sie dürfen ohne das „@1“ Privileg keinen passiven LuaATC-Bauteil benennen." + +#~ msgid "(Doors closed)" +#~ msgstr "(Türen geschlossen)" + +#~ msgid "3-way turnout" +#~ msgstr "Dreiwegweiche" + +#~ msgid "90+Angle Diamond Crossing Track" +#~ msgstr "Kreuzung mit einem achsenparallelen Gleis" + +#~ msgid "<No coupler>" +#~ msgstr "<Keine Kupplung vorhanden>" + +#~ msgid "@1 Platform (45 degree)" +#~ msgstr "Hoher @1-Bahnsteig (45°)" + +#~ msgid "@1 Platform (high)" +#~ msgstr "Hoher @1-Bahnsteig" + +#~ msgid "@1 Platform (low)" +#~ msgstr "Niedriger @1-Bahnsteig" + +#~ msgid "@1 Platform (low, 45 degree)" +#~ msgstr "Niedriger @1-Bahnsteig (45°)" + +#~ msgid "@1 Slope" +#~ msgstr "@1 Steigung" + +#~ msgid "ATC Kick command warning: doors are closed." +#~ msgstr "" +#~ "Zugbeeinflussung: Wegen geschlossener Türen werden Fahrgäste nicht zum " +#~ "Ausstieg gezwungen." + +#~ msgid "ATC Kick command warning: train moving." +#~ msgstr "" +#~ "Zugbeeinflussung: Der Zug befindet sich in Bewegung, Fahrgäste werden " +#~ "nicht zum Ausstieg gezwungen." + +#~ msgid "ATC Reverse command warning: didn't reverse train, train moving." +#~ msgstr "" +#~ "Zugbeeinflussung: Der Zug befindet sich in Bewegung und kann nicht " +#~ "umgekehrt werden." + +#~ msgid "ATC command parse error: Unknown command: @1" +#~ msgstr "Zugbeeinflussung: Unbekannter Befehl: @1" + +#~ msgid "ATC command syntax error: I statement not closed: @1" +#~ msgstr "Zugbeeinflussung: Unvollständiger I-Befehl: @1" + +#~ msgid "ATC controller" +#~ msgstr "Zugbeeinflussungsgleis" + +#~ msgid "" +#~ "ATC controller, mode @1\n" +#~ "Channel: @2" +#~ msgstr "" +#~ "Zugbeeinflussungsgleis in Betriebsart „@1“\n" +#~ "Kanal: @2" + +#~ msgid "" +#~ "ATC controller, mode @1\n" +#~ "Command: @2" +#~ msgstr "" +#~ "Zugbeeinflussungsgleis in Betriebsart „@1“\n" +#~ "Befehl: @2" + +#~ msgid "Access to @1" +#~ msgstr "Zugang zu @1" + +#~ msgid "Andrew's Cross" +#~ msgstr "Andreaskreuz" + +#~ msgid "Back of train would end up off track, cancelling." +#~ msgstr "Der hinterer Teil dez Zuges wäre nicht auf dem Gleis." + +#~ msgid "Big Industrial Train Engine" +#~ msgstr "Große Industrielle Lokomotive" + +#~ msgid "Box Wagon" +#~ msgstr "Güterwaggon" + +#~ msgid "Buffer and Chain Coupler" +#~ msgstr "Schraubenkupplung" + +#~ msgid "Bumper" +#~ msgstr "Prellbock" + +#~ msgid "Can not couple: The couplers of the trains do not match (@1 and @2)." +#~ msgstr "Die Kupplungen der Züge passen nicht zueinander (@1 und @2)." + +#~ msgid "Can't get on: wagon full or doors closed!" +#~ msgstr "" +#~ "Sie können nicht einsteigen: der Waggon ist voll oder die Türen sind " +#~ "geschlossen." + +#, fuzzy +#~ msgid "Can't place: Not enough slope items left (@1 required)" +#~ msgstr "" +#~ "Es kann nicht platziert werden: Sie haben nicht genug Steigungsblöcke, es " +#~ "werden insgesamt @1 benötigt." + +#, fuzzy +#~ msgid "Can't place: There's no slope of length @1" +#~ msgstr "" +#~ "Es kann nicht platziert werden: die Steigung der Länge @1 ist nicht " +#~ "definiert." + +#, fuzzy +#~ msgid "Can't place: no supporting node at upper end." +#~ msgstr "" +#~ "Es kann nicht platziert werden: es gibt keinen unterstützenden Block am " +#~ "Ende der Steigung." + +#, fuzzy +#~ msgid "Can't place: not pointing at node" +#~ msgstr "Es kann nicht platziert werden: Sie zeigen nicht auf einem Block." + +#~ msgid "Can't place: protected position!" +#~ msgstr "Es kann nicht platziert werden: diese Position ist geschützt." + +#, fuzzy +#~ msgid "Can't place: space occupied!" +#~ msgstr "Es kann nicht platziert werden: Diese Position ist besetzt." + +#~ msgid "Command" +#~ msgstr "Befehl" + +#~ msgid "Command (on)" +#~ msgstr "Befehl (wenn aktiviert)" + +#~ msgid "Default Seat" +#~ msgstr "Standardsitzplatz" + +#~ msgid "Default Seat (driver stand)" +#~ msgstr "Standardsitzplatz (Führerstand)" + +#~ msgid "Dep. Speed" +#~ msgstr "Zielgeschwindigkeit bei Abfahrt" + +#~ msgid "Deprecated Track" +#~ msgstr "ausrangiertes Gleis, nicht verwenden." + +#~ msgid "Detailed Steam Engine" +#~ msgstr "Detaillierte Dampflokomotive" + +#~ msgid "Detector Rail" +#~ msgstr "Detektorgleis" + +#~ msgid "Diagonal Diamond Crossing Track" +#~ msgstr "Diagonale Gleiskreuzung" + +#~ msgid "Digiline channel" +#~ msgstr "Digiline-Kanal" + +#~ msgid "Door Delay" +#~ msgstr "Zeit für die Türschließung" + +#~ msgid "Door Side" +#~ msgstr "Türseite" + +#~ msgid "Doors are closed! (Try holding sneak key!)" +#~ msgstr "Die Türen sind geschlossen." + +#~ msgid "" +#~ "Doors are closed. Use Sneak+rightclick to ignore the closed doors and get " +#~ "off." +#~ msgstr "" +#~ "Die Türen sind geschlossen. Nutzen Sie Schleichen+Rechtsklick, um trotz " +#~ "geschlossener Türen auszusteigen." + +#, fuzzy +#~ msgid "Driver Stand" +#~ msgstr "Führerstand" + +#~ msgid "Driver Stand (left)" +#~ msgstr "Führerstand Links" + +#~ msgid "Driver Stand (right)" +#~ msgstr "Führerstand Rechts" + +#~ msgid "Driver stand" +#~ msgstr "Führerstand" + +#~ msgid "Driver's cab" +#~ msgstr "Führerstand" + +#~ msgid "Get off" +#~ msgstr "Aussteigen" + +#~ msgid "Get off (forced)" +#~ msgstr "Ausstieg zwingen" + +#~ msgid "Industrial Train Engine" +#~ msgstr "Industrielle Lokomotive" + +#~ msgid "Industrial tank wagon" +#~ msgstr "Tankwaggon" + +#~ msgid "Industrial wood wagon" +#~ msgstr "Holztransportwaggon" + +#~ msgid "Japanese Train Engine" +#~ msgstr "Japanische Personenzug-Lokomotive" + +#~ msgid "Japanese Train Inter-Wagon Connection" +#~ msgstr "Waggonzwischenverbindung Japanischer Personenzüge" + +#~ msgid "Japanese Train Wagon" +#~ msgstr "Japanischer Personenzug-Passagierwaggon" + +#, fuzzy +#~ msgid "Japanese signal pole" +#~ msgstr "Japanischer Personenzug-Passagierwaggon" + +#~ msgid "Kick out passengers" +#~ msgstr "Fahrgäste zum Ausstieg zwingen" + +#~ msgid "Lampless Signal" +#~ msgstr "Mechanisches Signal" + +#~ msgid "Line" +#~ msgstr "Linie" + +#~ msgid "Lock couples" +#~ msgstr "Kupplungen sperren" + +#~ msgid "No such lua entity." +#~ msgstr "" +#~ "Sie zeigen nicht auf einem Objekt, das mit diesem Werkzeug kopiert werden " +#~ "kann." + +#~ msgid "No such train: @1." +#~ msgstr "Es gibt keinen mit „@1“ identifizierbaren Zug." + +#~ msgid "No such wagon: @1." +#~ msgstr "Es gibt keinen mit „@1“ identifizierbaren Waggon." + +#, fuzzy +#~ msgid "Not allowed to do this." +#~ msgstr "Sie dürfen dieses Gleis nicht konfigurieren." + +#~ msgid "Passenger Wagon" +#~ msgstr "Passagierwaggon" + +#, fuzzy +#~ msgid "Passenger area" +#~ msgstr "Passagierwaggon" + +#~ msgid "Perpendicular Diamond Crossing Track" +#~ msgstr "Kreuzung mit zueinander orthogonalen Gleisen" + +#~ msgid "Point Speed Restriction Track" +#~ msgstr "Geschwindigkeitskontrollgleis" + +#~ msgid "Point speed restriction: @1" +#~ msgstr "Geschwindigkeitskontrolle: @1" + +#~ msgid "Position is occupied by a train." +#~ msgstr "Ein Zug steht an dieser Position." + +#~ msgid "Reverse train" +#~ msgstr "Zug Umkehren" + +#~ msgid "Save wagon properties" +#~ msgstr "Waggon-Einstellungen speichern" + +#~ msgid "Scharfenberg Coupler" +#~ msgstr "Scharfenbergkupplung" + +#~ msgid "Select seat:" +#~ msgstr "Wählen Sie einen Sitzplatz aus:" + +#~ msgid "Show Inventory" +#~ msgstr "Inventar Zeigen" + +#~ msgid "Signal" +#~ msgstr "Lichtsignal" + +#~ msgid "Speed:" +#~ msgstr "Geschw.:" + +#~ msgid "Station Code" +#~ msgstr "Kennzeichen der Haltestelle" + +#~ msgid "Station Name" +#~ msgstr "Name der Haltestelle" + +#~ msgid "Station code \"@1\" already exists and is owned by @2." +#~ msgstr "" +#~ "Die Haltestelle mit dem Kennzeichen „@1“ ist bereits vorhanden und wird " +#~ "von @2 verwaltet." + +#~ msgid "Station/Stop Track" +#~ msgstr "Gleis zur Kennzeichnung einer Haltestelle" + +#~ msgid "Steam Engine" +#~ msgstr "Dampflokomotive" + +#~ msgid "Stop Time" +#~ msgstr "Wartezeit" + +#~ msgid "Subway Passenger Wagon" +#~ msgstr "U-Bahn-Waggon" + +#~ msgid "Target:" +#~ msgstr "Zielges.:" + +#~ msgid "Text displayed inside train" +#~ msgstr "Innere Anzeige" + +#~ msgid "Text displayed outside on train" +#~ msgstr "Äußere Anzeige" + +#, fuzzy +#~ msgid "That wagon does not exist!" +#~ msgstr "In diesem Waggon ist kein Sitzplatz vorhanden." + +#~ msgid "The clipboard couldn't access the metadata. Copy failed." +#~ msgstr "" +#~ "Wegen des fehlgeschlagenen Zugriffs auf die Metadaten konnte der Zug " +#~ "nicht kopiert werden." + +#~ msgid "The clipboard couldn't access the metadata. Paste failed." +#~ msgstr "" +#~ "Wegen des fehlgeschlagenen Zugriffs auf die Metadaten konnte eine Kopie " +#~ "des Zuges nicht eingefügt werden." + +#~ msgid "The clipboard is empty." +#~ msgstr "Das Clipboard ist leer." + +#, fuzzy +#~ msgid "The track you are trying to place the wagon on is not long enough!" +#~ msgstr "Das Gleis, auf dem der Waggon platziert werden woll, ist zu kurz." + +#~ msgid "The track you are trying to place the wagon on is not long enough." +#~ msgstr "Das Gleis, auf dem der Waggon platziert werden woll, ist zu kurz." + +#~ msgid "The wagon's inventory is not empty." +#~ msgstr "Das Inventar dieses Waggons ist nicht leer." + +#~ msgid "There's a Signal Influence Point here." +#~ msgstr "Hier ist ein Signal-Beeinflussungspunkt." + +#~ msgid "There's a Track Circuit Break here." +#~ msgstr "Hier ist eine Gleisabschnittsgrenze (TCB)." + +#, fuzzy +#~ msgid "This Wagon ID" +#~ msgstr "Der Waggon ist voll." + +#, fuzzy +#~ msgid "This node can't be changed using the trackworker!" +#~ msgstr "Dieser Block kann nicht mit dem Gleiswerkzeug bearbeitet werden." + +#, fuzzy +#~ msgid "This node can't be rotated using the trackworker!" +#~ msgstr "Dieser Block kann nicht mit dem Gleiswerkzeug gedreht werden." + +#~ msgid "This position is protected!" +#~ msgstr "Diese Position ist geschützt!" + +#~ msgid "This station is owned by @1. You are not allowed to edit its name." +#~ msgstr "" +#~ "Diese Haltestelle wird von @1 verwaltet. Sie dürfen sie nicht umbenennen." + +#~ msgid "This track can not be changed." +#~ msgstr "Dieses Gleis kann nicht geändert werden." + +#, fuzzy +#~ msgid "This track can not be removed!" +#~ msgstr "Dieses Gleis kann nicht entfernt werden." + +#, fuzzy +#~ msgid "This track can not be rotated!" +#~ msgstr "Dieses Gleis kann nicht gedreht werden." + +#~ msgid "This wagon has no seats." +#~ msgstr "In diesem Waggon ist kein Sitzplatz vorhanden." + +#~ msgid "This wagon is full." +#~ msgstr "Der Waggon ist voll." + +#~ msgid "This wagon is owned by @1, you can't destroy it." +#~ msgstr "Dieser Waggon gehört @1, Sie dürfen ihn nicht abbauen." + +#~ msgid "Track" +#~ msgstr "Gleis" + +#~ msgid "" +#~ "Track Worker Tool\n" +#~ "\n" +#~ "Left-click: change rail type (straight/curve/switch)\n" +#~ "Right-click: rotate object" +#~ msgstr "" +#~ "Gleiswerkzeug\n" +#~ "\n" +#~ "Linksklick: Gleistyp ändern\n" +#~ "Rechtsklick: Objekt drehen" + +#, fuzzy +#~ msgid "Train " +#~ msgstr "Der Zug wurde Kopiert." + +#~ msgid "Train copied." +#~ msgstr "Der Zug wurde Kopiert." + +#~ msgid "" +#~ "Train copy/paste tool\n" +#~ "\n" +#~ "Left-click: copy train\n" +#~ "Right-click: paste train" +#~ msgstr "" +#~ "Werkzeug zur Erstellung von Zugkopien\n" +#~ "\n" +#~ "Linksklick: Zug ins Clipboard kopieren\n" +#~ "Right-click: Kopierten Zug einfügen" + +#~ msgid "Unconfigured ATC controller" +#~ msgstr "Nicht konfiguiertes Zugbeeinflussungsgleis" + +#~ msgid "Unloading Track" +#~ msgstr "Abladungsgleis" + +#~ msgid "Use Sneak+rightclick to bypass closed doors!" +#~ msgstr "" +#~ "Nutzen Sie Schleichen+Rechtsklick, um trotz geschlossener Türen " +#~ "einzusteigen." + +#, fuzzy +#~ msgid "Wagon Properties Tool" +#~ msgstr "Waggon-Einstellungen" + +#~ msgid "" +#~ "Wagon needs to be decoupled from other wagons in order to destroy it." +#~ msgstr "Der Waggon muss abgekoppelt sein, damit Sie ihn abbauen können." + +#~ msgid "Wagon properties" +#~ msgstr "Waggon-Einstellungen" + +#~ msgid "Wallmounted Signal (left)" +#~ msgstr "An der linken Seite montiertes Signal" + +#~ msgid "Wallmounted Signal (right)" +#~ msgstr "An der rechten Seite montiertes Signal" + +#~ msgid "Wallmounted Signal (top)" +#~ msgstr "An der Decke montiertes Signal" + +#~ msgid "" +#~ "Warning: If you destroy this wagon, you only get some steel back! If you " +#~ "are sure, hold Sneak and left-click the wagon." +#~ msgstr "" +#~ "Warnung: Durch den Abbau des Waggons erhalten Sie nur etwas Stahl zurück. " +#~ "Nutzen Sie Schleichen+Linksklick, um dem Waggon abzubauen." + +#~ msgid "Y-turnout" +#~ msgstr "Y-Weiche" + +#~ msgid "You are not allowed to access the driver stand." +#~ msgstr "Sie haben keinen Zugang zum Führerstand." + +#~ msgid "You are not allowed to build near tracks at this protected position." +#~ msgstr "" +#~ "Sie dürfen an geschützten Stellen nicht in der Nähe von Gleisen bauen." + +#~ msgid "" +#~ "You are not allowed to build near tracks without the track_builder " +#~ "privilege." +#~ msgstr "" +#~ "Sie dürfen ohne das „track_builder“-Privileg nicht in der Nähe von " +#~ "Gleisen bauen." + +#~ msgid "You are not allowed to build tracks at this protected position." +#~ msgstr "Sie dürfen an geschützten Stellen kein Gleis bauen." + +#~ msgid "" +#~ "You are not allowed to build tracks without the track_builder privilege." +#~ msgstr "Sie dürfen ohne das „track_builder“-Privileg kein Gleis bauen." + +#~ msgid "" +#~ "You are not allowed to configure this track without the @1 privilege." +#~ msgstr "Sie dürfen ohne das „@1“-Privileg dieses Gleis nicht konfigurieren." + +#~ msgid "You are not allowed to configure this track." +#~ msgstr "Sie dürfen dieses Gleis nicht konfigurieren." + +#~ msgid "" +#~ "You are not allowed to couple trains without the train_operator privilege." +#~ msgstr "Sie dürfen ohne das „train_operator“-Privileg keine Züge ankuppeln." + +#, fuzzy +#~ msgid "You are not allowed to modify this protected track." +#~ msgstr "Sie dürfen an geschützten Stellen kein Gleis bauen." + +#~ msgid "" +#~ "You are not allowed to operate turnouts and signals without the " +#~ "railway_operator privilege." +#~ msgstr "" +#~ "Sie dürfen ohne das „railway_operator“-Privileg keine Bahnanlage " +#~ "operieren." + +#~ msgid "You can't get on this wagon." +#~ msgstr "Sie können nicht in diesen Waggon einsteigen." + +#~ msgid "You do not have the @1 privilege." +#~ msgstr "Ihnen fehlt das „@1“-Privileg." + +#, fuzzy +#~ msgid "You don't have the train_operator privilege." +#~ msgstr "Ihnen fehlt das „@1“-Privileg." + +#~ msgid "" +#~ "You need to own at least one neighboring wagon to destroy this couple." +#~ msgstr "" +#~ "Sie müssen Besitzer eines angrenzenden Waggons sein, um hier abzukuppeln." diff --git a/advtrains_luaautomation/po/fr.po b/advtrains_luaautomation/po/fr.po new file mode 100644 index 0000000..e83f85f --- /dev/null +++ b/advtrains_luaautomation/po/fr.po @@ -0,0 +1,986 @@ +msgid "" +msgstr "" +"Project-Id-Version: advtrains\n" +"Report-Msgid-Bugs-To: advtrains-discuss@lists.sr.ht\n" +"POT-Creation-Date: 2025-06-11 23:03+0200\n" +"PO-Revision-Date: 2025-03-25 15:06+0100\n" +"Last-Translator: Tanavit <tanavit@posto.ovh>\n" +"Language-Team: French\n" +"Language: fr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 2.4.2\n" + +#: active_common.lua +msgid "Clear Local Environment" +msgstr "Effacer l'environnement LuaATC" + +#: active_common.lua +msgid "Code" +msgstr "Code" + +#: active_common.lua +msgid "LuaATC Environment" +msgstr "Environnement LuaATC" + +#: active_common.lua +msgid "LuaATC component assigned to an invalid environment" +msgstr "Composant LuaATC assigné à un environnement invalide" + +#: active_common.lua +msgid "LuaATC component assigned to environment '@1'" +msgstr "Composant LuaATC assigné à l'environnement '@1'" + +#: active_common.lua +msgid "LuaATC component with error: @1" +msgstr "Erreur @1 du composant LuaATC" + +#: active_common.lua chatcmds.lua +msgid "Save" +msgstr "Sauvegarder" + +#: active_common.lua +msgid "Unconfigured LuaATC component" +msgstr "Composant LuaATC non configuré" + +#: active_common.lua +msgid "" +"You are not allowed to configure this LuaATC component without the @1 " +"privilege." +msgstr "Vous ne pouvez configurer ce composant LuaATC sans le privilege @1." + +#: atc_rail.lua +#, fuzzy +msgid "LuaATC Track" +msgstr "Voie de Chargement" + +#: chatcmds.lua +msgid "Already subscribed!" +msgstr "" + +#: chatcmds.lua +msgid "Clear S" +msgstr "" + +#: chatcmds.lua +msgid "Create an AdvTrains LuaAutomation environment" +msgstr "" + +#: chatcmds.lua +msgid "" +"Created environment '@1'. Use '/env_setup @2' to define global " +"initialization code, or start building LuaATC components!" +msgstr "" + +#: chatcmds.lua +msgid "Delete Env." +msgstr "" + +#: chatcmds.lua +msgid "Environment already exists!" +msgstr "" + +#: chatcmds.lua +msgid "Environment deleted!" +msgstr "" + +#: chatcmds.lua +msgid "Environment initialization code" +msgstr "" + +#: chatcmds.lua +msgid "Invalid environment name!" +msgstr "" + +#: chatcmds.lua +msgid "Invalid name (only common characters)" +msgstr "" + +#: chatcmds.lua +msgid "" +"List Advtrains LuaATC environments you are subscribed to (no parameters) or " +"subscribers of an environment (giving an env name)." +msgstr "" + +#: chatcmds.lua +msgid "Name required!" +msgstr "" + +#: chatcmds.lua +msgid "No subscribers!" +msgstr "" + +#: chatcmds.lua +msgid "Not subscribed to any!" +msgstr "" + +#: chatcmds.lua +msgid "Not subscribed!" +msgstr "" + +#: chatcmds.lua +msgid "Run Init Code" +msgstr "" + +#: chatcmds.lua +msgid "" +"SURE TO DELETE ENVIRONMENT @1? Type YES (all uppercase) to continue or just " +"quit form to cancel." +msgstr "" + +#: chatcmds.lua +msgid "Set up and modify AdvTrains LuaAutomation environment" +msgstr "" + +#: chatcmds.lua +msgid "Subscribe to the log of an Advtrains LuaATC environment" +msgstr "" + +#: chatcmds.lua +#, fuzzy +msgid "Subscribed to environment '@1'." +msgstr "Composant LuaATC assigné à l'environnement '@1'" + +#: chatcmds.lua +msgid "Successfully unsubscribed!" +msgstr "" + +#: chatcmds.lua +msgid "Unubscribe to the log of an Advtrains LuaATC environment" +msgstr "" + +#: init.lua +msgid "" +"Can place and configure LuaATC components, including execute potentially " +"harmful Lua code" +msgstr "" +"Permet le placement et la configuration de composants LuaATC avec risque " +"d'exécution de code Lua dangereux" + +#: mesecon_controller.lua +msgid "LuaATC Mesecon Controller" +msgstr "Commande Mesecon de LuaATC" + +#: operation_panel.lua +msgid "LuaATC Operation Panel" +msgstr "Panneau de commande de LuaATC" + +#: pcnaming.lua +msgid "" +"Passive Component Naming Tool\n" +"\n" +"Right-click to name a passive component." +msgstr "" +"Outil de nommage de composant passif\n" +"\n" +"Clic-Droit pour nommer un composant passif." + +#: pcnaming.lua +msgid "Set name of component (empty to clear)" +msgstr "Nommer le composant (chaîne vide pour effacer)" + +#: pcnaming.lua +msgid "" +"You are not allowed to name LuaATC passive components without the @1 " +"privilege." +msgstr "Vous ne pouvez nommer un composant LuaATC passif sans le privilege @1." + +#~ msgid " does not exist or is invalid" +#~ msgstr " n'existe pas ou est invalide" + +#~ msgid " is at " +#~ msgstr " est à la position " + +#~ msgid " units" +#~ msgstr " Unités" + +#~ msgid " wagon:destroy(): data is not set!" +#~ msgstr " Appel de wagon:destroy() : données non définies !" + +#~ msgid "!!! Train off track !!!" +#~ msgstr "!!! Train hors voie !!!" + +#~ msgid "(Doors closed)" +#~ msgstr "(Portes closes)" + +#~ msgid "(log" +#~ msgstr "(log" + +#~ msgid ", using placeholder" +#~ msgstr ", dans un espace réservé" + +#~ msgid "3-way turnout" +#~ msgstr "Embranchement triple" + +#~ msgid "90+Angle Diamond Crossing Track" +#~ msgstr "Croisement perpendiculo-diagonal" + +#~ msgid "<No coupler>" +#~ msgstr "<Pas de coupleur>" + +#~ msgid "@1 Platform (45 degree)" +#~ msgstr "Quai @1 (haut, 45°)" + +#~ msgid "@1 Platform (high)" +#~ msgstr "Quai @1 (haut)" + +#~ msgid "@1 Platform (low)" +#~ msgstr "Quai @1 (bas)" + +#~ msgid "@1 Platform (low, 45 degree)" +#~ msgstr "Quai @1 (bas, 45°)" + +#~ msgid "@1 Slope" +#~ msgstr "Pente @1" + +#~ msgid "ATC Kick command warning: doors are closed." +#~ msgstr "Avertissement commande ATC Éjecter : portes closes." + +#~ msgid "ATC Kick command warning: train moving." +#~ msgstr "Avertissement commande ATC Éjecter : train en mouvement." + +#~ msgid "ATC Reverse command warning: didn't reverse train, train moving." +#~ msgstr "" +#~ "Attention : Commande ATC de renversement impossible car le train se " +#~ "déplace." + +#~ msgid "ATC command parse error: Unknown command: @1" +#~ msgstr "Erreur d'analyse de commande ATC : Commande inconnue : @1" + +#~ msgid "ATC command syntax error: I statement not closed: @1" +#~ msgstr "" +#~ "Erreur de syntaxe de commande ATC : instruction \"I\" incomplète : @1" + +#~ msgid "ATC controller" +#~ msgstr "Controlleur ATC" + +#~ msgid "" +#~ "ATC controller, mode @1\n" +#~ "Channel: @2" +#~ msgstr "" +#~ "Controlleur ATC, mode @1\n" +#~ "Canal : @2" + +#~ msgid "" +#~ "ATC controller, mode @1\n" +#~ "Command: @2" +#~ msgstr "" +#~ "Controlleur ATC, mode @1\n" +#~ "Commande : @2" + +#~ msgid "Access to @1" +#~ msgstr "Accès à @1" + +#~ msgid "Advtrains Status: no_action" +#~ msgstr "État d'advtrains : aucune action" + +#~ msgid "Advtrains is already running normally!" +#~ msgstr "Advtrains fonctionne déjà correctement !" + +#~ msgid "Allow these players to access your wagon:" +#~ msgstr "Autoriser ces joueurs à embarquer :" + +#~ msgid "Andrew's Cross" +#~ msgstr "Croix de Saint André" + +#~ msgid "Back of train would end up off track, cancelling." +#~ msgstr "La fin du train serait hors voie : annulation." + +#~ msgid "Big Industrial Train Engine" +#~ msgstr "Grosse locomotive industrielle" + +#~ msgid "Boiler" +#~ msgstr "Chaudière à vapeur" + +#~ msgid "Box Wagon" +#~ msgstr "Wagon de frêt" + +#~ msgid "Buffer and Chain Coupler" +#~ msgstr "Attelage à tampon et vis" + +#~ msgid "Bumper" +#~ msgstr "Heurtoir" + +#~ msgid "Can not couple: The couplers of the trains do not match (@1 and @2)." +#~ msgstr "" +#~ "Accouplement impossible: les attelages des trains ne concordent pas (@1 " +#~ "et @2)." + +#~ msgid "Can operate turnouts and signals in unprotected areas" +#~ msgstr "" +#~ "Possibilité d'opérer des embranchements et signaux dans les zones non " +#~ "protégées" + +#~ msgid "Can place and dig tracks in unprotected areas" +#~ msgstr "" +#~ "Possibilité de poser ou retirer des voies dans les zones non protégées" + +#~ msgid "" +#~ "Can place, remove and operate any train, regardless of owner, whitelist, " +#~ "or protection" +#~ msgstr "" +#~ "Possibilité de poser, retirer ou opérer un quelconque train, " +#~ "indépendamment du propriétaire, de la liste blanche ou de protection" + +#~ msgid "Can place, remove and operate trains" +#~ msgstr "Possibilité de poser, retirer ou opérer les trains" + +#~ msgid "Can't get on: wagon full or doors closed!" +#~ msgstr "" +#~ "Embarquement impossible : le wagon est plein ou ses portes sont closes !" + +#~ msgid "Can't place: Not enough slope items left (@1 required)" +#~ msgstr "" +#~ "Placement impossible : quantité insuffisante de voie pentue (@1 manquant)" + +#~ msgid "Can't place: There's no slope of length @1" +#~ msgstr "Placement impossible : il n'y a pas de voie pentue de longueur @1" + +#~ msgid "Can't place: no supporting node at upper end." +#~ msgstr "" +#~ "Placement impossible : pas de nœud d'appui à l'extrémité supérieure." + +#~ msgid "Can't place: not pointing at node" +#~ msgstr "Placement impossible : ne pointe pas un nœud" + +#~ msgid "Can't place: protected position!" +#~ msgstr "Placement impossible : emplacement protégé" + +#~ msgid "Can't place: space occupied!" +#~ msgstr "Placement impossible : espace occupé !" + +#~ msgid "Caution" +#~ msgstr "Attention" + +#~ msgid "Chimney" +#~ msgstr "Cheminée" + +#~ msgid "Clear 'Disable ARS' flag" +#~ msgstr "Effacer le drapeau \"Désactiver l'ARS\"" + +#~ msgid "Clear (proceed)" +#~ msgstr "Autorisation (procédez)" + +#~ msgid "Closed" +#~ msgstr "Fermé" + +#~ msgid "Command" +#~ msgstr "Commande" + +#~ msgid "Command (on)" +#~ msgstr "Commande (marche)" + +#~ msgid "" +#~ "Crash during advtrains main step - skipping the shutdown save operation " +#~ "to not save inconsistent data!" +#~ msgstr "" +#~ "Crash durant le pas principal d'advtrains - saut de l'opération de " +#~ "sauvegarde de terminaison pour éviter l'enregistrement de données " +#~ "corrompues !" + +#~ msgid "Current FC: " +#~ msgstr "Code de fret courant: " + +#~ msgid "Danger (halt)" +#~ msgstr "Danger (stop)" + +#~ msgid "" +#~ "Data is being saved. While saving, advtrains will remove the players from " +#~ "trains. Save files will be reloaded afterwards!" +#~ msgstr "" +#~ "Données en cours de sauvegarde. Durant cette phase, advtrains débarquera " +#~ "les joueurs des trains. Les fichiers de sauvegarde seront ultérieurement " +#~ "rechargés !" + +#~ msgid "Default Seat" +#~ msgstr "Siège par défaut" + +#~ msgid "Default Seat (driver stand)" +#~ msgstr "Siège par défaut (poste de pilotage)" + +# Routage est il le bon terme ? +#~ msgid "Delete all train routes, force them to recalculate" +#~ msgstr "Suppression et recalcul de tous les routages" + +#~ msgid "Dep. Speed" +#~ msgstr "Vit. de départ" + +#~ msgid "Deprecated Track" +#~ msgstr "Voie déconseillée" + +#~ msgid "" +#~ "Destroying wagon with inventory, but inventory is not found? Shouldn't " +#~ "happen!" +#~ msgstr "Desctruction d'un wagon avec inventaire introuvable ? Anomalie !" + +#~ msgid "" +#~ "Detach all players, especially the offline ones, from all trains. Use " +#~ "only when no one serious is on a train." +#~ msgstr "" +#~ "Débarque tous les joueurs, en particulier ceux déconnectés, de tous les " +#~ "trains. À n'utiliser que quand aucun joueur sérieux n'a embarqué." + +#~ msgid "Detailed Steam Engine" +#~ msgstr "Locomotive à vapeur complexe" + +#~ msgid "Detector Rail" +#~ msgstr "Voie détectrice" + +#~ msgid "Diagonal Diamond Crossing Track" +#~ msgstr "Croisement diagonal" + +#~ msgid "Digiline channel" +#~ msgstr "Canal Digiline" + +#~ msgid "Disable the advtrains globalstep temporarily" +#~ msgstr "Désactive temporairement le pas global d'advtrains" + +#~ msgid "Disabled advtrains successfully" +#~ msgstr "Succès de la désactivation d'advtrains" + +#~ msgid "Door Delay" +#~ msgstr "Durée d'ouverture des portes" + +#~ msgid "Door Side" +#~ msgstr "Ouv. des portes coté" + +#~ msgid "Doors are closed! (Try holding sneak key!)" +#~ msgstr "Portes closes : (Essayez la \"sneak key\"!\")" + +#~ msgid "" +#~ "Doors are closed. Use Sneak+rightclick to ignore the closed doors and get " +#~ "off." +#~ msgstr "" +#~ "Portes closes ! Utilisez \"Marcher lentement (Sneak)\" et Clic-Droit pour " +#~ "franchir les portes et débarquer." + +#~ msgid "Driver Stand" +#~ msgstr "Poste de pilotage" + +#~ msgid "Driver Stand (left)" +#~ msgstr "Poste de pilotage (gauche)" + +#~ msgid "Driver Stand (right)" +#~ msgstr "Poste de pilotage (droit)" + +#~ msgid "Driver stand" +#~ msgstr "Poste de pilotage" + +#~ msgid "Driver's cab" +#~ msgstr "Cabine de pilotage" + +#~ msgid "Freight Code:" +#~ msgstr "Code de frêt :" + +#~ msgid "Get off" +#~ msgstr "Débarquer" + +#~ msgid "Get off (forced)" +#~ msgstr "Débarquer (de force)" + +#~ msgid "Industrial Train Engine" +#~ msgstr "Locomotive industrielle" + +#~ msgid "Industrial tank wagon" +#~ msgstr "Wagon-citerne industriel" + +#~ msgid "Industrial wood wagon" +#~ msgstr "Wagon grumier industriel" + +#~ msgid "Instructed to save() but load() was never called!" +#~ msgstr "Appel de save() requis sans appel préalable de load() !" + +#~ msgid "Insufficient privileges to use this!" +#~ msgstr "Privilèges insuffisants pour utiliser ceci !" + +#~ msgid "Japanese Train Engine" +#~ msgstr "Motrice Japonaise" + +#~ msgid "Japanese Train Inter-Wagon Connection" +#~ msgstr "Passage inter-voiture de train Japonais" + +#~ msgid "Japanese Train Wagon" +#~ msgstr "Voiture Japonaise" + +#~ msgid "Japanese signal pole" +#~ msgstr "Voiture Japonaise" + +#~ msgid "Kick out passengers" +#~ msgstr "Éjecter les passagers" + +#~ msgid "Lampless Signal" +#~ msgstr "Sémaphore" + +#~ msgid "Left" +#~ msgstr "Gauche" + +#~ msgid "Left,Right,Closed;" +#~ msgstr "Gauche,Droit,Fermé;" + +#~ msgid "Line" +#~ msgstr "Ligne" + +#~ msgid "Liquid: " +#~ msgstr "Liquide : " + +#~ msgid "Liquid: empty" +#~ msgstr "Liquide : vide" + +#~ msgid "Lock couples" +#~ msgstr "Verrouiller l'accouplement" + +#~ msgid "Missing train_operator privilege" +#~ msgstr "Privilège \"train_operator\" manquant" + +#~ msgid "Munich U-Bahn Distant Signal (" +#~ msgstr "Signal distant métro de Munich (" + +#~ msgid "Munich U-Bahn Main Signal (" +#~ msgstr "Signal principal métro de Munich (" + +#~ msgid "Next FC:" +#~ msgstr "Code de fret suivant :" + +#~ msgid "Next Stop:\n" +#~ msgstr "Prochain arrêt :\n" + +#~ msgid "No callback to handle schedule" +#~ msgstr "Absence de fonction de gestion de planning" + +#~ msgid "No such lua entity." +#~ msgstr "Pas de telle entité lua." + +#~ msgid "No such train: @1." +#~ msgstr "Pas de tel train : @1." + +#~ msgid "No such wagon: @1." +#~ msgstr "Pas de tel wagon : @1." + +#~ msgid "Not a valid wagon id." +#~ msgstr "Identificateur de wagon invalide." + +#~ msgid "Not allowed to do this." +#~ msgstr "Vous n'êtes pas autorisé effectuer ceci." + +#~ msgid "" +#~ "OVERRUN RED SIGNAL! Examine situation and reverse train to move again." +#~ msgstr "" +#~ "Franchissement de signal rouge : examinez la situation et inversez le " +#~ "sens de marche du train." + +#~ msgid "Onboard Computer" +#~ msgstr "Ordinateur embarqué" + +#~ msgid "Passenger Wagon" +#~ msgstr "Voiture passager" + +#~ msgid "Passenger area" +#~ msgstr "Voiture Passager" + +#~ msgid "Perpendicular Diamond Crossing Track" +#~ msgstr "Croisement perpendiculaire" + +#~ msgid "Please specify a player name to transfer ownership to." +#~ msgstr "" +#~ "Spécifiez le nom du joueur à qui la propriété doit être transférée, SVP." + +#~ msgid "Point Speed Restriction Track" +#~ msgstr "Voie de point de limitation de vitesse" + +#~ msgid "Point speed restriction: @1" +#~ msgstr "Point de limitation de vitesse : @1" + +#~ msgid "Position is occupied by a train." +#~ msgstr "Cet emplacement est occupé par un train." + +#~ msgid "Prev FC" +#~ msgstr "Code de fret précédent" + +#~ msgid "Print advtrains status info" +#~ msgstr "Affiche les informations d'état d'advtrains" + +#~ msgid "Re-enabling advtrains globalstep..." +#~ msgstr "Réacivation du pas global d'advtrains..." + +#~ msgid "Reduced speed" +#~ msgstr "Vitesse réduite" + +#~ msgid "Reload successful!" +#~ msgstr "Succès du rechargement !" + +#~ msgid "Remote Routesetting" +#~ msgstr "Routage à distance" + +#~ msgid "Removing unused wagon" +#~ msgstr "Suppression d'un wagon inutilisé" + +#~ msgid "Restoring saved state in 1 second..." +#~ msgstr "Restauration du l'état sauvegardé dans une seconde..." + +#~ msgid "Restricted speed" +#~ msgstr "Vitesse limitée" + +#~ msgid "Returns the position of the train with the given id" +#~ msgstr "Affiche la position du train identifié" + +#~ msgid "Reverse train" +#~ msgstr "Inversion du sens de marche" + +#~ msgid "Right" +#~ msgstr "Droit" + +#~ msgid "Route state changed." +#~ msgstr "Changement d'état de l'itinéraire." + +#~ msgid "Routingcode" +#~ msgstr "Code de routage" + +#~ msgid "Save wagon properties" +#~ msgstr "Sauvegarder les propriétés du wagon" + +#~ msgid "Saving failed: " +#~ msgstr "Échec de sauvegarde : " + +#~ msgid "Scharfenberg Coupler" +#~ msgstr "Attelage Scharfenberg" + +#~ msgid "Select seat:" +#~ msgstr "Choisir le siège :" + +#~ msgid "Set point speed restriction:" +#~ msgstr "Placez un point de limitation de vitesse :" + +#~ msgid "Show Inventory" +#~ msgstr "Montrer le stock" + +#~ msgid "Signal" +#~ msgstr "Signal" + +#~ msgid "Speed:" +#~ msgstr "Vitesse : " + +#~ msgid "Station Code" +#~ msgstr "Code de Station" + +#~ msgid "Station Name" +#~ msgstr "Nom de Station" + +#~ msgid "Station code \"@1\" already exists and is owned by @2." +#~ msgstr "Le code de station \"@1\" existe et est possédé par @2." + +#~ msgid "Station/Stop Track" +#~ msgstr "Voie d'arrêt en station" + +#~ msgid "Steam Engine" +#~ msgstr "Locomotive à vapeur" + +#~ msgid "Stop Time" +#~ msgstr "Durée d'arrêt" + +#~ msgid "Subway Passenger Wagon" +#~ msgstr "Voiture de Métropolitain" + +# Routage est il le bon terme ? +#~ msgid "Successfully invalidated train routes" +#~ msgstr "Succès d'invalidation des routages des trains" + +#~ msgid "Target:" +#~ msgstr "Destination : " + +#~ msgid "Teleporting to train " +#~ msgstr "Téléportation au train " + +#~ msgid "Teleports you to the position of the train with the given id" +#~ msgstr "Vous téléporte à la position du train identifié" + +#~ msgid "Text displayed inside train" +#~ msgstr "Texte affiché à l'intérieur du train" + +#~ msgid "Text displayed outside on train" +#~ msgstr "Texte affiché à l'extérieur du train" + +#~ msgid "That player does not exist!" +#~ msgstr "Ce joueur n'existe pas !" + +#~ msgid "That wagon does not exist!" +#~ msgstr "Ce wagon n'a pas de siège !" + +#~ msgid "" +#~ "The advtrains globalstep has been disabled. Trains are not moving, and no " +#~ "data is saved! Run '/at_disable_step no' to enable again!" +#~ msgstr "" +#~ "Le pas global d'advtrains est désactivé. Les trains sont immobiles et " +#~ "aucune donnée n'est sauvegardée. Exécutez '/at_disable_step no ' pour le " +#~ "réactiver !" + +#~ msgid "The clipboard couldn't access the metadata. Copy failed." +#~ msgstr "" +#~ "Le presse-papier ne peut accéder aux métadonnées. Échec de la copie." + +#~ msgid "The clipboard couldn't access the metadata. Paste failed." +#~ msgstr "Le presse-papier ne peut accéder aux métadonnées. Échec du collage." + +#~ msgid "The clipboard is empty." +#~ msgstr "Le presse-papier est vide." + +#~ msgid "The track you are trying to place the wagon on is not long enough!" +#~ msgstr "" +#~ "La voie sur laquelle vous tentez de placer le wagon est trop courte !" + +#~ msgid "The track you are trying to place the wagon on is not long enough." +#~ msgstr "" +#~ "La voie sur laquelle vous tentez de placer le wagon est trop courte." + +#~ msgid "The wagon's inventory is not empty." +#~ msgstr "Le stock de ce wagon n'est pas vide." + +#~ msgid "There's a Signal Influence Point here." +#~ msgstr "Il y a un \"Signal Influence Point\" ici." + +#~ msgid "There's a Track Circuit Break here." +#~ msgstr "Il y a un \"Track Circuit Break\" ici." + +#~ msgid "This Wagon ID" +#~ msgstr "Identificateur du wagon" + +#~ msgid "This node can't be changed using the trackworker!" +#~ msgstr "Ce nœud ne peut être modifié avec l'outil \"Trackworker\" !" + +#~ msgid "This node can't be rotated using the trackworker!" +#~ msgstr "Ce nœud ne peut être tourné avec l'outil \"Trackworker\" !" + +#, fuzzy +#~ msgid "This node can't be rotated using the trackworker," +#~ msgstr "Ce nœud ne peut être tourné avec l'outil \"Trackworker\" !" + +#~ msgid "This position is protected!" +#~ msgstr "Cet emplacement est protégé !" + +#~ msgid "This station is owned by @1. You are not allowed to edit its name." +#~ msgstr "" +#~ "Cette station est la propriété de @1. Vous n'êtes pas autorisé à modifier " +#~ "son nom." + +#~ msgid "This track can not be changed." +#~ msgstr "Cette voie ne peut pas être modifiée." + +#~ msgid "This track can not be removed!" +#~ msgstr "Cette voie ne peut pas être enlevée !" + +#~ msgid "This track can not be rotated!" +#~ msgstr "Cette voie ne peut pas être tournée !" + +#~ msgid "This wagon has no seats." +#~ msgstr "Ce wagon n'a pas de siège." + +#~ msgid "This wagon is full." +#~ msgstr "Ce wagon est plein." + +#~ msgid "This wagon is owned by @1, you can't destroy it." +#~ msgstr "Ce wagon est la propriété de @1, vous ne pouvez pas le détruire." + +#~ msgid "Track" +#~ msgstr "Voie" + +#~ msgid "" +#~ "Track Worker Tool\n" +#~ "\n" +#~ "Left-click: change rail type (straight/curve/switch)\n" +#~ "Right-click: rotate object" +#~ msgstr "" +#~ "Outil \"Trackworker\"\n" +#~ "\n" +#~ "Clic-Gauche : change le type de rail (droit/courbé/aiguillage)\n" +#~ "\n" +#~ "Clic-Droit : tourne l'objet" + +#~ msgid "Train" +#~ msgstr "Identificateur du train" + +#~ msgid "Train " +#~ msgstr "Identificateur du train " + +#~ msgid "Train ID" +#~ msgstr "Identificateur du train" + +#~ msgid "Train copied." +#~ msgstr "Train copié." + +#~ msgid "" +#~ "Train copy/paste tool\n" +#~ "\n" +#~ "Left-click: copy train\n" +#~ "Right-click: paste train" +#~ msgstr "" +#~ "Outil de copie/collage de train\n" +#~ "\n" +#~ "Clic-Gauche : copie\n" +#~ "\n" +#~ "Clic-Droit : collage" + +#~ msgid "" +#~ "Train overview / coupling control is only shown when the train stands." +#~ msgstr "" +#~ "Aperçu du train / commande d'accouplement montré uniquement à l'arrêt du " +#~ "train." + +#~ msgid "Train overview /coupling control:" +#~ msgstr "Aperçu du train / commande d'accouplement :" + +#~ msgid "Trains stopping here (ARS rules)" +#~ msgstr "Trains marquant l'arrêt (règles ARS)" + +#~ msgid "Unable to load wagon type" +#~ msgstr "Impossible de charger le type du wagon" + +#~ msgid "Unconfigured ATC controller" +#~ msgstr "Controlleur ATC, non-configuré" + +#~ msgid "Uninitialized init=" +#~ msgstr "Variable init non initialisée" + +#~ msgid "Uninitialized, removing" +#~ msgstr "Non initialisé, retiré" + +#~ msgid "Unknown Station" +#~ msgstr "Gare inconnue" + +#~ msgid "Unloading Track" +#~ msgstr "Voie de Déchargement" + +#~ msgid "Use Sneak+rightclick to bypass closed doors!" +#~ msgstr "" +#~ "Utilisez \"Marcher lentement (Sneak)\" et Clic-Droit pour franchir les " +#~ "portes closes !" + +#~ msgid "Wagon @1 ownership changed from @2 to @3" +#~ msgstr "La propriété du wagon @1 a été transférée de @2 à @3" + +#~ msgid "Wagon Properties Tool" +#~ msgstr "Outil de propriété du wagon" + +#~ msgid "" +#~ "Wagon Properties Tool\n" +#~ "Punch a wagon to view and edit the Wagon Properties" +#~ msgstr "" +#~ "Outil de propriété du wagon\n" +#~ "Frappez un wagon pour voir et modifier ses propriétés" + +#~ msgid "" +#~ "Wagon needs to be decoupled from other wagons in order to destroy it." +#~ msgstr "" +#~ "Les wagons doivent être désaccouplés des autres pour pouvoir être " +#~ "détruits." + +#~ msgid "Wagon properties" +#~ msgstr "Propriétés du wagon" + +#~ msgid "Wagon road number:" +#~ msgstr "Immatriculation du wagon :" + +#~ msgid "Wait for signal to clear" +#~ msgstr "En attente de signal d'autorisation" + +#~ msgid "Wallmounted Signal (left)" +#~ msgstr "Signal mural (gauche)" + +#~ msgid "Wallmounted Signal (right)" +#~ msgstr "Signal mural (droit)" + +#~ msgid "Wallmounted Signal (top)" +#~ msgstr "Signal mural (plafond)" + +#~ msgid "" +#~ "Warning: If you destroy this wagon, you only get some steel back! If you " +#~ "are sure, hold Sneak and left-click the wagon." +#~ msgstr "" +#~ "Attention: Si vous détruisez ce wagon, vous ne récupérerez que de la " +#~ "ferraille ! Si vous êtes sûr de vous, appuyez la touche \"Marcher " +#~ "lentement (Sneak)\" et Clic-Gauche." + +#~ msgid "Wheel" +#~ msgstr "Roue" + +#~ msgid "Y-turnout" +#~ msgstr "Embranchement en Y" + +#~ msgid "You are not allowed to access the driver stand." +#~ msgstr "Accès interdit au poste de pilotage." + +#~ msgid "You are not allowed to build near tracks at this protected position." +#~ msgstr "" +#~ "Vous ne pouvez pas construire à proximité d'une voie à cet emplacement " +#~ "protégé." + +#~ msgid "" +#~ "You are not allowed to build near tracks without the track_builder " +#~ "privilege." +#~ msgstr "" +#~ "Vous ne pouvez pas construire à proximité d'une voie sans le privilège " +#~ "\"track_builder\" (?)" + +#~ msgid "You are not allowed to build tracks at this protected position." +#~ msgstr "Vous ne pouvez pas construire une voie à cet emplacement protégé." + +#~ msgid "" +#~ "You are not allowed to build tracks without the track_builder privilege." +#~ msgstr "" +#~ "Vous ne pouvez pas construire une voie sans le privilège " +#~ "\"track_builder\"." + +#~ msgid "" +#~ "You are not allowed to configure this track without the @1 privilege." +#~ msgstr "" +#~ "Vous n'êtes pas autorisé à configurer cette voie sans le privilège @1." + +#~ msgid "You are not allowed to configure this track." +#~ msgstr "Vous n'êtes pas autorisé à configurer cette voie." + +#~ msgid "" +#~ "You are not allowed to couple trains without the train_operator privilege." +#~ msgstr "" +#~ "Vous n'êtes pas autorisé à coupler des trains sans le privilège " +#~ "\"train_operator\"." + +#, fuzzy +#~ msgid "You are not allowed to modify this protected track." +#~ msgstr "Vous ne pouvez pas construire une voie à cet emplacement protégé" + +#~ msgid "" +#~ "You are not allowed to operate turnouts and signals without the " +#~ "railway_operator privilege." +#~ msgstr "" +#~ "Vous ne pouvez pas actionner les aiguillages ou les signaux (privilège " +#~ "\"railway_operator\" manquant)" + +#~ msgid "You can't get on this wagon." +#~ msgstr "Montée impossible dans ce wagon." + +#~ msgid "You do not have the @1 privilege." +#~ msgstr "Vous ne possédez pas le privilège \"@1\"." + +#~ msgid "You don't have the train_operator privilege." +#~ msgstr "Vous ne possédez pas le privilège \"train_operator\"." + +#~ msgid "You have been given ownership of wagon @1" +#~ msgstr "La propriété du wagon @1 vous a été transférée" + +#~ msgid "" +#~ "You need to own at least one neighboring wagon to destroy this couple." +#~ msgstr "" +#~ "Vous devez être propriétaire d'au moins un wagon voisin pour supprimer " +#~ "cet attelage." + +#~ msgid "from wagon_save table." +#~ msgstr "de la table wagon_save." + +#~ msgid "" +#~ "had no wagons left because of some bug. It is being deleted. Wave it " +#~ "goodbye!" +#~ msgstr "" +#~ "n'a plus de wagon à cause d'un bug quelconque. Il est détruit. Faites lui " +#~ "coucou !" + +#~ msgid "slowdown" +#~ msgstr "ralentissement" diff --git a/advtrains_luaautomation/po/update-translations.sh b/advtrains_luaautomation/po/update-translations.sh new file mode 100644 index 0000000..032e19e --- /dev/null +++ b/advtrains_luaautomation/po/update-translations.sh @@ -0,0 +1,28 @@ +#!/bin/sh + +MODNAME="advtrains_luaautomation" +MSGID_BUGS_ADDR='advtrains-discuss@lists.sr.ht' + +PODIR=`dirname "$0"` +ATDIR="$PODIR/.." +POTFILE="$PODIR/$MODNAME.pot" + +xgettext \ + -D "$ATDIR" \ + -d "$MODNAME" \ + -o "$POTFILE" \ + -p . \ + -L lua \ + --add-location=file \ + --from-code=UTF-8 \ + --sort-by-file \ + --keyword='S' \ + --package-name="$MODNAME" \ + --msgid-bugs-address="$MSGID_BUGS_ADDR" \ + `find $ATDIR $BTDIR -name '*.lua' -printf '%P\n'` \ + && +for i in "$PODIR"/*.po; do + msgmerge -U \ + --sort-by-file \ + $i "$POTFILE" +done diff --git a/advtrains_luaautomation/po/zh_CN.po b/advtrains_luaautomation/po/zh_CN.po new file mode 100644 index 0000000..e35e1c7 --- /dev/null +++ b/advtrains_luaautomation/po/zh_CN.po @@ -0,0 +1,644 @@ +msgid "" +msgstr "" +"Project-Id-Version: advtrains\n" +"Report-Msgid-Bugs-To: advtrains-discuss@lists.sr.ht\n" +"POT-Creation-Date: 2025-06-11 23:03+0200\n" +"PO-Revision-Date: 2023-10-09 11:24+0200\n" +"Last-Translator: Y. Wang <yw05@forksworld.de>\n" +"Language-Team: Chinese (Simplified)\n" +"Language: zh_CN\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 3.3.2\n" + +#: active_common.lua +msgid "Clear Local Environment" +msgstr "" + +#: active_common.lua +msgid "Code" +msgstr "" + +#: active_common.lua +msgid "LuaATC Environment" +msgstr "" + +#: active_common.lua +msgid "LuaATC component assigned to an invalid environment" +msgstr "" + +#: active_common.lua +msgid "LuaATC component assigned to environment '@1'" +msgstr "" + +#: active_common.lua +msgid "LuaATC component with error: @1" +msgstr "" + +#: active_common.lua chatcmds.lua +msgid "Save" +msgstr "保存" + +#: active_common.lua +msgid "Unconfigured LuaATC component" +msgstr "LuaATC 部件 (未配置)" + +#: active_common.lua +msgid "" +"You are not allowed to configure this LuaATC component without the @1 " +"privilege." +msgstr "您没有“@1”权限,不能配置这个 LuaATC 部件。" + +#: atc_rail.lua +#, fuzzy +msgid "LuaATC Track" +msgstr "装货轨道" + +#: chatcmds.lua +msgid "Already subscribed!" +msgstr "" + +#: chatcmds.lua +msgid "Clear S" +msgstr "" + +#: chatcmds.lua +msgid "Create an AdvTrains LuaAutomation environment" +msgstr "" + +#: chatcmds.lua +msgid "" +"Created environment '@1'. Use '/env_setup @2' to define global " +"initialization code, or start building LuaATC components!" +msgstr "" + +#: chatcmds.lua +msgid "Delete Env." +msgstr "" + +#: chatcmds.lua +msgid "Environment already exists!" +msgstr "" + +#: chatcmds.lua +msgid "Environment deleted!" +msgstr "" + +#: chatcmds.lua +msgid "Environment initialization code" +msgstr "" + +#: chatcmds.lua +msgid "Invalid environment name!" +msgstr "" + +#: chatcmds.lua +msgid "Invalid name (only common characters)" +msgstr "" + +#: chatcmds.lua +msgid "" +"List Advtrains LuaATC environments you are subscribed to (no parameters) or " +"subscribers of an environment (giving an env name)." +msgstr "" + +#: chatcmds.lua +msgid "Name required!" +msgstr "" + +#: chatcmds.lua +msgid "No subscribers!" +msgstr "" + +#: chatcmds.lua +msgid "Not subscribed to any!" +msgstr "" + +#: chatcmds.lua +msgid "Not subscribed!" +msgstr "" + +#: chatcmds.lua +msgid "Run Init Code" +msgstr "" + +#: chatcmds.lua +msgid "" +"SURE TO DELETE ENVIRONMENT @1? Type YES (all uppercase) to continue or just " +"quit form to cancel." +msgstr "" + +#: chatcmds.lua +msgid "Set up and modify AdvTrains LuaAutomation environment" +msgstr "" + +#: chatcmds.lua +msgid "Subscribe to the log of an Advtrains LuaATC environment" +msgstr "" + +#: chatcmds.lua +msgid "Subscribed to environment '@1'." +msgstr "" + +#: chatcmds.lua +msgid "Successfully unsubscribed!" +msgstr "" + +#: chatcmds.lua +msgid "Unubscribe to the log of an Advtrains LuaATC environment" +msgstr "" + +#: init.lua +msgid "" +"Can place and configure LuaATC components, including execute potentially " +"harmful Lua code" +msgstr "" + +#: mesecon_controller.lua +msgid "LuaATC Mesecon Controller" +msgstr "" + +#: operation_panel.lua +msgid "LuaATC Operation Panel" +msgstr "" + +#: pcnaming.lua +msgid "" +"Passive Component Naming Tool\n" +"\n" +"Right-click to name a passive component." +msgstr "" +"被动元件命名工具\n" +"\n" +"右键单击命名所选元件。" + +#: pcnaming.lua +msgid "Set name of component (empty to clear)" +msgstr "" + +#: pcnaming.lua +msgid "" +"You are not allowed to name LuaATC passive components without the @1 " +"privilege." +msgstr "您没有“@1”权限,不能命名被动元件。" + +#~ msgid "(Doors closed)" +#~ msgstr "(车门已关闭)" + +#~ msgid "3-way turnout" +#~ msgstr "三开道岔" + +#~ msgid "90+Angle Diamond Crossing Track" +#~ msgstr "交叉轨道 (其中一条轨道与坐标轴平行)" + +#~ msgid "<No coupler>" +#~ msgstr "<没有车钩>" + +#~ msgid "@1 Platform (45 degree)" +#~ msgstr "较高的@1站台 (45°)" + +#~ msgid "@1 Platform (high)" +#~ msgstr "较高的@1站台" + +#~ msgid "@1 Platform (low)" +#~ msgstr "较低的@1站台" + +#~ msgid "@1 Platform (low, 45 degree)" +#~ msgstr "较低的@1站台 (45°)" + +#~ msgid "@1 Slope" +#~ msgstr "@1斜坡" + +#~ msgid "ATC Kick command warning: doors are closed." +#~ msgstr "ATC 警告:车门已关闭,无法踢出乘客。" + +#~ msgid "ATC Kick command warning: train moving." +#~ msgstr "ATC 警告:火车正在移动,无法踢出乘客。" + +#~ msgid "ATC Reverse command warning: didn't reverse train, train moving." +#~ msgstr "ATC 警告:火车正在移动,无法改变行车方向。" + +#~ msgid "ATC command parse error: Unknown command: @1" +#~ msgstr "ATC 语法错误:未知命令:@1" + +#~ msgid "ATC command syntax error: I statement not closed: @1" +#~ msgstr "ATC 语法错误:“I”命令不完整:@1" + +#~ msgid "ATC controller" +#~ msgstr "ATC 控制器" + +#~ msgid "" +#~ "ATC controller, mode @1\n" +#~ "Channel: @2" +#~ msgstr "" +#~ "ATC 控制器\n" +#~ "模式:@1\n" +#~ "频道:@2" + +#~ msgid "" +#~ "ATC controller, mode @1\n" +#~ "Command: @2" +#~ msgstr "" +#~ "ATC 控制器\n" +#~ "模式:@1\n" +#~ "命令:@2" + +#~ msgid "Access to @1" +#~ msgstr "可前往@1" + +#~ msgid "Andrew's Cross" +#~ msgstr "铁路道口信号灯" + +#~ msgid "Back of train would end up off track, cancelling." +#~ msgstr "火车后部不在轨道上。" + +#~ msgid "Big Industrial Train Engine" +#~ msgstr "大型工业用火车头" + +#~ msgid "Boiler" +#~ msgstr "锅炉" + +#~ msgid "Box Wagon" +#~ msgstr "货运车厢" + +#~ msgid "Buffer and Chain Coupler" +#~ msgstr "链式车钩" + +#~ msgid "Bumper" +#~ msgstr "保险杠" + +#~ msgid "Can not couple: The couplers of the trains do not match (@1 and @2)." +#~ msgstr "您无法连接这两节车厢:这两节车厢使用不同的车钩 (@1和@2)。" + +#~ msgid "Can't get on: wagon full or doors closed!" +#~ msgstr "无法上车:车门已关闭或车厢已满。" + +#, fuzzy +#~ msgid "Can't place: Not enough slope items left (@1 required)" +#~ msgstr "无法放置斜坡:您没有足够的铁路斜坡放置工具 (您总共需要@1个)" + +#, fuzzy +#~ msgid "Can't place: There's no slope of length @1" +#~ msgstr "无法放置斜坡:advtrains 不支持长度为@1米的斜坡。" + +#, fuzzy +#~ msgid "Can't place: no supporting node at upper end." +#~ msgstr "无法放置斜坡:较高端没有支撑方块。" + +#, fuzzy +#~ msgid "Can't place: not pointing at node" +#~ msgstr "无法放置斜坡:您没有选择任何方块。" + +#~ msgid "Can't place: protected position!" +#~ msgstr "无法放置:此区域已被保护。" + +#, fuzzy +#~ msgid "Can't place: space occupied!" +#~ msgstr "无法放置斜坡:此区域已被占用。" + +#~ msgid "Chimney" +#~ msgstr "烟囱" + +#~ msgid "Command" +#~ msgstr "命令" + +#~ msgid "Command (on)" +#~ msgstr "命令 (激活时)" + +#~ msgid "Default Seat" +#~ msgstr "默认座位" + +#~ msgid "Default Seat (driver stand)" +#~ msgstr "默认座位 (司机座位)" + +#~ msgid "Dep. Speed" +#~ msgstr "出发速度" + +#~ msgid "Deprecated Track" +#~ msgstr "请不要使用" + +#~ msgid "Detailed Steam Engine" +#~ msgstr "精细的蒸汽机车" + +#~ msgid "Detector Rail" +#~ msgstr "探测轨道" + +#~ msgid "Diagonal Diamond Crossing Track" +#~ msgstr "交叉轨道" + +#~ msgid "Digiline channel" +#~ msgstr "Digiline 频道" + +#~ msgid "Door Delay" +#~ msgstr "车门关闭时间" + +#~ msgid "" +#~ "Doors are closed. Use Sneak+rightclick to ignore the closed doors and get " +#~ "off." +#~ msgstr "车门已关闭,请使用潜行+右键单击下车。" + +#, fuzzy +#~ msgid "Driver Stand" +#~ msgstr "司机座位" + +#~ msgid "Driver Stand (left)" +#~ msgstr "左侧司机座位" + +#~ msgid "Driver Stand (right)" +#~ msgstr "右侧司机座位" + +#~ msgid "Driver stand" +#~ msgstr "司机座位" + +#~ msgid "Driver's cab" +#~ msgstr "驾驶室" + +#~ msgid "Get off" +#~ msgstr "下车" + +#~ msgid "Get off (forced)" +#~ msgstr "强制下车" + +#~ msgid "Industrial Train Engine" +#~ msgstr "工业用火车头" + +#~ msgid "Industrial tank wagon" +#~ msgstr "液体运输车厢" + +#~ msgid "Industrial wood wagon" +#~ msgstr "木材运输车厢" + +#~ msgid "Japanese Train Engine" +#~ msgstr "高速列车车头" + +#~ msgid "Japanese Train Inter-Wagon Connection" +#~ msgstr "日本火车车钩" + +#~ msgid "Japanese Train Wagon" +#~ msgstr "高速列车车厢" + +#, fuzzy +#~ msgid "Japanese signal pole" +#~ msgstr "高速列车车厢" + +#~ msgid "Kick out passengers" +#~ msgstr "踢出乘客" + +#~ msgid "Lampless Signal" +#~ msgstr "臂板信号机" + +#~ msgid "Line" +#~ msgstr "火车线路" + +#~ msgid "Lock couples" +#~ msgstr "锁定连接处" + +#~ msgid "No such lua entity." +#~ msgstr "您没有指向一个可以用火车复制工具复制的物体。" + +#~ msgid "No such train: @1." +#~ msgstr "ID 为“@1”的列车不存在。" + +#~ msgid "No such wagon: @1." +#~ msgstr "ID 为“@1”的车厢不存在。" + +#, fuzzy +#~ msgid "Not allowed to do this." +#~ msgstr "您不能调整这段轨道。" + +#~ msgid "Passenger Wagon" +#~ msgstr "客车" + +#, fuzzy +#~ msgid "Passenger area" +#~ msgstr "客车" + +#~ msgid "Perpendicular Diamond Crossing Track" +#~ msgstr "垂直交叉轨道" + +#~ msgid "Reverse train" +#~ msgstr "改变行车方向" + +#~ msgid "Routingcode" +#~ msgstr "路由码" + +#~ msgid "Save wagon properties" +#~ msgstr "保存车厢属性" + +#~ msgid "Scharfenberg Coupler" +#~ msgstr "Scharfenberg 式车钩" + +#~ msgid "Select seat:" +#~ msgstr "请选择座位:" + +#~ msgid "Show Inventory" +#~ msgstr "显示物品栏" + +#~ msgid "Signal" +#~ msgstr "信号灯" + +#~ msgid "Speed:" +#~ msgstr "速度" + +#~ msgid "Station Code" +#~ msgstr "车站代码" + +#~ msgid "Station Name" +#~ msgstr "车站名称" + +#~ msgid "Station/Stop Track" +#~ msgstr "车站轨道" + +#~ msgid "Steam Engine" +#~ msgstr "蒸汽机车" + +#~ msgid "Stop Time" +#~ msgstr "停站时间" + +#~ msgid "Subway Passenger Wagon" +#~ msgstr "地铁车厢" + +#~ msgid "Target:" +#~ msgstr "目标速度" + +#~ msgid "Text displayed inside train" +#~ msgstr "车厢内部显示" + +#~ msgid "Text displayed outside on train" +#~ msgstr "车厢外部显示" + +#, fuzzy +#~ msgid "That wagon does not exist!" +#~ msgstr "这节车厢没有座位。" + +#~ msgid "The clipboard couldn't access the metadata. Copy failed." +#~ msgstr "无法复制:剪贴板无法访问元数据。" + +#~ msgid "The clipboard couldn't access the metadata. Paste failed." +#~ msgstr "无法粘贴:剪贴板无法访问元数据。" + +#~ msgid "The clipboard is empty." +#~ msgstr "剪贴板是空的。" + +#, fuzzy +#~ msgid "The track you are trying to place the wagon on is not long enough!" +#~ msgstr "轨道太短。" + +#~ msgid "The track you are trying to place the wagon on is not long enough." +#~ msgstr "轨道太短。" + +#, fuzzy +#~ msgid "This Wagon ID" +#~ msgstr "车厢已满。" + +#, fuzzy +#~ msgid "This node can't be changed using the trackworker!" +#~ msgstr "您不能使用铁路调整工具调整这个方块。" + +#, fuzzy +#~ msgid "This node can't be rotated using the trackworker!" +#~ msgstr "您不能使用铁路调整工具旋转这个方块。" + +#, fuzzy +#~ msgid "This node can't be rotated using the trackworker," +#~ msgstr "您不能使用铁路调整工具旋转这个方块。" + +#~ msgid "This position is protected!" +#~ msgstr "这里已被保护。" + +#~ msgid "This track can not be changed." +#~ msgstr "您不能调整这段轨道。" + +#, fuzzy +#~ msgid "This track can not be removed!" +#~ msgstr "您不能移除这段轨道。" + +#, fuzzy +#~ msgid "This track can not be rotated!" +#~ msgstr "您不能旋转这段轨道。" + +#~ msgid "This wagon has no seats." +#~ msgstr "这节车厢没有座位。" + +#~ msgid "This wagon is full." +#~ msgstr "车厢已满。" + +#~ msgid "This wagon is owned by @1, you can't destroy it." +#~ msgstr "这是 @1 的车厢,您不能摧毁它。" + +#~ msgid "Track" +#~ msgstr "轨道" + +#~ msgid "" +#~ "Track Worker Tool\n" +#~ "\n" +#~ "Left-click: change rail type (straight/curve/switch)\n" +#~ "Right-click: rotate object" +#~ msgstr "" +#~ "铁路调整工具\n" +#~ "\n" +#~ "左键单击:切换轨道类型\n" +#~ "右键单击:旋转方块" + +#, fuzzy +#~ msgid "Train " +#~ msgstr "已复制列车。" + +#~ msgid "Train copied." +#~ msgstr "已复制列车。" + +#~ msgid "" +#~ "Train copy/paste tool\n" +#~ "\n" +#~ "Left-click: copy train\n" +#~ "Right-click: paste train" +#~ msgstr "" +#~ "火车复制工具\n" +#~ "\n" +#~ "左键单击:复制\n" +#~ "右键单击:粘帖" + +#~ msgid "Unconfigured ATC controller" +#~ msgstr "ATC 控制器 (未配置)" + +#~ msgid "Unloading Track" +#~ msgstr "卸货轨道" + +#~ msgid "Use Sneak+rightclick to bypass closed doors!" +#~ msgstr "请使用潜行+右键上车。" + +#, fuzzy +#~ msgid "Wagon Properties Tool" +#~ msgstr "车厢属性" + +#~ msgid "Wagon properties" +#~ msgstr "车厢属性" + +#~ msgid "Wallmounted Signal (left)" +#~ msgstr "壁挂式信号灯 (左侧)" + +#~ msgid "Wallmounted Signal (right)" +#~ msgstr "壁挂式信号灯 (右侧)" + +#~ msgid "Wallmounted Signal (top)" +#~ msgstr "悬挂式信号灯" + +#~ msgid "" +#~ "Warning: If you destroy this wagon, you only get some steel back! If you " +#~ "are sure, hold Sneak and left-click the wagon." +#~ msgstr "" +#~ "警告:如果您摧毁此车厢,您只能拿到一些钢方块。如果您确定要摧毁这节车厢,请" +#~ "按潜行键并左键单击此车厢。" + +#~ msgid "Wheel" +#~ msgstr "车轮" + +#~ msgid "Y-turnout" +#~ msgstr "对称道岔" + +#~ msgid "You are not allowed to build near tracks at this protected position." +#~ msgstr "这里已被保护,您不能在这里的铁路附近建任何东西。" + +#~ msgid "" +#~ "You are not allowed to build near tracks without the track_builder " +#~ "privilege." +#~ msgstr "您没有“train_operator”权限,不能在铁路附近建任何东西。" + +#~ msgid "You are not allowed to build tracks at this protected position." +#~ msgstr "这里已被保护,您不能在这里建造铁路。" + +#~ msgid "" +#~ "You are not allowed to build tracks without the track_builder privilege." +#~ msgstr "您没有“train_operator”权限,不能在这里建造铁路。" + +#~ msgid "" +#~ "You are not allowed to configure this track without the @1 privilege." +#~ msgstr "您没有“@1”权限,不能调整这段轨道。" + +#~ msgid "You are not allowed to configure this track." +#~ msgstr "您不能调整这段轨道。" + +#~ msgid "" +#~ "You are not allowed to couple trains without the train_operator privilege." +#~ msgstr "您没有“train_operator”权限,不能连接这两节车厢。" + +#, fuzzy +#~ msgid "You are not allowed to modify this protected track." +#~ msgstr "这里已被保护,您不能在这里建造铁路。" + +#~ msgid "" +#~ "You are not allowed to operate turnouts and signals without the " +#~ "railway_operator privilege." +#~ msgstr "您没有“railway_operator”权限,不能控制铁路设施。" + +#~ msgid "You do not have the @1 privilege." +#~ msgstr "您没有“@1”权限。" + +#, fuzzy +#~ msgid "You don't have the train_operator privilege." +#~ msgstr "您没有“@1”权限。" + +#~ msgid "" +#~ "You need to own at least one neighboring wagon to destroy this couple." +#~ msgstr "您必须至少拥有其中一节车厢才能分开这两节车厢。" diff --git a/advtrains_luaautomation/po/zh_TW.po b/advtrains_luaautomation/po/zh_TW.po new file mode 100644 index 0000000..866ccc5 --- /dev/null +++ b/advtrains_luaautomation/po/zh_TW.po @@ -0,0 +1,644 @@ +msgid "" +msgstr "" +"Project-Id-Version: advtrains\n" +"Report-Msgid-Bugs-To: advtrains-discuss@lists.sr.ht\n" +"POT-Creation-Date: 2025-06-11 23:03+0200\n" +"PO-Revision-Date: 2023-10-09 11:31+0200\n" +"Last-Translator: Y. Wang <yw05@forksworld.de>\n" +"Language-Team: Chinese (Traditional)\n" +"Language: zh_TW\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 3.3.2\n" + +#: active_common.lua +msgid "Clear Local Environment" +msgstr "" + +#: active_common.lua +msgid "Code" +msgstr "" + +#: active_common.lua +msgid "LuaATC Environment" +msgstr "" + +#: active_common.lua +msgid "LuaATC component assigned to an invalid environment" +msgstr "" + +#: active_common.lua +msgid "LuaATC component assigned to environment '@1'" +msgstr "" + +#: active_common.lua +msgid "LuaATC component with error: @1" +msgstr "" + +#: active_common.lua chatcmds.lua +msgid "Save" +msgstr "儲存" + +#: active_common.lua +msgid "Unconfigured LuaATC component" +msgstr "LuaATC 元件 (未配置)" + +#: active_common.lua +msgid "" +"You are not allowed to configure this LuaATC component without the @1 " +"privilege." +msgstr "您沒有「@1」許可權,不能配置這個 LuaATC 元件。" + +#: atc_rail.lua +#, fuzzy +msgid "LuaATC Track" +msgstr "裝貨軌道" + +#: chatcmds.lua +msgid "Already subscribed!" +msgstr "" + +#: chatcmds.lua +msgid "Clear S" +msgstr "" + +#: chatcmds.lua +msgid "Create an AdvTrains LuaAutomation environment" +msgstr "" + +#: chatcmds.lua +msgid "" +"Created environment '@1'. Use '/env_setup @2' to define global " +"initialization code, or start building LuaATC components!" +msgstr "" + +#: chatcmds.lua +msgid "Delete Env." +msgstr "" + +#: chatcmds.lua +msgid "Environment already exists!" +msgstr "" + +#: chatcmds.lua +msgid "Environment deleted!" +msgstr "" + +#: chatcmds.lua +msgid "Environment initialization code" +msgstr "" + +#: chatcmds.lua +msgid "Invalid environment name!" +msgstr "" + +#: chatcmds.lua +msgid "Invalid name (only common characters)" +msgstr "" + +#: chatcmds.lua +msgid "" +"List Advtrains LuaATC environments you are subscribed to (no parameters) or " +"subscribers of an environment (giving an env name)." +msgstr "" + +#: chatcmds.lua +msgid "Name required!" +msgstr "" + +#: chatcmds.lua +msgid "No subscribers!" +msgstr "" + +#: chatcmds.lua +msgid "Not subscribed to any!" +msgstr "" + +#: chatcmds.lua +msgid "Not subscribed!" +msgstr "" + +#: chatcmds.lua +msgid "Run Init Code" +msgstr "" + +#: chatcmds.lua +msgid "" +"SURE TO DELETE ENVIRONMENT @1? Type YES (all uppercase) to continue or just " +"quit form to cancel." +msgstr "" + +#: chatcmds.lua +msgid "Set up and modify AdvTrains LuaAutomation environment" +msgstr "" + +#: chatcmds.lua +msgid "Subscribe to the log of an Advtrains LuaATC environment" +msgstr "" + +#: chatcmds.lua +msgid "Subscribed to environment '@1'." +msgstr "" + +#: chatcmds.lua +msgid "Successfully unsubscribed!" +msgstr "" + +#: chatcmds.lua +msgid "Unubscribe to the log of an Advtrains LuaATC environment" +msgstr "" + +#: init.lua +msgid "" +"Can place and configure LuaATC components, including execute potentially " +"harmful Lua code" +msgstr "" + +#: mesecon_controller.lua +msgid "LuaATC Mesecon Controller" +msgstr "" + +#: operation_panel.lua +msgid "LuaATC Operation Panel" +msgstr "" + +#: pcnaming.lua +msgid "" +"Passive Component Naming Tool\n" +"\n" +"Right-click to name a passive component." +msgstr "" +"被動元件命名工具\n" +"\n" +"右鍵單擊命名所選元件。" + +#: pcnaming.lua +msgid "Set name of component (empty to clear)" +msgstr "" + +#: pcnaming.lua +msgid "" +"You are not allowed to name LuaATC passive components without the @1 " +"privilege." +msgstr "您沒有「@1」許可權,不能命名這個元件。" + +#~ msgid "(Doors closed)" +#~ msgstr "(車門已關閉)" + +#~ msgid "3-way turnout" +#~ msgstr "三開道岔" + +#~ msgid "90+Angle Diamond Crossing Track" +#~ msgstr "交叉軌道 (其中一條軌道與座標軸平行)" + +#~ msgid "<No coupler>" +#~ msgstr "<無連結器>" + +#~ msgid "@1 Platform (45 degree)" +#~ msgstr "較高的@1月臺 (45°)" + +#~ msgid "@1 Platform (high)" +#~ msgstr "較高的@1月臺" + +#~ msgid "@1 Platform (low)" +#~ msgstr "較低的@1月臺" + +#~ msgid "@1 Platform (low, 45 degree)" +#~ msgstr "較低的@1月臺 (45°)" + +#~ msgid "@1 Slope" +#~ msgstr "@1斜坡" + +#~ msgid "ATC Kick command warning: doors are closed." +#~ msgstr "ATC 警告:車門已關閉,無法踢出乘客。" + +#~ msgid "ATC Kick command warning: train moving." +#~ msgstr "ATC 警告:火車正在移動,無法踢出乘客。" + +#~ msgid "ATC Reverse command warning: didn't reverse train, train moving." +#~ msgstr "ATC 警告:火車正在移動,無法改變行車方向。" + +#~ msgid "ATC command parse error: Unknown command: @1" +#~ msgstr "ATC 語法錯誤:未知命令:@1" + +#~ msgid "ATC command syntax error: I statement not closed: @1" +#~ msgstr "ATC 語法錯誤:「I」命令不完整:@1" + +#~ msgid "ATC controller" +#~ msgstr "ATC 控制器" + +#~ msgid "" +#~ "ATC controller, mode @1\n" +#~ "Channel: @2" +#~ msgstr "" +#~ "ATC 控制器\n" +#~ "模式:@1\n" +#~ "頻道:@2" + +#~ msgid "" +#~ "ATC controller, mode @1\n" +#~ "Command: @2" +#~ msgstr "" +#~ "ATC 控制器\n" +#~ "模式:@1\n" +#~ "命令:@2" + +#~ msgid "Access to @1" +#~ msgstr "可前往@1" + +#~ msgid "Andrew's Cross" +#~ msgstr "平交道號誌燈" + +#~ msgid "Back of train would end up off track, cancelling." +#~ msgstr "火車後部不在軌道上。" + +#~ msgid "Big Industrial Train Engine" +#~ msgstr "大型工業用火車頭" + +#~ msgid "Boiler" +#~ msgstr "鍋爐" + +#~ msgid "Box Wagon" +#~ msgstr "貨運車廂" + +#~ msgid "Buffer and Chain Coupler" +#~ msgstr "鏈式連結器" + +#~ msgid "Bumper" +#~ msgstr "保險槓" + +#~ msgid "Can not couple: The couplers of the trains do not match (@1 and @2)." +#~ msgstr "您無法連結這兩節車廂:這兩節車廂使用不同的連結器 (@1和@2)。" + +#~ msgid "Can't get on: wagon full or doors closed!" +#~ msgstr "無法上車:車門已關閉或車廂已滿。" + +#, fuzzy +#~ msgid "Can't place: Not enough slope items left (@1 required)" +#~ msgstr "無法放置斜坡:您沒有足夠的鐵路斜坡放置工具 (您總共需要@1個)" + +#, fuzzy +#~ msgid "Can't place: There's no slope of length @1" +#~ msgstr "無法放置斜坡:advtrains 不支援長度為@1米的斜坡。" + +#, fuzzy +#~ msgid "Can't place: no supporting node at upper end." +#~ msgstr "無法放置斜坡:較高階沒有支撐方塊。" + +#, fuzzy +#~ msgid "Can't place: not pointing at node" +#~ msgstr "無法放置斜坡:您沒有選擇任何方塊。" + +#~ msgid "Can't place: protected position!" +#~ msgstr "無法放置:此區域已被保護。" + +#, fuzzy +#~ msgid "Can't place: space occupied!" +#~ msgstr "無法放置斜坡:此區域已被佔用。" + +#~ msgid "Chimney" +#~ msgstr "煙囪" + +#~ msgid "Command" +#~ msgstr "命令" + +#~ msgid "Command (on)" +#~ msgstr "命令 (啟用時)" + +#~ msgid "Default Seat" +#~ msgstr "預設座位" + +#~ msgid "Default Seat (driver stand)" +#~ msgstr "預設座位 (司機座位)" + +#~ msgid "Dep. Speed" +#~ msgstr "出發速度" + +#~ msgid "Deprecated Track" +#~ msgstr "請不要使用" + +#~ msgid "Detailed Steam Engine" +#~ msgstr "精細的蒸汽機車" + +#~ msgid "Detector Rail" +#~ msgstr "探測軌道" + +#~ msgid "Diagonal Diamond Crossing Track" +#~ msgstr "交叉軌道" + +#~ msgid "Digiline channel" +#~ msgstr "Digiline 頻道" + +#~ msgid "Door Delay" +#~ msgstr "車門關閉時間" + +#~ msgid "" +#~ "Doors are closed. Use Sneak+rightclick to ignore the closed doors and get " +#~ "off." +#~ msgstr "車門已關閉,請使用潛行+右鍵單擊下車。" + +#, fuzzy +#~ msgid "Driver Stand" +#~ msgstr "司機座位" + +#~ msgid "Driver Stand (left)" +#~ msgstr "左側司機座位" + +#~ msgid "Driver Stand (right)" +#~ msgstr "右側司機座位" + +#~ msgid "Driver stand" +#~ msgstr "司機座位" + +#~ msgid "Driver's cab" +#~ msgstr "駕駛室" + +#~ msgid "Get off" +#~ msgstr "下車" + +#~ msgid "Get off (forced)" +#~ msgstr "強制下車" + +#~ msgid "Industrial Train Engine" +#~ msgstr "工業用火車頭" + +#~ msgid "Industrial tank wagon" +#~ msgstr "液體運輸車廂" + +#~ msgid "Industrial wood wagon" +#~ msgstr "木材運輸車廂" + +#~ msgid "Japanese Train Engine" +#~ msgstr "高速列車車頭" + +#~ msgid "Japanese Train Inter-Wagon Connection" +#~ msgstr "日本火車連結器" + +#~ msgid "Japanese Train Wagon" +#~ msgstr "高速列車車廂" + +#, fuzzy +#~ msgid "Japanese signal pole" +#~ msgstr "高速列車車廂" + +#~ msgid "Kick out passengers" +#~ msgstr "踢出乘客" + +#~ msgid "Lampless Signal" +#~ msgstr "臂木式號誌機" + +#~ msgid "Line" +#~ msgstr "火車線路" + +#~ msgid "Lock couples" +#~ msgstr "鎖定連結處" + +#~ msgid "No such lua entity." +#~ msgstr "您沒有指向一個可以用火車複製工具複製的物體。" + +#~ msgid "No such train: @1." +#~ msgstr "ID 為「@1」的列車不存在。" + +#~ msgid "No such wagon: @1." +#~ msgstr "ID 為「@1」的車廂不存在。" + +#, fuzzy +#~ msgid "Not allowed to do this." +#~ msgstr "您不能調整這段軌道。" + +#~ msgid "Passenger Wagon" +#~ msgstr "客車" + +#, fuzzy +#~ msgid "Passenger area" +#~ msgstr "客車" + +#~ msgid "Perpendicular Diamond Crossing Track" +#~ msgstr "垂直交叉軌道" + +#~ msgid "Reverse train" +#~ msgstr "改變行車方向" + +#~ msgid "Routingcode" +#~ msgstr "路由碼" + +#~ msgid "Save wagon properties" +#~ msgstr "儲存車廂屬性" + +#~ msgid "Scharfenberg Coupler" +#~ msgstr "Scharfenberg 式連結器" + +#~ msgid "Select seat:" +#~ msgstr "請選擇座位:" + +#~ msgid "Show Inventory" +#~ msgstr "顯示物品欄" + +#~ msgid "Signal" +#~ msgstr "色燈號誌機" + +#~ msgid "Speed:" +#~ msgstr "速度" + +#~ msgid "Station Code" +#~ msgstr "車站碼" + +#~ msgid "Station Name" +#~ msgstr "車站名稱" + +#~ msgid "Station/Stop Track" +#~ msgstr "車站軌道" + +#~ msgid "Steam Engine" +#~ msgstr "蒸汽機車" + +#~ msgid "Stop Time" +#~ msgstr "停站時間" + +#~ msgid "Subway Passenger Wagon" +#~ msgstr "地鐵車廂" + +#~ msgid "Target:" +#~ msgstr "目標速度" + +#~ msgid "Text displayed inside train" +#~ msgstr "車廂內部顯示" + +#~ msgid "Text displayed outside on train" +#~ msgstr "車廂外部顯示" + +#, fuzzy +#~ msgid "That wagon does not exist!" +#~ msgstr "這節車廂沒有座位。" + +#~ msgid "The clipboard couldn't access the metadata. Copy failed." +#~ msgstr "無法複製:剪貼簿無法訪問元資料。" + +#~ msgid "The clipboard couldn't access the metadata. Paste failed." +#~ msgstr "無法貼上:剪貼簿無法訪問元資料。" + +#~ msgid "The clipboard is empty." +#~ msgstr "剪貼簿是空的。" + +#, fuzzy +#~ msgid "The track you are trying to place the wagon on is not long enough!" +#~ msgstr "軌道太短。" + +#~ msgid "The track you are trying to place the wagon on is not long enough." +#~ msgstr "軌道太短。" + +#, fuzzy +#~ msgid "This Wagon ID" +#~ msgstr "車廂已滿。" + +#, fuzzy +#~ msgid "This node can't be changed using the trackworker!" +#~ msgstr "您不能使用鐵路調整工具調整這個方塊。" + +#, fuzzy +#~ msgid "This node can't be rotated using the trackworker!" +#~ msgstr "您不能使用鐵路調整工具旋轉這個方塊。" + +#, fuzzy +#~ msgid "This node can't be rotated using the trackworker," +#~ msgstr "您不能使用鐵路調整工具旋轉這個方塊。" + +#~ msgid "This position is protected!" +#~ msgstr "這裡已被保護。" + +#~ msgid "This track can not be changed." +#~ msgstr "您不能調整這段軌道。" + +#, fuzzy +#~ msgid "This track can not be removed!" +#~ msgstr "您不能移除這段軌道。" + +#, fuzzy +#~ msgid "This track can not be rotated!" +#~ msgstr "您不能旋轉這段軌道。" + +#~ msgid "This wagon has no seats." +#~ msgstr "這節車廂沒有座位。" + +#~ msgid "This wagon is full." +#~ msgstr "車廂已滿。" + +#~ msgid "This wagon is owned by @1, you can't destroy it." +#~ msgstr "這是 @1 的車廂,您不能摧毀它。" + +#~ msgid "Track" +#~ msgstr "軌道" + +#~ msgid "" +#~ "Track Worker Tool\n" +#~ "\n" +#~ "Left-click: change rail type (straight/curve/switch)\n" +#~ "Right-click: rotate object" +#~ msgstr "" +#~ "鐵路調整工具\n" +#~ "\n" +#~ "左鍵單擊:切換軌道型別\n" +#~ "右鍵單擊:旋轉方塊" + +#, fuzzy +#~ msgid "Train " +#~ msgstr "已複製火車。" + +#~ msgid "Train copied." +#~ msgstr "已複製火車。" + +#~ msgid "" +#~ "Train copy/paste tool\n" +#~ "\n" +#~ "Left-click: copy train\n" +#~ "Right-click: paste train" +#~ msgstr "" +#~ "火車複製工具\n" +#~ "\n" +#~ "左鍵單擊:複製\n" +#~ "右鍵單擊:粘帖" + +#~ msgid "Unconfigured ATC controller" +#~ msgstr "ATC 控制器 (未配置)" + +#~ msgid "Unloading Track" +#~ msgstr "卸貨軌道" + +#~ msgid "Use Sneak+rightclick to bypass closed doors!" +#~ msgstr "請使用潛行+右鍵上車。" + +#, fuzzy +#~ msgid "Wagon Properties Tool" +#~ msgstr "車廂屬性" + +#~ msgid "Wagon properties" +#~ msgstr "車廂屬性" + +#~ msgid "Wallmounted Signal (left)" +#~ msgstr "壁掛式色燈號誌機 (左側)" + +#~ msgid "Wallmounted Signal (right)" +#~ msgstr "壁掛式色燈號誌機 (右側)" + +#~ msgid "Wallmounted Signal (top)" +#~ msgstr "懸掛式色燈號誌機" + +#~ msgid "" +#~ "Warning: If you destroy this wagon, you only get some steel back! If you " +#~ "are sure, hold Sneak and left-click the wagon." +#~ msgstr "" +#~ "警告:如果您摧毀此車廂,您只能拿到一些鋼方塊。如果您確定要摧毀這節車廂,請" +#~ "按潛行鍵並左鍵單擊此車廂。" + +#~ msgid "Wheel" +#~ msgstr "車輪" + +#~ msgid "Y-turnout" +#~ msgstr "對稱道岔" + +#~ msgid "You are not allowed to build near tracks at this protected position." +#~ msgstr "這裡已被保護,您不能在這裡的鐵路附近建任何東西。" + +#~ msgid "" +#~ "You are not allowed to build near tracks without the track_builder " +#~ "privilege." +#~ msgstr "您沒有「train_operator」許可權,不能在鐵路附近建任何東西。" + +#~ msgid "You are not allowed to build tracks at this protected position." +#~ msgstr "這裡已被保護,您不能在這裡建造鐵路。" + +#~ msgid "" +#~ "You are not allowed to build tracks without the track_builder privilege." +#~ msgstr "您沒有「train_operator」許可權,不能在這裡建造鐵路。" + +#~ msgid "" +#~ "You are not allowed to configure this track without the @1 privilege." +#~ msgstr "您沒有「@1」許可權,不能調整這段軌道。" + +#~ msgid "You are not allowed to configure this track." +#~ msgstr "您不能調整這段軌道。" + +#~ msgid "" +#~ "You are not allowed to couple trains without the train_operator privilege." +#~ msgstr "您沒有「train_operator」許可權,不能連結這兩節車廂。" + +#, fuzzy +#~ msgid "You are not allowed to modify this protected track." +#~ msgstr "這裡已被保護,您不能在這裡建造鐵路。" + +#~ msgid "" +#~ "You are not allowed to operate turnouts and signals without the " +#~ "railway_operator privilege." +#~ msgstr "您沒有「railway_operator」許可權,不能控制鐵路設施。" + +#~ msgid "You do not have the @1 privilege." +#~ msgstr "您沒有「@1」許可權。" + +#, fuzzy +#~ msgid "You don't have the train_operator privilege." +#~ msgstr "您沒有「@1」許可權。" + +#~ msgid "" +#~ "You need to own at least one neighboring wagon to destroy this couple." +#~ msgstr "您必須至少擁有其中一節車廂才能分開這兩節車廂。" diff --git a/advtrains_luaautomation/recipes.lua b/advtrains_luaautomation/recipes.lua new file mode 100644 index 0000000..16121a8 --- /dev/null +++ b/advtrains_luaautomation/recipes.lua @@ -0,0 +1,27 @@ +-- depends on default, digilines and mesecons for crafting recipes +minetest.register_craft({ + output = "advtrains_luaautomation:dtrack_placer", + recipe = { + {"","mesecons_luacontroller:luacontroller0000",""}, + {"","advtrains:dtrack_atc_placer",""}, + {"","digilines:wire_std_00000000",""}, + } +}) + +minetest.register_craft({ + output = "advtrains_luaautomation:mesecon_controller0000", + recipe = { + {"","mesecons:wire_00000000_off",""}, + {"mesecons:wire_00000000_off","advtrains_luaautomation:dtrack_placer","mesecons:wire_00000000_off"}, + {"","mesecons:wire_00000000_off",""}, + } +}) + +minetest.register_craft({ + output = "advtrains_luaautomation:oppanel", + recipe = { + {"","mesecons_button:button_off",""}, + {"","advtrains_luaautomation:mesecon_controller0000",""}, + {"","default:stone",""}, + } +})
\ No newline at end of file diff --git a/advtrains_luaautomation/settingtypes.txt b/advtrains_luaautomation/settingtypes.txt new file mode 100644 index 0000000..20ed52e --- /dev/null +++ b/advtrains_luaautomation/settingtypes.txt @@ -0,0 +1,2 @@ +# Enable or disable craft recipes for LuaATC components +advtrains_luaautomation_enable_atlac_recipes (Enable LuaATC component craft recipes) bool true
\ No newline at end of file diff --git a/advtrains_signals_japan/init.lua b/advtrains_signals_japan/init.lua index 1140b6b..914a139 100644 --- a/advtrains_signals_japan/init.lua +++ b/advtrains_signals_japan/init.lua @@ -15,6 +15,19 @@ local light_distant = light_purple local light_off = signal_face_texture do + local model_dir = core.get_modpath("advtrains_signals_japan") .. DIR_DELIM .. "models" + local function add_model(name, content) + local fn = "advtrains_signals_japan_" .. name + if core.features.dynamic_add_media_startup then + core.dynamic_add_media { + filename = fn, + filedata = content, + } + else + core.mkdir(model_dir) + core.safe_file_write(model_dir .. DIR_DELIM .. fn, content) + end + end local model_path_prefix = table.concat({minetest.get_modpath("advtrains_signals_japan"), "models", "advtrains_signals_japan_"}, DIR_DELIM) local function vertex(x, y, z) @@ -122,7 +135,7 @@ do pole_vertices = table.concat(pole_vertices, "\n") pole_objdef = table.concat(pole_objdef, "\n") pole_uv = table.concat(pole_uv, "\n") - minetest.safe_file_write(model_path_prefix .. "pole.obj", table.concat({pole_vertices, pole_uv, pole_objdef}, "\n")) + add_model("pole.obj", table.concat({pole_vertices, pole_uv, pole_objdef}, "\n")) -- generate signals for lightcount = 5, 6 do @@ -231,7 +244,7 @@ do face_vertices = table.concat(face_vertices, "\n") face_uv = table.concat(face_uv, "\n") face_objdef = table.concat(face_objdef, "\n") - minetest.safe_file_write(model_path_prefix .. lightcount .. "_" .. rotname .. ".obj", table.concat({ + add_model(lightcount .. "_" .. rotname .. ".obj", table.concat({ pole_vertices, face_vertices, table.concat(light_vertices, "\n"), @@ -247,7 +260,8 @@ do end end -local S = attrans +-- ask engine for translator instance, this will load the translation files +local S = core.get_translator("advtrains_signals_japan") minetest.register_node("advtrains_signals_japan:pole_0", { description = S("Japanese signal pole"), @@ -385,7 +399,7 @@ for _, rtab in ipairs { local lightcount = siginfo.lightcount for asp, texture in pairs(siginfo.textures) do minetest.register_node("advtrains_signals_japan:"..sigtype.."_"..asp.."_"..rot, { - description = attrans(string.format("Japanese%s signal (type %s)", siginfo.isdst and " repeating" or "", siginfo.desc)), + description = S(string.format("Japanese%s signal (type %s)", siginfo.isdst and " repeating" or "", siginfo.desc)), drawtype = "mesh", mesh = string.format("advtrains_signals_japan_%d_%s.obj", lightcount, rot), tiles = {pole_texture, signal_face_texture, texture}, diff --git a/advtrains_signals_ks/init.lua b/advtrains_signals_ks/init.lua index 326c631..3b4bebb 100755..100644 --- a/advtrains_signals_ks/init.lua +++ b/advtrains_signals_ks/init.lua @@ -1,6 +1,9 @@ -- Ks signals -- Can display main aspects (no Zs) + Sht +-- ask engine for translator instance, this will load the translation files +local S = core.get_translator("advtrains_signals_ks") + -- Note that the group value of advtrains_signal is 2, which means "step 2 of signal capabilities" -- advtrains_signal=1 is meant for signals that do not implement set_aspect. @@ -86,38 +89,38 @@ end local mainaspects_main = { { name = "proceed", - description = "Proceed", + description = S("Proceed"), zs3 = "off" }, { name = "shunt", - description = "Shunt", + description = S("Shunt"), zs3 = "off", shunt = true, }, { name = "proceed_16", - description = "Proceed (speed 16)", + description = S("Proceed (speed 16)"), zs3 = "16", }, { name = "proceed_12", - description = "Proceed (speed 12)", + description = S("Proceed (speed 12)"), zs3 = "12", }, { name = "proceed_8", - description = "Proceed (speed 8)", + description = S("Proceed (speed 8)"), zs3 = "8", }, { name = "proceed_6", - description = "Proceed (speed 6)", + description = S("Proceed (speed 6)"), zs3 = "6", }, { name = "proceed_4", - description = "Proceed (speed 4)", + description = S("Proceed (speed 4)"), zs3 = "4", }, } @@ -151,7 +154,7 @@ end local mainaspects_dst = { { name = "expectclear", - description = "Expect Clear", + description = S("Expect Clear"), }, } @@ -173,7 +176,7 @@ end local mainaspects_ra = { { name = "shunt", - description = "Shunt", + description = S("Shunt"), shunt = true, }, } @@ -226,7 +229,7 @@ for _, rtab in ipairs({ } end minetest.register_node("advtrains_signals_ks:hs_"..typ.."_"..rot, { - description = "Ks Main Signal", + description = S("Ks Main Signal"), drawtype = "mesh", mesh = "advtrains_signals_ks_main_smr"..rot..".obj", tiles = {"advtrains_signals_ks_mast.png", "advtrains_signals_ks_head.png", "advtrains_signals_ks_head.png", tile}, @@ -298,7 +301,7 @@ for _, rtab in ipairs({ } end minetest.register_node("advtrains_signals_ks:vs_"..typ.."_"..rot, { - description = "Ks Distant Signal", + description = S("Ks Distant Signal"), drawtype = "mesh", mesh = "advtrains_signals_ks_distant_smr"..rot..".obj", tiles = {"advtrains_signals_ks_mast.png", "advtrains_signals_ks_head.png", "advtrains_signals_ks_head.png", tile}, @@ -350,7 +353,7 @@ for _, rtab in ipairs({ afunc = function() return prts.asp end end minetest.register_node("advtrains_signals_ks:ra_"..typ.."_"..rot, { - description = "Ks Shunting Signal", + description = S("Ks Shunting Signal"), drawtype = "mesh", mesh = "advtrains_signals_ks_sht_smr"..rot..".obj", tiles = {"advtrains_signals_ks_mast.png", "advtrains_signals_ks_head.png", "advtrains_signals_ks_head.png", "advtrains_signals_ks_ltm_"..typ..".png"}, @@ -362,7 +365,7 @@ for _, rtab in ipairs({ paramtype2 = "facedir", selection_box = { type = "fixed", - fixed = {sbox, rotation_sbox} + fixed = {sbox, {-1/4, -1/2, -1/4, 1/4, -7/16, 1/4}} }, collision_box = { type = "fixed", @@ -465,7 +468,7 @@ for _, rtab in ipairs({ if typ == "e" then tile2 = "advtrains_signals_ks_sign_zs10.png" end - register_sign("sign", typ, prts.n, "Permanent local speed restriction sign", "sign"..mesh, tile2, "8", "advtrains_signals_ks_sign_8.png^[invert:rgb", prts.asp) + register_sign("sign", typ, prts.n, S("Permanent local speed restriction sign"), "sign"..mesh, tile2, "8", "advtrains_signals_ks_sign_8.png^[invert:rgb", prts.asp) end for typ, prts in pairs { @@ -478,7 +481,7 @@ for _, rtab in ipairs({ } do local tile2 = "advtrains_signals_ks_sign_lf7.png^(advtrains_signals_ks_sign_"..typ..".png^[makealpha:255,255,255)^[multiply:orange" local inv = "advtrains_signals_ks_sign_lf7.png^(advtrains_signals_ks_sign_8.png^[makealpha:255,255,255)^[multiply:orange" - register_sign("sign_lf", typ, prts.n, "Temporary local speed restriction sign", "sign", tile2, "8", inv, {main = prts.main, shunt = true, type = "temp"}) + register_sign("sign_lf", typ, prts.n, S("Temporary local speed restriction sign"), "sign", tile2, "8", inv, {main = prts.main, shunt = true, type = "temp"}) end for typ, prts in pairs { @@ -491,7 +494,7 @@ for _, rtab in ipairs({ } do local tile2 = "advtrains_signals_ks_sign_lf7.png^(advtrains_signals_ks_sign_"..typ..".png^[makealpha:255,255,255)" local inv = "advtrains_signals_ks_sign_lf7.png^(advtrains_signals_ks_sign_8.png^[makealpha:255,255,255)" - register_sign("sign_lf7", typ, prts.n, "Line speed restriction sign", "sign", tile2, "8", inv, {main = prts.main, shunt = true, type = "line"}) + register_sign("sign_lf7", typ, prts.n, S("Line speed restriction sign"), "sign", tile2, "8", inv, {main = prts.main, shunt = true, type = "line"}) end -- Geschwindigkeits(vor)anzeiger für Ks-Signale @@ -525,7 +528,7 @@ for _, rtab in ipairs({ -- Zs 3 local t = table.copy(def) - t.description = "Ks speed limit indicator" + t.description = S("Ks speed limit indicator") t.mesh = "advtrains_signals_ks_zs_top_smr"..rot..".obj" t.drop = "advtrains_signals_ks:zs3_off_0" t.selection_box.fixed[1][5] = 0 @@ -538,7 +541,7 @@ for _, rtab in ipairs({ -- Zs 3v local t = table.copy(def) - t.description = "Ks distant speed limit indicator" + t.description = S("Ks distant speed limit indicator") t.mesh = "advtrains_signals_ks_zs_bottom_smr"..rot..".obj" t.drop = "advtrains_signals_ks:zs3v_off_0" t.tiles[3] = t.tiles[3] .. "^[multiply:yellow" @@ -551,7 +554,7 @@ for _, rtab in ipairs({ end minetest.register_node("advtrains_signals_ks:mast_mast_"..rot, { - description = "Ks Mast", + description = S("Ks Mast"), drawtype = "mesh", mesh = "advtrains_signals_ks_mast_smr"..rot..".obj", tiles = {"advtrains_signals_ks_mast.png"}, @@ -581,16 +584,8 @@ end -- Crafting -minetest.register_craft({ - output = "advtrains_signals_ks:hs_danger_0 2", - recipe = { - {'default:steel_ingot', 'dye:red', 'default:steel_ingot'}, - {'dye:yellow', 'default:steel_ingot', 'dye:dark_green'}, - {'default:steel_ingot', 'advtrains_signals_ks:mast_mast_0', 'default:steel_ingot'}, - }, -}) - -minetest.register_craft({ +-- Ks Signals +minetest.register_craft({ -- Ks Mast output = "advtrains_signals_ks:mast_mast_0 10", recipe = { {'default:steel_ingot'}, @@ -598,17 +593,23 @@ minetest.register_craft({ {'default:steel_ingot'}, }, }) - -minetest.register_craft({ - output = "advtrains_signals_ks:ra_danger_0 2", +minetest.register_craft({ -- Ks Main Signal + output = "advtrains_signals_ks:hs_danger_0 2", recipe = { - {'dye:red', 'dye:white', 'dye:red'}, - {'dye:white', 'default:steel_ingot', 'default:steel_ingot'}, + {'default:steel_ingot', 'dye:red', 'default:steel_ingot'}, + {'dye:yellow', 'default:steel_ingot', 'dye:dark_green'}, {'default:steel_ingot', 'advtrains_signals_ks:mast_mast_0', 'default:steel_ingot'}, }, }) - -minetest.register_craft({ +minetest.register_craft({ -- Ks Distant Signal + output = "advtrains_signals_ks:vs_slow_0 2", + recipe = { + {'default:steel_ingot', 'default:steel_ingot', 'default:steel_ingot'}, + {'dye:dark_green', 'default:steel_ingot', 'dye:yellow'}, + {'default:steel_ingot', 'advtrains_signals_ks:mast_mast_0', 'default:steel_ingot'}, + } +}) +minetest.register_craft({ -- Ks Speed Limit Indicator output = "advtrains_signals_ks:zs3_off_0 2", recipe = { {"","default:steel_ingot",""}, @@ -616,7 +617,7 @@ minetest.register_craft({ {"","advtrains_signals_ks:mast_mast_0",""} }, }) -minetest.register_craft({ +minetest.register_craft({ -- Ks Distant Speed Limit Indicator output = "advtrains_signals_ks:zs3v_off_0 2", recipe = { {"","default:steel_ingot",""}, @@ -624,14 +625,22 @@ minetest.register_craft({ {"","advtrains_signals_ks:mast_mast_0",""} }, }) +minetest.register_craft({ -- Ks Shunting Signal + output = "advtrains_signals_ks:ra_danger_0 2", + recipe = { + {'dye:red', 'dye:white', 'dye:red'}, + {'dye:white', 'default:steel_ingot', 'default:steel_ingot'}, + {'default:steel_ingot', 'advtrains_signals_ks:mast_mast_0', 'default:steel_ingot'}, + }, +}) +-- Speed Restriction signs +-- Crafting entry recipe for signs local sign_material = "default:sign_wall_steel" --fallback if minetest.get_modpath("basic_materials") then sign_material = "basic_materials:plastic_sheet" end ---print("Sign Material: "..sign_material) - -minetest.register_craft({ +minetest.register_craft({ -- Permanent Local Speed Restriction Sign output = "advtrains_signals_ks:sign_8_0 2", recipe = { {sign_material, 'dye:black'}, @@ -641,22 +650,20 @@ minetest.register_craft({ }) sign_material = nil -minetest.register_craft{ - output = "advtrains_signals_ks:sign_8_0 1", - recipe = {{"advtrains_signals_ks:sign_lf7_8_0"}} -} - -minetest.register_craft{ - output = "advtrains_signals_ks:sign_hfs_0 1", +-- Circular crafting between sign types +minetest.register_craft{ -- Signal Sign + output = "advtrains_signals_ks:sign_hfs_0", recipe = {{"advtrains_signals_ks:sign_8_0"}} } - -minetest.register_craft{ - output = "advtrains_signals_ks:sign_lf_8_0 1", +minetest.register_craft{ -- Temporary Local Speed Restriction Sign + output = "advtrains_signals_ks:sign_lf_8_0", recipe = {{"advtrains_signals_ks:sign_hfs_0"}} } - -minetest.register_craft{ - output = "advtrains_signals_ks:sign_lf7_8_0 1", +minetest.register_craft{ -- Line Speed Restriction Sign + output = "advtrains_signals_ks:sign_lf7_8_0", recipe = {{"advtrains_signals_ks:sign_lf_8_0"}} } +minetest.register_craft{ -- Permanent Local Speed Restriction Sign + output = "advtrains_signals_ks:sign_8_0", + recipe = {{"advtrains_signals_ks:sign_lf7_8_0"}} +} diff --git a/advtrains_signals_muc_ubahn/init.lua b/advtrains_signals_muc_ubahn/init.lua index 182a3dc..49642ef 100755..100644 --- a/advtrains_signals_muc_ubahn/init.lua +++ b/advtrains_signals_muc_ubahn/init.lua @@ -6,6 +6,9 @@ -- Hp4 and Hp5 are not implemented because they do not make sense. -- Also the speed signals are not yet added (they will be added later) +-- ask engine for translator instance, this will load the translation files +local S = core.get_translator("advtrains_signals_muc_ubahn") + local all_sigs = { hp0 = { asp = { main = 0 }, crea = true }, -- halt hp1 = { asp = { main = -1, proceed_as_main = true } }, -- free full speed @@ -16,9 +19,9 @@ local all_sigs = { } local mainaspects = { - { name = "hp1", description = "Hp1: Full speed" }, - { name = "hp2", description = "Hp2: Reduced Speed" }, - { name = "hp3", description = "Hp3: Shunt" }, + { name = "hp1", description = S("Hp1: Full speed") }, + { name = "hp2", description = S("Hp2: Reduced Speed") }, + { name = "hp3", description = S("Hp3: Shunt") }, } local dstaspects = { { name = "vr1", description = "Vr1: Expect Full speed" }, @@ -62,7 +65,7 @@ for r,f in pairs(all_sigs) do mesh = "advtrains_signals_muc_ubahn_wsig_"..loc..".obj", tiles = {"advtrains_signals_muc_ubahn_"..r..".png"}, drop = f.distant and "advtrains_signals_muc_ubahn:signal_wall_"..loc.."_vr0" or "advtrains_signals_muc_ubahn:signal_wall_"..loc.."_hp0", - description = f.distant and attrans("Munich U-Bahn Distant Signal ("..loc..")") or attrans("Munich U-Bahn Main Signal ("..loc..")"), + description = f.distant and S("Munich U-Bahn Distant Signal ("..loc..")") or S("Munich U-Bahn Main Signal ("..loc..")"), groups = { cracky=3, not_blocking_trains=1, @@ -86,3 +89,31 @@ for r,f in pairs(all_sigs) do }) end end + +-- Crafting +minetest.register_craft({ -- Main Signal Left as entry recipe + output = "advtrains_signals_muc_ubahn:signal_wall_l_hp0", + type = "shapeless", + recipe = {"advtrains:signal_wall_l_off", "advtrains_interlocking:tcb_node"}, +}) +minetest.register_craft({ -- Distant Signal Left as entry recipe + output = "advtrains_signals_muc_ubahn:signal_wall_l_vr0", + recipe = { + {"dye:orange","",""}, + {"dye:orange","advtrains_signals_muc_ubahn:signal_wall_l_hp0","dye:dark_green"}, + {"","","dye:dark_green"} + } +}) + +for this,nxt in pairs({l = "t", t = "r",r = "l"}) do --Circular crafting for wall-mount signals + minetest.register_craft({ -- Main Signal + output = "advtrains_signals_muc_ubahn:signal_wall_"..nxt.."_hp0", + type = "shapeless", + recipe = {"advtrains_signals_muc_ubahn:signal_wall_"..this.."_hp0"}, + }) + minetest.register_craft({ -- Distant Signal + output = "advtrains_signals_muc_ubahn:signal_wall_"..nxt.."_vr0", + type = "shapeless", + recipe = {"advtrains_signals_muc_ubahn:signal_wall_"..this.."_vr0"}, + }) +end diff --git a/advtrains_trackmap/viewer.lua b/advtrains_trackmap/viewer.lua index b7205c8..2ea54ce 100644 --- a/advtrains_trackmap/viewer.lua +++ b/advtrains_trackmap/viewer.lua @@ -40,4 +40,9 @@ minetest.register_craftitem("advtrains_trackmap:tool",{ node_left_click(pos, pname)
end
end
+})
+minetest.register_craft({
+ output = "advtrains_trackmap:tool",
+ type = "shapeless",
+ recipe = {"dye:green","advtrains:trackworker", "default:paper"}
})
\ No newline at end of file diff --git a/advtrains_train_track/init.lua b/advtrains_train_track/init.lua index f551ec5..c7bcb80 100644 --- a/advtrains_train_track/init.lua +++ b/advtrains_train_track/init.lua @@ -1,6 +1,11 @@ -- Default tracks for advtrains -- (c) orwell96 and contributors +-- Initialize internationalization (using ywang's poconvert) +advtrains.poconvert.from_flat("advtrains_train_track") +-- ask engine for translator instance, this will load the translation files +local S = core.get_translator("advtrains_train_track") + local default_boxen = { ["st"] = { [""] = { @@ -184,7 +189,7 @@ advtrains.register_tracks("default", { models_prefix="advtrains_dtrack", models_suffix=".b3d", shared_texture="advtrains_dtrack_shared.png", - description=attrans("Track"), + description=S("Track"), formats={}, get_additional_definiton = function(def, preset, suffix, rotation) @@ -265,7 +270,7 @@ advtrains.register_tracks("default", { models_prefix="advtrains_dtrack_sy", models_suffix=".obj", shared_texture="advtrains_dtrack_shared.png", - description=attrans("Y-turnout"), + description=S("Y-turnout"), formats = {}, get_additional_definiton = y3_turnouts_addef, }, advtrains.ap.t_yturnout) @@ -284,7 +289,7 @@ advtrains.register_tracks("default", { models_prefix="advtrains_dtrack_s3", models_suffix=".obj", shared_texture="advtrains_dtrack_shared.png", - description=attrans("3-way turnout"), + description=S("3-way turnout"), formats = {}, get_additional_definiton = y3_turnouts_addef, }, advtrains.ap.t_s3way) @@ -334,7 +339,7 @@ advtrains.register_tracks("default", { models_prefix="advtrains_dtrack_xing", models_suffix=".obj", shared_texture="advtrains_dtrack_shared.png", - description=attrans("Perpendicular Diamond Crossing Track"), + description=S("Perpendicular Diamond Crossing Track"), formats = {}, get_additional_definiton = function(def, preset, suffix, rotation) return perp_boxen[rotation] or {} @@ -426,7 +431,7 @@ advtrains.register_tracks("default", { models_prefix="advtrains_dtrack_xing90plusx", models_suffix=".obj", shared_texture="advtrains_dtrack_shared.png", - description=attrans("90+Angle Diamond Crossing Track"), + description=S("90+Angle Diamond Crossing Track"), formats = {}, get_additional_definiton = function(def, preset, suffix, rotation) return ninety_plus_boxen[suffix] or {} @@ -548,7 +553,7 @@ advtrains.register_tracks("default", { models_prefix="advtrains_dtrack_xingdiag", models_suffix=".obj", shared_texture="advtrains_dtrack_shared.png", - description=attrans("Diagonal Diamond Crossing Track"), + description=S("Diagonal Diamond Crossing Track"), formats = {}, get_additional_definiton = function(def, preset, suffix, rotation) return diagonal_boxen[suffix] or {} @@ -575,7 +580,7 @@ advtrains.register_tracks("default", { models_suffix=".obj", shared_texture="advtrains_dtrack_shared.png", second_texture="default_gravel.png", - description=attrans("Track"), + description=S("Track"), formats={vst1={true, false, true}, vst2={true, false, true}, vst31={true}, vst32={true}, vst33={true}}, }, advtrains.ap.t_30deg_slope) @@ -598,7 +603,7 @@ advtrains.register_tracks("default", { models_suffix=".b3d", shared_texture="advtrains_dtrack_rail.png", --bumpers still use the old texture until the models are redone. - description=attrans("Bumper"), + description=S("Bumper"), formats={}, get_additional_definiton = function(def, preset, suffix, rotation) -- 2024-11-25: Bumpers get the additional feature of being both a signal and a self-contained TCB, when interlocking is used. @@ -649,11 +654,19 @@ advtrains.register_tracks("default", { models_prefix="advtrains_dtrack", models_suffix=".b3d", shared_texture="advtrains_dtrack_shared_atc.png", - description=attrans("ATC controller"), + description=S("ATC controller"), formats={}, get_additional_definiton = advtrains.atc_function }, advtrains.trackpresets.t_30deg_straightonly) +minetest.register_craft({ + output = "advtrains:dtrack_atc_placer", + recipe = { + {"","mesecons_microcontroller:microcontroller0000",""}, + {"","advtrains:dtrack_placer",""}, + {"","",""} + } +}) -- Tracks for loading and unloading trains -- Copyright (C) 2017 Gabriel Pérez-Cerezo <gabriel@gpcf.eu> @@ -819,7 +832,7 @@ advtrains.register_tracks("default", { models_prefix="advtrains_dtrack", models_suffix=".b3d", shared_texture="advtrains_dtrack_shared_unload.png", - description=attrans("Unloading Track"), + description=S("Unloading Track"), formats={}, get_additional_definiton = function(def, preset, suffix, rotation) return { @@ -851,7 +864,7 @@ advtrains.register_tracks("default", { models_prefix="advtrains_dtrack", models_suffix=".b3d", shared_texture="advtrains_dtrack_shared_load.png", - description=attrans("Loading Track"), + description=S("Loading Track"), formats={}, get_additional_definiton = function(def, preset, suffix, rotation) return { @@ -921,7 +934,7 @@ if mesecon then models_prefix="advtrains_dtrack", models_suffix=".b3d", shared_texture="advtrains_dtrack_shared_detector_off.png", - description=attrans("Detector Rail"), + description=S("Detector Rail"), formats={}, get_additional_definiton = function(def, preset, suffix, rotation) return { |