From cad4809b9917d4abbd1ed1dc3ddbc8cbd67b2d50 Mon Sep 17 00:00:00 2001 From: Maverick2797 Date: Mon, 25 Oct 2021 14:39:28 +0800 Subject: Add punchers name to ops panel punch event event={type="punch", punch=true, name="foo"} --- advtrains_luaautomation/operation_panel.lua | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) mode change 100644 => 100755 advtrains_luaautomation/operation_panel.lua (limited to 'advtrains_luaautomation') diff --git a/advtrains_luaautomation/operation_panel.lua b/advtrains_luaautomation/operation_panel.lua old mode 100644 new mode 100755 index bfbbda4..c118ff3 --- a/advtrains_luaautomation/operation_panel.lua +++ b/advtrains_luaautomation/operation_panel.lua @@ -1,6 +1,6 @@ -local function on_punch(pos, player) - atlatc.interrupt.add(0, pos, {type="punch", punch=true}) +local function on_punch(pos,node,player) + atlatc.interrupt.add(0, pos, {type="punch", punch=true, name=player:get_player_name()}) end -- cgit v1.2.3 From 82987b1a4f74074088a414d90898ad19ec8c4b20 Mon Sep 17 00:00:00 2001 From: Maverick2797 Date: Fri, 25 Nov 2022 18:38:10 +0800 Subject: small security fixes in advtrains_luaautomation/ - fixed file permissions of advtrains_luaautomation/README.md (755->644) - fixed file permissions of advtrains_luaautomation/environment.lua (755->644) - prevented LuaATC section_occupancy() from having direct access to the interlocking section id occupancy table - simplify section_occupancy() logic --- advtrains_luaautomation/README.md | 0 advtrains_luaautomation/environment.lua | 7 ++----- 2 files changed, 2 insertions(+), 5 deletions(-) mode change 100755 => 100644 advtrains_luaautomation/README.md mode change 100755 => 100644 advtrains_luaautomation/environment.lua (limited to 'advtrains_luaautomation') diff --git a/advtrains_luaautomation/README.md b/advtrains_luaautomation/README.md old mode 100755 new mode 100644 diff --git a/advtrains_luaautomation/environment.lua b/advtrains_luaautomation/environment.lua old mode 100755 new mode 100644 index 6b1a283..d85bedc --- a/advtrains_luaautomation/environment.lua +++ b/advtrains_luaautomation/environment.lua @@ -229,11 +229,8 @@ if advtrains.interlocking then if not ts_id then return nil end ts_id = tostring(ts_id) local response = advtrains.interlocking.db.get_ts(ts_id) - if response == nil then - return false - else - return response.trains - end + if not response then return false end + return table.copy(response.trains) end end -- cgit v1.2.3 From 3a6b1ca8500cad74f95b925b191582c0aa739116 Mon Sep 17 00:00:00 2001 From: Maverick2797 Date: Thu, 17 Nov 2022 23:19:57 +0800 Subject: Add get_fc() and set_fc() commands get_fc: returns a table of each wagon's FC codes set_fc: set a table to overwrite the FC codes of a train's wagons --- advtrains_luaautomation/README.md | 25 ++++++++++++++++++------- advtrains_luaautomation/atc_rail.lua | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 50 insertions(+), 7 deletions(-) mode change 100644 => 100755 advtrains_luaautomation/atc_rail.lua (limited to 'advtrains_luaautomation') diff --git a/advtrains_luaautomation/README.md b/advtrains_luaautomation/README.md index 67a4b80..a885075 100644 --- a/advtrains_luaautomation/README.md +++ b/advtrains_luaautomation/README.md @@ -255,7 +255,10 @@ In addition to the above environment functions, the following functions are avai The interlocking system uses this property for Automatic Routesetting. #### Shunting Functions and Variables -There are several functions available especially for shunting operations. Some of these functions make use of Freight Codes (FC) set in the Wagon Properties of each wagon and/or locomotive: +There are several functions available especially for shunting operations. +Some of these functions make use of Freight Codes (FC) set in the Wagon Properties of each wagon and/or locomotive. +FCs are composed of codes separated by exclamation marks (`!`), for instance `"foo!bar!baz"`. +Each wagon has a current FC, indicating its next destination. - `split_at_index(index, atc_command)` Splits the train at the specified index, into a train with index-1 wagons and a second train starting with the index-th wagon. The `atc_command` specified is sent to the second train after decoupling. `"S0"` or `"B0"` is common to ensure any locomotives in the remaining train don't continue to move. @@ -266,6 +269,18 @@ There are several functions available especially for shunting operations. Some o Command: `split_at_index(4,"S0")` Result: first train (continues at previous speed): `"foo","foo","foo"`, second train (slows at S0): `"bar","bar","bar"` + - `get_fc()` + Returns a table with the entire FC list for each wagon in the train. + Command: `get_fc()` + Result: `{"", "foo!bar", "testing", "fc_1!fc_2!fc_3!?", "hello_world"}` + + - `set_fc(fc_list)` + Overwrites the FC list according to a table `fc_list`. A false or nil entry will leave the wagon unaffected, however all others will be overwritten. + Useful for mass-programming freight trains that use FC-shunting instead of walking to each wagon individually. + Example: train has FC lists: `"", "foo!bar", "testing", "fc_1!fc_2!fc_3!?", "hello_world"` + Command: `set_fc({"", "foo!turtle", nil, "4tehlulz", false})` + Result: `""` `"foo!turtle"` `"testing"` `"4tehlulz"` `"hello_world"` + - `split_at_fc(atc_command, len)` Splits the train in such a way that all cars with non-empty current FC of the first part of the train have the same FC. The `atc_command` specified is sent to the rear part, as with split_at_index. It returns the fc of the cars of the first part. @@ -289,15 +304,11 @@ There are several functions available especially for shunting operations. Some o first part of the train as above. - `step_fc()` - Steps the FCs of all train cars forward. FCs are composed of codes - separated by exclamation marks (`!`), for instance - `"foo!bar!baz"`. Each wagon has a current FC, indicating its next - destination. Stepping the freight code forward, selects the next - code after the !. If the end of the string is reached, then the + Steps the FCs of all train cars forward, selecting the next + code after the `!`. If the end of the string is reached, then the first code is selected, except if the string ends with a question mark (`?`), then the order is reversed. - - `train_length()` returns the number of cars the train is composed of. diff --git a/advtrains_luaautomation/atc_rail.lua b/advtrains_luaautomation/atc_rail.lua old mode 100644 new mode 100755 index 5dde99c..aac11f0 --- a/advtrains_luaautomation/atc_rail.lua +++ b/advtrains_luaautomation/atc_rail.lua @@ -91,6 +91,38 @@ function r.fire_event(pos, evtdata, appr_internal) if not train_id then return false end advtrains.train_step_fc(train) end, + get_fc = function() + if not train_id then return end + local fc_list = {} + for index,wagon_id in ipairs(train.trainparts) do + fc_list[index] = table.concat(advtrains.wagons[wagon_id].fc,"!") or "" + end + return fc_list + end, + set_fc = function(fc_list) + assertt(fc_list, "table") + if not train_id then return false end + -- safety type-check for entered values + for _,v in ipairs(fc_list) do + if v and type(v) ~= "string" then + error("FC entries must be a string") + return + end + end + for index,wagon_id in ipairs(train.trainparts) do + if fc_list[index] then -- has FC to enter to this wagon + local data = advtrains.wagons[wagon_id] + if data then -- wagon actually exists + for _,wagon in pairs(minetest.luaentities) do -- find wagon entity + if wagon.is_wagon and wagon.initialized and wagon.id==wagon_id then + wagon.set_fc(data,fc_list[index]) -- overwrite to new FC + break -- no point cycling through every other entity. we found our wagon + end + end + end + end + end + end, set_shunt = function() -- enable shunting mode if not train_id then return false end -- cgit v1.2.3 From 2ea4a8cff1d8e335fda472e4c7988424ca522610 Mon Sep 17 00:00:00 2001 From: orwell Date: Tue, 6 Feb 2024 23:06:38 +0100 Subject: Add chatcommand and luaatc function to get global_slowdown --- advtrains/init.lua | 10 ++++++++++ advtrains_luaautomation/environment.lua | 3 +++ 2 files changed, 13 insertions(+) (limited to 'advtrains_luaautomation') diff --git a/advtrains/init.lua b/advtrains/init.lua index 9c977eb..cc8f8d1 100644 --- a/advtrains/init.lua +++ b/advtrains/init.lua @@ -758,6 +758,16 @@ minetest.register_chatcommand("at_disable_step", end, }) +minetest.register_chatcommand("at_status", + { + params = "", + description = "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),")"}) + end, +}) + advtrains.is_no_action = function() return no_action end diff --git a/advtrains_luaautomation/environment.lua b/advtrains_luaautomation/environment.lua index d85bedc..9fcba1d 100644 --- a/advtrains_luaautomation/environment.lua +++ b/advtrains_luaautomation/environment.lua @@ -164,6 +164,9 @@ local static_env = { return false end end, + get_slowdown = function() + return advtrains.global_slowdown + end } -- If interlocking is present, enable route setting functions -- cgit v1.2.3 From b28ceaa2b48f39855183b982c9668d0154a626df Mon Sep 17 00:00:00 2001 From: gpcf Date: Sun, 14 May 2023 19:48:30 +0200 Subject: Add register_function command so mods can register their own functons, low-level interface for departure boards --- advtrains_luaautomation/environment.lua | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'advtrains_luaautomation') diff --git a/advtrains_luaautomation/environment.lua b/advtrains_luaautomation/environment.lua index 9fcba1d..6df5248 100644 --- a/advtrains_luaautomation/environment.lua +++ b/advtrains_luaautomation/environment.lua @@ -262,6 +262,11 @@ if advtrains.lines then } end + +atlatc.register_function = function (name, f) + static_env[name] = f +end + for _, name in pairs(safe_globals) do static_env[name] = _G[name] end -- cgit v1.2.3 From 7c4f1377e452134ab9e4addd0f01360dfa72564a Mon Sep 17 00:00:00 2001 From: Blockhead Date: Wed, 5 Jun 2024 04:09:04 +1000 Subject: Fix section_occupancy: Return empty table Fixes the functioning of the LuaATC function section_occupancy in the presence of no trains. Currently, if there is no train in the section, advtrains.interlocking.db.get_ts will return a table with a nil entry. When that nil value is passed to table.copy, Minetest throws out an error. Instead of passing nil to table.copy, just make a new empty table. --- advtrains_luaautomation/environment.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'advtrains_luaautomation') diff --git a/advtrains_luaautomation/environment.lua b/advtrains_luaautomation/environment.lua index 6df5248..761e227 100644 --- a/advtrains_luaautomation/environment.lua +++ b/advtrains_luaautomation/environment.lua @@ -233,7 +233,7 @@ if advtrains.interlocking then ts_id = tostring(ts_id) local response = advtrains.interlocking.db.get_ts(ts_id) if not response then return false end - return table.copy(response.trains) + return (response.trains and table.copy(response.trains)) or {} end end -- cgit v1.2.3 From 216f28e51aa3f8fea78f4fc054cb1071f3a9ce72 Mon Sep 17 00:00:00 2001 From: Maverick2797 Date: Tue, 7 May 2024 20:58:26 +0800 Subject: Fix set_aspect() Actually send aspect to advtrains.interlocking.signal_set_aspect() from LuaATC set_aspect() --- advtrains_luaautomation/environment.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'advtrains_luaautomation') diff --git a/advtrains_luaautomation/environment.lua b/advtrains_luaautomation/environment.lua index 761e227..ee7628d 100644 --- a/advtrains_luaautomation/environment.lua +++ b/advtrains_luaautomation/environment.lua @@ -224,7 +224,7 @@ if advtrains.interlocking then end static_env.set_aspect = function(signal, asp) local pos = atlatc.pcnaming.resolve_pos(signal) - return advtrains.interlocking.signal_set_aspect(pos) + return advtrains.interlocking.signal_set_aspect(pos,asp) end --section_occupancy() -- cgit v1.2.3 From 46fbf89acfe3d182bf497bfa622cd4876d53d7da Mon Sep 17 00:00:00 2001 From: gpcf Date: Sun, 11 Aug 2024 23:22:36 +0200 Subject: Fix privilege check when using the PC naming tool This fix prevents malicious modified clients from using the PC tool without the necessary privileges. --- advtrains_luaautomation/pcnaming.lua | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) (limited to 'advtrains_luaautomation') diff --git a/advtrains_luaautomation/pcnaming.lua b/advtrains_luaautomation/pcnaming.lua index 71f4d9a..5624b74 100644 --- a/advtrains_luaautomation/pcnaming.lua +++ b/advtrains_luaautomation/pcnaming.lua @@ -22,6 +22,9 @@ function atlatc.pcnaming.resolve_pos(pos, func_name) error("Invalid position supplied to " .. (func_name or "???")..": " .. dump(pos)) end + +local pcrename = {} + minetest.register_craftitem("advtrains_luaautomation:pcnaming",{ description = attrans("Passive Component Naming Tool\n\nRight-click to name a passive component."), groups = {cracky=1}, -- key=name, value=rating; rating=1..3. @@ -43,6 +46,7 @@ minetest.register_craftitem("advtrains_luaautomation:pcnaming",{ minetest.record_protection_violation(pos, pname) return end + local node = advtrains.ndb.get_node(pos) local ndef = minetest.registered_nodes[node.name] if node.name and ( @@ -57,16 +61,17 @@ minetest.register_craftitem("advtrains_luaautomation:pcnaming",{ pn=name end end - minetest.show_formspec(pname, "atlatc_naming_"..minetest.pos_to_string(pos), "field[pn;Set name of component (empty to clear);"..minetest.formspec_escape(pn).."]") + pcrename[pname] = pos + minetest.show_formspec(pname, "atlatc_naming", "field[pn;Set name of component (empty to clear);"..minetest.formspec_escape(pn).."]") end end end, }) minetest.register_on_player_receive_fields(function(player, formname, fields) - local pts=string.match(formname, "^atlatc_naming_(.+)") - if pts then - local pos=minetest.string_to_pos(pts) - if fields.pn then + if formname == "atlatc_naming" then + local pname = player:get_player_name() + local pos=pcrename[pname] + if fields.pn and pos then --first remove all occurences for name, npos in pairs(atlatc.pcnaming.name_map) do if vector.equals(npos, pos) then -- cgit v1.2.3 From 3b83580faccfbe5b23cea04bd3e6e0810572c7c0 Mon Sep 17 00:00:00 2001 From: Maverick2797 Date: Fri, 16 Aug 2024 20:47:17 +0800 Subject: Fix LuaATC set_fc() only working on loaded entites --- advtrains_luaautomation/atc_rail.lua | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) mode change 100755 => 100644 advtrains_luaautomation/atc_rail.lua (limited to 'advtrains_luaautomation') diff --git a/advtrains_luaautomation/atc_rail.lua b/advtrains_luaautomation/atc_rail.lua old mode 100755 new mode 100644 index aac11f0..ead1031 --- a/advtrains_luaautomation/atc_rail.lua +++ b/advtrains_luaautomation/atc_rail.lua @@ -113,11 +113,12 @@ function r.fire_event(pos, evtdata, appr_internal) if fc_list[index] then -- has FC to enter to this wagon local data = advtrains.wagons[wagon_id] if data then -- wagon actually exists - for _,wagon in pairs(minetest.luaentities) do -- find wagon entity - if wagon.is_wagon and wagon.initialized and wagon.id==wagon_id then - wagon.set_fc(data,fc_list[index]) -- overwrite to new FC - break -- no point cycling through every other entity. we found our wagon - end + --direct copy from wagons.lua, allowing for the :split function + data.fc = fc_list[index]:split("!") + if not data.fcind then + data.fcind = 1 + elseif data.fcind > #data.fc then + data.fcind = #data.fc end end end -- cgit v1.2.3 From 55108ae38e467e190abd6f9bf087a9a73f953a08 Mon Sep 17 00:00:00 2001 From: Maverick2797 Date: Sat, 17 Aug 2024 11:43:35 +0800 Subject: LuaATC set_fc(): add argument to reset fc index to 1 --- advtrains_luaautomation/README.md | 6 ++++-- advtrains_luaautomation/atc_rail.lua | 6 +++--- 2 files changed, 7 insertions(+), 5 deletions(-) (limited to 'advtrains_luaautomation') diff --git a/advtrains_luaautomation/README.md b/advtrains_luaautomation/README.md index a885075..0bf56bb 100644 --- a/advtrains_luaautomation/README.md +++ b/advtrains_luaautomation/README.md @@ -274,9 +274,11 @@ Each wagon has a current FC, indicating its next destination. Command: `get_fc()` Result: `{"", "foo!bar", "testing", "fc_1!fc_2!fc_3!?", "hello_world"}` - - `set_fc(fc_list)` + - `set_fc(fc_list, reset_index)` Overwrites the FC list according to a table `fc_list`. A false or nil entry will leave the wagon unaffected, however all others will be overwritten. - Useful for mass-programming freight trains that use FC-shunting instead of walking to each wagon individually. + Useful for mass-programming freight trains that use FC-shunting instead of walking to each wagon individually. If the new FC entry for a wagon is shorter than the old entry, the index will clip to the last FC in the new entry. + If `reset_index` is true, all Current FC values will reset to the first entry in the list, instead of remaining at the current index. + Example: train has FC lists: `"", "foo!bar", "testing", "fc_1!fc_2!fc_3!?", "hello_world"` Command: `set_fc({"", "foo!turtle", nil, "4tehlulz", false})` Result: `""` `"foo!turtle"` `"testing"` `"4tehlulz"` `"hello_world"` diff --git a/advtrains_luaautomation/atc_rail.lua b/advtrains_luaautomation/atc_rail.lua index ead1031..b98648e 100644 --- a/advtrains_luaautomation/atc_rail.lua +++ b/advtrains_luaautomation/atc_rail.lua @@ -99,7 +99,7 @@ function r.fire_event(pos, evtdata, appr_internal) end return fc_list end, - set_fc = function(fc_list) + set_fc = function(fc_list,reset_index) assertt(fc_list, "table") if not train_id then return false end -- safety type-check for entered values @@ -113,9 +113,9 @@ function r.fire_event(pos, evtdata, appr_internal) if fc_list[index] then -- has FC to enter to this wagon local data = advtrains.wagons[wagon_id] if data then -- wagon actually exists - --direct copy from wagons.lua, allowing for the :split function + --effectively copyied from wagons.lua, allowing for the :split function and reset_index data.fc = fc_list[index]:split("!") - if not data.fcind then + if reset_index or not data.fcind then data.fcind = 1 elseif data.fcind > #data.fc then data.fcind = #data.fc -- cgit v1.2.3 From 852e2f4219c4e7a9bebf7b27bb1c026f98719f97 Mon Sep 17 00:00:00 2001 From: Maverick2797 Date: Fri, 30 Aug 2024 17:25:01 +0800 Subject: LuaATC add trainparts(train_id) Returns a copy of the trainparts table to allow tracking individual wagon ids Also fixed a couple of file permissions from previous commits --- advtrains_luaautomation/README.md | 3 +++ advtrains_luaautomation/environment.lua | 6 ++++++ advtrains_luaautomation/operation_panel.lua | 0 3 files changed, 9 insertions(+) mode change 100755 => 100644 advtrains_luaautomation/operation_panel.lua (limited to 'advtrains_luaautomation') diff --git a/advtrains_luaautomation/README.md b/advtrains_luaautomation/README.md index 0bf56bb..f98f7a0 100644 --- a/advtrains_luaautomation/README.md +++ b/advtrains_luaautomation/README.md @@ -93,6 +93,9 @@ Removes any pending interrupts of this node. Make this active component send a digiline message on the specified channel. Not available in init code. + - `trainparts(train_id)` + returns a table with the ids of the cars the train is composed of, or false if `train_id` is invalid. `train_id` can be replaced with `atc_id` when used in LuaATC Rails. + - `atc_send_to_train(, )` Sends the specified ATC command to the train specified by its train id. This happens regardless of where the train is in the world, and can be used to remote-control trains. Returns true on success. If the train ID does not exist, returns false and does nothing. See [atc_command.txt](../atc_command.txt) for the ATC command syntax. diff --git a/advtrains_luaautomation/environment.lua b/advtrains_luaautomation/environment.lua index ee7628d..b54d45c 100644 --- a/advtrains_luaautomation/environment.lua +++ b/advtrains_luaautomation/environment.lua @@ -153,6 +153,12 @@ local static_env = { local pos=atlatc.pcnaming.resolve_pos(parpos, "interrupt_pos") atlatc.interrupt.add(0, pos, {type="ext_int", ext_int=true, message=imesg}) end, + train_parts = function(train_id) + if not train_id then return false end + local train = advtrains.trains[train_id] + if not train then return false end + return table.copy(train.trainparts or {}) + end, -- sends an atc command to train regardless of where it is in the world atc_send_to_train = function(train_id, command) assertt(command, "string") diff --git a/advtrains_luaautomation/operation_panel.lua b/advtrains_luaautomation/operation_panel.lua old mode 100755 new mode 100644 -- cgit v1.2.3 From eb0c5b78627505bcba409dc5f52dbb05891954c5 Mon Sep 17 00:00:00 2001 From: "Y. Wang" Date: Wed, 4 Oct 2023 22:14:18 +0200 Subject: Various translation improvements --- advtrains/atc.lua | 8 +- advtrains/copytool.lua | 10 +- advtrains/couple.lua | 4 +- advtrains/craft_items.lua | 2 +- advtrains/po/advtrains.pot | 632 +++++++++++++++++++++++ advtrains/po/de.po | 674 +++++++++++++++---------- advtrains/po/fr.po | 636 ++++++++++++++--------- advtrains/po/template.pot | 505 ------------------ advtrains/po/update-translations.sh | 14 +- advtrains/po/zh_CN.po | 604 +++++++++++++--------- advtrains/po/zh_TW.po | 604 +++++++++++++--------- advtrains/protection.lua | 8 +- advtrains/signals.lua | 6 +- advtrains/trackplacer.lua | 12 +- advtrains/tracks.lua | 14 +- advtrains/wagons.lua | 14 +- advtrains_interlocking/tsr_rail.lua | 12 +- advtrains_line_automation/stoprail.lua | 10 +- advtrains_luaautomation/active_common.lua | 20 +- advtrains_luaautomation/atc_rail.lua | 2 +- advtrains_luaautomation/init.lua | 6 +- advtrains_luaautomation/mesecon_controller.lua | 3 +- advtrains_luaautomation/operation_panel.lua | 3 +- advtrains_luaautomation/pcnaming.lua | 8 +- 24 files changed, 2255 insertions(+), 1556 deletions(-) create mode 100644 advtrains/po/advtrains.pot delete mode 100644 advtrains/po/template.pot (limited to 'advtrains_luaautomation') diff --git a/advtrains/atc.lua b/advtrains/atc.lua index c1ff218..b572cdc 100644 --- a/advtrains/atc.lua +++ b/advtrains/atc.lua @@ -106,7 +106,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("ATC controller, unconfigured.")) + meta:set_string("infotext", attrans("Unconfigured ATC controller")) meta:set_string("formspec", atc.get_atc_controller_formspec(pos, meta)) end end @@ -233,7 +233,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), attrans("ATC Reverse command warning: didn't reverse train, train moving.")) end return 1 end, @@ -245,11 +245,11 @@ local matchptn={ end, ["K"] = function(id, train) if train.door_open == 0 then - atwarn(sid(id), attrans("ATC Kick command warning: Doors closed")) + atwarn(sid(id), attrans("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), attrans("ATC Kick command warning: train moving.")) return 1 end local tp = train.trainparts diff --git a/advtrains/copytool.lua b/advtrains/copytool.lua index 7ad4330..ca5cae1 100644 --- a/advtrains/copytool.lua +++ b/advtrains/copytool.lua @@ -38,7 +38,7 @@ 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, attrans("The track you are trying to place the wagon on is not long enough.")) return end @@ -89,19 +89,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(), attrans("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(), attrans("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(), attrans("No such train: @1.", wagon.train_id)) return end @@ -177,7 +177,7 @@ minetest.register_tool("advtrains:copytool", { 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(), attrans("Train copied.")) return itemstack end }) diff --git a/advtrains/couple.lua b/advtrains/couple.lua index d82e193..9474dcf 100644 --- a/advtrains/couple.lua +++ b/advtrains/couple.lua @@ -335,11 +335,11 @@ 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("") end + if #t1_cplhr==0 then t1_cplhr[1]=attrans("") 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("") end + if #t2_cplhr==0 then t2_cplhr[1]=attrans("") 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, ",")) end diff --git a/advtrains/craft_items.lua b/advtrains/craft_items.lua index 0e693eb..1188b64 100644 --- a/advtrains/craft_items.lua +++ b/advtrains/craft_items.lua @@ -6,7 +6,7 @@ core.register_craftitem("advtrains:boiler", { core.register_craftitem("advtrains:driver_cab", { - description = attrans("driver's cab"), + description = attrans("Driver's cab"), inventory_image = "advtrains_driver_cab.png", }) diff --git a/advtrains/po/advtrains.pot b/advtrains/po/advtrains.pot new file mode 100644 index 0000000..6fda1d7 --- /dev/null +++ b/advtrains/po/advtrains.pot @@ -0,0 +1,632 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the advtrains package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +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: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=CHARSET\n" +"Content-Transfer-Encoding: 8bit\n" + +#: advtrains/atc.lua:109 +msgid "Unconfigured ATC controller" +msgstr "" + +#: advtrains/atc.lua:150 +msgid "" +"ATC controller, mode @1\n" +"Command: @2" +msgstr "" + +#: advtrains/atc.lua:180 +msgid "Command" +msgstr "" + +#: advtrains/atc.lua:184 +msgid "Command (on)" +msgstr "" + +#: advtrains/atc.lua:187 +msgid "Digiline channel" +msgstr "" + +#: advtrains/atc.lua:189 advtrains_line_automation/stoprail.lua:65 +#: advtrains_luaautomation/active_common.lua:48 +msgid "Save" +msgstr "" + +#: advtrains/atc.lua:236 +msgid "ATC Reverse command warning: didn't reverse train, train moving." +msgstr "" + +#: advtrains/atc.lua:248 +msgid "ATC Kick command warning: doors are closed." +msgstr "" + +#: advtrains/atc.lua:252 +msgid "ATC Kick command warning: train moving." +msgstr "" + +#: advtrains/atc.lua:322 +msgid "ATC command syntax error: I statement not closed: @1" +msgstr "" + +#: advtrains/atc.lua:385 +msgid "ATC command parse error: Unknown command: @1" +msgstr "" + +#: advtrains/copytool.lua:8 +msgid "" +"Train copy/paste tool\n" +"\n" +"Left-click: copy train\n" +"Right-click: paste train" +msgstr "" + +#: advtrains/copytool.lua:29 +msgid "You do not have the @1 privilege." +msgstr "" + +#: 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 "" + +#: advtrains/copytool.lua:104 +msgid "No such train: @1." +msgstr "" + +#: advtrains/copytool.lua:176 +msgid "The clipboard couldn't access the metadata. Copy failed." +msgstr "" + +#: advtrains/copytool.lua:180 +msgid "Train copied." +msgstr "" + +#: advtrains/couple.lua:28 +msgid "Buffer and Chain Coupler" +msgstr "" + +#: advtrains/couple.lua:29 +msgid "Scharfenberg Coupler" +msgstr "" + +#: advtrains/couple.lua:185 +msgid "" +"You are not allowed to couple trains without the train_operator privilege." +msgstr "" + +#: advtrains/couple.lua:329 advtrains/couple.lua:333 +msgid "" +msgstr "" + +#: advtrains/couple.lua:334 +msgid "Can not couple: The couplers of the trains do not match (@1 and @2)." +msgstr "" + +#: advtrains/craft_items.lua:3 +msgid "Boiler" +msgstr "" + +#: advtrains/craft_items.lua:9 +msgid "Driver's cab" +msgstr "" + +#: advtrains/craft_items.lua:15 +msgid "Wheel" +msgstr "" + +#: advtrains/craft_items.lua:21 +msgid "Chimney" +msgstr "" + +#: advtrains/misc_nodes.lua:16 +msgid "@1 Platform (low)" +msgstr "" + +#: advtrains/misc_nodes.lua:33 +msgid "@1 Platform (high)" +msgstr "" + +#: advtrains/misc_nodes.lua:59 +msgid "@1 Platform (45 degree)" +msgstr "" + +#: advtrains/misc_nodes.lua:81 +msgid "@1 Platform (low, 45 degree)" +msgstr "" + +#: advtrains/protection.lua:7 +msgid "Can place, remove and operate trains" +msgstr "" + +#: advtrains/protection.lua:12 +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" +msgstr "" + +#: advtrains/protection.lua:24 +msgid "Can operate turnouts and signals in unprotected areas" +msgstr "" + +#: advtrains/protection.lua:148 +msgid "" +"You are not allowed to build near tracks without the track_builder privilege." +msgstr "" + +#: advtrains/protection.lua:148 +msgid "" +"You are not allowed to build tracks without the track_builder privilege." +msgstr "" + +#: 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 +msgid "" +"You are not allowed to operate turnouts and signals without the " +"railway_operator privilege." +msgstr "" + +#: advtrains/signals.lua:63 +msgid "Lampless Signal" +msgstr "" + +#: advtrains/signals.lua:127 +msgid "Signal" +msgstr "" + +#: advtrains/signals.lua:191 +msgid "Wallmounted Signal (left)" +msgstr "" + +#: advtrains/signals.lua:192 +msgid "Wallmounted Signal (right)" +msgstr "" + +#: advtrains/signals.lua:193 +msgid "Wallmounted Signal (top)" +msgstr "" + +#: advtrains/signals.lua:281 advtrains/signals.lua:322 +msgid "Andrew's Cross" +msgstr "" + +#: advtrains/trackplacer.lua:313 +msgid "" +"Track Worker Tool\n" +"\n" +"Left-click: change rail type (straight/curve/switch)\n" +"Right-click: rotate object" +msgstr "" + +#: 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 +msgid "Position is occupied by a train." +msgstr "" + +#: advtrains/tracks.lua:622 +msgid "There's a Track Circuit Break here." +msgstr "" + +#: advtrains/tracks.lua:626 +msgid "There's a Signal Influence Point here." +msgstr "" + +#: advtrains/tracks.lua:637 +msgid "@1 Slope" +msgstr "" + +#: advtrains/tracks.lua:648 advtrains/tracks.lua:653 +msgid "Can't place slope: not pointing at node." +msgstr "" + +#: advtrains/tracks.lua:658 +msgid "Can't place slope: space occupied." +msgstr "" + +#: advtrains/tracks.lua:711 +msgid "Can't place slope: Not enough slope items left (@1 required)." +msgstr "" + +#: advtrains/tracks.lua:714 +msgid "Can't place slope: There's no slope of length @1." +msgstr "" + +#: advtrains/tracks.lua:721 +msgid "Can't place slope: no supporting node at upper end." +msgstr "" + +#: advtrains/trainhud.lua:305 +msgid "OVERRUN RED SIGNAL! Examine situation and reverse train to move again." +msgstr "" + +#: advtrains/wagons.lua:179 +msgid "This wagon is owned by @1, you can't destroy it." +msgstr "" + +#: advtrains/wagons.lua:203 +msgid "The wagon's inventory is not empty." +msgstr "" + +#: advtrains/wagons.lua:210 +msgid "Wagon needs to be decoupled from other wagons in order to destroy it." +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." +msgstr "" + +#: advtrains/wagons.lua:649 advtrains/wagons.lua:850 +msgid "Show Inventory" +msgstr "" + +#: advtrains/wagons.lua:652 +msgid "Onboard Computer" +msgstr "" + +#: advtrains/wagons.lua:655 advtrains/wagons.lua:1328 +msgid "Wagon properties" +msgstr "" + +#: advtrains/wagons.lua:658 +msgid "Get off" +msgstr "" + +#: advtrains/wagons.lua:661 +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 "" + +#: advtrains/wagons.lua:706 +msgid "Doors are closed! (Try holding sneak key!)" +msgstr "" + +#: advtrains/wagons.lua:712 +msgid "You can't get on this wagon." +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 "" + +#: advtrains/wagons.lua:967 +msgid "Line" +msgstr "" + +#: advtrains/wagons.lua:968 +msgid "Routingcode" +msgstr "" + +#: advtrains/wagons.lua:1241 +msgid "" +"Doors are closed. Use Sneak+rightclick to ignore the closed doors and get " +"off." +msgstr "" + +#: advtrains/wagons.lua:1250 +msgid "You are not allowed to access the driver stand." +msgstr "" + +#: advtrains_interlocking/tsr_rail.lua:13 +msgid "Point speed restriction: @1" +msgstr "" + +#: 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 "" + +#: 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" +msgstr "" + +#: advtrains_line_automation/stoprail.lua:54 +msgid "Station Code" +msgstr "" + +#: advtrains_line_automation/stoprail.lua:55 +msgid "Station Name" +msgstr "" + +#: advtrains_line_automation/stoprail.lua:56 +msgid "Door Delay" +msgstr "" + +#: advtrains_line_automation/stoprail.lua:57 +msgid "Dep. Speed" +msgstr "" + +#: advtrains_line_automation/stoprail.lua:58 advtrains_train_track/init.lua:11 +#: advtrains_train_track/init.lua:156 +msgid "Track" +msgstr "" + +#: advtrains_line_automation/stoprail.lua:59 +msgid "Stop Time" +msgstr "" + +#: advtrains_line_automation/stoprail.lua:60 +msgid "Door Side" +msgstr "" + +#: advtrains_line_automation/stoprail.lua:62 +msgid "Reverse train" +msgstr "" + +#: advtrains_line_automation/stoprail.lua:63 +msgid "Kick out passengers" +msgstr "" + +#: advtrains_line_automation/stoprail.lua:97 +msgid "Station code \"@1\" already exists and is owned by @2." +msgstr "" + +#: advtrains_line_automation/stoprail.lua:111 +msgid "This station is owned by @1. You are not allowed to edit its name." +msgstr "" + +#: advtrains_line_automation/stoprail.lua:221 +msgid "Station/Stop Track" +msgstr "" + +#: advtrains_luaautomation/active_common.lua:17 +msgid "Unconfigured LuaATC component" +msgstr "" + +#: advtrains_luaautomation/active_common.lua:46 +msgid "LuaATC Environment" +msgstr "" + +#: advtrains_luaautomation/active_common.lua:49 +msgid "Clear Local Environment" +msgstr "" + +#: advtrains_luaautomation/active_common.lua:50 +msgid "Code" +msgstr "" + +#: advtrains_luaautomation/active_common.lua:64 +msgid "" +"You are not allowed to configure this LuaATC component without the @1 " +"privilege." +msgstr "" + +#: advtrains_luaautomation/active_common.lua:94 +msgid "LuaATC component assigned to environment '@1'" +msgstr "" + +#: advtrains_luaautomation/active_common.lua:96 +msgid "LuaATC component assigned to an invalid environment" +msgstr "" + +#: advtrains_luaautomation/active_common.lua:171 +msgid "LuaATC component with error: @1" +msgstr "" + +#: advtrains_luaautomation/init.lua:13 +msgid "" +"Can place and configure LuaATC components, including execute potentially " +"harmful Lua code" +msgstr "" + +#: advtrains_luaautomation/mesecon_controller.lua:211 +msgid "LuaATC Mesecon Controller" +msgstr "" + +#: advtrains_luaautomation/operation_panel.lua:11 +msgid "LuaATC Operation Panel" +msgstr "" + +#: advtrains_luaautomation/pcnaming.lua:28 +msgid "" +"Passive Component Naming Tool\n" +"\n" +"Right-click to name a passive component." +msgstr "" + +#: advtrains_luaautomation/pcnaming.lua:39 +msgid "" +"You are not allowed to name LuaATC passive components without the @1 " +"privilege." +msgstr "" + +#: advtrains_luaautomation/pcnaming.lua:62 +msgid "Set name of component (empty to clear)" +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 "" + +#: 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 "" + +#: advtrains_train_industrial/init.lua:40 +msgid "Industrial Train Engine" +msgstr "" + +#: advtrains_train_industrial/init.lua:79 +msgid "Big Industrial Train Engine" +msgstr "" + +#: advtrains_train_industrial/init.lua:98 +msgid "Industrial tank wagon" +msgstr "" + +#: advtrains_train_industrial/init.lua:116 +msgid "Industrial wood wagon" +msgstr "" + +#: advtrains_train_japan/init.lua:4 +msgid "Japanese Train Inter-Wagon Connection" +msgstr "" + +#: advtrains_train_japan/init.lua:37 +msgid "Driver stand" +msgstr "" + +#: advtrains_train_japan/init.lua:101 +msgid "Japanese Train Engine" +msgstr "" + +#: advtrains_train_japan/init.lua:176 +msgid "Japanese Train Wagon" +msgstr "" + +#: advtrains_train_steam/init.lua:75 +msgid "Steam Engine" +msgstr "" + +#: advtrains_train_steam/init.lua:159 +msgid "Detailed Steam Engine" +msgstr "" + +#: advtrains_train_steam/init.lua:206 +msgid "Passenger Wagon" +msgstr "" + +#: advtrains_train_steam/init.lua:226 +msgid "Box Wagon" +msgstr "" + +#: advtrains_train_subway/init.lua:144 +msgid "Subway Passenger Wagon" +msgstr "" + +#: advtrains_train_track/init.lua:31 +msgid "Y-turnout" +msgstr "" + +#: advtrains_train_track/init.lua:49 +msgid "3-way turnout" +msgstr "" + +#: advtrains_train_track/init.lua:69 +msgid "Perpendicular Diamond Crossing Track" +msgstr "" + +#: advtrains_train_track/init.lua:91 +msgid "90+Angle Diamond Crossing Track" +msgstr "" + +#: advtrains_train_track/init.lua:132 +msgid "Diagonal Diamond Crossing Track" +msgstr "" + +#: advtrains_train_track/init.lua:179 +msgid "Bumper" +msgstr "" + +#: advtrains_train_track/init.lua:201 +msgid "ATC controller" +msgstr "" + +#: advtrains_train_track/init.lua:317 +msgid "Unloading Track" +msgstr "" + +#: advtrains_train_track/init.lua:342 +msgid "Loading Track" +msgstr "" + +#: advtrains_train_track/init.lua:406 +msgid "Detector Rail" +msgstr "" diff --git a/advtrains/po/de.po b/advtrains/po/de.po index ebd6339..8821fe3 100644 --- a/advtrains/po/de.po +++ b/advtrains/po/de.po @@ -2,18 +2,19 @@ msgid "" msgstr "" "Project-Id-Version: advtrains\n" "Report-Msgid-Bugs-To: advtrains-discuss@lists.sr.ht\n" -"POT-Creation-Date: 2023-10-04 15:40+0200\n" -"PO-Revision-Date: 2022-11-02 15:08+0100\n" +"POT-Creation-Date: 2023-10-09 11:02+0200\n" +"PO-Revision-Date: 2023-10-09 11:18+0200\n" "Last-Translator: Y. Wang \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" #: advtrains/atc.lua:109 -msgid "ATC controller, unconfigured." -msgstr "Nicht konfiguierte Zugbeeinflussungsgleis" +msgid "Unconfigured ATC controller" +msgstr "Nicht konfiguiertes Zugbeeinflussungsgleis" #: advtrains/atc.lua:150 msgid "" @@ -36,21 +37,27 @@ 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!" +msgid "ATC Reverse command warning: didn't reverse train, train moving." msgstr "" -"Zugbeeinflussung: der Befehl „R“ wurde nicht ausgeführt, Zug in Bewegung!" +"Zugbeeinflussung: Der Zug befindet sich in Bewegung und kann nicht umgekehrt " +"werden." #: advtrains/atc.lua:248 -msgid "ATC Kick command warning: Doors closed" +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 -msgid "ATC Kick command warning: Train moving" +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" @@ -60,13 +67,92 @@ msgstr "Zugbeeinflussung: Unvollständiger I-Befehl: @1" 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" + +#: advtrains/copytool.lua:29 +msgid "You do not have the @1 privilege." +msgstr "Ihnen fehlt das „@1“-Privileg." + +#: 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." + +#: 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." + +#: advtrains/copytool.lua:52 advtrains/copytool.lua:57 +msgid "The clipboard is empty." +msgstr "Das Clipboard ist leer." + +#: advtrains/copytool.lua:74 +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 +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 +msgid "No such train: @1." +msgstr "Es gibt keinen mit „@1“ identifizierbaren Zug." + +#: advtrains/copytool.lua:176 +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 +msgid "Train copied." +msgstr "Der Zug wurde Kopiert." + +#: advtrains/couple.lua:28 +msgid "Buffer and Chain Coupler" +msgstr "Schraubenkupplung" + +#: advtrains/couple.lua:29 +msgid "Scharfenberg Coupler" +msgstr "Scharfenbergkupplung" + +#: advtrains/couple.lua:185 +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 "" +msgstr "" + +#: 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 msgid "Boiler" msgstr "" #: advtrains/craft_items.lua:9 -msgid "driver's cab" -msgstr "" +msgid "Driver's cab" +msgstr "Führerstand" #: advtrains/craft_items.lua:15 msgid "Wheel" @@ -92,44 +178,164 @@ msgstr "Hoher @1-Bahnsteig (45°)" msgid "@1 Platform (low, 45 degree)" msgstr "Niedriger @1-Bahnsteig (45°)" +#: advtrains/protection.lua:7 +msgid "Can place, remove and operate trains" +msgstr "" + +#: advtrains/protection.lua:12 +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" +msgstr "" + +#: advtrains/protection.lua:24 +msgid "Can operate turnouts and signals in unprotected areas" +msgstr "" + +#: advtrains/protection.lua:148 +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 +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 +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 +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 rail/bumper/signal/etc." +"Right-click: rotate object" msgstr "" "Gleiswerkzeug\n" "\n" -"Linksklick: Gleistyp ändern, Rechtsklick: Objekt drehen." +"Linksklick: Gleistyp ändern\n" +"Rechtsklick: Objekt drehen" #: advtrains/trackplacer.lua:340 advtrains/trackplacer.lua:377 -msgid "This node can't be rotated using the trackworker!" +msgid "This node can't be rotated using the trackworker." msgstr "Dieser Block kann nicht mit dem Gleiswerkzeug gedreht werden." #: advtrains/trackplacer.lua:350 -msgid "This track can not be rotated!" -msgstr "Dieses Gleis kann nicht gedreht werden!" +msgid "This track can not be rotated." +msgstr "Dieses Gleis kann nicht gedreht werden." #: advtrains/trackplacer.lua:404 -msgid "This node can't be changed using the trackworker!" +msgid "This node can't be changed using the trackworker." msgstr "Dieser Block kann nicht mit dem Gleiswerkzeug bearbeitet werden." #: advtrains/trackplacer.lua:414 -msgid "This track can not be changed!" -msgstr "Dieses Gleis kann nicht geändert werden!" +msgid "This track can not be changed." +msgstr "Dieses Gleis kann nicht geändert werden." + +#: 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 +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)." +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." +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." +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 "" #: 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." #: advtrains/wagons.lua:203 -msgid "The wagon's inventory is not empty!" -msgstr "Das Inventar dieses Waggons ist nicht leer!" +msgid "The wagon's inventory is not empty." +msgstr "Das Inventar dieses Waggons ist nicht leer." #: advtrains/wagons.lua:210 msgid "Wagon needs to be decoupled from other wagons in order to destroy it." -msgstr "" +msgstr "Der Waggon muss abgekoppelt sein, damit Sie ihn abbauen können." #: advtrains/wagons.lua:216 msgid "" @@ -163,9 +369,21 @@ msgstr "Ausstieg zwingen" msgid "(Doors closed)" msgstr "(Türen geschlossen)" +#: advtrains/wagons.lua:692 +msgid "This wagon has no seats." +msgstr "In diesem Waggon ist kein Sitzplatz vorhanden." + +#: advtrains/wagons.lua:703 +msgid "This wagon is full." +msgstr "Der Waggon ist voll." + +#: advtrains/wagons.lua:706 +msgid "Doors are closed! (Try holding sneak key!)" +msgstr "Die Türen sind geschlossen." + #: advtrains/wagons.lua:712 -msgid "Can't get on: " -msgstr "" +msgid "You can't get on this wagon." +msgstr "Sie können nicht in diesen Waggon einsteigen." #: advtrains/wagons.lua:838 msgid "Select seat:" @@ -193,195 +411,41 @@ msgstr "" #: advtrains/wagons.lua:1241 msgid "" -"Doors are closed! Use Sneak+rightclick to ignore the closed doors and get " -"off!" +"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." -#: advtrains/trainhud.lua:305 -msgid "OVERRUN RED SIGNAL! Examine situation and reverse train to move again." -msgstr "" - -#: 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 -msgid "@1 Slope" -msgstr "@1 Steigung" - -#: advtrains/tracks.lua:648 advtrains/tracks.lua:653 -msgid "Can't place: not pointing at node" -msgstr "Es kann nicht platziert werden: Sie zeigen nicht auf einem Block." - -#: advtrains/tracks.lua:658 -msgid "Can't place: space occupied!" -msgstr "Es kann nicht platziert werden: diese Position ist besetzt." - -#: advtrains/tracks.lua:711 -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: 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: no supporting node at upper end." -msgstr "" -"Es kann nicht platziert werden: es gibt keinen unterstützenden Block am Ende " -"der Steigung." - -#: 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 (l)" -msgstr "An der linken Seite montiertes Signal" - -#: advtrains/signals.lua:192 -msgid "Wallmounted Signal (r)" -msgstr "An der rechten Seite montiertes Signal" - -#: advtrains/signals.lua:193 -msgid "Wallmounted Signal (t)" -msgstr "An der Decke montiertes Signal" - -#: advtrains/signals.lua:281 advtrains/signals.lua:322 -msgid "Andrew's Cross" -msgstr "" - -#: advtrains/couple.lua:28 -msgid "Buffer and Chain Coupler" -msgstr "Schraubenkupplung" - -#: advtrains/couple.lua:29 -msgid "Scharfenberg Coupler" -msgstr "Scharfenbergkupplung" - -#: advtrains/couple.lua:185 -msgid "" -"You are not allowed to couple trains without the train_operator privilege." -msgstr "Sie dürfen ohne das „train_builder“-Privileg keine Züge ankuppeln." - -#: advtrains/couple.lua:329 advtrains/couple.lua:333 -msgid "" -msgstr "" - -#: 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/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" - -#: advtrains/copytool.lua:29 -msgid "You do not have the @1 privilege." -msgstr "Ihnen fehlt das „@1“-Privileg." - -#: 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." - -#: 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." - -#: advtrains/copytool.lua:52 advtrains/copytool.lua:57 -msgid "The clipboard is empty." -msgstr "Das Clipboard ist leer." - -#: advtrains/copytool.lua:74 -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 -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 -msgid "No such train: @1" -msgstr "Es gibt keinen mit „@1“ identifizierbaren Zug." - -#: advtrains/copytool.lua:176 -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/wagons.lua:1250 +msgid "You are not allowed to access the driver stand." +msgstr "Sie haben keinen Zugang zum Führerstand." -#: advtrains/copytool.lua:180 -msgid "Train copied!" -msgstr "Der Zug wurde Kopiert." +#: advtrains_interlocking/tsr_rail.lua:13 +msgid "Point speed restriction: @1" +msgstr "Geschwindigkeitskontrolle: @1" -#: advtrains/protection.lua:148 -msgid "" -"You are not allowed to build near tracks without the track_builder privilege." +#: advtrains_interlocking/tsr_rail.lua:14 +msgid "Set point speed restriction:" msgstr "" -"Sie dürfen ohne das „track_builder“-Privileg nicht in der Nähe von Gleisen " -"bauen." -#: advtrains/protection.lua:148 -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_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/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_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/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 -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_interlocking/tsr_rail.lua:64 +msgid "Point Speed Restriction Track" +msgstr "Geschwindigkeitskontrollgleis" #: advtrains_line_automation/stoprail.lua:54 msgid "Station Code" -msgstr "Code der Haltestelle" +msgstr "Kennzeichen der Haltestelle" #: advtrains_line_automation/stoprail.lua:55 msgid "Station Name" @@ -406,65 +470,101 @@ msgstr "Wartezeit" #: advtrains_line_automation/stoprail.lua:60 msgid "Door Side" -msgstr "" +msgstr "Türseite" #: advtrains_line_automation/stoprail.lua:62 msgid "Reverse train" -msgstr "" +msgstr "Zug Umkehren" #: advtrains_line_automation/stoprail.lua:63 msgid "Kick out passengers" +msgstr "Fahrgäste zum 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." -#: advtrains_luaautomation/pcnaming.lua:26 -msgid "" -"Passive Component Naming Tool\n" -"\n" -"Right-click to name a passive component." +#: advtrains_line_automation/stoprail.lua:111 +msgid "This station is owned by @1. You are not allowed to edit its name." msgstr "" -"PC-Benennungswerkzeug\n" -"\n" -"Rechtsklick zur Benennung der passiven Komponente" +"Diese Haltestelle wird von @1 verwaltet. Sie dürfen sie nicht umbenennen." -#: advtrains_train_track/init.lua:31 -msgid "Y-turnout" -msgstr "Y-Weiche" +#: advtrains_line_automation/stoprail.lua:221 +msgid "Station/Stop Track" +msgstr "Gleis zur Kennzeichnung einer Haltestelle" -#: advtrains_train_track/init.lua:49 -msgid "3-way turnout" -msgstr "Dreiwegweiche" +#: advtrains_luaautomation/active_common.lua:17 +msgid "Unconfigured LuaATC component" +msgstr "Nicht konfiguierter LuaATC-Bauteil" -#: advtrains_train_track/init.lua:69 -msgid "Perpendicular Diamond Crossing Track" -msgstr "Kreuzung mit zueinander orthogonalen Gleisen" +#: advtrains_luaautomation/active_common.lua:46 +msgid "LuaATC Environment" +msgstr "" -#: advtrains_train_track/init.lua:91 -msgid "90+Angle Diamond Crossing Track" -msgstr "Kreuzung mit einem achsenparallelen Gleis" +#: advtrains_luaautomation/active_common.lua:49 +msgid "Clear Local Environment" +msgstr "" -#: advtrains_train_track/init.lua:132 -msgid "Diagonal Diamond Crossing Track" -msgstr "Diagonale Gleiskreuzung" +#: advtrains_luaautomation/active_common.lua:50 +msgid "Code" +msgstr "" -#: advtrains_train_track/init.lua:179 -msgid "Bumper" -msgstr "Prellbock" +#: 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." -#: advtrains_train_track/init.lua:201 -msgid "ATC controller" -msgstr "Zugbeeinflussungsgleis" +#: advtrains_luaautomation/active_common.lua:94 +msgid "LuaATC component assigned to environment '@1'" +msgstr "" -#: advtrains_train_track/init.lua:317 -msgid "Unloading Track" -msgstr "Abladungsgleis" +#: advtrains_luaautomation/active_common.lua:96 +msgid "LuaATC component assigned to an invalid environment" +msgstr "" -#: advtrains_train_track/init.lua:342 -msgid "Loading Track" -msgstr "Beladungsgleis" +#: advtrains_luaautomation/active_common.lua:171 +msgid "LuaATC component with error: @1" +msgstr "LuaATC-Bauteil mit Fehlermeldung: @1" -#: advtrains_train_track/init.lua:406 -msgid "Detector Rail" -msgstr "Detektorgleis" +#: 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)" + +#: advtrains_luaautomation/mesecon_controller.lua:211 +msgid "LuaATC Mesecon Controller" +msgstr "" + +#: advtrains_luaautomation/operation_panel.lua:11 +msgid "LuaATC Operation Panel" +msgstr "" + +#: 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." + +#: 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." + +#: advtrains_luaautomation/pcnaming.lua:62 +msgid "Set name of component (empty to clear)" +msgstr "" #: advtrains_train_industrial/init.lua:10 #: advtrains_train_industrial/init.lua:49 advtrains_train_steam/init.lua:20 @@ -516,7 +616,7 @@ msgstr "Dampflokomotive" #: advtrains_train_steam/init.lua:159 msgid "Detailed Steam Engine" -msgstr "detaillierte Dampflokomotive" +msgstr "Detaillierte Dampflokomotive" #: advtrains_train_steam/init.lua:206 msgid "Passenger Wagon" @@ -530,27 +630,45 @@ msgstr "Güterwaggon" msgid "Subway Passenger Wagon" msgstr "U-Bahn-Waggon" -#~ msgid "This position is protected!" -#~ msgstr "Diese Position ist geschützt!" +#: advtrains_train_track/init.lua:31 +msgid "Y-turnout" +msgstr "Y-Weiche" -#~ msgid "Can't place: protected position!" -#~ msgstr "Es kann nicht platziert werden: diese Position ist geschützt." +#: advtrains_train_track/init.lua:49 +msgid "3-way turnout" +msgstr "Dreiwegweiche" -#~ msgid "Deprecated Track" -#~ msgstr "ausrangiertes Gleis, nicht verwenden." +#: advtrains_train_track/init.lua:69 +msgid "Perpendicular Diamond Crossing Track" +msgstr "Kreuzung mit zueinander orthogonalen Gleisen" -#~ 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." +#: advtrains_train_track/init.lua:91 +msgid "90+Angle Diamond Crossing Track" +msgstr "Kreuzung mit einem achsenparallelen Gleis" -#~ msgid "Use Sneak+rightclick to bypass closed doors!" -#~ msgstr "" -#~ "Nutzen Sie Schleichen+Rechtsklick, um trotz geschlossener Türen " -#~ "einzusteigen." +#: advtrains_train_track/init.lua:132 +msgid "Diagonal Diamond Crossing Track" +msgstr "Diagonale Gleiskreuzung" -#~ msgid "Access to @1" -#~ msgstr "Zugang zu @1" +#: advtrains_train_track/init.lua:179 +msgid "Bumper" +msgstr "Prellbock" + +#: advtrains_train_track/init.lua:201 +msgid "ATC controller" +msgstr "Zugbeeinflussungsgleis" + +#: advtrains_train_track/init.lua:317 +msgid "Unloading Track" +msgstr "Abladungsgleis" + +#: advtrains_train_track/init.lua:342 +msgid "Loading Track" +msgstr "Beladungsgleis" + +#: advtrains_train_track/init.lua:406 +msgid "Detector Rail" +msgstr "Detektorgleis" #~ msgid "" #~ "ATC controller, mode @1\n" @@ -559,13 +677,28 @@ msgstr "U-Bahn-Waggon" #~ "Zugbeeinflussungsgleis in Betriebsart „@1“\n" #~ "Kanal: @2" -#~ msgid "Lock couples" -#~ msgstr "Kupplungen sperren" +#~ msgid "Access to @1" +#~ msgstr "Zugang zu @1" -#~ msgid "" -#~ "You need to own at least one neighboring wagon to destroy this couple." +#~ msgid "Can't get on: wagon full or doors closed!" #~ msgstr "" -#~ "Sie müssen Besitzer eines angrenzenden Waggons sein, um hier abzukuppeln." +#~ "Sie können nicht einsteigen: der Waggon ist voll oder die Türen sind " +#~ "geschlossen." + +#~ msgid "Can't place: protected position!" +#~ msgstr "Es kann nicht platziert werden: diese Position ist geschützt." + +#~ msgid "Default Seat" +#~ msgstr "Standardsitzplatz" + +#~ msgid "Default Seat (driver stand)" +#~ msgstr "Standardsitzplatz (Führerstand)" + +#~ msgid "Deprecated Track" +#~ msgstr "ausrangiertes Gleis, nicht verwenden." + +#~ msgid "Lock couples" +#~ msgstr "Kupplungen sperren" #~ msgid "Speed:" #~ msgstr "Geschw.:" @@ -573,8 +706,19 @@ msgstr "U-Bahn-Waggon" #~ msgid "Target:" #~ msgstr "Zielges.:" -#~ msgid "Default Seat" -#~ msgstr "Standardsitzplatz" +#~ msgid "This position is protected!" +#~ msgstr "Diese Position ist geschützt!" -#~ msgid "Default Seat (driver stand)" -#~ msgstr "Standardsitzplatz (Führerstand)" +#~ msgid "Use Sneak+rightclick to bypass closed doors!" +#~ msgstr "" +#~ "Nutzen Sie Schleichen+Rechtsklick, um trotz geschlossener Türen " +#~ "einzusteigen." + +#, fuzzy +#~ msgid "You are not allowed to modify this protected track." +#~ msgstr "Sie dürfen an geschützten Stellen kein Gleis bauen." + +#~ 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 9a16799..3cb68b0 100644 --- a/advtrains/po/fr.po +++ b/advtrains/po/fr.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-04 15:40+0200\n" +"POT-Creation-Date: 2023-10-09 11:02+0200\n" "PO-Revision-Date: 2022-07-05 10:11+0200\n" "Last-Translator: Tanavit \n" "Language-Team: French\n" @@ -12,7 +12,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: advtrains/atc.lua:109 -msgid "ATC controller, unconfigured." +msgid "Unconfigured ATC controller" msgstr "Controlleur ATC, non-configuré " #: advtrains/atc.lua:150 @@ -36,20 +36,22 @@ msgid "Digiline channel" msgstr "Canal Digiline" #: advtrains/atc.lua:189 advtrains_line_automation/stoprail.lua:65 +#: advtrains_luaautomation/active_common.lua:48 msgid "Save" msgstr "Sauvegarder" #: advtrains/atc.lua:236 -msgid "ATC Reverse command warning: didn't reverse train, train moving!" +#, fuzzy +msgid "ATC Reverse command warning: didn't reverse train, train moving." msgstr "" "Attention : Commande ATC de renversement impossible car le train se déplace !" #: advtrains/atc.lua:248 -msgid "ATC Kick command warning: Doors closed" +msgid "ATC Kick command warning: doors are closed." msgstr "" #: advtrains/atc.lua:252 -msgid "ATC Kick command warning: Train moving" +msgid "ATC Kick command warning: train moving." msgstr "" #: advtrains/atc.lua:322 @@ -60,12 +62,89 @@ msgstr "Erreur de syntaxe de commande ATC : instruction \"I\" incomplète : @1" msgid "ATC command parse error: Unknown command: @1" msgstr "Erreur d'analyse de commande ATC : Commande inconnue : @1" +#: advtrains/copytool.lua:8 +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" + +#: advtrains/copytool.lua:29 +msgid "You do not have the @1 privilege." +msgstr "Vous ne possédez pas le privilège \"@1\"." + +#: advtrains/copytool.lua:41 +#, fuzzy +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é." + +#: advtrains/couple.lua:28 +msgid "Buffer and Chain Coupler" +msgstr "Attelage à tampon et vis" + +#: advtrains/couple.lua:29 +msgid "Scharfenberg Coupler" +msgstr "Attelage Scharfenberg" + +#: advtrains/couple.lua:185 +msgid "" +"You are not allowed to couple trains without the train_operator privilege." +msgstr "" + +#: advtrains/couple.lua:329 advtrains/couple.lua:333 +msgid "" +msgstr "" + +#: 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 msgid "Boiler" msgstr "Chaudière à vapeur" #: advtrains/craft_items.lua:9 -msgid "driver's cab" +msgid "Driver's cab" msgstr "Cabine de pilotage" #: advtrains/craft_items.lua:15 @@ -92,12 +171,86 @@ msgstr "Quai @1 (haut, 45°)" msgid "@1 Platform (low, 45 degree)" msgstr "Quai @1 (bas, 45°)" +#: advtrains/protection.lua:7 +msgid "Can place, remove and operate trains" +msgstr "" + +#: advtrains/protection.lua:12 +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" +msgstr "" + +#: advtrains/protection.lua:24 +msgid "Can operate turnouts and signals in unprotected areas" +msgstr "" + +#: advtrains/protection.lua:148 +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 +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 +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)" + +#: advtrains/signals.lua:63 +msgid "Lampless Signal" +msgstr "Sémaphore" + +#: advtrains/signals.lua:127 +msgid "Signal" +msgstr "" + +#: advtrains/signals.lua:191 +msgid "Wallmounted Signal (left)" +msgstr "Signal mural (gauche)" + +#: advtrains/signals.lua:192 +msgid "Wallmounted Signal (right)" +msgstr "Signal mural (droit)" + +#: advtrains/signals.lua:193 +msgid "Wallmounted Signal (top)" +msgstr "Signal mural (plafond)" + +#: advtrains/signals.lua:281 advtrains/signals.lua:322 +msgid "Andrew's Cross" +msgstr "Croix de Saint André" + #: advtrains/trackplacer.lua:313 +#, fuzzy msgid "" "Track Worker Tool\n" "\n" "Left-click: change rail type (straight/curve/switch)\n" -"Right-click: rotate rail/bumper/signal/etc." +"Right-click: rotate object" msgstr "" "Outil \"Trackworker\"\n" "\n" @@ -106,28 +259,80 @@ msgstr "" "Clic-Droit : tourne le rail/butoir/signal/etc..." #: advtrains/trackplacer.lua:340 advtrains/trackplacer.lua:377 -msgid "This node can't be rotated using the trackworker!" +#, fuzzy +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 !" +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!" +#, fuzzy +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 !" +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 +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 +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" + +#: advtrains/tracks.lua:648 advtrains/tracks.lua:653 +#, fuzzy +msgid "Can't place slope: not pointing at node." +msgstr "Placement impossible : ne pointe pas un nœud" + +#: advtrains/tracks.lua:658 +#, fuzzy +msgid "Can't place slope: space occupied." +msgstr "Placement impossible : espace occupé" + +#: advtrains/tracks.lua:711 +#, fuzzy +msgid "Can't place slope: Not enough slope items left (@1 required)." +msgstr "" +"Placement impossible : quantité insuffisante de voie pentue (@1 manquant)" + +#: advtrains/tracks.lua:714 +#, fuzzy +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" + +#: advtrains/tracks.lua:721 +#, fuzzy +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" + +#: advtrains/trainhud.lua:305 +msgid "OVERRUN RED SIGNAL! Examine situation and reverse train to move again." +msgstr "" #: 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." #: advtrains/wagons.lua:203 -msgid "The wagon's inventory is not empty!" -msgstr "Le stock de ce wagon n'est pas vide !" +msgid "The wagon's inventory is not empty." +msgstr "Le stock de ce wagon n'est pas vide." #: advtrains/wagons.lua:210 msgid "Wagon needs to be decoupled from other wagons in order to destroy it." @@ -166,8 +371,20 @@ msgstr "Débarquer (de force)" msgid "(Doors closed)" msgstr "(Portes closes)" +#: advtrains/wagons.lua:692 +msgid "This wagon has no seats." +msgstr "" + +#: advtrains/wagons.lua:703 +msgid "This wagon is full." +msgstr "" + +#: advtrains/wagons.lua:706 +msgid "Doors are closed! (Try holding sneak key!)" +msgstr "" + #: advtrains/wagons.lua:712 -msgid "Can't get on: " +msgid "You can't get on this wagon." msgstr "" #: advtrains/wagons.lua:838 @@ -195,188 +412,39 @@ msgid "Routingcode" msgstr "Code de routage" #: advtrains/wagons.lua:1241 +#, fuzzy msgid "" -"Doors are closed! Use Sneak+rightclick to ignore the closed doors and get " -"off!" +"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/trainhud.lua:305 -msgid "OVERRUN RED SIGNAL! Examine situation and reverse train to move again." -msgstr "" - -#: advtrains/tracks.lua:449 -msgid "This track can not be removed!" -msgstr "Cette voie ne peut pas être enlevée !" - -#: advtrains/tracks.lua:616 -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 -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" - -#: advtrains/tracks.lua:648 advtrains/tracks.lua:653 -msgid "Can't place: not pointing at node" -msgstr "Placement impossible : ne pointe pas un nœud" - -#: advtrains/tracks.lua:658 -msgid "Can't place: space occupied!" -msgstr "Placement impossible : espace occupé" - -#: advtrains/tracks.lua:711 -msgid "Can't place: Not enough slope items left (@1 required)" -msgstr "" -"Placement impossible : quantité insuffisante de voie pentue (@1 manquant)" - -#: advtrains/tracks.lua:714 -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" - -#: advtrains/tracks.lua:721 -msgid "Can't place: no supporting node at upper end." -msgstr "Placement impossible : pas de nœud d'appui à l'extrémité supérieure" - -#: advtrains/signals.lua:63 -msgid "Lampless Signal" -msgstr "Sémaphore" - -#: advtrains/signals.lua:127 -msgid "Signal" -msgstr "" - -#: advtrains/signals.lua:191 -msgid "Wallmounted Signal (l)" -msgstr "Signal mural (gauche)" - -#: advtrains/signals.lua:192 -msgid "Wallmounted Signal (r)" -msgstr "Signal mural (droit)" - -#: advtrains/signals.lua:193 -msgid "Wallmounted Signal (t)" -msgstr "Signal mural (plafond)" - -#: advtrains/signals.lua:281 advtrains/signals.lua:322 -msgid "Andrew's Cross" -msgstr "Croix de Saint André" - -#: advtrains/couple.lua:28 -msgid "Buffer and Chain Coupler" -msgstr "Attelage à tampon et vis" - -#: advtrains/couple.lua:29 -msgid "Scharfenberg Coupler" -msgstr "Attelage Scharfenberg" - -#: advtrains/couple.lua:185 -msgid "" -"You are not allowed to couple trains without the train_operator privilege." +#: advtrains/wagons.lua:1250 +msgid "You are not allowed to access the driver stand." msgstr "" -#: advtrains/couple.lua:329 advtrains/couple.lua:333 -msgid "" +#: advtrains_interlocking/tsr_rail.lua:13 +msgid "Point speed restriction: @1" msgstr "" -#: advtrains/couple.lua:334 -msgid "Can not couple: The couplers of the trains do not match (@1 and @2)." +#: advtrains_interlocking/tsr_rail.lua:14 +msgid "Set point speed restriction:" msgstr "" -"Accouplement impossible: les attelages des trains ne concordent pas (@1 et " -"@2)." -#: advtrains/copytool.lua:8 -msgid "" -"Train copy/paste tool\n" -"\n" -"Left-click: copy train\n" -"Right-click: paste train" +#: advtrains_interlocking/tsr_rail.lua:30 +msgid "You are not allowed to configure this track without the @1 privilege." msgstr "" -"Outil de copie/collage de train\n" -"\n" -"Clic-Gauche : copie\n" -"\n" -"Clic-Droit : collage" - -#: advtrains/copytool.lua:29 -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é !" - -#: advtrains/protection.lua:148 -msgid "" -"You are not allowed to build near tracks without the track_builder privilege." +#: 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 ne pouvez pas construire à proximité d'une voie sans le privilège " -"\"track_builder\" (?)" -#: advtrains/protection.lua:148 -msgid "" -"You are not allowed to build tracks without the track_builder privilege." +#: advtrains_interlocking/tsr_rail.lua:64 +msgid "Point Speed Restriction Track" 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 -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)" #: advtrains_line_automation/stoprail.lua:54 msgid "Station Code" @@ -415,55 +483,85 @@ msgstr "" msgid "Kick out passengers" msgstr "" -#: advtrains_luaautomation/pcnaming.lua:26 -msgid "" -"Passive Component Naming Tool\n" -"\n" -"Right-click to name a passive component." +#: advtrains_line_automation/stoprail.lua:97 +msgid "Station code \"@1\" already exists and is owned by @2." msgstr "" -"Outil de nommage de composant passif\n" -"\n" -"Clic-Droit pour nommer un composant passif." -#: advtrains_train_track/init.lua:31 -msgid "Y-turnout" -msgstr "Embranchement en Y" +#: advtrains_line_automation/stoprail.lua:111 +msgid "This station is owned by @1. You are not allowed to edit its name." +msgstr "" -#: advtrains_train_track/init.lua:49 -msgid "3-way turnout" -msgstr "Embranchement triple" +#: advtrains_line_automation/stoprail.lua:221 +msgid "Station/Stop Track" +msgstr "" -#: advtrains_train_track/init.lua:69 -msgid "Perpendicular Diamond Crossing Track" -msgstr "Croisement perpendiculaire" +#: advtrains_luaautomation/active_common.lua:17 +msgid "Unconfigured LuaATC component" +msgstr "" -#: advtrains_train_track/init.lua:91 -msgid "90+Angle Diamond Crossing Track" -msgstr "Croisement perpendiculo-diagonal" +#: advtrains_luaautomation/active_common.lua:46 +msgid "LuaATC Environment" +msgstr "" -#: advtrains_train_track/init.lua:132 -msgid "Diagonal Diamond Crossing Track" -msgstr "Croisement diagonal" +#: advtrains_luaautomation/active_common.lua:49 +msgid "Clear Local Environment" +msgstr "" -#: advtrains_train_track/init.lua:179 -msgid "Bumper" -msgstr "Heurtoir" +#: advtrains_luaautomation/active_common.lua:50 +msgid "Code" +msgstr "" -#: advtrains_train_track/init.lua:201 -msgid "ATC controller" -msgstr "Controlleur ATC" +#: advtrains_luaautomation/active_common.lua:64 +msgid "" +"You are not allowed to configure this LuaATC component without the @1 " +"privilege." +msgstr "" -#: advtrains_train_track/init.lua:317 -msgid "Unloading Track" -msgstr "Voie de Déchargement" +#: advtrains_luaautomation/active_common.lua:94 +msgid "LuaATC component assigned to environment '@1'" +msgstr "" -#: advtrains_train_track/init.lua:342 -msgid "Loading Track" -msgstr "Voie de Chargement" +#: advtrains_luaautomation/active_common.lua:96 +msgid "LuaATC component assigned to an invalid environment" +msgstr "" -#: advtrains_train_track/init.lua:406 -msgid "Detector Rail" -msgstr "Voie détectrice" +#: advtrains_luaautomation/active_common.lua:171 +msgid "LuaATC component with error: @1" +msgstr "" + +#: advtrains_luaautomation/init.lua:13 +msgid "" +"Can place and configure LuaATC components, including execute potentially " +"harmful Lua code" +msgstr "" + +#: advtrains_luaautomation/mesecon_controller.lua:211 +msgid "LuaATC Mesecon Controller" +msgstr "" + +#: advtrains_luaautomation/operation_panel.lua:11 +msgid "LuaATC Operation Panel" +msgstr "" + +#: 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." + +#: advtrains_luaautomation/pcnaming.lua:39 +msgid "" +"You are not allowed to name LuaATC passive components without the @1 " +"privilege." +msgstr "" + +#: advtrains_luaautomation/pcnaming.lua:62 +msgid "Set name of component (empty to clear)" +msgstr "" #: advtrains_train_industrial/init.lua:10 #: advtrains_train_industrial/init.lua:49 advtrains_train_steam/init.lua:20 @@ -529,26 +627,45 @@ msgstr "Wagon de frêt" msgid "Subway Passenger Wagon" msgstr "Voiture de Métropolitain" -#~ msgid "This position is protected!" -#~ msgstr "Cet emplacement est protégé !" +#: advtrains_train_track/init.lua:31 +msgid "Y-turnout" +msgstr "Embranchement en Y" -#~ msgid "Can't place: protected position!" -#~ msgstr "Placement impossible : emplacement protégé" +#: advtrains_train_track/init.lua:49 +msgid "3-way turnout" +msgstr "Embranchement triple" -#~ msgid "Deprecated Track" -#~ msgstr "Voie déconseillée" +#: advtrains_train_track/init.lua:69 +msgid "Perpendicular Diamond Crossing Track" +msgstr "Croisement perpendiculaire" -#~ msgid "Can't get on: wagon full or doors closed!" -#~ msgstr "" -#~ "Embarquement impossible : le wagon est plein ou ses portes sont closes !" +#: advtrains_train_track/init.lua:91 +msgid "90+Angle Diamond Crossing Track" +msgstr "Croisement perpendiculo-diagonal" -#~ msgid "Use Sneak+rightclick to bypass closed doors!" -#~ msgstr "" -#~ "Utilisez \"Marcher lentement (Sneak)\" et Clic-Droit pour franchir les " -#~ "portes closes !" +#: advtrains_train_track/init.lua:132 +msgid "Diagonal Diamond Crossing Track" +msgstr "Croisement diagonal" -#~ msgid "Access to @1" -#~ msgstr "Accès à @1" +#: 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" + +#: advtrains_train_track/init.lua:342 +msgid "Loading Track" +msgstr "Voie de Chargement" + +#: advtrains_train_track/init.lua:406 +msgid "Detector Rail" +msgstr "Voie détectrice" #~ msgid "" #~ "ATC controller, mode @1\n" @@ -557,14 +674,27 @@ msgstr "Voiture de Métropolitain" #~ "Controlleur ATC, mode @1\n" #~ "Canal : @2" -#~ msgid "Lock couples" -#~ msgstr "Verrouiller l'accouplement" +#~ msgid "Access to @1" +#~ msgstr "Accès à @1" -#~ msgid "" -#~ "You need to own at least one neighboring wagon to destroy this couple." +#~ msgid "Can't get on: wagon full or doors closed!" #~ msgstr "" -#~ "Vous devez être propriétaire d'au moins un wagon voisin pour supprimer " -#~ "cet attelage." +#~ "Embarquement impossible : le wagon est plein ou ses portes sont closes !" + +#~ msgid "Can't place: protected position!" +#~ msgstr "Placement impossible : emplacement protégé" + +#~ msgid "Default Seat" +#~ msgstr "Siège par défaut" + +#~ msgid "Default Seat (driver stand)" +#~ msgstr "Siège par défaut (poste de pilotage)" + +#~ msgid "Deprecated Track" +#~ msgstr "Voie déconseillée" + +#~ msgid "Lock couples" +#~ msgstr "Verrouiller l'accouplement" #~ msgid "Speed:" #~ msgstr "Vitesse : " @@ -572,8 +702,24 @@ msgstr "Voiture de Métropolitain" #~ msgid "Target:" #~ msgstr "Destination : " -#~ msgid "Default Seat" -#~ msgstr "Siège par défaut" +#, fuzzy +#~ msgid "This node can't be rotated using the trackworker," +#~ msgstr "Ce nœud ne peut être tourné avec l'outil \"Trackworker\" !" -#~ msgid "Default Seat (driver stand)" -#~ msgstr "Siège par défaut (poste de pilotage)" +#~ msgid "This position is protected!" +#~ msgstr "Cet emplacement est protégé !" + +#~ msgid "Use Sneak+rightclick to bypass closed doors!" +#~ msgstr "" +#~ "Utilisez \"Marcher lentement (Sneak)\" et Clic-Droit pour franchir les " +#~ "portes closes !" + +#, 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 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." diff --git a/advtrains/po/template.pot b/advtrains/po/template.pot deleted file mode 100644 index 23aaa6a..0000000 --- a/advtrains/po/template.pot +++ /dev/null @@ -1,505 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the advtrains package. -# FIRST AUTHOR , YEAR. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: advtrains\n" -"Report-Msgid-Bugs-To: advtrains-discuss@lists.sr.ht\n" -"POT-Creation-Date: 2023-10-04 15:40+0200\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=CHARSET\n" -"Content-Transfer-Encoding: 8bit\n" - -#: advtrains/atc.lua:109 -msgid "ATC controller, unconfigured." -msgstr "" - -#: advtrains/atc.lua:150 -msgid "" -"ATC controller, mode @1\n" -"Command: @2" -msgstr "" - -#: advtrains/atc.lua:180 -msgid "Command" -msgstr "" - -#: advtrains/atc.lua:184 -msgid "Command (on)" -msgstr "" - -#: advtrains/atc.lua:187 -msgid "Digiline channel" -msgstr "" - -#: advtrains/atc.lua:189 advtrains_line_automation/stoprail.lua:65 -msgid "Save" -msgstr "" - -#: advtrains/atc.lua:236 -msgid "ATC Reverse command warning: didn't reverse train, train moving!" -msgstr "" - -#: advtrains/atc.lua:248 -msgid "ATC Kick command warning: Doors closed" -msgstr "" - -#: advtrains/atc.lua:252 -msgid "ATC Kick command warning: Train moving" -msgstr "" - -#: advtrains/atc.lua:322 -msgid "ATC command syntax error: I statement not closed: @1" -msgstr "" - -#: advtrains/atc.lua:385 -msgid "ATC command parse error: Unknown command: @1" -msgstr "" - -#: advtrains/craft_items.lua:3 -msgid "Boiler" -msgstr "" - -#: advtrains/craft_items.lua:9 -msgid "driver's cab" -msgstr "" - -#: advtrains/craft_items.lua:15 -msgid "Wheel" -msgstr "" - -#: advtrains/craft_items.lua:21 -msgid "Chimney" -msgstr "" - -#: advtrains/misc_nodes.lua:16 -msgid "@1 Platform (low)" -msgstr "" - -#: advtrains/misc_nodes.lua:33 -msgid "@1 Platform (high)" -msgstr "" - -#: advtrains/misc_nodes.lua:59 -msgid "@1 Platform (45 degree)" -msgstr "" - -#: advtrains/misc_nodes.lua:81 -msgid "@1 Platform (low, 45 degree)" -msgstr "" - -#: advtrains/trackplacer.lua:313 -msgid "" -"Track Worker Tool\n" -"\n" -"Left-click: change rail type (straight/curve/switch)\n" -"Right-click: rotate rail/bumper/signal/etc." -msgstr "" - -#: 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/wagons.lua:179 -msgid "This wagon is owned by @1, you can't destroy it." -msgstr "" - -#: advtrains/wagons.lua:203 -msgid "The wagon's inventory is not empty!" -msgstr "" - -#: advtrains/wagons.lua:210 -msgid "Wagon needs to be decoupled from other wagons in order to destroy it." -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." -msgstr "" - -#: advtrains/wagons.lua:649 advtrains/wagons.lua:850 -msgid "Show Inventory" -msgstr "" - -#: advtrains/wagons.lua:652 -msgid "Onboard Computer" -msgstr "" - -#: advtrains/wagons.lua:655 advtrains/wagons.lua:1328 -msgid "Wagon properties" -msgstr "" - -#: advtrains/wagons.lua:658 -msgid "Get off" -msgstr "" - -#: advtrains/wagons.lua:661 -msgid "Get off (forced)" -msgstr "" - -#: advtrains/wagons.lua:663 -msgid "(Doors closed)" -msgstr "" - -#: advtrains/wagons.lua:712 -msgid "Can't get on: " -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 "" - -#: advtrains/wagons.lua:967 -msgid "Line" -msgstr "" - -#: advtrains/wagons.lua:968 -msgid "Routingcode" -msgstr "" - -#: advtrains/wagons.lua:1241 -msgid "" -"Doors are closed! Use Sneak+rightclick to ignore the closed doors and get " -"off!" -msgstr "" - -#: advtrains/trainhud.lua:305 -msgid "OVERRUN RED SIGNAL! Examine situation and reverse train to move again." -msgstr "" - -#: advtrains/tracks.lua:449 -msgid "This track can not be removed!" -msgstr "" - -#: advtrains/tracks.lua:616 -msgid "Position is occupied by a train." -msgstr "" - -#: advtrains/tracks.lua:622 -msgid "There's a Track Circuit Break here." -msgstr "" - -#: advtrains/tracks.lua:626 -msgid "There's a Signal Influence Point here." -msgstr "" - -#: advtrains/tracks.lua:637 -msgid "@1 Slope" -msgstr "" - -#: advtrains/tracks.lua:648 advtrains/tracks.lua:653 -msgid "Can't place: not pointing at node" -msgstr "" - -#: advtrains/tracks.lua:658 -msgid "Can't place: space occupied!" -msgstr "" - -#: advtrains/tracks.lua:711 -msgid "Can't place: Not enough slope items left (@1 required)" -msgstr "" - -#: advtrains/tracks.lua:714 -msgid "Can't place: There's no slope of length @1" -msgstr "" - -#: advtrains/tracks.lua:721 -msgid "Can't place: no supporting node at upper end." -msgstr "" - -#: advtrains/signals.lua:63 -msgid "Lampless Signal" -msgstr "" - -#: advtrains/signals.lua:127 -msgid "Signal" -msgstr "" - -#: advtrains/signals.lua:191 -msgid "Wallmounted Signal (l)" -msgstr "" - -#: advtrains/signals.lua:192 -msgid "Wallmounted Signal (r)" -msgstr "" - -#: advtrains/signals.lua:193 -msgid "Wallmounted Signal (t)" -msgstr "" - -#: advtrains/signals.lua:281 advtrains/signals.lua:322 -msgid "Andrew's Cross" -msgstr "" - -#: advtrains/couple.lua:28 -msgid "Buffer and Chain Coupler" -msgstr "" - -#: advtrains/couple.lua:29 -msgid "Scharfenberg Coupler" -msgstr "" - -#: advtrains/couple.lua:185 -msgid "" -"You are not allowed to couple trains without the train_operator privilege." -msgstr "" - -#: advtrains/couple.lua:329 advtrains/couple.lua:333 -msgid "" -msgstr "" - -#: advtrains/couple.lua:334 -msgid "Can not couple: The couplers of the trains do not match (@1 and @2)." -msgstr "" - -#: advtrains/copytool.lua:8 -msgid "" -"Train copy/paste tool\n" -"\n" -"Left-click: copy train\n" -"Right-click: paste train" -msgstr "" - -#: advtrains/copytool.lua:29 -msgid "You do not have the @1 privilege." -msgstr "" - -#: 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 "" - -#: advtrains/copytool.lua:104 -msgid "No such train: @1" -msgstr "" - -#: advtrains/copytool.lua:176 -msgid "The clipboard couldn't access the metadata. Copy failed." -msgstr "" - -#: advtrains/copytool.lua:180 -msgid "Train copied!" -msgstr "" - -#: advtrains/protection.lua:148 -msgid "" -"You are not allowed to build near tracks without the track_builder privilege." -msgstr "" - -#: advtrains/protection.lua:148 -msgid "" -"You are not allowed to build tracks without the track_builder privilege." -msgstr "" - -#: 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 -msgid "" -"You are not allowed to operate turnouts and signals without the " -"railway_operator privilege." -msgstr "" - -#: advtrains_line_automation/stoprail.lua:54 -msgid "Station Code" -msgstr "" - -#: advtrains_line_automation/stoprail.lua:55 -msgid "Station Name" -msgstr "" - -#: advtrains_line_automation/stoprail.lua:56 -msgid "Door Delay" -msgstr "" - -#: advtrains_line_automation/stoprail.lua:57 -msgid "Dep. Speed" -msgstr "" - -#: advtrains_line_automation/stoprail.lua:58 advtrains_train_track/init.lua:11 -#: advtrains_train_track/init.lua:156 -msgid "Track" -msgstr "" - -#: advtrains_line_automation/stoprail.lua:59 -msgid "Stop Time" -msgstr "" - -#: advtrains_line_automation/stoprail.lua:60 -msgid "Door Side" -msgstr "" - -#: advtrains_line_automation/stoprail.lua:62 -msgid "Reverse train" -msgstr "" - -#: advtrains_line_automation/stoprail.lua:63 -msgid "Kick out passengers" -msgstr "" - -#: advtrains_luaautomation/pcnaming.lua:26 -msgid "" -"Passive Component Naming Tool\n" -"\n" -"Right-click to name a passive component." -msgstr "" - -#: advtrains_train_track/init.lua:31 -msgid "Y-turnout" -msgstr "" - -#: advtrains_train_track/init.lua:49 -msgid "3-way turnout" -msgstr "" - -#: advtrains_train_track/init.lua:69 -msgid "Perpendicular Diamond Crossing Track" -msgstr "" - -#: advtrains_train_track/init.lua:91 -msgid "90+Angle Diamond Crossing Track" -msgstr "" - -#: advtrains_train_track/init.lua:132 -msgid "Diagonal Diamond Crossing Track" -msgstr "" - -#: advtrains_train_track/init.lua:179 -msgid "Bumper" -msgstr "" - -#: advtrains_train_track/init.lua:201 -msgid "ATC controller" -msgstr "" - -#: advtrains_train_track/init.lua:317 -msgid "Unloading Track" -msgstr "" - -#: advtrains_train_track/init.lua:342 -msgid "Loading Track" -msgstr "" - -#: advtrains_train_track/init.lua:406 -msgid "Detector Rail" -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 "" - -#: 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 "" - -#: advtrains_train_industrial/init.lua:40 -msgid "Industrial Train Engine" -msgstr "" - -#: advtrains_train_industrial/init.lua:79 -msgid "Big Industrial Train Engine" -msgstr "" - -#: advtrains_train_industrial/init.lua:98 -msgid "Industrial tank wagon" -msgstr "" - -#: advtrains_train_industrial/init.lua:116 -msgid "Industrial wood wagon" -msgstr "" - -#: advtrains_train_japan/init.lua:4 -msgid "Japanese Train Inter-Wagon Connection" -msgstr "" - -#: advtrains_train_japan/init.lua:37 -msgid "Driver stand" -msgstr "" - -#: advtrains_train_japan/init.lua:101 -msgid "Japanese Train Engine" -msgstr "" - -#: advtrains_train_japan/init.lua:176 -msgid "Japanese Train Wagon" -msgstr "" - -#: advtrains_train_steam/init.lua:75 -msgid "Steam Engine" -msgstr "" - -#: advtrains_train_steam/init.lua:159 -msgid "Detailed Steam Engine" -msgstr "" - -#: advtrains_train_steam/init.lua:206 -msgid "Passenger Wagon" -msgstr "" - -#: advtrains_train_steam/init.lua:226 -msgid "Box Wagon" -msgstr "" - -#: advtrains_train_subway/init.lua:144 -msgid "Subway Passenger Wagon" -msgstr "" diff --git a/advtrains/po/update-translations.sh b/advtrains/po/update-translations.sh index d86c568..3a56c7c 100755 --- a/advtrains/po/update-translations.sh +++ b/advtrains/po/update-translations.sh @@ -1,24 +1,28 @@ #!/bin/sh # NOTE: Please make sure you also have basic_trains installed, as it uses attrans for historical reasons -ATDIR=`dirname "$0"`/../.. -BTDIR="$ATDIR"/../basic_trains +PODIR=`dirname "$0"` +ATDIR="$PODIR/../.." +BTDIR="$ATDIR/../basic_trains" +POTFILE="$PODIR/advtrains.pot" xgettext \ -D "$ATDIR" \ -D "$BTDIR" \ -d advtrains \ + -o "$POTFILE" \ -p . \ -L lua \ --from-code=UTF-8 \ + --sort-by-file \ --keyword='attrans' \ --keyword='S' \ --package-name='advtrains' \ --msgid-bugs-address='advtrains-discuss@lists.sr.ht' \ `find $ATDIR $BTDIR -name '*.lua' -printf '%P\n'` \ && -mv advtrains.po template.pot && -for i in *.po; do +for i in "$PODIR"/*.po; do msgmerge -U \ - $i template.pot + --sort-by-file \ + $i "$POTFILE" done diff --git a/advtrains/po/zh_CN.po b/advtrains/po/zh_CN.po index c81cf6c..5bcc316 100644 --- a/advtrains/po/zh_CN.po +++ b/advtrains/po/zh_CN.po @@ -2,17 +2,18 @@ msgid "" msgstr "" "Project-Id-Version: advtrains\n" "Report-Msgid-Bugs-To: advtrains-discuss@lists.sr.ht\n" -"POT-Creation-Date: 2023-10-04 15:40+0200\n" -"PO-Revision-Date: 2022-11-02 15:08+0100\n" +"POT-Creation-Date: 2023-10-09 11:02+0200\n" +"PO-Revision-Date: 2023-10-09 11:24+0200\n" "Last-Translator: Y. Wang \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" #: advtrains/atc.lua:109 -msgid "ATC controller, unconfigured." +msgid "Unconfigured ATC controller" msgstr "ATC 控制器 (未配置)" #: advtrains/atc.lua:150 @@ -37,20 +38,21 @@ msgid "Digiline channel" msgstr "Digiline 频道" #: advtrains/atc.lua:189 advtrains_line_automation/stoprail.lua:65 +#: advtrains_luaautomation/active_common.lua:48 msgid "Save" msgstr "保存" #: advtrains/atc.lua:236 -msgid "ATC Reverse command warning: didn't reverse train, train moving!" -msgstr "ATC 警告:未执行“R”命令,火车在移动" +msgid "ATC Reverse command warning: didn't reverse train, train moving." +msgstr "ATC 警告:火车正在移动,无法改变行车方向。" #: advtrains/atc.lua:248 -msgid "ATC Kick command warning: Doors closed" -msgstr "" +msgid "ATC Kick command warning: doors are closed." +msgstr "ATC 警告:车门已关闭,无法踢出乘客。" #: advtrains/atc.lua:252 -msgid "ATC Kick command warning: Train moving" -msgstr "" +msgid "ATC Kick command warning: train moving." +msgstr "ATC 警告:火车正在移动,无法踢出乘客。" #: advtrains/atc.lua:322 msgid "ATC command syntax error: I statement not closed: @1" @@ -60,12 +62,85 @@ msgstr "ATC 语法错误:“I”命令不完整:@1" msgid "ATC command parse error: Unknown command: @1" msgstr "ATC 语法错误:未知命令:@1" +#: advtrains/copytool.lua:8 +msgid "" +"Train copy/paste tool\n" +"\n" +"Left-click: copy train\n" +"Right-click: paste train" +msgstr "" +"火车复制工具\n" +"\n" +"左键单击:复制\n" +"右键单击:粘帖" + +#: advtrains/copytool.lua:29 +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 "已复制列车。" + +#: advtrains/couple.lua:28 +msgid "Buffer and Chain Coupler" +msgstr "链式车钩" + +#: advtrains/couple.lua:29 +msgid "Scharfenberg Coupler" +msgstr "Scharfenberg 式车钩" + +#: advtrains/couple.lua:185 +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 "" +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 msgid "Boiler" msgstr "锅炉" #: advtrains/craft_items.lua:9 -msgid "driver's cab" +msgid "Driver's cab" msgstr "驾驶室" #: advtrains/craft_items.lua:15 @@ -92,12 +167,78 @@ msgstr "较高的@1站台 (45°)" msgid "@1 Platform (low, 45 degree)" msgstr "较低的@1站台 (45°)" +#: advtrains/protection.lua:7 +msgid "Can place, remove and operate trains" +msgstr "" + +#: advtrains/protection.lua:12 +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" +msgstr "" + +#: advtrains/protection.lua:24 +msgid "Can operate turnouts and signals in unprotected areas" +msgstr "" + +#: advtrains/protection.lua:148 +msgid "" +"You are not allowed to build near tracks without the track_builder privilege." +msgstr "您没有“train_operator”权限,不能在铁路附近建任何东西。" + +#: advtrains/protection.lua:148 +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 +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" +msgstr "臂板信号机" + +#: advtrains/signals.lua:127 +msgid "Signal" +msgstr "信号灯" + +#: advtrains/signals.lua:191 +msgid "Wallmounted Signal (left)" +msgstr "壁挂式信号灯 (左侧)" + +#: advtrains/signals.lua:192 +msgid "Wallmounted Signal (right)" +msgstr "壁挂式信号灯 (右侧)" + +#: advtrains/signals.lua:193 +msgid "Wallmounted Signal (top)" +msgstr "悬挂式信号灯" + +#: advtrains/signals.lua:281 advtrains/signals.lua:322 +msgid "Andrew's Cross" +msgstr "铁路道口信号灯" + #: advtrains/trackplacer.lua:313 msgid "" "Track Worker Tool\n" "\n" "Left-click: change rail type (straight/curve/switch)\n" -"Right-click: rotate rail/bumper/signal/etc." +"Right-click: rotate object" msgstr "" "铁路调整工具\n" "\n" @@ -105,27 +246,71 @@ msgstr "" "右键单击:旋转方块" #: advtrains/trackplacer.lua:340 advtrains/trackplacer.lua:377 -msgid "This node can't be rotated using the trackworker!" +msgid "This node can't be rotated using the trackworker." msgstr "您不能使用铁路调整工具旋转这个方块。" #: advtrains/trackplacer.lua:350 -msgid "This track can not be rotated!" +msgid "This track can not be rotated." msgstr "您不能旋转这段轨道。" #: advtrains/trackplacer.lua:404 -msgid "This node can't be changed using the trackworker!" +msgid "This node can't be changed using the trackworker." msgstr "您不能使用铁路调整工具调整这个方块。" #: advtrains/trackplacer.lua:414 -msgid "This track can not be changed!" +msgid "This track can not be changed." msgstr "您不能调整这段轨道。" +#: advtrains/tracks.lua:449 +msgid "This track can not be removed." +msgstr "您不能移除这段轨道。" + +#: advtrains/tracks.lua:616 +msgid "Position is occupied by a train." +msgstr "" + +#: advtrains/tracks.lua:622 +msgid "There's a Track Circuit Break here." +msgstr "" + +#: advtrains/tracks.lua:626 +msgid "There's a Signal Influence Point here." +msgstr "" + +#: advtrains/tracks.lua:637 +msgid "@1 Slope" +msgstr "@1斜坡" + +#: advtrains/tracks.lua:648 advtrains/tracks.lua:653 +msgid "Can't place slope: not pointing at node." +msgstr "无法放置斜坡:您没有选择任何方块。" + +#: advtrains/tracks.lua:658 +msgid "Can't place slope: space occupied." +msgstr "无法放置斜坡:此区域已被占用。" + +#: advtrains/tracks.lua:711 +msgid "Can't place slope: Not enough slope items left (@1 required)." +msgstr "无法放置斜坡:您没有足够的铁路斜坡放置工具 (您总共需要@1个)" + +#: advtrains/tracks.lua:714 +msgid "Can't place slope: There's no slope of length @1." +msgstr "无法放置斜坡:advtrains 不支持长度为@1米的斜坡。" + +#: advtrains/tracks.lua:721 +msgid "Can't place slope: no supporting node at upper end." +msgstr "无法放置斜坡:较高端没有支撑方块。" + +#: advtrains/trainhud.lua:305 +msgid "OVERRUN RED SIGNAL! Examine situation and reverse train to move again." +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!" +msgid "The wagon's inventory is not empty." msgstr "" #: advtrains/wagons.lua:210 @@ -164,13 +349,25 @@ msgstr "强制下车" 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 "车厢已满。" + +#: advtrains/wagons.lua:706 +msgid "Doors are closed! (Try holding sneak key!)" +msgstr "" + #: advtrains/wagons.lua:712 -msgid "Can't get on: " +msgid "You can't get on this wagon." msgstr "" #: advtrains/wagons.lua:838 msgid "Select seat:" -msgstr "请选择座位" +msgstr "请选择座位:" #: advtrains/wagons.lua:880 msgid "Save wagon properties" @@ -194,174 +391,35 @@ msgstr "路由码" #: advtrains/wagons.lua:1241 msgid "" -"Doors are closed! Use Sneak+rightclick to ignore the closed doors and get " -"off!" +"Doors are closed. Use Sneak+rightclick to ignore the closed doors and get " +"off." msgstr "车门已关闭,请使用潜行+右键单击下车。" -#: advtrains/trainhud.lua:305 -msgid "OVERRUN RED SIGNAL! Examine situation and reverse train to move again." +#: advtrains/wagons.lua:1250 +msgid "You are not allowed to access the driver stand." msgstr "" -#: advtrains/tracks.lua:449 -msgid "This track can not be removed!" -msgstr "您不能移除这段轨道。" - -#: advtrains/tracks.lua:616 -msgid "Position is occupied by a train." +#: advtrains_interlocking/tsr_rail.lua:13 +msgid "Point speed restriction: @1" msgstr "" -#: advtrains/tracks.lua:622 -msgid "There's a Track Circuit Break here." +#: advtrains_interlocking/tsr_rail.lua:14 +msgid "Set point speed restriction:" msgstr "" -#: advtrains/tracks.lua:626 -msgid "There's a Signal Influence Point here." -msgstr "" - -#: advtrains/tracks.lua:637 -msgid "@1 Slope" -msgstr "@1斜坡" - -#: advtrains/tracks.lua:648 advtrains/tracks.lua:653 -msgid "Can't place: not pointing at node" -msgstr "无法放置:您没有选择任何方块。" - -#: advtrains/tracks.lua:658 -msgid "Can't place: space occupied!" -msgstr "无法放置:此区域已被占用。" - -#: advtrains/tracks.lua:711 -msgid "Can't place: Not enough slope items left (@1 required)" -msgstr "无法放置:您没有足够的铁路斜坡放置工具 (您总共需要@1个)" - -#: advtrains/tracks.lua:714 -msgid "Can't place: There's no slope of length @1" -msgstr "无法放置:advtrains 不支持长度为@1米的斜坡。" - -#: advtrains/tracks.lua:721 -msgid "Can't place: no supporting node at upper end." -msgstr "无法放置:较高端没有支撑方块。" - -#: advtrains/signals.lua:63 -msgid "Lampless Signal" -msgstr "臂板信号机" - -#: advtrains/signals.lua:127 -msgid "Signal" -msgstr "信号灯" - -#: advtrains/signals.lua:191 -msgid "Wallmounted Signal (l)" -msgstr "壁挂式信号灯 (左侧)" - -#: advtrains/signals.lua:192 -msgid "Wallmounted Signal (r)" -msgstr "壁挂式信号灯 (右侧)" - -#: advtrains/signals.lua:193 -msgid "Wallmounted Signal (t)" -msgstr "悬挂式信号灯" - -#: advtrains/signals.lua:281 advtrains/signals.lua:322 -msgid "Andrew's Cross" -msgstr "铁路道口信号灯" - -#: advtrains/couple.lua:28 -msgid "Buffer and Chain Coupler" -msgstr "链式车钩" - -#: advtrains/couple.lua:29 -msgid "Scharfenberg Coupler" -msgstr "Scharfenberg 式车钩" - -#: advtrains/couple.lua:185 -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 "" -msgstr "" +#: advtrains_interlocking/tsr_rail.lua:30 +msgid "You are not allowed to configure this track without the @1 privilege." +msgstr "您没有“@1”权限,不能调整这段轨道。" -#: advtrains/couple.lua:334 -msgid "Can not couple: The couplers of the trains do not match (@1 and @2)." -msgstr "您无法连接这两节车厢:这两节车厢使用不同的车钩 (@1和@2)。" +#: 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/copytool.lua:8 -msgid "" -"Train copy/paste tool\n" -"\n" -"Left-click: copy train\n" -"Right-click: paste train" +#: advtrains_interlocking/tsr_rail.lua:64 +msgid "Point Speed Restriction Track" msgstr "" -"火车复制工具\n" -"\n" -"左键单击:复制\n" -"右键单击:粘帖" - -#: advtrains/copytool.lua:29 -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 "已复制" - -#: advtrains/protection.lua:148 -msgid "" -"You are not allowed to build near tracks without the track_builder privilege." -msgstr "您没有“train_operator”权限,不能在铁路附近建任何东西。" - -#: advtrains/protection.lua:148 -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 -msgid "" -"You are not allowed to operate turnouts and signals without the " -"railway_operator privilege." -msgstr "您没有“railway_operator”权限,不能控制铁路设施。" #: advtrains_line_automation/stoprail.lua:54 msgid "Station Code" @@ -394,61 +452,91 @@ msgstr "" #: advtrains_line_automation/stoprail.lua:62 msgid "Reverse train" -msgstr "" +msgstr "改变行车方向" #: advtrains_line_automation/stoprail.lua:63 msgid "Kick out passengers" +msgstr "踢出乘客" + +#: advtrains_line_automation/stoprail.lua:97 +msgid "Station code \"@1\" already exists and is owned by @2." msgstr "" -#: advtrains_luaautomation/pcnaming.lua:26 -msgid "" -"Passive Component Naming Tool\n" -"\n" -"Right-click to name a passive component." +#: advtrains_line_automation/stoprail.lua:111 +msgid "This station is owned by @1. You are not allowed to edit its name." msgstr "" -"被动元件命名工具\n" -"\n" -"右键单击命名所选元件" -#: advtrains_train_track/init.lua:31 -msgid "Y-turnout" -msgstr "对称道岔" +#: advtrains_line_automation/stoprail.lua:221 +msgid "Station/Stop Track" +msgstr "车站轨道" -#: advtrains_train_track/init.lua:49 -msgid "3-way turnout" -msgstr "三开道岔" +#: advtrains_luaautomation/active_common.lua:17 +msgid "Unconfigured LuaATC component" +msgstr "LuaATC 部件 (未配置)" -#: advtrains_train_track/init.lua:69 -msgid "Perpendicular Diamond Crossing Track" -msgstr "垂直交叉轨道" +#: advtrains_luaautomation/active_common.lua:46 +msgid "LuaATC Environment" +msgstr "" -#: advtrains_train_track/init.lua:91 -msgid "90+Angle Diamond Crossing Track" -msgstr "交叉轨道 (其中一条轨道与坐标轴平行)" +#: advtrains_luaautomation/active_common.lua:49 +msgid "Clear Local Environment" +msgstr "" -#: advtrains_train_track/init.lua:132 -msgid "Diagonal Diamond Crossing Track" -msgstr "交叉轨道" +#: advtrains_luaautomation/active_common.lua:50 +msgid "Code" +msgstr "" -#: advtrains_train_track/init.lua:179 -msgid "Bumper" -msgstr "保险杠" +#: advtrains_luaautomation/active_common.lua:64 +msgid "" +"You are not allowed to configure this LuaATC component without the @1 " +"privilege." +msgstr "您没有“@1”权限,不能配置这个 LuaATC 部件。" -#: advtrains_train_track/init.lua:201 -msgid "ATC controller" -msgstr "ATC 控制器" +#: advtrains_luaautomation/active_common.lua:94 +msgid "LuaATC component assigned to environment '@1'" +msgstr "" -#: advtrains_train_track/init.lua:317 -msgid "Unloading Track" -msgstr "卸货轨道" +#: advtrains_luaautomation/active_common.lua:96 +msgid "LuaATC component assigned to an invalid environment" +msgstr "" -#: advtrains_train_track/init.lua:342 -msgid "Loading Track" -msgstr "装货轨道" +#: advtrains_luaautomation/active_common.lua:171 +msgid "LuaATC component with error: @1" +msgstr "" -#: advtrains_train_track/init.lua:406 -msgid "Detector Rail" -msgstr "探测轨道" +#: advtrains_luaautomation/init.lua:13 +msgid "" +"Can place and configure LuaATC components, including execute potentially " +"harmful Lua code" +msgstr "" + +#: advtrains_luaautomation/mesecon_controller.lua:211 +msgid "LuaATC Mesecon Controller" +msgstr "" + +#: advtrains_luaautomation/operation_panel.lua:11 +msgid "LuaATC Operation Panel" +msgstr "" + +#: advtrains_luaautomation/pcnaming.lua:28 +msgid "" +"Passive Component Naming Tool\n" +"\n" +"Right-click to name a passive component." +msgstr "" +"被动元件命名工具\n" +"\n" +"右键单击命名所选元件。" + +#: advtrains_luaautomation/pcnaming.lua:39 +msgid "" +"You are not allowed to name LuaATC passive components without the @1 " +"privilege." +msgstr "您没有“@1”权限,不能命名被动元件。" + +#: advtrains_luaautomation/pcnaming.lua:62 +msgid "Set name of component (empty to clear)" +msgstr "" #: advtrains_train_industrial/init.lua:10 #: advtrains_train_industrial/init.lua:49 advtrains_train_steam/init.lua:20 @@ -514,23 +602,45 @@ msgstr "货运车厢" msgid "Subway Passenger Wagon" msgstr "地铁车厢" -#~ msgid "This position is protected!" -#~ msgstr "这里已被保护。" +#: advtrains_train_track/init.lua:31 +msgid "Y-turnout" +msgstr "对称道岔" -#~ msgid "Can't place: protected position!" -#~ msgstr "无法放置:此区域已被保护。" +#: advtrains_train_track/init.lua:49 +msgid "3-way turnout" +msgstr "三开道岔" -#~ msgid "Deprecated Track" -#~ msgstr "请不要使用" +#: advtrains_train_track/init.lua:69 +msgid "Perpendicular Diamond Crossing Track" +msgstr "垂直交叉轨道" -#~ msgid "Can't get on: wagon full or doors closed!" -#~ msgstr "无法上车:车门已关闭或车厢已满。" +#: advtrains_train_track/init.lua:91 +msgid "90+Angle Diamond Crossing Track" +msgstr "交叉轨道 (其中一条轨道与坐标轴平行)" -#~ msgid "Use Sneak+rightclick to bypass closed doors!" -#~ msgstr "请使用潜行+右键上车。" +#: advtrains_train_track/init.lua:132 +msgid "Diagonal Diamond Crossing Track" +msgstr "交叉轨道" -#~ msgid "Access to @1" -#~ msgstr "可前往@1" +#: advtrains_train_track/init.lua:179 +msgid "Bumper" +msgstr "保险杠" + +#: advtrains_train_track/init.lua:201 +msgid "ATC controller" +msgstr "ATC 控制器" + +#: advtrains_train_track/init.lua:317 +msgid "Unloading Track" +msgstr "卸货轨道" + +#: advtrains_train_track/init.lua:342 +msgid "Loading Track" +msgstr "装货轨道" + +#: advtrains_train_track/init.lua:406 +msgid "Detector Rail" +msgstr "探测轨道" #~ msgid "" #~ "ATC controller, mode @1\n" @@ -540,21 +650,47 @@ msgstr "地铁车厢" #~ "模式:@1\n" #~ "频道:@2" +#~ msgid "Access to @1" +#~ msgstr "可前往@1" + +#~ msgid "Can't get on: wagon full or doors closed!" +#~ msgstr "无法上车:车门已关闭或车厢已满。" + +#~ msgid "Can't place: protected position!" +#~ msgstr "无法放置:此区域已被保护。" + +#~ msgid "Default Seat" +#~ msgstr "默认座位" + +#~ msgid "Default Seat (driver stand)" +#~ msgstr "默认座位 (司机座位)" + +#~ msgid "Deprecated Track" +#~ msgstr "请不要使用" + #~ msgid "Lock couples" #~ msgstr "锁定连接处" -#~ msgid "" -#~ "You need to own at least one neighboring wagon to destroy this couple." -#~ msgstr "您必须至少拥有其中一节车厢才能分开这两节车厢。" - #~ msgid "Speed:" #~ msgstr "速度" #~ msgid "Target:" #~ msgstr "目标速度" -#~ msgid "Default Seat" -#~ msgstr "默认座位" +#, fuzzy +#~ msgid "This node can't be rotated using the trackworker," +#~ msgstr "您不能使用铁路调整工具旋转这个方块。" -#~ msgid "Default Seat (driver stand)" -#~ msgstr "默认座位 (司机座位)" +#~ msgid "This position is protected!" +#~ msgstr "这里已被保护。" + +#~ msgid "Use Sneak+rightclick to bypass closed doors!" +#~ msgstr "请使用潜行+右键上车。" + +#, fuzzy +#~ msgid "You are not allowed to modify this protected track." +#~ msgstr "这里已被保护,您不能在这里建造铁路。" + +#~ 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 91a205f..ece82c3 100644 --- a/advtrains/po/zh_TW.po +++ b/advtrains/po/zh_TW.po @@ -2,17 +2,18 @@ msgid "" msgstr "" "Project-Id-Version: advtrains\n" "Report-Msgid-Bugs-To: advtrains-discuss@lists.sr.ht\n" -"POT-Creation-Date: 2023-10-04 15:40+0200\n" -"PO-Revision-Date: 2022-11-02 15:08+0100\n" +"POT-Creation-Date: 2023-10-09 11:02+0200\n" +"PO-Revision-Date: 2023-10-09 11:31+0200\n" "Last-Translator: Y. Wang \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" #: advtrains/atc.lua:109 -msgid "ATC controller, unconfigured." +msgid "Unconfigured ATC controller" msgstr "ATC 控制器 (未配置)" #: advtrains/atc.lua:150 @@ -37,20 +38,21 @@ msgid "Digiline channel" msgstr "Digiline 頻道" #: advtrains/atc.lua:189 advtrains_line_automation/stoprail.lua:65 +#: advtrains_luaautomation/active_common.lua:48 msgid "Save" msgstr "儲存" #: advtrains/atc.lua:236 -msgid "ATC Reverse command warning: didn't reverse train, train moving!" -msgstr "ATC 警告:未執行「R」命令,火車在移動" +msgid "ATC Reverse command warning: didn't reverse train, train moving." +msgstr "ATC 警告:火車正在移動,無法改變行車方向。" #: advtrains/atc.lua:248 -msgid "ATC Kick command warning: Doors closed" -msgstr "" +msgid "ATC Kick command warning: doors are closed." +msgstr "ATC 警告:車門已關閉,無法踢出乘客。" #: advtrains/atc.lua:252 -msgid "ATC Kick command warning: Train moving" -msgstr "" +msgid "ATC Kick command warning: train moving." +msgstr "ATC 警告:火車正在移動,無法踢出乘客。" #: advtrains/atc.lua:322 msgid "ATC command syntax error: I statement not closed: @1" @@ -60,12 +62,85 @@ msgstr "ATC 語法錯誤:「I」命令不完整:@1" msgid "ATC command parse error: Unknown command: @1" msgstr "ATC 語法錯誤:未知命令:@1" +#: advtrains/copytool.lua:8 +msgid "" +"Train copy/paste tool\n" +"\n" +"Left-click: copy train\n" +"Right-click: paste train" +msgstr "" +"火車複製工具\n" +"\n" +"左鍵單擊:複製\n" +"右鍵單擊:粘帖" + +#: advtrains/copytool.lua:29 +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 "已複製火車。" + +#: advtrains/couple.lua:28 +msgid "Buffer and Chain Coupler" +msgstr "鏈式連結器" + +#: advtrains/couple.lua:29 +msgid "Scharfenberg Coupler" +msgstr "Scharfenberg 式連結器" + +#: advtrains/couple.lua:185 +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 "" +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 msgid "Boiler" msgstr "鍋爐" #: advtrains/craft_items.lua:9 -msgid "driver's cab" +msgid "Driver's cab" msgstr "駕駛室" #: advtrains/craft_items.lua:15 @@ -92,12 +167,78 @@ msgstr "較高的@1月臺 (45°)" msgid "@1 Platform (low, 45 degree)" msgstr "較低的@1月臺 (45°)" +#: advtrains/protection.lua:7 +msgid "Can place, remove and operate trains" +msgstr "" + +#: advtrains/protection.lua:12 +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" +msgstr "" + +#: advtrains/protection.lua:24 +msgid "Can operate turnouts and signals in unprotected areas" +msgstr "" + +#: advtrains/protection.lua:148 +msgid "" +"You are not allowed to build near tracks without the track_builder privilege." +msgstr "您沒有「train_operator」許可權,不能在鐵路附近建任何東西。" + +#: advtrains/protection.lua:148 +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 +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" +msgstr "臂木式號誌機" + +#: advtrains/signals.lua:127 +msgid "Signal" +msgstr "色燈號誌機" + +#: advtrains/signals.lua:191 +msgid "Wallmounted Signal (left)" +msgstr "壁掛式色燈號誌機 (左側)" + +#: advtrains/signals.lua:192 +msgid "Wallmounted Signal (right)" +msgstr "壁掛式色燈號誌機 (右側)" + +#: advtrains/signals.lua:193 +msgid "Wallmounted Signal (top)" +msgstr "懸掛式色燈號誌機" + +#: advtrains/signals.lua:281 advtrains/signals.lua:322 +msgid "Andrew's Cross" +msgstr "平交道號誌燈" + #: advtrains/trackplacer.lua:313 msgid "" "Track Worker Tool\n" "\n" "Left-click: change rail type (straight/curve/switch)\n" -"Right-click: rotate rail/bumper/signal/etc." +"Right-click: rotate object" msgstr "" "鐵路調整工具\n" "\n" @@ -105,27 +246,71 @@ msgstr "" "右鍵單擊:旋轉方塊" #: advtrains/trackplacer.lua:340 advtrains/trackplacer.lua:377 -msgid "This node can't be rotated using the trackworker!" +msgid "This node can't be rotated using the trackworker." msgstr "您不能使用鐵路調整工具旋轉這個方塊。" #: advtrains/trackplacer.lua:350 -msgid "This track can not be rotated!" +msgid "This track can not be rotated." msgstr "您不能旋轉這段軌道。" #: advtrains/trackplacer.lua:404 -msgid "This node can't be changed using the trackworker!" +msgid "This node can't be changed using the trackworker." msgstr "您不能使用鐵路調整工具調整這個方塊。" #: advtrains/trackplacer.lua:414 -msgid "This track can not be changed!" +msgid "This track can not be changed." msgstr "您不能調整這段軌道。" +#: advtrains/tracks.lua:449 +msgid "This track can not be removed." +msgstr "您不能移除這段軌道。" + +#: advtrains/tracks.lua:616 +msgid "Position is occupied by a train." +msgstr "" + +#: advtrains/tracks.lua:622 +msgid "There's a Track Circuit Break here." +msgstr "" + +#: advtrains/tracks.lua:626 +msgid "There's a Signal Influence Point here." +msgstr "" + +#: advtrains/tracks.lua:637 +msgid "@1 Slope" +msgstr "@1斜坡" + +#: advtrains/tracks.lua:648 advtrains/tracks.lua:653 +msgid "Can't place slope: not pointing at node." +msgstr "無法放置斜坡:您沒有選擇任何方塊。" + +#: advtrains/tracks.lua:658 +msgid "Can't place slope: space occupied." +msgstr "無法放置斜坡:此區域已被佔用。" + +#: advtrains/tracks.lua:711 +msgid "Can't place slope: Not enough slope items left (@1 required)." +msgstr "無法放置斜坡:您沒有足夠的鐵路斜坡放置工具 (您總共需要@1個)" + +#: advtrains/tracks.lua:714 +msgid "Can't place slope: There's no slope of length @1." +msgstr "無法放置斜坡:advtrains 不支援長度為@1米的斜坡。" + +#: advtrains/tracks.lua:721 +msgid "Can't place slope: no supporting node at upper end." +msgstr "無法放置斜坡:較高階沒有支撐方塊。" + +#: advtrains/trainhud.lua:305 +msgid "OVERRUN RED SIGNAL! Examine situation and reverse train to move again." +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!" +msgid "The wagon's inventory is not empty." msgstr "" #: advtrains/wagons.lua:210 @@ -164,13 +349,25 @@ msgstr "強制下車" 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 "車廂已滿。" + +#: advtrains/wagons.lua:706 +msgid "Doors are closed! (Try holding sneak key!)" +msgstr "" + #: advtrains/wagons.lua:712 -msgid "Can't get on: " +msgid "You can't get on this wagon." msgstr "" #: advtrains/wagons.lua:838 msgid "Select seat:" -msgstr "請選擇座位" +msgstr "請選擇座位:" #: advtrains/wagons.lua:880 msgid "Save wagon properties" @@ -194,174 +391,35 @@ msgstr "路由碼" #: advtrains/wagons.lua:1241 msgid "" -"Doors are closed! Use Sneak+rightclick to ignore the closed doors and get " -"off!" +"Doors are closed. Use Sneak+rightclick to ignore the closed doors and get " +"off." msgstr "車門已關閉,請使用潛行+右鍵單擊下車。" -#: advtrains/trainhud.lua:305 -msgid "OVERRUN RED SIGNAL! Examine situation and reverse train to move again." +#: advtrains/wagons.lua:1250 +msgid "You are not allowed to access the driver stand." msgstr "" -#: advtrains/tracks.lua:449 -msgid "This track can not be removed!" -msgstr "您不能移除這段軌道。" - -#: advtrains/tracks.lua:616 -msgid "Position is occupied by a train." +#: advtrains_interlocking/tsr_rail.lua:13 +msgid "Point speed restriction: @1" msgstr "" -#: advtrains/tracks.lua:622 -msgid "There's a Track Circuit Break here." +#: advtrains_interlocking/tsr_rail.lua:14 +msgid "Set point speed restriction:" msgstr "" -#: advtrains/tracks.lua:626 -msgid "There's a Signal Influence Point here." -msgstr "" - -#: advtrains/tracks.lua:637 -msgid "@1 Slope" -msgstr "@1斜坡" - -#: advtrains/tracks.lua:648 advtrains/tracks.lua:653 -msgid "Can't place: not pointing at node" -msgstr "無法放置:您沒有選擇任何方塊。" - -#: advtrains/tracks.lua:658 -msgid "Can't place: space occupied!" -msgstr "無法放置:此區域已被佔用。" - -#: advtrains/tracks.lua:711 -msgid "Can't place: Not enough slope items left (@1 required)" -msgstr "無法放置:您沒有足夠的鐵路斜坡放置工具 (您總共需要@1個)" - -#: advtrains/tracks.lua:714 -msgid "Can't place: There's no slope of length @1" -msgstr "無法放置:advtrains 不支援長度為@1米的斜坡。" - -#: advtrains/tracks.lua:721 -msgid "Can't place: no supporting node at upper end." -msgstr "無法放置:較高階沒有支撐方塊。" - -#: advtrains/signals.lua:63 -msgid "Lampless Signal" -msgstr "臂木式號誌機" - -#: advtrains/signals.lua:127 -msgid "Signal" -msgstr "色燈號誌機" - -#: advtrains/signals.lua:191 -msgid "Wallmounted Signal (l)" -msgstr "壁掛式色燈號誌機 (左側)" - -#: advtrains/signals.lua:192 -msgid "Wallmounted Signal (r)" -msgstr "壁掛式色燈號誌機 (右側)" - -#: advtrains/signals.lua:193 -msgid "Wallmounted Signal (t)" -msgstr "懸掛式色燈號誌機" - -#: advtrains/signals.lua:281 advtrains/signals.lua:322 -msgid "Andrew's Cross" -msgstr "平交道號誌燈" - -#: advtrains/couple.lua:28 -msgid "Buffer and Chain Coupler" -msgstr "鏈式連結器" - -#: advtrains/couple.lua:29 -msgid "Scharfenberg Coupler" -msgstr "Scharfenberg 式連結器" - -#: advtrains/couple.lua:185 -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 "" -msgstr "" +#: advtrains_interlocking/tsr_rail.lua:30 +msgid "You are not allowed to configure this track without the @1 privilege." +msgstr "您沒有「@1」許可權,不能調整這段軌道。" -#: advtrains/couple.lua:334 -msgid "Can not couple: The couplers of the trains do not match (@1 and @2)." -msgstr "您無法連結這兩節車廂:這兩節車廂使用不同的連結器 (@1和@2)。" +#: 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/copytool.lua:8 -msgid "" -"Train copy/paste tool\n" -"\n" -"Left-click: copy train\n" -"Right-click: paste train" +#: advtrains_interlocking/tsr_rail.lua:64 +msgid "Point Speed Restriction Track" msgstr "" -"火車複製工具\n" -"\n" -"左鍵單擊:複製\n" -"右鍵單擊:粘帖" - -#: advtrains/copytool.lua:29 -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 "已複製" - -#: advtrains/protection.lua:148 -msgid "" -"You are not allowed to build near tracks without the track_builder privilege." -msgstr "您沒有「train_operator」許可權,不能在鐵路附近建任何東西。" - -#: advtrains/protection.lua:148 -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 -msgid "" -"You are not allowed to operate turnouts and signals without the " -"railway_operator privilege." -msgstr "您沒有「railway_operator」許可權,不能控制鐵路設施。" #: advtrains_line_automation/stoprail.lua:54 msgid "Station Code" @@ -394,61 +452,91 @@ msgstr "" #: advtrains_line_automation/stoprail.lua:62 msgid "Reverse train" -msgstr "" +msgstr "改變行車方向" #: advtrains_line_automation/stoprail.lua:63 msgid "Kick out passengers" +msgstr "踢出乘客" + +#: advtrains_line_automation/stoprail.lua:97 +msgid "Station code \"@1\" already exists and is owned by @2." msgstr "" -#: advtrains_luaautomation/pcnaming.lua:26 -msgid "" -"Passive Component Naming Tool\n" -"\n" -"Right-click to name a passive component." +#: advtrains_line_automation/stoprail.lua:111 +msgid "This station is owned by @1. You are not allowed to edit its name." msgstr "" -"被動元件命名工具\n" -"\n" -"右鍵單擊命名所選元件" -#: advtrains_train_track/init.lua:31 -msgid "Y-turnout" -msgstr "對稱道岔" +#: advtrains_line_automation/stoprail.lua:221 +msgid "Station/Stop Track" +msgstr "車站軌道" -#: advtrains_train_track/init.lua:49 -msgid "3-way turnout" -msgstr "三開道岔" +#: advtrains_luaautomation/active_common.lua:17 +msgid "Unconfigured LuaATC component" +msgstr "LuaATC 元件 (未配置)" -#: advtrains_train_track/init.lua:69 -msgid "Perpendicular Diamond Crossing Track" -msgstr "垂直交叉軌道" +#: advtrains_luaautomation/active_common.lua:46 +msgid "LuaATC Environment" +msgstr "" -#: advtrains_train_track/init.lua:91 -msgid "90+Angle Diamond Crossing Track" -msgstr "交叉軌道 (其中一條軌道與座標軸平行)" +#: advtrains_luaautomation/active_common.lua:49 +msgid "Clear Local Environment" +msgstr "" -#: advtrains_train_track/init.lua:132 -msgid "Diagonal Diamond Crossing Track" -msgstr "交叉軌道" +#: advtrains_luaautomation/active_common.lua:50 +msgid "Code" +msgstr "" -#: advtrains_train_track/init.lua:179 -msgid "Bumper" -msgstr "保險槓" +#: advtrains_luaautomation/active_common.lua:64 +msgid "" +"You are not allowed to configure this LuaATC component without the @1 " +"privilege." +msgstr "您沒有「@1」許可權,不能配置這個 LuaATC 元件。" -#: advtrains_train_track/init.lua:201 -msgid "ATC controller" -msgstr "ATC 控制器" +#: advtrains_luaautomation/active_common.lua:94 +msgid "LuaATC component assigned to environment '@1'" +msgstr "" -#: advtrains_train_track/init.lua:317 -msgid "Unloading Track" -msgstr "卸貨軌道" +#: advtrains_luaautomation/active_common.lua:96 +msgid "LuaATC component assigned to an invalid environment" +msgstr "" -#: advtrains_train_track/init.lua:342 -msgid "Loading Track" -msgstr "裝貨軌道" +#: advtrains_luaautomation/active_common.lua:171 +msgid "LuaATC component with error: @1" +msgstr "" -#: advtrains_train_track/init.lua:406 -msgid "Detector Rail" -msgstr "探測軌道" +#: advtrains_luaautomation/init.lua:13 +msgid "" +"Can place and configure LuaATC components, including execute potentially " +"harmful Lua code" +msgstr "" + +#: advtrains_luaautomation/mesecon_controller.lua:211 +msgid "LuaATC Mesecon Controller" +msgstr "" + +#: advtrains_luaautomation/operation_panel.lua:11 +msgid "LuaATC Operation Panel" +msgstr "" + +#: advtrains_luaautomation/pcnaming.lua:28 +msgid "" +"Passive Component Naming Tool\n" +"\n" +"Right-click to name a passive component." +msgstr "" +"被動元件命名工具\n" +"\n" +"右鍵單擊命名所選元件。" + +#: advtrains_luaautomation/pcnaming.lua:39 +msgid "" +"You are not allowed to name LuaATC passive components without the @1 " +"privilege." +msgstr "您沒有「@1」許可權,不能命名這個元件。" + +#: advtrains_luaautomation/pcnaming.lua:62 +msgid "Set name of component (empty to clear)" +msgstr "" #: advtrains_train_industrial/init.lua:10 #: advtrains_train_industrial/init.lua:49 advtrains_train_steam/init.lua:20 @@ -514,23 +602,45 @@ msgstr "貨運車廂" msgid "Subway Passenger Wagon" msgstr "地鐵車廂" -#~ msgid "This position is protected!" -#~ msgstr "這裡已被保護。" +#: advtrains_train_track/init.lua:31 +msgid "Y-turnout" +msgstr "對稱道岔" -#~ msgid "Can't place: protected position!" -#~ msgstr "無法放置:此區域已被保護。" +#: advtrains_train_track/init.lua:49 +msgid "3-way turnout" +msgstr "三開道岔" -#~ msgid "Deprecated Track" -#~ msgstr "請不要使用" +#: advtrains_train_track/init.lua:69 +msgid "Perpendicular Diamond Crossing Track" +msgstr "垂直交叉軌道" -#~ msgid "Can't get on: wagon full or doors closed!" -#~ msgstr "無法上車:車門已關閉或車廂已滿。" +#: advtrains_train_track/init.lua:91 +msgid "90+Angle Diamond Crossing Track" +msgstr "交叉軌道 (其中一條軌道與座標軸平行)" -#~ msgid "Use Sneak+rightclick to bypass closed doors!" -#~ msgstr "請使用潛行+右鍵上車。" +#: advtrains_train_track/init.lua:132 +msgid "Diagonal Diamond Crossing Track" +msgstr "交叉軌道" -#~ msgid "Access to @1" -#~ msgstr "可前往@1" +#: advtrains_train_track/init.lua:179 +msgid "Bumper" +msgstr "保險槓" + +#: advtrains_train_track/init.lua:201 +msgid "ATC controller" +msgstr "ATC 控制器" + +#: advtrains_train_track/init.lua:317 +msgid "Unloading Track" +msgstr "卸貨軌道" + +#: advtrains_train_track/init.lua:342 +msgid "Loading Track" +msgstr "裝貨軌道" + +#: advtrains_train_track/init.lua:406 +msgid "Detector Rail" +msgstr "探測軌道" #~ msgid "" #~ "ATC controller, mode @1\n" @@ -540,21 +650,47 @@ msgstr "地鐵車廂" #~ "模式:@1\n" #~ "頻道:@2" +#~ msgid "Access to @1" +#~ msgstr "可前往@1" + +#~ msgid "Can't get on: wagon full or doors closed!" +#~ msgstr "無法上車:車門已關閉或車廂已滿。" + +#~ msgid "Can't place: protected position!" +#~ msgstr "無法放置:此區域已被保護。" + +#~ msgid "Default Seat" +#~ msgstr "預設座位" + +#~ msgid "Default Seat (driver stand)" +#~ msgstr "預設座位 (司機座位)" + +#~ msgid "Deprecated Track" +#~ msgstr "請不要使用" + #~ msgid "Lock couples" #~ msgstr "鎖定連結處" -#~ msgid "" -#~ "You need to own at least one neighboring wagon to destroy this couple." -#~ msgstr "您必須至少擁有其中一節車廂才能分開這兩節車廂。" - #~ msgid "Speed:" #~ msgstr "速度" #~ msgid "Target:" #~ msgstr "目標速度" -#~ msgid "Default Seat" -#~ msgstr "預設座位" +#, fuzzy +#~ msgid "This node can't be rotated using the trackworker," +#~ msgstr "您不能使用鐵路調整工具旋轉這個方塊。" -#~ msgid "Default Seat (driver stand)" -#~ msgstr "預設座位 (司機座位)" +#~ msgid "This position is protected!" +#~ msgstr "這裡已被保護。" + +#~ msgid "Use Sneak+rightclick to bypass closed doors!" +#~ msgstr "請使用潛行+右鍵上車。" + +#, fuzzy +#~ msgid "You are not allowed to modify this protected track." +#~ msgstr "這裡已被保護,您不能在這裡建造鐵路。" + +#~ 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 89e15eb..ac1cd66 100644 --- a/advtrains/protection.lua +++ b/advtrains/protection.lua @@ -4,24 +4,24 @@ -- Privileges to control TRAIN DRIVING/COUPLING minetest.register_privilege("train_operator", { - description = "Without this privilege, a player can't do anything about trains, neither place or remove them nor drive or couple them (but he can build tracks if he has track_builder)", + description = attrans("Can place, remove and operate trains"), give_to_singleplayer= true, }); minetest.register_privilege("train_admin", { - description = "Player may drive, place or remove any trains from/to anywhere, regardless of owner, whitelist or protection", + description = attrans("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 = "Player can place and/or dig rails not protected from him. If he also has protection_bypass, he can place/dig any rails", + description = attrans("Can place and dig tracks in unprotected areas"), give_to_singleplayer= true, }); -- Privileges to control OPERATING TURNOUTS/SIGNALS minetest.register_privilege("railway_operator", { - description = "Player can operate turnouts and signals not protected from him. If he also has protection_bypass, he can operate any turnouts/signals", + description = attrans("Can operate turnouts and signals in unprotected areas"), give_to_singleplayer= true, }); diff --git a/advtrains/signals.lua b/advtrains/signals.lua index 74841d3..c03afbf 100644 --- a/advtrains/signals.lua +++ b/advtrains/signals.lua @@ -188,9 +188,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 (l)"), - r = attrans("Wallmounted Signal (r)"), - t = attrans("Wallmounted Signal (t)"), + l = attrans("Wallmounted Signal (left)"), + r = attrans("Wallmounted Signal (right)"), + t = attrans("Wallmounted Signal (top)"), } 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, { diff --git a/advtrains/trackplacer.lua b/advtrains/trackplacer.lua index fe76290..9f97171 100644 --- a/advtrains/trackplacer.lua +++ b/advtrains/trackplacer.lua @@ -310,7 +310,7 @@ end minetest.register_craftitem("advtrains:trackworker",{ - description = attrans("Track Worker Tool\n\nLeft-click: change rail type (straight/curve/switch)\nRight-click: rotate rail/bumper/signal/etc."), + description = attrans("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", @@ -337,7 +337,7 @@ minetest.register_craftitem("advtrains:trackworker",{ nnprefix, suffix=string.match(node.name, "^(.+)_([^_]+)$") rotation = "" if not tp.tracks[nnprefix] or not tp.tracks[nnprefix].twrotate[suffix] 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(), attrans("This node can't be rotated using the trackworker.")) return end end @@ -347,7 +347,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 = attrans("This track can not be rotated.") if reason then str = str .. " " .. reason end @@ -374,7 +374,7 @@ minetest.register_craftitem("advtrains:trackworker",{ if v==rotation then modpos=k end end if not modpos 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(), attrans("This node can't be rotated using the trackworker.")) return end advtrains.ndb.swap_node(pos, {name=nnprefix.."_"..suffix..modext[modpos+1], param2=node.param2}) @@ -401,7 +401,7 @@ minetest.register_craftitem("advtrains:trackworker",{ nnprefix, suffix=string.match(node.name, "^(.+)_([^_]+)$") rotation = "" if not tp.tracks[nnprefix] or not tp.tracks[nnprefix].twcycle[suffix] then - minetest.chat_send_player(user:get_player_name(), attrans("This node can't be changed using the trackworker!")) + minetest.chat_send_player(user:get_player_name(), attrans("This node can't be changed using the trackworker.")) return end end @@ -411,7 +411,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 changed!") + local str = attrans("This track can not be changed.") if reason then str = str .. " " .. reason end diff --git a/advtrains/tracks.lua b/advtrains/tracks.lua index 3959232..ee82426 100644 --- a/advtrains/tracks.lua +++ b/advtrains/tracks.lua @@ -446,7 +446,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(), attrans("This track can not be removed.") .. " " .. reason) end return ok end @@ -646,17 +646,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(), attrans("Can't place slope: 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(), attrans("Can't place slope: 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(), attrans("Can't place slope: space occupied.")) return istack end if not advtrains.check_track_protection(pos, player:get_player_name()) then @@ -709,17 +709,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(), attrans("Can't place slope: 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(), attrans("Can't place slope: 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(), attrans("Can't place slope: no supporting node at upper end.")) return itemstack end end diff --git a/advtrains/wagons.lua b/advtrains/wagons.lua index 536c8d4..993d7d3 100644 --- a/advtrains/wagons.lua +++ b/advtrains/wagons.lua @@ -213,7 +213,7 @@ function wagon:on_punch(puncher, time_from_last_punch, tool_capabilities, direct 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(), attrans("The wagon's inventory is not empty.")); return end end @@ -711,7 +711,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, "Wagon has no seats!" + local allow, rsn=false, attrans("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 @@ -722,16 +722,16 @@ function wagon:on_rightclick(clicker) self:get_on(clicker, seatid) return else - rsn="Wagon is full." + rsn=attrans("This wagon is full.") end else - rsn="Doors are closed! (try holding sneak key!)" + rsn=attrans("Doors are closed! (Try holding sneak key!)") end end end end end - minetest.chat_send_player(pname, attrans("Can't get on: "..rsn)) + minetest.chat_send_player(pname, rsn or attrans("You can't get on this wagon.")) else self:show_get_on_form(pname) end @@ -1262,7 +1262,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, attrans("Doors are closed. Use Sneak+rightclick to ignore the closed doors and get off.")) end if fields.off then self:get_off(no) @@ -1271,7 +1271,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, "Not allowed to access a driver stand!" + return false, attrans("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:getpos(), self:train().text_outside) diff --git a/advtrains_interlocking/tsr_rail.lua b/advtrains_interlocking/tsr_rail.lua index f302540..c1e3c1c 100644 --- a/advtrains_interlocking/tsr_rail.lua +++ b/advtrains_interlocking/tsr_rail.lua @@ -3,13 +3,15 @@ -- 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 + local function updateform(pos) local meta = minetest.get_meta(pos) local pe = advtrains.encode_pos(pos) local npr = advtrains.interlocking.npr_rails[pe] or 2 - meta:set_string("infotext", "Point speed restriction: "..npr) - meta:set_string("formspec", "field[npr;Set point speed restriction:;"..npr.."]") + meta:set_string("infotext", S("Point speed restriction: @1",npr)) + meta:set_string("formspec", "field[npr;"..S("Set point speed restriction:")..";"..npr.."]") end @@ -25,11 +27,11 @@ local adefunc = function(def, preset, suffix, rotation) on_receive_fields = function(pos, formname, fields, player) local pname = player:get_player_name() if not minetest.check_player_privs(pname, {interlocking=true}) then - minetest.chat_send_player(pname, "Interlocking privilege required!") + minetest.chat_send_player(pname, S("You are not allowed to configure this track without the @1 privilege.", "interlocking")) return end if minetest.is_protected(pos, pname) then - minetest.chat_send_player(pname, "This rail is protected!") + minetest.chat_send_player(pname, S("You are not allowed to configure this track.")) minetest.record_protection_violation(pos, pname) return end @@ -59,7 +61,7 @@ if minetest.get_modpath("advtrains_train_track") ~= nil then models_prefix="advtrains_dtrack", models_suffix=".b3d", shared_texture="advtrains_dtrack_shared_npr.png", - description="Point Speed Restriction Rail", + description=S("Point Speed Restriction Track"), formats={}, get_additional_definiton = adefunc, }, advtrains.trackpresets.t_30deg_straightonly) diff --git a/advtrains_line_automation/stoprail.lua b/advtrains_line_automation/stoprail.lua index 55a4785..6c74a3d 100644 --- a/advtrains_line_automation/stoprail.lua +++ b/advtrains_line_automation/stoprail.lua @@ -28,7 +28,7 @@ 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, "Position is protected!") + minetest.chat_send_player(pname, attrans("You are not allowed to configure this track.")) return end @@ -73,7 +73,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, "Position is protected!") + minetest.chat_send_player(pname, attrans("You are not allowed to configure this track.")) return end @@ -94,7 +94,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, "Station code '"..fields.stn.."' does already exist and is owned by "..stn.owner) + minetest.chat_send_player(pname, attrans("Station code \"@1\" already exists and is owned by @2.", fields.stn, stn.owner)) show_stoprailform(pos,player) return end @@ -108,7 +108,7 @@ 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, "Not allowed to edit station name, owned by "..stn.owner) + minetest.chat_send_player(pname, attrans("This station is owned by @1. You are not allowed to edit its name.", stn.owner)) end end @@ -218,7 +218,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="Station/Stop Rail", + description=attrans("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 50fb2bc..1a7009f 100644 --- a/advtrains_luaautomation/active_common.lua +++ b/advtrains_luaautomation/active_common.lua @@ -1,4 +1,4 @@ - +local S = atltrans local ac = {nodes={}} @@ -14,7 +14,7 @@ end function ac.after_place_node(pos, player) local meta=minetest.get_meta(pos) meta:set_string("formspec", ac.getform(pos, meta)) - meta:set_string("infotext", "LuaATC component, unconfigured.") + meta:set_string("infotext", S("Unconfigured LuaATC component")) local ph=minetest.pos_to_string(pos) --just get first available key! for en,_ in pairs(atlatc.envs) do @@ -43,11 +43,11 @@ function ac.getform(pos, meta_p) end local form = "size["..atlatc.CODE_FORM_SIZE.."]" .."style[code;font=mono]" - .."label[0,-0.1;Environment]" + .."label[0,-0.1;"..S("LuaATC Environment").."]" .."dropdown[0,0.3;3;env;"..table.concat(envs_asvalues, ",")..";"..sel.."]" - .."button[5,0.2;2,1;save;Save]" - .."button[7,0.2;3,1;cle;Clear Local Env.]" - .."textarea[0.3,1.5;"..atlatc.CODE_FORM_SIZE..";code;Code;"..minetest.formspec_escape(code).."]" + .."button[5,0.2;2,1;save;"..S("Save").."]" + .."button[7,0.2;3,1;cle;"..S("Clear Local Environment").."]" + .."textarea[0.3,1.5;"..atlatc.CODE_FORM_SIZE..";code;"..S("Code")..";"..minetest.formspec_escape(code).."]" .."label["..atlatc.CODE_FORM_ERRLABELPOS..";"..err.."]" return form end @@ -61,7 +61,7 @@ end function ac.on_receive_fields(pos, formname, fields, player) if not minetest.check_player_privs(player:get_player_name(), {atlatc=true}) then - minetest.chat_send_player(player:get_player_name(), "Missing privilege: atlatc - Operation cancelled!") + minetest.chat_send_player(player:get_player_name(), S("You are not allowed to configure this LuaATC component without the @1 privilege.", "atlatc")) return end @@ -91,9 +91,9 @@ function ac.on_receive_fields(pos, formname, fields, player) meta:set_string("formspec", ac.getform(pos, meta)) if nodetbl.env then - meta:set_string("infotext", "LuaATC component, assigned to environment '"..nodetbl.env.."'") + meta:set_string("infotext", S("LuaATC component assigned to environment '@1'", nodetbl.env)) else - meta:set_string("infotext", "LuaATC component, invalid enviroment set!") + meta:set_string("infotext", S("LuaATC component assigned to an invalid environment")) end end @@ -168,7 +168,7 @@ function ac.run_in_env(pos, evtdata, customfct_p, ignore_no_code) atlatc.active.nodes[ph].err=dataout env:log("error", "LuaATC component at",ph,": LUA Error:",dataout) if meta then - meta:set_string("infotext", "LuaATC component, ERROR:"..dataout) + meta:set_string("infotext", S("LuaATC component with error: @1", dataout)) end --TODO temporary --if customfct.atc_id then diff --git a/advtrains_luaautomation/atc_rail.lua b/advtrains_luaautomation/atc_rail.lua index b98648e..f6a7823 100644 --- a/advtrains_luaautomation/atc_rail.lua +++ b/advtrains_luaautomation/atc_rail.lua @@ -220,7 +220,7 @@ advtrains.register_tracks("default", { models_prefix="advtrains_dtrack", models_suffix=".b3d", shared_texture="advtrains_dtrack_shared_atc.png", - description=atltrans("LuaATC Rail"), + description=atltrans("LuaATC Track"), formats={}, get_additional_definiton = function(def, preset, suffix, rotation) return { diff --git a/advtrains_luaautomation/init.lua b/advtrains_luaautomation/init.lua index c51aa71..b359142 100644 --- a/advtrains_luaautomation/init.lua +++ b/advtrains_luaautomation/init.lua @@ -2,15 +2,15 @@ -- Lua automation features for advtrains -- Uses global table 'atlatc' (AdvTrains_LuaATC) ---TODO: re-add localization (if merging localization, discard this hunk please) -atltrans = function(s,a,...)a={a,...}return s:gsub("@(%d+)",function(n)return a[tonumber(n)]end)end +atltrans = attrans +local S = atltrans --Privilege --Only trusted players should be enabled to build stuff which can break the server. atlatc = { envs = {}} -minetest.register_privilege("atlatc", { description = "Player can place and modify LUA ATC components. Grant with care! Allows to execute bad LUA code.", give_to_singleplayer = false, default= false }) +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 atlatc.CODE_FORM_SIZE = "15,12" diff --git a/advtrains_luaautomation/mesecon_controller.lua b/advtrains_luaautomation/mesecon_controller.lua index bffff84..6981839 100644 --- a/advtrains_luaautomation/mesecon_controller.lua +++ b/advtrains_luaautomation/mesecon_controller.lua @@ -6,6 +6,7 @@ -- From Mesecons mod https://mesecons.net/ -- (c) Jeija and Contributors +local S = atltrans local BASENAME = "advtrains_luaautomation:mesecon_controller" local rules = { @@ -207,7 +208,7 @@ for d = 0, 1 do } minetest.register_node(node_name, { - description = "LuaATC Mesecon Controller", + description = S("LuaATC Mesecon Controller"), drawtype = "nodebox", tiles = { top, diff --git a/advtrains_luaautomation/operation_panel.lua b/advtrains_luaautomation/operation_panel.lua index c118ff3..8e12651 100644 --- a/advtrains_luaautomation/operation_panel.lua +++ b/advtrains_luaautomation/operation_panel.lua @@ -1,3 +1,4 @@ +local S = atltrans local function on_punch(pos,node,player) atlatc.interrupt.add(0, pos, {type="punch", punch=true, name=player:get_player_name()}) @@ -7,7 +8,7 @@ end minetest.register_node("advtrains_luaautomation:oppanel", { drawtype = "normal", tiles={"atlatc_oppanel.png"}, - description = "LuaATC operation panel", + description = S("LuaATC Operation Panel"), groups = { cracky = 1, save_in_at_nodedb=1, diff --git a/advtrains_luaautomation/pcnaming.lua b/advtrains_luaautomation/pcnaming.lua index 5624b74..0089ae7 100644 --- a/advtrains_luaautomation/pcnaming.lua +++ b/advtrains_luaautomation/pcnaming.lua @@ -2,6 +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 + atlatc.pcnaming={name_map={}} function atlatc.pcnaming.load(stuff) if type(stuff)=="table" then @@ -26,7 +28,7 @@ end local pcrename = {} minetest.register_craftitem("advtrains_luaautomation:pcnaming",{ - description = attrans("Passive Component Naming Tool\n\nRight-click to name a passive component."), + description = S("Passive Component Naming Tool\n\nRight-click to name a passive component."), groups = {cracky=1}, -- key=name, value=rating; rating=1..3. inventory_image = "atlatc_pcnaming.png", wield_image = "atlatc_pcnaming.png", @@ -37,7 +39,7 @@ minetest.register_craftitem("advtrains_luaautomation:pcnaming",{ return end if not minetest.check_player_privs(pname, {atlatc=true}) then - minetest.chat_send_player(pname, "Missing privilege: atlatc") + minetest.chat_send_player(pname, S("You are not allowed to name LuaATC passive components without the @1 privilege.", "atlatc")) return end if pointed_thing.type=="node" then @@ -62,7 +64,7 @@ minetest.register_craftitem("advtrains_luaautomation:pcnaming",{ end end pcrename[pname] = pos - minetest.show_formspec(pname, "atlatc_naming", "field[pn;Set name of component (empty to clear);"..minetest.formspec_escape(pn).."]") + minetest.show_formspec(pname, "atlatc_naming", "field[pn;"..S("Set name of component (empty to clear)")..";"..minetest.formspec_escape(pn).."]") end end end, -- cgit v1.2.3 From 35167fe928e61ecf35c633014972e36c921a1b78 Mon Sep 17 00:00:00 2001 From: "Y. Wang" Date: Wed, 4 Sep 2024 10:31:18 +0000 Subject: Update LuaATC documentation * Fix broken link to RWT API documentation. * w_speed is no longer relevant since the 2021 new-ks update. --- advtrains_luaautomation/README.md | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) (limited to 'advtrains_luaautomation') diff --git a/advtrains_luaautomation/README.md b/advtrains_luaautomation/README.md index f98f7a0..f285d0f 100644 --- a/advtrains_luaautomation/README.md +++ b/advtrains_luaautomation/README.md @@ -145,22 +145,16 @@ asp = { -- the character of call_on and dead_end is purely informative call_on = , -- Call-on route, expect train in track ahead (not implemented yet) dead_end = , -- Route ends on a dead end (e.g. bumper) (not implemented yet) - - w_speed = , - -- "Warning speed restriction". Supposed for short-term speed - -- restrictions which always override any other restrictions - -- imposed by "speed" fields, until lifted by a value of -1 - -- (Example: german Langsamfahrstellen-Signale) } ``` -As of January 2020, the 'dst', 'call_on' and 'dead_end' fields are not used. +As of September 2024, the 'dst', 'call_on' and 'dead_end' fields are not used. #### Lines The advtrains_line_automation component adds a few contraptions that should make creating timeable systems easier. Part of its functionality is also available in LuaATC: -- `rwt.*` - all Railway Time functions are included as documented in [the wiki](https://advtrains.de/wiki/doku.php?id=dev:lines:rwt) +- `rwt.*` - all Railway Time functions are included as documented in [the wiki](https://advtrains.de/wiki/doku.php?id=dev:api:railway_time_api) - `schedule(rw_time, msg)`, `schedule_in(rw_dtime, msg)` Schedules an event of type {type="schedule", schedule=true, msg=msg} at (resp. after) the specified railway time (which can be in any format). You can only schedule one event this way. (uses the new lines-internal scheduler) -- cgit v1.2.3 From 322fc31e74151a0ce6a14b49185b0ec9000ff5b2 Mon Sep 17 00:00:00 2001 From: Maverick2797 Date: Wed, 30 Oct 2024 19:02:19 +0800 Subject: Fix get_fc concat when fc = nil --- advtrains_luaautomation/atc_rail.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'advtrains_luaautomation') diff --git a/advtrains_luaautomation/atc_rail.lua b/advtrains_luaautomation/atc_rail.lua index f6a7823..177fa78 100644 --- a/advtrains_luaautomation/atc_rail.lua +++ b/advtrains_luaautomation/atc_rail.lua @@ -95,7 +95,7 @@ function r.fire_event(pos, evtdata, appr_internal) if not train_id then return end local fc_list = {} for index,wagon_id in ipairs(train.trainparts) do - fc_list[index] = table.concat(advtrains.wagons[wagon_id].fc,"!") or "" + fc_list[index] = table.concat(advtrains.wagons[wagon_id].fc or {},"!") end return fc_list end, -- cgit v1.2.3 From 715efe22939bbe472ba4a2c81c74e64c45726bc2 Mon Sep 17 00:00:00 2001 From: Maverick2797 Date: Wed, 30 Oct 2024 21:06:29 +0800 Subject: Add get_fc_index() fucntion --- advtrains_luaautomation/README.md | 5 +++++ advtrains_luaautomation/atc_rail.lua | 8 ++++++++ 2 files changed, 13 insertions(+) (limited to 'advtrains_luaautomation') diff --git a/advtrains_luaautomation/README.md b/advtrains_luaautomation/README.md index f285d0f..275653c 100644 --- a/advtrains_luaautomation/README.md +++ b/advtrains_luaautomation/README.md @@ -270,6 +270,11 @@ Each wagon has a current FC, indicating its next destination. Returns a table with the entire FC list for each wagon in the train. Command: `get_fc()` Result: `{"", "foo!bar", "testing", "fc_1!fc_2!fc_3!?", "hello_world"}` + + - `get_fc_index()` + Returns a table with the current FC index for each wagon in the train. Use in conjunction with the result from `get_fc()` to find a the current FC for a wagon. + Command: `get_fc_index()` + Result: `{1, 1, 1, 2, 1}` - `set_fc(fc_list, reset_index)` Overwrites the FC list according to a table `fc_list`. A false or nil entry will leave the wagon unaffected, however all others will be overwritten. diff --git a/advtrains_luaautomation/atc_rail.lua b/advtrains_luaautomation/atc_rail.lua index 177fa78..dd26f51 100644 --- a/advtrains_luaautomation/atc_rail.lua +++ b/advtrains_luaautomation/atc_rail.lua @@ -99,6 +99,14 @@ function r.fire_event(pos, evtdata, appr_internal) end return fc_list end, + get_fc_index = function() + if not train_id then return end + local fc_index_list = {} + for widx, wagon_id in ipars(train.trainparts) do + fc_index_list[widx] = advtrains.wagons[wagon_id].fcind or 1 + end + return fc_index_list + end, set_fc = function(fc_list,reset_index) assertt(fc_list, "table") if not train_id then return false end -- cgit v1.2.3 From 19d8e8c1a7dc82fa0ca1f65f04936e22c8b6e2a7 Mon Sep 17 00:00:00 2001 From: Maverick2797 Date: Thu, 31 Oct 2024 18:06:33 +0800 Subject: Discard running interrupt and schedule events when LuaATC components are removed --- advtrains_luaautomation/active_common.lua | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'advtrains_luaautomation') diff --git a/advtrains_luaautomation/active_common.lua b/advtrains_luaautomation/active_common.lua index 1a7009f..074d3b3 100644 --- a/advtrains_luaautomation/active_common.lua +++ b/advtrains_luaautomation/active_common.lua @@ -55,6 +55,10 @@ end function ac.after_dig_node(pos, node, player) advtrains.invalidate_all_paths(pos) advtrains.ndb.clear(pos) + atlatc.interrupt.clear_ints_at_pos(pos) + if advtrains.lines and advtrains.lines.sched then + advtrains.lines.sched.discard_all(advtrains.encode_pos(pos)) + end local ph=minetest.pos_to_string(pos) ac.nodes[ph]=nil end -- cgit v1.2.3 From 8c91ce1ec178d6d49f3ddefc57d99eecd0caef3c Mon Sep 17 00:00:00 2001 From: orwell Date: Thu, 9 Jan 2025 00:57:32 +0100 Subject: Various bugfixes found in lunixforks debug --- advtrains/occupation.lua | 4 ++-- advtrains/trainlogic.lua | 4 ++-- advtrains/wagons.lua | 2 +- advtrains_interlocking/database.lua | 9 +++++---- advtrains_interlocking/route_ui.lua | 2 +- advtrains_interlocking/routesetting.lua | 9 ++++++--- advtrains_interlocking/signal_api.lua | 1 + advtrains_interlocking/tcb_ts_ui.lua | 5 ++++- advtrains_luaautomation/environment.lua | 10 +++++++--- 9 files changed, 29 insertions(+), 17 deletions(-) (limited to 'advtrains_luaautomation') diff --git a/advtrains/occupation.lua b/advtrains/occupation.lua index 26e1f79..20a986e 100644 --- a/advtrains/occupation.lua +++ b/advtrains/occupation.lua @@ -89,8 +89,8 @@ function o.set_item(train_id, pos, idx) assert(idx) local i = 1 while t[i] do - if t[i]==train_id and t[i+1]==index then - break + if t[i]==train_id and t[i+1]==idx then + return end i = i + 2 end diff --git a/advtrains/trainlogic.lua b/advtrains/trainlogic.lua index e4939df..0e588c7 100644 --- a/advtrains/trainlogic.lua +++ b/advtrains/trainlogic.lua @@ -630,7 +630,7 @@ function advtrains.train_step_b(id, train, dtime) local ocn = otrn.path_cn[ob_idx] local ocp = otrn.path_cp[ob_idx] - local target_is_inside, ref_index, facing + local target_is_inside, ref_index, facing, same_dir if base_cn == ocn then -- same direction @@ -1049,7 +1049,7 @@ function advtrains.update_trainpart_properties(train_id, invert_flipstate) if not wagon then local ent = advtrains.wagon_objects[w_id] local pdesc - if ent then + if ent and ent:get_pos() then pdesc = "at " .. minetest.pos_to_string(ent:get_pos()) elseif train.last_pos then pdesc = "near " .. minetest.pos_to_string(train.last_pos) diff --git a/advtrains/wagons.lua b/advtrains/wagons.lua index ef057e5..01c60ec 100644 --- a/advtrains/wagons.lua +++ b/advtrains/wagons.lua @@ -1333,7 +1333,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("Unable to load wagon type",wt,", using placeholder") rt = "advtrains:wagon_placeholder" proto = advtrains.wagon_prototypes[rt] end diff --git a/advtrains_interlocking/database.lua b/advtrains_interlocking/database.lua index 9c72a72..d80fb76 100644 --- a/advtrains_interlocking/database.lua +++ b/advtrains_interlocking/database.lua @@ -84,7 +84,7 @@ function ildb.load(data) if pos then -- that was a pos_to_string local epos = advtrains.encode_pos(pos) - --atdebug("ILDB converting TCB position format",pts,"->",epos) + atdebug("ILDB converting TCB position format",pts,"->",epos) track_circuit_breaks[epos] = tcb else -- keep entry, it is already new @@ -100,7 +100,7 @@ function ildb.load(data) local lpos = minetest.string_to_pos(lpts) if lpos then local epos = advtrains.encode_pos(lpos) - --atdebug("ILDB converting tcb",pts,"side",t_side,"route",t_route,"lock position format",lpts,"->",epos) + atdebug("ILDB converting tcb",pts,"side",t_side,"route",t_route,"lock position format",lpts,"->",epos) locks_n[epos] = state else -- already correct format @@ -131,7 +131,7 @@ function ildb.load(data) if pos then -- that was a pos_to_string local epos = advtrains.encode_pos(pos) - --atdebug("ILDB converting Route Lock position format",pts,"->",epos) + atdebug("ILDB converting Route Lock position format",pts,"->",epos) advtrains.interlocking.route.rte_locks[epos] = lta else -- keep entry, it is already new @@ -412,6 +412,7 @@ function ildb.check_and_repair_ts_at_pos(pos, tcb_connid, notify_pname, force_cr 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.") + ildb.update_rs_cache(ts_id) return ts_id end @@ -457,7 +458,7 @@ function ildb.get_all_tcbs_adjacent(inipos, inidir, per_track_callback) pos, connid = ti:next_branch() --atdebug("get_all_tcbs_adjacent: BRANCH: ",pos, connid) bconnid = nil - is_branch_start = true + local is_branch_start = true repeat -- callback if per_track_callback then diff --git a/advtrains_interlocking/route_ui.lua b/advtrains_interlocking/route_ui.lua index 7dddc6e..3c7bd64 100644 --- a/advtrains_interlocking/route_ui.lua +++ b/advtrains_interlocking/route_ui.lua @@ -67,7 +67,7 @@ function atil.show_route_edit_form(pname, sigd, routeid, sel_rpartidx) if c_rseg.locks then for pts, state in pairs(c_rseg.locks) do - local pos = minetest.string_to_pos(pts) + 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) diff --git a/advtrains_interlocking/routesetting.lua b/advtrains_interlocking/routesetting.lua index 28c8c3c..0668e62 100644 --- a/advtrains_interlocking/routesetting.lua +++ b/advtrains_interlocking/routesetting.lua @@ -104,7 +104,7 @@ function ilrs.set_route(signal, route, try) end for lp, state in pairs(c_locks) do - local confl = ilrs.has_route_lock(pts, state) + local confl = ilrs.has_route_lock(lp, state) local pos = advtrains.decode_pos(lp) if advtrains.is_passive(pos) then @@ -131,7 +131,8 @@ function ilrs.set_route(signal, route, try) 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 + 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!" end @@ -413,7 +414,9 @@ function ilrs.update_route(sigd, tcbs, newrte, cancel) -- set_route now sets the signal aspects --has_changed_aspect = true -- route success. apply default_autoworking flag if requested - tcbs.route_auto = route.default_autoworking + if route.default_autoworking then + tcbs.route_auto = true --FIX 2025-01-08: never set it to false if it was true! + end end end if has_changed_aspect then diff --git a/advtrains_interlocking/signal_api.lua b/advtrains_interlocking/signal_api.lua index b607750..e92658d 100644 --- a/advtrains_interlocking/signal_api.lua +++ b/advtrains_interlocking/signal_api.lua @@ -375,6 +375,7 @@ function signal.reapply_aspect(pts) local rem_aspt = signal.aspects[remote] --atdebug("resolving remote",advtrains.decode_pos(remote),"aspt",rem_aspt) local rem_pos = advtrains.decode_pos(remote) + local _,rem_ndef rem_masp, _, _, rem_ndef = signal.get_aspect_internal(rem_pos, rem_aspt) if rem_masp then if rem_ndef.advtrains and rem_ndef.advtrains.get_aspect_info then diff --git a/advtrains_interlocking/tcb_ts_ui.lua b/advtrains_interlocking/tcb_ts_ui.lua index 59d3be4..814a11a 100755 --- a/advtrains_interlocking/tcb_ts_ui.lua +++ b/advtrains_interlocking/tcb_ts_ui.lua @@ -776,7 +776,7 @@ function advtrains.interlocking.check_route_valid(route, sigd) if c_rseg.locks then for pts, state in pairs(c_rseg.locks) do - local pos = minetest.string_to_pos(pts) + local pos = advtrains.decode_pos(pts) if not advtrains.is_passive(pos) then return false, "No passive component for lock at "..pts end @@ -795,6 +795,9 @@ function advtrains.interlocking.check_route_valid(route, sigd) i = i + 1 end -- check end TCB + if not c_sigd then + return false, "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) diff --git a/advtrains_luaautomation/environment.lua b/advtrains_luaautomation/environment.lua index b54d45c..a6ed2c7 100644 --- a/advtrains_luaautomation/environment.lua +++ b/advtrains_luaautomation/environment.lua @@ -226,11 +226,15 @@ if advtrains.interlocking then end static_env.get_aspect = function(signal) local pos = atlatc.pcnaming.resolve_pos(signal) - return advtrains.interlocking.signal_get_aspect(pos) + return advtrains.interlocking.signal.get_aspect_info(pos) end - static_env.set_aspect = function(signal, asp) + static_env.set_aspect = function(signal, main_asp, rem_signal) + if type(main_asp) == "table" then + error("set_aspect: Parameters of this method have changed to (signal, main_asp, rem_signal) with introduction of distant signalling: parameter 2 is now the main aspect name (a string)") + end local pos = atlatc.pcnaming.resolve_pos(signal) - return advtrains.interlocking.signal_set_aspect(pos,asp) + local rem_pos = rem_signal and atlatc.pcnaming.resolve_pos(rem_signal) + return advtrains.interlocking.signal_set_aspect(pos, main_asp, rem_pos) end --section_occupancy() -- cgit v1.2.3 From 510734f953f1bf9a4094f67a86a923dc66437f79 Mon Sep 17 00:00:00 2001 From: Maverick2797 Date: Fri, 28 Mar 2025 15:12:12 +0800 Subject: Add craft recipes for Interlocking Tool, Trackmap Tool and PCNaming Tool --- advtrains_interlocking/tool.lua | 6 ++++++ advtrains_luaautomation/pcnaming.lua | 5 +++++ advtrains_trackmap/viewer.lua | 5 +++++ 3 files changed, 16 insertions(+) (limited to 'advtrains_luaautomation') diff --git a/advtrains_interlocking/tool.lua b/advtrains_interlocking/tool.lua index 560e129..5ceae04 100644 --- a/advtrains_interlocking/tool.lua +++ b/advtrains_interlocking/tool.lua @@ -124,3 +124,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"} +}) \ No newline at end of file diff --git a/advtrains_luaautomation/pcnaming.lua b/advtrains_luaautomation/pcnaming.lua index 0089ae7..ba8048d 100644 --- a/advtrains_luaautomation/pcnaming.lua +++ b/advtrains_luaautomation/pcnaming.lua @@ -86,3 +86,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"} +}) \ No newline at end of file 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 -- cgit v1.2.3 From 867eb387c5893b004996d6e68efddd9ca2fca36a Mon Sep 17 00:00:00 2001 From: Maverick2797 Date: Fri, 28 Mar 2025 22:28:11 +0800 Subject: Add craft recipes for LuaATC components --- advtrains_luaautomation/init.lua | 3 +++ advtrains_luaautomation/recipes.lua | 27 +++++++++++++++++++++++++++ advtrains_luaautomation/settingtypes.txt | 2 ++ advtrains_train_track/init.lua | 8 ++++++++ 4 files changed, 40 insertions(+) create mode 100644 advtrains_luaautomation/recipes.lua create mode 100644 advtrains_luaautomation/settingtypes.txt (limited to 'advtrains_luaautomation') diff --git a/advtrains_luaautomation/init.lua b/advtrains_luaautomation/init.lua index b359142..a2f4eb9 100644 --- a/advtrains_luaautomation/init.lua +++ b/advtrains_luaautomation/init.lua @@ -40,6 +40,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/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_train_track/init.lua b/advtrains_train_track/init.lua index f551ec5..35937bc 100644 --- a/advtrains_train_track/init.lua +++ b/advtrains_train_track/init.lua @@ -654,6 +654,14 @@ advtrains.register_tracks("default", { 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 -- cgit v1.2.3 From ed7242c632d63c5d749d3bb9de57c5734b4c5ee1 Mon Sep 17 00:00:00 2001 From: orwell Date: Mon, 5 May 2025 22:39:56 +0200 Subject: luaautomation: Split functions return the new train id --- advtrains_luaautomation/atc_rail.lua | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) (limited to 'advtrains_luaautomation') diff --git a/advtrains_luaautomation/atc_rail.lua b/advtrains_luaautomation/atc_rail.lua index dd26f51..c98f62b 100644 --- a/advtrains_luaautomation/atc_rail.lua +++ b/advtrains_luaautomation/atc_rail.lua @@ -62,7 +62,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 +73,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 +81,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 -- cgit v1.2.3