ローカライズ

提供:ck3wiki
ナビゲーションに移動 検索に移動

※2025/10/6、英wikiよりkagi翻訳を通しました。機械翻訳なので一部不自然な日本語があるかもしれません。ぜひ編集してくれるとありがたいです。

ローカライズとは、プレイヤーが選択した言語でゲーム内に表示されるテキストのことです。イベント、UI、ツールチップなど、あらゆる場所で使われます。

スクリプトでは text_example のようなローカライズキーを使い、ローカライズファイルで次のように実際のテキストへ変換します。

text_example: "Example text"

ローカライズファイルの要件:

  • .yml 形式を使用します
  • UTF-8 BOM エンコーディング必須です。多くのテキストエディタでは右下に表示されます。「文字コードを選択」や「エンコード付きで保存」などのオプションも確認してください。
  • localization/ フォルダ配下の、該当言語のサブフォルダに保存します。例: localization/english
  • ファイル名に l_<language> を含める必要があります。例: my_locs_l_english.ymlmy_locs_l_french.yml
  • 1行目は同じ l_<language>: で始めます。例:<syntaxhighlight lang="c">

l_english:

text_example: "Example text"

</syntaxhighlight>

l_ は小文字のエルであり、数字の1や大文字のアイではありません。localization の綴りは z であり、s ではありません。

ローカライズされた文字列は必ず二重引用符 "" で囲みます。内部の会話で引用符を使っても文字列が途中で終わることはありません。

改行は \n を使います。2つ並べると段落区切りの空行になります。例えば "Hello\n\nWorld" は次のように表示されます:<syntaxhighlight lang="c"> Hello

World </syntaxhighlight>\n が機能するのはローカライズファイル内のみで、UIに直接置いた場合は機能しません。

Mod に他言語のローカライズが含まれていない場合、別言語でプレイする人には未ローカライズのキーが表示されます。これを防ぐには、すべてのローカライズを他言語フォルダへコピーし、ファイル名および先頭行の l_english を置き換えてください。Modding Discord にはこれを素早く行うスクリプトがあります。

新しいローカライズ行の前にスペースを入れるのは任意ですが、大規模ファイルの読み込みが速くなることが、モッダーのテストで判明しています。

多くのローカライズキーは、ファイル全体を置き換えずに個別に上書きできます。あなたのファイルを "replace" というフォルダに置いてください。

localization/replace/englishlocalization/english/replace のどちらも機能しますが、前者のパスの方が後者より優先されます(複数の Mod が同じファイルを上書きしようとする場合に影響することがあります)。

ローカライズのエントリは次のような形になることもあります:

 murder_successful_roll_tt:0 "[target.GetShortUINameNoTooltip] is killed!"
 murder_become_discovered_roll_tt:0 "#N My involvement is discovered#!"

コロンの後ろの数字は任意で、モッダーにとっては意味を持ちません。かつて Paradox は翻訳チームがローカライズの新しい版を示すためにこの数字を使っていました。これは現在完全に廃止されており、数字を追加する必要はありません。

角括弧 [ ] の中はゲーム内の情報(この例ではキャラクターの名前など)を参照してテキストに差し込みます。#N#! はテキストの表示方法を制御し、この場合は「ネガティブ」(プレイヤーに不利)として表示します。詳細は下記のセクションを参照してください。

利用できる表示スタイルの多くは gui/preload/textformatting.gui にあります。あなたの Mod 用に独自スタイルを追加するのもここです。

いくつかは Crusader Kings III/jomini/gui/jomini/basetextformatting.gui にも定義されています。

書式設定[編集 | ソースを編集]

 
ゲーム内のすべての書式スタイル例

ローカライズ文字列には書式ディレクティブを含められます。テキストの書式は # で開始し、#! で終了します。

テキストの前にスペースを入れるのを忘れないでください!

#<formatting code> <text>#!

例:
#P Green#!

詳細は下記の 特殊文字 を参照してください。

他のエントリの再利用[編集 | ソースを編集]

他のローカライズキーを差し込みます: $<other key>$

例:

 special_contract_march_short:0 "March"
 unlock_march_contract:0 "Unlocks the #high $special_contract_march_short$#! [feudal_contract|E]"

重複を避けるため、またエントリ同士の整合性を保つために有用です。例えば special_contract_march_short の説明を変更した場合、unlock_march_contract のメッセージも自動的に更新されます。

