Advanced: Localization

Translate!

本地化系统基础

该系统涉及:

  • InputStringsScriptableObject对象(TSR > TipTextData)

  • 带有翻译的CSV表(TSR > TipTextData > CSVFile)

  • 来自此处的文本嵌入到教程步骤和单独的文本对象中

Storage

添加翻译

要进行翻译,您需要至少有一种语言的文本提示。要添加翻译:

  1. 打开TSR > TipTextData。这是存储所有场景和教程的所有文本提示的地方。

  2. 按"Export current strings to CSV"按钮。

  3. 编辑CSV。当前字符串的副本已在"Default"列中创建。将它们通过翻译器处理,并将翻译插入到相应的语言列中。

  4. 完成。现在,在运行时或编辑模式下切换语言时,字符串会根据翻译进行更改。字符串及其翻译通过匹配文本进行搜索,不绑定到特定索引。

切换语言(4 种方式)

更改语言会在运行时和编辑模式下无缝更新所有文本提示。

circle-check
  • 在检视器中:通过TSR > TipTextData更改语言,只需从下拉列表中选择不同的值。

  • 通过脚本(推荐):调用TSR > TipTextData > inputTextSettings.ChangeLanguage()方法。指定任何语言并直接从存储中调用翻译,无需引用场景上的ATM。 图像选项

  • 通过脚本:调用TSR > TranslateAllTutorial()方法。使用下拉列表中现有语言之一。sceneReferences.TranslateAllTutorial(InputStringsScriptableObject.Language.Italian);

  • 通过脚本:调用TSR > TranslateAllTutorialByString()方法。指定在CSV文件第一行中声明的任何语言,即使该语言未在下拉菜单中列出。sceneReferences.TranslateAllTutorialByString("Polish");

添加新语言

Simplified (found by string)
As Enum for the list (found by column number)
  1. 打开CSV文件并用翻译填充任何空列

  2. 确保列中的第0行以使用的语言命名,例如"Romanian"

  3. 完成。可以通过TSR > TranslateAllTutorialByString("Romanian")方法或inputTextSettings.ChangeLanguage("Romanian")调用此语言进行翻译。例如,将其链接到国旗按钮。

  1. 打开 InputStringsScriptableObject.cs

  2. 找到 "public enum Language" > "AddCustomLanguage = 11",将其替换为你的语言,例如 "Romanian = 11"

  3. 打开 CSV 文件,并在第 11 列(L 列)填写罗马尼亚语翻译

  4. 完成。要创建新语言,请使用未使用列的索引,例如 "CustomLanguage = 16"

分配特殊字体

使用Language Special Fonts列表,以便在切换到特殊语言时,文本对象更改其字体 - 例如,这对中文和日文很有用。

  • 向Language Special Fonts列表添加条目,指定语言的列名称,并分配相应的Font。

  • 同时分配Default Font,当从特殊语言切换回默认语言时,文本将恢复为该字体。

  • 设置Initial Font = true,这样即使是基本的ATM工具提示最初也会使用默认字体或专用字体。否则,它们将按原样生成,仅在翻译、切换到特殊语言以及切换回来时才会更改字体。

Sprite Assets

triangle-exclamation

为了支持文本中的精灵资源(例如按键图标),使用InputStringsScriptableObject中的Main Sprite Asset引用。默认情况下,它包含一个空图集key_empty和对工作资源的回退,其中每个按键都是单独的Sprite Asset。这样做是为了便于使用和替换。

  • 要创建自己的Sprite Asset,可以从精灵创建一个(Create > TextMeshPro > Sprite Asset),并将其添加到key_empty资源内的Fallback Sprite Assets列表中。然后,在提示文本中,可以按名称引用它,例如:<sprite name="key_e">。

  • 要替换现有资源之一,例如更改E键的设计,可以在相应的按键资源(key_e)内用自己的Sprite Atlas替换。

  • 使用精灵资源可能会影响性能,因此如有必要,请将文本中自动生成的标签替换为简单名称(<sprite name="key_e"> → E),或在生成之前从InputStringsScriptableObject中删除Main Sprite Asset引用。

使用额外的可本地化文本

除了由ATM管理的工具提示外,您还可以为工具提示预制体或其他目的创建额外的文本对象。它们也可以从CSV中提取翻译。为此,使用公共方法从ScriptableObject访问它。

查看LocalizedTooltip组件,它可以通过行号或字符串键获取值。它在Graphic Popup Skip Tutorial预制体和演示场景上的Tutorial Skipper对象中使用 - 将其作为示例查看。

TSR > TipTextDataMethod
Description
Call Example

InitializeLocalizator()

初始化翻译系统。建议在启动时调用它以进行后续处理所有翻译。

inputTextSettings.InitializeLocalizator();

ChangeLanguage()

翻译与TipTextData关联的所有文本的语言。

inputTextSettings.ChangeLanguage("English");

GetCurrentFont()

获取适合该语言的当前字体,如果需要将其应用于特定文本。

objectText.font = inputTextSettings.GetCurrentFont();

GetStringText(int rowIndex)

根据当前语言按编号从表行获取文本。

objectText.text = inputStrings.GetStringText(3) + "...";

GetStringTextByKey(string key)

根据当前语言使用第0列的字符串键从表行获取文本。

objectText.text = inputStrings.GetStringTextByKey("main_menu_play");

FillTextObject(int rowIndex, TMP_Text textToFill)

用表中找到的文本填充文本对象。缓存文本以便稍后无需手动触发即可自动翻译。

inputTextSettings.FillTextObject(connectedTableRow, objectText);

FillTextObjectByKey(string key, TMP_Text textToFill)

用表中找到的文本填充文本对象。缓存文本以便稍后无需手动触发即可自动翻译。

inputStrings.FillTextObjectByKey("settings_title", settingsText);

ReplacePlaceholders(int rowIndex, params object[] values)

获取包含{}占位符的文本并将其替换为实际变量。

inputStrings.ReplacePlaceholders(2, userName, coins);

FillTextObjectWithPlaceholders(int tableRow, TMP_Text textToFill, params object[] values)

获取包含{}占位符的文本并将其替换为实际变量。同时缓存文本以便稍后无需手动触发即可自动翻译。

inputStrings.FillTextObjectWithPlaceholders(5, myTextComponent, "John", 100);

Last updated