|  |  |  |  | using System.Collections.Generic; | 
					
						
							|  |  |  |  | using FairyGUI.Utils; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | namespace FairyGUI | 
					
						
							|  |  |  |  | { | 
					
						
							|  |  |  |  |     public class TranslationHelper | 
					
						
							|  |  |  |  |     { | 
					
						
							|  |  |  |  |         public static Dictionary<string, Dictionary<string, string>> strings; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         public static void LoadFromXML(XML source) | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  |             strings = new Dictionary<string, Dictionary<string, string>>(); | 
					
						
							|  |  |  |  |             XMLList.Enumerator et = source.GetEnumerator("string"); | 
					
						
							|  |  |  |  |             while (et.MoveNext()) | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 XML cxml = et.Current; | 
					
						
							|  |  |  |  |                 string key = cxml.GetAttribute("name"); | 
					
						
							|  |  |  |  |                 string text = cxml.text; | 
					
						
							|  |  |  |  |                 int i = key.IndexOf("-"); | 
					
						
							|  |  |  |  |                 if (i == -1) | 
					
						
							|  |  |  |  |                     continue; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |                 string key2 = key.Substring(0, i); | 
					
						
							|  |  |  |  |                 string key3 = key.Substring(i + 1); | 
					
						
							|  |  |  |  |                 Dictionary<string, string> col; | 
					
						
							|  |  |  |  |                 if (!strings.TryGetValue(key2, out col)) | 
					
						
							|  |  |  |  |                 { | 
					
						
							|  |  |  |  |                     col = new Dictionary<string, string>(); | 
					
						
							|  |  |  |  |                     strings[key2] = col; | 
					
						
							|  |  |  |  |                 } | 
					
						
							|  |  |  |  |                 col[key3] = text; | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         public static void TranslateComponent(PackageItem item) | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  |             if (TranslationHelper.strings == null) | 
					
						
							|  |  |  |  |                 return; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |             Dictionary<string, string> strings; | 
					
						
							|  |  |  |  |             if (!TranslationHelper.strings.TryGetValue(item.owner.id + item.id, out strings)) | 
					
						
							|  |  |  |  |                 return; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |             string elementId, value; | 
					
						
							|  |  |  |  |             ByteBuffer buffer = item.rawData; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |             buffer.Seek(0, 2); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |             int childCount = buffer.ReadShort(); | 
					
						
							|  |  |  |  |             for (int i = 0; i < childCount; i++) | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 int dataLen = buffer.ReadShort(); | 
					
						
							|  |  |  |  |                 int curPos = buffer.position; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |                 buffer.Seek(curPos, 0); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |                 ObjectType baseType = (ObjectType)buffer.ReadByte(); | 
					
						
							|  |  |  |  |                 ObjectType type = baseType; | 
					
						
							|  |  |  |  |                 buffer.Skip(4); | 
					
						
							|  |  |  |  |                 elementId = buffer.ReadS(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |                 if (type == ObjectType.Component) | 
					
						
							|  |  |  |  |                 { | 
					
						
							|  |  |  |  |                     if (buffer.Seek(curPos, 6)) | 
					
						
							|  |  |  |  |                         type = (ObjectType)buffer.ReadByte(); | 
					
						
							|  |  |  |  |                 } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |                 buffer.Seek(curPos, 1); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |                 if (strings.TryGetValue(elementId + "-tips", out value)) | 
					
						
							|  |  |  |  |                     buffer.WriteS(value); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |                 buffer.Seek(curPos, 2); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |                 int gearCnt = buffer.ReadShort(); | 
					
						
							|  |  |  |  |                 for (int j = 0; j < gearCnt; j++) | 
					
						
							|  |  |  |  |                 { | 
					
						
							|  |  |  |  |                     int nextPos = buffer.ReadUshort(); | 
					
						
							|  |  |  |  |                     nextPos += buffer.position; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |                     if (buffer.ReadByte() == 6) //gearText | 
					
						
							|  |  |  |  |                     { | 
					
						
							|  |  |  |  |                         buffer.Skip(2);//controller | 
					
						
							|  |  |  |  |                         int valueCnt = buffer.ReadShort(); | 
					
						
							|  |  |  |  |                         for (int k = 0; k < valueCnt; k++) | 
					
						
							|  |  |  |  |                         { | 
					
						
							|  |  |  |  |                             string page = buffer.ReadS(); | 
					
						
							|  |  |  |  |                             if (page != null) | 
					
						
							|  |  |  |  |                             { | 
					
						
							|  |  |  |  |                                 if (strings.TryGetValue(elementId + "-texts_" + k, out value)) | 
					
						
							|  |  |  |  |                                     buffer.WriteS(value); | 
					
						
							|  |  |  |  |                                 else | 
					
						
							|  |  |  |  |                                     buffer.Skip(2); | 
					
						
							|  |  |  |  |                             } | 
					
						
							|  |  |  |  |                         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |                         if (buffer.ReadBool() && strings.TryGetValue(elementId + "-texts_def", out value)) | 
					
						
							|  |  |  |  |                             buffer.WriteS(value); | 
					
						
							|  |  |  |  |                     } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |                     buffer.position = nextPos; | 
					
						
							|  |  |  |  |                 } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |                 if (baseType == ObjectType.Component && buffer.version >= 2) | 
					
						
							|  |  |  |  |                 { | 
					
						
							|  |  |  |  |                     buffer.Seek(curPos, 4); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |                     buffer.Skip(2); //pageController | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |                     buffer.Skip(4 * buffer.ReadShort()); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |                     int cpCount = buffer.ReadShort(); | 
					
						
							|  |  |  |  |                     for (int k = 0; k < cpCount; k++) | 
					
						
							|  |  |  |  |                     { | 
					
						
							|  |  |  |  |                         string target = buffer.ReadS(); | 
					
						
							|  |  |  |  |                         int propertyId = buffer.ReadShort(); | 
					
						
							|  |  |  |  |                         if (propertyId == 0 && strings.TryGetValue(elementId + "-cp-" + target, out value)) | 
					
						
							|  |  |  |  |                             buffer.WriteS(value); | 
					
						
							|  |  |  |  |                         else | 
					
						
							|  |  |  |  |                             buffer.Skip(2); | 
					
						
							|  |  |  |  |                     } | 
					
						
							|  |  |  |  |                 } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |                 switch (type) | 
					
						
							|  |  |  |  |                 { | 
					
						
							|  |  |  |  |                     case ObjectType.Text: | 
					
						
							|  |  |  |  |                     case ObjectType.RichText: | 
					
						
							|  |  |  |  |                     case ObjectType.InputText: | 
					
						
							|  |  |  |  |                         { | 
					
						
							|  |  |  |  |                             if (strings.TryGetValue(elementId, out value)) | 
					
						
							|  |  |  |  |                             { | 
					
						
							|  |  |  |  |                                 buffer.Seek(curPos, 6); | 
					
						
							|  |  |  |  |                                 buffer.WriteS(value); | 
					
						
							|  |  |  |  |                             } | 
					
						
							|  |  |  |  |                             if (strings.TryGetValue(elementId + "-prompt", out value)) | 
					
						
							|  |  |  |  |                             { | 
					
						
							|  |  |  |  |                                 buffer.Seek(curPos, 4); | 
					
						
							|  |  |  |  |                                 buffer.WriteS(value); | 
					
						
							|  |  |  |  |                             } | 
					
						
							|  |  |  |  |                             break; | 
					
						
							|  |  |  |  |                         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |                     case ObjectType.List: | 
					
						
							|  |  |  |  |                     case ObjectType.Tree: | 
					
						
							|  |  |  |  |                         { | 
					
						
							|  |  |  |  |                             buffer.Seek(curPos, 8); | 
					
						
							|  |  |  |  |                             buffer.Skip(2); | 
					
						
							|  |  |  |  |                             int itemCount = buffer.ReadShort(); | 
					
						
							|  |  |  |  |                             for (int j = 0; j < itemCount; j++) | 
					
						
							|  |  |  |  |                             { | 
					
						
							|  |  |  |  |                                 int nextPos = buffer.ReadUshort(); | 
					
						
							|  |  |  |  |                                 nextPos += buffer.position; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |                                 buffer.Skip(2); //url | 
					
						
							|  |  |  |  |                                 if (type == ObjectType.Tree) | 
					
						
							|  |  |  |  |                                     buffer.Skip(2); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |                                 //title | 
					
						
							|  |  |  |  |                                 if (strings.TryGetValue(elementId + "-" + j, out value)) | 
					
						
							|  |  |  |  |                                     buffer.WriteS(value); | 
					
						
							|  |  |  |  |                                 else | 
					
						
							|  |  |  |  |                                     buffer.Skip(2); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |                                 //selected title | 
					
						
							|  |  |  |  |                                 if (strings.TryGetValue(elementId + "-" + j + "-0", out value)) | 
					
						
							|  |  |  |  |                                     buffer.WriteS(value); | 
					
						
							|  |  |  |  |                                 else | 
					
						
							|  |  |  |  |                                     buffer.Skip(2); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |                                 if (buffer.version >= 2) | 
					
						
							|  |  |  |  |                                 { | 
					
						
							|  |  |  |  |                                     buffer.Skip(6); | 
					
						
							|  |  |  |  |                                     buffer.Skip(buffer.ReadShort() * 4);//controllers | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |                                     int cpCount = buffer.ReadShort(); | 
					
						
							|  |  |  |  |                                     for (int k = 0; k < cpCount; k++) | 
					
						
							|  |  |  |  |                                     { | 
					
						
							|  |  |  |  |                                         string target = buffer.ReadS(); | 
					
						
							|  |  |  |  |                                         int propertyId = buffer.ReadShort(); | 
					
						
							|  |  |  |  |                                         if (propertyId == 0 && strings.TryGetValue(elementId + "-" + j + "-" + target, out value)) | 
					
						
							|  |  |  |  |                                             buffer.WriteS(value); | 
					
						
							|  |  |  |  |                                         else | 
					
						
							|  |  |  |  |                                             buffer.Skip(2); | 
					
						
							|  |  |  |  |                                     } | 
					
						
							|  |  |  |  |                                 } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |                                 buffer.position = nextPos; | 
					
						
							|  |  |  |  |                             } | 
					
						
							|  |  |  |  |                             break; | 
					
						
							|  |  |  |  |                         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |                     case ObjectType.Label: | 
					
						
							|  |  |  |  |                         { | 
					
						
							|  |  |  |  |                             if (buffer.Seek(curPos, 6) && (ObjectType)buffer.ReadByte() == type) | 
					
						
							|  |  |  |  |                             { | 
					
						
							|  |  |  |  |                                 if (strings.TryGetValue(elementId, out value)) | 
					
						
							|  |  |  |  |                                     buffer.WriteS(value); | 
					
						
							|  |  |  |  |                                 else | 
					
						
							|  |  |  |  |                                     buffer.Skip(2); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |                                 buffer.Skip(2); | 
					
						
							|  |  |  |  |                                 if (buffer.ReadBool()) | 
					
						
							|  |  |  |  |                                     buffer.Skip(4); | 
					
						
							|  |  |  |  |                                 buffer.Skip(4); | 
					
						
							|  |  |  |  |                                 if (buffer.ReadBool() && strings.TryGetValue(elementId + "-prompt", out value)) | 
					
						
							|  |  |  |  |                                     buffer.WriteS(value); | 
					
						
							|  |  |  |  |                             } | 
					
						
							|  |  |  |  |                             break; | 
					
						
							|  |  |  |  |                         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |                     case ObjectType.Button: | 
					
						
							|  |  |  |  |                         { | 
					
						
							|  |  |  |  |                             if (buffer.Seek(curPos, 6) && (ObjectType)buffer.ReadByte() == type) | 
					
						
							|  |  |  |  |                             { | 
					
						
							|  |  |  |  |                                 if (strings.TryGetValue(elementId, out value)) | 
					
						
							|  |  |  |  |                                     buffer.WriteS(value); | 
					
						
							|  |  |  |  |                                 else | 
					
						
							|  |  |  |  |                                     buffer.Skip(2); | 
					
						
							|  |  |  |  |                                 if (strings.TryGetValue(elementId + "-0", out value)) | 
					
						
							|  |  |  |  |                                     buffer.WriteS(value); | 
					
						
							|  |  |  |  |                             } | 
					
						
							|  |  |  |  |                             break; | 
					
						
							|  |  |  |  |                         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |                     case ObjectType.ComboBox: | 
					
						
							|  |  |  |  |                         { | 
					
						
							|  |  |  |  |                             if (buffer.Seek(curPos, 6) && (ObjectType)buffer.ReadByte() == type) | 
					
						
							|  |  |  |  |                             { | 
					
						
							|  |  |  |  |                                 int itemCount = buffer.ReadShort(); | 
					
						
							|  |  |  |  |                                 for (int j = 0; j < itemCount; j++) | 
					
						
							|  |  |  |  |                                 { | 
					
						
							|  |  |  |  |                                     int nextPos = buffer.ReadUshort(); | 
					
						
							|  |  |  |  |                                     nextPos += buffer.position; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |                                     if (strings.TryGetValue(elementId + "-" + j, out value)) | 
					
						
							|  |  |  |  |                                         buffer.WriteS(value); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |                                     buffer.position = nextPos; | 
					
						
							|  |  |  |  |                                 } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |                                 if (strings.TryGetValue(elementId, out value)) | 
					
						
							|  |  |  |  |                                     buffer.WriteS(value); | 
					
						
							|  |  |  |  |                             } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |                             break; | 
					
						
							|  |  |  |  |                         } | 
					
						
							|  |  |  |  |                 } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |                 buffer.position = curPos + dataLen; | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  |     } | 
					
						
							|  |  |  |  | } |