同じ $ 記法はゲームエンジンが提供する特別な値の参照にも使われます。例えば:

 tooltip_feudal_elector_anti_vote_ruler_lunatic:1 "I do not trust the judgment of a [GetTrait('lunatic_1').GetName( candidate.Self )] ruler: $VALUE|=+0$"

ここで $VALUE$ はゲームが供給する数値で、|=+0 の部分はその表示方法を制御します(詳細は下記の「数値の丸め」を参照)。このような特別な値は、特定のコンテキストで表示されるローカライズエントリ内でしか使えません。この例では選挙制称号の投票画面です。

データ型[編集 | ソースを編集]

データ型は、特定の条件に応じてローカライズを動的に変化させるために使われます。型を呼び出すと、特定の文字列が出力されます。

データ型はスコープ指定が必要で、通常はキャラクターにスコープします。例:

[ROOT.Char.GetLadyLord] [ROOT.Char.GetNamePossessiveRegnal] [ROOT.Char.GetFirstNameNicknamed]

コンソールコマンド dump_data_types を使うと、Documents\Paradox Interactive\Crusader Kings III\logs\data_types にあるログフォルダへ全データ型を出力できます。

ログでは、どの型がどこで使え、何を返すか(別の型、文字列、整数など)が分かります。

ログは複数ファイルに分割されます。検索しやすくするには、次のコードで .bat ファイルを作って結合できます:

type *.txt > ALL_DATA_TYPES.txt

その後、data_types フォルダ内でその .bat を実行してください。

ゲーム内でもコンソールコマンド data_types_explorer でデータ型を参照できます。promotes と functions を区別しますが、使用時には重要ではありません。大きな違いとして、promotes は Character や Title などのスコープ(スクリプトのイベントターゲットに類似)を返し、functions は値を返したり処理を実行します(effects や triggers のように)。

性別[編集 | ソースを編集]

これらの関数は、スコープ中のキャラクターの性別に応じて異なるテキストを表示します。

関数
GetHerHim
GetHerHis
GetHerHisMy
GetHersHis
GetHerselfHimself
GetLadyLord
GetSheHe
GetDaughterSon
GetDaughterSonPossessive

キャラクター名[編集 | ソースを編集]

これらの関数は、キャラクター名のさまざまな表現を表示します。以下は完全な一覧ではありません。

