[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)
master
ywang 2020-07-19 15:50:34 +02:00
parent 19509acf56
commit cc78b63e34
14 changed files with 186 additions and 106 deletions

View File

@ -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))

View File

@ -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",
})

View File

@ -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

View File

@ -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

View File

@ -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=地铁车厢

View File

@ -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

View File

@ -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",

View File

@ -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

View File

@ -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",

View File

@ -1,4 +0,0 @@
Driver Stand = Führerstand
Japanese Train Engine = Japanische Personenzug-Lokomotive
Default Seat = Standardsitzplatz
Japanese Train Wagon = Japanischer Personenzug-Passagierwaggon

View File

@ -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

View File

@ -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

View File

@ -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",

View File

@ -1,2 +0,0 @@
Default Seat (driver stand) = Standardsitzplatz (Führerstand)
Subway Passenger Wagon = U-Bahn-Waggon