こんにちは、まとんです。
Modをいろいろ試していると、いつの間にか日本語表記が英語表記に戻っていることがよくあります。
新しく導入したModが英語なのは、まあ分かるんですが、バニラの名前くらいは一度翻訳したら後は気にせず遊びたいわけです。


ちなみにこのModは「Kurone Uthgerd Replacer」です。
そこで、Dynamic String Distributor(DSD)を使い、Modの出し入れに関係なくバニラの訳が失われないように対策してみようと思います。
用意するもの
Dynamic String Distributor(DSD)

今回の主役。ゲームロード時に動的に文字列を置き換えるすごいMod。
espを全てロードした後に置き換える特性上、DSD内での翻訳被りがない限りは必ず適用される。
「Option Files」にあるesp2dsdも必要です。

文字の置き換えはSky Patcherでもできますが、あちらはNPCやアイテムといった適用範囲に応じて細かくファイルを分ける必要があり、翻訳目的には向いていません。
Unofficial Skyrim Special Edition Patch – USSEP

翻訳のベースとなるesp。
私はUSSEP環境で遊んでいるので、実質これがバニラ環境です。
USSEPを使ってない人は、USSEPの部分をskyrim.esm等に読み替えて本記事をご覧いただければ、同じことができると思います。
サクラエディタ

フリーで使える超有名なテキストエディタ。今回は文字列置換に使います。
正規表現が使えるエディタならなんでもOK。
やり方解説
USSEPを翻訳する
まず、一度はファイルを翻訳する必要があります。
ダウンロードページにある翻訳ファイルを使わせていただき、翻訳しましょう。

以下のファイルをダウンロードし、xTranslatorで翻訳します。

xTranslatorの使い方がわからない人は、先にそちらの使い方をマスターしましょう。
こちらの方の記事が分かりやすいと思います。
翻訳前のファイルも必要になるので、取っておきましょう。
esp2dsd.exe を実行する
esp2dsd.exeを実行し、翻訳をDSD用のJSONファイルに変換します。
- DSDの「Optional files」から「esp2dsd」をダウンロードし、適当な場所に解凍します。
- 翻訳前と翻訳後のespファイルを入れるフォルダを作ります。
※フォルダはどこに作っても問題ありません。 - 作成したフォルダに、それぞれ翻訳前と後のUSSEPのespファイルを入れます。
翻訳前フォルダに翻訳前のespファイル、翻訳後のフォルダにxTranslatorで翻訳済みのespファイルを入れます。
※翻訳前ファイルはxTranslatorの翻訳時にバックアップが作られてると思いますので、それを放り込んで拡張子を「.esp」にリネームすればOKです。 - コマンドプロンプトからesp2dsd.exeを実行します。コマンドは以下の通りです。
cd (esp2dsd.exeの格納フォルダ)
esp2dsd (翻訳前フォルダ) (翻訳後フォルダ)
翻訳が完了すると、「Output」フォルダにjsonファイルが作成されます。


「Output」フォルダは、esp2dsd.exeと同じ場所に作成されます。
jsonファイルはそのままでは使えない
さて、esp2dsdが作ってくれたjsonファイルですが、実はこのままでは使えません。
DSDのルールに従ってファイルを配置してもレコードがないと怒られてしまいます。

どうもスカイリムではロードオーダーで最初に読み込まれたレコードとModを紐づけて管理しているようです。

例えばリディアは「unofficial skyrim special edition patch.esp の 000A2C8E」ではなく、どれだけ魔改造されてもゲーム上はあくまで「Skyrim.esm の 000A2C8E」のリディアとして存在します。
そのため、jsonファイルに書かれているフォームIDの記述を「000A2C8E|unofficial skyrim special edition patch.esp」から「000A2C8E|Skyrim.esm」に変更してあげる必要があります。
厄介なのは、一律「Skyrim.esm」に直せばよいわけではなく、そのレコードがロードオーダー上初登場するプラグイン名にする必要があることです。

例えばドーンガードで初登場するセラーナであれば、「02002B6C|Dawnguard.esm」に変換する必要があります。
この変換は単純な置換処理では難しく、手作業で行うには量が多すぎます。
そこで、正規表現置換を使って一気に置き換える方法を取ります。

