From cc78b63e342c131e2a08b3697681d9d5fbf86d4f Mon Sep 17 00:00:00 2001 From: ywang Date: Sun, 19 Jul 2020 15:50:34 +0200 Subject: [BREAKING] Use client-side translations instead of intllib; add zh_CN translations * Client-side translations is used instead of intllib. [Breaks MT4 compat] * Existing locale files have been moved to advtrains/locale and named with the format advtrains.[lang].tr * Add zh_CN locale. (requires a font that supports CJK text) --- advtrains/atc.lua | 8 +-- advtrains/craft_items.lua | 8 +-- advtrains/init.lua | 8 +-- advtrains/locale/advtrains.de.tr | 65 +++++++++++++++++++ advtrains/locale/advtrains.zh_CN.tr | 107 +++++++++++++++++++++++++++++++ advtrains/locale/de.txt | 50 --------------- advtrains_train_industrial/init.lua | 8 +-- advtrains_train_industrial/locale/de.txt | 5 -- advtrains_train_japan/init.lua | 7 +- advtrains_train_japan/locale/de.txt | 4 -- advtrains_train_steam/init.lua | 7 +- advtrains_train_steam/locale/de.txt | 6 -- advtrains_train_subway/init.lua | 7 +- advtrains_train_subway/locale/de.txt | 2 - 14 files changed, 186 insertions(+), 106 deletions(-) create mode 100644 advtrains/locale/advtrains.de.tr create mode 100644 advtrains/locale/advtrains.zh_CN.tr delete mode 100644 advtrains/locale/de.txt delete mode 100644 advtrains_train_industrial/locale/de.txt delete mode 100644 advtrains_train_japan/locale/de.txt delete mode 100755 advtrains_train_steam/locale/de.txt delete mode 100644 advtrains_train_subway/locale/de.txt diff --git a/advtrains/atc.lua b/advtrains/atc.lua index fa9f097..20f52b9 100644 --- a/advtrains/atc.lua +++ b/advtrains/atc.lua @@ -128,9 +128,9 @@ advtrains.atc_function = function(def, preset, suffix, rotation) if fields.mode then meta:set_string("mode", idxtrans[fields.mode]) if fields.mode=="digiline" then - meta:set_string("infotext", attrans("ATC controller, mode @1\nChannel: @2", fields.mode, meta:get_string("command")) ) + meta:set_string("infotext", attrans("ATC controller, mode @1\nChannel: @2", (fields.mode or "?"), meta:get_string("command")) ) else - meta:set_string("infotext", attrans("ATC controller, mode @1\nCommand: @2", fields.mode, meta:get_string("command")) ) + meta:set_string("infotext", attrans("ATC controller, mode @1\nCommand: @2", (fields.mode or "?"), meta:get_string("command")) ) end meta:set_string("formspec", atc.get_atc_controller_formspec(pos, meta)) end @@ -141,9 +141,9 @@ advtrains.atc_function = function(def, preset, suffix, rotation) meta:set_string("command_on", fields.command_on) meta:set_string("channel", fields.channel) if fields.mode=="digiline" then - meta:set_string("infotext", attrans("ATC controller, mode @1\nChannel: @2", fields.mode, meta:get_string("command")) ) + meta:set_string("infotext", attrans("ATC controller, mode @1\nChannel: @2", (fields.mode or "?"), meta:get_string("command")) ) else - meta:set_string("infotext", attrans("ATC controller, mode @1\nCommand: @2", fields.mode, meta:get_string("command")) ) + meta:set_string("infotext", attrans("ATC controller, mode @1\nCommand: @2", (fields.mode or "?"), meta:get_string("command")) ) end meta:set_string("formspec", atc.get_atc_controller_formspec(pos, meta)) diff --git a/advtrains/craft_items.lua b/advtrains/craft_items.lua index a4db385..0e693eb 100644 --- a/advtrains/craft_items.lua +++ b/advtrains/craft_items.lua @@ -1,23 +1,23 @@ core.register_craftitem("advtrains:boiler", { - description = "Boiler", + description = attrans("Boiler"), inventory_image = "advtrains_boiler.png", }) core.register_craftitem("advtrains:driver_cab", { - description = "driver's cab", + description = attrans("driver's cab"), inventory_image = "advtrains_driver_cab.png", }) core.register_craftitem("advtrains:wheel", { - description = "Wheel", + description = attrans("Wheel"), inventory_image = "advtrains_wheel.png", }) core.register_craftitem("advtrains:chimney", { - description = "Chimney", + description = attrans("Chimney"), inventory_image = "advtrains_chimney.png", }) diff --git a/advtrains/init.lua b/advtrains/init.lua index 84cfa38..d6c3c92 100644 --- a/advtrains/init.lua +++ b/advtrains/init.lua @@ -22,12 +22,8 @@ Copyright (C) 2016-2020 Moritz Blei (orwell96) and contributors local lot = os.clock() minetest.log("action", "[advtrains] Loading...") --- Boilerplate to support localized strings if intllib mod is installed. -if minetest.get_modpath("intllib") then - attrans = intllib.Getter() -else - attrans = function(s,a,...)a={a,...}return s:gsub("@(%d+)",function(n)return a[tonumber(n)]end)end -end +-- There is no need to support 0.4.x anymore given that the compatitability with it is already broken by 1bb1d825f46af3562554c12fba35a31b9f7973ff +attrans = minetest.get_translator ("advtrains") --advtrains diff --git a/advtrains/locale/advtrains.de.tr b/advtrains/locale/advtrains.de.tr new file mode 100644 index 0000000..ca67a7e --- /dev/null +++ b/advtrains/locale/advtrains.de.tr @@ -0,0 +1,65 @@ +# textdomain: advtrains +This wagon is owned by @1, you can't destroy it.=Dieser Waggon gehört @1, du kannst ihn nicht abbauen. +Warning: If you destroy this wagon, you only get some steel back! If you are sure, hold Sneak and left-click the wagon.=Warnung: Du erhältst nur etwas Stahl zurück. Wenn du sicher bist, dass du den Waggon zerstören willst, halte 'Schleichen' und klicke links. +Show Inventory=Zeige Inventar +Select seat:=Wähle einen Sitzplatz aus: +ATC controller, unconfigured.=Zugbeeinflussungsschiene, nicht konfiguiert. +ATC controller=Zugbeeinflussungsschiene +ATC controller, mode @1@nChannel: @2=Zugbeeinflussungsschiene in Betriebsart "@1"@nKanal: @2 +ATC controller, mode @1@nCommand: @2=Zugbeeinflussungsschiene in Betriebsart "@1"@nBefehl: @2 +Command=Befehl +Command (on)=Befehl (wenn ein) +Digiline channel=Digiline-Kanal +Save=Speichern +ATC Reverse command warning: didn't reverse train, train moving!=Zugbeeinflussung - Warnung: Befehl 'R' nicht ausgeführt, Zug in Bewegung! +ATC command syntax error: I statement not closed: @1=Zugbeeinflussung - Syntaxfehler: I-Anweisung nicht geschlossen: @1 +ATC command parse error: Unknown command: @1=Zugbeeinflussung - Fehler: Unbekannter Befehl: @1 +This position is protected!=Diese Position ist geschützt! +You need to own at least one neighboring wagon to destroy this couple.=Du musst Besitzer eines angrenzenden Waggons sein, um hier abzukuppeln. +@1 Platform (low)=Niedriger @1-Bahnsteig +@1 Platform (high)=Hoher @1-Bahnsteig +off=aus +on=ein +Lampless Signal (@1)=Mechanisches Signal (@1) +Signal (@1)=Lichtsignal (@1) +Track Worker Tool@n@nLeft-click: change rail type (straight/curve/switch)@nRight-click: rotate rail/bumper/signal/etc.=Schienenwerkzeug@n@nLinksklick: Schienentyp ändern, Rechtsklick: Objekt drehen. +This node can't be rotated using the trackworker!=Kann diesen Block nicht mit dem Schienenwerkzeug drehen. +This node can't be changed using the trackworker!=Kann diesen Block nicht mit dem Schienenwerkzeug bearbeiten. +Can't place: not pointing at node=Kann nicht platzieren: Du zeigst nicht auf einen Block. +Can't place: space occupied!=Kann nicht platzieren: Platz besetzt. +Can't place: protected position!=Kann nicht platzieren: Position geschützt. +Can't place: Not enough slope items left (@1 required)=Kann nicht platzieren: nicht genug Steigungsblöcke, es werden insgesamt @1 benötigt. +Can't place: There's no slope of length @1=Kann nicht platzieren: Keine Steigung der Länge @1 definiert. +Can't place: no supporting node at upper end.=Kann nicht platzieren: kein unterstützender Block am Ende der Steigung. +Deprecated Track=ausrangierte Schiene, nicht verwenden. +Track=Schiene +Bumper=Prellbock +Detector Rail=Detektorschiene +Speed:=Geschw.: +Target:=Zielges.: +@1 Slope=@1 Steigung +Can't get on: wagon full or doors closed!=Kann nicht einsteigen: Waggon voll oder Türen geschlossen. +Use Sneak+rightclick to bypass closed doors!=Nutze Sneak+Rechtsklick, um die Türnotöffnung zu aktivieren und trotzdem einzusteigen. +Lock couples=Kupplungen sperren +Save wagon properties=Waggon-Einstellungen speichern +Doors are closed! Use Sneak+rightclick to ignore the closed doors and get off!=Türen sind geschlossen! Sneak+Rechtsklick, um die Türnotöffnung zu aktivieren und trotzdem auszusteigen. +Wagon properties=Waggon-Einstellungen +Get off=Aussteigen +Get off (forced)=Aussteigen (erzwingen) +(Doors closed)=(Türen geschlossen) +Access to @1=Zugang zu @1 +Default Seat=Standardsitzplatz +Default Seat (driver stand)=Standardsitzplatz (Führerstand) +Driver Stand=Führerstand +Driver Stand (left)=Führerstand Links +Driver Stand (right)=Führerstand Rechts +Industrial Train Engine=Industrielle Lokomotive +Industrial tank wagon=Tankwaggon +Industrial wood wagon=Holztransportwaggon +Japanese Train Engine=Japanische Personenzug-Lokomotive +Japanese Train Wagon=Japanischer Personenzug-Passagierwaggon +Steam Engine=Dampflokomotive +Detailed Steam Engine=detaillierte Dampflokomotive +Passenger Wagon=Passagierwaggon +Box wagon=Güterwaggon +Subway Passenger Wagon=U-Bahn-Waggon diff --git a/advtrains/locale/advtrains.zh_CN.tr b/advtrains/locale/advtrains.zh_CN.tr new file mode 100644 index 0000000..ef9c99b --- /dev/null +++ b/advtrains/locale/advtrains.zh_CN.tr @@ -0,0 +1,107 @@ +# textdomain: advtrains + +# Advtrains Core (unorganized) +This wagon is owned by @1, you can't destroy it.=这是@1的车厢, 你不能摧毁它. +Warning: If you destroy this wagon, you only get some steel back! If you are sure, hold Sneak and left-click the wagon.=警告: 如果你摧毁此车厢, 你只能拿到一些钢方块. 如果你确定要摧毁这个车厢,请按潜行键并左键单击此车厢. +ATC controller, unconfigured.=ATC控制器 (未配置) +ATC controller=ATC控制器 +ATC controller, mode @1@nChannel: @2=ATC控制器@n模式: @1@n频道: @2 +ATC controller, mode @1@nCommand: @2=ATC控制器@n模式: @1@n命令: @2 +Command=命令 +Command (on)=命令(激活时) +Digiline channel=Digiline 频道 +ATC Reverse command warning: didn't reverse train, train moving!=ATC警告:未执行“R”命令, 火车在移动 +ATC command syntax error: I statement not closed: @1=ATC语法错误: "I"命令不完整: @1 +ATC command parse error: Unknown command: @1=ATC语法错误: 未知命令: @1 +This position is protected!=这里已被保护. +You need to own at least one neighboring wagon to destroy this couple.=你必须至少拥有其中一个车厢才能解耦这两个车厢. +This node can't be rotated using the trackworker!=你不能使用铁路调整工具旋转这个方块. +This node can't be changed using the trackworker!=你不能使用铁路调整工具调整这个方块. +Can't place: not pointing at node=无法放置: 你没有选择任何方块. +Can't place: space occupied!=无法放置: 此区域已被占用. +Can't place: protected position!=无法放置: 此区域已被保护. +Can't place: Not enough slope items left (@1 required)=无法放置: 你没有足够的铁路斜坡放置工具 (你需要@1个) +Can't place: There's no slope of length @1=无法放置: advtrains不支持长度为@1m的斜坡. +Can't place: no supporting node at upper end.=无法放置: 较高端没有支撑方块. +Deprecated Track=请不要使用 +Can't get on: wagon full or doors closed!=无法上车: 车门已关闭或车厢已满 +Use Sneak+rightclick to bypass closed doors!=请使用潜行+右键上车 +Lock couples=锁定连接处 +Doors are closed! Use Sneak+rightclick to ignore the closed doors and get off!=车门已关闭, 请使用潜行+右键单击下车 +Access to @1=可前往@1 +The clipboard couldn't access the metadata. Paste failed.=无法粘贴: 剪贴板无法访问元数据 +The clipboard couldn't access the metadata. Copy failed.=无法复制: 剪贴板无法访问元数据 + +# Train HUD/Formspecs +Speed:=速度: +Target:=目标速度: +Show Inventory=显示物品栏 +Select seat:=请选择座位 +Wagon properties=车厢属性 +Save wagon properties=保存车厢属性 +Text displayed outside on train=车厢外部显示 +Text displayed inside train=车厢内部显示 +Line=火车线路 +Routingcode=路由码 +Get off=下车 +Get off (forced)=强制下车 +(Doors closed)=(车门已关闭) + +# General +Save=保存 +# "off" and "on" can be translated differently depending on the context and are therefore not translated. +off=off +on=on + +# Line automation +Station Code=车站代码 +Station Name=车站名称 +Door Delay=车门关闭时间 +Departure Speed=出发速度 +Stop Time=停站时间 + +# Items +Track Worker Tool@n@nLeft-click: change rail type (straight/curve/switch)@nRight-click: rotate rail/bumper/signal/etc.=铁路调整工具@n@n左键单击: 切换轨道类型@n右键单击: 旋转方块 +Passive Component Naming Tool@n@nRight-click to name a passive component.=被动元件命名工具@n@n右键单击命名所选元件. +Train copy/paste tool@n@nLeft-click: copy train@nRight-click: paste train=火车复制工具@n@n左键单击: 复制@n右键单击: 粘帖 +Track=铁轨 +Perpendicular Diamond Crossing Track=垂直交叉铁轨 +45/90 Degree Diamond Crossing Track=45度交叉铁轨 +Unloading Track=卸货铁轨 +Loading Track=装货铁轨 +Bumper=保险杠 +Detector Rail=探测铁轨 +@1 Slope=@1斜坡 +@1 Platform (low)=50cm高的@1站台 +@1 Platform (high)=1m高的@1站台 +@1 Platform (45 degree)=1m高的@1站台 (45度) +Lampless Signal (@1)=臂板信号机 (@1) +Signal (@1)=信号灯 (@1) +Wallmounted Signal (l)=壁挂式信号灯 (左侧) +Wallmounted Signal (r)=壁挂式信号灯 (右侧) +Wallmounted Signal (t)=悬挂式信号灯 +Andrew's Cross=铁路道口信号灯 +Boiler=锅炉 +driver's cab=驾驶室 +Wheel=车轮 +Chimney=烟囱 + +# Seats +Default Seat=默认座位 +Default Seat (driver stand)=默认座位 (司机座位) +Driver Stand=司机座位 +Driver Stand (left)=左侧司机座位 +Driver Stand (right)=右侧司机座位 + +# Wagon/engine types +Industrial Train Engine=工业用火车头 +Big Industrial Train Engine=大型工业用火车头 +Industrial tank wagon=液体运输车厢 +Industrial wood wagon=木材运输车厢 +Japanese Train Engine=高速列车车头 +Japanese Train Wagon=高速列车车厢 +Steam Engine=蒸汽机车 +Detailed Steam Engine=精细的蒸汽机车 +Passenger Wagon=客车 +Box Wagon=货运车厢 +Subway Passenger Wagon=地铁车厢 diff --git a/advtrains/locale/de.txt b/advtrains/locale/de.txt deleted file mode 100644 index fe770d8..0000000 --- a/advtrains/locale/de.txt +++ /dev/null @@ -1,50 +0,0 @@ -This wagon is owned by @1, you can't destroy it. = Dieser Waggon gehört @1, du kannst ihn nicht abbauen. -Warning: If you destroy this wagon, you only get some steel back! If you are sure, hold Sneak and left-click the wagon. = Warnung: Du erhältst nur etwas Stahl zurück. Wenn du sicher bist, dass du den Waggon zerstören willst, halte 'Schleichen' und klicke links. -Show Inventory = Zeige Inventar -Select seat: = Wähle einen Sitzplatz aus: -ATC controller, unconfigured. = Zugbeeinflussungsschiene, nicht konfiguiert. -ATC controller = Zugbeeinflussungsschiene -ATC controller, mode @1\nChannel: @2 = Zugbeeinflussungsschiene in Betriebsart "@1"\nKanal: @2 -ATC controller, mode @1\nCommand: @2 = Zugbeeinflussungsschiene in Betriebsart "@1"\nBefehl: @2 -Command = Befehl -Command (on) = Befehl (wenn ein) -Digiline channel = Digiline-Kanal -Save = Speichern -ATC Reverse command warning: didn't reverse train, train moving! = Zugbeeinflussung - Warnung: Befehl 'R' nicht ausgeführt, Zug in Bewegung! -ATC command syntax error: I statement not closed: @1 = Zugbeeinflussung - Syntaxfehler: I-Anweisung nicht geschlossen: @1 -ATC command parse error: Unknown command: @1 = Zugbeeinflussung - Fehler: Unbekannter Befehl: @1 -This position is protected! = Diese Position ist geschützt! -You need to own at least one neighboring wagon to destroy this couple. = Du musst Besitzer eines angrenzenden Waggons sein, um hier abzukuppeln. -@1 Platform (low) = Niedriger @1-Bahnsteig -@1 Platform (high) = Hoher @1-Bahnsteig -off = aus -on = ein -Lampless Signal (@1) = Mechanisches Signal (@1) -Signal (@1) = Lichtsignal (@1) -Track Worker Tool\n\nLeft-click: change rail type (straight/curve/switch)\nRight-click: rotate rail/bumper/signal/etc. = Schienenwerkzeug\n\nLinksklick: Schienentyp ändern, Rechtsklick: Objekt drehen. -This node can't be rotated using the trackworker! = Kann diesen Block nicht mit dem Schienenwerkzeug drehen. -This node can't be changed using the trackworker! = Kann diesen Block nicht mit dem Schienenwerkzeug bearbeiten. -Can't place: not pointing at node = Kann nicht platzieren: Du zeigst nicht auf einen Block. -Can't place: space occupied! = Kann nicht platzieren: Platz besetzt. -Can't place: protected position! = Kann nicht platzieren: Position geschützt. -Can't place: Not enough slope items left (@1 required) = Kann nicht platzieren: nicht genug Steigungsblöcke, es werden insgesamt @1 benötigt. -Can't place: There's no slope of length @1 = Kann nicht platzieren: Keine Steigung der Länge @1 definiert. -Can't place: no supporting node at upper end. = Kann nicht platzieren: kein unterstützender Block am Ende der Steigung. -Deprecated Track = ausrangierte Schiene, nicht verwenden. -Track = Schiene -Bumper = Prellbock -Detector Rail = Detektorschiene -Speed: = Geschw.: -Target: = Zielges.: -@1 Slope = @1 Steigung -Can't get on: wagon full or doors closed! = Kann nicht einsteigen: Waggon voll oder Türen geschlossen. -Use Sneak+rightclick to bypass closed doors! = Nutze Sneak+Rechtsklick, um die Türnotöffnung zu aktivieren und trotzdem einzusteigen. -Lock couples = Kupplungen sperren -Save wagon properties = Waggon-Einstellungen speichern -Doors are closed! Use Sneak+rightclick to ignore the closed doors and get off! = Türen sind geschlossen! Sneak+Rechtsklick, um die Türnotöffnung zu aktivieren und trotzdem auszusteigen. -Wagon properties = Waggon-Einstellungen -Get off = Aussteigen -Get off (forced) = Aussteigen (erzwingen) -(Doors closed) = (Türen geschlossen) -Access to @1 = Zugang zu @1 - diff --git a/advtrains_train_industrial/init.lua b/advtrains_train_industrial/init.lua index 4d64615..beec5b3 100644 --- a/advtrains_train_industrial/init.lua +++ b/advtrains_train_industrial/init.lua @@ -1,10 +1,4 @@ --- Boilerplate to support localized strings if intllib mod is installed. -local S -if minetest.get_modpath("intllib") then - S = intllib.Getter() -else - S = function(s,a,...)a={a,...}return s:gsub("@(%d+)",function(n)return a[tonumber(n)]end)end -end +local S = attrans advtrains.register_wagon("engine_industrial", { mesh="advtrains_engine_industrial.b3d", diff --git a/advtrains_train_industrial/locale/de.txt b/advtrains_train_industrial/locale/de.txt deleted file mode 100644 index a45ca27..0000000 --- a/advtrains_train_industrial/locale/de.txt +++ /dev/null @@ -1,5 +0,0 @@ -Driver Stand (left) = Führerstand Links -Driver Stand (right) = Führerstand Rechts -Industrial Train Engine = Industrielle Lokomotive -Industrial tank wagon = Tankwaggon -Industrial wood wagon = Holztransportwaggon \ No newline at end of file diff --git a/advtrains_train_japan/init.lua b/advtrains_train_japan/init.lua index c76ce8f..1aa2771 100644 --- a/advtrains_train_japan/init.lua +++ b/advtrains_train_japan/init.lua @@ -1,9 +1,4 @@ -local S -if minetest.get_modpath("intllib") then - S = intllib.Getter() -else - S = function(s,a,...)a={a,...}return s:gsub("@(%d+)",function(n)return a[tonumber(n)]end)end -end +local S = attrans advtrains.register_wagon("engine_japan", { mesh="advtrains_engine_japan.b3d", diff --git a/advtrains_train_japan/locale/de.txt b/advtrains_train_japan/locale/de.txt deleted file mode 100644 index 63d7a97..0000000 --- a/advtrains_train_japan/locale/de.txt +++ /dev/null @@ -1,4 +0,0 @@ -Driver Stand = Führerstand -Japanese Train Engine = Japanische Personenzug-Lokomotive -Default Seat = Standardsitzplatz -Japanese Train Wagon = Japanischer Personenzug-Passagierwaggon \ No newline at end of file diff --git a/advtrains_train_steam/init.lua b/advtrains_train_steam/init.lua index 6b5047c..057ad8f 100755 --- a/advtrains_train_steam/init.lua +++ b/advtrains_train_steam/init.lua @@ -1,9 +1,4 @@ -local S -if minetest.get_modpath("intllib") then - S = intllib.Getter() -else - S = function(s,a,...)a={a,...}return s:gsub("@(%d+)",function(n)return a[tonumber(n)]end)end -end +local S = attrans -- length of the steam engine loop sound local SND_LOOP_LEN = 5 diff --git a/advtrains_train_steam/locale/de.txt b/advtrains_train_steam/locale/de.txt deleted file mode 100755 index ac06e20..0000000 --- a/advtrains_train_steam/locale/de.txt +++ /dev/null @@ -1,6 +0,0 @@ -Driver Stand (left) = Führerstand Links -Driver Stand (right) = Führerstand Rechts -Steam Engine = Dampflokomotive -Detailed Steam Engine = detaillierte Dampflokomotive -Passenger Wagon = Passagierwaggon -Box wagon = Güterwaggon \ No newline at end of file diff --git a/advtrains_train_subway/init.lua b/advtrains_train_subway/init.lua index 845f15f..c51758d 100644 --- a/advtrains_train_subway/init.lua +++ b/advtrains_train_subway/init.lua @@ -1,9 +1,4 @@ -local S -if minetest.get_modpath("intllib") then - S = intllib.Getter() -else - S = function(s,a,...)a={a,...}return s:gsub("@(%d+)",function(n)return a[tonumber(n)]end)end -end +local S = attrans advtrains.register_wagon("subway_wagon", { mesh="advtrains_subway_wagon.b3d", diff --git a/advtrains_train_subway/locale/de.txt b/advtrains_train_subway/locale/de.txt deleted file mode 100644 index 4aceebd..0000000 --- a/advtrains_train_subway/locale/de.txt +++ /dev/null @@ -1,2 +0,0 @@ -Default Seat (driver stand) = Standardsitzplatz (Führerstand) -Subway Passenger Wagon = U-Bahn-Waggon \ No newline at end of file -- cgit v1.2.3