Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
38 commits
Select commit Hold shift + click to select a range
437cd94
文档: 添加 FSM 前端国际化设计规范
BAYUNZIYUE Jun 21, 2026
d9c93b2
文档: 添加 FSM 前端国际化实现计划
BAYUNZIYUE Jun 21, 2026
6e452f0
功能: 添加 i18n 核心基础设施 + 英文翻译文件(9 命名空间)
BAYUNZIYUE Jun 21, 2026
af63fe9
功能: 安装 i18n 依赖 + 添加中文翻译文件(9 命名空间)
BAYUNZIYUE Jun 21, 2026
a2b7376
功能: ConfirmDialog + Layout 国际化(含语言切换器)
BAYUNZIYUE Jun 21, 2026
b0ee691
功能: 添加 FSM 前端国际化支持(zh-CN 中文翻译)
BAYUNZIYUE Jun 21, 2026
30f7890
文档: 添加新语言适配指南
BAYUNZIYUE Jun 21, 2026
fcf5bc7
文档: 添加服务器版本管理器设计规范
BAYUNZIYUE Jun 21, 2026
e881478
文档: 添加服务器版本管理器实现计划
BAYUNZIYUE Jun 21, 2026
abcad12
功能: 添加服务器版本管理器(下载/更新 Factorio 服务端)
BAYUNZIYUE Jun 21, 2026
2ef2054
修复: 服务器版本管理器 API 路由注册 + Factorio API 格式适配
BAYUNZIYUE Jun 21, 2026
4400b99
调整: 版本列表区分稳定版(绿色)与测试版(橙色)标识
BAYUNZIYUE Jun 21, 2026
b77795c
修复: 版本安装解压路径修正为 FactorioDir 根目录
BAYUNZIYUE Jun 21, 2026
a5a01e4
功能: 集成 updater.factorio.com 完整版本列表支持降级
BAYUNZIYUE Jun 21, 2026
d862202
调整: 完整版本列表按稳定版/测试版分栏,从新到旧排列
BAYUNZIYUE Jun 21, 2026
81c4464
修复: 版本排序——按数字从新到旧排列
BAYUNZIYUE Jun 21, 2026
f84df0a
修复: 前端订阅 server_version WebSocket 房间以接收下载进度
BAYUNZIYUE Jun 21, 2026
01376eb
修复: axios 拦截器处理超时无响应 + 安装请求超时设为 10 分钟
BAYUNZIYUE Jun 21, 2026
6f3fda8
重构: 安装改为异步——API 秒回,下载在后台,进度靠 WebSocket
BAYUNZIYUE Jun 21, 2026
74e3d64
功能: 安装完成后自动刷新 FSM 内存中版本缓存
BAYUNZIYUE Jun 21, 2026
8657f79
修复: 2.0 存档解析——Python 辅助脚本 + Go fallback 共存双方案
BAYUNZIYUE Jun 21, 2026
163c7e8
重构: 纯 Go 实现 2.0 存档解析——分离 readFromV1/readFromV2,零外部依赖
BAYUNZIYUE Jun 21, 2026
e516474
修复: 版本号显示去掉尾部零——2.0 不再显示为 2.0.0.0
BAYUNZIYUE Jun 21, 2026
e88fdd7
修复: 损坏的 mod zip 不再导致 FSM 崩溃——log.Fatal 改为 log.Printf + 优雅跳过
BAYUNZIYUE Jun 21, 2026
752b4b1
修复: Factorio 版本列显示依赖版本而非 metadata 标签——direct-rockets 从 2.0.0.0 修正为 2.…
BAYUNZIYUE Jun 21, 2026
c6ec6c4
修复: dep_op 字段传递到前端——显示 >= 符号标识依赖版本要求
BAYUNZIYUE Jun 21, 2026
1298a6a
修复: 未注册 mod 点击启用时自动注册到 mod-list.json
BAYUNZIYUE Jun 21, 2026
da412b9
修复: 删除 mod 返回明确 JSON 状态而非原始字符串
BAYUNZIYUE Jun 21, 2026
db6922b
修复: 从存档加载模组改用 try/finally 保证状态清理——不再无限转圈
BAYUNZIYUE Jun 21, 2026
42a39e5
功能: 从存档加载模组增加 WebSocket 实时进度条
BAYUNZIYUE Jun 21, 2026
e43d47c
修复: 修正 WebSocket 进度消息字符串格式
BAYUNZIYUE Jun 21, 2026
a9f4105
修复: 确认加载模组后立即关闭弹窗——进度条不被遮挡
BAYUNZIYUE Jun 21, 2026
38bf0a4
修复: ConfirmDialog 点击确认后立即关闭——进度条不被遮挡
BAYUNZIYUE Jun 21, 2026
1b61924
修复: ConfirmDialog 增加 closeImmediately 属性——仅关闭弹窗不等待 Promise
BAYUNZIYUE Jun 21, 2026
24749f0
功能: 加载模组进度条旁添加取消按钮
BAYUNZIYUE Jun 21, 2026
b26dfaf
功能: 存档加载模组增加 Checklist 勾选要安装的模组
BAYUNZIYUE Jun 21, 2026
c497c95
调整: 弹窗宽度适配手机——移动端 11/12 宽度
BAYUNZIYUE Jun 21, 2026
d1eb10a
修复: 文件锁增加 30 秒超时——防止死锁导致页面卡死
BAYUNZIYUE Jun 21, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Empty file modified docker/build-release.sh
100755 → 100644
Empty file.
Empty file modified docker/build.sh
100755 → 100644
Empty file.
Empty file modified docker/entrypoint.sh
100755 → 100644
Empty file.
143 changes: 143 additions & 0 deletions docs/add-language-guide.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,143 @@
# 添加新语言指南

