[<青文字>]って考察

Darkest Dungeon®49 views1 favorites1 min readJapaneseby punchUpdated Jul 10View on Steam ↗

1.忌まわしき青文字の調査結果

MODを入れた際に完全に青い目につく文字で
 [< test_test_test >]
と表示されたことはないだろうか。

ダーケストダンジョンのMODで言われる青文字(Blue Text / Blue Strings)とは、
ゲームが表示すべき文章を見つけられなかった際に代用表示されるローカライズIDコードのことを指している。

実例「オプション▶コントロールオプション」杜撰過ぎる公式例

 ※公式が数年かけて修正すらしない状況である

この文字が出た場所は「何らかの文字の代わりに表示」されているため、
元の説明文章がわからなくなってしまう。

実例「杜撰過ぎる公式例の該当する日本語のIDコードの記載箇所」

初見では何が何やらと思うだろう、これは「何も登録されていない」壊れた情報の状態である。

では、実際に何が表示されるべきなのか…
英語で見た場合は何が表示されているかがわかる時がある。

実例「杜撰過ぎる公式例の該当する英語コード箇所」

上記では「Alternative Controller Glyphs」が正解であり
翻訳としては「代替コントローラーアイコン表示」が適切であろう。
これほど杜撰だと筆者がBAT評価した理由もわかるというものである。

2.どこで切り替えられている?

これはMOD側がダーケストダンジョンを起動した際に、
 [オプション]▶[その他]▶[使用言語]
にて、Localizeのパラメータを決定している。

この決定内容より、Localizeフォルダ内のLoc2ファイルが参照され、
 <language id="japanese">
にてコーディングされたID情報を参照して該当する文字を表示する。

では、何故表示されているのか?
簡潔に言えば「該当が無い」が故に表示されている。

Loc2ファイルに関しては翻訳用のXMLファイルを変換処置したものであり展開できない仕様である。
作り方については「MODの翻訳方法(ガイド制作:f666_exe様)」にて作成されていると考えてもらいたい。

3.発生原因はなに?

該当が無いとは何を起点に無いと言っているのか。
上記図で説明すると
「公式日本語・DLC日本語化MOD・MOD自体が対応した日本語・日本語化MOD」
の一番左側にある赤い矢印のように「全ての登録IDから漏れた情報」として扱われ、
結果として青文字として表示される。

全体に通づる基本的な情報(エフェクト・バフ)は特別な処理を除き、
ダーケストダンジョン本体や追加DLCに記載がされているのが大半である。

実際に記載されているXMLの格納先
①ダーケストダンジョン本体  …steam\steamapps\common\DarkestDungeon\localization ②DLC:The Crimson Court  …steam\steamapps\common\DarkestDungeon\dlc\580100_crimson_court\localization ③DLC:The Color Of Madness  …steam\steamapps\common\DarkestDungeon\dlc\735730_color_of_madness\localization ※日本語化MOD「The Color Of Madness 非公式日本語化」:1693661669  …steam\steamapps\workshop\content\262060\1693661669\dlc\735730_color_of_madness\localization ④DLC:The Butcher's Circus  …steam\steamapps\common\DarkestDungeon\dlc\1117860_arena_mp\localization ※日本語化MOD  …steam\steamapps\workshop\content\262060\2115624482\localization  …steam\steamapps\workshop\content\262060\2115624482\dlc\1117860_arena_mp\localization ★その他 「DLC:The Shieldbreaker」  …steam\steamapps\common\DarkestDungeon\dlc\702540_shieldbreaker\localization ※「DLC:The Musketeer」は既存のIDで全て完結している。
上記各フォルダ内に「???.string_table.xml」とある、これがLanguageの元ソースとなる。

4-1.解決するためにはどうすべきか?

2通りの方法がある。
  1. MOD作成手法
     IDをxmlに挿入してLoc2を生成ののちサブスクライブ▶MOD上位に置く
  2. 資源置き換え
    • 公式:IDをxmlに挿入してLoc2を生成ののち、ダーケストダンジョンのLoc2を上書き
    • MOD:IDをxmlに挿入してLoc2を生成ののち対象MODのLoc2を上書き
どちらもLoc2を生成することには変わらないが、
後者に関しては再インストールや整合性チェックにて書き換え内容が消失する欠点や、
xml上の記載コードが煩雑になる恐れがある。

圧倒的に前者のほうが管理も更新の点において勝っている事は言うまでもない。

4-2.翻訳されない例外のケース

上記2通りでも、翻訳されないお手上げのケースが存在する。

大本のMOD制作者様が意図して<language id="japanese">の破損をしている場合である。
日本語の上書きする情報の枠自体が読込み不可エラーにより存在しない状況となり翻訳文が挿入できない。