関数
GetFirstName
GetFirstNameBase
GetFirstNameNicknamed
GetFirstNameNicknamedNoTooltip
GetFirstNameNicknamedNoTooltipRegnal
GetFirstNameNicknamedOrMe
GetFirstNameNicknamedOrMeNoTooltip
GetFirstNameNicknamedOrMeNoTooltipRegnal
GetFirstNameNicknamedOrMeRegnal
GetFirstNameNicknamedPossessive
GetFirstNameNicknamedPossessiveNoTooltip
GetFirstNameNicknamedPossessiveNoTooltipRegnal
GetFirstNameNicknamedPossessiveOrMy
GetFirstNameNicknamedPossessiveOrMyNoTooltip
GetFirstNameNicknamedPossessiveOrMyNoTooltipRegnal
GetFirstNameNicknamedPossessiveOrMyRegnal
GetFirstNameNicknamedPossessiveRegnal
GetFirstNameNicknamedRegnal
GetFirstNameNoTooltip
GetFirstNameNoTooltipRegnal
GetFirstNameOrMe
GetFirstNameOrMeNoTooltip
GetFirstNameOrMeNoTooltipRegnal
GetFirstNameOrMeRegnal
GetFirstNamePossessive
GetFirstNamePossessiveNoTooltip
GetFirstNamePossessiveNoTooltipRegnal
GetFirstNamePossessiveOrMy
GetFirstNamePossessiveOrMyNoTooltip
GetFirstNamePossessiveOrMyNoTooltipRegnal
GetFirstNamePossessiveOrMyRegnal
GetFirstNamePossessiveRegnal
GetFirstNameRegnal
GetTitledFirstName
GetFullName
GetFullNameNicknamed
GetFullNameNicknamedNoTooltip
GetFullNameNicknamedNoTooltipRegnal
GetFullNameNicknamedOrMe
GetFullNameNicknamedOrMeNoTooltip
GetFullNameNicknamedOrMeNoTooltipRegnal
GetFullNameNicknamedOrMeRegnal
GetFullNameNicknamedPossessive
GetFullNameNicknamedPossessiveNoTooltip
GetFullNameNicknamedPossessiveNoTooltipRegnal
GetFullNameNicknamedPossessiveOrMy
GetFullNameNicknamedPossessiveOrMyNoTooltip
GetFullNameNicknamedPossessiveOrMyNoTooltipRegnal
GetFullNameNicknamedPossessiveOrMyRegnal
GetFullNameNicknamedPossessiveRegnal
GetFullNameNicknamedRegnal
GetFullNameNoTooltip
GetFullNameNoTooltipRegnal
GetFullNameOrMe
GetFullNameOrMeNoTooltip
GetFullNameOrMeNoTooltipRegnal
GetFullNameOrMeRegnal
GetFullNamePossessive
GetFullNamePossessiveNoTooltip
GetFullNamePossessiveNoTooltipRegnal
GetFullNamePossessiveOrMy
GetFullNamePossessiveOrMyNoTooltip
GetFullNamePossessiveOrMyNoTooltipRegnal
GetFullNamePossessiveOrMyRegnal
GetFullNamePossessiveRegnal
GetFullNameRegnal
GetName
GetNameNicknamed
GetNameNicknamedNoTooltip
GetNameNicknamedNoTooltipRegnal
GetNameNicknamedOrMe
GetNameNicknamedOrMeNoTooltip
GetNameNicknamedOrMeNoTooltipRegnal
GetNameNicknamedOrMeRegnal
GetNameNicknamedPossessive
GetNameNicknamedPossessiveNoTooltip
GetNameNicknamedPossessiveNoTooltipRegnal
GetNameNicknamedPossessiveOrMy
GetNameNicknamedPossessiveOrMyNoTooltip
GetNameNicknamedPossessiveOrMyNoTooltipRegnal
GetNameNicknamedPossessiveOrMyRegnal
GetNameNicknamedPossessiveRegnal
GetNameNicknamedRegnal
GetNameNoTooltip
GetNameNoTooltipRegnal
GetNameOrMe
GetNameOrMeNoTooltip
GetNameOrMeNoTooltipRegnal
GetNameOrMeRegnal
GetNamePossessive
GetNamePossessiveNoTooltip
GetNamePossessiveNoTooltipRegnal
GetNamePossessiveOrMy
GetNamePossessiveOrMyNoTooltip
GetNamePossessiveOrMyNoTooltipRegnal
GetNamePossessiveOrMyRegnal
GetNamePossessiveRegnal
GetNameRegnal

引数[編集 | ソースを編集]

引数は関数の出力を修飾するために使います。常に関数の末尾に置きます。

引数 説明 引数なし 引数あり
|U
先頭文字を大文字にする
Tea is ready, my [ROOT.Char.GetLadyLord|U].
Tea is ready, my lady. Tea is ready, my Lady.
|L
先頭文字を小文字にする
Tea is ready. [ROOT.Char.GetSheHe|L] said.
Tea is ready. He said. Tea is ready. he said.

特殊文字[編集 | ソースを編集]

いくつかの文字の組み合わせには特別な機能があります。

利用可能な表示スタイルの完全な一覧は gui/preload/textformatting.gui にあります。あなたの Mod 用のスタイル追加もここで行います。

;(セミコロン)で書式コードを組み合わせることもできます。例えば #high;bold のようにすれば両方を適用できます。ただし、そのようなケースが多いなら新しいスタイルを定義した方がよい場合があります。

文字 説明
\n 改行。特定の場合のみ機能します。
#P テキストを「ポジティブ」として緑色表示
#P A very good thing has happened#!
または
[GetFullName|P]
#N テキストを「ネガティブ」として赤色表示
#N A rather bad thing has happened#!
または
[GetFullName|N]
#help ヘルプスタイル(青みがかったグレー+イタリック)で表示
#help If you do not give either Gold or Soldiers to the war effort, your [head_of_faith|E] will condemn you and you will lose [piety|E].#!
#I 情報スタイル(緑色+イタリック)で表示
#I Click to view your [GetPlayer.GetCouncillorPosition( 'councillor_court_chaplain' ).GetPositionName]#!
#warning 警告スタイル(赤色+イタリック)で表示
#warning Only your younger children lacks [guardians|E]#!
#X 警告として表示(上と同じ)
#X Choosing a New Appearance will discard ALL previous changes!#!
#T タイトルとして表示(太字かつ大サイズ)
#T Randomize Dynasty Name#!
#E ゲーム概念として表示(淡い青)
#E Randomize#!
#S 太字+イタリックで表示
#S Occupying Counties:#!
#V 白色で表示
#V This text is white #!
または
[GetFullName|V]
#EMP 強調(イタリック)で表示
#EMP Emphasis here #!
#weak 濃い色+イタリックで表示
#weak footnote or aside #!
#bold 太字で表示
You have #bold NOT #! done this
#italic イタリックで表示
You #italic will #! do this
#indent_newline:N (N は数字)