FSM 前端基于 `react-i18next`,添加新语言只需创建翻译文件并注册即可。

## 快速上手(以日语 ja 为例)

### 第 1 步:创建翻译文件

```bash
mkdir -p ui/locales/ja
```

复制英文文件作为模板:

```bash
cp ui/locales/en/*.json ui/locales/ja/
```

### 第 2 步:翻译

逐个编辑 `ui/locales/ja/` 下的 9 个 JSON 文件,**只改 value,不改 key**。

| 文件 | 示例 key | 英文 | 日文翻译 |
|---|---|---|---|
| `common.json` | `save` | Save | 保存 |
| `common.json` | `cancel` | Cancel | キャンセル |
| `common.json` | `confirm` | Confirm | 確認 |
| `controls.json` | `startServer` | Start Server | サーバー起動 |
| `controls.json` | `RUNNING` | Running | 実行中 |
| `layout.json` | `appTitle` | Factorio Server Manager | Factorio サーバーマネージャー |

### 第 3 步:注册语言

编辑 `ui/i18n.js`,在两个地方添加 ja:

**位置 1 — import 翻译文件:**

```js
// 在 zh-CN imports 后面添加
import jaCommon from './locales/ja/common.json';
import jaLayout from './locales/ja/layout.json';
import jaControls from './locales/ja/controls.json';
import jaMods from './locales/ja/mods.json';
import jaSaves from './locales/ja/saves.json';
import jaServerSettings from './locales/ja/serverSettings.json';
import jaLogs from './locales/ja/logs.json';
import jaConsole from './locales/ja/console.json';
import jaUserManagement from './locales/ja/userManagement.json';
```

**位置 2 — 添加到 resources 对象:**

```js
const resources = {
en: { /* 已有 */ },
'zh-CN': { /* 已有 */ },
ja: {
common: jaCommon,
layout: jaLayout,
controls: jaControls,
mods: jaMods,
saves: jaSaves,
serverSettings: jaServerSettings,
logs: jaLogs,
console: jaConsole,
userManagement: jaUserManagement,
},
};
```

### 第 4 步:添加到语言切换器

编辑 `ui/App/components/Layout.jsx`,在 `<select>` 中添加:

```jsx
<option value="ja">日本語</option>
```

### 第 5 步:验证

```bash
npm run build
```

构建通过即完成。浏览器语言设为日语时自动显示日文,也可通过侧边栏切换器手动选择。

---

## 翻译文件结构

```
ui/locales/
├── en/ ← 英文(fallback,必须保持完整)
│ ├── common.json ← 通用词汇(保存/取消/确认/删除...)
│ ├── layout.json ← 导航栏/侧边栏/页面标题
│ ├── controls.json ← 服务器启停控制面板
│ ├── mods.json ← Mod 管理全部子页面
│ ├── saves.json ← 存档管理全部子页面
│ ├── serverSettings.json ← 服务器+游戏设置
│ ├── logs.json ← 日志页面
│ ├── console.json ← RCON 控制台
│ └── userManagement.json ← 用户管理/登录
├── zh-CN/ ← 简体中文(已完成)
└── ja/ ← 日语(按本指南添加)
```

## 翻译规则

1. **只改 value,不改 key。** key 是代码引用的标识,改了会导致显示空白。
2. **保持扁平结构。** 所有 key 在 JSON 顶层,不要嵌套。
3. **不要修改 HTML。** 翻译值里不要放 `<div>`、`<span>` 等标签。
4. **大写 key 是状态值**(如 `RUNNING`、`STOPPED`、`UNKNOWN`),翻译时用对应的状态词。
5. **en/ 是权威源。** 如果某个 key 在目标语言中缺失,i18next 会自动回退到英文,不会报错。

## 自动语言检测

`i18next-browser-languagedetector` 按以下优先级检测:

1. `localStorage` 中 `fsm_lang` 的值(用户手动切换后记住)
2. 浏览器 `navigator.language`

例如浏览器语言是 `ja` → 自动加载日语;无匹配 → 回退英文。

## 常见 BCP 47 语言标签

| 语言 | 标签 | 写入 `i18n.js` |
|---|---|---|
| 日语 | `ja` | `ja` |
| 韩语 | `ko` | `ko` |
| 繁体中文 | `zh-TW` | `zh-TW` |
| 德语 | `de` | `de` |
| 法语 | `fr` | `fr` |
| 俄语 | `ru` | `ru` |
| 西班牙语 | `es` | `es` |
| 葡萄牙语 | `pt` | `pt` |
| 波兰语 | `pl` | `pl` |

## 注意事项

- **不要删除或修改 `en/` 下的文件。** 英文是 fallback 语言,必须保持完整。
- **新语言的 JSON 文件名必须与 `en/` 完全一致。**
- 如果不想翻译所有 key,可以先复制英文再逐条翻译,未翻译的 key 会自动回退英文。
- Factorio 社区有大量活跃的非英语玩家,欢迎贡献翻译 PR。
Loading