少年修仙传客户端基础资源
hch
2024-09-05 347a52fa2e17035d5772eaddda6cf450c6636c0b
0312 将语言表文字设置到预制体
2个文件已添加
476 ■■■■■ 已修改文件
Assets/Editor/Tool/ImportPrefabsLanguage.cs 465 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/Editor/Tool/ImportPrefabsLanguage.cs.meta 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Assets/Editor/Tool/ImportPrefabsLanguage.cs
New file
@@ -0,0 +1,465 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
using System.IO;
using UnityEngine.UI;
using vnxbqy.UI;
using System.Text;
public class ImportPrefabsLanguage : EditorWindow {
    private static string topFilePath = Application.dataPath + "/ResourcesOut/UI";
    [MenuItem("策划工具/==给打标记预制体进行翻译==", false)]
    private static void Export()
    {
        Debug.Log("工具说明:语言表必须已翻译好,多执行几次直到不再修改!!! 一般只在新地区需要翻译的时候使用一次即可,后续开发由程序正常提取到语言表,不再使用此工具");
        string readPath = "Assets\\ResourcesOut\\Refdata\\Config\\Language.txt";
        if (!File.Exists(readPath))
        {
            Debug.LogError("语言表Assets\\ResourcesOut\\Refdata\\Config\\Language.txt 不存在");
            return;
        }
        string[] lines = File.ReadAllLines(readPath, Encoding.UTF8);
        if (lines.Length == 0)
        {
            Debug.LogError("读语言表失败");
        }
        else
        {
            Debug.Log("读语言表成功 " + lines.Length);
        }
        Dictionary<string, string> dic = new Dictionary<string, string>();
        for (int i = 3; i < lines.Length; i++)
        {
            string[] info = lines[i].Split('\t');
            string key;
            try
            {
                key = info[0];
                if (dic.ContainsKey(key))
                {
                    continue;
                }
                dic[key] = info[1];
            }
            catch (System.Exception)
            {
                Debug.LogError("解析失败" + lines[i] + " - 行号: " + i);
                continue;
            }
        }
        string[] filepaths = Directory.GetFiles(topFilePath, "*.prefab", SearchOption.AllDirectories);
        Debug.LogFormat("UI预制体文字路径{0}, {1}", topFilePath, filepaths.Length);
        int startIndex = 0;
        int changeCnt = 0;
        EditorApplication.update = delegate ()
        {
            if (startIndex >= lines.Length)
            {
                Debug.LogFormat("翻译结束-- 检索{0}个预制体,共翻译{1}个文本", startIndex, changeCnt);
                EditorUtility.ClearProgressBar();
                EditorApplication.update = null;
                startIndex = 0;
                AssetDatabase.SaveAssets();
                AssetDatabase.Refresh();
                return;
            }
            string file = filepaths[startIndex];
            file = file.Substring(file.IndexOf("Assets"));
            bool isCancel = EditorUtility.DisplayCancelableProgressBar("翻译预制体文字-" + filepaths.Length, file, (float)startIndex / (float)filepaths.Length);
            GameObject _prefab = AssetDatabase.LoadAssetAtPath<GameObject>(file);
            UITextMark[] transArr14 = _prefab.GetComponentsInChildren<UITextMark>(true);
            foreach (UITextMark item in transArr14)
            {
                Text tmpText = item.GetComponent<Text>();
                if (tmpText == null)
                {
                    Debug.LogErrorFormat("异常:第{0}行翻译失败{1},{2}", startIndex, file, item.name);
                    continue;
                }
                if (!dic.ContainsKey(item.language))
                {
                    Debug.LogErrorFormat("异常:第{0}行翻译失败{1},{2}, 语言表 key不存在 {3}", startIndex, file, item.name, item.language);
                    continue;
                }
                if (tmpText.text != dic[item.language])
                {
                    tmpText.text = dic[item.language];
                    EditorUtility.SetDirty(_prefab);
                    changeCnt++;
                }
            }
            startIndex++;
            if (isCancel || startIndex >= filepaths.Length)
            {
                Debug.LogFormat("翻译结束-- 检索{0}个预制体,共翻译{1}个文本", startIndex, changeCnt);
                EditorUtility.ClearProgressBar();
                EditorApplication.update = null;
                startIndex = 0;
                AssetDatabase.SaveAssets();
                AssetDatabase.Refresh();
            }
        };
    }
}
//[MenuItem("策划工具/==批量给预制体打标记==", false)]
//private static void Export()
//{
//    string writePath = "importUITextMark.txt";
//    if (!File.Exists(writePath))
//    {
//        return;
//    }
//    string[] lines = File.ReadAllLines(writePath, Encoding.UTF8);
//    int startIndex = 0;
//    int changeCnt = 0;
//    EditorApplication.update = delegate () {
//        if (startIndex >= lines.Length)
//        {
//            Debug.LogFormat("批量标记修改成功-- 检索{0}行,共替换{1}行", startIndex, changeCnt);
//            EditorUtility.ClearProgressBar();
//            EditorApplication.update = null;
//            startIndex = 0;
//            AssetDatabase.SaveAssets();
//            AssetDatabase.Refresh();
//            return;
//        }
//        var lineStr = lines[startIndex];
//        string[] info = lines[startIndex].Split('\t');
//        startIndex++;
//        if (info.Length != 7)
//        {
//            Debug.LogFormat("异常:长度不对--执行到:第{0}行 {1}", startIndex, lineStr);
//            return;
//        }
//        string file = info[0];
//        int index = int.Parse(info[1]);
//        string name = info[2];
//        string content = info[5];
//        bool isCancel = EditorUtility.DisplayCancelableProgressBar("导入预制体文字-" + lines.Length, file, (float)startIndex / (float)lines.Length);
//        GameObject _prefab = AssetDatabase.LoadAssetAtPath<GameObject>(file);
//        if (_prefab == null)
//        {
//            if (isCancel)
//            {
//                EditorUtility.ClearProgressBar();
//                EditorApplication.update = null;
//                startIndex = 0;
//                AssetDatabase.SaveAssets();
//                AssetDatabase.Refresh();
//            }
//            Debug.LogFormat("异常:预制体异常--执行到:第{0}行 {1}", startIndex, lineStr);
//            return;
//        }
//        Text[] transArr = _prefab.GetComponentsInChildren<Text>(true);
//        Text item = transArr[index];
//        if (item.name == name)
//        {
//            var mark = item.GetComponent<UITextMark>();
//            if (mark == null)
//            {
//                mark = item.gameObject.AddComponent<UITextMark>();
//                mark.language = content;
//                EditorUtility.SetDirty(_prefab);
//                changeCnt++;
//                //Debug.LogFormat("字体批量文件--{0} , {1}", file, index);
//            }
//            else if (mark.language != content)
//            {
//                Debug.LogErrorFormat("异常:第{0}行替换失败{1},{2}", startIndex, file, name);
//            }
//        }
//        else
//        {
//            Debug.LogErrorFormat("异常:第{0}行替换失败{1},{2}", startIndex, file, name);
//        }
//        if (isCancel || startIndex >= lines.Length)
//        {
//            Debug.LogFormat("文字批量修改成功-- 检索{0}行,共替换{1}行", startIndex, changeCnt);
//            EditorUtility.ClearProgressBar();
//            EditorApplication.update = null;
//            startIndex = 0;
//            AssetDatabase.SaveAssets();
//            AssetDatabase.Refresh();
//        }
//    };
//    Debug.LogFormat("导入翻译完成");
//}
//导出和语言表共用的key,如果没有生成唯一key
//private static void Export()
//{
//    // 将港台的中文 写入到越南的表中
//    //Language  import3
//    string readPath = "Assets\\ResourcesOut\\Refdata\\Config\\Language.txt";
//    if (!File.Exists(readPath))
//    {
//        return;
//    }
//    string[] lines = File.ReadAllLines(readPath, Encoding.UTF8);
//    if (lines.Length == 0)
//    {
//        Debug.LogError("读语言表失败");
//    }
//    else
//    {
//        Debug.Log("读语言表成功 " + lines.Length);
//    }
//    Dictionary<string, string> dic = new Dictionary<string, string>();
//    for (int i = 3; i < lines.Length; i++)
//    {
//        string[] info = lines[i].Split('\t');
//        string key;
//        try
//        {
//            key = info[1];
//        }
//        catch (System.Exception)
//        {
//            Debug.LogError("读语言表失败" + lines[i] + " - " + i);
//            continue;
//        }
//        if (dic.ContainsKey(key))
//        {
//            continue;
//        }
//        dic[key] = info[0];
//    }
//    string[] linesZH = File.ReadAllLines("import3.txt", Encoding.UTF8);
//    Dictionary<string, string> dicZH = new Dictionary<string, string>();
//    SortedDictionary<string, string[]> dicZHList = new SortedDictionary<string, string[]>();
//    for (int i = 0; i < linesZH.Length; i++)
//    {
//        string[] info = linesZH[i].Split('\t');
//        var key = info[0] + "_" + info[1] + "_" + info[2];
//        dicZHList[key] = info;
//        if (string.IsNullOrEmpty(info[5].Trim()))
//        {
//            continue;
//        }
//        if (dicZH.ContainsKey(info[6]))
//        {
//            continue;
//        }
//        dicZH[info[6]] = info[5];
//    }
//    string writePath = "exportUILanguage3.txt";
//    if (File.Exists(writePath))
//    {
//        File.Delete(writePath);
//    }
//    FileStream fs = new FileStream(writePath, FileMode.Create);//如不存在,则创建新的文本文档
//    //1.找语言表有的写入line
//    //2.找语言表没有的 查找缓存,缓存没有的写入缓存 并写入line
//    foreach (var item in dicZHList)
//    {
//        var key = item.Key;
//        var line = item.Value;
//        var lineList = new List<string>(line);
//        bool islan = false;
//        if (string.IsNullOrEmpty(lineList[5].Trim()))
//        {
//            if (dic.ContainsKey(lineList[6]))
//            {
//                lineList[5] = dic[lineList[6]];
//                islan = true;
//            }
//            else if (dicZH.ContainsKey(lineList[6]))
//            {
//                lineList[5] = dicZH[lineList[6]];
//            }
//            else
//            {
//                dicZH[lineList[6]] = lineList[3];
//                lineList[5] = lineList[3];
//            }
//        }
//        else
//        {
//            if (dic.ContainsKey(lineList[6]))
//            {
//                islan = true;
//            }
//        }
//        string newLine = string.Join("\t", lineList);
//        newLine = newLine + "\t" + islan + "\r\n";
//        byte[] data1 = System.Text.Encoding.UTF8.GetBytes(newLine);
//        fs.Write(data1, 0, data1.Length);
//    }
//    fs.Close();
//    Debug.LogFormat("导出完成");
//}
// 将key读取从text的内容 移植到 keyname中
//public class ImportPrefabsLanguage : EditorWindow
//{
//    [MenuItem("策划工具/==批量导入预制体语言表设置==", false)]
//    private static void Export()
//    {
//        string writePath = "importUILanguage.txt";
//        if (!File.Exists(writePath))
//        {
//            return;
//        }
//        string[] lines = File.ReadAllLines(writePath, Encoding.UTF8);
//        int startIndex = 1;
//        int changeCnt = 0;
//        EditorApplication.update = delegate () {
//            if (startIndex >= lines.Length)
//            {
//                Debug.LogFormat("语言表文字批量修改成功-- 检索{0}行,共替换{1}行", startIndex, changeCnt);
//                EditorUtility.ClearProgressBar();
//                EditorApplication.update = null;
//                startIndex = 0;
//                AssetDatabase.SaveAssets();
//                AssetDatabase.Refresh();
//                return;
//            }
//            var lineStr = lines[startIndex];
//            string[] info = lines[startIndex].Split('\t');
//            startIndex++;
//            if (info.Length != 8)
//            {
//                Debug.LogFormat("异常:长度不对--执行到:第{0}行 {1}", startIndex, lineStr);
//                return;
//            }
//            string file = info[0];
//            int index = int.Parse(info[1]);
//            string name = info[2];
//            string content = info[4].Replace("\r", "").Replace("\n", "");
//            int state;
//            int.TryParse(info[7], out state);
//            bool isCancel = EditorUtility.DisplayCancelableProgressBar("导入预制体语言key-" + lines.Length, file, (float)startIndex / (float)lines.Length);
//            GameObject _prefab = AssetDatabase.LoadAssetAtPath<GameObject>(file);
//            if (_prefab == null)
//            {
//                if (isCancel)
//                {
//                    EditorUtility.ClearProgressBar();
//                    EditorApplication.update = null;
//                    startIndex = 0;
//                    AssetDatabase.SaveAssets();
//                    AssetDatabase.Refresh();
//                }
//                Debug.LogFormat("异常:预制体异常--执行到:第{0}行 {1}", startIndex, lineStr);
//                return;
//            }
//            Text[] transArr = _prefab.GetComponentsInChildren<Text>(true);
//            Text item = transArr[index];
//            if (item.name == name)
//            {
//                if (state == 1)
//                {
//                    bool reset = false;
//                    TextEx tmpTextEx = item as TextEx;  //TextImage 是TextEx的子类
//                    if ((tmpTextEx != null && tmpTextEx.isKey))
//                    {
//                        if (tmpTextEx.keyName != content)
//                        {
//                            tmpTextEx.keyName = content;
//                            reset = true;
//                        }
//                    }
//                    RichText tmpRichText = item as RichText;
//                    if ((tmpRichText != null && tmpRichText.language))
//                    {
//                        if (tmpRichText.enableDisplay != content)
//                        {
//                            tmpRichText.enableDisplay = content;
//                            reset = true;
//                        }
//                    }
//                    if (reset)
//                    {
//                        EditorUtility.SetDirty(_prefab);
//                        changeCnt++;
//                        //Debug.LogFormat("字体批量文件--{0} , {1}", file, index);
//                    }
//                }
//            }
//            else
//            {
//                Debug.LogErrorFormat("异常:第{0}行替换失败{1},{2}", startIndex, file, name);
//            }
//            if (isCancel || startIndex >= lines.Length)
//            {
//                Debug.LogFormat("文字key批量修改成功-- 检索{0}行,共替换{1}行", startIndex, changeCnt);
//                EditorUtility.ClearProgressBar();
//                EditorApplication.update = null;
//                startIndex = 0;
//                AssetDatabase.SaveAssets();
//                AssetDatabase.Refresh();
//            }
//        };
//    }
//}
Assets/Editor/Tool/ImportPrefabsLanguage.cs.meta
New file
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: d65a4f23b114bc9479c6c1d10c4bfd04
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant: