Translation
Message resource for one locale, with contexts and plural forms.
Stores translations for the locale specified by Locale. Messages are identified by source key and context; plural forms are selected by the locale rules or PluralRulesOverride. Form selection does not insert the count into the text.
Loading a Translation does not register it for global lookup. Register the resource in project translation settings or with TranslationServer.AddTranslation. Use TranslationServer.Translate or TranslatePlural for lookup with the current and fallback locales; a direct GetMessage queries this resource.
Declarations checked against C# SDK 1.0.0. Expand a name to see declarations and documentation.
Constructors1
TranslationConstructor
public Translation();Creates an owned empty catalog with Locale="en" and empty PluralRulesOverride. Does not register it with TranslationServer or change the project language. Dispose the resource after use.
Properties3
LocaleProperty
public string Locale { get; set; }Resource locale, default en. The setter standardizes its identifier and clears cached rules when no explicit override exists. Does not switch the global language, automatically retranslate existing UI text or emit Changed.
MessagesProperty
public Reckfell.Collections.Dictionary Messages { get; set; }Internal storage Dictionary snapshot: Array key [context, srcMessage], nonempty Array value of form strings. The getter creates separate containers. The setter first clears the whole map, then copies entries; it also accepts a string key with one string value and no context. Neither a merge nor a complete resource format. Do not supply unchecked arrays: key length 2 is not fully validated. Emits no Changed; dispose the owned Dictionary after reading.
PluralRulesOverrideProperty
public string PluralRulesOverride { get; set; }Explicit rules such as nplurals=2; plural=(n != 1);. Empty text selects Locale rules then the English fallback. The setter clears cached rules but changes no stored forms and emits no Changed. An invalid override can produce a diagnostic before fallback; this is not successful validation. Keep form count/order consistent with the rules.
Methods15
AddMessagevoid
public void AddMessage(StringName srcMessage, StringName xlatedMessage, StringName context = null);Assigns one string to the exact (context, srcMessage) pair. Replaces an existing translation and all of its plural forms rather than adding only absent entries. An empty value is allowed but its lookup result is indistinguishable from a miss. Emits no Resource.Changed.
| Name | Type | Default |
|---|---|---|
srcMessage | StringName | — |
xlatedMessage | StringName | — |
context | StringName | null |
srcMessageExact case-sensitive source key paired with context for base lookup.
xlatedMessageTranslated string; may be empty. No automatic placeholder or count insertion.
contextExact context; null/default means empty. _GetMessage/_GetPluralMessage receive the supplied value without searching other contexts.
AddPluralMessage2 overloads
public void AddPluralMessage(StringName srcMessage, ReadOnlySpan<string> xlatedMessages, StringName context);Replaces the exact (context, srcMessage) entry with a nonempty plural-form array. Form order must match Locale or PluralRulesOverride; the method infers no order from text and inserts no count. Empty input produces a diagnostic; form count is checked when selecting an index. Emits no Changed.
| Name | Type | Default |
|---|---|---|
srcMessage | StringName | — |
xlatedMessages | ReadOnlySpan<string> | — |
context | StringName | — |
srcMessageExact case-sensitive source key paired with context for base lookup.
xlatedMessagesNonempty array/ReadOnlySpan of forms in locale/override rule order. Must contain every index the rules can select. Data are copied into the resource.
contextExact context; null/default means empty. _GetMessage/_GetPluralMessage receive the supplied value without searching other contexts.
public void AddPluralMessage(StringName srcMessage, string[] xlatedMessages, StringName context = null);Replaces the exact (context, srcMessage) entry with a nonempty plural-form array. Form order must match Locale or PluralRulesOverride; the method infers no order from text and inserts no count. Empty input produces a diagnostic; form count is checked when selecting an index. Emits no Changed.
| Name | Type | Default |
|---|---|---|
srcMessage | StringName | — |
xlatedMessages | string[] | — |
context | StringName | null |
srcMessageExact case-sensitive source key paired with context for base lookup.
xlatedMessagesNonempty array/ReadOnlySpan of forms in locale/override rule order. Must contain every index the rules can select. Data are copied into the resource.
contextExact context; null/default means empty. _GetMessage/_GetPluralMessage receive the supplied value without searching other contexts.
EraseMessagevoid
public void EraseMessage(StringName srcMessage, StringName context = null);Removes only the exact (context, srcMessage) pair including all its forms. A missing key is a no-op; the same source text under other contexts remains. Emits no Changed.
| Name | Type | Default |
|---|---|---|
srcMessage | StringName | — |
context | StringName | null |
srcMessageExact case-sensitive source key paired with context for base lookup.
contextExact context; null/default means empty. _GetMessage/_GetPluralMessage receive the supplied value without searching other contexts.
GetLocalestring
public string GetLocale();Reads this resource standardized locale, not the current TranslationServer locale.
stringThis resource standardized locale.
GetMessageStringName
public StringName GetMessage(StringName srcMessage, StringName context = null);Looks up the exact (context, srcMessage) pair in this resource and returns its first form. A miss yields an empty StringName rather than source text. Calls an overridden _GetMessage first; an empty callback result does not trigger base-map fallback. Applies no server fallback locale.
| Name | Type | Default |
|---|---|---|
srcMessage | StringName | — |
context | StringName | null |
srcMessageExact case-sensitive source key paired with context for base lookup.
contextExact context; null/default means empty. _GetMessage/_GetPluralMessage receive the supplied value without searching other contexts.
StringNameFirst form or empty StringName, not global fallback.
GetMessageCountint
public int GetMessageCount();Number of (context, srcMessage) pairs rather than all plural-form strings. Overridden by OptimizedTranslation to return 0 with a warning; not a compressed-lookup population test.
intKey/context pair count; OptimizedTranslation yields 0 with a warning.
GetMessageListstring[]
public string[] GetMessageList();Returns an independent string[] of source keys: srcMessage without context or context+U+0004+srcMessage with context. Not sorted and not translated text; avoid U+0004 inside new keys. OptimizedTranslation retains no source keys and returns an empty array with a warning.
string[]New source-key array, using U+0004 for context.
GetPluralMessageStringName
public StringName GetPluralMessage(StringName srcMessage, StringName srcPluralMessage, int n, StringName context = null);For nonnegative n selects the (context, srcMessage) entry form using resource rules. srcPluralMessage is not part of base-map lookup but is forwarded to _GetPluralMessage. A miss yields an empty StringName; negative n or a missing selected form produces a diagnostic. Inserts no count and applies no global fallback locale. OptimizedTranslation does not select plural forms.
| Name | Type | Default |
|---|---|---|
srcMessage | StringName | — |
srcPluralMessage | StringName | — |
n | int | — |
context | StringName | null |
srcMessageExact case-sensitive source key paired with context for base lookup.
srcPluralMessagePlural source text for the callback contract; not an index into the base Translation map.
nNonnegative count for base plural selection; not inserted into the result. A custom callback must validate its own contract.
contextExact context; null/default means empty. _GetMessage/_GetPluralMessage receive the supplied value without searching other contexts.
StringNameSelected form or empty StringName for a miss/diagnosed failure.
GetPluralRulesOverridestring
public string GetPluralRulesOverride();Reads the stored override text rather than resolved effective locale rules. Empty text means no explicit override.
stringStored override text; empty means no explicit override.
GetTranslatedMessageListstring[]
public string[] GetTranslatedMessageList();Returns an independent string[] of stored translations including every plural form and empty value. Indices do not align with GetMessageList when entries have multiple forms; order is not sorted. For OptimizedTranslation lists compressed values without keys.
string[]New array of all form values without sorted order or source-key index alignment.
SetLocalevoid
public void SetLocale(string locale);Sets Locale with identifier normalization. Changes neither the global locale, messages nor an explicit PluralRulesOverride, and emits no Changed.
| Name | Type | Default |
|---|---|---|
locale | string | — |
localeResource locale identifier such as ru or ru_RU; the setter standardizes its spelling.
SetPluralRulesOverridevoid
public void SetPluralRulesOverride(string rules);Assigns PluralRulesOverride and clears cached rules. Empty text restores Locale-based rule selection. Converts no existing forms and emits no Changed.
| Name | Type | Default |
|---|---|---|
rules | string | — |
rulesValid nplurals=<N>; plural=<expression>; text or empty text for Locale rules. Not an array of translated strings.
_GetMessageStringName
public virtual StringName _GetMessage(StringName srcMessage, StringName context);Override in a custom C# Translation class for direct lookup. GetMessage passes the exact key and context; the callback determines the entire result including misses. C# base._GetMessage is an empty stub rather than access to the native map. AddMessage and counts still operate on stored base entries.
| Name | Type | Default |
|---|---|---|
srcMessage | StringName | — |
context | StringName | — |
srcMessageExact case-sensitive source key paired with context for base lookup.
contextExact context; null/default means empty. _GetMessage/_GetPluralMessage receive the supplied value without searching other contexts.
StringNameCustom lookup result; empty denotes a miss without base fallback.
_GetPluralMessageStringName
public virtual StringName _GetPluralMessage(StringName srcMessage, StringName srcPluralMessage, int n, StringName context);Override plural lookup in a custom Translation. Receives both source texts, n and context before base n validation. Define accepted input and misses yourself; an empty result does not enable base fallback. C# base._GetPluralMessage is an empty stub.
| Name | Type | Default |
|---|---|---|
srcMessage | StringName | — |
srcPluralMessage | StringName | — |
n | int | — |
context | StringName | — |
srcMessageExact case-sensitive source key paired with context for base lookup.
srcPluralMessagePlural source text for the callback contract; not an index into the base Translation map.
nNonnegative count for base plural selection; not inserted into the result. A custom callback must validate its own contract.
contextExact context; null/default means empty. _GetMessage/_GetPluralMessage receive the supplied value without searching other contexts.
StringNameCustom plural-selection result; the caller inserts no count.