Skyrim Special Editionの日本語化方法

Skyrim Special Edition(以下、SkyrimSE)の日本語化手順の説明。
Skyrim向けの手順は[こちら](https://qiita.com/SkyLaptor/items/4358036b189bbdda3b73)
いわゆる**旧方式**の説明。Skyrimでは新方式だとCreationKitが起動できないため、おそらくSEでも同じだと思われる。
Mod製作者であればこちらを選択すべきだろう。
ついでにsseTranslatorのセットアップも同時に行うこととする。

## 事前準備
### SkyrimSE環境のバックアップとクリーニング

NexusModManagerを使用しているのであれば、すべてのMODを無効化する。
手動インストールの場合は手作業で必要なファイルをバックアップする。

SkyrimSEをアンインストールする。
![uninstall.jpg](https://qiita-image-store.s3.amazonaws.com/0/97774/00ff5a23-d0a7-c749-3878-2f8d16ebb535.jpeg)

以下のフォルダ内にある残留ファイルを消す。必要に応じてバックアップもしておくこと。

* C:\Users\\{ユーザー名}\Documents\My Games\Skyrim Special Edition
* C:\Users\\{ユーザー名}\AppData\Local\Skyrim Special Edition
* SkyrimSEインストール場所 (例: G:\SteamLibrary\steamapps\common\Skyrim Special Edition)

### ツールのインストール
#### sseTranslator
以下のリンクからダウンロードし、適当な場所に解凍する。
https://www.nexusmods.com/skyrimspecialedition/mods/134/

#### BSABrowser
以下のリンクからダウンロードし、適当な場所に解凍する。
https://www.nexusmods.com/skyrimspecialedition/mods/1756/



## 日本語化作業
### 日本語版SkyrimSEデータの取得
Steam上のゲームプロパティを開き、`日本語 (Japanese)`に設定してインストールを行う。
![set_lang-ja.jpg](https://qiita-image-store.s3.amazonaws.com/0/97774/64f487b0-c868-7d54-8889-4c74f141d2d5.jpeg)

インストール後、念のためファイルの整合性チェックを行うこと。
![check_consist.jpg](https://qiita-image-store.s3.amazonaws.com/0/97774/f6c2fdc1-12c1-cd42-5e49-3587ca5bd5f0.jpeg)

Skyrimインストールフォルダを開き、中身を丸ごと適当な場所にコピーする。圧縮して保存するとなお良い。

コピーが完了したら、日本語版SkyrimSEはアンインストールする。
インストールフォルダに残留ファイルが残った場合には、それもきれいに削除しておく。

### 英語版SkyrimSEデータの取得
Steam上のゲームプロパティを開き、`English (英語)`に設定してインストールを行う。
![set_lang-en.jpg](https://qiita-image-store.s3.amazonaws.com/0/97774/aad3aea4-87d4-bbee-d9f3-5e876ffe6ddf.jpeg)


インストール後、念のためファイルの整合性チェックを行うこと。
![check_consist.jpg](https://qiita-image-store.s3.amazonaws.com/0/97774/f6c2fdc1-12c1-cd42-5e49-3587ca5bd5f0.jpeg)

Skyrimインストールフォルダを開き、中身を丸ごと適当な場所にコピーする。圧縮して保存するとなお良い。


### 言語関連データを取り出す
コピーしておいた日本語版と英語版から、言語に関連するファイルを抽出する。

#### 日本語版
BSABrowserを起動し、コピーしておいた**日本語版SkyrimSEデータ**の`Data\Skyrim - Patch.bsa`を開く。

![browse_bsa.jpg](https://qiita-image-store.s3.amazonaws.com/0/97774/5dbccb9d-ed1a-4b57-a639-c6cb068a610e.jpeg)


BSA内のファイル一覧が表示されるので、以下のファイルを選択して右クリック→Extract Foldersで適当な場所に展開する。
この後英語版も作業するので、`ja-144`のようなフォルダを作成してその中に展開することをおすすめする。

```:日本語版抽出対象のファイル
interface\book.swf
interface\fonts_en.swf
interface\translate_japanese.txt
```

![extract_file.jpg](https://qiita-image-store.s3.amazonaws.com/0/97774/dfbb677e-9ff8-7250-7517-d6453c37ba8a.jpeg)


なお`interface\fonts_en.swf`は英語版とファイル名が重複してややこしいので、`interface\fonts_ja.swf`にリネームしておくこととする。


#### 英語版
BSABrowserを起動し、コピーしておいた**英語版SkyrimSEデータ**の`Data\Skyrim - Patch.bsa`を開く。

BSA内のファイル一覧が表示されるので、以下のファイルを選択して右クリック→Extract Foldersで適当な場所に展開する。
日本語版の時と同様に、`en-1516`のようなフォルダを作成してその中に展開することをおすすめする。

```:英語版抽出対象のファイル
interface\translate_english.txt
strings\dawnguard_english.dlstrings
strings\dawnguard_english.ilstrings
strings\dawnguard_english.strings
strings\dawnguard_japanese.dlstrings
strings\dawnguard_japanese.ilstrings
strings\dawnguard_japanese.strings
strings\dragonborn_english.dlstrings
strings\dragonborn_english.ilstrings
strings\dragonborn_english.strings
strings\dragonborn_japanese.dlstrings
strings\dragonborn_japanese.ilstrings
strings\dragonborn_japanese.strings
strings\hearthfires_english.dlstrings
strings\hearthfires_english.ilstrings
strings\hearthfires_english.strings
strings\hearthfires_japanese.dlstrings
strings\hearthfires_japanese.ilstrings
strings\hearthfires_japanese.strings
strings\skyrim_english.dlstrings
strings\skyrim_english.ilstrings
strings\skyrim_english.strings
strings\skyrim_japanese.dlstrings
strings\skyrim_japanese.ilstrings
strings\skyrim_japanese.strings
strings\update_english.dlstrings
strings\update_english.ilstrings
strings\update_english.strings
strings\update_japanese.dlstrings
strings\update_japanese.ilstrings
strings\update_japanese.strings
```

### sseTranslatorのセットアップ
英語版から取り出した`strings`フォルダを、フォルダごとsseTranslatorのインストールフォルダ内にコピーする。

`xTranslator.exe`を起動する。初回起動時にどのゲーム向けで起動するか聞かれるので`SkyrimSE`を選択する。

![choose_game.jpg](https://qiita-image-store.s3.amazonaws.com/0/97774/396ffc4b-c903-c975-3fec-2be884715e25.jpeg)


起動時にオプション設定が開くので設定を行う。

* Directionaries and languages
    * Destination Language : japanese
    * .\data folder : SkyrimSEインストールフォルダ\Data
    * .\strings folder : sseTranslatorインストールフォルダ\strings

![setting1_option.jpg](https://qiita-image-store.s3.amazonaws.com/0/97774/648b097f-6395-0116-2441-7b97a5b258fa.jpeg)


* Options...
    * Intarface : Japanese

![setting2_option.jpg](https://qiita-image-store.s3.amazonaws.com/0/97774/f063ddf5-f329-f953-676e-e2c21268a51e.jpeg)


インターフェース言語をJapaneseに設定してOKを押すと、自動でツールが再起動して日本語表示になる。

自動翻訳を有効にするため、辞書を作成する。
メニューバーの "オプション" から、"言語と辞書" を選択し、以下のように設定して辞書作成を実行する。

* 高度な辞書 (.esm + .strings)
* .\stringsフォルダのstringファイルのみ使用する(bsa/ba2を無視)

![create_dict.jpg](https://qiita-image-store.s3.amazonaws.com/0/97774/b0016e32-956f-f1c3-9fd8-bb56f21c2948.jpeg)

少し経ったのち辞書が作成される。これで自動翻訳が行われるようになる。
![created_dict.jpg](https://qiita-image-store.s3.amazonaws.com/0/97774/74e044f1-f403-1813-2736-329cde2b7133.jpeg)


### 翻訳済みデータフォルダの作成
似たファイル名の操作が多いため、誤操作防止に翻訳済みデータを置くフォルダを作成しておく。
フォルダ構造は以下のようにしておくと、丸ごと圧縮してNexusModManagerで導入するといった運用もできるのでおすすめする。

* 翻訳済みデータフォルダ
    * interface
    * strings


### UI向け言語ファイルの翻訳
UI向けの言語ファイルはinterface\translate_言語名.txtといったファイルを指す。
英語版と日本語版では内容に差異があるため、sseTranslatorを使って翻訳する。

sseTranslatorを起動し、メニューバーの "ファイル" から "MCM/Translateテキストを開く" から**英語版のtranslate_english.txt**を選択する。

![load_translate.jpg](https://qiita-image-store.s3.amazonaws.com/0/97774/1b61b5e4-1b71-6e81-2500-bb044defa1c0.jpeg)


読み込みが完了したら、メニューバーの "ツール" から "MCM/Translateテキストを開く(比較)" を選択し、**日本語版のtranslate_japanese.txt**を選択する。
比較オプションは "確認済みの文字列を除く" のままで良い。

![compare_translatetranslate.jpg](https://qiita-image-store.s3.amazonaws.com/0/97774/dae37c7e-5dae-43ad-50b1-74450f979db5.jpeg)

文字が比較され、日本語版translatorファイルにある文言に関しては翻訳(赤以外の表示)され、翻訳できなかったものに関しては赤で示される。赤の部分は任意に翻訳すると良い。

![compared_translatetranslate.jpg](https://qiita-image-store.s3.amazonaws.com/0/97774/ad2afde5-e42b-3344-e9d7-3dc2bb6d37e9.jpeg)

が、注意点として以下の部分は翻訳してはならない(後述)。
自動翻訳で翻訳されてしまう場合もあるため、右クリックから "訳を破棄" で翻訳を解除する。

```txt:翻訳してはいけない箇所※大文字小文字に注意
$Apparel
$Back
$BUY
$BUY NOW
$CANCEL
$creation credits
$Creation Credits Purchased
$Creation Purchase Failed
$Creatures
$Details
$DETAILS
$Download
$DOWNLOAD
$DOWNLOADING...
$Featured
$GALLERY
$INSTALLED
$OFF
$Owned
$Purchase Creation
$Purchase Credits
$Purchased
$UPDATE
$Weapons
```

UIに不具合が見られた場合は都度修正すること。

問題がなければ、メニューバーの "ファイル" から "MCM/Translateテキストを別名で出力" を選択し、`翻訳データ置き場\interface`フォルダを指定して保存する。

言語更新を続行して良いかのメッセージは "はい" を選択する。誤操作を気にしないのであれば、"再表示しない" にチェックをいれて、次回から聞かれないようしても良い。
![updatelang_confirm.jpg](https://qiita-image-store.s3.amazonaws.com/0/97774/1bc09ba7-9a1d-993f-2975-8cc88e396d3f.jpeg)

正常に保存されれば、保存先に`translate_japanese.txt`というファイル名でファイルが作成される。
このファイルはファイル名を`translate_english.txt`に変更しておくこと。


### ゲーム内テキスト向け言語ファイルの翻訳
ゲーム内テキスト向けの言語ファイルはstrings\translate_言語名.stringsといったファイルを指す。
英語版と日本語版では内容に差異があるため、sseTranslatorを使って翻訳する。

sseTranslatorを起動し、メニューバーの "ファイル" から "Stringファイルを開く" から**skyrim_english.strings**を選択する。

![load_strings.jpg](https://qiita-image-store.s3.amazonaws.com/0/97774/b83a809d-1294-38a6-c7da-353b4bd78cd0.jpeg)


読み込みが完了したら、メニューバーの "ツール" から "Stringsファイルの翻訳を読み込む" を選択し、**skyrim_japanese.strings**を選択する。
比較オプションは "確認済みの文字列を除く" のままで良い。
![load_translatestrings.jpg](https://qiita-image-store.s3.amazonaws.com/0/97774/ad08d5a4-cbe8-673b-2a5d-e719cb91a88d.jpeg)



文字が比較され、日本語版translatorファイルにある文言に関しては翻訳(赤以外の表示)され、翻訳できなかったものに関しては赤で示される。赤の部分は任意に翻訳すると良い。

![2017-10-08_15h06_43.jpg](https://qiita-image-store.s3.amazonaws.com/0/97774/b0ba941c-5eb1-4b63-5564-14862edbbde0.jpeg)

問題がなければ、メニューバーの "ファイル" から "STRINGSテキストを別名で出力" を選択し、`翻訳データ置き場\strings`フォルダを指定して保存する。

正常に保存されれば、保存先に`skyrim_japanese.strings, skyrim_japanese.ilstrings, skyrim_japanese.dlstrings`というファイル名で3ファイルが作成される。

他のStringsファイル4種類(update, dawnguard, hearthfires, dragonborn)も同様に実施し、合計15個の翻訳済みstringsファイルを作成する。

ファイルを作成し終えたらファイル名をリネームするが、数が多いため間違う可能性がある。そこで翻訳済みStringsフォルダ内に以下の内容でバッチファイル(.bat)を作成して実行すると一括でリネームできる。

```bat:リネーム用バッチファイル
@echo off
setlocal
cd /d %~dp0

rem 元のファイルをバックアップ
mkdir original
copy dawnguard_english.dlstrings original\
copy dawnguard_english.ilstrings original\
copy dawnguard_english.strings original\
copy dragonborn_english.dlstrings original\
copy dragonborn_english.ilstrings original\
copy dragonborn_english.strings original\
copy hearthfires_english.dlstrings original\
copy hearthfires_english.ilstrings original\
copy hearthfires_english.strings original\
copy skyrim_english.dlstrings original\
copy skyrim_english.ilstrings original\
copy skyrim_english.strings original\
copy update_english.dlstrings original\
copy update_english.ilstrings original\
copy update_english.strings original\

rem 翻訳済みデータをリネーム
move /Y dawnguard_japanese.dlstrings dawnguard_english.dlstrings
move /Y dawnguard_japanese.ilstrings dawnguard_english.ilstrings
move /Y dawnguard_japanese.strings dawnguard_english.strings
move /Y dragonborn_japanese.dlstrings dragonborn_english.dlstrings
move /Y dragonborn_japanese.ilstrings dragonborn_english.ilstrings
move /Y dragonborn_japanese.strings dragonborn_english.strings
move /Y hearthfires_japanese.dlstrings hearthfires_english.dlstrings
move /Y hearthfires_japanese.ilstrings hearthfires_english.ilstrings
move /Y hearthfires_japanese.strings hearthfires_english.strings
move /Y skyrim_japanese.dlstrings skyrim_english.dlstrings
move /Y skyrim_japanese.ilstrings skyrim_english.ilstrings
move /Y skyrim_japanese.strings skyrim_english.strings
move /Y update_japanese.dlstrings update_english.dlstrings
move /Y update_japanese.ilstrings update_english.ilstrings
move /Y update_japanese.strings update_english.strings

pause
exit
```

リネーム後はバッチファイルを削除する。


### フォントファイル等のコピー
**日本語版抽出データのinterface\fonts_ja.swf, book.swf**と、**英語版抽出データのinterfaceフォルダにあるlevelupmenu.swf**を`翻訳データ置き場\interface`フォルダにコピーする。

### フォント設定ファイルの作成
以下の内容で`翻訳データ置き場\interface`フォルダに`fontconfig.txt`という名前でテキストファイルを作成する。**文字コードはUTF-8にすること！**
メモ帳はShift-JISになってしまうため、[サクラエディタ](http://sakura-editor.sourceforge.net/)や[SublimeText](https://www.sublimetext.com/)などのテキストエディタを使ってUTF-8で保存すること。

```txt:interface\fontconfig.txt
fontlib "Interface\fonts_en.swf"
fontlib "Interface\fonts_ja.swf"
map "$ConsoleFont" = "Skyrim_JP_EveryFont" Normal
map "$StartMenuFont" = "Skyrim_JP_EveryFont" Normal
map "$DialogueFont" = "Skyrim_JP_EveryFont" Normal
map "$EverywhereFont" = "Skyrim_JP_EveryFont" Normal
map "$EverywhereBoldFont" = "Skyrim_JP_EveryFont" Normal
map "$EverywhereMediumFont" = "Skyrim_JP_EveryFont" Normal
map "$DragonFont" = "Dragon_script" Normal
map "$SkyrimBooks" = "Skyrim_JP_BookFont" Normal
map "$HandwrittenFont" = "Skyrim_JP_HandWriteFont" Normal
map "$HandwrittenBold" = "Skyrim_JP_HandWriteFont" Normal
map "$FalmerFont" = "Falmer" Normal
map "$DwemerFont" = "Dwemer" Normal
map "$DaedricFont" = "Daedric" Normal
map "$MageScriptFont" = "Mage Script" Normal
map "$SkyrimSymbolsFont" = "SkyrimSymbols" Normal
map "$SkyrimBooks_UnreadableFont" = "SkyrimBooks_Unreadable" Normal
map "$CreditsFont" = "Futura Condensed" Normal
map "$CClub_Font" = "Eurostile LT Std" Roman
map "$CClub_Font_Bold" = "Eurostile LT Std" Demi
map "ControllerButtons" = "Controller  Buttons" Normal
map "ControllerButtonsInverted" = "Controller  Buttons inverted" Normal
validNameChars "ぁあぃいぅうぇえぉおかがきぎくぐけげこごさざしじすずせぜそぞただちぢっつづてでとどなにぬねのはばぱひびぴふぶぷへべぺほぼぽまみむめもゃやゅゆょよらりるれろゎわゐゑをんァアィイゥウェエォオカガキギクグケゲコゴサザシジスズセゼソゾタダチヂッツヅテデトドナニヌネノハバパヒビピフブプヘベペホボポマミムメモャヤュユョヨラリルレロヮワヰヱヲンヴヵヶ"
```

`validNameChars`は長いため割愛した。自身のキャラクター名に使いたい文字があれば、""の中に書き足すこと。


### 音声ファイルのコピー
コピーしておいた**日本語版SkyrimSEデータ**の`Data\Skyrim - Voices_ja0.bsa`を、`翻訳データ置き場`フォルダに`Skyrim - Voices_en0.bsa`としてコピーする。
※音声は英語でも良いという人であれば、この作業は必要ない。



### 翻訳ファイルの動作確認
以上で翻訳作業が完了した。最後にファイルを見直しする。

* 翻訳済みデータフォルダ
    * interface
        * book.swf
        * fontconfig.txt
        * fonts_ja.swf
        * translate_english.txt
    * strings
        * dawnguard_english.dlstrings
        * dawnguard_english.ilstrings
        * dawnguard_english.strings
        * dragonborn_english.dlstrings
        * dragonborn_english.ilstrings
        * dragonborn_english.strings
        * hearthfires_english.dlstrings
        * hearthfires_english.ilstrings
        * hearthfires_english.strings
        * skyrim_english.dlstrings
        * skyrim_english.ilstrings
        * skyrim_english.strings
        * update_english.dlstrings
        * update_english.ilstrings
        * update_english.strings
    * Skyrim - Voices_en0.bsa

どれ1つとして抜けなどが無いことを確認する。何か抜けていれば初めからきちんと見直しを行うこと。

問題がなさそうであれば、丸ごと圧縮してNexus Mod Managerで導入するか、`SkyrimSEインストールフォルダ\Data`内に丸ごとコピーする。

今後のことも考えると、Nexus Mod Managerで導入することをおすすめする。
例えば、`Translate Japanese v1.5.16.zip`みたいな名前で導入しておけば、なにかと捗ると思う。

SkyrimSEを起動し、日本語化されていることを確認する。

![mainmenu.jpg](https://qiita-image-store.s3.amazonaws.com/0/97774/a8c11894-b2ac-5521-c435-7a0617046fb7.jpeg)




## 備考
### なぜtranslate_english.txtを完全に翻訳してダメなのか
v1.5.3より新たに増えたCreation Clubという機能において、文字化けが発生するため。
fontconfig.txtをいじって日本語を使えるようにすればいいじゃないかと思うが、v1.5.16現在、fontconfig.txtのフォント指定をなぜか使っていない。
日本語に翻訳してしまうとCreationClub画面で□□□表示になってしまうため、化けるくらいなら翻訳しないほうがまだマシということである。Creation Clubで日本語を使いたければ、fonts_en.swfの中のCreationClub用フォントを日本語対応フォントに置き換えれば良いが、難易度が少し高いためここでは割愛する。
拙作の[フォントMOD](https://www.nexusmods.com/skyrimspecialedition/mods/12589)ではこの部分を修正して日本語を表示できるようにしているため、どうしてもCreationClubで日本語を表示したい人はそちらを利用されたし。

### 「へ スカイリム」を修正する
出入口に近づくと、"へ スカイリム" といった表示がされ、なんとも言えない気持ちになることがある。
これは英語版の名残りで "To 地名" が "へ 地名" と表示されることが原因であるが、「へ」の表示が必要なければ消してしまうのが手っ取り早いし競合も少なくて良いと思う。
定義場所である`skyrim_english.strings ID:0671D`を探し、訳文を空にすればよい。
![fix_toskyrimissue.jpg](https://qiita-image-store.s3.amazonaws.com/0/97774/139c414f-bd03-b0b5-ad3f-124b59e96c40.jpeg)