Line 3: |
Line 3: |
| ← [[Modding:Index|Index]] | | ← [[Modding:Index|Index]] |
| | | |
− | ==From [[Modding:Migrate to Stardew Valley 1.6]]==
| + | This page documents '''tokenizable strings''', a built-in way to build display text which can contain any combination of literal text, translations, and placeholder values. |
− | ===Tokenizable string format===
| |
− | Stardew Valley 1.6 adds support for literal strings that contain tokens. These are only usable in specific fields (their docs will say 'tokenizable string' with a link to this section).
| |
| | | |
− | ====Literal text==== | + | ==Overview== |
− | Previously you often needed to load text from a [[Modding:Modder Guide/Game Fundamentals#String keys|string key]] in data assets. With this new format, you can use the literal text directly in the asset instead (including Content Patcher tokens):
| + | ===Overview=== |
| + | You can only use tokenizable strings in data fields that specifically allow them (which will be indicated in the wiki docs). |
| | | |
| + | A tokenizable string can contain any combination of literal text and tokens ([[#Tokens|listed below]]). For example: |
| <syntaxhighlight lang="js"> | | <syntaxhighlight lang="js"> |
− | // before
| + | "Dialogue": "Welcome to Pierre's! How is [FarmName] doing?" |
− | "Dialogue": "Strings\\StringsFromCSFiles:ShopMenu.cs.11488", | + | </syntaxhighlight> |
| + | |
| + | When using [[Modding:Content Patcher|Content Patcher]], you can use its tokens anywhere in the string (including within square brackets); they'll be expanded before the game parses the string. For example, <code><nowiki>"{{Spouse}} would love [ArticleFor [SuggestedItem]] [SuggestedItem]!"</nowiki></code> would output something like "''Abigail would love an Apple!''". |
| | | |
− | // after: literal text supported
| + | ===Token format=== |
− | "Dialogue": "Welcome to Pierre's!",
| + | A ''token'' is a predefined placeholder which produces text, wrapped in square brackets. Token names are not case-sensitive, so <samp>[LocalizedText]</samp> and <samp>[LOCALIZEDTEXT]</samp> are equivalent. |
| | | |
− | // after: literal text with Content Patcher tokens
| + | For example, this will show a message like "''Welcome to Pierre's! This is raw text''": |
− | "Dialogue": "Welcome to Pierre's, {{PlayerName}}! {{i18n: translatable-text}}", | + | <syntaxhighlight lang="js"> |
| + | "Dialogue": "[LocalizedText Strings\StringsFromCSFiles:ShopMenu.cs.11488] {{i18n: some-translation}}" |
| </syntaxhighlight> | | </syntaxhighlight> |
| | | |
− | ====Tokens==== | + | ===Token argument format=== |
− | You can inject tokens using square brackets. For example, <code>"[LocalizedText Strings\StringsFromCSFiles:ShopMenu.cs.11488] This is raw text"</code> will show something like "''Welcome to Pierre's! This is raw text''". Token names are not case-sensitive.
| + | A token can optionally have arguments (which can in turn contain tokens). In the above example, the <samp>LocalizedText</samp> takes one argument (the translation key to display). Arguments are space-delimited, so you need to use <samp>EscapedText</samp> to pass an argument containing spaces: |
| + | <syntaxhighlight lang="js"> |
| + | "Dialogue": "[LocalizedText [EscapedText Strings\BundleNames:Quality Fish]]" |
| + | </syntaxhighlight> |
| | | |
− | Here are the supported tokens: | + | ==Tokens== |
| + | Here are the tokens provided by the base game: |
| {| class="wikitable" | | {| class="wikitable" |
| |- | | |- |
Line 84: |
Line 91: |
| |} | | |} |
| | | |
− | When passing an input argument for tokens like <samp>ArticleFor</samp>, the input can contain its own nested tokens. For example, <code>"[ArticleFor [SuggestedItem]] [SuggestedItem]"</code> would output something like ''an Apple''.
| + | ==Extensibility for C# mods== |
− | | |
− | If you're using [[Modding:Content Patcher|Content Patcher]], you can use its tokens anywhere in the string (including within square brackets); they'll be expanded before the game parses the string. For example, <code><nowiki>"{{Spouse}} would love [ArticleFor [SuggestedItem]] [SuggestedItem]!"</nowiki></code> would output something like "''Alexa would love an Apple!''".
| |
− | | |
− | ====Extensibility====
| |
| C# mods can define custom tokens by calling <code>TokenParser.RegisterParser("tokenName", ...)</code>. To avoid conflicts, prefixing custom condition names with your mod ID (like <samp>Example.ModId_TokenName</samp>) is strongly recommended. | | C# mods can define custom tokens by calling <code>TokenParser.RegisterParser("tokenName", ...)</code>. To avoid conflicts, prefixing custom condition names with your mod ID (like <samp>Example.ModId_TokenName</samp>) is strongly recommended. |
| | | |
| [[Category:Modding]] | | [[Category:Modding]] |