具体的に言えばLoc2生成時に読み込みルートとして、
「modfiles.txt」が生成されるのだが、この生成の段階でjapaneseがない場合は、
[ModのIDナンバー]_japanese.loc2の読み込み紐づけが存在しないこととなる。
または、破損したLoc2に紐づけされてしまっている状況のパターンもある。 対応方法としては状況にもよるが下記の順に検証・対応が必要となる。
  1. 旧版のLocでの日本語MODを制作し配置
  2. 手動で大本のMODにあるmodfiles.txtにLoc2情報を追記してLoc2を配置する
     ※localization/[SteamModID]_japanese.loc2 [プロパティ上でのサイズ値(,抜き)]
ぐらいしか改善の手立ては存在しない。

前者はLocでの機能制限内でしか装飾操作ができず内部エラーが出続け、
かといって後者はMOD更新がされるたびに書き換え続ける苦行が待っている。

何故この状況になるのか
基本的なMOD制作者は英語のものを日本語として貼り付けておき、
枠自体を余白として用意してあるケースが多いが…
  • 日本語翻訳の要求値の高さ(正確性クレーム・非改善提案)
  • 気に入らない場合における低評価の乱立や爆撃
  • 公式自体が日本語サポートを打ち切りとしたこと
などの様々な忌避理由によって、わざと該当言語を削除して対応できないものとし、
日本語訳の導入対応自体が拒絶されたりするケースが実在している。
 ※筆者はリスクオブレイン2の拡張MOD翻訳等で複数人のMOD開発者から、
  上記の回答を直接言われた経験あり、実際はもっと言われてキツかった。

その場合、MOD制作者に熱意と敬意をもち「language id="japanese"」の枠を作ってもらうか、
翻訳した日本語xmlを直接持ち込んで導入してもらうように掛け合うしか手立てはない。

この問題から脱却するために翻訳家は日頃より、
制作者からの連絡が来たら真摯に取り合い協力することで、
他の翻訳家への心象を悪くするようなことを控えるべきである。

4-3.Loc2翻訳済みなのに別翻訳となるケース

Loc2でIDの定義しているのに何度見ても自分が定義したもの外の翻訳文が発生してしまう…
Clear 恐怖
Clearなんて中途半端な翻訳はしていない。
何故出ているのだ?MOD順では上位に置いているにも関わらずだ…

といった具合に悩む翻訳者がいるだろう。

この失敗している原因は大抵が下記の2通り
  • 構文無視が発生し下位のMODにある同IDが優先されたケース
  • MOD順のより上位に同IDがあり優先されたケース
である。
構文無視が発生し下位のMODにある同IDが優先されたケース
構文自体の構造が何らかの原因によって壊れている場合や Loc2の記載破損時に発生しやすい。
例の一つとしては「arena_priority」の値が入っているが対象のIDが、
表示優先の機能に対応していないものである場合にてエラーもMissingもないままに通過してしまう。
 ※日本語では「arena_priority」が正常に機能しない可能性が・・・まさかね

アリーナでのプレイヤー間での優先順位機能として、処理上は必要なのはわかるのだが、
どうしてそんな仕様になっているのか、首をかしげたくなるが仕様なので仕方がない。
対応としては「arena_priority」がないバージョンを追加で記載すると良い。
流石にないと思うが更新によって「arena_priority」が使えるIDになった際に、
今度は逆の形で再度の問題になるからである。

もう一例として
  • "[ ]"や"{ }"の囲いの数の不整合
  • {colour_end}など修正した際の定義消しミス
  • {Color_end}など、定義名称の綴りミス
冒頭のものは、[]であれば表示上がおかしくなるため視覚的に把握しやすい。
それ以外はあとの2種同様にLoc2が排出されてしまうのだが、
「steam_workshop_uploader.log」にて取込時エラーが出た通知が、
段階処置としてlog排出がなされるためわかりやすい。
これら問題が出た場合、下位の同IDがあればそちらを採用するようになっている。

上記で漏れた内容が旧版Locに引っかかりバグが発生することもある。

MOD順のより上位に同IDがあり優先されたケース
大型MODにあるLocalizeを見た際に同一のIDがあればビンゴである。
それが優先として表示されてしまっている。
大型MODの表示が気に入らない場合、XMLを書き換えLoc2を作成して上書きする、
ないしは複製MODをプライベートで作成、大型MODと差し替えることで解決する。

5.問題切り分け用MODの紹介

DLCリソース依存する青文字かの判断用MODを作成した。

