71. 2023-07-30周总结

  1. 配置表多语言
  2. 正常功能推进
  3. 其他

1. 配置表多语言

我们的配置表会经过导表工具生成一份二进制文件和配置表读入、使用的代码文件。

为了支持多语言,需要做一些流程上的补充。

  1. 新增一张特殊的多语言表用来处理做多语言替换,里面第一列为id,第二列为中文,后面列的话分别是中文对应该语言的翻译。
  2. 配置表列属性增加一个多语言属性,标记该属性的列说明要进行多语言替换。
  3. 导表工具支持读取到多语言列的时候进行中文判定以及将中文与多语言表的中文列进行匹配(如果匹配不到,则将这个中文新增到多语言表中),匹配到多语言表的id之后,将该列的内容已$${id}方式进行替换
  4. 多语言列的使用代码进行封装,由原来直接获取列内容的方式修改为经过多语言模块拿列内容。

修改之前的获取方式

1
public string Confirm { get; private set; }

改之后

1
2
private string _Confirm;
public string Confirm { get => Babu.Client.Globalization.Globalizer.Instance.GetGlobalizationText(_Confirm); private set { _Confirm = value; } }

这是导表过程流程上的补充。

导表流程补充过程中遇到个Excel写入问题,写入的Excel会损坏打不开,最后才考这个地址,将打开文件时候的FileMode由FileMode.Open改为FileMode.Create,原因是FileMode.Open不会覆盖文件,如果写入的内容比之前短,之前的文件内容没有覆盖全就会有这个问题。之前做文件服务器的时候踩过这个坑,现在又踩了。

运行期之后需要新增多语言模块,该模块主要负责读取默认的系统语言,根据系统语言选择合适的我们内部的语言类型。另外还需要读取多语言表,用于根据传入的id进行替换。

核心的替换代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
/// <summary>
/// 获取包内部的多语言文字
/// </summary>
/// <param name="text"></param>
/// <returns></returns>
public string GetBuildinGlobalizationText(string text)
{
if (text.StartsWith("$$") == false)
{
return text;
}

int index;
if (int.TryParse(text.Substring(2), out index) == false)
{
return text;
}

if (index > _buildinGlobalizationConfigTable.DataRows.Count)
{
return text;
}

string fieldName = "Text" + _curLanguage.Suffix;
int fieldIndex = _buildinGlobalizationConfigTable.Fileds.IndexOf(fieldName);
if (fieldIndex == -1)
{
return text;
}

return _buildinGlobalizationConfigTable.DataRows[index - 1].GetString(fieldIndex);
}

这里是包内多语言的替换,翻译表用的是csv直接放在Resources下不能热更。多语言还得支持热更,并且还得走之前的配置表读取流程,我给多语言里面扩展了下接口,外部可以实现该接口来支持热更层多语言。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
/// <summary>
/// 热更层多语言接口
/// </summary>
public interface IHotfixGlobalizer
{
/// <summary>
/// 加载多语言配置
/// </summary>
Task LoadGlobalizationConfig();

/// <summary>
/// 获取多语言文字
/// </summary>
/// <param name="text"></param>
/// <returns></returns>
string GetGlobalizationText(string text);
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#region 热更多语言

/// <summary>
/// 设置热更层多语言接口
/// </summary>
/// <param name="hotfixGlobalizer"></param>
public void SetHotfixGlobalizer(IHotfixGlobalizer hotfixGlobalizer)
{
_hotfixGlobalizer = hotfixGlobalizer;
}

/// <summary>
/// 加载多语言配置
/// </summary>
/// <returns></returns>
public Task LoadGlobalizationConfig()
{
return _hotfixGlobalizer.LoadGlobalizationConfig();
}

/// <summary>
/// 获取多语言文字
/// </summary>
/// <param name="text"></param>
/// <returns></returns>
public string GetGlobalizationText(string text)
{
return _hotfixGlobalizer.GetGlobalizationText(text);
}

#endregion

目前这块多语言只能支持配置表,后续要的继续支持UI层的文字和图片。后续写好了再补充。

2. 正常的项目推进

项目需求功能正常推进中。

3. 其他

周五的时候,和女儿一起玩的小孩突然发烧(后面确诊手足口),担惊受怕了两天之后,女儿还是在周六晚上10点多开始发烧。

这次发烧比之前的都可怕,周日早上7点第一次高热惊厥了1分钟,之后去了医院,也确诊了手足口,同时进行了挂针。快挂完的时候开始升温,不断在发抖,体温到了39度多,随后停止了挂针,吃了美林。但在回去路上突然再次高热惊厥3分钟,并且口中有泡沫,吓得我一路闯红灯到了医院。但是那家医院医生没什么办法,我只能看着她躺那没什么神智的样子干着急,医院也没有条件接收手足口儿童住院,给她灌了水合氯醛(安定药物,防惊厥)之后叫120转院到了市妇保进行入院治疗。

住院之后医生给开了口服的安定药物继续防止惊厥,然后的过程就是靠她自己抗了,一种退烧药的药效根本撑不了4个小时,经过一夜的照顾来回换了几次药之后终于在周一早上发热稳定下来了。第一次带过去医生的时候医生就建议有高热惊厥,而且还是手足口就建议住院,我当时没想考虑周全拒绝了住院。如果当时就住进去后面就会让她少受一点苦了。以后一定要听医生的建议,避免再出现这种情况。

另外当女儿稍微稳定下来,好不容易心情有点平复之后,另外一个消息又打乱了我们,家里4个月的二宝开始发烧了。真的是心里憔悴,二宝太小只能吃一种药,就怕烧的扛不住又跟大的一样,老婆当天回去继续连夜照顾小的,这种精神焦虑只有经历过才会理解。好在二宝比大宝转好的更快点,一晚上就靠自己基本上就退下来了。这几天过的真的是太艰难了。