aboutsummaryrefslogtreecommitdiff
path: root/advtrains/locale/advtrains.zh_CN.tr
blob: ef9c99b4c2a55327e5275c97fce7c4c5322ce4d4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
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=地铁车厢
span> * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef NOISE_HEADER #define NOISE_HEADER #include "irr_v3d.h" #include "exceptions.h" #include "util/string.h" extern FlagDesc flagdesc_noiseparams[]; // Note: this class is not polymorphic so that its high level of // optimizability may be preserved in the common use case class PseudoRandom { public: const static u32 RANDOM_RANGE = 32767; inline PseudoRandom(int seed=0): m_next(seed) { } inline void seed(int seed) { m_next = seed; } inline int next() { m_next = m_next * 1103515245 + 12345; return (unsigned)(m_next / 65536) % (RANDOM_RANGE + 1); } inline int range(int min, int max) { if (max < min) throw PrngException("Invalid range (max < min)"); /* Here, we ensure the range is not too large relative to RANDOM_MAX, as otherwise the effects of bias would become noticable. Unlike PcgRandom, we cannot modify this RNG's range as it would change the output of this RNG for reverse compatibility. */ if ((u32)(max - min) > (RANDOM_RANGE + 1) / 10) throw PrngException("Range too large"); return (next() % (max - min + 1)) + min; } private: int m_next; }; class PcgRandom { public: const static s32 RANDOM_MIN = -0x7fffffff - 1; const static s32 RANDOM_MAX = 0x7fffffff; const static u32 RANDOM_RANGE = 0xffffffff; PcgRandom(u64 state=0x853c49e6748fea9bULL, u64 seq=0xda3e39cb94b95bdbULL); void seed(u64 state, u64 seq=0xda3e39cb94b95bdbULL); u32 next(); u32 range(u32 bound); s32 range(s32 min, s32 max); void bytes(void *out, size_t len); s32 randNormalDist(s32 min, s32 max, int num_trials=6); private: u64 m_state; u64 m_inc; }; #define NOISE_FLAG_DEFAULTS 0x01 #define NOISE_FLAG_EASED 0x02 #define NOISE_FLAG_ABSVALUE 0x04 //// TODO(hmmmm): implement these! #define NOISE_FLAG_POINTBUFFER 0x08 #define NOISE_FLAG_SIMPLEX 0x10 struct NoiseParams { float offset; float scale; v3f spread; s32 seed; u16 octaves; float persist; float lacunarity; u32 flags; NoiseParams() { offset = 0.0f; scale = 1.0f; spread = v3f(250, 250, 250); seed = 12345; octaves = 3; persist = 0.6f; lacunarity = 2.0f; flags = NOISE_FLAG_DEFAULTS; } NoiseParams(float offset_, float scale_, v3f spread_, s32 seed_, u16 octaves_, float persist_, float lacunarity_, u32 flags_=NOISE_FLAG_DEFAULTS) { offset = offset_; scale = scale_; spread = spread_; seed = seed_; octaves = octaves_; persist = persist_; lacunarity = lacunarity_; flags = flags_; } }; // Convenience macros for getting/setting NoiseParams in Settings as a string // WARNING: Deprecated, use Settings::getNoiseParamsFromValue() instead #define NOISEPARAMS_FMT_STR "f,f,v3,s32,u16,f" //#define getNoiseParams(x, y) getStruct((x), NOISEPARAMS_FMT_STR, &(y), sizeof(y)) //#define setNoiseParams(x, y) setStruct((x), NOISEPARAMS_FMT_STR, &(y)) class Noise { public: NoiseParams np; int seed; u32 sx; u32 sy; u32 sz; float *noise_buf; float *gradient_buf; float *persist_buf; float *result; Noise(NoiseParams *np, int seed, u32 sx, u32 sy, u32 sz=1); ~Noise(); void setSize(u32 sx, u32 sy, u32 sz=1); void setSpreadFactor(v3f spread); void setOctaves(int octaves); void gradientMap2D( float x, float y, float step_x, float step_y, int seed); void gradientMap3D( float x, float y, float z, float step_x, float step_y, float step_z, int seed); float *perlinMap2D(float x, float y, float *persistence_map=NULL); float *perlinMap3D(float x, float y, float z, float *persistence_map=NULL); inline float *perlinMap2D_PO(float x, float xoff, float y, float yoff, float *persistence_map=NULL) { return perlinMap2D( x + xoff * np.spread.X, y + yoff * np.spread.Y, persistence_map); } inline float *perlinMap3D_PO(float x, float xoff, float y, float yoff, float z, float zoff, float *persistence_map=NULL) { return perlinMap3D( x + xoff * np.spread.X, y + yoff * np.spread.Y, z + zoff * np.spread.Z, persistence_map); } private: void allocBuffers(); void resizeNoiseBuf(bool is3d); void updateResults(float g, float *gmap, float *persistence_map, size_t bufsize); }; float NoisePerlin2D(NoiseParams *np, float x, float y, int seed); float NoisePerlin3D(NoiseParams *np, float x, float y, float z, int seed); inline float NoisePerlin2D_PO(NoiseParams *np, float x, float xoff, float y, float yoff, int seed) { return NoisePerlin2D(np, x + xoff * np->spread.X, y + yoff * np->spread.Y, seed); } inline float NoisePerlin3D_PO(NoiseParams *np, float x, float xoff, float y, float yoff, float z, float zoff, int seed) { return NoisePerlin3D(np, x + xoff * np->spread.X, y + yoff * np->spread.Y, z + zoff * np->spread.Z, seed); } // Return value: -1 ... 1 float noise2d(int x, int y, int seed); float noise3d(int x, int y, int z, int seed); float noise2d_gradient(float x, float y, int seed, bool eased=true); float noise3d_gradient(float x, float y, float z, int seed, bool eased=false); float noise2d_perlin(float x, float y, int seed, int octaves, float persistence, bool eased=true); float noise2d_perlin_abs(float x, float y, int seed, int octaves, float persistence, bool eased=true); float noise3d_perlin(float x, float y, float z, int seed, int octaves, float persistence, bool eased=false); float noise3d_perlin_abs(float x, float y, float z, int seed, int octaves, float persistence, bool eased=false); inline float easeCurve(float t) { return t * t * t * (t * (6.f * t - 15.f) + 10.f); } float contour(float v); #endif