我在游戏聊天和TTS中遇到了阿拉伯文文本断裂的问题,所以我编写了一个小的C# / Unity库来解决这个问题 —— 并且解除它。

我在开发一个多人模式游戏聊天时遇到了这个问题。如果客户端或UI渲染器没有正确处理阿拉伯文的形状和方向,阿拉伯文可能会出现断裂、倒置或不可读。

通常的解决方案是将阿拉伯文文本“烘烤”成可视化呈现的符号,以便即使在没有阿拉伯文处理能力的渲染器中也能正确显示。这种方法在UI中有效,但会导致第二个问题:文本不再是干净的逻辑阿拉伯文。因此,TTS、搜索、监管日志和分析可能会读取或存储垃圾文本。

所以我编写了 arabic-rt

它做了什么:

  • fix() → 将阿拉伯文形状/方向处理好,以便在没有阿拉伯文处理能力的客户端中渲染正确
  • unfix() → 将烘烤的可视化文本转换回干净的逻辑阿拉伯文
  • 包括一个 GAME 预设用于词语-词语聊天读者
  • C# / Unity + Python 端口
  • 没有依赖项
  • MPL-2.0 许可证

C# 和 Python 端口设计成产生字节-字节相同的输出,因此在Unity中烘烤的文本可以正确在Python中回流。

演示:
https://huggingface.co/spaces/balswyan/arabic-rt

C# / Unity:
https://www.nuget.org/packages/ArabicRt
https://github.com/balswyan/arabic-rt-dotnet

Python/源码:
https://pypi.org/project/arabic-rt/
https://github.com/balswyan/arabic-rt

我非常希望从Unity开发者那里收到反馈,尤其是那些曾经处理过阿拉伯文、RTL聊天、本地化、TTS或游戏中的监管/日志管道的人。