这是一个快速、肮脏的 OpenCC 的C#实现,可通过 NuGet for Unity 用于 Unity 项目。
考虑了性能,尽可能减少了GC,并尽可能提升了加载字典和转换文本的速度。
字典等较大的资源可以以非常细粒度的方式加载,以减少不必要的内存占用和Parse开销。
-
Dictionary类- 这个类用于表示一个简繁转换字典,其中可能包括单字,也可能包括词
- 调用
AddDictionaryContent将字典内容添加到字典中,传入的不是路径,而是词典文件的内容 - 调用
DeepClone以创建深拷贝,用于在一个基础字典上创建不同的字典分支
-
Converter类- 这个类用于执行实际的转换操作
- 将一组转换字典传入后,调用
Convert方法即可进行转换- 有一个暴露了
StringBuilder temp参数的版本,如果你有对象池,可使用这个版本来避免对StringBuilder的分配
- 有一个暴露了
- 一旦创建,不可以再修改
Dictionary的内容 - 这个对象的所有方法都是线程安全的
-
Config类- 如果你想以简单的方式使用,那么你可以直接使用该类里的预设
- 使用里面的
s2hk等预设,调用其CreateConverter方法直接创建一个Converter对象,而不需要手动配置字典- 创建的时候你需要传入一个
DictionaryLoader,它传入字典名称,你需要返回字典的内容(以字符串) - 传入
DictionaryLoader的设计是为了在Unity中应对复杂的资源加载方式
- 创建的时候你需要传入一个
- 该类创建的内容不会考虑缓存
- 比如你想同时创建
s2hk和s2twp,那么你使用该类会导致加载并解析解析STPhrases和STCharacters字典,这时候更好的办法是手动创建Converter
- 比如你想同时创建
string input = <input>;
string temp = "";
foreach (var 字典 in Converter.字典串)
{
while (input.Length > 0)
{
bool 成功 = 字典.最长匹配(
input,
out 匹配到的转换后的结果,
out 原文剩余部分);
if (成功)
{
input = 原文剩余部分;
temp += 匹配到的转换后的结果;
}
else
{
temp += input[0];
input = input.Substring(1);
}
}
input = temp;
}
return input;由于未实现字典反转功能,因此需要反转字典的以下转换模式无法使用:
hk2shk2tjp2ttw2stw2sptw2t
以简体中文为起点的转换规则全部可用。
本项目仅个人使用,不对商业项目负责。
本项目使用WTFPL许可证发布,你想拿它做什么就拿它做什么。