/*******************************************************************************
locals.js - 搭配用户脚本插件`18xx 中文化插件`的页面匹配规则, 翻译忽略规则,
词条库文件
*/
var I18N = {};
I18N.conf = {
/**
* 匹配 pathname 页面的正则
*
* 注册(不可用)页面 /signup
* 导入仓库 /new/import
* ...
*/
rePagePath: /^\/($|profile|about|game|tutorial|new_game|hotseat|signup|login)/,
/**
* 忽略区域的 class 正则
*
* 代码编辑器 内容 代码高亮 CodeMirror
* 代码高亮 blob-code
* 仓库名和用户名 repo-and-owner (已知出现在: 应用安装授权页和设置页 选定仓库)
* 文件,目录位置栏 |js-path-segment|final-path
* 文件列表 files js-navigation-container js-active-navigation-container
* 评论内容等 js-comment-body
* 评论编辑区域 comment-form-textarea
* 文件搜索模式 js-tree-finder-virtual-filter
* 仓库文件列表 js-navigation-open Link--primary
* 快捷键 按键 js-modifier-key
* 洞察-->流量-->热门内容列表 capped-list-label
* realease 页面 描述主体 markdown-body my-3
* f4 my-3
* 仓库页 用户名/仓库名 标题 AppHeader-globalBar-start 新版全局导航
* 提交的用户名 commit-author
* 搜索页 搜索结果 search-match
*/
reIgnoreClass: /(CodeMirror|blob-code|highlight-.*|repo-and-owner|js-path-segment|final-path|files js-navigation-container|js-comment-body|comment-form-textarea|markdown-title|js-tree-finder-virtual-filter|js-navigation-open Link--primary|js-modifier-key|capped-list-label|blob-code blob-code-inner js-file-line|pl-token|Link--primary no-underline text-bold|markdown-body my-3|f4 my-3|react-code-text|react-file-line|AppHeader-globalBar-start|commit-author|search-match)/,
/**
* 忽略区域的 itemprop 属性正则
* name 列表页 仓库名
* author 仓库页 作者名称
* additionalName 个人主页 附加名称
*/
reIgnoreItemprop: /(name|author|description|text|additionalName)/,
/**
* 忽略区域的 特定元素id 正则
* offset /blob页面 符号-->引用
*/
reIgnoreId: /(readme|offset)/,
/**
* 忽略区域的 标签 正则
* /i 规则不区分大小写
*/
reIgnoreTag: /(^CODE$|^SCRIPT$|^STYLE$|LINK|IMG|MARKED-TEXT|^PRE$|KBD)/,
// marked-text --> 文件搜索模式/<user-name>/<repo-name>/find/<branch> 文件列表条目
// ^script$ --> 避免勿过滤 notifications-list-subscription-form
// ^pre$ --> 避免勿过滤
};
I18N.zh = {};
I18N.zh["title"] = { // 标题翻译
"static": { // 静态翻译
},
"regexp": [ // 正则翻译
[/18Chesapeake/, "18切萨皮克"],
],
};
I18N.zh["pubilc"] = { // 公共区域翻译
"static": { // 静态翻译
//
"About": "关于",
"Game": "游戏",
"History": "历史",
"Signup": "注册(不可用)",
"Login": "登录(不可用)",
"Game Info": "游戏信息",
"Published by": "出版商为",
"Rules": "规则",
"Market": "市场",
"Known Issues": "已知问题",
"More info": "更多信息",
"Hotseat Games": "热座模式游戏",
"New Games": "新创建的游戏",
"Your Games": "你的游戏",
"Active Games": "进行中的游戏",
"Finished Games": "已结束的游戏",
"Invite only game": "仅限邀请游戏",
"Leave": "离开",
"Invite": "邀请",
"Live": "实时",
"Async": "异步",
"Prev": "上一页",
"Next": "下一页",
"Email or Username": "邮箱或用户名",
"Password": "密码",
"Forgot Password": "忘记密码",
"User Name": "用户名",
"Email": "邮箱",
"Notifications": "通知",
"Review": "回看",
"Auto Routing": "自动线路",
"Join": "加入",
"Start": "开始",
"This game has not started yet": "这局游戏还未开始",
"Delete": "删除",
"Confirm": "确认",
"Enter": "进入",
"Archived": "已归档",
"None": "无",
"Rules": "规则",
"Known Issues": "已知问题",
"More info": "更多信息",
"Learn about Notifications": "了解通知",
"Turn/Message Notifications": "回合/消息通知方式",
"Log ✅": "日志 ✅",
"Chat ✅": "聊天 ✅",
"Log ❌": "日志 ❌",
"Chat ❌": "聊天 ❌",
"Copy Transcript 📋": "复制到剪贴板 📋",
"Game log transcript copied to clipboard": "游戏日志记录已复制到剪贴板",
"You cannot make changes while browsing history. Press >| to navigate to the current game action.": "浏览历史记录时无法进行更改。按 >| 导航到当前游戏动作。",
"Undo": "撤销",
"Undo to Here": "撤销到此处",
"Review from Here": "从此处回看",
"Redo": "恢复",
"Restart Last Turn": "重新开始上一回合",
"Restart Turn": "重新开始回合",
"Pass": "结束",
"Skip": "跳过",
"Copied invite link to clipboard; you can share this link with other players to invite them to the game": "已将邀请链接复制到剪贴板; 你可以与其他玩家共享此链接以邀请他们参加游戏",
"Owner: You": "所有者: 你",
"Loading game...": "加载游戏...",
"Order": "顺位",
"Tokens": "标记",
"Corporation": "股份公司",
"Prices": "价格",
"Players": "玩家",
"Hide unfloated": "隐藏未上市公司",
"Show unfloated": "显示未上市公司",
"Show Delta Values": "显示增量价值",
"Show Total Values": "显示总价值",
//gamename
"Shikoku 1889": "四国 1889",
"18Chesapeake": "18切萨皮克",
"18Chesapeake: The Birth of American Railroads": "18切萨皮克: 北美铁路的诞生",
"18Chesapeake: Off the Rails": "18切萨皮克: 狂野之路",
"Off the Rails": "狂野之路",
"Show": "展示",
"Hide": "隐藏",
"Copy": "复制",
"Download": "下载",
"Clone Game": "克隆游戏",
"Game Data": "游戏数据",
"Help": "帮助",
"Auto Router Settings": "自动线路设置",
"Master Mode ❌": "主模式 ❌",
"Master Mode ✅": "主模式 ✅",
//companyname
},
"regexp": [ // 正则翻译
/**
* 匹配时间格式
*
* 月 日 或 月 日, 年
* Mar 19, 2015 – Mar 19, 2016
* January 26 – March 19
* March 26
*
* 不知道是否稳定, 暂时先试用着. 2016-03-19 20:46:45
*
* 更新于 2021-10-04 15:19:18
* 增加 带介词 on 的格式,on 翻译不体现
* on Mar 19, 2015
* on March 26
*
* 更新于 2021-10-10 13:44:36
* on 星期(简写), 月 日 年 // 个人访问令牌 有效期
* on Tue, Nov 9 2021
*
* 2021-10-19 12:04:19 融合更多规则
*
* 4 Sep
* 30 Dec 2020
*
* on 4 Sep
* on 30 Dec 2020
*
* 2021-11-22 12:51:57 新增 格式
*
* 星期(全称), 月 日, 年 // 仓库-->洞察-->流量 图示标识
* Sunday, November 14, 2021
*
* Tip:
* 正则中的 ?? 前面的字符 重复0次或1次
* 正则中的 ?: 非捕获符号(即关闭圆括号的捕获能力) 使用方法 (?: 匹配规则) -->该匹配不会被捕获 为 $数字
*/
// [/(?:on |)(?:(\d{1,2}) |)(?:(Sun(?:day)?|Mon(?:day)?|Tue(?:sday)?|Wed(?:nesday)?|Thu(?:rsday)?|Fri(?:day)?|Sat(?:urday)?), |)(?:(Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|Apr(?:il)?|May(?:)??|Jun(?:e)?|Jul(?:y)?|Aug(?:ust)?|Sep(?:tember)?|Oct(?:ober)?|Nov(?:ember)?|Dec(?:ember)?)(?:,? |$))(\d{4}|)(\d{1,2}|)(?:,? (\d{4})|)/g, function (all, date1, week, month, year1, date2, year2) {
// var weekKey = {
// "Sun": "周日",
// "Mon": "周一",
// "Tue": "周二",
// "Wed": "周三",
// "Thu": "周四",
// "Fri": "周五",
// "Sat": "周六",
// };
// var monthKey = {
// "Jan": "1月",
// "Feb": "2月",
// "Mar": "3月",
// "Apr": "4月",
// "May": "5月",
// "Jun": "6月",
// "Jul": "7月",
// "Aug": "8月",
// "Sep": "9月",
// "Oct": "10月",
// "Nov": "11月",
// "Dec": "12月"
// };
// var date = date1 ? date1 : date2;
// var year = year1 ? year1 : year2;
// return (year ? year + '年' : '') + monthKey[month.substring(0, 3)] + (date ? date + '日' : '') + (week ? ', ' + weekKey[week.substring(0, 3)] : '');
// }],
/**
* 相对时间格式处理
*
* 更新于 2021-11-21 16:47:14
* 1. 添加 前缀词
* over xxx ago // 里程碑页面 最后更新时间
* about xxx ago // 里程碑页面 最后更新时间
* almost xxx ago // 里程碑页面 最后更新时间
* less than xxx ago // 导出帐户数据
* 2. xxx之内的相对时间格式
* in 6 minutes // 拉取请求页面
*
* 更新于 2021-11-22 11:54:30
* 1. 修复 Bug: 意外的扩大了匹配范围(不带前缀与后缀的时间) 干扰了带有相对时间的其他规则
* 7 months
*/
// [/^just now|^now|^last month|^yesterday|(?:(over|about|almost|in) |)(an?|\d+)(?: |)(second|minute|hour|day|month|year)s?( ago|)/, function (all, prefix, count, unit, suffix) {
// if (all === 'now') {
// return '现在';
// }
// if (all === 'just now') {
// return '刚刚';
// }
// if (all === 'last month') {
// return '上个月';
// }
// if (all === 'yesterday') {
// return '昨天';
// }
// if (count[0] === 'a') {
// count = '1';
// } // a, an 修改为 1
// var unitKey = { second: '秒', minute: '分钟', hour: '小时', day: '天', month: '个月', year: '年' };
// if (suffix) {
// return (prefix === 'about' || prefix === 'almost' ? '大约 ' : prefix === 'less than' ? '不到 ' : '') + count + ' ' + unitKey[unit] + (prefix === 'over' ? '多之前' : '之前');
// } else {
// return count + ' ' + unitKey[unit] + (prefix === 'in' ? '之内' : '之前');
// }
// }],
/**
* 匹配时间格式 2
*
* in 5m 20s
*/
// [/^(?:(in) |)(?:(\d+)m |)(\d+)s/, function (all, prefix, minute, second) {
// all = minute ? minute + '分' + second + '秒' : second + '秒';
// return (prefix ? all + '之内' : all);
// }],
[/^Profile \((.*)\)$/, "个人 ($1)"],
[/^Designed by/, "设计师为"],
[/^Welcome/, "欢迎"],
[/^Players:/, "玩家:"],
[/^Description:/, "描述:"],
[/^Seats:/, "座位:"],
[/^Round:/, "轮次:"],
[/^Result:/, "结果:"],
[/^Optional Rules:/, "可选规则:"],
[/^Game: (.*)$/, function (all, gamename) {
return "游戏名: " + (I18N.zh["pubilc"]["static"][gamename] ? I18N.zh["pubilc"]["static"][gamename] : gamename)
}],
[/^Owner:/, "所有者:"],
[/^Created:/, "创建于:"],
[/^Updated:/, "更新于:"],
[/^Ended:/, "结束于:"],
[/^Stock (\d+)$/, "股票轮 $1"],
[/^Auction (\d+)$/, "拍卖轮 $1"],
[/^Operating (\d+)$/, "运营轮 $1"],
[/^Draft (\d+)$/, "Draft轮 $1"],
[/^Merger (\d+)$/, "合并轮 $1"],
[/Rules$/, "规则"],
],
"time-regexp": [ // 时间正则翻译专项
// /**
// * 匹配时间格式
// *
// * 月 日 或 月 日, 年
// * Mar 19, 2015 – Mar 19, 2016
// * January 26 – March 19
// * March 26
// *
// * 不知道是否稳定, 暂时先试用着. 2016-03-19 20:46:45
// *
// * 更新于 2021-10-04 15:19:18
// * 增加 带介词 on 的格式,on 翻译不体现
// * on Mar 19, 2015
// * on March 26
// *
// * 更新于 2021-10-10 13:44:36
// * on 星期(简写), 月 日 年 // 个人访问令牌 有效期
// * on Tue, Nov 9 2021
// *
// * 2021-10-19 12:04:19 融合更多规则
// *
// * 4 Sep
// * 30 Dec 2020
// *
// * on 4 Sep
// * on 30 Dec 2020
// *
// * 2021-11-22 12:51:57 新增 格式
// *
// * 星期(全称), 月 日, 年 // 仓库-->洞察-->流量 图示标识
// * Sunday, November 14, 2021
// *
// * Tip:
// * 正则中的 ?? 前面的字符 重复0次或1次
// * 正则中的 ?: 非捕获符号(即关闭圆括号的捕获能力) 使用方法 (?: 匹配规则) -->该匹配不会被捕获 为 $数字
// */
// [/(?:on |)(?:(\d{1,2}) |)(?:(Sun(?:day)?|Mon(?:day)?|Tue(?:sday)?|Wed(?:nesday)?|Thu(?:rsday)?|Fri(?:day)?|Sat(?:urday)?), |)(?:(Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|Apr(?:il)?|May(?:)??|Jun(?:e)?|Jul(?:y)?|Aug(?:ust)?|Sep(?:tember)?|Oct(?:ober)?|Nov(?:ember)?|Dec(?:ember)?)(?:,? |$))(\d{4}|)(\d{1,2}|)(?:,? (\d{4})|)/g, function (all, date1, week, month, year1, date2, year2) {
// var weekKey = {
// "Sun": "周日",
// "Mon": "周一",
// "Tue": "周二",
// "Wed": "周三",
// "Thu": "周四",
// "Fri": "周五",
// "Sat": "周六",
// };
// var monthKey = {
// "Jan": "1月",
// "Feb": "2月",
// "Mar": "3月",
// "Apr": "4月",
// "May": "5月",
// "Jun": "6月",
// "Jul": "7月",
// "Aug": "8月",
// "Sep": "9月",
// "Oct": "10月",
// "Nov": "11月",
// "Dec": "12月"
// };
// var date = date1 ? date1 : date2;
// var year = year1 ? year1 : year2;
// return (year ? year + '年' : '') + monthKey[month.substring(0, 3)] + (date ? date + '日' : '') + (week ? ', ' + weekKey[week.substring(0, 3)] : '');
// }],
// /**
// * 相对时间格式处理
// *
// * 更新于 2021-11-21 16:47:14
// * 1. 添加 前缀词
// * over xxx ago // 里程碑页面 最后更新时间
// * about xxx ago // 里程碑页面 最后更新时间
// * almost xxx ago // 里程碑页面 最后更新时间
// * less than xxx ago // 导出帐户数据
// * 2. xxx之内的相对时间格式
// * in 6 minutes // 拉取请求页面
// *
// * 更新于 2021-11-22 11:54:30
// * 1. 修复 Bug: 意外的扩大了匹配范围(不带前缀与后缀的时间) 干扰了带有相对时间的其他规则
// * 7 months
// */
// [/^just now|^now|^last year|^last month|^last week|^yesterday|(?:(over|about|almost|in) |)(an?|\d+)(?: |)(second|minute|hour|day|month|year|week)s?( ago|)/, function (all, prefix, count, unit, suffix) {
// if (all === 'now') {
// return '现在';
// }
// if (all === 'just now') {
// return '刚刚';
// }
// if (all === 'last year') {
// return '最近 1 年';
// }
// if (all === 'last month') {
// return '上个月';
// }
// if (all === 'last week') {
// return '上周';
// }
// if (all === 'yesterday') {
// return '昨天';
// }
// if (count[0] === 'a') {
// count = '1';
// } // a, an 修改为 1
// var unitKey = { second: '秒', minute: '分钟', hour: '小时', day: '天', month: '个月', year: '年', week: '周' };
// if (suffix) {
// return (prefix === 'about' || prefix === 'almost' ? '大约 ' : prefix === 'less than' ? '不到 ' : '') + count + ' ' + unitKey[unit] + (prefix === 'over' ? '多之前' : '之前');
// } else {
// return count + ' ' + unitKey[unit] + (prefix === 'in' ? '之内' : '之前');
// }
// }],
// [/(\d+)(h|d|w|m)/, function (all, count, suffix) {
// var suffixKey = { h: '小时', d: '天', w: '周', m: '个月' };
// return count + ' ' + suffixKey[suffix] + '之前';
// }],
],
"selector": [ // 元素筛选器规则
["a[aria-label='Pull requests you created']", "拉取请求"], // 顶部条 拉取请求
],
};
I18N.zh["profile"] = { // 个人资料翻译
"static": { // 静态翻译
"Profile Settings": "个人配置",
"Statistics": "统计",
"Show Individual Statistics on Profile Page": "在配置文件页面上显示个人统计信息",
"Display": "显示",
"Red 18xx.games Logo": "红色18xx.games标志",
"Main Background": "主背景",
"Main Font Color": "主字体颜色",
"Alternative Background": "备选背景",
"Alternative Font Color": "备选字体颜色",
"Your Turn": "你的回合",
"Hotseat Game": "热座游戏",
"Map & Tile Colors": "地图和板块颜色",
"Routes, Trains & Players": "线路, 火车和玩家",
"Color": "颜色",
"Width": "宽度",
"Dash": "虚线",
"Save Changes": "保存更改",
"Reset to Defaults": "重置为默认值",
"Logout": "登出",
"Delete Account and All Data": "删除账户和所有数据",
"Type DELETE to confirm": "键入 DELETE 进行确认",
"Your Statistics": "你的统计数据",
"Elo Rating": "Elo 等级分",
"Number of Plays": "游玩次数",
"Overall": "总计",
"* Updated daily. Only fully completed games are eligible.": "* 每日更新。只有完全完成的游戏才被统计。",
"Your Finished Games": "您已完成的游戏",
},
"regexp": [ // 正则翻译
[/Route (?=\d)/, "线路 "],
],
};
I18N.zh["homepage"] = { // 个人资料翻译
"static": { // 静态翻译
"1880 is now in production. 1822PNW's variants for adjusting the L/2 train roster have been fixed.": "1880 现在是正式版本。1822PNW 中用于调整 L/2 火车数量的变体规则已经修复。",
"Learn how to get": "了解如何收到",
"by email, Slack, Discord, and Telegram.": "通过邮箱, Slack, Discord 和 Telegram。",
"Please submit problem reports and make suggestions for improvements on": "请提交问题报告和提出改进建议于",
". Join the": "。加入",
". to chat about 18xx and the website.": ". 讨论交流18xx游戏和本网站。",
"The": "这个",
"has rules, maps, and other information about all the games, along with an FAQ.": "网站有关于所有游戏的规则、地图和其他信息, 以及常见问题解答。",
"Support our publishers:": "支持我们的发行商:",
", and": ", 和",
"You can support this project on": "您可以支持此项目在",
".": "。",
"18xx.games is a website where you can play async or real-time 18xx games (based on the system originally devised by the brilliant Francis Tresham)! If you are new to 18xx games then Shikoku 1889, 18Chesapeake, or 18MS are good games to begin with.": "18xx.games 是一个可以异步或实时游玩18xx游戏的网站(基于才华横溢的 Francis Tresham 最初设计的系统)!如果您是18xx游戏的新手,那么四国 1889、18切萨皮克 或 18MS 都是不错的入门游戏。",
"You can play locally with hot seat mode without an account. If you want to play multiplayer, you'll need to create an account.": "你可以在没有帐户的情况下使用热座模式进行本地游戏。如果想进行多人模式, 你需要创建一个帐户。",
"If you look at other people's games, you can make moves to play around but it won't affect them and changes won't be saved. You can clone games in the tools tab and then play around locally.": "如果观战其他人的游戏, 你可以四处移动,但这不会影响他们, 更改也不会保存。您可以在“工具”选项卡中克隆游戏, 然后在本地游玩。",
"In multiplayer games, you'll also be able to make moves for other players, this is so people can say 'pass me this SR' and you don't need to wait. To use this feature in a game, enable \"Master Mode\" in the Tools tab. Please use it politely!": "在多人模式中, 你还可以替代其他玩家行动, 这样玩家就可以说“我结束这个股票轮”, 而不需要花时间等待。要在游戏中使用此功能, 请在“工具”选项卡中启用“主模式”。请礼貌地使用它!",
"Send a message (Please keep discussions to 18xx)": "发送一条消息 (请保持讨论 18xx 游戏)",
"CREATE A NEW GAME": "创建一局新游戏",
"TUTORIAL": "教程",
"Filters": "筛选",
"Reset filters": "重置筛选",
"(All titles)": "(所有名称)",
"Allows players to request automatic route suggestions. Using them is optional.": "允许玩家寻求自动线路的建议。使用它们是可选的。",
//可选规则
},
"regexp": [ // 正则翻译
],
};
I18N.zh["new_game"] = { // 个人资料翻译
"static": { // 静态翻译
"Create New Game": "创建新游戏",
"If you are new to 18xx games then Shikoku 1889, 18Chesapeake or 18MS are good games to begin with.": "如果您是18xx游戏的新手, 那么四国 1889、18切萨皮克 或 18MS 都是不错的入门游戏。",
"Multiplayer": "多人模式",
"Hotseat": "热座模式",
"Import hotseat game": "导入热座模式游戏",
"Upload file": "上传文件",
"Add a title": "添加一个标题",
"Paste JSON game data or upload a file.": "粘贴 JSON 游戏数据或上传一个文件。",
"Game Variants / Optional Rules": "游戏变体 / 可选规则",
"Create": "创建",
"Optional random seed": "可选随机种子",
"Description": "描述",
"Players": "玩家",
"Player Names": "玩家名称",
"Min Players": "最小玩家人数",
"Max Players": "最大玩家人数",
"Production": "正式版本",
"Beta": "Beta 版本",
"Alpha": "Alpha 版本",
"Prototype, Production": "雏形, 正式版本",
"Prototype, Beta": "雏形, Beta 版本",
"Prototype, Alpha": "雏形, Alpha 版本",
"Status": "状态",
"Location": "地点",
"Title": "标题",
"Game Options": "游戏选项",
//game
"Off the Rails: fewer trains, float at 50%, 1882-like stock market": "狂野之路: 更少的火车, 50%可上市, 类似 1882 的股票市场",
},
"regexp": [ // 正则翻译
],
};
I18N.zh["game"] = { // 个人资料翻译
"static": { // 静态翻译
...I18N.zh["pubilc"]["static"],
"Optional rules used in this game:": "本局游戏中使用的可选规则:",
"PRIVATE COMPANY": "私 有 公 司",
"The Bank": "银行",
"Bank": "银行",
"Companies": "公司",
"Company": "公司",
"Income": "收入",
"Cash": "现金",
"Value": "资产",
"Liquidity": "流动资产",
"Certs": "证书",
"Committed": "承诺",
"Available": "可用",
"Shares": "股票",
"Price": "价格",
"Shareholder": "股东",
"Priority Deal": "优先交易",
"Shareholder": "股东",
"Tiles": "板块",
"Yellow": "黄色",
"Green": "绿色",
"Brown": "棕色",
"Gray": "灰色",
"Red": "红色",
"Yellow, Green": "黄色, 绿色",
"Yellow, Green, Brown": "黄色, 绿色, 棕色",
"Yellow, Green, Brown, Gray": "黄色, 绿色, 棕色, 灰色",
"Status": "状态",
"Trains": "火车",
"Type": "类型",
"Remaining": "剩余",
"Upgrade Discount": "升级折扣",
"Rusts": "淘汰",
"Event": "事件",
"Events": "事件",
"Companies Close": "公司停业",
"All companies unless otherwise noted are discarded from the game": "除非另有说明, 否则所有私有公司都将从游戏中移除",
"Description": "描述",
"Trains in Bank Pool": "银行里的火车",
"No Trains in Bank Pool": "银行里没有火车",
"Can Buy Companies": "可以购买公司",
"All corporations can buy companies from players": "所有股份公司可以从玩家处购买公司",
"Timeline": "时间线",
"At the end of each set of ORs the next available non-permanent (2, 3 or 4) train will be exported (removed, triggering phase change as if purchased)": "在每一完整的运营轮结束时, 下一辆可用的非永久性(2, 3 或 4)级火车将被出口 (从游戏中移除, 如同被购买一样, 会触发阶段变更)",
"Reasons for End of Game": "结束游戏的原因",
"Reason": "原因",
"Timing": "时机",
"Immediately": "立即",
"Any player is bankrupt": "任何玩家破产",
"The bank runs out of money": "银行资金用尽",
"Next end of a complete OR set": "下一完整的运营轮",
"Game Phases": "游戏阶段",
"Phase": "阶段",
"On Train": "火车类型",
"ORs": "运营轮",
"Train Limit": "火车上限",
"Par value": "发行价",
"Par Price:": "发行价:",
"Buy": "购买",
"Place Bid": "出价",
"Bidders:": "出价者:",
"Upcoming Trains": "即将到来的火车",
"Use @player command to ping a player": "使用 @player 命令 ping 一名玩家",
"Buy IPO Share": "购买 IPO 股票",
"Buy Market Share": "购买市场股票",
"Auto pass": "自动结束",
"Pass (Share)": "结束 (股票)",
"Order: ": "顺序: ",
"Auction Round": "拍卖轮",
"Stock Round": "股票轮",
"Operating Round": "运营轮",
"Bid on Companies": "拍卖公司",
"Choose Corporation Par Value": "设定公司发行价",
"Sell then Buy Shares": "出售然后购买股票",
"Game Over": "游戏结束",
"Pay or Withhold Dividends": "派发或保留股息",
"Lay/Upgrade Track": "铺设/升级轨道板块",
"Run Routes": "运营线路",
"Place a Token": "放置一个标记",
"Buy Trains": "购买火车",
"bid": "出价",
"par": "上市",
"buy_shares": "购买股票",
"the IPO": " IPO ",
"the market": "市场",
"moves left": "左",
"moves right": "右",
"moves up": "上",
"moves down": "下",
"Hide trains from other players": "隐藏其他玩家的火车",
"Show trains from other players": "显示其他玩家的火车",
"Skip (Track)": "跳过 (轨道)",
"Skip (Trains)": "跳过 (火车)",
"Skip (Token)": "跳过 (标记)",
"Done (Trains)": "完成 (火车)",
"Player Colors ❌": "玩家颜色 ❌",
"Simple Logos ❌": "简单标记 ❌",
"Location Names ❌": "地点名称 ❌",
"Hex Coordinates ❌": "六角格坐标 ❌",
"Starting Map ❌": "起始地图 ❌",
"Tile Names ❌": "板块名称 ❌",
"Player Colors ✅": "玩家颜色 ✅",
"Simple Logos ✅": "简单标记 ✅",
"Location Names ✅": "地点名称 ✅",
"Hex Coordinates ✅": "六角格坐标 ✅",
"Starting Map ✅": "起始地图 ✅",
"Tile Names ✅": "板块名称 ✅",
"Show Last Route and Tile For:": "显示上一次线路和板块:",
"Available Trains": "可用火车",
"Remaining Trains": "剩余火车",
"Train": "火车",
"Cost": "花费",
"Qty": "数量",
"Last Run:": "上次运行:",
"[withheld]": "[不分红]",
"The Depot": "公开市场",
"Game Over": "游戏结束",
"Bankruptcy": "银行破产",
"Exchange Trains": "交易火车",
"Exchange": "交易",
"Dividend": "股息",
"Treasury": "金库",
"Per Share": "每股",
"Stock Moves": "股票走势",
"Select Routes": "选择线路",
"Prior routes are autofilled.": "先前线路将自动填充。",
"Click revenue centers, again to cycle paths.": "再次点击收入中心以循环路径。",
"Used": "使用",
"Revenue": "收入",
"Route": "线路",
"Clear Train": "清除火车",
"Clear All": "清除所有",
"Reset": "重置",
"Auto": "自动",
"Abilities:": "能力:",
"Abilities": "能力",
"Ability": "能力",
"the Treasury": "金库",
"Place a Token or Lay Track": "放置一个标记或铺设板块",
"End of the current round": "本轮结束",
"Corporation enters end game trigger on stock market": "股份公司在股市触发游戏结束",
"Company hit max stock value": "公司股价达到最大值",
"to play around in hotseat mode": "以热座模式游玩",
"You can move for others": "你可以为其他玩家行动",
"Enable to move for others": "启用为其他玩家行动",
"seconds": "秒",
"Path timeout:": "路径超时时间:",
"You may want to increase path timeout as more cities are connected with dense trackage, if you get suboptimal routes.": "随着更多城市与密集轨道的连接, 如果你得到了次优线路, 那么可能需要增加路径超时时间。",
"Copied Data": "已复制数据",
"Hotkeys & Shortcuts": "快捷键 & 快捷方式",
// 18Chesapeake
"Corporation shares do not count towards cert limit": "公司股票不计入证书限额",
"Cornelius Vanderbilt closes": "科尼利尔斯 • 范德比尔特铁路公司停业",
"Corporation shares can be held above 60%": "公司股票可持有超过 60%",
"Can buy more than one share in the corporation per turn": "每回合可以购买超过一股的公司股票",
"Send any player a notification (via email/webhooks) by tagging them in game chat: @username": "在游戏聊天中 @任何玩家, 向他们发送通知 (通过电子邮件/Webhooks): @用户名",
"End Game": "结束游戏",
"You may want to increase route timeout when a RR has 3 or more trains, if you get suboptimal routes.": "当一次线路运行有 3 辆或 3 辆以上火车时, 如果线路不理想, 你可能需要增加线路超时时间。",
"Route timeout:": "线路超时时间:",
"Withhold": "不分红",
"Pay Out": "全分红",
"Half Pay": "半分红",
"": "",
"": "",
// 18Chesapeake_location
"Green Spring": "格林斯普林",
"Washington": "华盛顿",
"Strasburg": "斯特拉斯堡",
"Baltimore": "巴尔的摩",
"Later Phase": "后期",
"": "",
"": "",
"": "",
"": "",
"": "",
// 18Chesapeake_company
"Baltimore & Ohio Railroad": "巴尔的摩俄亥俄铁路公司",
"Camden & Amboy Railroad": "肯顿安博伊铁路公司",
"Chesapeake & Ohio Railroad": "切萨皮克俄亥俄铁路公司",
"Lehigh Valley Railroad": "理海谷铁路公司",
"Norfolk & Western Railway": "诺福克西方铁路公司",
"Pittsburgh and Lake Erie Railroad": "匹兹堡伊利湖铁路公司",
"Pennsylvania Railroad": "宾夕法尼亚铁路公司",
"Strasburg Rail Road": "斯特拉斯堡铁路公司",
"Delaware and Raritan Canal": "特拉华拉里坦运河公司",
"Columbia - Philadelphia Railroad": "哥伦比亚费城铁路公司",
"Baltimore and Susquehanna Railroad": "巴尔的摩萨斯奎哈纳铁路公司",
"Chesapeake and Ohio Canal": "切萨皮克俄亥俄运河公司",
"Cornelius Vanderbilt": "科尼利尔斯 • 范德比尔特铁路公司",
"No special ability. Blocks hex K3 while owned by a player.": "没有特殊能力。当拥有人为玩家时, 封阻 K3 六角格。",
"Blocks hexes H2 and I3 while owned by a player. The owning corporation may lay two connected tiles in hexes H2 and I3. Only #8 and #9 tiles may be used. If any tiles are played in these hexes other than by using this ability, the ability is forfeit. These tiles may be placed even if the owning corporation does not have a route to the hexes. These tiles are laid during the tile laying step and are in addition to the corporation’s tile placement action.": "当拥有人为玩家时, 封阻 H2 和 I3 六角格。拥有它的股份公司可以在 H2 和 I3 六角格铺设两块彼此相连的板块。仅能使用 #8 和 #9 轨道板块。如果其中的任一六角格, 已在本特殊能力以外的情况下放置了任何板块, 则该特殊能力失效。即使拥有它的股份公司还未有线路连通至这些六角格, 这些板块依然可以被放置。这些板块的铺设需在铺设板块步骤中进行, 并且其作为额外的公司放置板块行动。",
"Blocks hexes F4 and G5 while owned by a player. The owning corporation may lay two connected tiles in hexes F4 and G5. Only #8 and #9 tiles may be used. If any tiles are played in these hexes other than by using this ability, the ability is forfeit. These tiles may be placed even if the owning corporation does not have a route to the hexes. These tiles are laid during the tile laying step and are in addition to the corporation’s tile placement action.": "当拥有人为玩家时, 封阻 F4 和 G5 六角格。拥有它的股份公司可以在 F4 和 G5 六角格铺设两块彼此相连的板块。仅能使用 #8 和 #9 轨道板块。如果其中的任一六角格, 已在本特殊能力以外的情况下放置了任何板块, 则该特殊能力失效。即使拥有它的股份公司还未有线路连通至这些六角格, 这些板块依然可以被放置。这些板块的铺设需在铺设板块步骤中进行, 并且其作为额外的公司放置板块行动。",
"Blocks hex D2 while owned by a player. The owning corporation may place a tile in hex D2. The corporation does not need to have a route to this hex. The tile placed counts as the corporation’s tile lay action and the corporation must pay the terrain cost. The corporation may then immediately place a station token free of charge.": "当拥有人为玩家时, 封阻 D2 六角格。拥有它的股份公司可以在 D2 六角格放置一块板块。股份公司无须有线路连通至本六角格。该板块的放置视为该股份公司的板块铺设行动, 并且该公司必须支付地形费用。然后, 公司可以立即在 D2 六角格中免费放置一个车站标记。",
"Purchasing player immediately takes a 10% share of the B&O. This does not close the private company. This private company has no other special ability.": "购买玩家立即获得巴尔的摩俄亥俄股份公司 10% 的股票。本私有公司没有其它特殊能力。",
//18Chesapeake_log
"-- Event: Private companies close --": "-- 事件: 私有公司停业 --",
"": "",
"": "",
"": "",
"": "",
"": "",
"": "",
"": "",
"": "",
},
"regexp": [ // 正则翻译
[],
[/^(.*): Phase (.*) - (.* Round) (.*) - (.*) - (.*)$/, function (all, gamename, phase_number, round, round_number, des, des1) {
return (I18N.zh["pubilc"]["static"][gamename] ? I18N.zh["pubilc"]["static"][gamename] : gamename) + ": 阶段 " + phase_number + " - " + (I18N.zh["game"]["static"][round] ? I18N.zh["game"]["static"][round] : round) + " " + round_number + " - " + (I18N.zh["game"]["static"][des] ? I18N.zh["game"]["static"][des] : des) + " - " + (I18N.zh["game"]["static"][des1] ? I18N.zh["game"]["static"][des1] : des1);
}],
[/^(.*): Phase (.*) - (.* Round) (.*) - (.*)$/, function (all, gamename, phase_number, round, round_number, des) {
return (I18N.zh["pubilc"]["static"][gamename] ? I18N.zh["pubilc"]["static"][gamename] : gamename) + ": 阶段 " + phase_number + " - " + (I18N.zh["game"]["static"][round] ? I18N.zh["game"]["static"][round] : round) + " " + round_number + " - " + (I18N.zh["game"]["static"][des] ? I18N.zh["game"]["static"][des] : des);
}],
[/^(.*) bids (.\d+) for (.*)$/, function (all, username, number, company) {
var company_zh = (I18N.zh["game"]["static"][company] ? I18N.zh["game"]["static"][company] : company);
return username + " 为 " + company_zh + " 出价 " + number;
}],
// username buys a 10% share of PRR from the IPO for $95
[/^(.*) buys a (.*) share of (.*) from (.*) for (.\d+)$/, function (all, username, share, company, market, money) {
var company_zh = (I18N.zh["game"]["static"][company] ? I18N.zh["game"]["static"][company] : company);
var market_zh = (I18N.zh["game"]["static"][market] ? I18N.zh["game"]["static"][market] : market);
return username + " 花费 " + money + " 从" + market_zh + "购买了 1 张 " + company_zh + " 的 " + share + " 股票";
}],
// PLE buys a 3 train for $180 from The Depot
[/^(.*) buys a (.*) train for (.\d+) from (.*)$/, function (all, username, train, number, where) {
var where_zh = (I18N.zh["game"]["static"][where] ? I18N.zh["game"]["static"][where] : where);
return username + " 从" + where_zh + "花费 " + number + " 购买一辆 " + train + " 级火车";
}],
[/^(.*) buys (.*) from (.*) for (.\d+)$/, function (all, company, private, username, number) {
var private_zh = (I18N.zh["game"]["static"][private] ? I18N.zh["game"]["static"][private] : private);
return company + " 从 " + username + " 购买 " + private_zh + " 花费 " + number;
}],
[/^(.*) buys (.*)(?:(?<!.*from.*)) for (.\d+)$/, function (all, username, company, number) {
var company_zh = (I18N.zh["game"]["static"][company] ? I18N.zh["game"]["static"][company] : company);
return username + " 购买 " + company_zh + " 花费 " + number;
}],
[/^-- Phase (.*) \(Operating Rounds: (\d+) \| Train Limit: (\d+) \| Available Tiles: (.*)\) --$/, function (all, $1, $2, $3, $4) {
return "-- 阶段 " + $1 + " (运营轮: " + $2 + " | 火车上限: " + $3 + " | 可用板块: " + I18N.zh["game"]["static"][$4] + ") --";
}],
[/^(.*) minimum bid decreases from (.*) to (.*)$/, function (all, company, before, after) {
var company_zh = (I18N.zh["game"]["static"][company] ? I18N.zh["game"]["static"][company] : company);
return company_zh + " 的最低出价从 " + before + " 降至 " + after;
}],
[/^(.*) collects (.*) from (.*)$/, function (all, username, money, company) {
var company_zh = (I18N.zh["game"]["static"][company] ? I18N.zh["game"]["static"][company] : company);
return username + " 从 " + company_zh + " 收到 " + money;
}],
[/^• Action\((.*)\) via Master Mode by: (.*)$/, function (all, action, username) {
var action_zh = (I18N.zh["game"]["static"][action] ? I18N.zh["game"]["static"][action] : action)
return "• 行动(" + action_zh + ") 通过主模式执行由: " + username;
// return "• " + username + " 通过主模式执行行动(" + action_zh + ")";
}],
[/^(.*)'s share price (.*) from (.\d+) to (.\d+)$/, function (all, company, direction, before, after) {
var company_zh = (I18N.zh["game"]["static"][company] ? I18N.zh["game"]["static"][company] : company);
var direction_zh = (I18N.zh["game"]["static"][direction] ? I18N.zh["game"]["static"][direction] : direction)
return company_zh + " 的股价从 " + before + " 向" + direction_zh + "移至 " + after;
}],
// SRR spends $40 and lays tile #X4 with rotation 1 on H6 (Baltimore)
[/^(.*) spends (.\d+) and lays tile (.*) with rotation (\d+) on ([A-Z]*[0-9]*) \((.*)\)$/, function (all, company, money, tile, rotation, coordinate, location) {
var location_zh = (I18N.zh["game"]["static"][location] ? I18N.zh["game"]["static"][location] : location);
return company + " 花费 " + money + " 并铺设带有旋转 " + rotation + " 的板块 " + tile + " 在 " + coordinate + " (" + location_zh + ")";
}],
// SRR spends $40 and lays tile #X4 with rotation 1 on H6
[/^(.*) spends (.\d+) and lays tile (.*) with rotation (\d+) on ([A-Z]*[0-9]*)$/, function (all, company, money, tile, rotation, coordinate) {
return company + " 花费 " + money + " 并铺设带有旋转 " + rotation + " 的板块 " + tile + " 在 " + coordinate;
}],
// PRR lays tile #14 with rotation 1 on F2 (Harrisburg)
[/^(.*) lays tile (.*) with rotation (\d+) on ([A-Z]*[0-9]*) \((.*)\)$/, function (all, company, tile, rotation, coordinate, location) {
var location_zh = (I18N.zh["game"]["static"][location] ? I18N.zh["game"]["static"][location] : location);
return company + " 铺设带有旋转 " + rotation + " 的板块 " + tile + " 在 " + coordinate + " (" + location_zh + ")";
}],
// lays tile #7 with rotation 4 on B10
[/^(.*) lays tile (.*) with rotation (\d+) on ([A-Z]*[0-9]*)$/, function (all, company, tile, rotation, coordinate, location) {
var location_zh = (I18N.zh["game"]["static"][location] ? I18N.zh["game"]["static"][location] : location);
return company + " 铺设带有旋转 " + rotation + " 的板块 " + tile + " 在 " + coordinate;
}],
// PRR runs a 3 train for $120: F2-J2-J4
[/^(.*) runs a (.*) train for (.\d+): (.*)$/, function (all, company, train, money, route) {
var company = (I18N.zh["game"]["static"][company] ? I18N.zh["game"]["static"][company] : company);
return company + " 运行一辆 " + train + " 级火车得到 " + money + ": " + route;
}],
[/Submit (.\d+)$/, "提交 $1"],
[/ operates /, " 运营 "],
[/ has no valid actions and passes$/, " 没有有效的行动并结束行动"],
[/ passes$/, " 结束行动"],
[/Value: (.\d*)/, "价值: $1"],
[/Price: (.\d*)/, "价格: $1"],
[/Revenue: (.\d*)/, "收入: $1"],
[/Certs\//, "证书/"],
[/\bto float/, "上市"],
[/ floats$/, " 上市"],
[/(?<!and) receives (.\d+)$/, " 收到 $1"],
[/rusts (\d*)/, "淘汰 $1"],
[/(\d+)% President's Share/, "$1% 总裁股"],
[/^Order:/, "顺位:"],
[/^-- Game over: (.*) --$/, "-- 游戏结束: $1 --"],
[/^-- Stock Round (.*) --$/, "-- 股票轮 $1 --"],
[/^-- Operating Round (.*) --$/, "-- 运营轮 $1 --"],
[/^-- Event: A (.*) train exports --$/, "-- 事件: 一辆 $1 级火车出口 --"],
[/^-- Event: (.*) trains rust \((.*)\) --$/, "-- 事件: $1 级火车淘汰 ($2) --"],
[/^(.*) passes bidding$/, "$1 放弃出价"],
[/^(.*) receives a (.*) share of (.*)$/, "$1 收到 $3 的一张 $2 股票"],
[/^(.*) pars (.*) at (.*)$/, "$1 将 $2 以 $3 发行上市"],
[/^(.*) becomes the president of (.*)$/, "$1 成为 $2 总裁"],
[/^Pass \(on (.*)\)$/, "放弃 ($1)"],
[/ has priority deal$/, " 拥有优先交易卡"],
[/ passes place a token$/, " 放弃放置一个标记"],
[/ places a token on ([A-Z]+[0-9]+)$/, " 放置了一个标记在 $1"],
[/ skips place a token$/, " 跳过放置标记"],
[/ skips run routes$/, " 跳过运行线路"],
[/ does not run$/, " 没有运行"],
[/ passes buy trains$/, " 结束购买火车"],
[/ skips buy companies$/, " 跳过购买公司"],
[/ must buy an available train$/, " 必须购买一辆可用的火车"],
[/ has (.\d+).$/, " 拥有 $1 。"],
[/ has (.\d+) in cash.$/, " 拥有 $1 现金。"],
[/ declines to sell shares$/, " 决定不出售股票"],
[/^Game ended manually by (.*)/, "游戏被 $1 手动结束"],
[/^(.*) has (.\d+) in sellable shares.$/, "$1 拥有 $2 可售股票。"],
[/^(.*) must sell shares to raise at least (.\d+).$/, "$1 必须出售股票才能筹集至少 $2。"],
[/^(.*) must contribute (.\d+) for (.*) to afford a train from the Depot$/, "$1 必须出售股票才能筹集至少 $2。"],
//18Chesapeake
[/Cornelius Vanderbilt comes with the president's share of (.{1,3})/, "科尼利尔斯 • 范德比尔特铁路公司带有 $1 股份公司的总裁股"],
[/Purchasing player takes a president's share \(20%\) of (.{1,3}) and immediately sets its par value. This private closes when the associated corporation buys its first train. It cannot be bought by a corporation./, "购买玩家拿取 $1 股份公司中的总裁股(20%), 并立即设定该股份公司的发行价。当关联股份公司购买第一辆火车时,本私有公司停业。它不能被股份公司购买。"],
[/^(.*) wins the auction for (.*) with the only bid of (.\d+)$/, function (all, username, company, number) {
var company_zh = (I18N.zh["game"]["static"][company] ? I18N.zh["game"]["static"][company] : company);
return username + " 以 " + number + " 的唯一出价赢得 " + company_zh + " 的拍卖";
}],
[/^(.*) wins the auction for (.*) with a bid of (.\d+)$/, function (all, username, company, number) {
var company_zh = (I18N.zh["game"]["static"][company] ? I18N.zh["game"]["static"][company] : company);
return username + " 以 " + number + " 的出价赢得 " + company_zh + " 的拍卖";
}],
[/^(.*) goes up for auction$/, function (all, company) {
var company_zh = (I18N.zh["game"]["static"][company] ? I18N.zh["game"]["static"][company] : company);
return "开始拍卖 " + company_zh;
}],
[/^(.*) passes on (.*)$/, function (all, username, company) {
var company_zh = (I18N.zh["game"]["static"][company] ? I18N.zh["game"]["static"][company] : company);
return username + " 放弃 " + company_zh;
}],
//1846
[/IC receives a (\$\d+) subsidy/, "IC 获得一笔 $1 的补贴"],
],
};
I18N.zh["hotseat"] = { // 个人资料翻译
"static": { // 静态翻译
...I18N.zh["game"]["static"],
},
"regexp": [ // 正则翻译
...I18N.zh["game"]["regexp"],
],
};
I18N.zh["tutorial"] = { // 个人资料翻译
"static": { // 静态翻译
...I18N.zh["game"]["static"],
},
"regexp": [ // 正则翻译
...I18N.zh["game"]["regexp"],
],
};
I18N.zh["about"] = { // 个人资料翻译
"static": { // 静态翻译
},
"regexp": [ // 正则翻译
],
};
I18N.zh["signup"] = { // 个人资料翻译
"static": { // 静态翻译
"Create Account": "创建账户",
},
"regexp": [ // 正则翻译
],
};
I18N.zh["login"] = { // 个人资料翻译
"static": { // 静态翻译
},
"regexp": [ // 正则翻译
],
};