757 lines
29 KiB
C#
757 lines
29 KiB
C#
using UnityEngine;
|
||
using System;
|
||
using System.Collections.Generic;
|
||
using UnityEditor;
|
||
using UnityEngine.UI;
|
||
using System.Text.RegularExpressions;
|
||
using System.IO;
|
||
|
||
public class Multilingual : MonoBehaviour
|
||
{
|
||
public class GualInfo
|
||
{
|
||
public string ChineseText = "";
|
||
public string TranslateText = "-1";
|
||
|
||
public string ToLine()
|
||
{
|
||
return string.Format("{0}\t{1}", ChineseText, TranslateText);
|
||
}
|
||
}
|
||
|
||
private static string AllTEXTPATH = Application.dataPath.Replace("Assets", "Multilingual\\");
|
||
private static string PREFABPATH = Application.dataPath+ "\\Project3D\\BundleData\\UI\\Prefab";
|
||
private static string TABFILEPATH = Application.dataPath + "\\Project3D\\BundleData\\Tables3D";
|
||
|
||
[MenuItem("ProTool/Multilingual/ReturnAllUIText 还原到汉语")]
|
||
public static void ReturnAllUIText1()
|
||
{
|
||
SetAllUIText("韩语//", 0);
|
||
}
|
||
|
||
[MenuItem("ProTool/Multilingual/ReturnAllTabText 还原到汉语")]
|
||
public static void ReturnAllTabText1()
|
||
{
|
||
var utf8WithoutBom = new System.Text.UTF8Encoding(false);
|
||
string allTabtextPath = AllTEXTPATH + "//AllTabText.txt";
|
||
FileInfo fi = new FileInfo(allTabtextPath);
|
||
Dictionary<string, List<string>> fiLineDics = new Dictionary<string, List<string>>();
|
||
if (fi.Exists)
|
||
{
|
||
StreamReader sw1 = new StreamReader(allTabtextPath, System.Text.Encoding.Unicode);
|
||
string line = sw1.ReadLine();
|
||
while (line!=null)
|
||
{
|
||
line = sw1.ReadLine();
|
||
if (string.IsNullOrEmpty(line))
|
||
continue;
|
||
string[] lines = line.Split('\t');
|
||
if (lines.Length < 2)
|
||
continue;
|
||
fiLineDics[lines[0]] = new List<string>(lines);
|
||
}
|
||
sw1.Close();
|
||
}
|
||
else
|
||
{
|
||
EditorUtility.DisplayDialog("123", string.Format("找不到 {0} 文件", allTabtextPath), "123");
|
||
return;
|
||
}
|
||
|
||
DirectoryInfo directoryInfo = Directory.CreateDirectory(TABFILEPATH);
|
||
FileInfo[] fileInfos = directoryInfo.GetFiles("*.txt", SearchOption.AllDirectories);
|
||
|
||
for (int n = 0; n < fileInfos.Length; n++)
|
||
{
|
||
if (fileInfos[n].Name.Contains("StrDictionary"))
|
||
continue;
|
||
StreamReader sw1 = new StreamReader(fileInfos[n].FullName, utf8WithoutBom);
|
||
List<string> lines = new List<string>();
|
||
string line = sw1.ReadLine();
|
||
lines.Add(line);
|
||
while (line!=null)
|
||
{
|
||
line = sw1.ReadLine();
|
||
if (string.IsNullOrEmpty(line))
|
||
continue;
|
||
string[] strs = line.Split('\t');
|
||
if (strs.Length < 2)
|
||
continue;
|
||
lines.Add(line);
|
||
}
|
||
sw1.Close();
|
||
if (lines.Count <= 2)
|
||
continue;
|
||
|
||
string[] column = lines[0].Split('\t');
|
||
for (int i = 2; i < lines.Count; i++)
|
||
{
|
||
if (!string.IsNullOrEmpty(lines[i]) && !lines[i][0].Equals('#') && !lines[i][0].Equals('\t'))
|
||
{
|
||
string[] segments = lines[i].Split('\t');
|
||
if (segments.Length != column.Length)
|
||
{
|
||
Debug.Log("error : " + lines[i]);
|
||
return;
|
||
}
|
||
|
||
for (int index = 2; index < column.Length; index++)
|
||
{
|
||
string key = string.Format("{0}#{1}#{2}", fileInfos[n].Name, column[index], segments[0]);
|
||
|
||
if (fiLineDics.ContainsKey(key))
|
||
{
|
||
segments[index] = fiLineDics[key][1];
|
||
lines[i] = string.Join("\t", segments);
|
||
}
|
||
}
|
||
|
||
EditorUtility.DisplayProgressBar("Find All Text", string.Format("Files : {0}/{1} {2}", n, fileInfos.Length, fileInfos[n].FullName), n * 1.0f / fileInfos.Length);
|
||
}
|
||
}
|
||
StreamWriter sw = new StreamWriter(fileInfos[n].FullName, false, utf8WithoutBom);
|
||
for (int i = 0; i < lines.Count; i++)
|
||
{
|
||
sw.WriteLine(lines[i]);
|
||
}
|
||
sw.Close();
|
||
}
|
||
|
||
EditorUtility.ClearProgressBar();
|
||
AssetDatabase.SaveAssets();
|
||
}
|
||
|
||
|
||
#region //韩语
|
||
[MenuItem("ProTool/Multilingual/韩语/Set/SetAllUIText")]
|
||
public static void SetAllUIText1()
|
||
{
|
||
SetAllUIText("韩语//",1);
|
||
}
|
||
|
||
[MenuItem("ProTool/Multilingual/韩语/Set/SetAllTabText")]
|
||
public static void SetAllTabText1()
|
||
{
|
||
SetAllTabText("韩语", TABFILEPATH, "AllTabText.txt");
|
||
}
|
||
|
||
[MenuItem("ProTool/Multilingual/韩语/Set/SetStrDictionatyText")]
|
||
public static void SetStrTabText1()
|
||
{
|
||
SetStrTabText("韩语", TABFILEPATH);
|
||
}
|
||
|
||
[MenuItem("ProTool/Multilingual/韩语/Get/GetAllUIText")]
|
||
public static void AllUIText1()
|
||
{
|
||
GetAllUIText("韩语");
|
||
}
|
||
|
||
[MenuItem("ProTool/Multilingual/韩语/Get/GetAllTabText")]
|
||
public static void AllTabText1()
|
||
{
|
||
GetAllTabText("韩语", TABFILEPATH, "AllTabText.txt");
|
||
}
|
||
|
||
#endregion
|
||
|
||
public static string TrimAll(string ChinaText)
|
||
{
|
||
ChinaText = ChinaText.TrimEnd('"');
|
||
ChinaText = ChinaText.TrimStart('"');
|
||
return ChinaText;
|
||
}
|
||
|
||
/// <summary>
|
||
/// AllUIText 本地上次获取的所有UIPrefab上的文本信息 NewAllUIText 需要进行翻译的文本的信息
|
||
/// 该函数先对比 AllUIText NewAllUIText两个文件,把NewAllUIText中有而AllUIText中没有或者NewAllUIText
|
||
/// 和AllUIText不一样的部分合并到AllUIText中并清空NewAllUIText文件。然后读取所有UIPrefab上的文本信息,并和AllUIText中的信息对比,
|
||
/// 把有变化的或者不存在的保存到NewAllUIText中,完成后NewAllUIText中的文本就是最新需要翻译的文本
|
||
/// </summary>
|
||
/// <param name="country"></param>
|
||
public static void GetAllUIText(string country)
|
||
{
|
||
string allUItextPath = AllTEXTPATH + string.Format("//{0}//AllUIText.txt", country);
|
||
string newallUItextPath = AllTEXTPATH + string.Format("//{0}//TranslateAllUIText.txt", country);
|
||
//1对比两个文件
|
||
FileInfo fi = new FileInfo(allUItextPath);
|
||
FileInfo fiNew = new FileInfo(newallUItextPath);
|
||
if(fi.Exists != fiNew.Exists )
|
||
{
|
||
EditorUtility.DisplayDialog("123", "有问题 AllUIText TranslateAllUIText 要么都存在要么都不存在,检查一下SVN的记录,是不是本地的被删掉了", "123");
|
||
return;
|
||
}
|
||
|
||
Dictionary<string,GualInfo> fiLineDics = new Dictionary<string, GualInfo>();
|
||
if (fiNew.Exists)
|
||
{
|
||
StreamReader sw1 = new StreamReader(allUItextPath, System.Text.Encoding.Unicode);
|
||
StreamReader swnew1 = new StreamReader(newallUItextPath, System.Text.Encoding.Unicode);
|
||
|
||
int index = 0;
|
||
string line = sw1.ReadLine();
|
||
while(line!=null)
|
||
{
|
||
index++;
|
||
line = sw1.ReadLine();
|
||
if (string.IsNullOrEmpty(line))
|
||
{
|
||
Debug.Log(index+" null "+line);
|
||
continue;
|
||
}
|
||
string[] lines = line.Split('\t');
|
||
if (lines.Length < 2)
|
||
{
|
||
Debug.Log(index + " <2 " + line);
|
||
continue;
|
||
}
|
||
|
||
Debug.Log("sdafsafdsaf : "+line);
|
||
|
||
GualInfo gualInfo = new GualInfo();
|
||
gualInfo.ChineseText = TrimAll(lines[0]);
|
||
gualInfo.TranslateText = lines[1];
|
||
fiLineDics[gualInfo.ChineseText] = gualInfo;
|
||
}
|
||
|
||
line = swnew1.ReadLine();
|
||
while (line!=null)
|
||
{
|
||
line = swnew1.ReadLine();
|
||
if (string.IsNullOrEmpty(line))
|
||
continue;
|
||
string[] lines = line.Split('\t');
|
||
if (lines.Length < 2)
|
||
continue;
|
||
GualInfo gualInfo = new GualInfo();
|
||
gualInfo.ChineseText = TrimAll(lines[0]);
|
||
gualInfo.TranslateText = lines[1];
|
||
if (fiLineDics.ContainsKey(gualInfo.ChineseText) == false || gualInfo.TranslateText != "-1")
|
||
{
|
||
fiLineDics[gualInfo.ChineseText] = gualInfo;
|
||
}
|
||
}
|
||
|
||
sw1.Close();
|
||
swnew1.Close();
|
||
}
|
||
|
||
DirectoryInfo directoryInfo = Directory.CreateDirectory(PREFABPATH);
|
||
FileInfo[] fileInfos = directoryInfo.GetFiles("*.prefab", SearchOption.AllDirectories);
|
||
for (int i = 0; i < fileInfos.Length; i++)
|
||
{
|
||
string assetPath = fileInfos[i].FullName.Replace("\\", "/");
|
||
assetPath = assetPath.Replace(Application.dataPath, "Assets");
|
||
UnityEngine.Object[] objs = AssetDatabase.LoadAllAssetsAtPath(assetPath);
|
||
for (int j = 0; j < objs.Length; j++)
|
||
{
|
||
if (objs[j] == null)
|
||
continue;
|
||
if (objs[j].GetType() != typeof(Text))
|
||
continue;
|
||
Text text = objs[j] as Text;
|
||
if (text == null)
|
||
continue;
|
||
string txtStr = text.text;
|
||
if (Regex.IsMatch(txtStr, @"[\u4e00-\u9fa5]+") == false)
|
||
{
|
||
continue;
|
||
}
|
||
string LabelText = txtStr.Replace("\t", "#t").Replace("\r\n", "#r#n").Replace("\r", "#r").Replace("\n", "#n");
|
||
GualInfo gualInfo = new GualInfo();
|
||
LabelText = TrimAll(LabelText);
|
||
if (fiLineDics.ContainsKey(LabelText) == false)
|
||
{
|
||
gualInfo.ChineseText = LabelText;
|
||
fiLineDics[LabelText] = gualInfo;
|
||
}
|
||
|
||
EditorUtility.DisplayProgressBar("Find All Text", string.Format("Files : {0}/{1}", i, fileInfos.Length), i * 1.0f / fileInfos.Length);
|
||
}
|
||
}
|
||
|
||
if (!fi.Directory.Exists)
|
||
{
|
||
fi.Directory.Create();
|
||
}
|
||
StreamWriter sw = new StreamWriter(allUItextPath,false, System.Text.Encoding.Unicode);
|
||
StreamWriter swnew = new StreamWriter(newallUItextPath,false, System.Text.Encoding.Unicode);
|
||
StreamWriter swOriginal = new StreamWriter(AllTEXTPATH + "//AllUIText.txt", false, System.Text.Encoding.Unicode);
|
||
|
||
//写出列名称
|
||
string linew = "中文" + "\t" + country;
|
||
sw.WriteLine(linew);
|
||
swnew.WriteLine(linew);
|
||
swOriginal.WriteLine(linew);
|
||
|
||
foreach (var gual in fiLineDics)
|
||
{
|
||
linew = gual.Value.ToLine();
|
||
if (gual.Value.TranslateText == "-1")
|
||
swnew.WriteLine(linew);
|
||
sw.WriteLine(linew);
|
||
swOriginal.WriteLine(linew);
|
||
}
|
||
|
||
sw.Close();
|
||
swnew.Close();
|
||
swOriginal.Close();
|
||
EditorUtility.ClearProgressBar();
|
||
}
|
||
|
||
public static void GetAllTabText(string country,string tabsDictionary,string translatetabName)
|
||
{
|
||
var utf8WithoutBom = new System.Text.UTF8Encoding(false);
|
||
string allUItextPath = AllTEXTPATH + string.Format("//{0}//{1}", country, translatetabName);
|
||
string newallUItextPath = AllTEXTPATH + string.Format("//{0}//Translate{1}", country, translatetabName);
|
||
//1对比两个文件
|
||
FileInfo fi = new FileInfo(allUItextPath);
|
||
FileInfo fiNew = new FileInfo(newallUItextPath);
|
||
if (fi.Exists != fiNew.Exists)
|
||
{
|
||
EditorUtility.DisplayDialog("123", "有问题 AllUIText NewAllUIText 要么都存在要么都不存在,检查一下SVN的记录,是不是本地的被删掉了", "123");
|
||
return;
|
||
}
|
||
|
||
Dictionary<string, GualInfo> fiLineDics = new Dictionary<string, GualInfo>();
|
||
if (fiNew.Exists)
|
||
{
|
||
StreamReader sw1 = new StreamReader(allUItextPath, System.Text.Encoding.Unicode);
|
||
StreamReader swnew1 = new StreamReader(newallUItextPath, System.Text.Encoding.Unicode);
|
||
|
||
string line = sw1.ReadLine();
|
||
while (line!=null)
|
||
{
|
||
line = sw1.ReadLine();
|
||
if (string.IsNullOrEmpty(line))
|
||
continue;
|
||
string[] lines = line.Split('\t');
|
||
if (lines.Length < 2)
|
||
continue;
|
||
GualInfo gualInfo = new GualInfo();
|
||
gualInfo.ChineseText = TrimAll(lines[0]);
|
||
gualInfo.TranslateText = lines[1];
|
||
fiLineDics[gualInfo.ChineseText] = gualInfo;
|
||
}
|
||
|
||
line = swnew1.ReadLine();
|
||
while (line!=null)
|
||
{
|
||
line = swnew1.ReadLine();
|
||
if (string.IsNullOrEmpty(line))
|
||
continue;
|
||
string[] lines = line.Split('\t');
|
||
if (lines.Length < 2)
|
||
continue;
|
||
GualInfo gualInfo = new GualInfo();
|
||
gualInfo.ChineseText = TrimAll(lines[0]);
|
||
gualInfo.TranslateText = lines[1];
|
||
if (fiLineDics.ContainsKey(gualInfo.ChineseText) ==false || gualInfo.TranslateText != "-1")
|
||
{
|
||
fiLineDics[gualInfo.ChineseText] = gualInfo;
|
||
}
|
||
}
|
||
|
||
sw1.Close();
|
||
swnew1.Close();
|
||
}
|
||
|
||
DirectoryInfo directoryInfo = Directory.CreateDirectory(tabsDictionary);
|
||
FileInfo[] fileInfos = directoryInfo.GetFiles("*.txt", SearchOption.AllDirectories);
|
||
|
||
for (int n = 0; n < fileInfos.Length; n++)
|
||
{
|
||
if (fileInfos[n].Name.Contains("StrDictionary"))
|
||
continue;
|
||
if (fileInfos[n].Name.Contains("StrFilter"))
|
||
continue;
|
||
if (fileInfos[n].Name.Contains("RoleName"))
|
||
continue;
|
||
if (fileInfos[n].Name.Contains("QuestionBank"))
|
||
continue;
|
||
StreamReader sw1 = new StreamReader(fileInfos[n].FullName, utf8WithoutBom);
|
||
List<string> lines = new List<string>();
|
||
string line = sw1.ReadLine();
|
||
lines.Add(line);
|
||
while (line!=null)
|
||
{
|
||
line = sw1.ReadLine();
|
||
if (string.IsNullOrEmpty(line))
|
||
continue;
|
||
string[] strs = line.Split('\t');
|
||
if (strs.Length < 2)
|
||
continue;
|
||
lines.Add(line);
|
||
}
|
||
|
||
sw1.Close();
|
||
|
||
if (lines.Count < 2)
|
||
continue;
|
||
|
||
string[] column = lines[0].Split('\t');
|
||
for (int i = 2; i < lines.Count; i++)
|
||
{
|
||
if (!string.IsNullOrEmpty(lines[i]) && !lines[i][0].Equals('#') && !lines[i][0].Equals('\t'))
|
||
{
|
||
string[] segments = lines[i].Split('\t');
|
||
if (segments.Length != column.Length)
|
||
{
|
||
Debug.Log("error : " + lines[i]);
|
||
return;
|
||
}
|
||
|
||
for (int index = 2; index < column.Length; index++)
|
||
{
|
||
if (Regex.IsMatch(segments[index], @"[\u4e00-\u9fa5]+") == false)
|
||
{
|
||
continue;
|
||
}
|
||
string ChineText = segments[index];
|
||
ChineText = TrimAll(ChineText);
|
||
if (fileInfos[n].Name.Contains("StrFilter") || fileInfos[n].Name.Contains("RoleName"))
|
||
{
|
||
if(fiLineDics.ContainsKey(ChineText))
|
||
fiLineDics.Remove(ChineText);
|
||
}
|
||
else if (fiLineDics.ContainsKey(ChineText) == false)
|
||
{
|
||
GualInfo gualInfo = new GualInfo();
|
||
gualInfo.ChineseText = ChineText;
|
||
gualInfo.TranslateText = "-1";
|
||
fiLineDics[ChineText] = gualInfo;
|
||
}
|
||
|
||
}
|
||
EditorUtility.DisplayProgressBar("Find All Text", string.Format("Files : {0}/{1} {2}", n, fileInfos.Length, fileInfos[n].FullName), n * 1.0f / fileInfos.Length);
|
||
}
|
||
}
|
||
|
||
}
|
||
|
||
if (!fi.Directory.Exists)
|
||
{
|
||
fi.Directory.Create();
|
||
}
|
||
StreamWriter sw = new StreamWriter(allUItextPath,false, System.Text.Encoding.Unicode);
|
||
StreamWriter swnew = new StreamWriter(newallUItextPath,false, System.Text.Encoding.Unicode);
|
||
StreamWriter swOriginal = new StreamWriter(AllTEXTPATH + "//" + translatetabName, false, System.Text.Encoding.Unicode);
|
||
|
||
//写出列名称
|
||
string linew = "中文" + "\t" + country;
|
||
sw.WriteLine(linew);
|
||
swnew.WriteLine(linew);
|
||
swOriginal.WriteLine(linew);
|
||
|
||
foreach (var gual in fiLineDics)
|
||
{
|
||
linew = gual.Value.ToLine();
|
||
if (gual.Value.TranslateText == "-1")
|
||
swnew.WriteLine(linew);
|
||
sw.WriteLine(linew);
|
||
swOriginal.WriteLine(linew);
|
||
}
|
||
|
||
sw.Close();
|
||
swnew.Close();
|
||
swOriginal.Close();
|
||
|
||
EditorUtility.ClearProgressBar();
|
||
}
|
||
|
||
public static void SetAllUIText(string country,int Opera) //Opera 0还原 1翻译
|
||
{
|
||
string allUItextPath = AllTEXTPATH + string.Format("{0}AllUIText.txt", country);
|
||
FileInfo fi = new FileInfo(allUItextPath);
|
||
Dictionary<string, GualInfo> fiLineDics = new Dictionary<string, GualInfo>();
|
||
Dictionary<string, GualInfo> fiLineDicsTrasn = new Dictionary<string, GualInfo>();
|
||
if (fi.Exists)
|
||
{
|
||
StreamReader sw1 = new StreamReader(allUItextPath, System.Text.Encoding.Unicode);
|
||
|
||
string line = "5432";
|
||
while (line!=null)
|
||
{
|
||
line = sw1.ReadLine();
|
||
if (string.IsNullOrEmpty(line))
|
||
continue;
|
||
string[] lines = line.Split('\t');
|
||
if (lines.Length < 2 || string.IsNullOrEmpty(lines[1]) || lines[1] == "-1")
|
||
continue;
|
||
GualInfo gual = new GualInfo();
|
||
gual.ChineseText = TrimAll(lines[0]);
|
||
gual.TranslateText = TrimAll(lines[1]);
|
||
fiLineDics[gual.ChineseText] = gual;
|
||
fiLineDicsTrasn[gual.TranslateText] = gual;
|
||
}
|
||
sw1.Close();
|
||
}
|
||
else
|
||
{
|
||
EditorUtility.DisplayDialog("123", string.Format("找不到 {0} 文件", allUItextPath), "123");
|
||
return;
|
||
}
|
||
|
||
DirectoryInfo directoryInfo = Directory.CreateDirectory(PREFABPATH);
|
||
FileInfo[] fileInfos = directoryInfo.GetFiles("*.prefab", SearchOption.AllDirectories);
|
||
int fileCount = fileInfos.Length;
|
||
for (int i = 0; i < fileInfos.Length; i++)
|
||
{
|
||
string fullPath = fileInfos[i].FullName.Replace("\\", "/");
|
||
string asstePath = fullPath.Replace(Application.dataPath.Replace("\\","/"), "Assets");
|
||
GameObject _prefab = AssetDatabase.LoadAssetAtPath(asstePath, typeof(GameObject)) as GameObject;
|
||
if (_prefab == null)
|
||
{
|
||
Debug.Log(string.Format("找不到 {0} 文件", asstePath));
|
||
continue;
|
||
}
|
||
GameObject prefabGameobject = PrefabUtility.InstantiatePrefab(_prefab) as GameObject;
|
||
Text[] objs = prefabGameobject.GetComponentsInChildren<Text>(true);
|
||
for (int j = 0; j < objs.Length; j++)
|
||
{
|
||
if (objs[j] == null)
|
||
continue;
|
||
string txtStr = objs[j].text;
|
||
if (Opera == 1 && Regex.IsMatch(txtStr, @"[\u4e00-\u9fa5]+") == false)
|
||
{
|
||
continue;
|
||
}
|
||
string LabelText = txtStr.Replace("\t", "#t").Replace("\r\n", "#r#n").Replace("\r", "#r").Replace("\n", "#n");
|
||
GualInfo gualInfo = null;
|
||
LabelText = TrimAll(LabelText);
|
||
if (fiLineDics.ContainsKey(LabelText))
|
||
{
|
||
gualInfo = fiLineDics[LabelText];
|
||
}
|
||
else if(fiLineDicsTrasn.ContainsKey(LabelText))
|
||
{
|
||
gualInfo = fiLineDicsTrasn[LabelText];
|
||
}
|
||
else
|
||
continue;
|
||
|
||
if(Opera == 1)
|
||
{
|
||
objs[j].text = gualInfo.TranslateText.Replace("#t", "\t").Replace("#r#n", "\r\n").Replace("#n", "\n").Replace("#r", "\r");
|
||
}
|
||
else
|
||
{
|
||
objs[j].text = gualInfo.ChineseText.Replace("#t", "\t").Replace("#r#n", "\r\n").Replace("#n", "\n").Replace("#r", "\r");
|
||
}
|
||
}
|
||
|
||
EditorUtility.DisplayProgressBar("Set All Text", string.Format("prefabs : {0}/{1} {2}", i, fileCount, fileInfos[i].Name), i * 1.0f / fileCount);
|
||
//PrefabUtility.SaveAsPrefabAsset(prefabGameobject, asstePath);
|
||
PrefabUtility.ReplacePrefab(prefabGameobject, _prefab, ReplacePrefabOptions.Default);
|
||
MonoBehaviour.DestroyImmediate(prefabGameobject);
|
||
}
|
||
|
||
EditorUtility.ClearProgressBar();
|
||
AssetDatabase.SaveAssets();
|
||
}
|
||
|
||
public static void SetAllTabText(string country,string tabsDictionary,string translatetabName)
|
||
{
|
||
var utf8WithoutBom = new System.Text.UTF8Encoding(false);
|
||
string allTabtextPath = AllTEXTPATH + string.Format("//{0}//{1}",country, translatetabName);
|
||
FileInfo fi = new FileInfo(allTabtextPath);
|
||
Dictionary<string, string> fiLineDics = new Dictionary<string,string>();
|
||
if (fi.Exists)
|
||
{
|
||
StreamReader sw1 = new StreamReader(allTabtextPath, System.Text.Encoding.Unicode);
|
||
string line = "1213";
|
||
while (line!=null)
|
||
{
|
||
line = sw1.ReadLine();
|
||
if (string.IsNullOrEmpty(line))
|
||
continue;
|
||
string[] lines = line.Split('\t');
|
||
if (lines.Length < 2 || string.IsNullOrEmpty(lines[1]) || lines[1] == "-1")
|
||
continue;
|
||
string ChinaText = TrimAll(lines[0]);
|
||
fiLineDics[ChinaText] = TrimAll(lines[1]);
|
||
}
|
||
sw1.Close();
|
||
}
|
||
else
|
||
{
|
||
EditorUtility.DisplayDialog("123", string.Format("找不到 {0} 文件", allTabtextPath), "123");
|
||
return;
|
||
}
|
||
|
||
DirectoryInfo directoryInfo = Directory.CreateDirectory(tabsDictionary);
|
||
FileInfo[] fileInfos = directoryInfo.GetFiles("*.txt", SearchOption.AllDirectories);
|
||
|
||
for (int n = 0; n < fileInfos.Length; n++)
|
||
{
|
||
if (fileInfos[n].Name.Contains("StrDictionary"))
|
||
continue;
|
||
if (fileInfos[n].Name.Contains("StrFilter"))
|
||
continue;
|
||
if (fileInfos[n].Name.Contains("RoleName"))
|
||
continue;
|
||
if (fileInfos[n].Name.Contains("QuestionBank"))
|
||
continue;
|
||
StreamReader sw1 = new StreamReader(fileInfos[n].FullName, utf8WithoutBom);
|
||
List<string> lines = new List<string>();
|
||
string line = sw1.ReadLine();
|
||
lines.Add(line);
|
||
while (line!=null)
|
||
{
|
||
line = sw1.ReadLine();
|
||
if (string.IsNullOrEmpty(line))
|
||
continue;
|
||
string[] strs = line.Split('\t');
|
||
if (strs.Length < 2)
|
||
continue;
|
||
lines.Add(line);
|
||
}
|
||
sw1.Close();
|
||
if (lines.Count <= 2)
|
||
continue;
|
||
|
||
string[] column = lines[0].Split('\t');
|
||
for (int i = 2; i < lines.Count; i++)
|
||
{
|
||
if (!string.IsNullOrEmpty(lines[i]) && !lines[i][0].Equals('#') && !lines[i][0].Equals('\t'))
|
||
{
|
||
string[] segments = lines[i].Split('\t');
|
||
if (segments.Length != column.Length)
|
||
{
|
||
Debug.Log("error : "+ fileInfos[n].Name +" " +i+" "+ lines[i]);
|
||
return;
|
||
}
|
||
|
||
for (int index = 2; index < column.Length; index++)
|
||
{
|
||
if (Regex.IsMatch(segments[index], @"[\u4e00-\u9fa5]+") == false)
|
||
{
|
||
continue;
|
||
}
|
||
string ChineText = segments[index];
|
||
ChineText = TrimAll(ChineText);
|
||
if (fiLineDics.ContainsKey(ChineText) && fiLineDics[ChineText]!="-1")
|
||
{
|
||
segments[index] = fiLineDics[ChineText];
|
||
}
|
||
}
|
||
lines[i] = string.Join("\t", segments);
|
||
|
||
EditorUtility.DisplayProgressBar("Find All Text", string.Format("Files : {0}/{1} {2}", n, fileInfos.Length, fileInfos[n].FullName), n * 1.0f / fileInfos.Length);
|
||
}
|
||
}
|
||
|
||
StreamWriter sw = new StreamWriter(fileInfos[n].FullName,false, utf8WithoutBom);
|
||
for(int i=0;i<lines.Count;i++)
|
||
{
|
||
sw.WriteLine(lines[i]);
|
||
}
|
||
sw.Close();
|
||
}
|
||
|
||
EditorUtility.ClearProgressBar();
|
||
}
|
||
|
||
public static void SetStrTabText(string country, string tabsDictionary)
|
||
{
|
||
|
||
List<string> IgnorID = new List<string>() {"2626","2627","2628","5990","5991","5992","5993", "46267" };
|
||
|
||
var utf8WithoutBom = new System.Text.UTF8Encoding(false);
|
||
string allTabtextPath = AllTEXTPATH + string.Format("//{0}//{1}", country, "StrDictionatyID.txt");
|
||
FileInfo fi = new FileInfo(allTabtextPath);
|
||
Dictionary<string, List<string>> fiLineDics = new Dictionary<string, List<string>>();
|
||
if (fi.Exists)
|
||
{
|
||
StreamReader sw2 = new StreamReader(allTabtextPath, System.Text.Encoding.Unicode);
|
||
string line1 = sw2.ReadLine();
|
||
while (line1 != null)
|
||
{
|
||
line1 = sw2.ReadLine();
|
||
if (string.IsNullOrEmpty(line1))
|
||
continue;
|
||
string[] lines1 = line1.Split('\t');
|
||
if (lines1.Length < 2)
|
||
{
|
||
Debug.Log("0 line len less 2 : " + line1);
|
||
continue;
|
||
}
|
||
fiLineDics[lines1[0]] = new List<string>(lines1);
|
||
}
|
||
sw2.Close();
|
||
}
|
||
else
|
||
{
|
||
EditorUtility.DisplayDialog("123", string.Format("找不到 {0} 文件", allTabtextPath), "123");
|
||
return;
|
||
}
|
||
|
||
FileInfo fileInfo = new FileInfo(tabsDictionary + "/StrDictionary.txt");
|
||
|
||
StreamReader sw1 = new StreamReader(fileInfo.FullName, utf8WithoutBom);
|
||
List<string> lines = new List<string>();
|
||
string line = sw1.ReadLine();
|
||
lines.Add(line);
|
||
while (line != null)
|
||
{
|
||
line = sw1.ReadLine();
|
||
if (string.IsNullOrEmpty(line))
|
||
continue;
|
||
string[] strs = line.Split('\t');
|
||
if (strs.Length < 2)
|
||
{
|
||
Debug.Log("1 line len less 2 : " + line);
|
||
continue;
|
||
}
|
||
lines.Add(line);
|
||
}
|
||
sw1.Close();
|
||
if (lines.Count <= 2)
|
||
return;
|
||
|
||
string[] column = lines[0].Split('\t');
|
||
for (int i = 2; i < lines.Count; i++)
|
||
{
|
||
if (!string.IsNullOrEmpty(lines[i]) && !lines[i][0].Equals('#') && !lines[i][0].Equals('\t'))
|
||
{
|
||
string[] segments = lines[i].Split('\t');
|
||
if (segments.Length != column.Length || IgnorID.Contains(segments[0]))
|
||
{
|
||
Debug.Log("error : " + fileInfo.Name + " " + i + " " + lines[i]);
|
||
continue;
|
||
}
|
||
|
||
if (fiLineDics.ContainsKey(segments[0]))
|
||
{
|
||
if(segments.Length > 2 && fiLineDics[segments[0]].Count > 2)
|
||
{
|
||
segments[2] = fiLineDics[segments[0]][2];
|
||
segments[2] = TrimAll(segments[2]);
|
||
lines[i] = string.Join("\t", segments);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
StreamWriter sw = new StreamWriter(fileInfo.FullName, false, utf8WithoutBom);
|
||
for (int i = 0; i < lines.Count; i++)
|
||
{
|
||
sw.WriteLine(lines[i]);
|
||
}
|
||
sw.Close();
|
||
|
||
EditorUtility.ClearProgressBar();
|
||
}
|
||
|
||
[MenuItem("ProTool/Multilingual/PrintPrafabAllText")]
|
||
public static void PrintPrafabAllText()
|
||
{
|
||
Text[] texts = Selection.activeGameObject.GetComponentsInChildren<Text>(true);
|
||
for(int i=0;i<texts.Length;i++)
|
||
{
|
||
string text = texts[i].text;
|
||
text = text.Replace('\\', '#');
|
||
Debug.Log(text);
|
||
}
|
||
}
|
||
} |