模组:模板字符串

来自Stardew Valley Wiki
跳到导航 跳到搜索

目录

本页面描述了 模板字符串,即一种内置的构建显示文本的方法,该文本可以包含任意组合的纯文本、翻译和占位符值。

格式

综述

您只能在允许使用模板字符串的数据字段中使用模板字符串(这些数据字段会在本百科文档中给出)。

一个模板字符串可以包括纯文本和下述标记的任意组合。例如:

"Dialogue": "欢迎光临皮埃尔的杂货店![FarmName]最近怎么样?"

当使用Content Patcher时,你可以在字符串的任何位置使用其标记(包括方括号内部);它们将在游戏解析字符串之前完全展开。例如,"{{Spouse}} 会喜欢 [ArticleFor [SuggestedItem]] [SuggestedItem]!"会输出"Abigail would love an Apple!"(此处放置英文原文便于理解)。

标记格式

“标记”是预定义的、用于生成文本的占位符,它们包裹在方括号中。标记名称并不大小写敏感,所以[LocalizedText][LOCALIZEDTEXT]是相同的标记。

例如,下面内容会在英语环境下生成"Welcome to Pierre's! This is raw text":

"Dialogue": "[LocalizedText Strings\StringsFromCSFiles:ShopMenu.cs.11488] {{i18n: some-translation}}"

标记参数格式

标记可以包含参数(参数也可包含标记)。在上面的例子中,LocalizedText具有一个参数(欲显示的翻译键)。参数使用空格分隔,因此需要使用EscapedText传入包含空格的参数:

"Dialogue": "[LocalizedText [EscapedText Strings\BundleNames:Quality Fish]]"

标记

下面列出了原版游戏支持的标记:

标记格式 输出
[AchievementName <id>] 某个成就在当前语言下的名称。成就参见Data/Achievements。例如,[AchievementName 5]会在英语环境下输出A Complete Collection
[ArticleFor <word>] 英语中的不定冠词(a or an)。在其他语言环境下为空白。 例如,[ArticleFor apple] apple输出an apple
[CharacterName <name>] 根据角色的内部名称显示其在当前语言下的名词。
[DayOfMonth] 显示当月几日,例如在春5日显示5
[EscapedText]
[EscapedText <text>]
将文本片段视为单个参数,所以即使该片段为空或包含空格,也能被安全地传入其他标记中。

例如,SpouseFarmerText需要空格隔开的两个参数。下面的代码将向第一个参数传入空字符串,向第二个参数传入含空格的文本:

[SpouseFarmerText [EscapedText] [EscapedText spouse 28 63 2]]
[FarmerUniqueID] 目标玩家唯一的内部多人ID。
[FarmName] 当前存档的农场名(不包含后面的“农场”二字)
[FarmerStat <key>] 当前玩家的被跟踪的状态。欲获得详细状态列表,参见PLAYER_STAT game state query

例如:

"你目前已经走了[FarmerStat stepsTaken]步了。"
[GenderedText <male text> <female text>] 根据玩家的性别显示不同文本。若包含空格,须使用EscapedText
[ItemName <id> [fallback text]] 根据一个物品的限定ID或非限定ID,显示其在当前语言下的物品名称。例如,[ItemName (O)128]会在中文语境下显示“河豚”。

若该物品不存在,且指定了[fallback text]参数,则输出该参数。否则输出Error Item (<id>)

[LocalizedText <string key>]
[LocalizedText <string key> <token values>+]
通过翻译键给出翻译后的文本。如果翻译中包含诸如{0}的占位符,您可以在字符串键后面添加其值。
[LocationName <location ID>] 通过Data/Locations中的地点ID给出翻译后的地点名。
[MovieName <id>] 通过Data/Movies中的电影ID给出翻译后的的电影名。例如,[MovieName spring_movie_0]会在中文语境下输出“勇敢的小树苗”。
[NumberWithSeparators <number>] 基于当前语言为数字添加千位分隔符。例如,[NumberWithSeparators 5000000]会在英语环境下输出“5,000,000”。
[PositiveAdjective] Strings\Lexicon数据素材的RandomPositiveAdjective_PlaceOrEvent项中随机取一个形容词。
[Season] 当前的季节名称,例如spring
[SpecialOrderName <id>] 显示Data/SpecialOrders中特别任务经过翻译的名称。若此特别任务正在进行,则显示其在任务日志中的名称。例如,[SpecialOrder Caroline]会在中文环境下输出“岛屿食材”。
[SpouseFarmerText <spouse is farmer text> <spouse is NPC text>] 根据目标玩家的配偶是玩家或村民这两种情况,显示对应的文本。若文本包含空格,需要使用EscapedText
[SpouseGenderedText <male text> <female text>] 相当于GenderedText,但基于玩家配偶的性别。
[SuggestedItem [interval] [sync key]] (仅适用于商店界面中的文本) 随机选取当前商店售卖的物品的名字。

[interval]代表时间间隔,它取tick, day, season, year之一。[sync key]是字符串。在[interval]指定的时间间隔中,使用相同的[sync key]会返回相同的结果(而非重新随机选取商品),即使对于多人游戏中的不同玩家亦是如此。若省略,[interval]默认为day,而[sync key]默认为当前打开的商店ID。

[ToolName <id> [upgrade level]] 给出工具的译名,包括其等级名(若指定了等级名)。例如,[ToolName (T)IridiumAxe]会在中文环境下输出“铱斧头”。

C#模组的扩展

  • C#模组通过调用TokenParser.RegisterParser("tokenName", ...)可以自定义标记。为避免冲突,自定义标记名称应遵循unique string ID惯例。


  • TokenStringBuilder提供了创建模板字符串的方法。例如, TokenStringBuilder.ItemNameFor(item)会创建形如[ItemName (O)128][ItemNameWithFlavor SmokedFish (O)128]的字符串。