查找unity工程代码中中文字符

时间:2023-01-18 18:45:38

游戏本地化的时候可能需要搜索工程代码中的中文字符。

这个可以通过加载文件一行一行读取后,通过正则来查询。

下面的代码LoadFile函数通过流加载文件,FindFile通过递归病使用DirectoryInfo类和FileInfo类读取子目录和文件,并通过正则匹配出中文字符。

使用时需要引用

using System.Text.RegularExpressions;
using System.IO;




        
 
 
 
<span style="white-space:pre"></span>public static ArrayList infoall;public static List<string> FileNames = new List<string>(); [MenuItem("Localization/Check Porject Chinese File")]public static void CheckChinese(){FileNames.Clear ();string dir = Application.dataPath + "/Scripts";FindFile(dir);Debug.Log ("包含中文的文件共" + FileNames.Count + "个");for(int i = 0; i < FileNames.Count; i++){Debug.Log ("包含中文的文件" + i +"           " + FileNames[i]);}}public static ArrayList LoadFile(string path,string name){//使用流的形式读取StreamReader sr =null;try{sr = File.OpenText(path+"//"+ name);}catch(Exception e){//路径与名称未找到文件则直接返回空return null;}string line;ArrayList arrlist = new ArrayList();while ((line = sr.ReadLine()) != null){//一行一行的读取//将每一行的内容存入数组链表容器中arrlist.Add(line);}//关闭流sr.Close();//销毁流sr.Dispose();//将数组链表容器返回return arrlist;} public static void FindFile(string dirPath) //参数dirPath为指定的目录{//在指定目录及子目录下查找文件,在listBox1中列出子目录及文件DirectoryInfo Dir=new DirectoryInfo(dirPath);foreach(DirectoryInfo d in Dir.GetDirectories())//查找子目录{FindFile(d.FullName);}foreach(FileInfo f in Dir.GetFiles("*.cs")) //查找文件{bool haveChinese = false;infoall = LoadFile(Dir.ToString(),f.Name);Regex rxChinaCharacter = new Regex ("[\u4e00-\u9fa5]+");  //正则匹配中文字符for(int i = 0 ;i < infoall.Count;i++){MatchCollection matches = rxChinaCharacter.Matches(infoall[i].ToString());if (matches.Count > 0){haveChinese = true;Debug.Log("文件名:"+f.FullName + "                     行号:"+ i + "                   内容" + infoall[i].ToString());}}if(haveChinese)FileNames.Add(f.FullName);}}