模组:模板字符串
← 目录
页面仍需完善
该页面由于下列原因被标记为不完善:
|
本页面描述了 模板字符串,即一种内置的构建显示文本的方法,该文本可以包含任意组合的纯文本、翻译和占位符值。
格式
综述
您只能在允许使用模板字符串的数据字段中使用模板字符串(这些数据字段会在本百科文档中给出)。
一个模板字符串可以包括纯文本和下述标记的任意组合。例如:
"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]会在中文语境下显示“河豚”。
若该物品不存在,且指定了 |
[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] ]
|
(仅适用于商店界面中的文本) 随机选取当前商店售卖的物品的名字。
|
[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]
的字符串。