SakuraTranslator

介绍

这是一个基于XUnity.AutoTranslator和Sakura模型的Unity游戏本地翻译器,能够提供高质量离线日文翻译
建议使用Galtransl-v2.6翻译模型,当前支持版本为Sakura v0.9/v0.10/v1.0,GalTrans2.6

TODO

  • 添加历史上文(搁置,难以将对话文本与ui文本区分,需要更好的规则)
  • 添加退化检测
  • 重新整理对不同模型的支持

详细部署流程

如果你不了解autotraslator,请从头阅读部署教程:详见本仓库wiki

快速开始

启动Sakura服务

此处以本地部署为例
确保Sakura服务器成功启动并监听http://127.0.0.1:8080 (端口根据你的启动方式而定,但要配置文件与之保持一致)

修改配置文件

安装SakuraTranslator

Releases 下载SakuraTranslate.dll放置在Translators文件夹内

  • 如果你使用ReiPatcher,你应该放在{游戏目录}\{游戏名}_Data\Managed\Translators
  • 如果你使用BepInEx,你应该放在{游戏目录}\BepInEx\plugins\XUnity.AutoTranslator\Translators

配置SakuraTranslator

启动一次游戏,这时应当会自动生成配置文件
修改AutoTranslator的配置文件

  • 如果你使用ReiPatcher,配置文件应该在{游戏目录}\AutoTranslator\Config.ini
  • 如果你使用BepInEx,配置文件应该在{游戏目录}\BepInEx\config\AutoTranslatorConfig.ini

首先修改配置文件前两个字段为

[Service]
Endpoint=SakuraTranslate
FallbackEndpoint=

[General]
Language=zh
FromLanguage=ja

如果你在使用中出现了缺字、方块字等情况,请指定外部字体:

[Behaviour]
OverrideFont= ##填写你系统中已安装的字体名
OverrideFontTextMeshPro= arialuni_sdf_u2018 ##或arialuni_sdf_u2019

其中arialuni_sdf_u201x可以从字体文件获取,请解压后直接放置在游戏根目录

完整配置示例

[Sakura]
Endpoint=http://127.0.0.1:8080/v1/chat/completions
ModelName=Sakura
ModelVersion=1.0
MaxTokensMode=Dynamic
StaticMaxTokens=512
DynamicMaxTokensMultiplier=1.5
DictMode=MatchOriginalText
Dict={"想太":["想太","男主人公"],"ダイヤ":["戴亚","女"]}
FixDegeneration=True
MaxConcurrency=1
Debug=False

支持的模型及对应关系

对应参数为ModelNameModelVersion,对应关系如下表,其中*表示没有匹配时的默认值

ModelName ModelVersion TranslationModel
Sakura 0.9 Sakura 0.9
Sakura 0.10 Sakura 0.10
Sakura 1.0 Sakura 1.0
Sakura * Sakura 1.0 (默认)
GalTransl 2.6 GalTransl 2.6
GalTransl * GalTransl 2.6 (默认)
* * Sakura 1.0 (默认)

模型默认值为Sakura 1.0
需要将Endpoint设置为chat completions api(例:http://127.0.0.1:8080/v1/chat/completions

MaxTokens模式及退化检测

  • MaxTokensMode
    • Static(默认):使用StaticMaxTokens的值作为发送给llama.cpp的max_tokens
    • Dynamic:使用原文的字符数乘以DynamicMaxTokensMultiplier向上取整作为发送给llama.cpp的max_tokens,最小max_tokens10
    • 设置为Dynamic有助于在模型退化时减少检测时间
  • StaticMaxTokens:静态MaxTokens值,默认512
  • DynamicMaxTokensMultiplier:动态MaxTokens乘以原文字符数的倍数,默认1.5
  • FixDegeneration
    • False(默认):关闭退化检测功能
    • True:开启退化检测功能,当模型生成的token数等于传递给llama.cpp的max_tokens时,将frequency_penalty增加至0.2重新生成,若仍然失败则使用最后获取的结果

字典

字典配置项

  • DictMode
    • None(默认):关闭字典功能(注:Sakura 0.9不支持字典,启用字典功能时也不会传递字典)
    • Full:传递整个字典
    • MatchOriginalText:传递当前翻译句子包含的字典部分

字典配置(Dict)

  • Dict默认为空字符串,必须为空或合法的Json格式,解析失败将会视为空
  • 字典格式{"src":["dst","info"]},发给sakura的字典为src->dst #info
  • 其中info没有可以写成{"src":["dst"]}或者{"src":"dst"},此时发给sakura的字典为src->dst
  • 示例:{"たちばな":"橘","橘":["橘"],"あやの":["绫乃","女"],"綾乃":["绫乃","女"]}

并发设置

  • MaxConcurrency:同时发送的翻译请求数,默认为1
  • 单卡多线程总体翻译速度一般比单线程高,llama.cpp需要设置-np参数(一般认为Intel显卡除外,可使用llama-batched-bench测试)

启动游戏

完成所有配置后,请删除第一次启动时产生的翻译文件

  • 如果你使用ReiPatcher,翻译文件应该在`{游戏目录}\AutoTranslator\Translation
  • 如果你使用BepInEx,翻译文件应该在`{游戏目录}\BepInEx\Translation

现在你可以开始游戏了

image

image