模組本地化

本頁面部分全部內容上次核對於3.1版本

本地化是指在遊戲內窗口實際呈現給玩家的文本,如事件、菜單、武器、故事等。本地化文件以.yml的格式保存在localisation/folder路徑底下,且以UTF-8-BOM的格式編碼。.yml文件的命名慣例是<文件名>_l_<語言名>.yml,其中<文件名>為這組本地化的名字,而<語言名>為本地化的目標語言。目前支持的語言有葡萄牙語(braz_por),英語(english),法語(french),德語(german),波蘭語(polish),俄語(russian),西班牙語(spanish),以及簡體中文(simp_chinese)。

實用指令:

reload text – 重新加载本地化目录。
switchlanguage l_english – 切换语言并重新加载本地化目录。

創建本地化文件[編輯 | 編輯原始碼]

  • 在模組的根文件夾(注意不在common里)創建一個名為「localisation」的文件夾。注意,在某些別的paradox遊戲裡用的可能是美式拼寫、帶有z的「localization」。
  • (可選)在「localisation」文件夾中創建對應語言的子文件夾。這有助於管理,但不是必需的。
  • 群星的本地化文件是用UTF-8-BOM編碼的。UTF-8-BOM是唯一可用的編碼方式,就算用UTF-8編碼也會導致群星無法解析從而不能使用。
  • 正確編碼的最簡單做法是複製一個現成的群星.yml文件,再直接對其進行編輯。
  • 作為替代,你也可以創建一個標準的空白文本文檔,再以UTF-8-BOM編碼保存它。類似Notepad++Visual Studio Code這樣的文本編輯器能讓你手動將文件保存為UTF-8-BOM編碼格式。
  • 文件名必須以「_l_<語言名>」結尾,否則無法被讀取。
  • 任何本地化文件的第一行都必須是l_<language>:,否則無法被讀取。
  • 範例文件名:mod_buildings_l_english.yml

將YML文件命名為與一個原版YML文件相同會導致原版被覆蓋。這麼做並不推薦, 除非你打算改寫文件內(幾乎)所有的條目。本地化條目可以通過保存到「Replace」文件夾以單獨進行覆蓋,詳見覆蓋原版文本

遺憾的是,遊戲並沒有適配模組的語言回滾功能。這意味著當本地化鍵值缺失時,鍵值會直接以文本形式呈現。因此,對應的做法是先直接把英語文件複製到其他所有語言裡(改成合適的標題)。

文件編碼[編輯 | 編輯原始碼]

  • 使用一個文本編輯器打開YML文件。推薦使用類似Notepad++Visual Studio Code 這樣的編輯器,如果上述軟體不可用的話,普通的記事本也行。
  • 將文件轉碼成UTF-8-BOM的格式。
  • 使用Notepad++時,前往菜單欄,打開編碼 界面。
  • 使用Visual Studio Code時,前往右下角並點擊編碼(默認為UTF-8),再點擊保存編碼。作為替代,也可以通過改變設置來讓VSC默認以UTF-8-BOM 格式生成YML文件。
  • 使用記事本時,前往另存為...,改變編碼並保存文件。
    • 如果列出來的選項中同時有UTF-8 和UTF-8 with BOM(或相似的名稱),選用UTF-8-BOM。
    • 如果列出來的選項中同時有UTF-8 和UTF-8 without BOM(或相似的名稱),選用UTF-8。【譯註:即一定要帶BOM】

本地化鍵值[編輯 | 編輯原始碼]

l_<语言名>:
 localisation_key_1: "文本1"
 localisation_key_2: "文本2"