改行後に入れるスペースの数

#indent_newline:2

リンク[編集 | ソースを編集]

ゲーム概念[編集 | ソースを編集]

ローカライズ文字列からゲーム概念へリンクできます:

[concept_key|E]

# 例:
[faith|E]

デフォルトでは概念名の先頭は大文字になります。先頭を小文字にするには次のようにします:

[concept_key|El]

# 例:
"The word [faith|El] is now starting by a lower case letter"

ゲーム概念へのリンク表記は次のようにカスタマイズできます:

[Concept('concept_key','Customized expression')|E]

# 例:
"The game concept link [Concept('faith','religion')|E] is now written as religion."

カスタムゲーム概念の例[編集 | ソースを編集]

カスタムのゲーム概念を追加し、その説明を表示したい場合:

###
### common\game_concepts\MY_game_concepts.txt
###
my_custom_concept = {
}
###
### localization\english\MY_l_english.yml
###
l_english: 
  game_concept_my_custom_concept:0 "My Name"
  game_concept_my_custom_concept_desc:0 "My Description"
  # government の説明を上書きする例
  game_concept_government_desc:2 "[my_custom_concept|E]"

特性(Traits)[編集 | ソースを編集]

同様に、特性へのリンクは次のように書きます:

[GetTrait('trait_name').GetName(GetNullCharacter)]

これにより、特性にツールチップが付き、特性情報が表示されます。GetName 関数には実際のキャラクターを渡すこともでき、その場合は条件付き説明が正しく表示されます。例えば、特性の付与を行うローカライズでは、特性を受け取るキャラクターを渡します:

# [trait|E] は上で述べたゲーム概念へのリンクであり、[TRAIT.GetName( Character.Self )|LV] は実際に獲得する特性へのリンクです
# localization/english/effects_l_english.yml より
ADD_MY_TRAIT:2 "You gain the [trait|E] [TRAIT.GetName( CHARACTER.Self )|LV]"

特に |LV は、特性名を小文字・白色で表示させます(上記の コマンド引数特殊文字 を参照)。これはバニラのゲームファイルで慣用的に使われています。

称号(Titles)[編集 | ソースを編集]

特定の称号へのリンクも可能です:

[GetTitleByKey('title_name').GetName]

これにより、その称号にツールチップが付き、称号情報が表示されます。GetNameNoTier を使えば、位階を除いた称号名のみを表示できます。

数値の丸め[編集 | ソースを編集]

小数部のある数値は、望む小数桁数で丸められます。次のように指定します:

# 小数第2位まで
[some_value|2]

# 小数をすべて削除
[some_value|0]

値は常に切り捨てで丸められる点に注意してください。

アイコン[編集 | ソースを編集]

 
この画像の横の例文の出力結果

ローカライズキー内でアイコンを表示するには、<syntaxhighlight enclose="none" lang="coffee">@icon_name!</syntaxhighlight> を使います。

