diff options
Diffstat (limited to 'advtrains_luaautomation')
22 files changed, 3557 insertions, 62 deletions
diff --git a/advtrains_luaautomation/README.md b/advtrains_luaautomation/README.md index f98f7a0..275653c 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 = <boolean>, -- Call-on route, expect train in track ahead (not implemented yet) dead_end = <boolean>, -- Route ends on a dead end (e.g. bumper) (not implemented yet) - - w_speed = <integer>, - -- "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) @@ -276,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/active_common.lua b/advtrains_luaautomation/active_common.lua index 50fb2bc..d0ae2a4 100644 --- a/advtrains_luaautomation/active_common.lua +++ b/advtrains_luaautomation/active_common.lua @@ -1,4 +1,5 @@ - +-- Get current translator +local S = atlatc.translate local ac = {nodes={}} @@ -14,7 +15,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 +44,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 @@ -55,13 +56,17 @@ 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 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 +96,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 +173,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..594de5c 100644 --- a/advtrains_luaautomation/atc_rail.lua +++ b/advtrains_luaautomation/atc_rail.lua @@ -2,6 +2,9 @@ -- registers and handles the ATC rail. Active component. -- This is the only component that can interface with trains, so train interface goes here too. +-- Get current translator +local S = atlatc.translate + --Using subtable local r={} @@ -62,7 +65,7 @@ function r.fire_event(pos, evtdata, appr_internal) local new_id = advtrains.split_train_at_index(train, index) if new_id then minetest.after(1,advtrains.atc.train_set_command,advtrains.trains[new_id], cmd, atc_arrow) - return true + return new_id end return false end, @@ -73,7 +76,7 @@ function r.fire_event(pos, evtdata, appr_internal) if new_id then minetest.after(1,advtrains.atc.train_set_command,advtrains.trains[new_id], cmd, atc_arrow) end - return fc or "" + return (fc or ""), new_id end, split_off_locomotive = function(cmd, len) assertt(cmd, "string") @@ -81,7 +84,8 @@ function r.fire_event(pos, evtdata, appr_internal) local new_id, fc = advtrains.split_train_at_fc(train, true, len) if new_id then minetest.after(1,advtrains.atc.train_set_command,advtrains.trains[new_id], cmd, atc_arrow) - end + end + return (fc or ""), new_id end, train_length = function () if not train_id then return false end @@ -95,10 +99,18 @@ 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, + 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 @@ -220,7 +232,7 @@ advtrains.register_tracks("default", { models_prefix="advtrains_dtrack", models_suffix=".b3d", shared_texture="advtrains_dtrack_shared_atc.png", - description=atltrans("LuaATC Rail"), + description=S("LuaATC Track"), formats={}, get_additional_definiton = function(def, preset, suffix, rotation) return { diff --git a/advtrains_luaautomation/chatcmds.lua b/advtrains_luaautomation/chatcmds.lua index b6ffaee..7691013 100644 --- a/advtrains_luaautomation/chatcmds.lua +++ b/advtrains_luaautomation/chatcmds.lua @@ -1,28 +1,31 @@ --chatcmds.lua --Registers commands to modify the init and step code for LuaAutomation +-- Get current translator +local S = atlatc.translate + local function get_init_form(env, pname) local err = env.init_err or "" local code = env.init_code or "" local form = "size["..atlatc.CODE_FORM_SIZE.."]" .."style[code;font=mono]" - .."button[0.0,0.2;2.5,1;run;Run Init Code]" - .."button[2.5,0.2;2.5,1;cls;Clear S]" - .."button[5.0,0.2;2.5,1;save;Save]" - .."button[7.5,0.2;2.5,1;del;Delete Env.]" - .."textarea[0.3,1.5;"..atlatc.CODE_FORM_SIZE..";code;Environment initialization code;"..minetest.formspec_escape(code).."]" + .."button[0.0,0.2;2.5,1;run;"..S("Run Init Code").."]" + .."button[2.5,0.2;2.5,1;cls;"..S("Clear S").."]" + .."button[5.0,0.2;2.5,1;save;"..S("Save").."]" + .."button[7.5,0.2;2.5,1;del;"..S("Delete Env.").."]" + .."textarea[0.3,1.5;"..atlatc.CODE_FORM_SIZE..";code;"..S("Environment initialization code")..";"..minetest.formspec_escape(code).."]" .."label[0.0,9.7;"..err.."]" return form end core.register_chatcommand("env_setup", { params = "<environment name>", - description = "Set up and modify AdvTrains LuaAutomation environment", + description = S("Set up and modify AdvTrains LuaAutomation environment"), privs = {atlatc=true}, func = function(name, param) local env=atlatc.envs[param] - if not env then return false,"Invalid environment name!" end + if not env then return false,S("Invalid environment name!") end minetest.show_formspec(name, "atlatc_envsetup_"..param, get_init_form(env, name)) return true end, @@ -30,52 +33,52 @@ core.register_chatcommand("env_setup", { core.register_chatcommand("env_create", { params = "<environment name>", - description = "Create an AdvTrains LuaAutomation environment", + description = S("Create an AdvTrains LuaAutomation environment"), privs = {atlatc=true}, func = function(name, param) - if not param or param=="" then return false, "Name required!" end - if string.find(param, "[^a-zA-Z0-9-_]") then return false, "Invalid name (only common characters)" end - if atlatc.envs[param] then return false, "Environment already exists!" end + if not param or param=="" then return false, S("Name required!") end + if string.find(param, "[^a-zA-Z0-9-_]") then return false, S("Invalid name (only common characters)") end + if atlatc.envs[param] then return false, S("Environment already exists!") end atlatc.envs[param] = atlatc.env_new(param) atlatc.envs[param].subscribers = {name} - return true, "Created environment '"..param.."'. Use '/env_setup "..param.."' to define global initialization code, or start building LuaATC components!" + return true, S("Created environment '@1'. Use '/env_setup @2' to define global initialization code, or start building LuaATC components!", param, param) end, }) core.register_chatcommand("env_subscribe", { params = "<environment name>", - description = "Subscribe to the log of an Advtrains LuaATC environment", + description = S("Subscribe to the log of an Advtrains LuaATC environment"), privs = {atlatc=true}, func = function(name, param) local env=atlatc.envs[param] - if not env then return false,"Invalid environment name!" end + if not env then return false,S("Invalid environment name!") end for _,pname in ipairs(env.subscribers) do if pname==name then - return false, "Already subscribed!" + return false, S("Already subscribed!") end end table.insert(env.subscribers, name) - return true, "Subscribed to environment '"..param.."'." + return true, S("Subscribed to environment '@1'.", param) end, }) core.register_chatcommand("env_unsubscribe", { params = "<environment name>", - description = "Unubscribe to the log of an Advtrains LuaATC environment", + description = S("Unubscribe to the log of an Advtrains LuaATC environment"), privs = {atlatc=true}, func = function(name, param) local env=atlatc.envs[param] - if not env then return false,"Invalid environment name!" end + if not env then return false,S("Invalid environment name!") end for index,pname in ipairs(env.subscribers) do if pname==name then table.remove(env.subscribers, index) - return true, "Successfully unsubscribed!" + return true, S("Successfully unsubscribed!") end end - return false, "Not subscribed to environment '"..param.."'." + return false, S("Not subscribed!") end, }) core.register_chatcommand("env_subscriptions", { params = "[environment name]", - description = "List Advtrains LuaATC environments you are subscribed to (no parameters) or subscribers of an environment (giving an env name).", + description = S("List Advtrains LuaATC environments you are subscribed to (no parameters) or subscribers of an environment (giving an env name)."), privs = {atlatc=true}, func = function(name, param) if not param or param=="" then @@ -89,19 +92,19 @@ core.register_chatcommand("env_subscriptions", { end end if none then - return false, "Not subscribed to any!" + return false, S("Not subscribed to any!") end return true end local env=atlatc.envs[param] - if not env then return false,"Invalid environment name!" end + if not env then return false,S("Invalid environment name!") end local none=true for index,pname in ipairs(env.subscribers) do none=false minetest.chat_send_player(name, pname) end if none then - return false, "No subscribers!" + return false, S("No subscribers!") end return true end, @@ -115,7 +118,7 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) local envname=string.match(formname, "^atlatc_delconfirm_(.+)$") if envname and fields.sure=="YES" then atlatc.envs[envname]=nil - minetest.chat_send_player(pname, "Environment deleted!") + minetest.chat_send_player(pname, S("Environment deleted!")) return end @@ -126,7 +129,8 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) if not env then return end if fields.del then - minetest.show_formspec(pname, "atlatc_delconfirm_"..envname, "field[sure;"..minetest.formspec_escape("SURE TO DELETE ENVIRONMENT "..envname.."? Type YES (all uppercase) to continue or just quit form to cancel.")..";]") + minetest.show_formspec(pname, "atlatc_delconfirm_"..envname, "field[sure;" + ..minetest.formspec_escape(S("SURE TO DELETE ENVIRONMENT @1? Type YES (all uppercase) to continue or just quit form to cancel.", envname))..";]") return end diff --git a/advtrains_luaautomation/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() diff --git a/advtrains_luaautomation/init.lua b/advtrains_luaautomation/init.lua index c51aa71..753340d 100644 --- a/advtrains_luaautomation/init.lua +++ b/advtrains_luaautomation/init.lua @@ -2,15 +2,21 @@ -- 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 ---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 }) +-- Initialize internationalization (using ywang's poconvert) +advtrains.poconvert.from_flat("advtrains_luaautomation") +-- ask engine for translator instance, this will load the translation files +atlatc.translate = core.get_translator("advtrains_luaautomation") + +-- Get current translator +local S = atlatc.translate + +--Privilege +--Only trusted players should be enabled to build stuff which can break the server. +minetest.register_privilege("atlatc", { description = S("Can place and configure LuaATC components, including execute potentially harmful Lua code"), give_to_singleplayer = false, default= false }) --Size of code input forms in X,Y notation. Must be at least 10x10 atlatc.CODE_FORM_SIZE = "15,12" @@ -40,6 +46,9 @@ dofile(mp.."/pcnaming.lua") dofile(mp.."/chatcmds.lua") +if minetest.settings:get_bool("advtrains_luaautomation_enable_atlac_recipes",false) == true then + dofile(mp.."/recipes.lua") +end local filename=minetest.get_worldpath().."/advtrains_luaautomation" diff --git a/advtrains_luaautomation/locale/advtrains_luaautomation.de.tr b/advtrains_luaautomation/locale/advtrains_luaautomation.de.tr new file mode 100644 index 0000000..8927753 --- /dev/null +++ b/advtrains_luaautomation/locale/advtrains_luaautomation.de.tr @@ -0,0 +1,39 @@ +# textdomain: advtrains_luaautomation +Clear Local Environment=Lokale Umgebung leeren +Code=Quellcode +LuaATC Environment=LuaATC-Umgebung +LuaATC component assigned to an invalid environment=LuaATC-Komponente zugewiesen an ungültige Umgebung +LuaATC component assigned to environment '@1'=LuaATC-Komponente zugewiesen an Umgebung '@1' +LuaATC component with error: @1=LuaATC-Bauteil mit Fehlermeldung: @1 +Save=Speichern +Unconfigured LuaATC component=Nicht konfiguierter LuaATC-Bauteil +You are not allowed to configure this LuaATC component without the @1 privilege.=Sie dürfen ohne das „@1“-Privileg diesen LuaATC-Bauteil nicht konfigurieren. +LuaATC Track=LuaATC-Gleis +Already subscribed!=Bereits abonniert! +Clear S=S leeren +Create an AdvTrains LuaAutomation environment=Eine LuaATC-Umgebung erstellen +Created environment '@1'. Use '/env_setup @2' to define global initialization code, or start building LuaATC components!=Umgebung '@1' erstellt. Nutze '/env_setup @2' um Initialisierungscode zu definieren, oder beginne, LuaATC-Komponenten einzubauen! +Delete Env.=Umg. löschen +Environment already exists!=Umgebung existiert bereits! +Environment deleted!=Umgebung gelöscht! +Environment initialization code=Umgebungs-Initialisierungscode +Invalid environment name!=Ungültiger Umgebungsname! +Invalid name (only common characters)=Ungültiger Name (nur Standardzeichen) +List Advtrains LuaATC environments you are subscribed to (no parameters) or subscribers of an environment (giving an env name).=Abonnierte LuaATC-Umgebungen auflisten (ohne Parameter) oder Abonnenten einer bestimmten Umgebung anzeigen (Name angeben) +Name required!=Name benötigt! +No subscribers!=Keine Abonnenten! +Not subscribed to any!=Zu keiner Umgebung abonniert! +Not subscribed!=Nicht abonniert! +Run Init Code=Init.-Code ausführen +SURE TO DELETE ENVIRONMENT @1? Type YES (all uppercase) to continue or just quit form to cancel.=UMGEBUNG @1 WIRKLICH LÖSCHEN? Geben Sie YES (in Großbuchstaben) ein. Um abzubrechen einfach das Formular schließen. +Set up and modify AdvTrains LuaAutomation environment=LuaATC-Umgebung einstellen und bearbeiten +Subscribe to the log of an Advtrains LuaATC environment=Meldungen aus LuaATC-Umgebung abonnieren +Subscribed to environment '@1'.=Meldungen von '@1' abonniert. +Successfully unsubscribed!=Erfolgreich abgemeldet! +Unubscribe to the log of an Advtrains LuaATC environment=Meldungen aus LuaATC-Umgebung nicht mehr empfangen +Can place and configure LuaATC components, including execute potentially harmful Lua code=Kann LuaATC-Bauteile platzieren und konfigurieren (auch evtl. schädliche Programme ausführen) +LuaATC Mesecon Controller=LuaATC Mesecon-Steuerung +LuaATC Operation Panel=LuaATC-Steuerpanel +Passive Component Naming Tool@n@nRight-click to name a passive component.=PC-Benennungswerkzeug@n@nRechtsklick zur Benennung der passiven Komponente. +Set name of component (empty to clear)=Name der Komponente setzen (leer lassen um zu löschen) +You are not allowed to name LuaATC passive components without the @1 privilege.=Sie dürfen ohne das „@1“ Privileg keinen passiven LuaATC-Bauteil benennen.
\ No newline at end of file diff --git a/advtrains_luaautomation/locale/advtrains_luaautomation.fr.tr b/advtrains_luaautomation/locale/advtrains_luaautomation.fr.tr new file mode 100644 index 0000000..6f82d40 --- /dev/null +++ b/advtrains_luaautomation/locale/advtrains_luaautomation.fr.tr @@ -0,0 +1,39 @@ +# textdomain: advtrains_luaautomation +Clear Local Environment=Effacer l'environnement LuaATC +Code=Code +LuaATC Environment=Environnement LuaATC +LuaATC component assigned to an invalid environment=Composant LuaATC assigné à un environnement invalide +LuaATC component assigned to environment '@1'=Composant LuaATC assigné à l'environnement '@1' +LuaATC component with error: @1=Erreur @1 du composant LuaATC +Save=Sauvegarder +Unconfigured LuaATC component=Composant LuaATC non configuré +You are not allowed to configure this LuaATC component without the @1 privilege.=Vous ne pouvez configurer ce composant LuaATC sans le privilege @1. +#LuaATC Track=Voie de Chargement +Already subscribed!= +Clear S= +Create an AdvTrains LuaAutomation environment= +Created environment '@1'. Use '/env_setup @2' to define global initialization code, or start building LuaATC components!= +Delete Env.= +Environment already exists!= +Environment deleted!= +Environment initialization code= +Invalid environment name!= +Invalid name (only common characters)= +List Advtrains LuaATC environments you are subscribed to (no parameters) or subscribers of an environment (giving an env name).= +Name required!= +No subscribers!= +Not subscribed to any!= +Not subscribed!= +Run Init Code= +SURE TO DELETE ENVIRONMENT @1? Type YES (all uppercase) to continue or just quit form to cancel.= +Set up and modify AdvTrains LuaAutomation environment= +Subscribe to the log of an Advtrains LuaATC environment= +#Subscribed to environment '@1'.=Composant LuaATC assigné à l'environnement '@1' +Successfully unsubscribed!= +Unubscribe to the log of an Advtrains LuaATC environment= +Can place and configure LuaATC components, including execute potentially harmful Lua code=Permet le placement et la configuration de composants LuaATC avec risque d'exécution de code Lua dangereux +LuaATC Mesecon Controller=Commande Mesecon de LuaATC +LuaATC Operation Panel=Panneau de commande de LuaATC +Passive Component Naming Tool@n@nRight-click to name a passive component.=Outil de nommage de composant passif@n@nClic-Droit pour nommer un composant passif. +Set name of component (empty to clear)=Nommer le composant (chaîne vide pour effacer) +You are not allowed to name LuaATC passive components without the @1 privilege.=Vous ne pouvez nommer un composant LuaATC passif sans le privilege @1.
\ No newline at end of file diff --git a/advtrains_luaautomation/locale/advtrains_luaautomation.zh_CN.tr b/advtrains_luaautomation/locale/advtrains_luaautomation.zh_CN.tr new file mode 100644 index 0000000..558907f --- /dev/null +++ b/advtrains_luaautomation/locale/advtrains_luaautomation.zh_CN.tr @@ -0,0 +1,39 @@ +# textdomain: advtrains_luaautomation +Clear Local Environment= +Code= +LuaATC Environment= +LuaATC component assigned to an invalid environment= +LuaATC component assigned to environment '@1'= +LuaATC component with error: @1= +Save=保存 +Unconfigured LuaATC component=LuaATC 部件 (未配置) +You are not allowed to configure this LuaATC component without the @1 privilege.=您没有“@1”权限,不能配置这个 LuaATC 部件。 +#LuaATC Track=装货轨道 +Already subscribed!= +Clear S= +Create an AdvTrains LuaAutomation environment= +Created environment '@1'. Use '/env_setup @2' to define global initialization code, or start building LuaATC components!= +Delete Env.= +Environment already exists!= +Environment deleted!= +Environment initialization code= +Invalid environment name!= +Invalid name (only common characters)= +List Advtrains LuaATC environments you are subscribed to (no parameters) or subscribers of an environment (giving an env name).= +Name required!= +No subscribers!= +Not subscribed to any!= +Not subscribed!= +Run Init Code= +SURE TO DELETE ENVIRONMENT @1? Type YES (all uppercase) to continue or just quit form to cancel.= +Set up and modify AdvTrains LuaAutomation environment= +Subscribe to the log of an Advtrains LuaATC environment= +Subscribed to environment '@1'.= +Successfully unsubscribed!= +Unubscribe to the log of an Advtrains LuaATC environment= +Can place and configure LuaATC components, including execute potentially harmful Lua code= +LuaATC Mesecon Controller= +LuaATC Operation Panel= +Passive Component Naming Tool@n@nRight-click to name a passive component.=被动元件命名工具@n@n右键单击命名所选元件。 +Set name of component (empty to clear)= +You are not allowed to name LuaATC passive components without the @1 privilege.=您没有“@1”权限,不能命名被动元件。
\ No newline at end of file diff --git a/advtrains_luaautomation/locale/advtrains_luaautomation.zh_TW.tr b/advtrains_luaautomation/locale/advtrains_luaautomation.zh_TW.tr new file mode 100644 index 0000000..9743b79 --- /dev/null +++ b/advtrains_luaautomation/locale/advtrains_luaautomation.zh_TW.tr @@ -0,0 +1,39 @@ +# textdomain: advtrains_luaautomation +Clear Local Environment= +Code= +LuaATC Environment= +LuaATC component assigned to an invalid environment= +LuaATC component assigned to environment '@1'= +LuaATC component with error: @1= +Save=儲存 +Unconfigured LuaATC component=LuaATC 元件 (未配置) +You are not allowed to configure this LuaATC component without the @1 privilege.=您沒有「@1」許可權,不能配置這個 LuaATC 元件。 +#LuaATC Track=裝貨軌道 +Already subscribed!= +Clear S= +Create an AdvTrains LuaAutomation environment= +Created environment '@1'. Use '/env_setup @2' to define global initialization code, or start building LuaATC components!= +Delete Env.= +Environment already exists!= +Environment deleted!= +Environment initialization code= +Invalid environment name!= +Invalid name (only common characters)= +List Advtrains LuaATC environments you are subscribed to (no parameters) or subscribers of an environment (giving an env name).= +Name required!= +No subscribers!= +Not subscribed to any!= +Not subscribed!= +Run Init Code= +SURE TO DELETE ENVIRONMENT @1? Type YES (all uppercase) to continue or just quit form to cancel.= +Set up and modify AdvTrains LuaAutomation environment= +Subscribe to the log of an Advtrains LuaATC environment= +Subscribed to environment '@1'.= +Successfully unsubscribed!= +Unubscribe to the log of an Advtrains LuaATC environment= +Can place and configure LuaATC components, including execute potentially harmful Lua code= +LuaATC Mesecon Controller= +LuaATC Operation Panel= +Passive Component Naming Tool@n@nRight-click to name a passive component.=被動元件命名工具@n@n右鍵單擊命名所選元件。 +Set name of component (empty to clear)= +You are not allowed to name LuaATC passive components without the @1 privilege.=您沒有「@1」許可權,不能命名這個元件。
\ No newline at end of file diff --git a/advtrains_luaautomation/mesecon_controller.lua b/advtrains_luaautomation/mesecon_controller.lua index bffff84..9f1a931 100644 --- a/advtrains_luaautomation/mesecon_controller.lua +++ b/advtrains_luaautomation/mesecon_controller.lua @@ -6,6 +6,8 @@ -- From Mesecons mod https://mesecons.net/ -- (c) Jeija and Contributors +-- Get current translator +local S = atlatc.translate local BASENAME = "advtrains_luaautomation:mesecon_controller" local rules = { @@ -207,7 +209,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..adfaf09 100644 --- a/advtrains_luaautomation/operation_panel.lua +++ b/advtrains_luaautomation/operation_panel.lua @@ -1,3 +1,5 @@ +-- Get current translator +local S = atlatc.translate local function on_punch(pos,node,player) atlatc.interrupt.add(0, pos, {type="punch", punch=true, name=player:get_player_name()}) @@ -7,7 +9,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..7c7f0c9 100644 --- a/advtrains_luaautomation/pcnaming.lua +++ b/advtrains_luaautomation/pcnaming.lua @@ -2,6 +2,9 @@ --a.k.a Passive component naming --Allows to assign names to passive components, so they can be called like: --setstate("iamasignal", "green") +-- Get current translator +local S = atlatc.translate + atlatc.pcnaming={name_map={}} function atlatc.pcnaming.load(stuff) if type(stuff)=="table" then @@ -26,7 +29,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 +40,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 +65,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, @@ -84,3 +87,8 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) end end end) +minetest.register_craft({ + output = "advtrains_luaautomation:pcnaming", + type = "shapeless", + recipe = {"dye:red","advtrains:trackworker"} +}) diff --git a/advtrains_luaautomation/po/README.md b/advtrains_luaautomation/po/README.md new file mode 100644 index 0000000..3e94682 --- /dev/null +++ b/advtrains_luaautomation/po/README.md @@ -0,0 +1,70 @@ +# Translations +Please read this document before working on any translations. + +Unlike many other mods, Advtrains uses `.po` files for localization, +which are then automatically converted to `.tr` files when the mod is +loaded. Therefore, please submit patches that edit the `.po` files. + +## Getting Started +The translation files can be edited like any other `.po` file. + +If the translation file for your language does not exist, create it by +copying `template.txt` to `advtrains.XX.tr`, where `XX` is replaced by +the language code. + +Feel free to use the [discussion mailing list][srht-discuss] if you +have any questions regarding localization. + +You can share your `.po` file directly or [as a patch][gsm] to the [dev +mailing list][srht-devel]. The latter is encouraged, but, unlike code +changes, translation files sent directly are also accepted. + +[tr-format]: https://minetest.gitlab.io/minetest/translations/#translation-file-format +[srht-discuss]: https://lists.sr.ht/~gpcf/advtrains-discuss +[srht-devel]: https://lists.sr.ht/~gpcf/advtrains-devel +[gsm]: https://git-send-email.io + +## Translation Notes +* Translations should be consistent. You can use other entries or the +translations in Minetest as a reference. +* Translations do not have to fully correspond to the original text - +they only need to provide the same information. In particular, +translations do not need to have the same linguistical structure as the +original text. +* Replacement sequences (`@1`, `@2`, etc) should not be translated. +* Certain abbreviations or names, such as "Ks" or "Zs 3", should +generally not be translated. + +### (de) German +* Verwenden Sie die neue Rechtschreibung und die Sie-Form. +* Mit der deutschen Tastaturbelegung unter Linux können die +Anführungszeichen „“ mit AltGr-V bzw. AltGr-B eingegeben werden. + +### (zh) Chinese +(This section is written in English to avoid writing the note twice or +using only one of the variants, as most of this section applies to both +the traditional and simplified variants.) + +* Please use the 「」 quotation marks for Traditional Chinese and “” +for Simplified Chinese. +* Please use the fullwidth variants of: , 、 。 ? ! : ; +* Please use the halfwidth variants of: ( ) [ ] / \ | +* Please do not leave any space between Han characters (including +fullwidth punctuation marks). +* Please leave a space between Han characters (excluding fullwidth +punctuation marks) and characters from other scripts (including +halfwidth punctuation marks). However, do not leave any space between +Han characters and Arabic numerals. + +## Notes for developers +* The `update-translations.sh` script can be used to update the +translation files. However, please make sure to install the +`basic_trains` mod before running the script. +* Please make sure that the first argument to `S` (or `attrans`) _only_ +includes string literals without formatting or concatenation. This is +unfortunately a limitation of the `xgettext` utility. +* Avoid word-by-word translations. +* Avoid manipulating translated strings (except for concatenation). Use +server-side translations if you have to modify the text sent to users. +* Avoid truncating strings unless multibyte characters are handled +properly. diff --git a/advtrains_luaautomation/po/advtrains_luaautomation.pot b/advtrains_luaautomation/po/advtrains_luaautomation.pot new file mode 100644 index 0000000..b0adf58 --- /dev/null +++ b/advtrains_luaautomation/po/advtrains_luaautomation.pot @@ -0,0 +1,185 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the advtrains_luaautomation package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: advtrains_luaautomation\n" +"Report-Msgid-Bugs-To: advtrains-discuss@lists.sr.ht\n" +"POT-Creation-Date: 2025-06-11 23:03+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=CHARSET\n" +"Content-Transfer-Encoding: 8bit\n" + +#: active_common.lua +msgid "Unconfigured LuaATC component" +msgstr "" + +#: active_common.lua +msgid "LuaATC Environment" +msgstr "" + +#: active_common.lua chatcmds.lua +msgid "Save" +msgstr "" + +#: active_common.lua +msgid "Clear Local Environment" +msgstr "" + +#: active_common.lua +msgid "Code" +msgstr "" + +#: active_common.lua +msgid "" +"You are not allowed to configure this LuaATC component without the @1 " +"privilege." +msgstr "" + +#: active_common.lua +msgid "LuaATC component assigned to environment '@1'" +msgstr "" + +#: active_common.lua +msgid "LuaATC component assigned to an invalid environment" +msgstr "" + +#: active_common.lua +msgid "LuaATC component with error: @1" +msgstr "" + +#: atc_rail.lua +msgid "LuaATC Track" +msgstr "" + +#: chatcmds.lua +msgid "Run Init Code" +msgstr "" + +#: chatcmds.lua +msgid "Clear S" +msgstr "" + +#: chatcmds.lua +msgid "Delete Env." +msgstr "" + +#: chatcmds.lua +msgid "Environment initialization code" +msgstr "" + +#: chatcmds.lua +msgid "Set up and modify AdvTrains LuaAutomation environment" +msgstr "" + +#: chatcmds.lua +msgid "Invalid environment name!" +msgstr "" + +#: chatcmds.lua +msgid "Create an AdvTrains LuaAutomation environment" +msgstr "" + +#: chatcmds.lua +msgid "Name required!" +msgstr "" + +#: chatcmds.lua +msgid "Invalid name (only common characters)" +msgstr "" + +#: chatcmds.lua +msgid "Environment already exists!" +msgstr "" + +#: chatcmds.lua +msgid "" +"Created environment '@1'. Use '/env_setup @2' to define global " +"initialization code, or start building LuaATC components!" +msgstr "" + +#: chatcmds.lua +msgid "Subscribe to the log of an Advtrains LuaATC environment" +msgstr "" + +#: chatcmds.lua +msgid "Already subscribed!" +msgstr "" + +#: chatcmds.lua +msgid "Subscribed to environment '@1'." +msgstr "" + +#: chatcmds.lua +msgid "Unubscribe to the log of an Advtrains LuaATC environment" +msgstr "" + +#: chatcmds.lua +msgid "Successfully unsubscribed!" +msgstr "" + +#: chatcmds.lua +msgid "Not subscribed!" +msgstr "" + +#: chatcmds.lua +msgid "" +"List Advtrains LuaATC environments you are subscribed to (no parameters) or " +"subscribers of an environment (giving an env name)." +msgstr "" + +#: chatcmds.lua +msgid "Not subscribed to any!" +msgstr "" + +#: chatcmds.lua +msgid "No subscribers!" +msgstr "" + +#: chatcmds.lua +msgid "Environment deleted!" +msgstr "" + +#: chatcmds.lua +msgid "" +"SURE TO DELETE ENVIRONMENT @1? Type YES (all uppercase) to continue or just " +"quit form to cancel." +msgstr "" + +#: init.lua +msgid "" +"Can place and configure LuaATC components, including execute potentially " +"harmful Lua code" +msgstr "" + +#: mesecon_controller.lua +msgid "LuaATC Mesecon Controller" +msgstr "" + +#: operation_panel.lua +msgid "LuaATC Operation Panel" +msgstr "" + +#: pcnaming.lua +msgid "" +"Passive Component Naming Tool\n" +"\n" +"Right-click to name a passive component." +msgstr "" + +#: pcnaming.lua +msgid "" +"You are not allowed to name LuaATC passive components without the @1 " +"privilege." +msgstr "" + +#: pcnaming.lua +msgid "Set name of component (empty to clear)" +msgstr "" diff --git a/advtrains_luaautomation/po/de.po b/advtrains_luaautomation/po/de.po new file mode 100644 index 0000000..7327c77 --- /dev/null +++ b/advtrains_luaautomation/po/de.po @@ -0,0 +1,708 @@ +msgid "" +msgstr "" +"Project-Id-Version: advtrains\n" +"Report-Msgid-Bugs-To: advtrains-discuss@lists.sr.ht\n" +"POT-Creation-Date: 2025-06-11 23:03+0200\n" +"PO-Revision-Date: 2025-06-11 23:13+0200\n" +"Last-Translator: Y. Wang <yw05@forksworld.de>\n" +"Language-Team: German\n" +"Language: de\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 3.2.2\n" + +#: active_common.lua +msgid "Clear Local Environment" +msgstr "Lokale Umgebung leeren" + +#: active_common.lua +msgid "Code" +msgstr "Quellcode" + +#: active_common.lua +msgid "LuaATC Environment" +msgstr "LuaATC-Umgebung" + +#: active_common.lua +msgid "LuaATC component assigned to an invalid environment" +msgstr "LuaATC-Komponente zugewiesen an ungültige Umgebung" + +#: active_common.lua +msgid "LuaATC component assigned to environment '@1'" +msgstr "LuaATC-Komponente zugewiesen an Umgebung '@1'" + +#: active_common.lua +msgid "LuaATC component with error: @1" +msgstr "LuaATC-Bauteil mit Fehlermeldung: @1" + +#: active_common.lua chatcmds.lua +msgid "Save" +msgstr "Speichern" + +#: active_common.lua +msgid "Unconfigured LuaATC component" +msgstr "Nicht konfiguierter LuaATC-Bauteil" + +#: active_common.lua +msgid "" +"You are not allowed to configure this LuaATC component without the @1 " +"privilege." +msgstr "" +"Sie dürfen ohne das „@1“-Privileg diesen LuaATC-Bauteil nicht konfigurieren." + +#: atc_rail.lua +msgid "LuaATC Track" +msgstr "LuaATC-Gleis" + +#: chatcmds.lua +msgid "Already subscribed!" +msgstr "Bereits abonniert!" + +#: chatcmds.lua +msgid "Clear S" +msgstr "S leeren" + +#: chatcmds.lua +msgid "Create an AdvTrains LuaAutomation environment" +msgstr "Eine LuaATC-Umgebung erstellen" + +#: chatcmds.lua +msgid "" +"Created environment '@1'. Use '/env_setup @2' to define global " +"initialization code, or start building LuaATC components!" +msgstr "" +"Umgebung '@1' erstellt. Nutze '/env_setup @2' um Initialisierungscode zu " +"definieren, oder beginne, LuaATC-Komponenten einzubauen!" + +#: chatcmds.lua +msgid "Delete Env." +msgstr "Umg. löschen" + +#: chatcmds.lua +msgid "Environment already exists!" +msgstr "Umgebung existiert bereits!" + +#: chatcmds.lua +msgid "Environment deleted!" +msgstr "Umgebung gelöscht!" + +#: chatcmds.lua +msgid "Environment initialization code" +msgstr "Umgebungs-Initialisierungscode" + +#: chatcmds.lua +msgid "Invalid environment name!" +msgstr "Ungültiger Umgebungsname!" + +#: chatcmds.lua +msgid "Invalid name (only common characters)" +msgstr "Ungültiger Name (nur Standardzeichen)" + +#: chatcmds.lua +msgid "" +"List Advtrains LuaATC environments you are subscribed to (no parameters) or " +"subscribers of an environment (giving an env name)." +msgstr "" +"Abonnierte LuaATC-Umgebungen auflisten (ohne Parameter) oder Abonnenten " +"einer bestimmten Umgebung anzeigen (Name angeben)" + +#: chatcmds.lua +msgid "Name required!" +msgstr "Name benötigt!" + +#: chatcmds.lua +msgid "No subscribers!" +msgstr "Keine Abonnenten!" + +#: chatcmds.lua +msgid "Not subscribed to any!" +msgstr "Zu keiner Umgebung abonniert!" + +#: chatcmds.lua +msgid "Not subscribed!" +msgstr "Nicht abonniert!" + +#: chatcmds.lua +msgid "Run Init Code" +msgstr "Init.-Code ausführen" + +#: chatcmds.lua +msgid "" +"SURE TO DELETE ENVIRONMENT @1? Type YES (all uppercase) to continue or just " +"quit form to cancel." +msgstr "" +"UMGEBUNG @1 WIRKLICH LÖSCHEN? Geben Sie YES (in Großbuchstaben) ein. Um " +"abzubrechen einfach das Formular schließen." + +#: chatcmds.lua +msgid "Set up and modify AdvTrains LuaAutomation environment" +msgstr "LuaATC-Umgebung einstellen und bearbeiten" + +#: chatcmds.lua +msgid "Subscribe to the log of an Advtrains LuaATC environment" +msgstr "Meldungen aus LuaATC-Umgebung abonnieren" + +#: chatcmds.lua +msgid "Subscribed to environment '@1'." +msgstr "Meldungen von '@1' abonniert." + +#: chatcmds.lua +msgid "Successfully unsubscribed!" +msgstr "Erfolgreich abgemeldet!" + +#: chatcmds.lua +msgid "Unubscribe to the log of an Advtrains LuaATC environment" +msgstr "Meldungen aus LuaATC-Umgebung nicht mehr empfangen" + +#: init.lua +msgid "" +"Can place and configure LuaATC components, including execute potentially " +"harmful Lua code" +msgstr "" +"Kann LuaATC-Bauteile platzieren und konfigurieren (auch evtl. schädliche " +"Programme ausführen)" + +#: mesecon_controller.lua +msgid "LuaATC Mesecon Controller" +msgstr "LuaATC Mesecon-Steuerung" + +#: operation_panel.lua +msgid "LuaATC Operation Panel" +msgstr "LuaATC-Steuerpanel" + +#: pcnaming.lua +msgid "" +"Passive Component Naming Tool\n" +"\n" +"Right-click to name a passive component." +msgstr "" +"PC-Benennungswerkzeug\n" +"\n" +"Rechtsklick zur Benennung der passiven Komponente." + +#: pcnaming.lua +msgid "Set name of component (empty to clear)" +msgstr "Name der Komponente setzen (leer lassen um zu löschen)" + +#: pcnaming.lua +msgid "" +"You are not allowed to name LuaATC passive components without the @1 " +"privilege." +msgstr "" +"Sie dürfen ohne das „@1“ Privileg keinen passiven LuaATC-Bauteil benennen." + +#~ msgid "(Doors closed)" +#~ msgstr "(Türen geschlossen)" + +#~ msgid "3-way turnout" +#~ msgstr "Dreiwegweiche" + +#~ msgid "90+Angle Diamond Crossing Track" +#~ msgstr "Kreuzung mit einem achsenparallelen Gleis" + +#~ msgid "<No coupler>" +#~ msgstr "<Keine Kupplung vorhanden>" + +#~ msgid "@1 Platform (45 degree)" +#~ msgstr "Hoher @1-Bahnsteig (45°)" + +#~ msgid "@1 Platform (high)" +#~ msgstr "Hoher @1-Bahnsteig" + +#~ msgid "@1 Platform (low)" +#~ msgstr "Niedriger @1-Bahnsteig" + +#~ msgid "@1 Platform (low, 45 degree)" +#~ msgstr "Niedriger @1-Bahnsteig (45°)" + +#~ msgid "@1 Slope" +#~ msgstr "@1 Steigung" + +#~ msgid "ATC Kick command warning: doors are closed." +#~ msgstr "" +#~ "Zugbeeinflussung: Wegen geschlossener Türen werden Fahrgäste nicht zum " +#~ "Ausstieg gezwungen." + +#~ msgid "ATC Kick command warning: train moving." +#~ msgstr "" +#~ "Zugbeeinflussung: Der Zug befindet sich in Bewegung, Fahrgäste werden " +#~ "nicht zum Ausstieg gezwungen." + +#~ msgid "ATC Reverse command warning: didn't reverse train, train moving." +#~ msgstr "" +#~ "Zugbeeinflussung: Der Zug befindet sich in Bewegung und kann nicht " +#~ "umgekehrt werden." + +#~ msgid "ATC command parse error: Unknown command: @1" +#~ msgstr "Zugbeeinflussung: Unbekannter Befehl: @1" + +#~ msgid "ATC command syntax error: I statement not closed: @1" +#~ msgstr "Zugbeeinflussung: Unvollständiger I-Befehl: @1" + +#~ msgid "ATC controller" +#~ msgstr "Zugbeeinflussungsgleis" + +#~ msgid "" +#~ "ATC controller, mode @1\n" +#~ "Channel: @2" +#~ msgstr "" +#~ "Zugbeeinflussungsgleis in Betriebsart „@1“\n" +#~ "Kanal: @2" + +#~ msgid "" +#~ "ATC controller, mode @1\n" +#~ "Command: @2" +#~ msgstr "" +#~ "Zugbeeinflussungsgleis in Betriebsart „@1“\n" +#~ "Befehl: @2" + +#~ msgid "Access to @1" +#~ msgstr "Zugang zu @1" + +#~ msgid "Andrew's Cross" +#~ msgstr "Andreaskreuz" + +#~ msgid "Back of train would end up off track, cancelling." +#~ msgstr "Der hinterer Teil dez Zuges wäre nicht auf dem Gleis." + +#~ msgid "Big Industrial Train Engine" +#~ msgstr "Große Industrielle Lokomotive" + +#~ msgid "Box Wagon" +#~ msgstr "Güterwaggon" + +#~ msgid "Buffer and Chain Coupler" +#~ msgstr "Schraubenkupplung" + +#~ msgid "Bumper" +#~ msgstr "Prellbock" + +#~ msgid "Can not couple: The couplers of the trains do not match (@1 and @2)." +#~ msgstr "Die Kupplungen der Züge passen nicht zueinander (@1 und @2)." + +#~ msgid "Can't get on: wagon full or doors closed!" +#~ msgstr "" +#~ "Sie können nicht einsteigen: der Waggon ist voll oder die Türen sind " +#~ "geschlossen." + +#, fuzzy +#~ msgid "Can't place: Not enough slope items left (@1 required)" +#~ msgstr "" +#~ "Es kann nicht platziert werden: Sie haben nicht genug Steigungsblöcke, es " +#~ "werden insgesamt @1 benötigt." + +#, fuzzy +#~ msgid "Can't place: There's no slope of length @1" +#~ msgstr "" +#~ "Es kann nicht platziert werden: die Steigung der Länge @1 ist nicht " +#~ "definiert." + +#, fuzzy +#~ msgid "Can't place: no supporting node at upper end." +#~ msgstr "" +#~ "Es kann nicht platziert werden: es gibt keinen unterstützenden Block am " +#~ "Ende der Steigung." + +#, fuzzy +#~ msgid "Can't place: not pointing at node" +#~ msgstr "Es kann nicht platziert werden: Sie zeigen nicht auf einem Block." + +#~ msgid "Can't place: protected position!" +#~ msgstr "Es kann nicht platziert werden: diese Position ist geschützt." + +#, fuzzy +#~ msgid "Can't place: space occupied!" +#~ msgstr "Es kann nicht platziert werden: Diese Position ist besetzt." + +#~ msgid "Command" +#~ msgstr "Befehl" + +#~ msgid "Command (on)" +#~ msgstr "Befehl (wenn aktiviert)" + +#~ msgid "Default Seat" +#~ msgstr "Standardsitzplatz" + +#~ msgid "Default Seat (driver stand)" +#~ msgstr "Standardsitzplatz (Führerstand)" + +#~ msgid "Dep. Speed" +#~ msgstr "Zielgeschwindigkeit bei Abfahrt" + +#~ msgid "Deprecated Track" +#~ msgstr "ausrangiertes Gleis, nicht verwenden." + +#~ msgid "Detailed Steam Engine" +#~ msgstr "Detaillierte Dampflokomotive" + +#~ msgid "Detector Rail" +#~ msgstr "Detektorgleis" + +#~ msgid "Diagonal Diamond Crossing Track" +#~ msgstr "Diagonale Gleiskreuzung" + +#~ msgid "Digiline channel" +#~ msgstr "Digiline-Kanal" + +#~ msgid "Door Delay" +#~ msgstr "Zeit für die Türschließung" + +#~ msgid "Door Side" +#~ msgstr "Türseite" + +#~ msgid "Doors are closed! (Try holding sneak key!)" +#~ msgstr "Die Türen sind geschlossen." + +#~ msgid "" +#~ "Doors are closed. Use Sneak+rightclick to ignore the closed doors and get " +#~ "off." +#~ msgstr "" +#~ "Die Türen sind geschlossen. Nutzen Sie Schleichen+Rechtsklick, um trotz " +#~ "geschlossener Türen auszusteigen." + +#, fuzzy +#~ msgid "Driver Stand" +#~ msgstr "Führerstand" + +#~ msgid "Driver Stand (left)" +#~ msgstr "Führerstand Links" + +#~ msgid "Driver Stand (right)" +#~ msgstr "Führerstand Rechts" + +#~ msgid "Driver stand" +#~ msgstr "Führerstand" + +#~ msgid "Driver's cab" +#~ msgstr "Führerstand" + +#~ msgid "Get off" +#~ msgstr "Aussteigen" + +#~ msgid "Get off (forced)" +#~ msgstr "Ausstieg zwingen" + +#~ msgid "Industrial Train Engine" +#~ msgstr "Industrielle Lokomotive" + +#~ msgid "Industrial tank wagon" +#~ msgstr "Tankwaggon" + +#~ msgid "Industrial wood wagon" +#~ msgstr "Holztransportwaggon" + +#~ msgid "Japanese Train Engine" +#~ msgstr "Japanische Personenzug-Lokomotive" + +#~ msgid "Japanese Train Inter-Wagon Connection" +#~ msgstr "Waggonzwischenverbindung Japanischer Personenzüge" + +#~ msgid "Japanese Train Wagon" +#~ msgstr "Japanischer Personenzug-Passagierwaggon" + +#, fuzzy +#~ msgid "Japanese signal pole" +#~ msgstr "Japanischer Personenzug-Passagierwaggon" + +#~ msgid "Kick out passengers" +#~ msgstr "Fahrgäste zum Ausstieg zwingen" + +#~ msgid "Lampless Signal" +#~ msgstr "Mechanisches Signal" + +#~ msgid "Line" +#~ msgstr "Linie" + +#~ msgid "Lock couples" +#~ msgstr "Kupplungen sperren" + +#~ msgid "No such lua entity." +#~ msgstr "" +#~ "Sie zeigen nicht auf einem Objekt, das mit diesem Werkzeug kopiert werden " +#~ "kann." + +#~ msgid "No such train: @1." +#~ msgstr "Es gibt keinen mit „@1“ identifizierbaren Zug." + +#~ msgid "No such wagon: @1." +#~ msgstr "Es gibt keinen mit „@1“ identifizierbaren Waggon." + +#, fuzzy +#~ msgid "Not allowed to do this." +#~ msgstr "Sie dürfen dieses Gleis nicht konfigurieren." + +#~ msgid "Passenger Wagon" +#~ msgstr "Passagierwaggon" + +#, fuzzy +#~ msgid "Passenger area" +#~ msgstr "Passagierwaggon" + +#~ msgid "Perpendicular Diamond Crossing Track" +#~ msgstr "Kreuzung mit zueinander orthogonalen Gleisen" + +#~ msgid "Point Speed Restriction Track" +#~ msgstr "Geschwindigkeitskontrollgleis" + +#~ msgid "Point speed restriction: @1" +#~ msgstr "Geschwindigkeitskontrolle: @1" + +#~ msgid "Position is occupied by a train." +#~ msgstr "Ein Zug steht an dieser Position." + +#~ msgid "Reverse train" +#~ msgstr "Zug Umkehren" + +#~ msgid "Save wagon properties" +#~ msgstr "Waggon-Einstellungen speichern" + +#~ msgid "Scharfenberg Coupler" +#~ msgstr "Scharfenbergkupplung" + +#~ msgid "Select seat:" +#~ msgstr "Wählen Sie einen Sitzplatz aus:" + +#~ msgid "Show Inventory" +#~ msgstr "Inventar Zeigen" + +#~ msgid "Signal" +#~ msgstr "Lichtsignal" + +#~ msgid "Speed:" +#~ msgstr "Geschw.:" + +#~ msgid "Station Code" +#~ msgstr "Kennzeichen der Haltestelle" + +#~ msgid "Station Name" +#~ msgstr "Name der Haltestelle" + +#~ msgid "Station code \"@1\" already exists and is owned by @2." +#~ msgstr "" +#~ "Die Haltestelle mit dem Kennzeichen „@1“ ist bereits vorhanden und wird " +#~ "von @2 verwaltet." + +#~ msgid "Station/Stop Track" +#~ msgstr "Gleis zur Kennzeichnung einer Haltestelle" + +#~ msgid "Steam Engine" +#~ msgstr "Dampflokomotive" + +#~ msgid "Stop Time" +#~ msgstr "Wartezeit" + +#~ msgid "Subway Passenger Wagon" +#~ msgstr "U-Bahn-Waggon" + +#~ msgid "Target:" +#~ msgstr "Zielges.:" + +#~ msgid "Text displayed inside train" +#~ msgstr "Innere Anzeige" + +#~ msgid "Text displayed outside on train" +#~ msgstr "Äußere Anzeige" + +#, fuzzy +#~ msgid "That wagon does not exist!" +#~ msgstr "In diesem Waggon ist kein Sitzplatz vorhanden." + +#~ msgid "The clipboard couldn't access the metadata. Copy failed." +#~ msgstr "" +#~ "Wegen des fehlgeschlagenen Zugriffs auf die Metadaten konnte der Zug " +#~ "nicht kopiert werden." + +#~ msgid "The clipboard couldn't access the metadata. Paste failed." +#~ msgstr "" +#~ "Wegen des fehlgeschlagenen Zugriffs auf die Metadaten konnte eine Kopie " +#~ "des Zuges nicht eingefügt werden." + +#~ msgid "The clipboard is empty." +#~ msgstr "Das Clipboard ist leer." + +#, fuzzy +#~ msgid "The track you are trying to place the wagon on is not long enough!" +#~ msgstr "Das Gleis, auf dem der Waggon platziert werden woll, ist zu kurz." + +#~ msgid "The track you are trying to place the wagon on is not long enough." +#~ msgstr "Das Gleis, auf dem der Waggon platziert werden woll, ist zu kurz." + +#~ msgid "The wagon's inventory is not empty." +#~ msgstr "Das Inventar dieses Waggons ist nicht leer." + +#~ msgid "There's a Signal Influence Point here." +#~ msgstr "Hier ist ein Signal-Beeinflussungspunkt." + +#~ msgid "There's a Track Circuit Break here." +#~ msgstr "Hier ist eine Gleisabschnittsgrenze (TCB)." + +#, fuzzy +#~ msgid "This Wagon ID" +#~ msgstr "Der Waggon ist voll." + +#, fuzzy +#~ msgid "This node can't be changed using the trackworker!" +#~ msgstr "Dieser Block kann nicht mit dem Gleiswerkzeug bearbeitet werden." + +#, fuzzy +#~ msgid "This node can't be rotated using the trackworker!" +#~ msgstr "Dieser Block kann nicht mit dem Gleiswerkzeug gedreht werden." + +#~ msgid "This position is protected!" +#~ msgstr "Diese Position ist geschützt!" + +#~ msgid "This station is owned by @1. You are not allowed to edit its name." +#~ msgstr "" +#~ "Diese Haltestelle wird von @1 verwaltet. Sie dürfen sie nicht umbenennen." + +#~ msgid "This track can not be changed." +#~ msgstr "Dieses Gleis kann nicht geändert werden." + +#, fuzzy +#~ msgid "This track can not be removed!" +#~ msgstr "Dieses Gleis kann nicht entfernt werden." + +#, fuzzy +#~ msgid "This track can not be rotated!" +#~ msgstr "Dieses Gleis kann nicht gedreht werden." + +#~ msgid "This wagon has no seats." +#~ msgstr "In diesem Waggon ist kein Sitzplatz vorhanden." + +#~ msgid "This wagon is full." +#~ msgstr "Der Waggon ist voll." + +#~ msgid "This wagon is owned by @1, you can't destroy it." +#~ msgstr "Dieser Waggon gehört @1, Sie dürfen ihn nicht abbauen." + +#~ msgid "Track" +#~ msgstr "Gleis" + +#~ msgid "" +#~ "Track Worker Tool\n" +#~ "\n" +#~ "Left-click: change rail type (straight/curve/switch)\n" +#~ "Right-click: rotate object" +#~ msgstr "" +#~ "Gleiswerkzeug\n" +#~ "\n" +#~ "Linksklick: Gleistyp ändern\n" +#~ "Rechtsklick: Objekt drehen" + +#, fuzzy +#~ msgid "Train " +#~ msgstr "Der Zug wurde Kopiert." + +#~ msgid "Train copied." +#~ msgstr "Der Zug wurde Kopiert." + +#~ msgid "" +#~ "Train copy/paste tool\n" +#~ "\n" +#~ "Left-click: copy train\n" +#~ "Right-click: paste train" +#~ msgstr "" +#~ "Werkzeug zur Erstellung von Zugkopien\n" +#~ "\n" +#~ "Linksklick: Zug ins Clipboard kopieren\n" +#~ "Right-click: Kopierten Zug einfügen" + +#~ msgid "Unconfigured ATC controller" +#~ msgstr "Nicht konfiguiertes Zugbeeinflussungsgleis" + +#~ msgid "Unloading Track" +#~ msgstr "Abladungsgleis" + +#~ msgid "Use Sneak+rightclick to bypass closed doors!" +#~ msgstr "" +#~ "Nutzen Sie Schleichen+Rechtsklick, um trotz geschlossener Türen " +#~ "einzusteigen." + +#, fuzzy +#~ msgid "Wagon Properties Tool" +#~ msgstr "Waggon-Einstellungen" + +#~ msgid "" +#~ "Wagon needs to be decoupled from other wagons in order to destroy it." +#~ msgstr "Der Waggon muss abgekoppelt sein, damit Sie ihn abbauen können." + +#~ msgid "Wagon properties" +#~ msgstr "Waggon-Einstellungen" + +#~ msgid "Wallmounted Signal (left)" +#~ msgstr "An der linken Seite montiertes Signal" + +#~ msgid "Wallmounted Signal (right)" +#~ msgstr "An der rechten Seite montiertes Signal" + +#~ msgid "Wallmounted Signal (top)" +#~ msgstr "An der Decke montiertes Signal" + +#~ msgid "" +#~ "Warning: If you destroy this wagon, you only get some steel back! If you " +#~ "are sure, hold Sneak and left-click the wagon." +#~ msgstr "" +#~ "Warnung: Durch den Abbau des Waggons erhalten Sie nur etwas Stahl zurück. " +#~ "Nutzen Sie Schleichen+Linksklick, um dem Waggon abzubauen." + +#~ msgid "Y-turnout" +#~ msgstr "Y-Weiche" + +#~ msgid "You are not allowed to access the driver stand." +#~ msgstr "Sie haben keinen Zugang zum Führerstand." + +#~ msgid "You are not allowed to build near tracks at this protected position." +#~ msgstr "" +#~ "Sie dürfen an geschützten Stellen nicht in der Nähe von Gleisen bauen." + +#~ msgid "" +#~ "You are not allowed to build near tracks without the track_builder " +#~ "privilege." +#~ msgstr "" +#~ "Sie dürfen ohne das „track_builder“-Privileg nicht in der Nähe von " +#~ "Gleisen bauen." + +#~ msgid "You are not allowed to build tracks at this protected position." +#~ msgstr "Sie dürfen an geschützten Stellen kein Gleis bauen." + +#~ msgid "" +#~ "You are not allowed to build tracks without the track_builder privilege." +#~ msgstr "Sie dürfen ohne das „track_builder“-Privileg kein Gleis bauen." + +#~ msgid "" +#~ "You are not allowed to configure this track without the @1 privilege." +#~ msgstr "Sie dürfen ohne das „@1“-Privileg dieses Gleis nicht konfigurieren." + +#~ msgid "You are not allowed to configure this track." +#~ msgstr "Sie dürfen dieses Gleis nicht konfigurieren." + +#~ msgid "" +#~ "You are not allowed to couple trains without the train_operator privilege." +#~ msgstr "Sie dürfen ohne das „train_operator“-Privileg keine Züge ankuppeln." + +#, fuzzy +#~ msgid "You are not allowed to modify this protected track." +#~ msgstr "Sie dürfen an geschützten Stellen kein Gleis bauen." + +#~ msgid "" +#~ "You are not allowed to operate turnouts and signals without the " +#~ "railway_operator privilege." +#~ msgstr "" +#~ "Sie dürfen ohne das „railway_operator“-Privileg keine Bahnanlage " +#~ "operieren." + +#~ msgid "You can't get on this wagon." +#~ msgstr "Sie können nicht in diesen Waggon einsteigen." + +#~ msgid "You do not have the @1 privilege." +#~ msgstr "Ihnen fehlt das „@1“-Privileg." + +#, fuzzy +#~ msgid "You don't have the train_operator privilege." +#~ msgstr "Ihnen fehlt das „@1“-Privileg." + +#~ msgid "" +#~ "You need to own at least one neighboring wagon to destroy this couple." +#~ msgstr "" +#~ "Sie müssen Besitzer eines angrenzenden Waggons sein, um hier abzukuppeln." diff --git a/advtrains_luaautomation/po/fr.po b/advtrains_luaautomation/po/fr.po new file mode 100644 index 0000000..e83f85f --- /dev/null +++ b/advtrains_luaautomation/po/fr.po @@ -0,0 +1,986 @@ +msgid "" +msgstr "" +"Project-Id-Version: advtrains\n" +"Report-Msgid-Bugs-To: advtrains-discuss@lists.sr.ht\n" +"POT-Creation-Date: 2025-06-11 23:03+0200\n" +"PO-Revision-Date: 2025-03-25 15:06+0100\n" +"Last-Translator: Tanavit <tanavit@posto.ovh>\n" +"Language-Team: French\n" +"Language: fr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 2.4.2\n" + +#: active_common.lua +msgid "Clear Local Environment" +msgstr "Effacer l'environnement LuaATC" + +#: active_common.lua +msgid "Code" +msgstr "Code" + +#: active_common.lua +msgid "LuaATC Environment" +msgstr "Environnement LuaATC" + +#: active_common.lua +msgid "LuaATC component assigned to an invalid environment" +msgstr "Composant LuaATC assigné à un environnement invalide" + +#: active_common.lua +msgid "LuaATC component assigned to environment '@1'" +msgstr "Composant LuaATC assigné à l'environnement '@1'" + +#: active_common.lua +msgid "LuaATC component with error: @1" +msgstr "Erreur @1 du composant LuaATC" + +#: active_common.lua chatcmds.lua +msgid "Save" +msgstr "Sauvegarder" + +#: active_common.lua +msgid "Unconfigured LuaATC component" +msgstr "Composant LuaATC non configuré" + +#: active_common.lua +msgid "" +"You are not allowed to configure this LuaATC component without the @1 " +"privilege." +msgstr "Vous ne pouvez configurer ce composant LuaATC sans le privilege @1." + +#: atc_rail.lua +#, fuzzy +msgid "LuaATC Track" +msgstr "Voie de Chargement" + +#: chatcmds.lua +msgid "Already subscribed!" +msgstr "" + +#: chatcmds.lua +msgid "Clear S" +msgstr "" + +#: chatcmds.lua +msgid "Create an AdvTrains LuaAutomation environment" +msgstr "" + +#: chatcmds.lua +msgid "" +"Created environment '@1'. Use '/env_setup @2' to define global " +"initialization code, or start building LuaATC components!" +msgstr "" + +#: chatcmds.lua +msgid "Delete Env." +msgstr "" + +#: chatcmds.lua +msgid "Environment already exists!" +msgstr "" + +#: chatcmds.lua +msgid "Environment deleted!" +msgstr "" + +#: chatcmds.lua +msgid "Environment initialization code" +msgstr "" + +#: chatcmds.lua +msgid "Invalid environment name!" +msgstr "" + +#: chatcmds.lua +msgid "Invalid name (only common characters)" +msgstr "" + +#: chatcmds.lua +msgid "" +"List Advtrains LuaATC environments you are subscribed to (no parameters) or " +"subscribers of an environment (giving an env name)." +msgstr "" + +#: chatcmds.lua +msgid "Name required!" +msgstr "" + +#: chatcmds.lua +msgid "No subscribers!" +msgstr "" + +#: chatcmds.lua +msgid "Not subscribed to any!" +msgstr "" + +#: chatcmds.lua +msgid "Not subscribed!" +msgstr "" + +#: chatcmds.lua +msgid "Run Init Code" +msgstr "" + +#: chatcmds.lua +msgid "" +"SURE TO DELETE ENVIRONMENT @1? Type YES (all uppercase) to continue or just " +"quit form to cancel." +msgstr "" + +#: chatcmds.lua +msgid "Set up and modify AdvTrains LuaAutomation environment" +msgstr "" + +#: chatcmds.lua +msgid "Subscribe to the log of an Advtrains LuaATC environment" +msgstr "" + +#: chatcmds.lua +#, fuzzy +msgid "Subscribed to environment '@1'." +msgstr "Composant LuaATC assigné à l'environnement '@1'" + +#: chatcmds.lua +msgid "Successfully unsubscribed!" +msgstr "" + +#: chatcmds.lua +msgid "Unubscribe to the log of an Advtrains LuaATC environment" +msgstr "" + +#: init.lua +msgid "" +"Can place and configure LuaATC components, including execute potentially " +"harmful Lua code" +msgstr "" +"Permet le placement et la configuration de composants LuaATC avec risque " +"d'exécution de code Lua dangereux" + +#: mesecon_controller.lua +msgid "LuaATC Mesecon Controller" +msgstr "Commande Mesecon de LuaATC" + +#: operation_panel.lua +msgid "LuaATC Operation Panel" +msgstr "Panneau de commande de LuaATC" + +#: pcnaming.lua +msgid "" +"Passive Component Naming Tool\n" +"\n" +"Right-click to name a passive component." +msgstr "" +"Outil de nommage de composant passif\n" +"\n" +"Clic-Droit pour nommer un composant passif." + +#: pcnaming.lua +msgid "Set name of component (empty to clear)" +msgstr "Nommer le composant (chaîne vide pour effacer)" + +#: pcnaming.lua +msgid "" +"You are not allowed to name LuaATC passive components without the @1 " +"privilege." +msgstr "Vous ne pouvez nommer un composant LuaATC passif sans le privilege @1." + +#~ msgid " does not exist or is invalid" +#~ msgstr " n'existe pas ou est invalide" + +#~ msgid " is at " +#~ msgstr " est à la position " + +#~ msgid " units" +#~ msgstr " Unités" + +#~ msgid " wagon:destroy(): data is not set!" +#~ msgstr " Appel de wagon:destroy() : données non définies !" + +#~ msgid "!!! Train off track !!!" +#~ msgstr "!!! Train hors voie !!!" + +#~ msgid "(Doors closed)" +#~ msgstr "(Portes closes)" + +#~ msgid "(log" +#~ msgstr "(log" + +#~ msgid ", using placeholder" +#~ msgstr ", dans un espace réservé" + +#~ msgid "3-way turnout" +#~ msgstr "Embranchement triple" + +#~ msgid "90+Angle Diamond Crossing Track" +#~ msgstr "Croisement perpendiculo-diagonal" + +#~ msgid "<No coupler>" +#~ msgstr "<Pas de coupleur>" + +#~ msgid "@1 Platform (45 degree)" +#~ msgstr "Quai @1 (haut, 45°)" + +#~ msgid "@1 Platform (high)" +#~ msgstr "Quai @1 (haut)" + +#~ msgid "@1 Platform (low)" +#~ msgstr "Quai @1 (bas)" + +#~ msgid "@1 Platform (low, 45 degree)" +#~ msgstr "Quai @1 (bas, 45°)" + +#~ msgid "@1 Slope" +#~ msgstr "Pente @1" + +#~ msgid "ATC Kick command warning: doors are closed." +#~ msgstr "Avertissement commande ATC Éjecter : portes closes." + +#~ msgid "ATC Kick command warning: train moving." +#~ msgstr "Avertissement commande ATC Éjecter : train en mouvement." + +#~ msgid "ATC Reverse command warning: didn't reverse train, train moving." +#~ msgstr "" +#~ "Attention : Commande ATC de renversement impossible car le train se " +#~ "déplace." + +#~ msgid "ATC command parse error: Unknown command: @1" +#~ msgstr "Erreur d'analyse de commande ATC : Commande inconnue : @1" + +#~ msgid "ATC command syntax error: I statement not closed: @1" +#~ msgstr "" +#~ "Erreur de syntaxe de commande ATC : instruction \"I\" incomplète : @1" + +#~ msgid "ATC controller" +#~ msgstr "Controlleur ATC" + +#~ msgid "" +#~ "ATC controller, mode @1\n" +#~ "Channel: @2" +#~ msgstr "" +#~ "Controlleur ATC, mode @1\n" +#~ "Canal : @2" + +#~ msgid "" +#~ "ATC controller, mode @1\n" +#~ "Command: @2" +#~ msgstr "" +#~ "Controlleur ATC, mode @1\n" +#~ "Commande : @2" + +#~ msgid "Access to @1" +#~ msgstr "Accès à @1" + +#~ msgid "Advtrains Status: no_action" +#~ msgstr "État d'advtrains : aucune action" + +#~ msgid "Advtrains is already running normally!" +#~ msgstr "Advtrains fonctionne déjà correctement !" + +#~ msgid "Allow these players to access your wagon:" +#~ msgstr "Autoriser ces joueurs à embarquer :" + +#~ msgid "Andrew's Cross" +#~ msgstr "Croix de Saint André" + +#~ msgid "Back of train would end up off track, cancelling." +#~ msgstr "La fin du train serait hors voie : annulation." + +#~ msgid "Big Industrial Train Engine" +#~ msgstr "Grosse locomotive industrielle" + +#~ msgid "Boiler" +#~ msgstr "Chaudière à vapeur" + +#~ msgid "Box Wagon" +#~ msgstr "Wagon de frêt" + +#~ msgid "Buffer and Chain Coupler" +#~ msgstr "Attelage à tampon et vis" + +#~ msgid "Bumper" +#~ msgstr "Heurtoir" + +#~ msgid "Can not couple: The couplers of the trains do not match (@1 and @2)." +#~ msgstr "" +#~ "Accouplement impossible: les attelages des trains ne concordent pas (@1 " +#~ "et @2)." + +#~ msgid "Can operate turnouts and signals in unprotected areas" +#~ msgstr "" +#~ "Possibilité d'opérer des embranchements et signaux dans les zones non " +#~ "protégées" + +#~ msgid "Can place and dig tracks in unprotected areas" +#~ msgstr "" +#~ "Possibilité de poser ou retirer des voies dans les zones non protégées" + +#~ msgid "" +#~ "Can place, remove and operate any train, regardless of owner, whitelist, " +#~ "or protection" +#~ msgstr "" +#~ "Possibilité de poser, retirer ou opérer un quelconque train, " +#~ "indépendamment du propriétaire, de la liste blanche ou de protection" + +#~ msgid "Can place, remove and operate trains" +#~ msgstr "Possibilité de poser, retirer ou opérer les trains" + +#~ msgid "Can't get on: wagon full or doors closed!" +#~ msgstr "" +#~ "Embarquement impossible : le wagon est plein ou ses portes sont closes !" + +#~ msgid "Can't place: Not enough slope items left (@1 required)" +#~ msgstr "" +#~ "Placement impossible : quantité insuffisante de voie pentue (@1 manquant)" + +#~ msgid "Can't place: There's no slope of length @1" +#~ msgstr "Placement impossible : il n'y a pas de voie pentue de longueur @1" + +#~ msgid "Can't place: no supporting node at upper end." +#~ msgstr "" +#~ "Placement impossible : pas de nœud d'appui à l'extrémité supérieure." + +#~ msgid "Can't place: not pointing at node" +#~ msgstr "Placement impossible : ne pointe pas un nœud" + +#~ msgid "Can't place: protected position!" +#~ msgstr "Placement impossible : emplacement protégé" + +#~ msgid "Can't place: space occupied!" +#~ msgstr "Placement impossible : espace occupé !" + +#~ msgid "Caution" +#~ msgstr "Attention" + +#~ msgid "Chimney" +#~ msgstr "Cheminée" + +#~ msgid "Clear 'Disable ARS' flag" +#~ msgstr "Effacer le drapeau \"Désactiver l'ARS\"" + +#~ msgid "Clear (proceed)" +#~ msgstr "Autorisation (procédez)" + +#~ msgid "Closed" +#~ msgstr "Fermé" + +#~ msgid "Command" +#~ msgstr "Commande" + +#~ msgid "Command (on)" +#~ msgstr "Commande (marche)" + +#~ msgid "" +#~ "Crash during advtrains main step - skipping the shutdown save operation " +#~ "to not save inconsistent data!" +#~ msgstr "" +#~ "Crash durant le pas principal d'advtrains - saut de l'opération de " +#~ "sauvegarde de terminaison pour éviter l'enregistrement de données " +#~ "corrompues !" + +#~ msgid "Current FC: " +#~ msgstr "Code de fret courant: " + +#~ msgid "Danger (halt)" +#~ msgstr "Danger (stop)" + +#~ msgid "" +#~ "Data is being saved. While saving, advtrains will remove the players from " +#~ "trains. Save files will be reloaded afterwards!" +#~ msgstr "" +#~ "Données en cours de sauvegarde. Durant cette phase, advtrains débarquera " +#~ "les joueurs des trains. Les fichiers de sauvegarde seront ultérieurement " +#~ "rechargés !" + +#~ msgid "Default Seat" +#~ msgstr "Siège par défaut" + +#~ msgid "Default Seat (driver stand)" +#~ msgstr "Siège par défaut (poste de pilotage)" + +# Routage est il le bon terme ? +#~ msgid "Delete all train routes, force them to recalculate" +#~ msgstr "Suppression et recalcul de tous les routages" + +#~ msgid "Dep. Speed" +#~ msgstr "Vit. de départ" + +#~ msgid "Deprecated Track" +#~ msgstr "Voie déconseillée" + +#~ msgid "" +#~ "Destroying wagon with inventory, but inventory is not found? Shouldn't " +#~ "happen!" +#~ msgstr "Desctruction d'un wagon avec inventaire introuvable ? Anomalie !" + +#~ msgid "" +#~ "Detach all players, especially the offline ones, from all trains. Use " +#~ "only when no one serious is on a train." +#~ msgstr "" +#~ "Débarque tous les joueurs, en particulier ceux déconnectés, de tous les " +#~ "trains. À n'utiliser que quand aucun joueur sérieux n'a embarqué." + +#~ msgid "Detailed Steam Engine" +#~ msgstr "Locomotive à vapeur complexe" + +#~ msgid "Detector Rail" +#~ msgstr "Voie détectrice" + +#~ msgid "Diagonal Diamond Crossing Track" +#~ msgstr "Croisement diagonal" + +#~ msgid "Digiline channel" +#~ msgstr "Canal Digiline" + +#~ msgid "Disable the advtrains globalstep temporarily" +#~ msgstr "Désactive temporairement le pas global d'advtrains" + +#~ msgid "Disabled advtrains successfully" +#~ msgstr "Succès de la désactivation d'advtrains" + +#~ msgid "Door Delay" +#~ msgstr "Durée d'ouverture des portes" + +#~ msgid "Door Side" +#~ msgstr "Ouv. des portes coté" + +#~ msgid "Doors are closed! (Try holding sneak key!)" +#~ msgstr "Portes closes : (Essayez la \"sneak key\"!\")" + +#~ msgid "" +#~ "Doors are closed. Use Sneak+rightclick to ignore the closed doors and get " +#~ "off." +#~ msgstr "" +#~ "Portes closes ! Utilisez \"Marcher lentement (Sneak)\" et Clic-Droit pour " +#~ "franchir les portes et débarquer." + +#~ msgid "Driver Stand" +#~ msgstr "Poste de pilotage" + +#~ msgid "Driver Stand (left)" +#~ msgstr "Poste de pilotage (gauche)" + +#~ msgid "Driver Stand (right)" +#~ msgstr "Poste de pilotage (droit)" + +#~ msgid "Driver stand" +#~ msgstr "Poste de pilotage" + +#~ msgid "Driver's cab" +#~ msgstr "Cabine de pilotage" + +#~ msgid "Freight Code:" +#~ msgstr "Code de frêt :" + +#~ msgid "Get off" +#~ msgstr "Débarquer" + +#~ msgid "Get off (forced)" +#~ msgstr "Débarquer (de force)" + +#~ msgid "Industrial Train Engine" +#~ msgstr "Locomotive industrielle" + +#~ msgid "Industrial tank wagon" +#~ msgstr "Wagon-citerne industriel" + +#~ msgid "Industrial wood wagon" +#~ msgstr "Wagon grumier industriel" + +#~ msgid "Instructed to save() but load() was never called!" +#~ msgstr "Appel de save() requis sans appel préalable de load() !" + +#~ msgid "Insufficient privileges to use this!" +#~ msgstr "Privilèges insuffisants pour utiliser ceci !" + +#~ msgid "Japanese Train Engine" +#~ msgstr "Motrice Japonaise" + +#~ msgid "Japanese Train Inter-Wagon Connection" +#~ msgstr "Passage inter-voiture de train Japonais" + +#~ msgid "Japanese Train Wagon" +#~ msgstr "Voiture Japonaise" + +#~ msgid "Japanese signal pole" +#~ msgstr "Voiture Japonaise" + +#~ msgid "Kick out passengers" +#~ msgstr "Éjecter les passagers" + +#~ msgid "Lampless Signal" +#~ msgstr "Sémaphore" + +#~ msgid "Left" +#~ msgstr "Gauche" + +#~ msgid "Left,Right,Closed;" +#~ msgstr "Gauche,Droit,Fermé;" + +#~ msgid "Line" +#~ msgstr "Ligne" + +#~ msgid "Liquid: " +#~ msgstr "Liquide : " + +#~ msgid "Liquid: empty" +#~ msgstr "Liquide : vide" + +#~ msgid "Lock couples" +#~ msgstr "Verrouiller l'accouplement" + +#~ msgid "Missing train_operator privilege" +#~ msgstr "Privilège \"train_operator\" manquant" + +#~ msgid "Munich U-Bahn Distant Signal (" +#~ msgstr "Signal distant métro de Munich (" + +#~ msgid "Munich U-Bahn Main Signal (" +#~ msgstr "Signal principal métro de Munich (" + +#~ msgid "Next FC:" +#~ msgstr "Code de fret suivant :" + +#~ msgid "Next Stop:\n" +#~ msgstr "Prochain arrêt :\n" + +#~ msgid "No callback to handle schedule" +#~ msgstr "Absence de fonction de gestion de planning" + +#~ msgid "No such lua entity." +#~ msgstr "Pas de telle entité lua." + +#~ msgid "No such train: @1." +#~ msgstr "Pas de tel train : @1." + +#~ msgid "No such wagon: @1." +#~ msgstr "Pas de tel wagon : @1." + +#~ msgid "Not a valid wagon id." +#~ msgstr "Identificateur de wagon invalide." + +#~ msgid "Not allowed to do this." +#~ msgstr "Vous n'êtes pas autorisé effectuer ceci." + +#~ msgid "" +#~ "OVERRUN RED SIGNAL! Examine situation and reverse train to move again." +#~ msgstr "" +#~ "Franchissement de signal rouge : examinez la situation et inversez le " +#~ "sens de marche du train." + +#~ msgid "Onboard Computer" +#~ msgstr "Ordinateur embarqué" + +#~ msgid "Passenger Wagon" +#~ msgstr "Voiture passager" + +#~ msgid "Passenger area" +#~ msgstr "Voiture Passager" + +#~ msgid "Perpendicular Diamond Crossing Track" +#~ msgstr "Croisement perpendiculaire" + +#~ msgid "Please specify a player name to transfer ownership to." +#~ msgstr "" +#~ "Spécifiez le nom du joueur à qui la propriété doit être transférée, SVP." + +#~ msgid "Point Speed Restriction Track" +#~ msgstr "Voie de point de limitation de vitesse" + +#~ msgid "Point speed restriction: @1" +#~ msgstr "Point de limitation de vitesse : @1" + +#~ msgid "Position is occupied by a train." +#~ msgstr "Cet emplacement est occupé par un train." + +#~ msgid "Prev FC" +#~ msgstr "Code de fret précédent" + +#~ msgid "Print advtrains status info" +#~ msgstr "Affiche les informations d'état d'advtrains" + +#~ msgid "Re-enabling advtrains globalstep..." +#~ msgstr "Réacivation du pas global d'advtrains..." + +#~ msgid "Reduced speed" +#~ msgstr "Vitesse réduite" + +#~ msgid "Reload successful!" +#~ msgstr "Succès du rechargement !" + +#~ msgid "Remote Routesetting" +#~ msgstr "Routage à distance" + +#~ msgid "Removing unused wagon" +#~ msgstr "Suppression d'un wagon inutilisé" + +#~ msgid "Restoring saved state in 1 second..." +#~ msgstr "Restauration du l'état sauvegardé dans une seconde..." + +#~ msgid "Restricted speed" +#~ msgstr "Vitesse limitée" + +#~ msgid "Returns the position of the train with the given id" +#~ msgstr "Affiche la position du train identifié" + +#~ msgid "Reverse train" +#~ msgstr "Inversion du sens de marche" + +#~ msgid "Right" +#~ msgstr "Droit" + +#~ msgid "Route state changed." +#~ msgstr "Changement d'état de l'itinéraire." + +#~ msgid "Routingcode" +#~ msgstr "Code de routage" + +#~ msgid "Save wagon properties" +#~ msgstr "Sauvegarder les propriétés du wagon" + +#~ msgid "Saving failed: " +#~ msgstr "Échec de sauvegarde : " + +#~ msgid "Scharfenberg Coupler" +#~ msgstr "Attelage Scharfenberg" + +#~ msgid "Select seat:" +#~ msgstr "Choisir le siège :" + +#~ msgid "Set point speed restriction:" +#~ msgstr "Placez un point de limitation de vitesse :" + +#~ msgid "Show Inventory" +#~ msgstr "Montrer le stock" + +#~ msgid "Signal" +#~ msgstr "Signal" + +#~ msgid "Speed:" +#~ msgstr "Vitesse : " + +#~ msgid "Station Code" +#~ msgstr "Code de Station" + +#~ msgid "Station Name" +#~ msgstr "Nom de Station" + +#~ msgid "Station code \"@1\" already exists and is owned by @2." +#~ msgstr "Le code de station \"@1\" existe et est possédé par @2." + +#~ msgid "Station/Stop Track" +#~ msgstr "Voie d'arrêt en station" + +#~ msgid "Steam Engine" +#~ msgstr "Locomotive à vapeur" + +#~ msgid "Stop Time" +#~ msgstr "Durée d'arrêt" + +#~ msgid "Subway Passenger Wagon" +#~ msgstr "Voiture de Métropolitain" + +# Routage est il le bon terme ? +#~ msgid "Successfully invalidated train routes" +#~ msgstr "Succès d'invalidation des routages des trains" + +#~ msgid "Target:" +#~ msgstr "Destination : " + +#~ msgid "Teleporting to train " +#~ msgstr "Téléportation au train " + +#~ msgid "Teleports you to the position of the train with the given id" +#~ msgstr "Vous téléporte à la position du train identifié" + +#~ msgid "Text displayed inside train" +#~ msgstr "Texte affiché à l'intérieur du train" + +#~ msgid "Text displayed outside on train" +#~ msgstr "Texte affiché à l'extérieur du train" + +#~ msgid "That player does not exist!" +#~ msgstr "Ce joueur n'existe pas !" + +#~ msgid "That wagon does not exist!" +#~ msgstr "Ce wagon n'a pas de siège !" + +#~ msgid "" +#~ "The advtrains globalstep has been disabled. Trains are not moving, and no " +#~ "data is saved! Run '/at_disable_step no' to enable again!" +#~ msgstr "" +#~ "Le pas global d'advtrains est désactivé. Les trains sont immobiles et " +#~ "aucune donnée n'est sauvegardée. Exécutez '/at_disable_step no ' pour le " +#~ "réactiver !" + +#~ msgid "The clipboard couldn't access the metadata. Copy failed." +#~ msgstr "" +#~ "Le presse-papier ne peut accéder aux métadonnées. Échec de la copie." + +#~ msgid "The clipboard couldn't access the metadata. Paste failed." +#~ msgstr "Le presse-papier ne peut accéder aux métadonnées. Échec du collage." + +#~ msgid "The clipboard is empty." +#~ msgstr "Le presse-papier est vide." + +#~ msgid "The track you are trying to place the wagon on is not long enough!" +#~ msgstr "" +#~ "La voie sur laquelle vous tentez de placer le wagon est trop courte !" + +#~ msgid "The track you are trying to place the wagon on is not long enough." +#~ msgstr "" +#~ "La voie sur laquelle vous tentez de placer le wagon est trop courte." + +#~ msgid "The wagon's inventory is not empty." +#~ msgstr "Le stock de ce wagon n'est pas vide." + +#~ msgid "There's a Signal Influence Point here." +#~ msgstr "Il y a un \"Signal Influence Point\" ici." + +#~ msgid "There's a Track Circuit Break here." +#~ msgstr "Il y a un \"Track Circuit Break\" ici." + +#~ msgid "This Wagon ID" +#~ msgstr "Identificateur du wagon" + +#~ msgid "This node can't be changed using the trackworker!" +#~ msgstr "Ce nœud ne peut être modifié avec l'outil \"Trackworker\" !" + +#~ msgid "This node can't be rotated using the trackworker!" +#~ msgstr "Ce nœud ne peut être tourné avec l'outil \"Trackworker\" !" + +#, fuzzy +#~ msgid "This node can't be rotated using the trackworker," +#~ msgstr "Ce nœud ne peut être tourné avec l'outil \"Trackworker\" !" + +#~ msgid "This position is protected!" +#~ msgstr "Cet emplacement est protégé !" + +#~ msgid "This station is owned by @1. You are not allowed to edit its name." +#~ msgstr "" +#~ "Cette station est la propriété de @1. Vous n'êtes pas autorisé à modifier " +#~ "son nom." + +#~ msgid "This track can not be changed." +#~ msgstr "Cette voie ne peut pas être modifiée." + +#~ msgid "This track can not be removed!" +#~ msgstr "Cette voie ne peut pas être enlevée !" + +#~ msgid "This track can not be rotated!" +#~ msgstr "Cette voie ne peut pas être tournée !" + +#~ msgid "This wagon has no seats." +#~ msgstr "Ce wagon n'a pas de siège." + +#~ msgid "This wagon is full." +#~ msgstr "Ce wagon est plein." + +#~ msgid "This wagon is owned by @1, you can't destroy it." +#~ msgstr "Ce wagon est la propriété de @1, vous ne pouvez pas le détruire." + +#~ msgid "Track" +#~ msgstr "Voie" + +#~ msgid "" +#~ "Track Worker Tool\n" +#~ "\n" +#~ "Left-click: change rail type (straight/curve/switch)\n" +#~ "Right-click: rotate object" +#~ msgstr "" +#~ "Outil \"Trackworker\"\n" +#~ "\n" +#~ "Clic-Gauche : change le type de rail (droit/courbé/aiguillage)\n" +#~ "\n" +#~ "Clic-Droit : tourne l'objet" + +#~ msgid "Train" +#~ msgstr "Identificateur du train" + +#~ msgid "Train " +#~ msgstr "Identificateur du train " + +#~ msgid "Train ID" +#~ msgstr "Identificateur du train" + +#~ msgid "Train copied." +#~ msgstr "Train copié." + +#~ msgid "" +#~ "Train copy/paste tool\n" +#~ "\n" +#~ "Left-click: copy train\n" +#~ "Right-click: paste train" +#~ msgstr "" +#~ "Outil de copie/collage de train\n" +#~ "\n" +#~ "Clic-Gauche : copie\n" +#~ "\n" +#~ "Clic-Droit : collage" + +#~ msgid "" +#~ "Train overview / coupling control is only shown when the train stands." +#~ msgstr "" +#~ "Aperçu du train / commande d'accouplement montré uniquement à l'arrêt du " +#~ "train." + +#~ msgid "Train overview /coupling control:" +#~ msgstr "Aperçu du train / commande d'accouplement :" + +#~ msgid "Trains stopping here (ARS rules)" +#~ msgstr "Trains marquant l'arrêt (règles ARS)" + +#~ msgid "Unable to load wagon type" +#~ msgstr "Impossible de charger le type du wagon" + +#~ msgid "Unconfigured ATC controller" +#~ msgstr "Controlleur ATC, non-configuré" + +#~ msgid "Uninitialized init=" +#~ msgstr "Variable init non initialisée" + +#~ msgid "Uninitialized, removing" +#~ msgstr "Non initialisé, retiré" + +#~ msgid "Unknown Station" +#~ msgstr "Gare inconnue" + +#~ msgid "Unloading Track" +#~ msgstr "Voie de Déchargement" + +#~ msgid "Use Sneak+rightclick to bypass closed doors!" +#~ msgstr "" +#~ "Utilisez \"Marcher lentement (Sneak)\" et Clic-Droit pour franchir les " +#~ "portes closes !" + +#~ msgid "Wagon @1 ownership changed from @2 to @3" +#~ msgstr "La propriété du wagon @1 a été transférée de @2 à @3" + +#~ msgid "Wagon Properties Tool" +#~ msgstr "Outil de propriété du wagon" + +#~ msgid "" +#~ "Wagon Properties Tool\n" +#~ "Punch a wagon to view and edit the Wagon Properties" +#~ msgstr "" +#~ "Outil de propriété du wagon\n" +#~ "Frappez un wagon pour voir et modifier ses propriétés" + +#~ msgid "" +#~ "Wagon needs to be decoupled from other wagons in order to destroy it." +#~ msgstr "" +#~ "Les wagons doivent être désaccouplés des autres pour pouvoir être " +#~ "détruits." + +#~ msgid "Wagon properties" +#~ msgstr "Propriétés du wagon" + +#~ msgid "Wagon road number:" +#~ msgstr "Immatriculation du wagon :" + +#~ msgid "Wait for signal to clear" +#~ msgstr "En attente de signal d'autorisation" + +#~ msgid "Wallmounted Signal (left)" +#~ msgstr "Signal mural (gauche)" + +#~ msgid "Wallmounted Signal (right)" +#~ msgstr "Signal mural (droit)" + +#~ msgid "Wallmounted Signal (top)" +#~ msgstr "Signal mural (plafond)" + +#~ msgid "" +#~ "Warning: If you destroy this wagon, you only get some steel back! If you " +#~ "are sure, hold Sneak and left-click the wagon." +#~ msgstr "" +#~ "Attention: Si vous détruisez ce wagon, vous ne récupérerez que de la " +#~ "ferraille ! Si vous êtes sûr de vous, appuyez la touche \"Marcher " +#~ "lentement (Sneak)\" et Clic-Gauche." + +#~ msgid "Wheel" +#~ msgstr "Roue" + +#~ msgid "Y-turnout" +#~ msgstr "Embranchement en Y" + +#~ msgid "You are not allowed to access the driver stand." +#~ msgstr "Accès interdit au poste de pilotage." + +#~ msgid "You are not allowed to build near tracks at this protected position." +#~ msgstr "" +#~ "Vous ne pouvez pas construire à proximité d'une voie à cet emplacement " +#~ "protégé." + +#~ msgid "" +#~ "You are not allowed to build near tracks without the track_builder " +#~ "privilege." +#~ msgstr "" +#~ "Vous ne pouvez pas construire à proximité d'une voie sans le privilège " +#~ "\"track_builder\" (?)" + +#~ msgid "You are not allowed to build tracks at this protected position." +#~ msgstr "Vous ne pouvez pas construire une voie à cet emplacement protégé." + +#~ msgid "" +#~ "You are not allowed to build tracks without the track_builder privilege." +#~ msgstr "" +#~ "Vous ne pouvez pas construire une voie sans le privilège " +#~ "\"track_builder\"." + +#~ msgid "" +#~ "You are not allowed to configure this track without the @1 privilege." +#~ msgstr "" +#~ "Vous n'êtes pas autorisé à configurer cette voie sans le privilège @1." + +#~ msgid "You are not allowed to configure this track." +#~ msgstr "Vous n'êtes pas autorisé à configurer cette voie." + +#~ msgid "" +#~ "You are not allowed to couple trains without the train_operator privilege." +#~ msgstr "" +#~ "Vous n'êtes pas autorisé à coupler des trains sans le privilège " +#~ "\"train_operator\"." + +#, fuzzy +#~ msgid "You are not allowed to modify this protected track." +#~ msgstr "Vous ne pouvez pas construire une voie à cet emplacement protégé" + +#~ msgid "" +#~ "You are not allowed to operate turnouts and signals without the " +#~ "railway_operator privilege." +#~ msgstr "" +#~ "Vous ne pouvez pas actionner les aiguillages ou les signaux (privilège " +#~ "\"railway_operator\" manquant)" + +#~ msgid "You can't get on this wagon." +#~ msgstr "Montée impossible dans ce wagon." + +#~ msgid "You do not have the @1 privilege." +#~ msgstr "Vous ne possédez pas le privilège \"@1\"." + +#~ msgid "You don't have the train_operator privilege." +#~ msgstr "Vous ne possédez pas le privilège \"train_operator\"." + +#~ msgid "You have been given ownership of wagon @1" +#~ msgstr "La propriété du wagon @1 vous a été transférée" + +#~ msgid "" +#~ "You need to own at least one neighboring wagon to destroy this couple." +#~ msgstr "" +#~ "Vous devez être propriétaire d'au moins un wagon voisin pour supprimer " +#~ "cet attelage." + +#~ msgid "from wagon_save table." +#~ msgstr "de la table wagon_save." + +#~ msgid "" +#~ "had no wagons left because of some bug. It is being deleted. Wave it " +#~ "goodbye!" +#~ msgstr "" +#~ "n'a plus de wagon à cause d'un bug quelconque. Il est détruit. Faites lui " +#~ "coucou !" + +#~ msgid "slowdown" +#~ msgstr "ralentissement" diff --git a/advtrains_luaautomation/po/update-translations.sh b/advtrains_luaautomation/po/update-translations.sh new file mode 100644 index 0000000..032e19e --- /dev/null +++ b/advtrains_luaautomation/po/update-translations.sh @@ -0,0 +1,28 @@ +#!/bin/sh + +MODNAME="advtrains_luaautomation" +MSGID_BUGS_ADDR='advtrains-discuss@lists.sr.ht' + +PODIR=`dirname "$0"` +ATDIR="$PODIR/.." +POTFILE="$PODIR/$MODNAME.pot" + +xgettext \ + -D "$ATDIR" \ + -d "$MODNAME" \ + -o "$POTFILE" \ + -p . \ + -L lua \ + --add-location=file \ + --from-code=UTF-8 \ + --sort-by-file \ + --keyword='S' \ + --package-name="$MODNAME" \ + --msgid-bugs-address="$MSGID_BUGS_ADDR" \ + `find $ATDIR $BTDIR -name '*.lua' -printf '%P\n'` \ + && +for i in "$PODIR"/*.po; do + msgmerge -U \ + --sort-by-file \ + $i "$POTFILE" +done diff --git a/advtrains_luaautomation/po/zh_CN.po b/advtrains_luaautomation/po/zh_CN.po new file mode 100644 index 0000000..e35e1c7 --- /dev/null +++ b/advtrains_luaautomation/po/zh_CN.po @@ -0,0 +1,644 @@ +msgid "" +msgstr "" +"Project-Id-Version: advtrains\n" +"Report-Msgid-Bugs-To: advtrains-discuss@lists.sr.ht\n" +"POT-Creation-Date: 2025-06-11 23:03+0200\n" +"PO-Revision-Date: 2023-10-09 11:24+0200\n" +"Last-Translator: Y. Wang <yw05@forksworld.de>\n" +"Language-Team: Chinese (Simplified)\n" +"Language: zh_CN\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 3.3.2\n" + +#: active_common.lua +msgid "Clear Local Environment" +msgstr "" + +#: active_common.lua +msgid "Code" +msgstr "" + +#: active_common.lua +msgid "LuaATC Environment" +msgstr "" + +#: active_common.lua +msgid "LuaATC component assigned to an invalid environment" +msgstr "" + +#: active_common.lua +msgid "LuaATC component assigned to environment '@1'" +msgstr "" + +#: active_common.lua +msgid "LuaATC component with error: @1" +msgstr "" + +#: active_common.lua chatcmds.lua +msgid "Save" +msgstr "保存" + +#: active_common.lua +msgid "Unconfigured LuaATC component" +msgstr "LuaATC 部件 (未配置)" + +#: active_common.lua +msgid "" +"You are not allowed to configure this LuaATC component without the @1 " +"privilege." +msgstr "您没有“@1”权限,不能配置这个 LuaATC 部件。" + +#: atc_rail.lua +#, fuzzy +msgid "LuaATC Track" +msgstr "装货轨道" + +#: chatcmds.lua +msgid "Already subscribed!" +msgstr "" + +#: chatcmds.lua +msgid "Clear S" +msgstr "" + +#: chatcmds.lua +msgid "Create an AdvTrains LuaAutomation environment" +msgstr "" + +#: chatcmds.lua +msgid "" +"Created environment '@1'. Use '/env_setup @2' to define global " +"initialization code, or start building LuaATC components!" +msgstr "" + +#: chatcmds.lua +msgid "Delete Env." +msgstr "" + +#: chatcmds.lua +msgid "Environment already exists!" +msgstr "" + +#: chatcmds.lua +msgid "Environment deleted!" +msgstr "" + +#: chatcmds.lua +msgid "Environment initialization code" +msgstr "" + +#: chatcmds.lua +msgid "Invalid environment name!" +msgstr "" + +#: chatcmds.lua +msgid "Invalid name (only common characters)" +msgstr "" + +#: chatcmds.lua +msgid "" +"List Advtrains LuaATC environments you are subscribed to (no parameters) or " +"subscribers of an environment (giving an env name)." +msgstr "" + +#: chatcmds.lua +msgid "Name required!" +msgstr "" + +#: chatcmds.lua +msgid "No subscribers!" +msgstr "" + +#: chatcmds.lua +msgid "Not subscribed to any!" +msgstr "" + +#: chatcmds.lua +msgid "Not subscribed!" +msgstr "" + +#: chatcmds.lua +msgid "Run Init Code" +msgstr "" + +#: chatcmds.lua +msgid "" +"SURE TO DELETE ENVIRONMENT @1? Type YES (all uppercase) to continue or just " +"quit form to cancel." +msgstr "" + +#: chatcmds.lua +msgid "Set up and modify AdvTrains LuaAutomation environment" +msgstr "" + +#: chatcmds.lua +msgid "Subscribe to the log of an Advtrains LuaATC environment" +msgstr "" + +#: chatcmds.lua +msgid "Subscribed to environment '@1'." +msgstr "" + +#: chatcmds.lua +msgid "Successfully unsubscribed!" +msgstr "" + +#: chatcmds.lua +msgid "Unubscribe to the log of an Advtrains LuaATC environment" +msgstr "" + +#: init.lua +msgid "" +"Can place and configure LuaATC components, including execute potentially " +"harmful Lua code" +msgstr "" + +#: mesecon_controller.lua +msgid "LuaATC Mesecon Controller" +msgstr "" + +#: operation_panel.lua +msgid "LuaATC Operation Panel" +msgstr "" + +#: pcnaming.lua +msgid "" +"Passive Component Naming Tool\n" +"\n" +"Right-click to name a passive component." +msgstr "" +"被动元件命名工具\n" +"\n" +"右键单击命名所选元件。" + +#: pcnaming.lua +msgid "Set name of component (empty to clear)" +msgstr "" + +#: pcnaming.lua +msgid "" +"You are not allowed to name LuaATC passive components without the @1 " +"privilege." +msgstr "您没有“@1”权限,不能命名被动元件。" + +#~ msgid "(Doors closed)" +#~ msgstr "(车门已关闭)" + +#~ msgid "3-way turnout" +#~ msgstr "三开道岔" + +#~ msgid "90+Angle Diamond Crossing Track" +#~ msgstr "交叉轨道 (其中一条轨道与坐标轴平行)" + +#~ msgid "<No coupler>" +#~ msgstr "<没有车钩>" + +#~ msgid "@1 Platform (45 degree)" +#~ msgstr "较高的@1站台 (45°)" + +#~ msgid "@1 Platform (high)" +#~ msgstr "较高的@1站台" + +#~ msgid "@1 Platform (low)" +#~ msgstr "较低的@1站台" + +#~ msgid "@1 Platform (low, 45 degree)" +#~ msgstr "较低的@1站台 (45°)" + +#~ msgid "@1 Slope" +#~ msgstr "@1斜坡" + +#~ msgid "ATC Kick command warning: doors are closed." +#~ msgstr "ATC 警告:车门已关闭,无法踢出乘客。" + +#~ msgid "ATC Kick command warning: train moving." +#~ msgstr "ATC 警告:火车正在移动,无法踢出乘客。" + +#~ msgid "ATC Reverse command warning: didn't reverse train, train moving." +#~ msgstr "ATC 警告:火车正在移动,无法改变行车方向。" + +#~ msgid "ATC command parse error: Unknown command: @1" +#~ msgstr "ATC 语法错误:未知命令:@1" + +#~ msgid "ATC command syntax error: I statement not closed: @1" +#~ msgstr "ATC 语法错误:“I”命令不完整:@1" + +#~ msgid "ATC controller" +#~ msgstr "ATC 控制器" + +#~ msgid "" +#~ "ATC controller, mode @1\n" +#~ "Channel: @2" +#~ msgstr "" +#~ "ATC 控制器\n" +#~ "模式:@1\n" +#~ "频道:@2" + +#~ msgid "" +#~ "ATC controller, mode @1\n" +#~ "Command: @2" +#~ msgstr "" +#~ "ATC 控制器\n" +#~ "模式:@1\n" +#~ "命令:@2" + +#~ msgid "Access to @1" +#~ msgstr "可前往@1" + +#~ msgid "Andrew's Cross" +#~ msgstr "铁路道口信号灯" + +#~ msgid "Back of train would end up off track, cancelling." +#~ msgstr "火车后部不在轨道上。" + +#~ msgid "Big Industrial Train Engine" +#~ msgstr "大型工业用火车头" + +#~ msgid "Boiler" +#~ msgstr "锅炉" + +#~ msgid "Box Wagon" +#~ msgstr "货运车厢" + +#~ msgid "Buffer and Chain Coupler" +#~ msgstr "链式车钩" + +#~ msgid "Bumper" +#~ msgstr "保险杠" + +#~ msgid "Can not couple: The couplers of the trains do not match (@1 and @2)." +#~ msgstr "您无法连接这两节车厢:这两节车厢使用不同的车钩 (@1和@2)。" + +#~ msgid "Can't get on: wagon full or doors closed!" +#~ msgstr "无法上车:车门已关闭或车厢已满。" + +#, fuzzy +#~ msgid "Can't place: Not enough slope items left (@1 required)" +#~ msgstr "无法放置斜坡:您没有足够的铁路斜坡放置工具 (您总共需要@1个)" + +#, fuzzy +#~ msgid "Can't place: There's no slope of length @1" +#~ msgstr "无法放置斜坡:advtrains 不支持长度为@1米的斜坡。" + +#, fuzzy +#~ msgid "Can't place: no supporting node at upper end." +#~ msgstr "无法放置斜坡:较高端没有支撑方块。" + +#, fuzzy +#~ msgid "Can't place: not pointing at node" +#~ msgstr "无法放置斜坡:您没有选择任何方块。" + +#~ msgid "Can't place: protected position!" +#~ msgstr "无法放置:此区域已被保护。" + +#, fuzzy +#~ msgid "Can't place: space occupied!" +#~ msgstr "无法放置斜坡:此区域已被占用。" + +#~ msgid "Chimney" +#~ msgstr "烟囱" + +#~ msgid "Command" +#~ msgstr "命令" + +#~ msgid "Command (on)" +#~ msgstr "命令 (激活时)" + +#~ msgid "Default Seat" +#~ msgstr "默认座位" + +#~ msgid "Default Seat (driver stand)" +#~ msgstr "默认座位 (司机座位)" + +#~ msgid "Dep. Speed" +#~ msgstr "出发速度" + +#~ msgid "Deprecated Track" +#~ msgstr "请不要使用" + +#~ msgid "Detailed Steam Engine" +#~ msgstr "精细的蒸汽机车" + +#~ msgid "Detector Rail" +#~ msgstr "探测轨道" + +#~ msgid "Diagonal Diamond Crossing Track" +#~ msgstr "交叉轨道" + +#~ msgid "Digiline channel" +#~ msgstr "Digiline 频道" + +#~ msgid "Door Delay" +#~ msgstr "车门关闭时间" + +#~ msgid "" +#~ "Doors are closed. Use Sneak+rightclick to ignore the closed doors and get " +#~ "off." +#~ msgstr "车门已关闭,请使用潜行+右键单击下车。" + +#, fuzzy +#~ msgid "Driver Stand" +#~ msgstr "司机座位" + +#~ msgid "Driver Stand (left)" +#~ msgstr "左侧司机座位" + +#~ msgid "Driver Stand (right)" +#~ msgstr "右侧司机座位" + +#~ msgid "Driver stand" +#~ msgstr "司机座位" + +#~ msgid "Driver's cab" +#~ msgstr "驾驶室" + +#~ msgid "Get off" +#~ msgstr "下车" + +#~ msgid "Get off (forced)" +#~ msgstr "强制下车" + +#~ msgid "Industrial Train Engine" +#~ msgstr "工业用火车头" + +#~ msgid "Industrial tank wagon" +#~ msgstr "液体运输车厢" + +#~ msgid "Industrial wood wagon" +#~ msgstr "木材运输车厢" + +#~ msgid "Japanese Train Engine" +#~ msgstr "高速列车车头" + +#~ msgid "Japanese Train Inter-Wagon Connection" +#~ msgstr "日本火车车钩" + +#~ msgid "Japanese Train Wagon" +#~ msgstr "高速列车车厢" + +#, fuzzy +#~ msgid "Japanese signal pole" +#~ msgstr "高速列车车厢" + +#~ msgid "Kick out passengers" +#~ msgstr "踢出乘客" + +#~ msgid "Lampless Signal" +#~ msgstr "臂板信号机" + +#~ msgid "Line" +#~ msgstr "火车线路" + +#~ msgid "Lock couples" +#~ msgstr "锁定连接处" + +#~ msgid "No such lua entity." +#~ msgstr "您没有指向一个可以用火车复制工具复制的物体。" + +#~ msgid "No such train: @1." +#~ msgstr "ID 为“@1”的列车不存在。" + +#~ msgid "No such wagon: @1." +#~ msgstr "ID 为“@1”的车厢不存在。" + +#, fuzzy +#~ msgid "Not allowed to do this." +#~ msgstr "您不能调整这段轨道。" + +#~ msgid "Passenger Wagon" +#~ msgstr "客车" + +#, fuzzy +#~ msgid "Passenger area" +#~ msgstr "客车" + +#~ msgid "Perpendicular Diamond Crossing Track" +#~ msgstr "垂直交叉轨道" + +#~ msgid "Reverse train" +#~ msgstr "改变行车方向" + +#~ msgid "Routingcode" +#~ msgstr "路由码" + +#~ msgid "Save wagon properties" +#~ msgstr "保存车厢属性" + +#~ msgid "Scharfenberg Coupler" +#~ msgstr "Scharfenberg 式车钩" + +#~ msgid "Select seat:" +#~ msgstr "请选择座位:" + +#~ msgid "Show Inventory" +#~ msgstr "显示物品栏" + +#~ msgid "Signal" +#~ msgstr "信号灯" + +#~ msgid "Speed:" +#~ msgstr "速度" + +#~ msgid "Station Code" +#~ msgstr "车站代码" + +#~ msgid "Station Name" +#~ msgstr "车站名称" + +#~ msgid "Station/Stop Track" +#~ msgstr "车站轨道" + +#~ msgid "Steam Engine" +#~ msgstr "蒸汽机车" + +#~ msgid "Stop Time" +#~ msgstr "停站时间" + +#~ msgid "Subway Passenger Wagon" +#~ msgstr "地铁车厢" + +#~ msgid "Target:" +#~ msgstr "目标速度" + +#~ msgid "Text displayed inside train" +#~ msgstr "车厢内部显示" + +#~ msgid "Text displayed outside on train" +#~ msgstr "车厢外部显示" + +#, fuzzy +#~ msgid "That wagon does not exist!" +#~ msgstr "这节车厢没有座位。" + +#~ msgid "The clipboard couldn't access the metadata. Copy failed." +#~ msgstr "无法复制:剪贴板无法访问元数据。" + +#~ msgid "The clipboard couldn't access the metadata. Paste failed." +#~ msgstr "无法粘贴:剪贴板无法访问元数据。" + +#~ msgid "The clipboard is empty." +#~ msgstr "剪贴板是空的。" + +#, fuzzy +#~ msgid "The track you are trying to place the wagon on is not long enough!" +#~ msgstr "轨道太短。" + +#~ msgid "The track you are trying to place the wagon on is not long enough." +#~ msgstr "轨道太短。" + +#, fuzzy +#~ msgid "This Wagon ID" +#~ msgstr "车厢已满。" + +#, fuzzy +#~ msgid "This node can't be changed using the trackworker!" +#~ msgstr "您不能使用铁路调整工具调整这个方块。" + +#, fuzzy +#~ msgid "This node can't be rotated using the trackworker!" +#~ msgstr "您不能使用铁路调整工具旋转这个方块。" + +#, fuzzy +#~ msgid "This node can't be rotated using the trackworker," +#~ msgstr "您不能使用铁路调整工具旋转这个方块。" + +#~ msgid "This position is protected!" +#~ msgstr "这里已被保护。" + +#~ msgid "This track can not be changed." +#~ msgstr "您不能调整这段轨道。" + +#, fuzzy +#~ msgid "This track can not be removed!" +#~ msgstr "您不能移除这段轨道。" + +#, fuzzy +#~ msgid "This track can not be rotated!" +#~ msgstr "您不能旋转这段轨道。" + +#~ msgid "This wagon has no seats." +#~ msgstr "这节车厢没有座位。" + +#~ msgid "This wagon is full." +#~ msgstr "车厢已满。" + +#~ msgid "This wagon is owned by @1, you can't destroy it." +#~ msgstr "这是 @1 的车厢,您不能摧毁它。" + +#~ msgid "Track" +#~ msgstr "轨道" + +#~ msgid "" +#~ "Track Worker Tool\n" +#~ "\n" +#~ "Left-click: change rail type (straight/curve/switch)\n" +#~ "Right-click: rotate object" +#~ msgstr "" +#~ "铁路调整工具\n" +#~ "\n" +#~ "左键单击:切换轨道类型\n" +#~ "右键单击:旋转方块" + +#, fuzzy +#~ msgid "Train " +#~ msgstr "已复制列车。" + +#~ msgid "Train copied." +#~ msgstr "已复制列车。" + +#~ msgid "" +#~ "Train copy/paste tool\n" +#~ "\n" +#~ "Left-click: copy train\n" +#~ "Right-click: paste train" +#~ msgstr "" +#~ "火车复制工具\n" +#~ "\n" +#~ "左键单击:复制\n" +#~ "右键单击:粘帖" + +#~ msgid "Unconfigured ATC controller" +#~ msgstr "ATC 控制器 (未配置)" + +#~ msgid "Unloading Track" +#~ msgstr "卸货轨道" + +#~ msgid "Use Sneak+rightclick to bypass closed doors!" +#~ msgstr "请使用潜行+右键上车。" + +#, fuzzy +#~ msgid "Wagon Properties Tool" +#~ msgstr "车厢属性" + +#~ msgid "Wagon properties" +#~ msgstr "车厢属性" + +#~ msgid "Wallmounted Signal (left)" +#~ msgstr "壁挂式信号灯 (左侧)" + +#~ msgid "Wallmounted Signal (right)" +#~ msgstr "壁挂式信号灯 (右侧)" + +#~ msgid "Wallmounted Signal (top)" +#~ msgstr "悬挂式信号灯" + +#~ msgid "" +#~ "Warning: If you destroy this wagon, you only get some steel back! If you " +#~ "are sure, hold Sneak and left-click the wagon." +#~ msgstr "" +#~ "警告:如果您摧毁此车厢,您只能拿到一些钢方块。如果您确定要摧毁这节车厢,请" +#~ "按潜行键并左键单击此车厢。" + +#~ msgid "Wheel" +#~ msgstr "车轮" + +#~ msgid "Y-turnout" +#~ msgstr "对称道岔" + +#~ msgid "You are not allowed to build near tracks at this protected position." +#~ msgstr "这里已被保护,您不能在这里的铁路附近建任何东西。" + +#~ msgid "" +#~ "You are not allowed to build near tracks without the track_builder " +#~ "privilege." +#~ msgstr "您没有“train_operator”权限,不能在铁路附近建任何东西。" + +#~ msgid "You are not allowed to build tracks at this protected position." +#~ msgstr "这里已被保护,您不能在这里建造铁路。" + +#~ msgid "" +#~ "You are not allowed to build tracks without the track_builder privilege." +#~ msgstr "您没有“train_operator”权限,不能在这里建造铁路。" + +#~ msgid "" +#~ "You are not allowed to configure this track without the @1 privilege." +#~ msgstr "您没有“@1”权限,不能调整这段轨道。" + +#~ msgid "You are not allowed to configure this track." +#~ msgstr "您不能调整这段轨道。" + +#~ msgid "" +#~ "You are not allowed to couple trains without the train_operator privilege." +#~ msgstr "您没有“train_operator”权限,不能连接这两节车厢。" + +#, fuzzy +#~ msgid "You are not allowed to modify this protected track." +#~ msgstr "这里已被保护,您不能在这里建造铁路。" + +#~ msgid "" +#~ "You are not allowed to operate turnouts and signals without the " +#~ "railway_operator privilege." +#~ msgstr "您没有“railway_operator”权限,不能控制铁路设施。" + +#~ msgid "You do not have the @1 privilege." +#~ msgstr "您没有“@1”权限。" + +#, fuzzy +#~ msgid "You don't have the train_operator privilege." +#~ msgstr "您没有“@1”权限。" + +#~ msgid "" +#~ "You need to own at least one neighboring wagon to destroy this couple." +#~ msgstr "您必须至少拥有其中一节车厢才能分开这两节车厢。" diff --git a/advtrains_luaautomation/po/zh_TW.po b/advtrains_luaautomation/po/zh_TW.po new file mode 100644 index 0000000..866ccc5 --- /dev/null +++ b/advtrains_luaautomation/po/zh_TW.po @@ -0,0 +1,644 @@ +msgid "" +msgstr "" +"Project-Id-Version: advtrains\n" +"Report-Msgid-Bugs-To: advtrains-discuss@lists.sr.ht\n" +"POT-Creation-Date: 2025-06-11 23:03+0200\n" +"PO-Revision-Date: 2023-10-09 11:31+0200\n" +"Last-Translator: Y. Wang <yw05@forksworld.de>\n" +"Language-Team: Chinese (Traditional)\n" +"Language: zh_TW\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 3.3.2\n" + +#: active_common.lua +msgid "Clear Local Environment" +msgstr "" + +#: active_common.lua +msgid "Code" +msgstr "" + +#: active_common.lua +msgid "LuaATC Environment" +msgstr "" + +#: active_common.lua +msgid "LuaATC component assigned to an invalid environment" +msgstr "" + +#: active_common.lua +msgid "LuaATC component assigned to environment '@1'" +msgstr "" + +#: active_common.lua +msgid "LuaATC component with error: @1" +msgstr "" + +#: active_common.lua chatcmds.lua +msgid "Save" +msgstr "儲存" + +#: active_common.lua +msgid "Unconfigured LuaATC component" +msgstr "LuaATC 元件 (未配置)" + +#: active_common.lua +msgid "" +"You are not allowed to configure this LuaATC component without the @1 " +"privilege." +msgstr "您沒有「@1」許可權,不能配置這個 LuaATC 元件。" + +#: atc_rail.lua +#, fuzzy +msgid "LuaATC Track" +msgstr "裝貨軌道" + +#: chatcmds.lua +msgid "Already subscribed!" +msgstr "" + +#: chatcmds.lua +msgid "Clear S" +msgstr "" + +#: chatcmds.lua +msgid "Create an AdvTrains LuaAutomation environment" +msgstr "" + +#: chatcmds.lua +msgid "" +"Created environment '@1'. Use '/env_setup @2' to define global " +"initialization code, or start building LuaATC components!" +msgstr "" + +#: chatcmds.lua +msgid "Delete Env." +msgstr "" + +#: chatcmds.lua +msgid "Environment already exists!" +msgstr "" + +#: chatcmds.lua +msgid "Environment deleted!" +msgstr "" + +#: chatcmds.lua +msgid "Environment initialization code" +msgstr "" + +#: chatcmds.lua +msgid "Invalid environment name!" +msgstr "" + +#: chatcmds.lua +msgid "Invalid name (only common characters)" +msgstr "" + +#: chatcmds.lua +msgid "" +"List Advtrains LuaATC environments you are subscribed to (no parameters) or " +"subscribers of an environment (giving an env name)." +msgstr "" + +#: chatcmds.lua +msgid "Name required!" +msgstr "" + +#: chatcmds.lua +msgid "No subscribers!" +msgstr "" + +#: chatcmds.lua +msgid "Not subscribed to any!" +msgstr "" + +#: chatcmds.lua +msgid "Not subscribed!" +msgstr "" + +#: chatcmds.lua +msgid "Run Init Code" +msgstr "" + +#: chatcmds.lua +msgid "" +"SURE TO DELETE ENVIRONMENT @1? Type YES (all uppercase) to continue or just " +"quit form to cancel." +msgstr "" + +#: chatcmds.lua +msgid "Set up and modify AdvTrains LuaAutomation environment" +msgstr "" + +#: chatcmds.lua +msgid "Subscribe to the log of an Advtrains LuaATC environment" +msgstr "" + +#: chatcmds.lua +msgid "Subscribed to environment '@1'." +msgstr "" + +#: chatcmds.lua +msgid "Successfully unsubscribed!" +msgstr "" + +#: chatcmds.lua +msgid "Unubscribe to the log of an Advtrains LuaATC environment" +msgstr "" + +#: init.lua +msgid "" +"Can place and configure LuaATC components, including execute potentially " +"harmful Lua code" +msgstr "" + +#: mesecon_controller.lua +msgid "LuaATC Mesecon Controller" +msgstr "" + +#: operation_panel.lua +msgid "LuaATC Operation Panel" +msgstr "" + +#: pcnaming.lua +msgid "" +"Passive Component Naming Tool\n" +"\n" +"Right-click to name a passive component." +msgstr "" +"被動元件命名工具\n" +"\n" +"右鍵單擊命名所選元件。" + +#: pcnaming.lua +msgid "Set name of component (empty to clear)" +msgstr "" + +#: pcnaming.lua +msgid "" +"You are not allowed to name LuaATC passive components without the @1 " +"privilege." +msgstr "您沒有「@1」許可權,不能命名這個元件。" + +#~ msgid "(Doors closed)" +#~ msgstr "(車門已關閉)" + +#~ msgid "3-way turnout" +#~ msgstr "三開道岔" + +#~ msgid "90+Angle Diamond Crossing Track" +#~ msgstr "交叉軌道 (其中一條軌道與座標軸平行)" + +#~ msgid "<No coupler>" +#~ msgstr "<無連結器>" + +#~ msgid "@1 Platform (45 degree)" +#~ msgstr "較高的@1月臺 (45°)" + +#~ msgid "@1 Platform (high)" +#~ msgstr "較高的@1月臺" + +#~ msgid "@1 Platform (low)" +#~ msgstr "較低的@1月臺" + +#~ msgid "@1 Platform (low, 45 degree)" +#~ msgstr "較低的@1月臺 (45°)" + +#~ msgid "@1 Slope" +#~ msgstr "@1斜坡" + +#~ msgid "ATC Kick command warning: doors are closed." +#~ msgstr "ATC 警告:車門已關閉,無法踢出乘客。" + +#~ msgid "ATC Kick command warning: train moving." +#~ msgstr "ATC 警告:火車正在移動,無法踢出乘客。" + +#~ msgid "ATC Reverse command warning: didn't reverse train, train moving." +#~ msgstr "ATC 警告:火車正在移動,無法改變行車方向。" + +#~ msgid "ATC command parse error: Unknown command: @1" +#~ msgstr "ATC 語法錯誤:未知命令:@1" + +#~ msgid "ATC command syntax error: I statement not closed: @1" +#~ msgstr "ATC 語法錯誤:「I」命令不完整:@1" + +#~ msgid "ATC controller" +#~ msgstr "ATC 控制器" + +#~ msgid "" +#~ "ATC controller, mode @1\n" +#~ "Channel: @2" +#~ msgstr "" +#~ "ATC 控制器\n" +#~ "模式:@1\n" +#~ "頻道:@2" + +#~ msgid "" +#~ "ATC controller, mode @1\n" +#~ "Command: @2" +#~ msgstr "" +#~ "ATC 控制器\n" +#~ "模式:@1\n" +#~ "命令:@2" + +#~ msgid "Access to @1" +#~ msgstr "可前往@1" + +#~ msgid "Andrew's Cross" +#~ msgstr "平交道號誌燈" + +#~ msgid "Back of train would end up off track, cancelling." +#~ msgstr "火車後部不在軌道上。" + +#~ msgid "Big Industrial Train Engine" +#~ msgstr "大型工業用火車頭" + +#~ msgid "Boiler" +#~ msgstr "鍋爐" + +#~ msgid "Box Wagon" +#~ msgstr "貨運車廂" + +#~ msgid "Buffer and Chain Coupler" +#~ msgstr "鏈式連結器" + +#~ msgid "Bumper" +#~ msgstr "保險槓" + +#~ msgid "Can not couple: The couplers of the trains do not match (@1 and @2)." +#~ msgstr "您無法連結這兩節車廂:這兩節車廂使用不同的連結器 (@1和@2)。" + +#~ msgid "Can't get on: wagon full or doors closed!" +#~ msgstr "無法上車:車門已關閉或車廂已滿。" + +#, fuzzy +#~ msgid "Can't place: Not enough slope items left (@1 required)" +#~ msgstr "無法放置斜坡:您沒有足夠的鐵路斜坡放置工具 (您總共需要@1個)" + +#, fuzzy +#~ msgid "Can't place: There's no slope of length @1" +#~ msgstr "無法放置斜坡:advtrains 不支援長度為@1米的斜坡。" + +#, fuzzy +#~ msgid "Can't place: no supporting node at upper end." +#~ msgstr "無法放置斜坡:較高階沒有支撐方塊。" + +#, fuzzy +#~ msgid "Can't place: not pointing at node" +#~ msgstr "無法放置斜坡:您沒有選擇任何方塊。" + +#~ msgid "Can't place: protected position!" +#~ msgstr "無法放置:此區域已被保護。" + +#, fuzzy +#~ msgid "Can't place: space occupied!" +#~ msgstr "無法放置斜坡:此區域已被佔用。" + +#~ msgid "Chimney" +#~ msgstr "煙囪" + +#~ msgid "Command" +#~ msgstr "命令" + +#~ msgid "Command (on)" +#~ msgstr "命令 (啟用時)" + +#~ msgid "Default Seat" +#~ msgstr "預設座位" + +#~ msgid "Default Seat (driver stand)" +#~ msgstr "預設座位 (司機座位)" + +#~ msgid "Dep. Speed" +#~ msgstr "出發速度" + +#~ msgid "Deprecated Track" +#~ msgstr "請不要使用" + +#~ msgid "Detailed Steam Engine" +#~ msgstr "精細的蒸汽機車" + +#~ msgid "Detector Rail" +#~ msgstr "探測軌道" + +#~ msgid "Diagonal Diamond Crossing Track" +#~ msgstr "交叉軌道" + +#~ msgid "Digiline channel" +#~ msgstr "Digiline 頻道" + +#~ msgid "Door Delay" +#~ msgstr "車門關閉時間" + +#~ msgid "" +#~ "Doors are closed. Use Sneak+rightclick to ignore the closed doors and get " +#~ "off." +#~ msgstr "車門已關閉,請使用潛行+右鍵單擊下車。" + +#, fuzzy +#~ msgid "Driver Stand" +#~ msgstr "司機座位" + +#~ msgid "Driver Stand (left)" +#~ msgstr "左側司機座位" + +#~ msgid "Driver Stand (right)" +#~ msgstr "右側司機座位" + +#~ msgid "Driver stand" +#~ msgstr "司機座位" + +#~ msgid "Driver's cab" +#~ msgstr "駕駛室" + +#~ msgid "Get off" +#~ msgstr "下車" + +#~ msgid "Get off (forced)" +#~ msgstr "強制下車" + +#~ msgid "Industrial Train Engine" +#~ msgstr "工業用火車頭" + +#~ msgid "Industrial tank wagon" +#~ msgstr "液體運輸車廂" + +#~ msgid "Industrial wood wagon" +#~ msgstr "木材運輸車廂" + +#~ msgid "Japanese Train Engine" +#~ msgstr "高速列車車頭" + +#~ msgid "Japanese Train Inter-Wagon Connection" +#~ msgstr "日本火車連結器" + +#~ msgid "Japanese Train Wagon" +#~ msgstr "高速列車車廂" + +#, fuzzy +#~ msgid "Japanese signal pole" +#~ msgstr "高速列車車廂" + +#~ msgid "Kick out passengers" +#~ msgstr "踢出乘客" + +#~ msgid "Lampless Signal" +#~ msgstr "臂木式號誌機" + +#~ msgid "Line" +#~ msgstr "火車線路" + +#~ msgid "Lock couples" +#~ msgstr "鎖定連結處" + +#~ msgid "No such lua entity." +#~ msgstr "您沒有指向一個可以用火車複製工具複製的物體。" + +#~ msgid "No such train: @1." +#~ msgstr "ID 為「@1」的列車不存在。" + +#~ msgid "No such wagon: @1." +#~ msgstr "ID 為「@1」的車廂不存在。" + +#, fuzzy +#~ msgid "Not allowed to do this." +#~ msgstr "您不能調整這段軌道。" + +#~ msgid "Passenger Wagon" +#~ msgstr "客車" + +#, fuzzy +#~ msgid "Passenger area" +#~ msgstr "客車" + +#~ msgid "Perpendicular Diamond Crossing Track" +#~ msgstr "垂直交叉軌道" + +#~ msgid "Reverse train" +#~ msgstr "改變行車方向" + +#~ msgid "Routingcode" +#~ msgstr "路由碼" + +#~ msgid "Save wagon properties" +#~ msgstr "儲存車廂屬性" + +#~ msgid "Scharfenberg Coupler" +#~ msgstr "Scharfenberg 式連結器" + +#~ msgid "Select seat:" +#~ msgstr "請選擇座位:" + +#~ msgid "Show Inventory" +#~ msgstr "顯示物品欄" + +#~ msgid "Signal" +#~ msgstr "色燈號誌機" + +#~ msgid "Speed:" +#~ msgstr "速度" + +#~ msgid "Station Code" +#~ msgstr "車站碼" + +#~ msgid "Station Name" +#~ msgstr "車站名稱" + +#~ msgid "Station/Stop Track" +#~ msgstr "車站軌道" + +#~ msgid "Steam Engine" +#~ msgstr "蒸汽機車" + +#~ msgid "Stop Time" +#~ msgstr "停站時間" + +#~ msgid "Subway Passenger Wagon" +#~ msgstr "地鐵車廂" + +#~ msgid "Target:" +#~ msgstr "目標速度" + +#~ msgid "Text displayed inside train" +#~ msgstr "車廂內部顯示" + +#~ msgid "Text displayed outside on train" +#~ msgstr "車廂外部顯示" + +#, fuzzy +#~ msgid "That wagon does not exist!" +#~ msgstr "這節車廂沒有座位。" + +#~ msgid "The clipboard couldn't access the metadata. Copy failed." +#~ msgstr "無法複製:剪貼簿無法訪問元資料。" + +#~ msgid "The clipboard couldn't access the metadata. Paste failed." +#~ msgstr "無法貼上:剪貼簿無法訪問元資料。" + +#~ msgid "The clipboard is empty." +#~ msgstr "剪貼簿是空的。" + +#, fuzzy +#~ msgid "The track you are trying to place the wagon on is not long enough!" +#~ msgstr "軌道太短。" + +#~ msgid "The track you are trying to place the wagon on is not long enough." +#~ msgstr "軌道太短。" + +#, fuzzy +#~ msgid "This Wagon ID" +#~ msgstr "車廂已滿。" + +#, fuzzy +#~ msgid "This node can't be changed using the trackworker!" +#~ msgstr "您不能使用鐵路調整工具調整這個方塊。" + +#, fuzzy +#~ msgid "This node can't be rotated using the trackworker!" +#~ msgstr "您不能使用鐵路調整工具旋轉這個方塊。" + +#, fuzzy +#~ msgid "This node can't be rotated using the trackworker," +#~ msgstr "您不能使用鐵路調整工具旋轉這個方塊。" + +#~ msgid "This position is protected!" +#~ msgstr "這裡已被保護。" + +#~ msgid "This track can not be changed." +#~ msgstr "您不能調整這段軌道。" + +#, fuzzy +#~ msgid "This track can not be removed!" +#~ msgstr "您不能移除這段軌道。" + +#, fuzzy +#~ msgid "This track can not be rotated!" +#~ msgstr "您不能旋轉這段軌道。" + +#~ msgid "This wagon has no seats." +#~ msgstr "這節車廂沒有座位。" + +#~ msgid "This wagon is full." +#~ msgstr "車廂已滿。" + +#~ msgid "This wagon is owned by @1, you can't destroy it." +#~ msgstr "這是 @1 的車廂,您不能摧毀它。" + +#~ msgid "Track" +#~ msgstr "軌道" + +#~ msgid "" +#~ "Track Worker Tool\n" +#~ "\n" +#~ "Left-click: change rail type (straight/curve/switch)\n" +#~ "Right-click: rotate object" +#~ msgstr "" +#~ "鐵路調整工具\n" +#~ "\n" +#~ "左鍵單擊:切換軌道型別\n" +#~ "右鍵單擊:旋轉方塊" + +#, fuzzy +#~ msgid "Train " +#~ msgstr "已複製火車。" + +#~ msgid "Train copied." +#~ msgstr "已複製火車。" + +#~ msgid "" +#~ "Train copy/paste tool\n" +#~ "\n" +#~ "Left-click: copy train\n" +#~ "Right-click: paste train" +#~ msgstr "" +#~ "火車複製工具\n" +#~ "\n" +#~ "左鍵單擊:複製\n" +#~ "右鍵單擊:粘帖" + +#~ msgid "Unconfigured ATC controller" +#~ msgstr "ATC 控制器 (未配置)" + +#~ msgid "Unloading Track" +#~ msgstr "卸貨軌道" + +#~ msgid "Use Sneak+rightclick to bypass closed doors!" +#~ msgstr "請使用潛行+右鍵上車。" + +#, fuzzy +#~ msgid "Wagon Properties Tool" +#~ msgstr "車廂屬性" + +#~ msgid "Wagon properties" +#~ msgstr "車廂屬性" + +#~ msgid "Wallmounted Signal (left)" +#~ msgstr "壁掛式色燈號誌機 (左側)" + +#~ msgid "Wallmounted Signal (right)" +#~ msgstr "壁掛式色燈號誌機 (右側)" + +#~ msgid "Wallmounted Signal (top)" +#~ msgstr "懸掛式色燈號誌機" + +#~ msgid "" +#~ "Warning: If you destroy this wagon, you only get some steel back! If you " +#~ "are sure, hold Sneak and left-click the wagon." +#~ msgstr "" +#~ "警告:如果您摧毀此車廂,您只能拿到一些鋼方塊。如果您確定要摧毀這節車廂,請" +#~ "按潛行鍵並左鍵單擊此車廂。" + +#~ msgid "Wheel" +#~ msgstr "車輪" + +#~ msgid "Y-turnout" +#~ msgstr "對稱道岔" + +#~ msgid "You are not allowed to build near tracks at this protected position." +#~ msgstr "這裡已被保護,您不能在這裡的鐵路附近建任何東西。" + +#~ msgid "" +#~ "You are not allowed to build near tracks without the track_builder " +#~ "privilege." +#~ msgstr "您沒有「train_operator」許可權,不能在鐵路附近建任何東西。" + +#~ msgid "You are not allowed to build tracks at this protected position." +#~ msgstr "這裡已被保護,您不能在這裡建造鐵路。" + +#~ msgid "" +#~ "You are not allowed to build tracks without the track_builder privilege." +#~ msgstr "您沒有「train_operator」許可權,不能在這裡建造鐵路。" + +#~ msgid "" +#~ "You are not allowed to configure this track without the @1 privilege." +#~ msgstr "您沒有「@1」許可權,不能調整這段軌道。" + +#~ msgid "You are not allowed to configure this track." +#~ msgstr "您不能調整這段軌道。" + +#~ msgid "" +#~ "You are not allowed to couple trains without the train_operator privilege." +#~ msgstr "您沒有「train_operator」許可權,不能連結這兩節車廂。" + +#, fuzzy +#~ msgid "You are not allowed to modify this protected track." +#~ msgstr "這裡已被保護,您不能在這裡建造鐵路。" + +#~ msgid "" +#~ "You are not allowed to operate turnouts and signals without the " +#~ "railway_operator privilege." +#~ msgstr "您沒有「railway_operator」許可權,不能控制鐵路設施。" + +#~ msgid "You do not have the @1 privilege." +#~ msgstr "您沒有「@1」許可權。" + +#, fuzzy +#~ msgid "You don't have the train_operator privilege." +#~ msgstr "您沒有「@1」許可權。" + +#~ msgid "" +#~ "You need to own at least one neighboring wagon to destroy this couple." +#~ msgstr "您必須至少擁有其中一節車廂才能分開這兩節車廂。" diff --git a/advtrains_luaautomation/recipes.lua b/advtrains_luaautomation/recipes.lua new file mode 100644 index 0000000..16121a8 --- /dev/null +++ b/advtrains_luaautomation/recipes.lua @@ -0,0 +1,27 @@ +-- depends on default, digilines and mesecons for crafting recipes +minetest.register_craft({ + output = "advtrains_luaautomation:dtrack_placer", + recipe = { + {"","mesecons_luacontroller:luacontroller0000",""}, + {"","advtrains:dtrack_atc_placer",""}, + {"","digilines:wire_std_00000000",""}, + } +}) + +minetest.register_craft({ + output = "advtrains_luaautomation:mesecon_controller0000", + recipe = { + {"","mesecons:wire_00000000_off",""}, + {"mesecons:wire_00000000_off","advtrains_luaautomation:dtrack_placer","mesecons:wire_00000000_off"}, + {"","mesecons:wire_00000000_off",""}, + } +}) + +minetest.register_craft({ + output = "advtrains_luaautomation:oppanel", + recipe = { + {"","mesecons_button:button_off",""}, + {"","advtrains_luaautomation:mesecon_controller0000",""}, + {"","default:stone",""}, + } +})
\ No newline at end of file diff --git a/advtrains_luaautomation/settingtypes.txt b/advtrains_luaautomation/settingtypes.txt new file mode 100644 index 0000000..20ed52e --- /dev/null +++ b/advtrains_luaautomation/settingtypes.txt @@ -0,0 +1,2 @@ +# Enable or disable craft recipes for LuaATC components +advtrains_luaautomation_enable_atlac_recipes (Enable LuaATC component craft recipes) bool true
\ No newline at end of file |