「ローカライズ」の版間の差分
(ローカライズの日本語化(kagi)) |
(相違点なし)
|
2025年10月6日 (月) 06:56時点における最新版
※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.yml
やmy_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/english
と localization/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つの単語として扱い、任意の場所で改行を入れてしまったためです。
残念ながらエンジン側の修正は不可能だったため、中国語テキストで適切に改行させるには、半角の句読点を使い、その後にスペースを入れる必要があります。適切な文字置換を行えば見た目の変化は最小限で、改行位置は正しくなります。
原文 | コードポイント | 代替 | コードポイント | 注記 |
---|---|---|---|---|
。 |
U+3002 句点(全角) | 。 |
U+FF61 半角句点(とスペース) | |
, |
U+FF0C 全角コンマ | , |
U+002C コンマ(とスペース) | 中国語風の半角コンマは存在しないため、ラテン文字のコンマで代用しても差し支えありません。 |
, |
U+FF0C 全角コンマ | 、 |
U+FF64 半角読点(とスペース) | これもコンマの代用として使えますが、見た目の違いに注意してください。 |
- |
U+002D ハイフンマイナス | ‑ |
U+2011 ノーブレークハイフン | ハイフンが単語境界として検出されないようにするための任意の代替です。そこで改行が入る可能性を減らす目的で使用します。 |
参考文献[編集 | ソースを編集]
ドキュメンテーション | スクリプト • スコープ • 効果 • トリガー • 変数 • 補正リスト |
スクリプト | AI • ブックマーク • キャラクター • コマンド • 評議会 • 文化 • ディシジョン • 王朝 • イベント • 政府 • 歴史 • 領地 • ライフスタイル • 連隊 • 宗教 • スクリプト値 • ストーリーサイクル • 闘争 • 称号 • 特性 |
インターフェース | インターフェース • データ型 • ローカライズ • カスタムローカライズ • フレーバー化 |
マップ | マップ • 地形 |
グラフィック | 3Dモデル • エクスポーター • 紋章 • グラフィックアセット • フォント • パーティクル • シェーダー • ユニットモデル |
オーディオ | 音楽 • サウンド |
その他 | コンソールコマンド • チェックサム • Modの構造 • Mod制作ツール • トラブルシューティング |