# 翻译步骤（完整）



## 准备

本文将介绍 Umi-OCR 代码文件翻译的完整流程。

请先fork或clone本仓库。强烈建议只 clone 主分支，因为某些分支含有体积很大的二进制库，会让你花费很长时间下载。

```
 git clone --branch main --single-branch https://github.com/hiroi-sora/Umi-OCR_v2.git
```

要求：Windows系统。

本文中的代码指令，如果没有特别说明，则是在当前工作目录（`dev-tools/i18n`）中输入到命令行。

例，你可以：按Win+R，输入cmd，打开命令行，然后输入下述命令跳转到工作目录（假设工程放在`D:\Projects\`）

```
cd /d D:\Projects\Umi-OCR_v2\dev-tools\i18n
```

本文假设当前要翻译的目标语言为英语 `en_US` 。如果是其它目标语言，请将下文所有 `en_US` 替换为目标语言标识符。所有标识符如下：

| 标识符  | 语言      |
| ------- | --------- |
| `zh_CN` | 简体中文  |
| `zh_TW` | 繁體中文  |
| `en_US` | English   |
| `es_ES` | Español   |
| `fr_FR` | Français  |
| `de_DE` | Deutsch   |
| `ja_JP` | 日本語    |
| `ko_KR` | 한국어    |
| `ru_RU` | Русский   |
| `pt_BR` | Português |
| `it_IT` | Italiano  |

与上述语言语种相同，但地区不同的语言，将应用最接近的翻译文件。如：  
（`zh_HK`,`en_GB`,`en_CA`,`es_MX`,`fr_CA`,`de_AT`,`de_CH`,`pt_PT`）

如果想添加一个不属于上述任何语种的翻译，需要在源代码中添加对应的标识符映射（`UmiOCR-data\py_src\utils\i18n_configs.py`）。或者，请寻求项目作者的帮助。

## 简介

Qt-Qml框架的翻译工作的流程分为3步：（假设当前要翻译为英语`en_US`）

1. 从源代码中提取出所有待翻译字符串，生成 `en_US.ts` 工程文件。
2. 编辑 `en_US.ts` 文件，将其中的文本进行翻译。
3. 将写好的 `en_US.ts` 文件，编译为 `en_US.qm` 二进制文件。

完成上述工作后，就能将`en_US.qm`加载进Umi-OCR中，在Umi中切换为`English`语言了。

## 1. 提取待翻译字符串

#### 方法一：生成/刷新单个ts工程文件

使用Qt工具 `lupdate.exe`

```cmd
lupdate.exe "../../UmiOCR-data/qt_res/qml" -recursive -ts "en_US.ts"
```

如果提示`无法将“lupdate.exe”项识别……`，则在指令最前面加上`./`，如：

```cmd
./lupdate.exe "../../UmiOCR-data/qt_res/qml" -recursive -ts "en_US.ts"
```

执行成功时，应该输出如下：

```cmd
Scanning directory '../../UmiOCR-data/qt_res/qml'...
Updating 'en_US.ts'...
    Found 307 source text(s) (140 new and 167 already existing)
    Kept 42 obsolete entries
    Same-text heuristic provided 21 translation(s)
```

如果已经开始编辑ts文件，重新调用`lupdate.exe`是安全的，不会丢失已经编辑的进度（当然，建议多备份）。

#### 方法二：生成/刷新所有语言的ts工程文件

比如修改了源代码，往源代码中添加了新的文本后，要刷新所有ts文件。

运行本目录下的 `lupdate_all.py`

## 2. 进行翻译工作

使用Qt工具 `linguist.exe` 可视化进行翻译工作。

```cmd
linguist.exe "en_US.ts"
```

或者，文件管理器中，将 `en_US.ts` 拖到 `linguist.exe` 图标上。

`linguist.exe`会打开一个可视化窗口，在上面进行翻译或检查。

如果是首次打开该ts文件，`linguist`会弹窗询问源语言和目标语言。源语言`Source language`选择`Chinese (简体中文)`，目标语言自定。`Country`一般选`Any Country`即可。

`linguist` 使用很简单，具体用法可在网上找，下面介绍基础用法：

1. 左侧`Context`栏表示待翻译的源代码文件，及每个文件的文本条数。如`BatchOCR  18/19`表示源代码`BatchOCR`一共有19条文本，其中18条已完成翻译。
2. 中上`Strings`栏表示当前源代码文件的每一条文本。图标`？`/`！`表示未翻译或未检查，`√`表示已翻译。每翻译一条文本，记得点击该图标，将它转为`√`。
3. 右侧`Sorces and Forms`栏表示该文本在源代码中的位置。可以结合代码中的注释来进行翻译。
4. 中心栏进行翻译。`Sorces text`为原文本，`Translattion to XXX`填写翻译文本，`Translator comments for XXXX` 可以不用写。

进行工作前，请务必阅读 [翻译注意事项](翻译注意事项.md) 。

## 3. 编译二进制包

方法一：使用`linguist.exe`

点击菜单 `File` → `Release` ，即可在本目录下生成 `en_US.qm`。

方法二：使用指令

```cmd
lrelease.exe "en_US.ts"
```

## 放置翻译文件

将编译好的二进制文件 `en_US.qm` 拷贝到下述目录：

```
Umi-OCR_v2/UmiOCR-data/i18n
```

启动 Umi-OCR ，即可在全局设置中切换该语言。请仔细检查翻译文本是否正确，尺寸是否合适。可按照`翻译注意事项`的说明调整字体缩放系数。

## 提交贡献

将翻译好的 `.ts` 文件放在本目录下， `.qm` 文件放在 `Umi-OCR_v2/UmiOCR-data/i18n` 。不要包含其它无关文件。

然后提交PR。