예제 #1
0
 void ShowOtherLines()
 {
     if (newScriptLines == null)
     {
         return;
     }
     if (newScriptLines.Count > 0)
     {
         EditorGUILayout.LabelField("总计" + newScriptLines.Count + "需要手动修改国际化的代码 记录如下:");
     }
     scrollPos = EditorGUILayout.BeginScrollView(scrollPos);
     for (int i = 0; i < newScriptLines.Count; i++)
     {
         ScriptLineVo line = newScriptLines[i];
         if (!line.isCanAutoSet())
         {
             EditorGUILayout.BeginHorizontal();
             string error = (line.isStaticText || line.isCaseText || line.isConstText) ? " 不应该出现中文常量" : "";
             error += line.orgText.Count > 1 ? " 需要字符串拼接" : "";
             EditorGUILayout.LabelField(string.Format("{0} line:[{1}] Error:{2}", line.path, line.lineNum, error));
             if (GUILayout.Button("定位脚本", GUILayout.Width(100)))
             {
                 string path = Application.dataPath + line.path;
                 path = FindChineseTool.replaceWord(path, "/", "\\");
                 bool flag = FindChineseTool.OpenAsset(path, int.Parse(line.lineNum) - 1, _devPath);
                 if (!flag)
                 {
                     Debug.LogError("无法定位" + path);
                 }
             }
             EditorGUILayout.EndHorizontal();
         }
     }
     EditorGUILayout.EndScrollView();
 }
예제 #2
0
    public static List <ScriptLineVo> GetScriptLines(string path)
    {
        List <ScriptLineVo> lines = new List <ScriptLineVo>();

        string[] fileContents = File.ReadAllLines(path, Encoding.Default);
        path = path.Replace(Application.dataPath, "");
        int count = fileContents.Length;

        for (int i = 0; i < count; i++)
        {
            string scriptLine = fileContents[i].Trim();
            if (scriptLine.IndexOf("//") == 0)  //说明是注释
            {
                continue;
            }
            if (scriptLine.IndexOf("/*") == 0)  //说明是注释
            {
                continue;
            }
            if (scriptLine.IndexOf("*") == 0)  //说明是注释
            {
                continue;
            }
            if (scriptLine.IndexOf("Debug.") != -1)  //说明是注释
            {
                continue;
            }
            if (scriptLine.IndexOf("throw new Exception") == 0)
            {
                continue;
            }
            if (scriptLine.IndexOf("debugLog") != -1)
            {
                continue;
            }
            if (scriptLine.IndexOf("debugLog") != -1)
            {
                continue;
            }
            MatchCollection matches = regex.Matches(scriptLine);
            ScriptLineVo    line    = new ScriptLineVo(path, scriptLine, (i + 1).ToString());
            foreach (Match match in matches)
            {
                if (HasChinese(match.Value))
                {
                    line.orgText.Add(match.Value);
                }
            }
            if (line.orgText.Count > 0)
            {
                line.isStaticText = scriptLine.IndexOf("static ") != -1;
                line.isConstText  = scriptLine.IndexOf("const ") != -1;
                line.isCaseText   = scriptLine.IndexOf("case ") != -1;
                //Debug.Log(path);
                lines.Add(line);
            }
        }
        fileContents = null;
        return(lines);
    }
예제 #3
0
 void ReplaceScript()
 {
     for (int i = 0; i < scriptMapLines.Count; i++)
     {
         ScriptLineVo line = scriptMapLines[i];
         if (line.orgText.Count == 1 && !line.isStaticText)
         {
             string[] paths    = line.path.Split('|');
             string[] lineNums = line.lineNum.Split('|');
             for (int j = 0; j < paths.Length; j++)
             {
                 string[] fileContents = File.ReadAllLines(Application.dataPath + paths[j], Encoding.Default);
                 int      lineIdx      = int.Parse(lineNums[j]) - 1;
                 if (lineIdx == 0 || lineIdx >= fileContents.Length)
                 {
                     Debug.LogError("替换脚本出错");
                     continue;
                 }
                 string script = fileContents[lineIdx];
                 if (script.IndexOf("StringTools.GetLocalization") == -1)
                 {
                     Debug.Log("替换文本 Path:" + paths[j] + "  script:" + script);
                     string text = FindChineseTool.replaceWord(line.orgText[0], DOT, ",");
                     script = script.Replace(text, "StringTools.GetLocalization(" + line.id + ")");
                     fileContents[lineIdx] = script;
                     FindChineseTool.SaveSciptLines(Application.dataPath + paths[j], fileContents);
                 }
             }
         }
     }
 }
