前往
大廳
主題

XUnity.AutoTranslator本機端翻譯伺服器

blackfox | 2025-04-09 22:35:19 | 巴幣 0 | 人氣 209

XUnity.AutoTranslator是一個能針對Unity遊戲的文字、進行翻譯的工具,在該遊戲不提供玩家想要的語系時算是有用,它本身支援使用網路服務例如Google翻譯等,但是使用網路翻譯多少有些限制,例如不能短時間內查詢太多資料,這造成了工具本身在遇到有大量文章內容的遊戲時就沒什麼用。
和ChatGPT玩了一個下午,終於搞了個還算可用的本地端伺服器:
  • 針對簡體轉繁體:使用OpenCC來轉,這個速度快。不會針對用語做修正。
  • 其它如英文轉中文:使用LLM:Facebook NLLB-200-1.3B、這個有時轉得很怪,英文轉中文算是正常一些。老實說這個對短句子例如單字效果不太好,能用簡轉繁就用簡轉繁。日文轉中文更是不行。
  • Facebook NLLB-200-1.3B使用CPU模式,不使用CUDA,這樣子較慢、但是不同的PC皆能執行、相容性高,只是會吃CPU。要修改成CUDA、請自行改。不然就用virtualenv切環境
    • 翻譯速度較慢、建議AutoTranslator的ini可設定翻過就不再詢問。相關應該是 UseStaticTranslations / GenerateStaticSubstitutionTranslations 二個參數,請自行查詢。
我的伺服器指令碼位置放在:
請整個資料夾下載

如果只是單純簡轉繁,建議用後面的 Helsinki-NLP / helsinki_translate_server.py
只是這個script我有可能針對目前玩的遊戲做修改,如果輸出有問題 (例如一大堆換行),則要改程式碼或是留言也行

facebook/nllb-200

Facebook NLLB-200-1.3B / 600m的效果不是很好,就當個備案。而且文字換行部份也沒有處理得很好。
3.3B看來最OK,但是RAM使用量更大、回應更慢

CUDA模式下、VRAM用量:
facebook/nllb-200-distilled-600M:~2.5G (蒸餾版)
facebook/nllb-200-1.3B:~5.3G
facebook/nllb-200-distilled-1.3B:~5.3G (蒸餾版)
facebook/nllb-200-3.3B:~12.5G

步驟:
  1. 在該遊戲安裝XUnity.AutoTranslator (裝法請自行查詢):https://github.com/bbepis/XUnity.AutoTranslator
  2. 安裝python 3.11.9或是相容版本:https://www.python.org/downloads/windows/
  3. 執行pre_install.cmd:該指令碼會安裝python需要的library、LLM在CPU模式下跑。如果要變更為GPU,自行看pre_install.cmd內容。
  4. 設定XUnity.AutoTranslator的Config.ini,範本 Config.ini.sample 一樣在伺服器指令碼位置那。請記得設定檔是 Config.ini或是 AutoTranslatorConfig.ini
  5. 語系轉換目前只有:
    • en:英文
    • zh, zh-tw:繁體中文
    • zh-cn:簡體中文
    • ja:日文
  6. Config.ini設定好後,執行translate_server.py;第一次執行時會下載Facebook/NLLB-200-1.3B,這要先等它下載完、總共約5G多。
    • 如果使用CPU模式,簡轉繁用OpenCC很快,其它狀況下因使用LLM,會有點慢
    • 如果使用GPU模式會快很多,但是1.3B的模型會用掉~6.5G GPU VRAM
  7. 執行遊戲 (例如XXXX (Patch and Run))
  8. 等著看結果。

  • 範例:Knights of Honor II: Sovereign (本身有簡中、沒繁中)
遊戲語系設定:簡中
Config.ini設定:
[General]
Language=zh-tw
FromLanguage=zh-cn

輸出結果:

遊戲語系設定:英文
慢到炸;如果VRAM夠,可切到CUDA模式
Config.ini設定:
[General]
Language=zh-tw
FromLanguage=en



  • Elin (AutoTranslator裝時就有錯誤):
簡轉繁:沒調設定、轉完文章不會換行

設定
IgnoreWhitespaceInDialogue=True
IgnoreWhitespaceInNGUI=True


英翻中 (1.3B):
品質當然較差,也沒如ChatGPT好,畢竟是在本地端跑,不能和線上服務比。
使用CPU運算,跑起來是較慢、另外一開始的更新新聞要先翻譯,所以這畫面的翻譯要等好一陣子才開始。
如果GPU VRAM夠多,是可以切換到GPU模式,或是如果有二台電腦,那在另一台裝翻譯器應該也行。詳細請自行研究修改。

翻譯前:

翻譯後:

英翻中 (3.3B):
三個模型中最大的,其實應該用GPU跑,但是這個沒16G起不來,還是用CPU硬吃。結果就是很慢



  • SaGa Frontier Remaster
英轉中,結果不是很好
BepInEx x64-6.0.0-pre.2
XUnity.AutoTranslator-BepInEx-IL2CPP-5.4.5

[Service]
Endpoint=CustomTranslate
FallbackEndpoint=

[General]
Language=zh
FromLanguage=en

[Behaviour]
OverrideFont=Microsoft JhengHei
OverrideFontTextMeshPro=arialuni_sdf


另外有簡單版翻譯器frontend.html:
太長的文章不能翻,因為token最多似乎是512?


Helsinki-NLP
Server script: helsinki_translate_server.py
我發現Python的指令碼、還是要針對遊戲做調整,不過也因為伺服器跑在本地端,所以很容易客製化。
如果只做簡繁處理,建議使用此script。

AutoTranslator設定、請參考Config.ini.helsinki.sample:
[Service]
Endpoint=CustomTranslate
FallbackEndpoint=

[General]
Language=zh-tw
FromLanguage=zh-cn

[Custom]
EnableShortDelay=True
DisableSpamChecks=True


以Elin來說,它的設計就有點特別,有些地方用換行指令%0D%0A換行,有些是使用空白來換行 (例如人物對話) 。這造成在短句子、例如10字以內,如果用空白換行、排版會很難看,但是長句子不換行,整個就超出對話框。
這種狀況也只能客製伺服器來應對Elin的要求。不過相關版上的繁中包更快更直接就是了。
另外如果使用AutoTranslator中的換行設定會當機,因為AutoTranslator並不針對繁簡日文等做處理,有可能在Unicode中間就切掉,然後Elin就直接當掉。

GPU VRAM: 1.3G
目標:中日英轉換
優點:
  • 反應速度較快,CPU模式下反應也快
  • 每一個語言對都有自己獨立的 training corpus
  • 想加其它語言,如果不管程式看來美不美的話,很容易加

Elin:日翻中、一樣不OK

Elin: 英轉繁中


相關創作

更多創作