一つ、日本語翻訳をする人で青文字撲滅をしたい人に…
https://steamcommunity.com/sharedfiles/filedetails/?id=3753656977
これを入れるとカラー情報やIDコード抜け報告があったが更新のないloc2を切り落とし、
一律で判断基準を設けられるようになる。なお、DLCがたとえなくても機能する。


上図のように、開発する人向けのMODであるため、
決してゲームプレイ用を目的としたMODではない点に留意を頂きたい。
DLCに依存しないために補完しておくのも手
該当するDLC以外のDLCを購入していない人向けに、
エフェクト・バフ・ツールチップ列挙して補完対応するのも手である。
ただ、文章だけ対応していても機能側が存在しないためクラッシュする場合は、
MOD制作元がDLC指定漏れが原因であり対応自体ができないため、そちらへ誘導・報告してもらうのが適切であるだろう。

他の話題

謎の?について
{?level_number}%dや{?level_name}%s
などであるが、渡された情報に中身がなければ、存在しなかった情報として扱うエラー避け。
ただし、これをミスって入力するMOD制作者側が1つづつズレたことに気が付かず挿入することもある点に注意。
エラーが出ないため表示位置がずれるだけで、発見が遅れる原因となる。
また、該当のパラメータが対応していない情報の場合は、エラーなしのスルーされてしまうIDが1つできあがる点に留意。
・・・こんなバグを引き起こすなら、いっそ消してしまったほうが都合がいい。
マゼンタ?な文字がある
読むことはできるが、発色がおかしい文字が混ざっていることがある。

これは対象の文字に色設定(Color)を指定しているのだが、
Loc2を作成する際に用意した資源が「localization」フォルダだけで「colours」フォルダに、
色情報の資源となる「~~~.darkest」(例:base.colours.darkest)が存在しない場合に発生する。

例えば下記のような「stressNOT1」という色を指定してるとすると、
{colour_start|stressNOT1}stress{colour_end}
「~~~.darkest」側には
colour: .id "stress" .rgba #e0ddce colour: .id "stressNOT1" .shared_id "stress"
と設定されており、
 「stressNOT1 ▶ stress参照 ▶ stress ▶ rgbaにおける#e0ddceの発色」
の経路で色を決めている。

マゼンタ文字色が出た状況を解決には、
「~~~.darkest」側に色を追加してLoc2を作り直すか、
利用可能な配色に訂正するかの2択となる。

色の確認はHTML チュートリアル[techis.jp]のようなサイトで確認ができたり、
VS Codeを利用しているのなら拡張機能で「Color Picker」を使ったりと、
自分でMODを作る場合には視覚的にわかりやすくしておくと便利なサイト・ツールである。

話題:突然のクラッシュ

ローカライズするうえで気をつけないといけない点がある。
  • 「%sや%dの順番を不用意に変える」こと
  • 「%+dなどの記号出力に既に±情報を含んだ値が入る可能性を考慮する」こと
である、通常のエラーと違い突然エラーもログも出ないままにクラッシュしてしまう。 これは、ダーケストダンジョンが動くプログラム上での書式指定子の問題によるクラッシュ、
C言語やPythonなど口酸っぱくいわれるような型の話になる。
  • %s:文字列(String)
  • %d:10進数整数(Decimal Integer)
  • %.0f:浮動小数点数(小数点以下0桁を四捨五入して整数出力する設定)
なのだが、例えば文字を%d側に入れたりした際に致命的なエラーを書き出して、
そのエラーに対しプログラム上でのエラー回避の構文がない限り、完全に止まってしまう。
 ※MODで作ったものに回避構文は存在しないためそのまま落ちる。

他にも注意点として「%+d」が利用されているものを見かけるが、
これはある他言語では±表示で使ったり、エラーを掴んで回避処理に流して対応させたりと、
色々なことができるテクニックの一つである…、

が…これは良い機能なのだが…ことダーケストダンジョンではこれがクラッシュの地雷と化す。

防止策としては%dとすることである。
明確におかしな表示とすることで報告をしてもらうほうがMOD開発においては安全。
このようにダーケストダンジョンでは…様々な理由でクラッシュを引き起こす事が多い。
 ※他パターンも同様

%1$dや%2$sのように位置インデックスと$の組み合わせでの順番指定が使用できれば、
楽になるのだがPOSIX標準でサポートされる定義に変わったりしない限り利用できない。
独自定義に悩まされるのはどうしようもない。

利用できたとしても何かしら問題が発生したときに原因不明の病気を仕込むことになり、
面倒無状況があちこちで発生するため考えないことをお勧めする。

This guide was created by its original author on the Steam Community. Are you the author and want it removed? Request removal.