Unity 简单的多语言切换方案

准备工作

创建数据Excel表

在这个方案中,我希望Text组件所使用的文本,字体样式等都通过读表的形式完成,这样的话策划有啥需求就能通过修改配置表的形式实现。配置表会有两个:

  1. 字体样式表
StyleName Font FontStyle Size RichText CororR CororG CororB CororA
Main Arial Bold 30 True 50 50 50 255
Battle Arial Normal 40 True 100 100 100 255

StyleName:表示样式名称,同时用作键值
Font:表示需要使用的字体
FontStyle:表示需要使用的字体样式
Size:表示字体的大小
RichText:表示是否支持富文本
ColorRGBA:表示字体的颜色

2.文本表

Style Language_CN LanguageEN
Main 中文 英语

Style:表示样式,需要和字体样式表中的StyleName对应

生成bin文件

这里并非一定要使用bin文件,可根据需求及喜好也可以使用json等形式。为了方便,我使用了ExcelDataReaderExcelDataReader.DataSet两个插件来读取Excel表,这两个插件可通过Nuget安装到解决方案中。

 		//bin文件存放路径
 		private const string _outputPath = "../../../Output/";

        //Excel表路径
        string _inputPath = string.Empty;

        /// <summary>
        /// 生成bin文件
        /// </summary>
        /// <param name="inputPath"></param>
        public void CreateBinaryData(string inputPath)
        {
   
            if (_inputPath != inputPath) _inputPath = inputPath;

            var styleDatas = ReadStyle();
            WriteStyle(styleDatas);
            ReadTextConfig();
        }

        /// <summary>
        /// 从Excel表中读取多语言文本数据
        /// </summary>
        void ReadTextConfig()
        {
   
            List<TextData> datas = new List<TextData>();
            using (var stream = File.Open(_inputPath, FileMode.Open, FileAccess.Read))
            {
   
                using (var reader = ExcelReaderFactory.CreateReader(stream))
                {
   
                    DataSet dataSet = reader.AsDataSet();
                    DataTable textTable = dataSet.Tables[(int)Sheet.TEXT_CONFIG];

                    for (int i = 1; i < textTable.Columns.Count; i++)
                    {
   
                        for (int j = 1; j < textTable.Rows.Count; j++)
                        {
   
                            TextData data = new TextData();
                            data.ID = j + 1;
                            data.Style = textTable.Rows[j][0].ToString();
                            data.Content = textTable.Rows[j][i].ToString();
                            datas.Add(data);
                        }

                        //保存数据
                        WriteLanuage(textTable.Rows[0][i].ToString(), datas);
                        datas.Clear();
                    }
                }
            }
        }

        /// <summary>
        /// 将读取到的多语言数据写成二进制文件
        /// </summary>
        /// <param name="tableName"></param>
        /// <param name="datas"></param>
        void WriteLanuage(string tableName, List<TextData> datas)
        {
   
            using (var steam = new FileStream(_outputPath + tableName, FileMode.Create, FileAccess.Write))
            {
   
                using (var writer = new BinaryWriter(steam))
                {
   
                    //先写人Count,读取的使用才知道需要几次才能读完全部数据
                    writer.Write(datas.Count);
                    foreach (var data in datas)
          
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值