# ExOpencc
ExOpencc 是基于 OpenCC 的 Elixir NIF 封装,提供简繁中文互转功能。
## 安装
在 `mix.exs` 中添加依赖:
```elixir
def deps do
[
{:ex_opencc, "~> 0.1.0"}
]
end
```
## 编译
首先获取 OpenCC 源代码:
```bash
git submodule update --init --recursive
```
然后编译:
```bash
make ex_opencc
# 或者
mix compile
```
## 基本用法
### 创建转换器
```elixir
# 默认使用 "s2t.json"
{:ok, converter} = ExOpencc.new()
# 指定配置文件
{:ok, converter} = ExOpencc.new("s2t.json")
```
### 同步转换文本
```elixir
{:ok, converter} = ExOpencc.new("s2t.json")
{:ok, result} = ExOpencc.convert_sync(converter, "简体中文")
IO.puts(result) # => "簡體中文"
# 处理空字符串
{:ok, result} = ExOpencc.convert_sync(converter, "")
IO.puts(result) # => ""
```
### 简繁互转
```elixir
# 简体转繁体
{:ok, converter} = ExOpencc.new("s2t.json")
{:ok, result} = ExOpencc.convert_sync(converter, "简体中文")
IO.puts(result) # => "簡體中文"
# 繁体转简体
{:ok, converter} = ExOpencc.new("t2s.json")
{:ok, result} = ExOpencc.convert_sync(converter, "簡體中文")
IO.puts(result) # => "简体中文"
```
### 错误处理
```elixir
result = ExOpencc.convert_sync(:invalid_resource, "测试")
# result => {:error, reason}
```
### 批量转换示例
```elixir
test_cases = [
{"简体中文", "簡體中文"},
{"中华人民共和国", "中華人民共和國"},
{"北京大学", "北京大學"},
{"软件工程", "軟件工程"}
]
{:ok, converter} = ExOpencc.new("s2t.json")
for {input, expected} <- test_cases do
{:ok, result} = ExOpencc.convert_sync(converter, input)
IO.puts("#{input} -> #{result}")
end
```
## 支持的配置
| 配置文件 | 转换方向 | 说明 |
|---------|---------|------|
| `s2t.json` | 简体 → 繁体 | 简体中文转换为繁体中文 |
| `t2s.json` | 繁体 → 简体 | 繁体中文转换为简体中文 |
| `s2tw.json` | 简体 → 台湾繁体 | 简体中文转换为台湾地区的繁体中文 |
| `tw2s.json` | 台湾繁体 → 简体 | 台湾地区的繁体中文转换为简体中文 |
| `s2hk.json` | 简体 → 香港繁体 | 简体中文转换为香港地区的繁体中文 |
| `hk2s.json` | 香港繁体 → 简体 | 香港地区的繁体中文转换为简体中文 |
| `s2twp.json` | 简体 → 台湾繁体(短语) | 简体中文转换为台湾地区的繁体中文,包含短语转换 |
| `tw2sp.json` | 台湾繁体(短语) → 简体 | 台湾地区的繁体中文转换为简体中文,包含短语转换 |
## API 文档
### ExOpencc.new/0, ExOpencc.new/1
创建新的 OpenCC 转换器。
**参数**
- `config` (可选) 配置文件名,默认 `"s2t.json"`
**返回值**
- `{:ok, converter}` 创建成功
- `{:error, reason}` 创建失败
### ExOpencc.convert_sync/2
使用给定的转换器同步转换文本。
**参数**
- `converter` 转换器实例
- `text` 要转换的文本
**返回值**
- `{:ok, converted}` 转换成功
- `{:error, reason}` 转换失败
## 许可证
项目基于 OpenCC