每個單獨的本地化條目被稱為「鍵值」,位於冒號的左側,是指向本地化文本的實際代碼。而遊戲內顯示的文本則位於冒號的右側,包夾在雙引號("")里。冒號是分隔符。

  • 原版文件中緊接在冒號後面的數字可以被忽略,那是Paradox內部用於跟蹤翻譯用的。[1]
  • 在出現任何本地化鍵值之前,文件必須先包含l_english: (或其他語言的相等形式)。
  • l_english:(或相等)之後的所有條目必須以空格開始(空格或tab都行)。
  • 所有要在遊戲內顯示的文本都被雙引號所包裹。想在遊戲內顯示雙引號的話,請在雙引號前面加上反斜槓(例如:text \"name\")。
  • 注意以下這些unicode字符在本地化文件中是不可用的,會生成一個「?」:„ “ ‚ ‘ – ” ’ … —

覆蓋原版文本[編輯 | 編輯原始碼]

想要覆蓋原版本地化鍵值(或其他模組的鍵值)時,在你的「localisation」文件夾底下創建一個名為「replace」的文件夾。該文件夾中的本地化文件的讀取比其他所有本地化文件都晚,能覆蓋掉任何重複的鍵值。這樣做可以避免覆蓋所有本地化文件,每個鍵值條目會單獨被最後加載的文件所覆蓋。不通過「replace」文件夾來覆蓋本地化是可行的,但並不可靠。

方括號指令[編輯 | 編輯原始碼]

方括號指令(範圍本地化聲明) 用方括號([ ])包裹,以一個主作用域為開頭,一段檢索用文本為結尾。中間可以包含一個或數個次作用域。目標之間用小數點號(.)分隔。文本檢索可以提前定義(參考下方的例子),可以引用作用域中聲明的變量,也可以是段scripted_loc【即帶腳本的語言文件】(參考common/scripted_loc底下的文件)。在寫「scripted_loc」條目時,要注意這些條目本身不能用方括號指令(例如:一段帶有[Root.GetName]的scripted_loc會直接原封不動地顯示[Root.GetName])。

注意:如果你想在腳本效果觸發器中使用例如 log = [This.GetName] 這樣的本地化指令,你得把它寫成\\[This.GetName],不然就會出錯(至少會在效果中第二次使用時出現)。

大多數情況下可以通過'[Scope.my_variable]'來獲取變量的賦值,以及通過'[Scope.my_date_flag]'來獲取保存的日期。(從3.1起)

兩個連續的左方括號 '[[' 會跳過指令,使一個單獨的方括號呈現在文本里。例如文件中的'[[范例]' 會在遊戲中顯示為'[範例]'。

有幾條指令是無範圍的:GetDate, GetMidGameDate, GetLateGameDate, GetYear, LastKilledCountryName

下方表格只記錄了一部分的硬編碼範圍本地化指令(也沒有涉及任何腳本語言文件)。一份更詳盡的代碼名單可以在Stellaris\logs\script_documentation\localizations.log里找到。

主作用域[編輯 | 編輯原始碼]

指令 使用範例 注釋
Root [Root.GetName] 事件的根作用域
This [This.GetName] 當前作用域
From [From.From.GetName] 調用事件的作用域。對於調用棧中更早位置的事件,From也可以充當次作用域
Prev [Prev.From.GetName] 上一個目標。我不清楚Prev.From指向的是什麼,不過有些項目的描述中有用到。
<event target tag> [mytarget.GetName] 事件目標(Event target)標籤要在本地化文件中聲明event_target:後才能使用。
外交活動
Actor [Actor.GetAllianceName] 用於外交回應消息,發起行動的一方
Recipient [Recipient.GetName] 用於外交回應消息,作為行動目標的一方
Third_party [Third_party.GetName] 用於外交回應消息,行動中牽涉到的第三方

次作用域[編輯 | 編輯原始碼]

指令 使用範例 注釋
國家活動:首都/統治者/繼承人/物種/聯邦
Capital [Root.Capital.GetName] 當前國家或星區的首都
Leader [Root.Leader.GetName] 當前作用域的領導人(艦隊、國家、聯邦、人口派系、第一次接觸、情報行動、間諜網、星區
戰爭活動
MainAttacker [This.MainAttacker.GetAllianceName] 當前作用域的主進攻者(作用域必須是戰爭),在戰爭名稱樣式中使用。
MainDefender [This.MainDefender.GetSpeciesName] 當前作用域的主防禦者(作用域必須是戰爭),在戰爭名稱樣式中使用。
星球活動:擁有者/所在星系/衛星/星區
Owner [Root.Owner.GetName] 當前作用域的擁有者
System [Root.System.GetName] 主作用域所在的星系
Planet [Root.Planet.GetName] 當前作用域所處的星球(人口、陸軍、考古遺址、資源點、巨構建築

檢索用文本[編輯 | 編輯原始碼]

指令 使用範例 注釋
GetAdj [Root.GetAdj] 當前作用域所關聯的形容詞
GetAdjective [Root.GetAdjective] 當前作用域所關聯的形容詞
GetAllianceName [This.MainAttacker.GetAllianceName] 當前作用域所屬的軍事同盟的名稱
GetControllerName [Root.GetControllerName] 當前控制者的名稱(已知能對星球生效)
GetClassName [Root.GetClassName] 當前星球種類的名稱
GetFleetName [Root.GetFleetName] 與當前作用域關聯的艦隊名稱
GetHeirName [Root.GetHeirName] 當前繼承人的名字
GetHeirTitle [Root.GetHeirTitle] 當前繼承人的頭銜
GetHomeWorldName [Root.GetHomeWorldName] 當前作用域的母星名稱
GetLeaderName [Root.GetLeaderName] 與當前作用域關聯的領袖名稱
GetName [Root.GetName] 與當前作用域關聯的名稱
GetFirstName [Root.GetFirstName] 與當前作用域領袖關聯的第一個名稱
GetSecondName [Root.GetSecondName] 與當前作用域領袖關聯的第二個名稱
GetAge [Root.GetAge] 作用域領袖的年齡
GetNamePlural [Root.GetNamePlural] 與當前作用域關聯的複數稱謂(必須是一個物種)
GetNebula [Root.GetNebula] (未知)
GetOwnerName [Root.GetOwnerName] 當前所有者的名稱
GetPersonalityName [Root.GetPersonalityName] 當前AI性格的名稱
GetPlanetMoon [Root.GetPlanetMoon] 返回「星球」或者「衛星」,取決於當前作用域是哪一種
GetPlanetMoonCap [Root.GetPlanetMoonCap] 返回「星球」或者「衛星」,取決於當前作用域是哪一種【與上條區別在於英文首字母大寫】
GetPopFactionName [Root.GetPopFactionName] 當前作用域的人口派系的名稱
GetRandomSpeciesSound [Root.GetRandomSpeciesSound] 從當前作用域物種相關聯的聲音列表里隨機選一個進行播放
GetRegnalName [Root.GetRegnalName] 當前作用域的尊稱
GetRulerName [Root.GetRulerName] 當前作用域關聯的統治者名稱
GetRulerTitle [Root.GetRulerTitle] 當前作用域關聯的統治者頭銜
GetSpeciesAdj [Root.GetSpeciesAdj] 當前作用域的物種的形容詞形式
GetSpeciesClass [Root.GetSpeciesClass] 當前作用域的物種所屬類別
GetSpeciesClassPlural [Root.GetSpeciesClassPlural] 當前作用域的物種所屬類別的複數形式
GetSpeciesMouthName [Root.GetSpeciesMouthName] 當前作用域的物種所屬類別的嘴巴的名稱
GetSpeciesName [Root.GetSpeciesName] 當前作用域的物種名稱
GetSpeciesNameCompliment [From.GetSpeciesNameCompliment] 用當前作用域物種的名字發出一條讚美
GetSpeciesNameInsult [From.From.GetSpeciesNameInsult] 用當前作用域物種的名字發出一條侮辱
GetSpeciesNamePlural [This.GetSpeciesNamePlural] 當前作用域物種名稱的複數形式
GetSpeciesNamePluralCompliment [Root.SpeciesNamePluralCompliment] 用當前作用域物種的複數稱謂發出一條讚美
GetSpeciesNamePluralInsult [From.SpeciesNamePluralInsult] 用當前作用域物種的複數稱謂發出一條侮辱
GetSpeciesHandName [From.GetSpeciesHandName] 描述當前作用域物種的手的詞
GetSpeciesMouthName [From.GetSpeciesMouthName] 描述當前作用域物種的嘴的詞
GetSpeciesOrganName [From.GetSpeciesOrganName] 描述當前作用域物種的內部器官的詞
GetSpeciesSpawnName [Root.GetSpeciesSpawnName 描述當前作用域物種的小孩的詞
GetSpeciesSpawnNamePlural [Root.GetSpeciesSpawnNamePlural 當前作用域物種的小孩的複數稱謂
GetStarName [Root.Capital.GetStarName] 當前作用域所在的恆星的名字
GetHerHim [admiral.GetHerHim] 按角色的性別輸出「他」或「她」
GetSheHe [abducted_leader.GetSheHe] 按角色的性別輸出「他」或「她」
GetSheHeCap [abducted_leader.GetSheHeCap] 按角色的性別輸出「他」或「她」【與上條區別在於英文首字母大寫】
GetHomeWorldName [Root.GetHomeWorldName] 選中國家的母星名稱
GetHerHis [admiral.GetHerHis] 按角色的性別輸出「他的」或「她的」
GetHerHisCap [admiral.GetHerHisCap] 按角色的性別輸出「他的」或「她的」【與上條區別在於英文首字母大寫】
LastKilledCountryName [LastKilledCountryName] 輸出上一個所滅亡的國家名稱
補丁3.1新增的本地化指令
GetSpeciesFossilName
GetSpeciesFossilNamePlural
GetSpeciesRemnantName
GetSpeciesRemnantNamePlural
Species
GetFossilName
GetFossilNamePlural
GetRemnantName
GetRemnantNamePlural

顏色代碼[編輯 | 編輯原始碼]

遊戲內的顏色代碼

顏色代碼以§作開頭(Windows快捷鍵:ALT+0167),後面跟著一個單一字母來指定所用的顏色,直到檢測到另一個顏色代碼,或以§!結尾為止。指令$代表著當前顯示的變量的顏色(不是字符串定義,詳見代碼$ ),也能通過用|以及顏色代碼字母來隔開一對閉合的$ 以指定顏色,如:$AGE|Y$

你也可以通過在顏色代碼字母中加入一個DC1 UTF-8字符來改變遊戲中的文本顏色。請注意這樣做後如果沒有把顏色改回默認,你可能會不小心使所有後續文本著色。 §RR§Sa§Hi§Yn§Gb§Bo§Mw§! 會被顯示成:Rainbow

代碼 顏色 原版用法
W 白色 外交態度
T 淺灰色 所有文本的標準顏色
L 棕色 傳說、背景故事、角色扮演元素
P 淡紅色 在描述和事件文本中高亮顯示充滿敵意的文本
R 紅色 負面修正
S 暗橙色 含蓄的高亮文本
H 橙色 高亮文本
Y 黃色 欠佳或中性的修正
G 綠色 正面修正
E 青色 大塊文本
B 藍色 影響人口的事件效果
M 紫色 稀有科技
! 默認 回到上一次顏色變化之前的顏色

代碼$[編輯 | 編輯原始碼]

$ 用於圈定在別處定義的字符串(或變量),將其拓展到當前字符串中,或GUI元素的系統統計數據里。

數字格式[編輯 | 編輯原始碼]

| 字符也能被用於調整數字的格式。$VALUE|*x$會將VALUE的小數點限定到x位。

# 范例 = 100
"$范例|*0$" # 100
"$范例|*1$" # 100.0

代碼£[編輯 | 編輯原始碼]

代碼£用於各種系統圖標的名稱,包括能量幣、礦物、影響力,和三種研究類型(工程學、物理學、社會學)。還有更多沒有列在此處,比如£ship_stats_hitpoints\armor\shield££fleet_template_size£以及£trigger_yes\no£ 與其他種種。可以用類似於Notepad++的在文件中查找功能來搜索『£』字符,以找到特定的某樣東西。記住代碼£必須包圍著你所感興趣的標籤,例如£energy£。(沒有英鎊符號的Windows用戶可以在鍵盤上按Alt + 0163

其同時也支持多框架(如果子來源有的話),例如:£leader_skill|3£會渲染一個指定技能等級的圖標。

代碼 圖片
£energy£ Energy Credits.png
£minerals£ Minerals.png
£food£ Food.png
£influence£ Influence.png
£stability£ Stability.png
£unity£ Unity.png
£alloys£ Alloys.png
£trade_value£ Trade value.png
£physics£ Physics Research.png
£society£ Society Research.png
£engineering£ Engineering Research.png
£pops£ Pop.png
£happiness£ Happiness.png
£opinion£ Opinion.png
£empire£ Empire Modifier.png
£military_ship£ Military Ship (icon).png
£military_power£ Offensive value.png
£blocker£ Tile Blocker.png
£time£ Time.png
£planetsize£ Planet Size.png

£自定義圖標[編輯 | 編輯原始碼]

你可以創建在遊戲內與上方圖標表現一樣的文本圖標,通過把圖標保存在<遊戲根目錄>/gfx/interface/icons/text_icons 里。標準的文本圖標是尺寸為16x16像素點大小的.dds文件。為了在文本中引用你的圖標,你需要像定義事件圖片一樣定義它。將以下文本文檔以.gfx的格式保存到<遊戲根目錄>/interface/ 里可以定義如下方所示的任何自定義修正:

spriteTypes = {
   spriteType = {
        name = "GFX_text_worker_produces_mult"
        texturefile = "gfx/interface/icons/text_icons/mod_planet_jobs_worker_produces_mult.dds"
    }

你可以通過多寫幾個spriteType =區塊來關聯更多的圖標。這些全部都應該處在spriteTypes =(多了一個s)的區塊中。

其名稱必須以GFX_text_為前綴。不過,如果是為了在本地化文件中引用它,用£worker_produces_mult£(沒有前綴)就行,它會照常在遊戲文本中出現。

基於斜槓的代碼[編輯 | 編輯原始碼]

兩種可用的斜槓代碼分別是\n\t
\n等價於按下回車鍵並換行,除非它在上述代碼的內部。
\t生成一個制表符。

斜槓同時也能用做將特殊字符還原為文本字符,比如\"會讓字符串帶上一個雙引號,而不是結束字符串。

格式指導[編輯 | 編輯原始碼]

原版活動、修正和所有其他類型的本地化都遵循一套標點符號與大小寫的規範。下方表格標出了原版英文本地化中用到的一些規則,使玩家自訂的內容能更好地融入其中。表格並不完善,但可用作大多數常用文本的快捷備忘單。給出的字符數量限制並不是硬性要求,不過視位置而定超出限制可能導致文本被截斷,破壞UI布局,或單單溢出框外顯得難看。

位置 大小寫 標點符號 字數限制 範例
事件名稱 每個單詞首字母大寫 50 "Exotic Woodwind"
事件描述 句首字母大寫 標準 2000 "Music has taken many forms among the beings we have encountered since leaving [Root.GetHomeWorldName], and the methods and preferences continue to baffle us. Sometimes alien […] Whatever this instrument is, it’s unlike any of our own."
事件選項 句首字母大寫 句尾終止式 70 "An excellent time to learn more about their culture.", "Let us be careful and study this instrument.", "The colony is part of our future. It stays."
特質/修正/建築/思潮等名稱 每個單詞首字母大寫 30 "Building Cost", "Massive Crater", "Very Strong"
特質/修正/建築/思潮等描述 句首字母大寫 標準 200 "The impact site of the meteorite which brought Lithoids to this planet.", "Members of this species possess a strength that almost defies the laws of physics."
UI按鈕 兩者兼有 取決於UI "Withdraw"
UI通知 每個單詞首字母大寫 取決於UI "Relic Activation Available"

參考[編輯 | 編輯原始碼]

帝國 帝國思潮政府 • 國民理念 • 起源承諾議程傳統 • 飛升天賦法令政策遺珍科技自定義帝國
人口 崗位派系
領袖 領袖領袖特質
物種 物種物種特質
行星 行星行星特徵 • 軌道礦藏建築 • 區劃行星決議
星系 星系恆星基地巨型結構蟲洞 • 星門地圖
艦隊 艦隊艦船 • 部件
地面戰 陸軍轟炸姿態
外交 外交 • 聯邦 • 星海共同體評價修正宣戰理由 • 戰爭目標
事件 事件異常現象特殊項目考古遺址
遊玩 遊玩定義研究 • 經濟遊戲開局
動態修改 動態指令效果觸發條件作用域修正變量AI
媒體/本地化 Maya 導出器圖形肖像旗幟事件圖片界面圖標音樂本地化
Other 控制台命令存檔編輯Steam 創意工坊模組製作教程