文章目录

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

前言

本地化/多语言是一个成熟游戏必备的功能,英文为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对应一个默认值

3、新建本地化表格Config\Datas\l10n\TextTable_CN.xlsx并填写key值和对应的语言值;顺手新建未完成本地化文本Config\Datas\l10n\NotLocalized_CN.txt, 4、运行成功

二、加载

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

{

readonly Dictionary tables = new Dictionary();

public T GetVOData(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个元素。 而另外一边第十个元素就显示的是默认值 2、如果需要其他字体,如繁体,将bat里面的–l10n:text_field_name text_en ^换成–l10n:text_field_name text_tw ^再次点击就可以生成繁体的json

总结

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

精彩文章

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: