文章目录
- 前言
- 一、快速实现静态本地化
- 1、表格格式
- 2、本地化文本
- 3、修改bat文件
- 3、打表
- 二、多语言切换
- 1、修改bat文件
- 2、增加本地化管理脚本
- 3、测试
- 总结
前言
无需多言,本地化(Localization,简称 L10N)是指将产品、内容或服务适应特定地区或语言的过程。
一、快速实现静态本地化
静态本地化会在导出过程中将text类型由key转换为实际的文本值,适用于已经固定确定本地化语言的场合。使用者不需要再由key转换为实际的文档,使用较为方便。
1、表格格式
将string类型换成text,图中红框圈中部分是有效部分,name1、name2……等指向的是key值,而后面的发型、帽子等起到注释类型,可有可无。
text类型为专用的表达本地化字符串key的类型,可以校验key的有效性。text本质还是string类型,我们根据text标记key值,从而在打不同语言表的时候从本地化文本中提取对应的语言信息。
2、本地化文本
在Luban\MiniTemplate\Datas\l10n创建一个本地化文本文件texts.json。
text.json填入key值对应的语言以备本地化打表使用。
[
{"key":"name1", "en":"apple1", "zh":"苹果2"},
{"key":"name2", "en":"apple2", "zh":"苹果2"},
{"key":"name3", "en":"apple3", "zh":"苹果2"},
{"key":"name4", "en":"apple4", "zh":"苹果2"},
{"key":"name5", "en":"apple5", "zh":"苹果2"},
{"key":"name6", "en":"apple6", "zh":"苹果23"},
{"key":"name7", "en":"apple7", "zh":"苹果2"},
{"key":"name8", "en":"apple", "zh":"苹果2"},
{"key":"name9", "en":"apple", "zh":"苹果2"},
{"key":"name10", "en":"apple", "zh":"苹果2"},
{"key":"name11", "en":"apple", "zh":"苹果2"}
]
3、修改bat文件
set WORKSPACE=.
set LUBAN_DLL=%WORKSPACE%\Tools\Luban\Luban.dll
set CONF_ROOT=%WORKSPACE%\MiniTemplate
dotnet %LUBAN_DLL% ^
-t all ^
-c cs-simple-json^
-d json ^
--conf %CONF_ROOT%\luban.conf ^
-x outputCodeDir=..\Assets\Scripts\Luban^
-x outputDataDir=..\Assets\StreamingAssets/Luban^
-x l10n.provider=default ^
-x l10n.textFile.path=*@%WORKSPACE%\MiniTemplate\Datas\l10n\texts.json ^
-x l10n.textFile.keyFieldName=key^
-x l10n.textFile.languageFieldName=en ^
-x l10n.convertTextKeyToValue=1
pause
3、打表
运行gen.bat文件,输出en陈昆。
二、多语言切换
我使用的方法很简单,将不同语言的json放到不同的目录文件夹下,分别加载即可。
1、修改bat文件
set WORKSPACE=.
set LUBAN_DLL=%WORKSPACE%\Tools\Luban\Luban.dll
set CONF_ROOT=%WORKSPACE%\MiniTemplate
dotnet %LUBAN_DLL% ^
-t all ^
-c cs-simple-json^
-d json ^
--conf %CONF_ROOT%\luban.conf ^
-x outputCodeDir=..\Assets\Scripts\Luban^
-x outputDataDir=..\Assets\StreamingAssets/Luban/en^
-x l10n.provider=default ^
-x l10n.textFile.path=*@%WORKSPACE%\MiniTemplate\Datas\l10n\texts.json ^
-x l10n.textFile.keyFieldName=key^
-x l10n.textFile.languageFieldName=en ^
-x l10n.convertTextKeyToValue=1
dotnet %LUBAN_DLL% ^
-t all ^
-c cs-simple-json^
-d json ^
--conf %CONF_ROOT%\luban.conf ^
-x outputCodeDir=..\Assets\Scripts\Luban^
-x outputDataDir=..\Assets\StreamingAssets/Luban/zh^
-x l10n.provider=default ^
-x l10n.textFile.path=*@%WORKSPACE%\MiniTemplate\Datas\l10n\texts.json ^
-x l10n.textFile.keyFieldName=key^
-x l10n.textFile.languageFieldName=zh ^
-x l10n.convertTextKeyToValue=1
pause
2、增加本地化管理脚本
根据加载的语言加载相应的配置文件,在游戏开始时调用或者设置中切换即可。
using cfg;
using SimpleJSON;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using UnityEngine;
public enum Language {
en,
zh
}
public class LubanManager : MonoBehaviour
{
public static Tables tables;
public static void LoadTables(Language language = Language.zh) {
string gameConfDir = Application.streamingAssetsPath + "/Luban" + "/" + language; // 替换为gen.bat中outputDataDir指向的目录
tables = new cfg.Tables(file => JSON.Parse(File.ReadAllText($"{gameConfDir}/{file}.json")));
}
}
3、测试
LubanManager.LoadTables(Language.zh);
var item = LubanManager.tables.TbItem.DataList;
Debug.Log(item[0].Name);
LubanManager.LoadTables(Language.en);
item = LubanManager.tables.TbItem.DataList;
Debug.Log(item[0].Name);
注意:静态本地化的使用场景通常是在项目的初始界面进行选择和设置。
如果想要实时切换可以使用其她方法,或者直接将texts.json文件复制到目录下,然后再切换时实时切换。
总结
本文简单实现了Luban的本地化功能,旨在抛砖引玉。毕竟我的写法不完美,不一定适合你的项目,但我相信她能够激发您更多的创意和解决方案。
顺便吐槽下,Luban的文档设计确实很棒,细节处理得非常到位。不过,老实说,那些示例对于刚接触的且想要实现更多功能的人来说,可能会让人晕头转向(当然,我老版用了很长时间而且有改模板的经验,不是很存在这些问题)。如果能有官方视频教程来辅助理解,那就更完美了。