unity强力配置插件Luban【Next最新版本】(二)本地化

发布于:2024-07-05 ⋅ 阅读:(14) ⋅ 点赞:(0)


前言

无需多言,本地化(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的文档设计确实很棒,细节处理得非常到位。不过,老实说,那些示例对于刚接触的且想要实现更多功能的人来说,可能会让人晕头转向(当然,我老版用了很长时间而且有改模板的经验,不是很存在这些问题)。如果能有官方视频教程来辅助理解,那就更完美了。


网站公告

今日签到

点亮在社区的每一天
去签到