模组:模板字符串

来自Stardew Valley Wiki
VulpesLucida讨论 | 贡献2024年9月21日 (六) 02:56的版本 (建立内容为“← 目录 {{翻译}} 本页面描述了 '''模板字符串''',即一种内置的构建显示文本的方法,该文本可以包含任意…”的新页面)
(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)
跳到导航 跳到搜索

目录

Robin building.png
“我这里还有很多事情需要处理。”
— 罗宾

不完整的翻译

本文或部分尚未完全翻译成中文。 欢迎您通过编辑帮助其建设。
最后编辑VulpesLucida于2024-09-21 02:56:57.

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

格式

综述

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

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

"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>] The translated display name for a location given its ID in Data/Locations.
[MovieName <id>] The translated display name for a movie from Data/Movies. For example, [MovieName spring_movie_0] will output The Brave Little Sapling in English.
[NumberWithSeparators <number>] Format a number with thousands separators based on the current language. For example, [NumberWithSeparators 5000000] will output 5,000,000 in English.
[PositiveAdjective] A random adjective from the Strings\Lexicon data asset's RandomPositiveAdjective_PlaceOrEvent entry.
[Season] The current season name, like spring.
[SpecialOrderName <id>] The translated display name for a special order from Data/SpecialOrders. If the special order is currently active, it'll show the same name shown in the quest log. For example, [SpecialOrder Caroline] will output Island Ingredients in English.
[SpouseFarmerText <spouse is farmer text> <spouse is NPC text> Show a different text depending on whether the target player's spouse is a player or NPC. If the text contains spaces, you'll need to escape them using EscapedText.
[SpouseGenderedText <male text> <female text>] Equivalent to GenderedText, but based on the gender of the player's NPC or player spouse instead.
[SuggestedItem [interval] [sync key]] (For shops only.) The name of a random item currently available in the shop stock.

The result will be identical for all queries with the same [sync key] during the given [interval] (one of tick, day, season, year), including between players in multiplayer mode. If omitted, they default to day and the shop ID respectively.

[ToolName <id> [upgrade level]] The translated display name for a tool, including its upgrade level if specified. For example, [ToolName (T)IridiumAxe] will output Iridium Axe in English.

Extensibility for C# mods

  • C# mods can define custom tokens by calling TokenParser.RegisterParser("tokenName", ...). To avoid conflicts, custom token names should apply the unique string ID conventions.
  • The TokenStringBuilder class provides methods for creating token strings. For example, TokenStringBuilder.ItemNameFor(item) will produce a string like [ItemName (O)128] or ItemNameWithFlavor SmokedFish (O)128].