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

文章目录

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/781051.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

注意力机制 attention Transformer 笔记

动手学深度学习 这里写自定义目录标题 注意力加性注意力缩放点积注意力多头注意力自注意力自注意力缩放点积注意力:案例Transformer 注意力 注意力汇聚的输出为值的加权和 查询的长度为q,键的长度为k,值的长度为v。 q ∈ 1 q , k ∈ 1 k …

零基础STM32单片机编程入门(七)定时器PWM波输出实战含源码视频

文章目录 一.概要二.PWM产生框架图三.CubeMX配置一个TIME输出1KHZ,占空比50%PWM波例程1.硬件准备2.创建工程3.测量波形结果 四.CubeMX工程源代码下载五.讲解视频链接地址六.小结 一.概要 脉冲宽度调制(PWM),是英文“Pulse Width Modulation”的缩写&…

CAN总线(下)

位时序 为了灵活调整每个采样点的位置,使采样点对齐数据位中心附近,CAN总线对每一个数据位的时长进行了更细的划分, 分为同步段(SS)、传播时间段(PTS)、相位缓冲段1(PBS1&#xff0…

扩散模型笔记

长参数“T”决定了生成全噪声图像所需的步长。在本文中,该参数被设置为1000,这可能显得很大。我们真的需要为数据集中的每个原始图像创建1000个噪声图像吗?马尔可夫链方面被证明有助于解决这个问题。由于我们只需要上一步的图像来预测下一步&#xff0c…

机器学习 | 随机梯度下降分类器

数据科学和机器学习工具包中用于各种分类任务的一个重要工具是随机梯度下降(SGD)分类器。通过探索其功能和在数据驱动决策中的关键作用,我们开始探索SGD分类器的复杂性。 SGD分类器是一种与SGD回归器有着密切联系的灵活分类技术。它的工作原…

最新性价比最高的SSL证书申请

申请SSL证书时,为了确保过程的顺利进行以及获得可靠的加密连接,有几个关键点需要注意。 申请新性价比最高SSL证书步骤 1、登录来此加密网站,输入域名,可以勾选泛域名和包含根域。 2、选择加密方式,一般选择默认就可以…

redhat7.x 升级openssh至openssh-9.8p1

1.环境准备: OS系统:redhat 7.4 2.备份配置文件: cp -rf /etc/ssh /etc/ssh.bak cp -rf /usr/bin/openssl /usr/bin/openssl.bak cp -rf /etc/pam.d /etc/pam.d.bak cp -rf /usr/lib/systemd/system /usr/lib/systemd/system.bak 3.安装…

【Java探索之旅】多态:重写、动静态绑定

文章目录 📑前言一、重写1.1 概念1.2 方法重写的规则1.3 重写和重载的区别1.4 重写的设计原则 二、动静态绑定2.1 静态绑定:2.2 动态绑定: 🌤️全篇总结 📑前言 在面向对象编程中,重写和动静态绑定是重要的…

5G频段简介

5G频段 5G网络一共有29个频段,主要被分为两个频谱范围,其中6GHz以下的频段共有26个(统称为Sub6GHz),毫米波频段有3个。目前国内主要使用的是Sub6GHz,包括n1/n3/n28/n41/n77/n78/n79共7个频段。具体介绍如下…

Ubuntu 22.04.4 LTS 安装配置 MySQL Community Server 8.0.37 LTS

1 安装mysql-server sudo apt update sudo apt-get install mysql-server 2 启动mysql服务 sudo systemctl restart mysql.service sudo systemctl enable mysql.service #查看服务 sudo systemctl status mysql.service 3 修改mysql root密码 #默认密码为空 sudo mysql …

C# 如何获取属性的displayName的3种方式

文章目录 1. 使用特性直接访问2. 使用GetCustomAttribute()方法通过反射获取3. 使用LINQ查询总结和比较 在C#中,获取属性的displayName可以通过多种方式实现,包括使用特性、反射和LINQ。下面我将分别展示每种方法,并提供具体的示例代码。 1.…

MySQL第三天作业

一、在数据库中创建一个表student,用于存储学生信息 CREATE TABLE student( id INT PRIMARY KEY, name VARCHAR(20) NOT NULL, grade FLOAT ); 1、向student表中添加一条新记录 记录中id字段的值为1,name字段的值为"monkey"…

哲讯SAP知识分享:SAP资产模块常用事务代码清单

在当今日益复杂的商业环境中,企业对于资产管理的需求日益增强。SAP作为全球领先的企业管理软件提供商,其资产模块(AM)以其高效、灵活的特性,为企业提供了全面的资产管理解决方案。本文将对SAP资产事务类型进行详细介绍…

阿贝云免费虚拟主机和免费云服务器评测

阿贝云是一家提供免费虚拟主机和免费云服务器的服务提供商,为用户提供高性能的云计算服务。阿贝云的免费虚拟主机拥有稳定的性能和强大的安全性,用户可以轻松搭建自己的网站并享受无限的流量和空间。免费云服务器则提供了更强大的计算能力和灵活的配置选…

Samtec汽车电子 | 汽车连接器如何在高要求、极端的环境中工作

【摘要/前言】 汽车电子,这些年来始终是极具流量的热门话题,目前不断发展的智能座驾、辅助驾驶等赛道都是对相关产业链需求的进一步刺激,这里蕴含着一片广阔的市场。 同样,广阔的市场里有着极高的准入门槛和事关安全的技术挑战。…

买的Google账号登录,修改辅助邮箱收不到验证码?可能是个简单的错误

这篇文章分享一个案例,购买了谷歌账号以后如何修改辅助邮箱,修改辅助邮箱的一些要点,以及常见的一个错误。 一、案例回放 这个朋友昨天在我的一个视频下面留言说买了谷歌账号以后,想修改辅助邮箱地址,但是输入了辅助…

基于模型预测控制的PMSM系统速度环控制理论推导及仿真搭建

模型预测控制(Model Predictive Control, MPC)是一种先进的控制策略,广泛应用于工业控制中。它可以看作是一种最优控制方法,利用对象的动态模型来预测其状态的未来行为,并根据每个采样时间点特定性能目标函数的优化来确…

单片机软件架构连载(3)-typedef

今天给大家讲typedef,这个关键字在实际产品开发中,也是海量应用。 技术涉及知识点比较多,有些并不常用,我们以贴近实际为原则,让大家把学习时间都花在重点上。 1.typedef的概念 typedef 是 C 语言中的一个关键字&…

java wait, notify, notifyAll三个方法

wait(), notify(), 和 notifyAll() 是 Java 中用于线程间通信和同步的方法,它们都是 Object 类中的方法,而非 Thread 类的方法。这些方法通常与 synchronized 关键字一起使用,用于实现线程之间的协作和互斥访问共享资源。 关于生产者-消…

Apache Seata配置管理原理解析

本文来自 Apache Seata官方文档,欢迎访问官网,查看更多深度文章。 本文来自 Apache Seata官方文档,欢迎访问官网,查看更多深度文章。 Apache Seata配置管理原理解析 说到Seata中的配置管理,大家可能会想到Seata中适配…