예제 #4
0
    bool MergeLines()
    {
        bool needSave = false;

        for (int i = 0; i < newScriptLines.Count; i++)
        {
            ScriptLineVo line = newScriptLines[i];
            if (line.isCanAutoSet())
            {//只处理一行只有一中文的情况
                ScriptLineVo oldLine = GetOldLine(line.orgText[0]);
                if (oldLine == null)
                {
                    _last_s_id++;
                    line.id = _last_s_id;
                    scriptMapLines.Add(line);
                    Debug.Log(string.Format("New file:{0} line:[{1}] \ntext:{2} \nscript:{3}", line.path, line.lineNum, line.orgText[0], line.stript));
                    needSave = true;
                }
                else
                {
                    if (oldLine.path.IndexOf(line.path) == -1)
                    {
                        oldLine.path    = oldLine.path + "|" + line.path;
                        oldLine.lineNum = oldLine.lineNum + "|" + line.lineNum;
                        Debug.Log(string.Format("Add file Path:{0} line:[{1}] \ntext:{2} \nscript:{3}", line.path, line.lineNum, line.orgText[0], line.stript));
                        needSave = true;
                    }
                }
            }
        }
        return(needSave);
    }
예제 #5
0
    void SaveMapFile(string path, bool merge)
    {
        if (merge && !MergeLines())//合并
        {
            Debug.Log("没有变动无需保存");
            state = OptStatus.None;
            return;
        }
        StringBuilder sb = new StringBuilder();

        sb.Append("id"); sb.Append(",");
        sb.Append("path"); sb.Append(",");
        sb.Append("line"); sb.Append(",");
        sb.Append("zh_cn"); sb.Append(",");
        sb.Append("zh_tw"); sb.Append("\n");
        List <ScriptLineVo> lines = scriptMapLines;
        List <string>       texts = new List <string>();

        for (int i = 0; i < lines.Count; i++)
        {
            ScriptLineVo line = lines[i];
            sb.Append(line.id);
            sb.Append(",");
            sb.Append(line.path);
            sb.Append(",");
            sb.Append(line.lineNum);
            sb.Append(",");
            line.orgText[0] = FindChineseTool.replaceWord(line.orgText[0], ",", DOT);
            sb.Append(line.orgText[0]);
            sb.Append(",");
            if (line.zh_tw == null)
            {
                sb.Append(LangguageTools.To_zh_tc(line.orgText[0]));
            }
            else
            {
                sb.Append(line.zh_tw);
            }
            sb.Append("\n");
        }
        if (File.Exists(path))
        {
            File.Delete(path);
        }
        FileUitl.SaveUTF8TextFile(path, sb.ToString());
        Debug.Log("保存成功!");
        if (merge)
        {
            state = OptStatus.None;
        }
    }
예제 #6
0
    public static List <ScriptLineVo> OpenSciptLines(string filePath, ref int lastId)
    {
        List <ScriptLineVo> lines = new List <ScriptLineVo>();

        string[] fileContents = File.ReadAllLines(filePath, Encoding.Default);
        int      count        = fileContents.Length;

        for (int i = 1; i < count; i++)
        {
            string[]     cols = fileContents[i].Split(',');
            ScriptLineVo line = new ScriptLineVo(cols[1], "", cols[2]);
            line.id    = int.Parse(cols[0]);
            line.zh_cn = cols[3];
            line.zh_tw = cols[4];
            line.orgText.Add(line.zh_cn);
            lines.Add(line);
            lastId = line.id;
        }
        return(lines);
    }
