赞
踩
本篇笔记是在I2Localization插件的基础上针对项目需求,制定的一套本地化技术解决方案,目的是实现一个语言配置文件统一来管理整个游戏的语言本地化,个人认为是非常实用的,有兴趣的同学可以简单看下这个方案的解决思路。
游戏中的本地化考虑两种资源形式:
一、图片本地化二、文字本地化
图片本地化分为两种情况:
1、用Unity编辑器制作的静态界面图片本地化,如图
这个UI图片不需要程序动态加载,属于静态UI,我们借助本地化工具I2 Localization插件,即可实现这个UI的本地化,使用方法下面再说。
2、代码控制的动态添加的图片资源本地化,如图
这种UI变化涉及到的逻辑比较复杂,我们可能想要程序动态创建和更换这些UI的显示,本地化插件不够灵活,这时候我们把资源放入相应的语言路径下,动态加载即可(动态的资源放入Resoucres)
动态加载方法:
iconImg.sprite = Resources.Load(string.Format("UI/XXUI/{0}/{1}",GameTools.getInstance().getCurrentLanguageDict(),"Button"),typeof(Sprite)) as Sprite;
文字本地化也分为两种情况:
1、用Unity编辑器制作的静态文字界面本地化,如图
这种系统文字也使用本地化插件I2 Localization制作也很方便。
2、代码控制添加的系统文字,如图
在Resouces/Doc目录下编辑如下格式txt文件
- #根据";"来截取字符串,所以本地语言文字中不要存在“;”作为值,各个字段之间不能存在空格和换行
- Key;Type;Desc;english [bs];Chinese (Simplified);Chinese (Traditional)
- reveive;Text;;;领取;
解析脚本
- public class _LocalizationManager : _Instance<_LocalizationManager> {
- //存储语言字典
- private Dictionary<string,string> __languageDict;
-
- //ctor
- public _LocalizationManager(){
- __languageDict = new Dictionary<string,string>();
- //根据系统语言读取文本
- if(Application.isEditor) {
- //设置默认语言为中文
- GlobalConfig.LANGUAGE = "1";
- }
- LoadLanguageDictByTxt();
- }
-
- /// <summary>
- /// 通过txt文件加载游戏文字语言,路径 地址:Resources/Doc/doc.txt
- /// </summary>
- private void LoadLanguageDictByTxt(){
- if(__languageDict.Count > 0){
- __languageDict.Clear ();
- }
- //根据语言,将text格式的行录入语言字典中
- string p = "Doc/doc";
- TextAsset asseet = Resources.Load<TextAsset>(p);
- string l = asseet.ToString();
-
- //解析字符串
- string[] firstSplit = l.Split('\n');
- for(int i = 0; i< firstSplit.Length; i++){
- if(!string.IsNullOrEmpty(firstSplit[i])){
- string[] secondSplit = firstSplit[i].Split(';');
- if("Text" == secondSplit[1]){
- string value = secondSplit[int.Parse(GlobalConfig.LANGUAGE) + 2];
- if(string.IsNullOrEmpty(value)){
- //如果当前语言没有设置,默认读取中文
- value = secondSplit[4];
- }
- __languageDict.Add(secondSplit[0],value);
- } else
- continue;
- }
- }
- }
-
- /// <summary>
- /// 根据key值,读取文字
- /// </summary>
- /// <returns>The dic string.</returns>
- /// <param name="varKey">Variable key.</param>
- public string getDicStr(string varKey){
- if(string.IsNullOrEmpty(varKey))
- return null;
- string text;
- if(__languageDict.TryGetValue(varKey,out text)){
- return text;
- }
- return null;
- }
- }
2、关键看这个I2Languages组件(这个预设体是全局的哦,如果不想要全局,拖拽到场景中也可以,但是暂不推荐这样做,后面的封装需要全局),添加默认语言,注意下面勾选Store Integration IOS和android
3、添加terms,就是添加key-value
4、添加的terms类型要选择正确,区分图片类型和文字类型
5、在项目中创建一个UI(Text),拖拽I2Localization插件中的Localize脚本,然后选择要绑定的key,本地化图片操作相同,至此,本地化制作结束
6、将I2Localization配置的key-value打包(合并)成一个txt文件,方便后期统一翻译,而且用 _LocalizationManager.getInstance().getDicStr("xxx")接口也可以代码动态访问
7、如果手动修改了doc.txt,也可以import进来,点击import面板中的merge即可
优点:
1、配置多语言有可视化的界面,更方便。
2、只需要一个文件就能支持n种语言,后期翻译一键搞定。
3、扩展了I2Localization插件的文件解析方法,并且支持程序动态控制语言文字,更加灵活。
缺点:
1、所有的资源和文字都配在一个txt文件中,当游戏本地化数据足够大的时候,解析时间会增加
2、所有的语言配置都在一个文件中,容易造成多人开发冲突
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。