
Last Epoch の日本語化メモ
2024/07/10 Last Epoch Ver1.1 公式で日本語対応しました
日本語対応日本語対応が計画されていたり、 (Ver1.1で追加予定と伝聞で、確認を取ってませんでした。Ver1.1での対応は計画に入ってないみたいです、残念) 自動翻訳など他にも方法があるので不要かと思いましたが記事は残しておきます
ゲームバージョン 1.0
英語のテキストを翻訳し、中国語のフォントを置換し利用します
これはメモです。日本語化パッチはありません
日本語化は自己責任でやってください
おおまかな流れ
1. Bundleファイル内のテキストを翻訳
Last Epochのテキストは以下にあります
> Last Epoch\Last Epoch_Data\StreamingAssets\aa\StandaloneWindows64\
localization-string-tables-english(en)_assets_all.bundle が目的のファイル
バックアップを取っておきましょう、あとで使います

1.1 Bundleファイルを展開
展開には UABEAvalonia を使用します
メニューから [File] ▶ [Open]
展開する場所を聞かれます。今回は [Memory] を選びます

展開できました。次に [info] をクリック。別窓が開きます。
この中のファイルが翻訳するテキストです。

Export しましょう。全てのファイルを選択し [Export Dump] をクリック
保存する場所を聞かれるので、適当にフォルダを作ってそこに入れます
ファイル形式は "UABE text dump" を選択します

エクスポートしたテキストファイルにある
m_Localized のフィールド値が翻訳する対象です

そのままだととても作業しづらいので適当に整形します
自分は Pythonスクリプト を使用しています

スクリプトについてはまたやる気があったら書きます書きました
https://note.com/rako_suke/n/nb086142ffac0
1.2 Bundleファイルに再圧縮
翻訳が終わったらもう一度 Bundle ファイルに戻します
再圧縮にも UABEAvalonia を使用します
展開したときと同じく、メニューから [File] ▶ [Open]
[Memory] に展開したら、[Info] をクリック
今回はUI_enを戻してみます
置き換える UI_en を選択し [Import Dump] をクリックし
翻訳したテキストファイルを選択します

保存しましょう。いったん Info Window は閉じます
ポップアップが出ますが、適当に[Yes] [OK] と押してください
メニューから [File] ▶ [Save as…] ファイル名をつけて保存します
適当に "翻訳済み.bundle" とつけました
次に圧縮します
メニューから [File] ▶ [Open] "翻訳済み.bundle"を開きなおします
そして メニューから [File] ▶ [Compress] をクリック
またファイル名をつけます。”圧縮済み.bundle”とつけました
圧縮形式は LZ4 を選んでください

ほぼ完成ですが、このままだとCRCエラーがでるので修正します
Unity Asset Bundle CRC Spoofing を使用します
Original Bundle File は、バックアップしておいた
"localization-string-tables-english(en)_assets_all.bundle"を選び
Modifiled Bundle File は、編集して圧縮した
"圧縮済み.bundle" を選びます

[Calculate CRCs] をクリック [Save/Patch] をクリックして保存します
ファイル名を整えて、元の場所にファイルを戻したら終わりです
ゲームが無事起動するか確認してください

起動しましたか?おめでとう!でもお豆腐(□□□)がいっぱいです……
そう、日本語のフォントがないのです
2. 日本語フォントを作成
別の記事にまとめました
Unityをインストールしたくない人用に NotoSansJP-Regular で作った
フォントアセットです
3. ゲーム内のフォントを置き換える
3.1 LastEpoch からフォントを探す
Last Epochのフォントアセットは以下のファイルにあります
> Last Epoch\Last Epoch_Data\resources.assets
念のため、バックアップをとっておきましょう
UABEAvalonia を使用します
メニューから [File] ▶ [Open] "resources.assets" を開きます
置換するファイルは "NotoSansSC-Medium SDF (Limited)" および
"NotoSansSC-Medium SDF (Full Set)" です
中国語フォントは (Limited) と (Full Set) 2つありますが、どう使われているのかわからないので、両方とも置換します
どこにあるか探します
Ctrl+F で検索窓を開き "NotoSansSC-Medium SDF (Limited)" を検索


ありました、[Export Dump] してわかりやすい場所に保存しましょう
3.2 エクスポートしたファイルを整える
工程2で抽出した フォントアセット を
ゲームの "NotoSansSC-Medium SDF (Limited)-resources.assets-******.txt" と揃えます
今回は NotoSansJP-Regular SDF (Limited).txt を修正してみます
m_PathID
m_Name
hashCode
m_SourceFontFileGUID
m_FamilyName
sourceFontFileGUID
これらのフィールド値を同じにします

1 UInt8 m_IsMultiAtlasTexturesEnabled = 0
1 UInt8 m_ClearDynamicDataOnBuild = 0
という行があったら行ごと削除します
保存したら、おわり
NotoSansSC-Medium SDF (Full Set) 用にも同じように修正します
3.3 ゲームへインポート
UABEAvalonia を使用します
メニューから [File] ▶ [Open] "resources.assets" を開きます
"NotoSansSC-Medium SDF (Limited)" を選び [Import Dump]
先程修正した "NotoSansJP-Regular SDF (Limited).txt" を選択
次にテクスチャを置き換えます
"NotoSansSC-Medium SDF (Limited) Atlas" を選び [Plugins] をクリック
[Edit texture] を選び [OK] をクリック
いろいろ項目がありますが、全部無視して [Load] をクリック
工程2で作成した "NotoSansJP-Regular SDF Atlas.png" を選び [Save]
さいごに "resources.assets" も保存
メニューから [File] ▶ [Save]

ゲームを起動してみましょう

4. おわり
これでともかく日本語に翻訳し、表示できる環境が整いました。Unity はツールも資料も揃っていて非常に助かりました。私は高校時代いつも英語が赤点で、翻訳にまったく自信がありません。なので翻訳パッチを公開する予定はありません。また、繰り返しになりますが、日本語化は自己責任で行ってください。それではまたトラベラー!
4.1 よくあった失敗
▶ ゲームが起動すらしない
▷ ほとんどの場合がインポートする txt の修正ミス。少し間違えるだけでまったく起動しなくなります。一度オリジナルの txt をインポートしなおして起動するか確認しましょう。バージョンアップのたびにする作業なので、スクリプトで自動処理したほうがいいかも
1 UInt8 m_IsMultiAtlasTexturesEnabled = 0
1 UInt8 m_ClearDynamicDataOnBuild = 0
▶ 翻訳したテキストが反映されない
▷ Bundleファイルは再圧縮する過程でいくつかできます。間違えたファイルを選んでいるかも。ファイル名を使い分けてわかりやすくしましょう