예제 #7
0
    void reSaveOfficialMapFile(string path)
    {
        StringBuilder sb = new StringBuilder();

        sb.Append("<?xml version=\"1.0\" encoding=\"utf-8\"?>"); sb.Append("\n");
        sb.Append("<root>"); sb.Append("\n");
        sb.Append("<Scripts>"); sb.Append("\n");
        List <ScriptLineVo> lines = scriptMapLines;

        for (int i = 0; i < lines.Count; i++)
        {
            /*<Script id="" zh_cn="" zh_tw="">*/
            ScriptLineVo line = lines[i];
            sb.Append(string.Format("<Script id=\"{0}\" zh_cn={1} zh_tw={2} />", line.id, line.zh_cn, line.zh_tw));
            sb.Append("\n");
        }
        sb.Append("</Scripts>"); sb.Append("\n");
        sb.Append("</root>");
        if (File.Exists(path))
        {
            File.Delete(path);
        }
        FileUitl.SaveTextFile(path, sb.ToString());
    }
예제 #8
0
 void OnGUI()
 {
     EditorGUILayout.Space();
     _scritpPath = EditorGUILayout.TextField("代码路径", _scritpPath);
     _devPath    = EditorGUILayout.TextField("VS2013路径", _devPath);
     _csvPath    = EditorGUILayout.TextField("CSV路径", _csvPath);
     if (state == OptStatus.None && GUILayout.Button("加载映射表", GUILayout.Width(200)))
     {
         if (File.Exists(_csvPath))
         {
             scriptMapLines = FindChineseTool.OpenSciptLines(_csvPath, ref _last_s_id);
         }
         else
         {
             scriptMapLines = new List <ScriptLineVo>();
         }
         _last_s_id = _last_s_id == 0 ? 100000 : _last_s_id;
         state      = OptStatus.Ready;
     }
     if ((state == OptStatus.Ready || state == OptStatus.Complete) && GUILayout.Button("扫描包含中文的代码", GUILayout.Width(200)))
     {
         state          = OptStatus.Start;
         newScriptLines = new List <ScriptLineVo>();
         DoSearch(Application.dataPath + _scritpPath);
     }
     //if (state == OptStatus.Complete && GUILayout.Button("生成代码国际化映射表", GUILayout.Width(200)))
     {
         //SaveMapFile(_csvPath,true);
     }
     //if (scriptMapLines != null && GUILayout.Button("批量替换中文代码", GUILayout.Width(200)))
     {
         //ReplaceScript();
     }
     if (scriptMapLines != null && GUILayout.Button("重新生成正式映射文件", GUILayout.Width(200)))
     {
         reSaveOfficialMapFile(Application.dataPath + _appPath);
     }
     if (scriptMapLines != null)
     {
         temp_id   = EditorGUILayout.TextField("ID", temp_id);
         tempZh_cn = EditorGUILayout.TextField("简体", tempZh_cn);
         EditorGUILayout.BeginHorizontal();
         if (GUILayout.Button("查看id对应的中文"))
         {
             int id = int.Parse(temp_id);
             if (id > 100000)
             {
                 ScriptLineVo line = GetLine(id);
                 if (line != null)
                 {
                     tempZh_cn = line.orgText[0];
                 }
                 else
                 {
                     Debug.Log("条目找不到");
                 }
             }
         }
         if (GUILayout.Button("保存对应ID的条目"))
         {
             int id = int.Parse(temp_id);
             if (id > 100000 && !string.IsNullOrEmpty(tempZh_cn))
             {
                 ScriptLineVo line = GetLine(id);
                 if (line == null)
                 {
                     ScriptLineVo oldLine = GetOldLine(tempZh_cn);
                     if (oldLine == null)
                     {
                         line    = new ScriptLineVo("", "", "");
                         line.id = id;
                         line.orgText.Add(tempZh_cn);
                         line.zh_cn = tempZh_cn;
                         scriptMapLines.Add(line);
                         SaveMapFile(_csvPath, false);
                         Debug.Log("新增条目");
                     }
                     else
                     {
                         Debug.LogError("该条目已经存在 id为:" + oldLine.id);
                         this.ShowNotification(new GUIContent("该条目已经存在 id为:" + oldLine.id));
                     }
                 }
                 else
                 {
                     line.orgText[0] = tempZh_cn;
                     line.zh_tw      = null;
                     Debug.Log("修改条目");
                     SaveMapFile(_csvPath, false);
                 }
             }
         }
         EditorGUILayout.EndHorizontal();
     }
     ShowOtherLines();
 }