你好 在本文中,我将分享我在Unity中对游戏和应用程序进行本地化的经验,以及有关我的简单本地化插件的信息,该插件可在Asse商店中获得。 文章级别很容易。 完全没有代码,对您没有用。

从一般概念的角度来看,一切都很简单。 我们应该为每种语言的词典列表提供相同的键,以便从中接收本地化的值。 从技术方面,您需要确定:
- 我们的词典是什么?
- 它们将存储在哪里?
- 我们将如何编辑和扩展它们?
- 如何使用应用程序接口实现捆绑软件?
在实现过程中,我遵循两个原则:简单性和便利性。 因此,最适合字典的结构化格式是CSV(逗号分隔值)。 这是一个文本文件,其中所有单元格都由分隔符-逗号(“,”)或分号(“;”)分隔,具体取决于区域设置。 可以在任何文本编辑器中打开和编辑CSV,但是Excel最适合此操作。 CSV当然会存储在Resources文件夹中,以便应用程序可以随时读取它们。
格式如下:第一列是键,所有后续列都是字典。 第一行是标题。 如果应用程序中的文本很少,则可以有一个通用的CSV,但是您可以根据一些原则将其拆分为多个CSV,例如:菜单,设置,成就等。
来吧 当然,在Excel中编辑本地化效果很好,但是我建议将其上传到Google表格。 然后,您可以随时随地通过任何设备编辑它们。 但是最重要的是,本地化可以在翻译人员之间共享,并且他们在翻译时不会遇到任何困难。 你可以在
这里看字典。

最后一点是与uGUI的Unity集成。 在这里,一切也很简单-对于每个文本组件,我们在
Text中添加
LocalizedText组件,并在其中指示键。 启动时,此组件将接收本地化的值并将其设置为
Text 。

然后出现几个问题:
- 如何以及何时初始化字典? 只需调用控制脚本中的LocalizationManager.Read即可 。 如果您对自动检测语言( Application.systemLanguage )感到满意,则可以在Awake或Start中完成,也可以在已知用户设置后加载配置文件后完成。
- 如果我们事先不确切知道文本组件将具有什么值怎么办? 我们不添加LocalizedText组件,而是通过从LocalizationManager.Localize(字符串localizationKey)访问字典从代码中为其分配值。
- 如果需要在局部值中插入参数,该怎么办? 我们只在本地化的字符串中使用格式化,例如“ Level {0}”,然后通过string.Format执行替换。 为此,存在LocalizationManager.Localize(字符串localizationKey,params对象[] args)的重载。
- 如何在运行时更改本地化? 只需通过LocalizationManager.Language更改语言即可。 这将引发所有LocalizedText组件都已预订的事件。 但是,从代码本地化的Text组件(不具有LocalizedText组件)将需要手动更新。
- 与其他元素(例如, 下拉列表)关联怎么办? 显然使用组件LocalizedDropdown =)
好吧,这是我资产的最后一个包子-他可以自动从Google表格下载所有表格并将其保存在游戏资源中。 为此有一个
LocalizationSync组件,它具有一个
Sync按钮(在检查器中)。
您可以在Asset Store:
简单本地化中下载它。