注意! @warning_icon! そのまま走り続けると、持っている @gold_icon! ゴールドを全部落とすぞ! @piety_icon_islam! その行いはアッラーの審判を受けるだろう!
アイコンアドレス
汎用アイコン 軍事アイコン 信仰アイコン 地形アイコン
warning_icon skill_martial_icon unspent_strong_hook_icon friend_icon soldier_icon heavy_cavalry_icon pikemen_icon catholic_icon plains
gold_icon skill_stewardship_icon crime_icon best_friend_icon bombard_icon heavy_infantry_icon skirmishers_icon orthodox_icon forest
prestige_icon skill_intrigue_icon intimidated_icon rival_icon bondi_icon horse_archers_icon trebuchet_icon custom_faith_1_icon (10) mountains
time_icon skill_learning_icon terrified_icon nemesis_icon bowmen_icon jomsviking_pirates_icon varangian_veterans_icon virtue_icon
cross_icon skill_prowess_icon weak_hook_icon lover_icon camel_riders_icon light_cavalry_icon vigmen_icon sin_icon
stress_icon stress_gain_icon pending_court_events soulmate_icon crossbowmen_icon mangonel_icon war_elephants_icon fervor_icon
dread_icon stress_critical_icon realm_capital_icon danish_huskarls_icon onager_icon advantage_icon
exposed_icon stress_loss_icon alliance_icon countered_icon supply_icon gathering_icon
portrait_punishment_icon death_icon prestige_level_0_icon (5) fort_icon garrison_icon army_quality_icon_1 (5)
skill_diplomacy_icon scheme_icon dynasty_prestige_icon (5) knight_icon embarked_icon no_siege_weapon_icon

特殊文字の使用と改行[編集 | ソースを編集]

文字列中で " のような文字を入力したい場合は、毎回前に \ を付けます:

Hello, I am \"totally\" not going to stab you!
Hello, I am #weak\"totally\" not# going to stab you!

改行したい場合は \n を使います:

This is line one, which will show up above,\nWhile this is line two, coming right at you from below.

テキストの位置合わせを保つため、改行の前後にスペースを入れないでください。

複数の段落を追加する際は、同じ desc に複数のキーを割り当てられることを覚えておくと便利です。特定の段落だけをカスタマイズしたい場合に特に有効です。例えば、次のようなローカライズファイルにできます:

paragraph_separator:0 "\n\n"

first_paragraph:0 "Generic intro text"

maybe_second_paragraph:0 "Conditional text"
alternative_second_paragraph:0 "Alternative text"

final_paragraph:0 "Generic outro text"

そして、イベントを次のように定義します:

event_name.100 = {
  desc = {
    desc = first_paragraph
    desc = paragraph_separator
    first_valid = {
      triggered_desc = {
        limit = { some_trigger = yes }
        desc = maybe_second_paragraph
      }
      triggered_desc = {
        limit = { some_trigger = no }
        desc = alternative_second_paragraph
      }
    }
    desc = paragraph_separator
    desc = final_paragraph
  }
}

これは、2つの異なるエントリを同期させ続けるよりはるかに管理しやすく、ローカライズファイルの可読性も向上します。

中国語の句読点[編集 | ソースを編集]

ゲームの初期バージョンでは、中国語テキストの改行位置が単語の途中で切れてしまうといった問題がよくありました。これは、ゲームエンジンが中国語の表意句読点を句読点として認識せず、中国語の行全体を1つの単語として扱い、任意の場所で改行を入れてしまったためです。

残念ながらエンジン側の修正は不可能だったため、中国語テキストで適切に改行させるには、半角の句読点を使い、その後にスペースを入れる必要があります。適切な文字置換を行えば見た目の変化は最小限で、改行位置は正しくなります。

 
CK3 のインターフェイスからのサンプル。左は元の句読点、右は置換後。
原文 コードポイント 代替 コードポイント 注記
U+3002 句点(全角)
U+FF61 半角句点(とスペース)
U+FF0C 全角コンマ
, 
U+002C コンマ(とスペース) 中国語風の半角コンマは存在しないため、ラテン文字のコンマで代用しても差し支えありません。
U+FF0C 全角コンマ
U+FF64 半角読点(とスペース) これもコンマの代用として使えますが、見た目の違いに注意してください。
-
U+002D ハイフンマイナス
U+2011 ノーブレークハイフン ハイフンが単語境界として検出されないようにするための任意の代替です。そこで改行が入る可能性を減らす目的で使用します。


参考文献[編集 | ソースを編集]

ドキュメンテーション スクリプトスコープ効果トリガー変数補正リスト
スクリプト AIブックマークキャラクターコマンド評議会文化ディシジョン王朝イベント政府歴史領地ライフスタイル連隊宗教スクリプト値ストーリーサイクル闘争称号特性
インターフェース インターフェースデータ型ローカライズカスタムローカライズフレーバー化
マップ マップ地形
グラフィック 3Dモデルエクスポーター紋章グラフィックアセットフォントパーティクルシェーダーユニットモデル
オーディオ 音楽サウンド
その他 コンソールコマンドチェックサムModの構造Mod制作ツールトラブルシューティング