Skip to content

Seng-Jik/OpenCCSharp

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

OpenCCSharp

这是一个快速、肮脏的 OpenCC 的C#实现,可通过 NuGet for Unity 用于 Unity 项目。

考虑了性能,尽可能减少了GC,并尽可能提升了加载字典和转换文本的速度。

字典等较大的资源可以以非常细粒度的方式加载,以减少不必要的内存占用和Parse开销。

API

  • Dictionary

    • 这个类用于表示一个简繁转换字典,其中可能包括单字,也可能包括词
    • 调用AddDictionaryContent将字典内容添加到字典中,传入的不是路径,而是词典文件的内容
    • 调用DeepClone以创建深拷贝,用于在一个基础字典上创建不同的字典分支
  • Converter

    • 这个类用于执行实际的转换操作
    • 将一组转换字典传入后,调用Convert方法即可进行转换
      • 有一个暴露了StringBuilder temp参数的版本,如果你有对象池,可使用这个版本来避免对StringBuilder的分配
    • 一旦创建,不可以再修改Dictionary的内容
    • 这个对象的所有方法都是线程安全的
  • Config

    • 如果你想以简单的方式使用,那么你可以直接使用该类里的预设
    • 使用里面的s2hk等预设,调用其CreateConverter方法直接创建一个Converter对象,而不需要手动配置字典
      • 创建的时候你需要传入一个DictionaryLoader,它传入字典名称,你需要返回字典的内容(以字符串)
      • 传入DictionaryLoader的设计是为了在Unity中应对复杂的资源加载方式
    • 该类创建的内容不会考虑缓存
      • 比如你想同时创建s2hks2twp,那么你使用该类会导致加载并解析解析STPhrasesSTCharacters字典,这时候更好的办法是手动创建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;

与原版对比缺失的功能

由于未实现字典反转功能,因此需要反转字典的以下转换模式无法使用:

  • hk2s
  • hk2t
  • jp2t
  • tw2s
  • tw2sp
  • tw2t

以简体中文为起点的转换规则全部可用。

关于保证

本项目仅个人使用,不对商业项目负责。

本项目使用WTFPL许可证发布,你想拿它做什么就拿它做什么。

WTFPL

About

可用于Unity的简体繁体转换库。

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages