群星
ParaWikis
最新百科
都市天际线2百科
英雄无敌3百科
维多利亚3百科
奇妙探险队2百科
罪恶帝国百科
英白拉多:罗马百科
热门百科
群星百科
欧陆风云4百科
十字军之王2百科
十字军之王3百科
钢铁雄心4百科
维多利亚2百科
ParaWikis
申请建站
ParaWikis
ParaCommons
最近更改
随机页面
加入QQ群
工具
链入页面
相关更改
特殊页面
页面信息
页面值
阅读
编辑
编辑源代码
查看历史
讨论
编辑“
模组本地化
”
Drpepper023
(
讨论
|
贡献
)
2022年6月6日 (一) 02:04的版本
(
→检索用文本
)
(
差异
)
←上一版本
|
最后版本
(
差异
) |
下一版本→
(
差异
)
警告:您正在编辑的是本页面的旧版本。
如果您发布该更改,该版本后的所有更改都会丢失。
警告:
您没有登录。如果您做出任意编辑,您的IP地址将会公开可见。如果您
登录
或
创建
一个账户,您的编辑将归属于您的用户名,且将享受其他好处。
反垃圾检查。
不要
加入这个!
{{Version|3.1}} 本地化是指在游戏内窗口实际呈现给玩家的文本,如事件、菜单、武器、故事等。本地化文件以.yml的格式保存在localisation/folder路径底下,且以[[wikipedia:UTF-8-BOM|UTF-8-BOM]]的格式编码。[[wikipedia:.yml|.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编码保存它。类似[[wikipedia:Notepad++|Notepad++]]和[[wikipedia:Visual Studio Code|Visual Studio Code]]这样的文本编辑器能让你手动将文件保存为UTF-8-BOM编码格式。 * 文件名必须以''“_l_<语言名>”''结尾,否则无法被读取。 * 任何本地化文件的第一行都必须是<code>l_<language>:</code>,否则无法被读取。 * 范例文件名:<code>mod_buildings_l_english.yml</code> 将YML文件命名为与一个原版YML文件相同会导致原版被覆盖。这么做并不推荐, 除非你打算改写文件内(几乎)所有的条目。本地化条目可以通过保存到“Replace”文件夹以单独进行覆盖,详见[[#Overwriting Vanilla Text|覆盖原版文本]]。 遗憾的是,游戏并没有适配模组的语言回滚功能。这意味着当本地化键值缺失时,键值会直接以文本形式呈现。因此,对应的做法是先直接把英语文件复制到其他所有语言里(改成合适的标题)。 === 文件编码 === * 使用一个文本编辑器打开YML文件。推荐使用类似[https://www.notepad-plus-plus.org/ Notepad++]和[https://code.visualstudio.com/ Visual Studio Code] 这样的编辑器,如果上述软件不可用的话,普通的记事本也行。 * 将文件转码成UTF-8-BOM的格式。 * 使用Notepad++时,前往菜单栏,打开''编码'' 界面。 * 使用Visual Studio Code时,前往右下角并点击编码(默认为<code>UTF-8</code>),再点击保存编码。作为替代,也可以通过改变设置来让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内部用于跟踪翻译用的。<ref>https://twitter.com/Martin_Anward/status/1039175213773144066</ref> * 在出现任何本地化键值之前,文件必须先包含<code>l_english:</code> (或其他语言的相等形式)。 *<code>l_english:</code>(或相等)之后的所有条目必须以空格开始(空格或tab都行)。 * 所有要在游戏内显示的文本都被双引号所包裹。想在游戏内显示双引号的话,请在双引号前面加上反斜杠(例如:<code>text \"name\"</code>)。 * 注意以下这些unicode字符在本地化文件中是不可用的,会生成一个“?”:<code>„ “ ‚ ‘ – ” ’ … —</code> == 覆盖原版文本 == 想要覆盖原版本地化键值(或其他模组的键值)时,在你的“localisation”文件夹底下创建一个名为“replace”的文件夹。该文件夹中的本地化文件的读取比其他所有本地化文件都晚,能覆盖掉任何重复的键值。这样做可以避免覆盖所有本地化文件,每个键值条目会单独被最后加载的文件所覆盖。不通过“replace”文件夹来覆盖本地化是可行的,但并不可靠。 == 方括号指令 == 方括号指令(范围本地化声明) 用方括号(<code>[ ]</code>)包裹,以一个主对象范围为开头,一段检索用文本为结尾。中间可以包含一个或数个次对象范围。目标之间用小数点号(.)分隔。文本检索可以提前定义(参考下方的例子),可以引用对象范围中声明的变量,也可以是段scripted_loc【即带脚本的语言文件】(参考common/scripted_loc底下的文件)。在写“''scripted_loc''”条目时,要注意这些条目本身不能用方括号指令(例如:一段带有<code>[Root.GetName]</code>的scripted_loc会直接原封不动地显示<code>[Root.GetName]</code>)。 注意:如果你想在[[scripted effect|脚本效果]]或[[scripted trigger|触发器]]中使用例如 <code>log = [This.GetName]</code> 这样的本地化指令,你得把它写成<code>\\[This.GetName]</code>,不然就会出错(至少会在效果中第二次使用时出现)。 大多数情况下可以通过<code>'[Scope.my_variable]'</code>来获取变量的赋值,以及通过<code>'[Scope.my_date_flag]'</code>来获取保存的日期。<sup>([[patch 3.1|''从3.1起'']])</sup> 两个连续的左方括号 <code>'[['</code> 会跳过指令,使一个单独的方括号呈现在文本里。例如文件中的<code>'[[范例]'</code> 会在游戏中显示为'[范例]'。 有几条指令是无范围的:<code>GetDate, GetMidGameDate, GetLateGameDate, GetYear, LastKilledCountryName</code>。 下方表格只记录了一部分的硬编码范围本地化指令(也没有涉及任何脚本语言文件)。一份更详尽的代码名单可以在<code>Stellaris\logs\script_documentation\localizations.log</code>里找到。 ==== 主对象范围 ==== {| class="wikitable" |- ! 指令 !! 使用范例 !! 注释 |- | 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)]]标签要在本地化文件中声明<code>event_target:</code>后才能使用。 |- ! colspan=3 style="font-size:small"| 外交活动 |- | Actor || [Actor.GetAllianceName] || 用于外交回应消息,发起行动的一方 |- | Recipient || [Recipient.GetName] || 用于外交回应消息,作为行动目标的一方 |- | Third_party || [Third_party.GetName] || 用于外交回应消息,行动中牵涉到的第三方 |} ==== 次对象范围 ==== {| class="wikitable" |- ! 指令 !! 使用范例 !! 注释 |- ! colspan=3 style="font-size:small"| 国家活动:首都/统治者/继承人/物种/联邦 |- | Capital || [Root.Capital.GetName] || 当前国家或星区的首都 |- | Leader|| [Root.Leader.GetName] || 当前对象范围的领导人(<small>舰队、国家、联邦、人口派系、第一次接触、情报行动、间谍网、星区</small>) |- ! colspan=3 style="font-size:small"| 战争活动 |- | MainAttacker || [This.MainAttacker.GetAllianceName] || 当前对象范围的主进攻者(对象范围必须是战争),在战争名称样式中使用。 |- | MainDefender || [This.MainDefender.GetSpeciesName] || 当前对象范围的主防御者(对象范围必须是战争),在战争名称样式中使用。 |- ! colspan=3 style="font-size:small"| 星球活动:拥有者/所在星系/卫星/星区 |- | Owner || [Root.Owner.GetName] || 当前对象范围的拥有者 |- | System || [Root.System.GetName] || 主对象范围所在的星系 |- | Planet || [Root.Planet.GetName] || 当前对象范围所处的星球(<small>人口、陆军、考古遗址、资源点、巨构建筑</small>) |} === 检索用文本 === {| class="wikitable" |- ! 指令 !! 使用范例 !! 注释 |- | 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] || 输出上一个所灭亡的国家名称 |} ;[[Patch 3.1|补丁3.1]]新增的本地化指令 GetSpeciesFossilName GetSpeciesFossilNamePlural GetSpeciesRemnantName GetSpeciesRemnantNamePlural Species GetFossilName GetFossilNamePlural GetRemnantName GetRemnantNamePlural == 颜色代码 == [[File:Color codes in-game.png|thumb|Color codes in-game]] 颜色代码以<code>§</code>作开头(Windows快捷键:ALT+0167),后面跟着一个单一字母来指定所用的颜色,直到检测到另一个颜色代码,或以<code>§!</code>结尾为止。指令'''<code>$</code>'''代表着当前显示的变量的颜色(不是字符串定义,详见''[[#$ Codes|代码$]]'' ),也能通过用'''<code>{{!}}</code>'''以及颜色代码字母来隔开一对闭合的'''<code>$</code>''' 以指定颜色,如:<code>$AGE|Y$</code> 你也可以通过在颜色代码字母中加入一个DC1 UTF-8字符来改变游戏中的文本颜色。请注意这样做后如果没有把颜色改回默认,你可能会不小心使所有后续文本着色。 <code>§RR§Sa§Hi§Yn§Gb§Bo§Mw§!</code> <!-- Editor's note: You cannot get dc1 that easily, can't use   just to preview it --> 会被显示成:<span style="color:#D2483B">R</span><span style="color:#B07921">a</span><span style="color:#D69123">i</span><span style="color:#D2D62C">n</span><span style="color:#23BF20">b</span><span style="color:#2B8ED9">o</span><span style="color:#8B2DCB">w</span> {| class="wikitable sortable" ! 代码 !! 颜色 !! 原版用法 |- | W || <b style="color:#DCDCDC">白色</b> || 外交态度 |- | T || <b style="color:#D9D9D9">浅灰色</b> || 所有文本的标准颜色 |- | L || <b style="color:#9E8F75">棕色</b> || 传说、背景故事、角色扮演元素 |- | P || <b style="color:#BF5E5E">淡红色</b> || 在描述和事件文本中高亮显示充满敌意的文本 |- | R || <b style="color:#D2483B">红色</b> || 负面修正 |- | S || <b style="color:#B07921">暗橙色</b> || 含蓄的高亮文本 |- | H || <b style="color:#D69123">橙色</b> || 高亮文本 |- | Y || <b style="color:#D2D62C">黄色</b> || 欠佳或中性的修正 |- | G || <b style="color:#23BF20">绿色</b> || 正面修正 |- | E || <b style="color:#73D9B0">青色</b> || 大块文本 |- | B || <b style="color:#2B8ED9">蓝色</b> || 影响人口的事件效果 |- | M || <b style="color:#8B2DCB">紫色</b> || 稀有科技 |- | ! || 默认 || 回到上一次颜色变化之前的颜色 |} == 代码$ == '''$''' 用于圈定在别处定义的字符串(或变量),将其拓展到当前字符串中,或GUI元素的系统统计数据里。 == 数字格式 == | 字符也能被用于调整数字的格式。<code>$VALUE|*x$</code>会将<code>VALUE</code>的小数点限定到<code>x</code>位。 # 范例 = 100 "$范例|*0$" # 100 "$范例|*1$" # 100.0 == 代码£ == 代码£用于各种系统图标的名称,包括能量币、矿物、影响力,和三种研究类型(工程学、物理学、社会学)。还有更多没有列在此处,比如<code>£ship_stats_hitpoints\armor\shield£</code>、<code>£fleet_template_size£</code>以及<code>£trigger_yes\no£</code> 与其他种种。可以用类似于Notepad++的在文件中查找功能来搜索‘£’字符,以找到特定的某样东西。记住代码£必须包围着你所感兴趣的标签,例如<code>'''£'''energy'''£'''</code>。(没有英镑符号的Windows用户可以在键盘上按<code>Alt + 0163</code>) 其同时也支持多框架(如果子来源有的话),例如:<code>£leader_skill|3£</code>会渲染一个指定技能等级的图表。 {| class="wikitable sortable" |- ! 代码 !! 图片 |- | £energy£ ||[[File:Energy Credits.png|40px]] |- | £minerals£ ||[[File:Minerals.png|40px]] |- | £food£ ||[[File:Food.png|40px]] |- | £influence£ ||[[File:Influence.png|40px]] |- | £stability£ ||[[File:Stability.png|40px]] |- | £unity£ ||[[File:Unity.png|40px]] |- | £alloys£ ||[[File:Alloys.png|40px]] |- | £trade_value£ ||[[File:Trade value.png|40px]] |- | £physics£ ||[[File:Physics Research.png|40px]] |- | £society£ ||[[File:Society Research.png|40px]] |- | £engineering£ ||[[File:Engineering Research.png|40px]] |- | £pops£ ||[[File:Pop.png|40px]] |- | £happiness£ ||[[File:Happiness.png|40px]] |- | £opinion£ ||[[File:Opinion.png|40px]] |- | £empire£ ||[[File:Empire Modifier.png|40px]] |- | £military_ship£ ||[[File:Military Ship (icon).png|40px]] |- | £military_power£ ||[[File:offensive_value.png|40px]] |- | £blocker£ ||[[File:Tile Blocker.png|40px]] |- | £time£ ||[[File:Time.png|40px]] |- | £planetsize£ ||[[File:Planet Size.png|40px]] |} == £自定义图标 == 你可以创建在游戏内与上方图标表现一样的文本图标,通过把图标保存在''<游戏根目录>/gfx/interface/icons/text_icons'' 里。标准的文本图标是尺寸为16x16像素点大小的.dds文件。为了在文本中引用你的图标,你需要像定义[[event pictures|事件图片]]一样定义它。将以下文本文档以.gfx的格式保存到''<游戏根目录>/interface/'' 里可以定义如下方所示的任何自定义修正: <pre> spriteTypes = { spriteType = { name = "GFX_text_worker_produces_mult" texturefile = "gfx/interface/icons/text_icons/mod_planet_jobs_worker_produces_mult.dds" }</pre> 你可以通过多写几个<code>spriteType =</code>区块来关联更多的图标。这些全部都应该处在<code>spriteTypes =</code>(多了一个s)的区块中。 其名称必须以<code>GFX_text_</code>为前缀。不过,如果是为了在本地化文件中引用它,用<code>£worker_produces_mult£</code>(没有前缀)就行,它会照常在游戏文本中出现。 == 基于斜杠的代码 == 两种可用的斜杠代码分别是<code>\n</code>和<code>\t</code>。<br> <code>\n</code>等价于按下回车键并换行,除非它在上述代码的内部。<br> <code>\t</code>生成一个制表符。<br><br> 斜杠同时也能用做将特殊字符还原为文本字符,比如<code>\"</code>会让字符串带上一个双引号,而不是结束字符串。 == 格式指导 == 原版活动、修正和所有其他类型的本地化都遵循一套标点符号与大小写的规范。下方表格标出了原版英文本地化中用到的一些规则,使玩家自订的内容能更好地融入其中。表格并不完善,但可用作大多数常用文本的快捷备忘单。给出的字符数量限制并不是硬性要求,不过视位置而定超出限制可能导致文本被截断,破坏UI布局,或单单溢出框外显得难看。 {| class="wikitable" |- ! 位置 !! 大小写 !! 标点符号 !! 字数限制 !! 范例 |- | 事件名称 || 每个单词首字母大写 || 无 || 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" |} == 参考 == <references /> {{ModdingNavbox}} [[Category:模组制作]]
摘要:
请注意您对群星百科的所有贡献都被认为是在知识共享署名-非商业性使用-相同方式共享下发布,请查看在
群星百科:版权
的细节。如果您不希望您的文字被任意修改和再散布,请不要提交。
您同时也要向我们保证您所提交的内容是您自己所作,或得自一个不受版权保护或相似自由的来源。
未经许可,请勿提交受版权保护的作品!
为防止机器编辑,请完成下方验证
取消
编辑帮助
(在新窗口中打开)
本页使用的模板:
Template:Clear
(
编辑
)
Template:ModdingNavbox
(
编辑
)
Template:Navbox
(
编辑
)
Template:Navboxgroup
(
编辑
)
Template:Version
(
编辑
)
×
登录
密码
记住登录
加入群星百科
忘记密码?
其他方式登录