正規表現とは文字を検索するための照合パターンで、前方一致や部分一致では対応できない複雑な文字列検索を実現します。
例えば「あ.*お」という照合パターンは、「”あ”から始まり”お”で終わる(間は何文字あってもOK)」というもので、「あいうえお」や「あさがお」といった文字にマッチします。
文字列置換
それでは、実際に置換作業を行います。
ロードオーダー(フォームIDの先頭2桁)が「00」であれば、「Skyrim.esm」、「01」なら「Update.esm」というように変換をしていきます。
- jsonをサクラエディタで開き、メニューから検索→置換を選びます。
- 正規表現にチェックを入れます。
- 次の通り設定します。
置換前「(\"form_id\": \")00(......)|unofficial skyrim special edition patch.esp\",」
置換後「$1$2|Skyrim.esm\",」 - 「すべて置換」をクリックします。
これでレコードの先頭「00」から始まるレコードは、「Skyrim.esm」に変換されました。
同じ要領で他のレコードも置換します。
参考までに、私の環境(1.6.1170 AEコンテンツは無料版のみ)での置換パターンを載せておきます。
置換パターン全文(展開してご欄ください)
置換前 | 置換後 |
---|---|
(\"form_id\": \")00(......)\|unofficial skyrim special edition patch.esp\", | $1$2\|Skyrim.esm\", |
(\"form_id\": \")01(......)\|unofficial skyrim special edition patch.esp\", | $1$2\|Update.esm\", |
(\"form_id\": \")02(......)\|unofficial skyrim special edition patch.esp\", | $1$2\|Dawnguard.esm\", |
(\"form_id\": \")03(......)\|unofficial skyrim special edition patch.esp\", | $1$2\|HearthFires.esm\", |
(\"form_id\": \")04(......)\|unofficial skyrim special edition patch.esp\", | $1$2\|Dragonborn.esm\", |
(\"form_id\": \")05(......)\|unofficial skyrim special edition patch.esp\", | $1$2\|ccBGSSSE001-Fish.esm\", |
(\"form_id\": \")06000(...)\|unofficial skyrim special edition patch.esp\", | $1$2\|ccQDRSSE001-SurvivalMode.esl\", |
(\"form_id\": \")07000(...)\|unofficial skyrim special edition patch.esp\", | $1$2\|ccBGSSSE037-Curios.esl\", |
(\"form_id\": \")08(......)\|unofficial skyrim special edition patch.esp\", | $1$2\|ccBGSSSE025-AdvDSGS.esm\", |
ロードオーダー番号は導入済みのコンテンツや環境によって異なる可能性あるので、適宜調整してください。
CCコンテンツにはeslフラグ付きのものがあるので、その場合は上2桁ではなく上5桁を除外するように置換を行います。

eslフラグ付きのプラグインは、上5桁がロードオーダーとして機能します。
jsonファイルを配置する
jsonファイルが完成したら、DSDのルールに従い配置します。
MO2であれば、空Modを1つ作り、その中に以下の通りフォルダを作成します。
SKSE\Plugins\DynamicStringDistributor\unofficial skyrim special edition patch.esp

フォルダ名は対象のプラグイン名と一致している必要があります。
この中に先ほど作成したjsonファイルを置きます。

ファイル名はなんでも良いのですが、フォルダと合わせておくと管理しやすいと思います。
これで準備完了です。
動作確認
ゲームを起動して、確認してみましょう。

無事反映されました!

うまくいかなかった場合はログを確認しましょう。
MO2の場合、「マイゲームフォルダを開く」からSKSE\DynamicStringDistributor.logを確認します。
Syntax Errorが出ている場合は、jsonファイルが壊れています。カンマやダブルクォーテーションの付け忘れがないか、よく確認してみましょう。
まとめ
いかがでしたでしょうか?
正規表現に慣れてないとちょっととっつきにくく感じると思いますが、一度この作業をやっておけば少なくともバニラの名前には悩まされることはなくなるのでおすすめです。
特にリプレーサーや景観系をストレスフリーでいじれるようになるので、とても快適です!
是非みなさんもトライしてみてください。それでは~。
コメント