做国际化的项目主要的文字是以英文为主,但也有可能会出现些中文文字的情况,甚至有一些中文文字还是写在代码中的,那么有什么好的方法可以去查找这些在代码中的中文呢,下面就给大家介绍几种方法。
一.使用vs和正则表达式查找
Ctrl shift F,打开查找和替换。查找选项中,勾上使用正则表达式,查找的内容为(“.[\u4E00-\u9FA5] )|([\u4E00-\u9FA5] .”) ,可以排除注释中的代码,但是Unity的Deg和或者自定义的Deg代码没办法排除。xml和cs的格式全都找到了。

二.写Unity插件查找
可设置查找路径,排除指定名称的代码,针对个性话Debug筛选。在Console看到所有的查找结果
“`C#
using UnityEngine;
using UnityEditor;
using System.Collections.Generic;
using System.IO;
using System.Collections;
using System.Text.RegularExpressions;
using System.Text;
public class FindChineseTool : MonoBehaviour
{
[MenuItem(“Tools/查找代码中文”)]
public static void Pack()
{
Rect wr = new Rect(300, 400, 400, 100);
FindChineseWindow window = (FindChineseWindow)EditorWindow.GetWindowWithRect(typeof(FindChineseWindow), wr, true, “查找项目中的中文字符”);
window.Show();
}
}
public class FindChineseWindow : EditorWindow
{
private ArrayList csList = new ArrayList();
private int eachFrameFind = 4;
private int currentIndex = 0;
private bool isBeginUpdate = false;
private string outputText;
public string filePath = “/Script”;
private string strForShader= “”;
private void Awake()
{
}
private void GetAllFIle(DirectoryInfo dir)
{
FileInfo[] allFile = dir.GetFiles();
foreach (FileInfo fi in allFile)
{
//if (fi.DirectoryName.IndexOf("\\Assets\\Develop") == -1)//排除指定路径下的代码
// continue;
if(fi.DirectoryName.Contains("FindChineseTool"))//排除指定名称的代码
continue;
if (fi.FullName.IndexOf(".meta") == -1 && fi.FullName.IndexOf(".cs") != -1)
{
csList.Add(fi.DirectoryName "/" fi.Name);
}
}
DirectoryInfo[] allDir = dir.GetDirectories();
foreach (DirectoryInfo d in allDir)
{
GetAllFIle(d);
}
}
public void OnGUI()
{
EditorGUILayout.BeginHorizontal();
strForShader = GUILayout.TextArea(filePath, GUIStyle.none);
//Debug.Log("&& 图片名字:" str);
if (GUILayout.Button("粘贴", GUILayout.Width(100)))
{
TextEditor te = new TextEditor();
te.Paste();
strForShader = te.content.text;
}
EditorGUILayout.EndHorizontal();
EditorGUILayout.BeginHorizontal();
GUILayout.Label(outputText, EditorStyles.boldLabel);
if (GUILayout.Button("开始遍历项目"))
{
csList.Clear();
DirectoryInfo d = new DirectoryInfo(Application.dataPath filePath);
GetAllFIle(d);
GetAllFIle(d);
outputText = "游戏内代码文件的数量:" csList.Count;
isBeginUpdate = true;
outputText = "开始遍历项目";
}
EditorGUILayout.EndHorizontal();
}
void Update()
{
if (isBeginUpdate && currentIndex < csList.Count)
{
int count = (csList.Count - currentIndex) > eachFrameFind ? eachFrameFind : (csList.Count - currentIndex);
for (int i = 0; i < count; i )
{
string url = csList[currentIndex].ToString();
currentIndex = currentIndex 1;
url = url.Replace("\\", "/");
printChinese(url);
}
if (currentIndex >= csList.Count)
{
isBeginUpdate = false;
currentIndex = 0;
outputText = "遍历结束,总共" csList.Count;
}
}
}
private bool HasChinese(string str)
{
return Regex.IsMatch(str, @"[\u4e00-\u9fa5]");
}
private Regex regex = new Regex("\"[^\"]*\"");
private void printChinese(string path)
{
if (File.Exists(path))
{
string[] fileContents = File.ReadAllLines(path, Encoding.Default);
int count = fileContents.Length;
for (int i = 0; i < count; i )
{
string printStr = fileContents[i].Trim();
if (printStr.IndexOf("//") == 0) //说明是注释
continue;
if (printStr.IndexOf("Debug.Log") == 0) //说明是注释
continue;
//if (printStr.IndexOf("ALog.Log") == 0) //说明是注释
// continue;
MatchCollection matches = regex.Matches(printStr);
foreach (Match match in matches)
{
if (HasChinese(match.Value))
{
Debug.Log("路径:" path " 行数:" i " 内容:" printStr);
break;
}
}
}
fileContents = null;
}
}
- 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
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
- 100
- 101
- 102
- 103
- 104
- 105
- 106
- 107
- 108
- 109
- 110
}
“`
在找出所有带中文的代码后,然后就可以处理了。
* 大概思路是把路径和文字内容以及生成数字编号,以分号分隔生成txt文本
* 把txt文本导入xlsx中,以文本分隔为”,”。导入后把简体中文转换为繁体中文(中间具体内容项目原因不方便透露)
* 有转换后的表格的id。再通过替换,把简体中文替换为id。