unity强力配置插件-Luban使用(二)本地化

文章目录

  • 前言
  • 一、本地化配置
  • 二、加载
  • 三、未配置问题
  • 总结


前言

本地化/多语言是一个成熟游戏必备的功能,英文为localization,简称l10n。
附:官方文档。
以下操作需要第一篇文章的前置准备,点击这里返回上一章。


一、本地化配置

1、本地化配置规则

l10n:input_text_files 本地化映射文件
l10n:text_field_name 映射的目标字段名。因为有可能多个语言都在同一个映射表内(如text_tw和text_en)
l10n:output_not_translated_text_file 未完成文本值本地化映射的text

打开.bat文件在-s all ^下添加如下三行

set WORKSPACE=..
...
...
 -s all  ^
--l10n:input_text_files Config\Datas\l10n\TextTable_CN.xlsx ^
--l10n:text_field_name text_en ^
--l10n:output_not_translated_text_file NotLocalized_CN.txt

 pause

2、将示例配置表任意一个属性添加本地化的key值和默认值,key值根据项目自行修改,每个key对应一个默认值
unity强力配置插件-Luban使用(二)本地化_第1张图片

3、新建本地化表格Config\Datas\l10n\TextTable_CN.xlsx并填写key值和对应的语言值;顺手新建未完成本地化文本Config\Datas\l10n\NotLocalized_CN.txt,
unity强力配置插件-Luban使用(二)本地化_第2张图片
4、运行成功unity强力配置插件-Luban使用(二)本地化_第3张图片

二、加载

1、官方的加载方式

/// 用于切换到en
string TextMapper_en(string key, string originText) 
{
    return tables.TbTextMapper.GetOrDefault(key)?.TextEn ?? originText;
}

/// 用于切换到tw
string TextMapper_tw(string key, string originText) 
{
    return tables.TbTextMapper.GetOrDefault(key)?.TextTw ?? originText;
}

void SwitchLanguages(cfg.Tables tables)
{
  // 切换所有text字段到 en
   tables.TranslateText(TextMapper_en);

  // 切换所有text字段到 tw
   tables.TranslateText(TextMapper_tw);

  // 当前语言为tw的情况下,不使用切换,
  // 获得道具1001的desc字段对应的英语文本
  var desc_en = table.TbTextMapper.Get(tables.TbItem.Get(1001).Desc_l10n_key).TextEn;
}

2、单表加载
如果大家是按第一章配置完成单表的各种操作,那么多语言的属性为EditorText,我们需要属性.Text才能得出真正的值。
具体项目分几个bat管理或者在Jenkins配置,多语言在DataManager给GetVOData进行扩展即可(根据目录不同加前置条件)
bat配置不同目录:

set WORKSPACE=..
 
set GEN_CLIENT=%WORKSPACE%\Luban\Tools\Luban.ClientServer\Luban.ClientServer.exe
set CONF_ROOT=%WORKSPACE%\Luban\Config
 
%GEN_CLIENT% -j cfg --^
 -d %CONF_ROOT%\Defines\__root__.xml ^
 --input_data_dir %CONF_ROOT%\Datas ^
 --output_code_dir %WORKSPACE%/Assets/Scripts/Game/0.Model/Base ^
 --output_data_dir ..\Assets\StreamingAssets\tw ^
 --gen_types code_cs_unity_json,data_json ^
 -s all  ^
--l10n:input_text_files Config\Datas\l10n\TextTable_CN.xlsx ^
--l10n:text_field_name text_tw ^
--l10n:output_not_translated_text_file NotLocalized_CN.txt
 
%GEN_CLIENT% -j cfg --^
 -d %CONF_ROOT%\Defines\__root__.xml ^
 --input_data_dir %CONF_ROOT%\Datas ^
 --output_code_dir %WORKSPACE%/Assets/Scripts/Game/0.Model/Base ^
 --output_data_dir ..\Assets\StreamingAssets\en ^
 --gen_types code_cs_unity_json,data_json ^
 -s all  ^
--l10n:input_text_files Config\Datas\l10n\TextTable_CN.xlsx ^
--l10n:text_field_name text_en ^
--l10n:output_not_translated_text_file NotLocalized_CN.txt
pause

DataManager添加多语言的表格加载

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.IO;
using cfg;

namespace QFramework.Game
{
    public class DataManager : MonoSingleton<DataManager>
    {
        readonly Dictionary<string, object> tables = new Dictionary<string, object>();

        public T GetVOData<T>(string fileName,string language = "cn") where T : IVOFun, new()
        {
            var path = Application.streamingAssetsPath +"/" + language + "/" + fileName + ".json";

            if (tables.ContainsKey(fileName))
            {
                return (T)tables[fileName];
            }
            else
            {
                var data = new T();

                if (File.Exists(path)) {
                    //创建一个StreamReader,用来读取流
                    StreamReader sr = new StreamReader(path);
                    //将读取到的流赋值给jsonStr
                    string text = sr.ReadToEnd();
                    data._LoadData(text);
                    tables.Add(fileName, data);
                }
                else
                {
                    Debug.LogError("存档文件不存在");
                }
                return data;
            }
        }
    }
}

三、未配置问题

1、由于我们在item表格定义了10个数据,翻译却只翻译了前9个,所以未完成本地化里面标记了第10个元素。
unity强力配置插件-Luban使用(二)本地化_第4张图片
而另外一边第十个元素就显示的是默认值unity强力配置插件-Luban使用(二)本地化_第5张图片
2、如果需要其他字体,如繁体,将bat里面的–l10n:text_field_name text_en ^换成–l10n:text_field_name text_tw ^再次点击就可以生成繁体的json


总结

Luban拥有很多强大的功能,只是鄙人用不上,只能按照自己的想法改进和讲些有的没的;luban的细节方面更多的是根据具体项目进行修改,希望大家能配置出适合自己的luban库,逃脱手写json的束缚。

你可能感兴趣的:(unity配置插件Luban,unity,游戏引擎,c#,json)