Changes

Jump to navigation Jump to search
expand and reorganize into doc page
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]]
translators
8,445

edits

Navigation menu