Skip to content

Commit

Permalink
更新
Browse files Browse the repository at this point in the history
  • Loading branch information
lemisky committed Nov 27, 2021
1 parent c0aaf3f commit faa1602
Show file tree
Hide file tree
Showing 4 changed files with 62 additions and 46 deletions.
95 changes: 56 additions & 39 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,13 +1,42 @@
# docts

document translate, read & translate & write

借助 [pygtrans](https://github.com/foyoux/pygtrans) 链接谷歌机器翻译

![PyPI - Python Version](https://img.shields.io/pypi/pyversions/docts) ![PyPI](https://img.shields.io/pypi/v/docts) ![GitHub last commit](https://img.shields.io/github/last-commit/foyoux/docts)
![PyPI - Python Version](https://img.shields.io/pypi/pyversions/docts) ![PyPI](https://img.shields.io/pypi/v/docts) ![GitHub last commit](https://img.shields.io/github/last-commit/foyoux/docts)

---

## v0.1.0

> 由于上层依赖库问题,现需手动提供额外参数
```python
from docts import *

xlf_path = 'xlf_path.xlf'

# 使用示例方法
todo(xlf_path)

# 运行完毕后, 会在xlf_path同目录下生成一个翻译好的文件, 则直接导入 Sisulizer

# 现在需要手动构造 client 参数,具体参考:https://github.com/foyoux/pygtrans
client = Translate(proxies={"socks5": "http://localhost:10808"})
doc = Doc(xlf_path, client)
# WordFilters对象的add_filter等方法直接转移到, Doc对象中
doc.add_filter(xxx_filter)

# 保存文件也无需使用 write_xl*
doc.save_words()

------
# 需要导出忽略文件时
doc.save_ignores()

```

---

-**v0.0.7** 开始, 无需 **xlwings****Excel**, 废弃 **xls** 文件, 改用无限制的 **xlf**

Expand Down Expand Up @@ -36,14 +65,10 @@ document translate, read & translate & write

```



看着迷迷糊糊, 不妨动手试一试

--------



## 概述

此项目我暂时只用来结合 **Sisulizer** 翻译 **CHM帮助文档** , 但实际不仅于此, 支持配合 **Sisulizer** 翻译它所支持的所有格式, 理论上也是支持与其他本地化程序配合使用的.
Expand All @@ -59,8 +84,6 @@ document translate, read & translate & write

效果可参考: [InstallShield2020-Documents](https://github.com/foyoux/InstallShield2020-Documents)



## 环境准备

1. 安装Sisulizer4
Expand All @@ -77,23 +100,19 @@ document translate, read & translate & write

在菜单: 工具->平台->HTML, [如图设置](images/image-20210626144042156.png)



*注意*

- 你当然只能在 **Windows** 系统里操作
- 由于依赖 **xlwings**, 而它是依赖 **Excel** 的, 所以你必须安装 **Excel**, 后期会考虑移除此依赖



## 快速入门

**Sisulizer** 帮助文档为例

1. 利用Sisulizer解析字符串并导出

![利用Sisulizer解析字符串并导出](images/利用Sisulizer解析字符串并导出.gif)

2. 利用 **docts** 进行翻译

安装: `pip install docts`
Expand All @@ -104,11 +123,10 @@ document translate, read & translate & write

![生成本地化文件](images/生成本地化文件.gif)



## 详细教程

**Sisulizer** 只支持 **xls** 文件, 这限制了导出条目在 **65536** 内, 所以引入了 **xlf**, **xlf** 文件是一种 **xml** 文本格式, 没有这个限制, 但是 **xls** 的读写比 **xlf** 方便一些, 为了 方便(简单), 省事(偷懒)起见, 翻译的整体步骤就是:
**Sisulizer** 只支持 **xls** 文件, 这限制了导出条目在 **65536** 内, 所以引入了 **xlf**, **xlf** 文件是一种 **xml** 文本格式, 没有这个限制, 但是 **xls**
的读写比 **xlf** 方便一些, 为了 方便(简单), 省事(偷懒)起见, 翻译的整体步骤就是:

1. 导出 **xlf**
2. 读取 **xlf** 中的字符串, 然后翻译, 最后写入 **xls**, 如果超过 **65536** 条就分多个文件写入.
Expand All @@ -120,25 +138,23 @@ document translate, read & translate & write
2. Python, (最好再配个 PyCharm)
3. 再就是这个包 `pip install docts`, 或者自己写代码, 解析 **xlf**, 和 **xls**



### Sisulizer简单介绍

**Sisulizer** 支持很多文件, 比如常见的:

- 文本类型: **TXT** / **CSV** / **HTM** / **HTML** / **XHTML** / **SHTML** / **XML** / **INI** / **JSON** / **XLF** / **properties** / **PO** / **XAML** ...
- 文本类型: **TXT** / **CSV** / **HTM** / **HTML** / **XHTML** / **SHTML** / **XML** / **INI** / **JSON** / **XLF** / **
properties** / **PO** / **XAML** ...
- 源码类型: **.c** / **.cpp** / **.h** / **.sql** / **.cs** / **.js** / **.php** / **.ts** / **.java** / ...
- 二进制类型: **.exe** / **.dll** / **.apk** / **.jar** / ...
- 太多了

**Sisulizer** 支持单个翻译和批量翻译, 并且支持多种语言, 丰富的设置选项与功能.

参照上面快速入门中的步骤, 此项目理论上支持任何 **Sisulizer** 支持的文件, 而不仅仅可以用来翻译 **CHM** 文件. 这套路理论上也是支持其他翻译工具的, 此项目核心其实就是 [pygtrans](https://github.com/foyoux/pygtrans) , 它支持 **十万** 的批量翻译, 只要将导出内容解析, 然后用它翻译, 重写回去, 再到相应工具导入即可.
参照上面快速入门中的步骤, 此项目理论上支持任何 **Sisulizer** 支持的文件, 而不仅仅可以用来翻译 **CHM** 文件. 这套路理论上也是支持其他翻译工具的,
此项目核心其实就是 [pygtrans](https://github.com/foyoux/pygtrans) , 它支持 **十万** 的批量翻译, 只要将导出内容解析, 然后用它翻译, 重写回去, 再到相应工具导入即可.

[Sisulizer简易教程]()



### 使用Sisulizer翻译CHM文档的完整过程

大致步骤大家看 **快速入门中的动图**, 下面主要讲解一些选项的区别, 与 **docts** 的使用
Expand Down Expand Up @@ -192,7 +208,7 @@ document translate, read & translate & write
# 它会被自动应用到每一个字符串句子上
wf.add_filter(filter_point)
```

- 你可能想把所有的 '•' 变成 '●', 因为前者是 **UTF-8** 的编码, 在翻译后的文件中的 **GB2312** 无法正常显示, 而翻译或过滤并不能解决这个问题, 这是你希望将 '•' 变成 '●'

```python
Expand Down Expand Up @@ -264,11 +280,11 @@ document translate, read & translate & write

```



## CHM相关

- 微软推出的一种[帮助文档格式](https://docs.microsoft.com/en-us/previous-versions/windows/desktop/htmlhelp/microsoft-html-help-1-4-sdk), 实际上是一个 **压缩包**+**自定义块数据**
-
微软推出的一种[帮助文档格式](https://docs.microsoft.com/en-us/previous-versions/windows/desktop/htmlhelp/microsoft-html-help-1-4-sdk)
, 实际上是一个 **压缩包**+**自定义块数据**

- 通过解压缩工具或 `hh.exe -decompile folder file.chm` 命令可进行反编译, 此命令系统自带

Expand All @@ -278,37 +294,38 @@ document translate, read & translate & write

- 网上找到两款免费可以重编译 **CHM** 文件的工具

1. KeyTools: 亲测可用, 项目 **files** 目录下有提供
2. Precision Helper: 未测试
1. KeyTools: 亲测可用, 项目 **files** 目录下有提供
2. Precision Helper: 未测试

- 翻译 **CHM文档** 的一般套路如下:

1. 反编译CHM
2. 借助工具翻译HTML文件
3. 重编译
1. 反编译CHM
2. 借助工具翻译HTML文件
3. 重编译

此项目借助 **Sisulizer** 直接支持CHM文档的特性进行操作, 个人觉得这个方法更Nice, 因为我想没有哪个本地化程序是无限制提供免费机器翻译的, 并且也不可能达到 **10万条句子**/**10s** 的速度.

- **Sisulizer** 本身是支持 **机器翻译** 的, 可能由于盗版问题严重, 已全面停用了这一功能.

- **Sisulizer** 只支持旧版 **Excel** 格式的 **xls** 文件, 而 **xls** 工作表最多只支持 **65536条数据**, 当导出句子大于这一数量时, 会丢失数据, 所以建议导出统一使用 **XLIFF** 选项导出为 **xlf** 文件, **dcots** 导出时会自动分量 **xls** 文件导出.
- **Sisulizer** 只支持旧版 **Excel** 格式的 **xls** 文件, 而 **xls** 工作表最多只支持 **65536条数据**, 当导出句子大于这一数量时, 会丢失数据, 所以建议导出统一使用 **
XLIFF** 选项导出为 **xlf** 文件, **dcots** 导出时会自动分量 **xls** 文件导出.

- 软件本地化工具: 都好久没更新了, 三年吧

1. [Sisulizer](https://www.sisulizer.com/): 使用简单, 功能强大, 我比较喜欢, 最新版是2018发布的 **374**
1. [Sisulizer](https://www.sisulizer.com/): 使用简单, 功能强大, 我比较喜欢, 最新版是2018发布的 **374**

[(2018版, 似乎也是最新版)支持的文件类型](images/image-20210626142536447.png)
[(2018版, 似乎也是最新版)支持的文件类型](images/image-20210626142536447.png)

2. [SDL Passolo](https://www.trados.com/products/passolo/): 这个比较出名, 不过用得很少, 最新版也是2018出的
2. [SDL Passolo](https://www.trados.com/products/passolo/): 这个比较出名, 不过用得很少, 最新版也是2018出的

[(2018版, 似乎是最新版)支持的所有文件类型](images/image-20210626142113761.png)
[(2018版, 似乎是最新版)支持的所有文件类型](images/image-20210626142113761.png)

3. Radialix : 这个也用得很少, 没前面两个出名
3. Radialix : 这个也用得很少, 没前面两个出名

- 文件本地化工具:

1. [SDL Trados Studio](https://www.trados.com/products/trados-studio/): 和 **SDL Passolo** 同家, 目前最厉害的文件本地化工具吧
1. [SDL Trados Studio](https://www.trados.com/products/trados-studio/): 和 **SDL Passolo** 同家, 目前最厉害的文件本地化工具吧

[(2021版)支持的所有文件类型](images/image-20210626141828377.png)
[(2021版)支持的所有文件类型](images/image-20210626141828377.png)

> 2021年07月08日22时14分53秒
10 changes: 5 additions & 5 deletions docts/Doc.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,10 +30,9 @@ def parse_xlf(xlf_path: str) -> List[str]:
return words


def write_xlf(xlf_path: str, origins: List[str], trans: List[str] = None, step=60000):
def write_xlf(xlf_path: str, origins: List[str], client: Translate, trans: List[str] = None):
# 翻译
if trans is None:
client = Translate()
trans = client.translate(origins)
if isinstance(trans, Null):
print(trans.msg)
Expand Down Expand Up @@ -65,11 +64,12 @@ def write_xlf(xlf_path: str, origins: List[str], trans: List[str] = None, step=6
class Doc:
"""..."""

def __init__(self, xlf_path: str):
def __init__(self, xlf_path: str, client: Translate):
"""..."""
self.xlf_path = xlf_path
self.words = parse_xlf(xlf_path)
self.ignores = []
self.client = client

def add_filter(self, _filter: Callable[[str], bool]):
"""
Expand Down Expand Up @@ -158,11 +158,11 @@ def reset(self):
def save_words(self):
"""..."""
xlf_path = self.xlf_path[:-4] + '_words.xlf'
write_xlf(xlf_path, self.words)
write_xlf(xlf_path, self.words, self.client)
return xlf_path

def save_ignores(self):
"""..."""
xlf_path = self.xlf_path[:-4] + '_ignores.xlf'
write_xlf(xlf_path, self.ignores, self.ignores)
write_xlf(xlf_path, self.ignores, self.client, self.ignores)
return xlf_path
2 changes: 1 addition & 1 deletion docts/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

__description__ = 'document translate, read & translate & write'
__url__ = 'https://github.com/foyoux/docts'
__version__ = '0.0.1'
__version__ = '0.1.0'
__author__ = 'foyou'
__author_email__ = 'yimi.0822@qq.com'
__license__ = 'GPL-3.0'
Expand Down
1 change: 0 additions & 1 deletion setup.cfg
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,6 @@ packages = find:
python_requires = >=3.6.*
install_requires =
pygtrans
pxy
[options.packages.find]
where = .
;exclude =
Expand Down

0 comments on commit faa1602

Please sign in to comment.