public static List <string> ConvertTranslationRequest(TranslationDictionary requests, bool encodeGET) { List <string> results = new List <string>(); var sb = new StringBuilder(); foreach (var kvp in requests) { var request = kvp.Value; if (sb.Length > 0) { sb.Append("<I2Loc>"); } sb.Append(GoogleLanguages.GetGoogleLanguageCode(request.LanguageCode)); sb.Append(":"); for (int i = 0; i < request.TargetLanguagesCode.Length; ++i) { if (i != 0) { sb.Append(","); } sb.Append(GoogleLanguages.GetGoogleLanguageCode(request.TargetLanguagesCode[i])); } sb.Append("="); var text = (TitleCase(request.Text) == request.Text) ? request.Text.ToLowerInvariant() : request.Text; if (!encodeGET) { sb.Append(text); } else { sb.Append(Uri.EscapeDataString(text)); if (sb.Length > 4000) { results.Add(sb.ToString()); sb.Length = 0; } } } results.Add(sb.ToString()); return(results); }
public static WWW GetTranslationWWW(string text, string LanguageCodeFrom, string LanguageCodeTo) { LanguageCodeFrom = GoogleLanguages.GetGoogleLanguageCode(LanguageCodeFrom); LanguageCodeTo = GoogleLanguages.GetGoogleLanguageCode(LanguageCodeTo); // Google has problem translating this "This Is An Example" but not this "this is an example" // so I'm asking google with the lowercase version and then reverting back if (TitleCase(text) == text) { text = text.ToLower(); } //string url = string.Format ("http://www.google.com/translate_t?hl=en&vi=c&ie=UTF8&oe=UTF8&submit=Translate&langpair={0}|{1}&text={2}", LanguageCodeFrom, LanguageCodeTo, Uri.EscapeUriString( text )); string url = string.Format("{0}?action=Translate&list={1}:{2}={3}", LocalizationManager.Sources[0].Google_WebServiceURL, LanguageCodeFrom, LanguageCodeTo, Uri.EscapeUriString(text)); //Debug.Log (url); WWW www = new WWW(url); return(www); }
private static string GetPluralType( MatchCollection matches, string langCode, _GetParam getParam) { for (int i = 0, nMatches = matches.Count; i < nMatches; ++i) { var match = matches[i]; var param = match.Groups[match.Groups.Count - 1].Value; var result = (string)getParam(param); if (result == null) continue; int amount = 0; if (!int.TryParse (result, out amount)) continue; var pluralType = GoogleLanguages.GetPluralType(langCode, amount); return pluralType.ToString (); } return null; }
public string Export_CSV(string Category, char Separator = ',') { StringBuilder Builder = new StringBuilder(); int nLanguages = (mLanguages.Count); Builder.AppendFormat("Key{0}Type{0}Desc", Separator); foreach (LanguageData langData in mLanguages) { Builder.Append(Separator); AppendString(Builder, GoogleLanguages.GetCodedLanguage(langData.Name, langData.Code), Separator); } Builder.Append("\n"); mTerms = mTerms.OrderBy(x => x.Term).ToList(); foreach (TermData termData in mTerms) { string Term; if (string.IsNullOrEmpty(Category) || (Category == EmptyCategory && termData.Term.IndexOfAny(CategorySeparators) < 0)) { Term = termData.Term; } else if (termData.Term.StartsWith(Category + @"/") && Category != termData.Term) { Term = termData.Term.Substring(Category.Length + 1); } else { continue; // Term doesn't belong to this category } AppendTerm(Builder, nLanguages, Term, termData, null, termData.Languages, termData.Languages_Touch, Separator, (byte)TranslationFlag.AutoTranslated_Normal, (byte)TranslationFlag.AutoTranslated_Touch); if (termData.HasTouchTranslations()) { AppendTerm(Builder, nLanguages, Term, termData, "[touch]", termData.Languages_Touch, null, Separator, (byte)TranslationFlag.AutoTranslated_Touch, (byte)TranslationFlag.AutoTranslated_Normal); } } return(Builder.ToString()); }
public string Export_I2CSV(string Category, char Separator = ',') { StringBuilder Builder = new StringBuilder(); //--[ Header ]---------------------------------- Builder.Append("Key[*]Type[*]Desc"); foreach (LanguageData langData in mLanguages) { Builder.Append("[*]"); Builder.Append(GoogleLanguages.GetCodedLanguage(langData.Name, langData.Code)); } Builder.Append("[ln]"); int nLanguages = (mLanguages.Count); foreach (TermData termData in mTerms) { string Term; if (string.IsNullOrEmpty(Category) || (Category == EmptyCategory && termData.Term.IndexOfAny(CategorySeparators) < 0)) { Term = termData.Term; } else if (termData.Term.StartsWith(Category + @"/") && Category != termData.Term) { Term = termData.Term.Substring(Category.Length + 1); } else { continue; // Term doesn't belong to this category } AppendI2Term(Builder, nLanguages, Term, termData, string.Empty, termData.Languages, termData.Languages_Touch, Separator, (byte)TranslationFlag.AutoTranslated_Normal, (byte)TranslationFlag.AutoTranslated_Touch); if (termData.HasTouchTranslations()) { AppendI2Term(Builder, nLanguages, Term, termData, "[touch]", termData.Languages_Touch, null, Separator, (byte)TranslationFlag.AutoTranslated_Touch, (byte)TranslationFlag.AutoTranslated_Normal); } } return(Builder.ToString()); }
public static bool HasJoinedWords = false; // Some languages (e.g. Chinese, Japanese and Thai) don't add spaces to their words (all characters are placed toguether) #endregion public static void SetLanguageAndCode(string LanguageName, string LanguageCode, bool RememberLanguage = true, bool Force = false) { if (mCurrentLanguage != LanguageName || mLanguageCode != LanguageCode || Force) { if (RememberLanguage) { PersistentStorage.SetSetting_String("I2 Language", LanguageName); } mCurrentLanguage = LanguageName; mLanguageCode = LanguageCode; mCurrentCulture = CreateCultureForCode(LanguageCode); if (mChangeCultureInfo) { SetCurrentCultureInfo(); } IsRight2Left = IsRTL(mLanguageCode); HasJoinedWords = GoogleLanguages.LanguageCode_HasJoinedWord(mLanguageCode); LocalizeAll(Force); } }
public static void CreateQueries(string text, string LanguageCodeFrom, string LanguageCodeTo, TranslationDictionary dict) { if (!text.Contains("[i2p_")) { AddQuery(text, LanguageCodeFrom, LanguageCodeTo, dict); return; } // Get pluralType 'Plural' int idx0 = 0; int idx1 = text.IndexOf("[i2p_"); if (idx1 == 0) // Handle case where the text starts with a plural tag { idx0 = text.IndexOf("]", idx1) + 1; idx1 = text.IndexOf("[i2p_"); if (idx1 < 0) { idx1 = text.Length; } } var pluralText = text.Substring(idx0, idx1 - idx0); var regex = new Regex(@"{\[(.*?)\]}"); for (var i = (ePluralType)0; i <= ePluralType.Plural; ++i) { if (!GoogleLanguages.LanguageHasPluralType(LanguageCodeTo, i.ToString())) { continue; } var newText = pluralText; int testNumber = GoogleLanguages.GetPluralTestNumber(LanguageCodeTo, i); newText = regex.Replace(newText, testNumber.ToString()); AddQuery(newText, LanguageCodeFrom, LanguageCodeTo, dict); } }
public static void SetLanguageAndCode(string LanguageName, string LanguageCode, bool RememberLanguage = true, bool Force = false) { if (mCurrentLanguage != LanguageName || mLanguageCode != LanguageCode || Force) { if (RememberLanguage) { PlayerPrefs.SetString("I2 Language", LanguageName); } mCurrentLanguage = LanguageName; mLanguageCode = LanguageCode; if (mChangeCultureInfo) { SetCurrentCultureInfo(); } else { IsRight2Left = IsRTL(mLanguageCode); HasJoinedWords = GoogleLanguages.LanguageCode_HasJoinedWord(mLanguageCode); } LocalizeAll(Force); } }
void OnGUI_LanguageList() { GUILayout.BeginHorizontal(EditorStyles.toolbar); GUILayout.FlexibleSpace(); GUILayout.Label("Languages:", EditorStyles.miniLabel, GUILayout.ExpandWidth(false)); GUILayout.FlexibleSpace(); GUILayout.Label("Code:", EditorStyles.miniLabel, GUILayout.Width(76)); GUILayout.EndHorizontal(); //--[ Language List ]-------------------------- int IndexLanguageToDelete = -1; int LanguageToMoveUp = -1; int LanguageToMoveDown = -1; mScrollPos_Languages = GUILayout.BeginScrollView(mScrollPos_Languages, "AS TextArea", GUILayout.MinHeight(100), GUILayout.MaxHeight(Screen.height), GUILayout.ExpandHeight(false)); List <string> codes = GoogleLanguages.GetAllInternationalCodes(); codes.Sort(); codes.Insert(0, string.Empty); for (int i = 0, imax = mProp_Languages.arraySize; i < imax; ++i) { GUILayout.BeginHorizontal(); SerializedProperty Prop_Lang = mProp_Languages.GetArrayElementAtIndex(i); SerializedProperty Prop_LangName = Prop_Lang.FindPropertyRelative("Name"); SerializedProperty Prop_LangCode = Prop_Lang.FindPropertyRelative("Code"); if (GUILayout.Button("X", "toolbarbutton", GUILayout.ExpandWidth(false))) { IndexLanguageToDelete = i; } GUILayout.BeginHorizontal(EditorStyles.toolbar); GUI.changed = false; string LanName = EditorGUILayout.TextField(Prop_LangName.stringValue, GUILayout.ExpandWidth(true)); if (GUI.changed && !string.IsNullOrEmpty(LanName)) { Prop_LangName.stringValue = LanName; GUI.changed = false; } int Index = Mathf.Max(0, codes.IndexOf(Prop_LangCode.stringValue)); GUI.changed = false; Index = EditorGUILayout.Popup(Index, codes.ToArray(), EditorStyles.toolbarPopup, GUILayout.Width(60)); if (GUI.changed && Index >= 0) { Prop_LangCode.stringValue = codes[Index]; } GUILayout.EndHorizontal(); GUI.enabled = (i < imax - 1); if (GUILayout.Button("\u25BC", EditorStyles.toolbarButton, GUILayout.Width(18))) { LanguageToMoveDown = i; } GUI.enabled = i > 0; if (GUILayout.Button("\u25B2", EditorStyles.toolbarButton, GUILayout.Width(18))) { LanguageToMoveUp = i; } GUI.enabled = true; if (GUILayout.Button(new GUIContent("Show", "Preview all localizations into this language"), EditorStyles.toolbarButton, GUILayout.Width(35))) { LocalizationManager.SetLanguageAndCode(LanName, Prop_LangCode.stringValue, false, true); } GUILayout.EndHorizontal(); } GUILayout.EndScrollView(); OnGUI_AddLanguage(mProp_Languages); if (IndexLanguageToDelete >= 0) { mLanguageSource.RemoveLanguage(mLanguageSource.mLanguages[IndexLanguageToDelete].Name); serializedObject.Update(); ParseTerms(true, false); mShouldDetectStoreIntegration = true; } if (LanguageToMoveUp >= 0) { SwapLanguages(LanguageToMoveUp, LanguageToMoveUp - 1); } if (LanguageToMoveDown >= 0) { SwapLanguages(LanguageToMoveDown, LanguageToMoveDown + 1); } }
public string Export_I2CSV(string Category, char Separator = ',', bool specializationsAsRows = true) { StringBuilder Builder = new StringBuilder(); //--[ Header ]---------------------------------- Builder.Append("Key[*]Type[*]Desc"); foreach (LanguageData langData in mLanguages) { Builder.Append("[*]"); if (!langData.IsEnabled()) { Builder.Append('$'); } Builder.Append(GoogleLanguages.GetCodedLanguage(langData.Name, langData.Code)); } Builder.Append("[ln]"); mTerms.Sort((a, b) => string.CompareOrdinal(a.Term, b.Term)); int nLanguages = (mLanguages.Count); bool firstLine = true; foreach (TermData termData in mTerms) { string Term; if (string.IsNullOrEmpty(Category) || (Category == EmptyCategory && termData.Term.IndexOfAny(CategorySeparators) < 0)) { Term = termData.Term; } else if (termData.Term.StartsWith(Category + @"/") && Category != termData.Term) { Term = termData.Term.Substring(Category.Length + 1); } else { continue; // Term doesn't belong to this category } if (!firstLine) { Builder.Append("[ln]"); } firstLine = false; if (!specializationsAsRows) { AppendI2Term(Builder, nLanguages, Term, termData, Separator, null); } else { var allSpecializations = termData.GetAllSpecializations(); for (int i = 0; i < allSpecializations.Count; ++i) { if (i != 0) { Builder.Append("[ln]"); } var specialization = allSpecializations[i]; AppendI2Term(Builder, nLanguages, Term, termData, Separator, specialization); } } } return(Builder.ToString()); }
void OnGUI_AddLanguage(SerializedProperty Prop_Languages) { //--[ Add Language Upper Toolbar ]----------------- GUILayout.BeginVertical(); GUILayout.BeginHorizontal(); GUILayout.BeginHorizontal(EditorStyles.toolbar); mLanguages_NewLanguage = EditorGUILayout.TextField("", mLanguages_NewLanguage, EditorStyles.toolbarTextField, GUILayout.ExpandWidth(true)); GUILayout.EndHorizontal(); GUI.enabled = !string.IsNullOrEmpty(mLanguages_NewLanguage); if (TestButton(eTest_ActionType.Button_AddLanguageManual, "Add", EditorStyles.toolbarButton, GUILayout.Width(50))) { Prop_Languages.serializedObject.ApplyModifiedProperties(); mLanguageSource.AddLanguage(mLanguages_NewLanguage, GoogleLanguages.GetLanguageCode(mLanguages_NewLanguage)); Prop_Languages.serializedObject.Update(); mLanguages_NewLanguage = ""; GUI.FocusControl(string.Empty); } GUI.enabled = true; GUILayout.EndHorizontal(); //--[ Add Language Bottom Toolbar ]----------------- GUILayout.BeginHorizontal(); //-- Language Dropdown ----------------- string CodesToExclude = string.Empty; foreach (var LanData in mLanguageSource.mLanguages) { CodesToExclude = string.Concat(CodesToExclude, "[", LanData.Code, "]"); } List <string> Languages = GoogleLanguages.GetLanguagesForDropdown(mLanguages_NewLanguage, CodesToExclude); GUI.changed = false; int index = EditorGUILayout.Popup(0, Languages.ToArray(), EditorStyles.toolbarDropDown); if (GUI.changed && index >= 0) { mLanguages_NewLanguage = GoogleLanguages.GetFormatedLanguageName(Languages[index]); } if (TestButton(eTest_ActionType.Button_AddLanguageFromPopup, "Add", EditorStyles.toolbarButton, GUILayout.Width(50)) && index >= 0) { Prop_Languages.serializedObject.ApplyModifiedProperties(); mLanguages_NewLanguage = GoogleLanguages.GetFormatedLanguageName(Languages[index]); if (!string.IsNullOrEmpty(mLanguages_NewLanguage)) { mLanguageSource.AddLanguage(mLanguages_NewLanguage, GoogleLanguages.GetLanguageCode(mLanguages_NewLanguage)); } Prop_Languages.serializedObject.Update(); mLanguages_NewLanguage = ""; GUI.FocusControl(string.Empty); } GUILayout.EndHorizontal(); GUILayout.EndVertical(); GUI.color = Color.white; }
public string Import_CSV(string Category, List <string[]> CSV, eSpreadsheetUpdateMode UpdateMode = eSpreadsheetUpdateMode.Replace) { string[] Tokens = CSV[0]; int LanguagesStartIdx = 1; int TypeColumnIdx = -1; int DescColumnIdx = -1; var ValidColumnName_Key = new string[] { "Key" }; var ValidColumnName_Type = new string[] { "Type" }; var ValidColumnName_Desc = new string[] { "Desc", "Description" }; if (Tokens.Length > 1 && ArrayContains(Tokens[0], ValidColumnName_Key)) { if (UpdateMode == eSpreadsheetUpdateMode.Replace) { ClearAllData(); } if (Tokens.Length > 2) { if (ArrayContains(Tokens[1], ValidColumnName_Type)) { TypeColumnIdx = 1; LanguagesStartIdx = 2; } if (ArrayContains(Tokens[1], ValidColumnName_Desc)) { DescColumnIdx = 1; LanguagesStartIdx = 2; } } if (Tokens.Length > 3) { if (ArrayContains(Tokens[2], ValidColumnName_Type)) { TypeColumnIdx = 2; LanguagesStartIdx = 3; } if (ArrayContains(Tokens[2], ValidColumnName_Desc)) { DescColumnIdx = 2; LanguagesStartIdx = 3; } } } else { return("Bad Spreadsheet Format.\nFirst columns should be 'Key', 'Type' and 'Desc'"); } int nLanguages = Mathf.Max(Tokens.Length - LanguagesStartIdx, 0); int[] LanIndices = new int[nLanguages]; for (int i = 0; i < nLanguages; ++i) { if (string.IsNullOrEmpty(Tokens[i + LanguagesStartIdx])) { LanIndices [i] = -1; continue; } string langToken = Tokens[i + LanguagesStartIdx]; string LanName, LanCode; bool isLangEnabled = true; if (langToken.StartsWith("$")) { isLangEnabled = false; langToken = langToken.Substring(1); } GoogleLanguages.UnPackCodeFromLanguageName(langToken, out LanName, out LanCode); int LanIdx = -1; if (!string.IsNullOrEmpty(LanCode)) { LanIdx = GetLanguageIndexFromCode(LanCode); } else { LanIdx = GetLanguageIndex(LanName, SkipDisabled: false); } if (LanIdx < 0) { LanguageData lanData = new LanguageData(); lanData.Name = LanName; lanData.Code = LanCode; lanData.Flags = (byte)(0 | (isLangEnabled?0:(int)eLanguageDataFlags.DISABLED)); mLanguages.Add(lanData); LanIdx = mLanguages.Count - 1; } LanIndices[i] = LanIdx; } //--[ Update the Languages array in the existing terms]----- nLanguages = mLanguages.Count; for (int i = 0, imax = mTerms.Count; i < imax; ++i) { TermData termData = mTerms[i]; if (termData.Languages.Length < nLanguages) { Array.Resize(ref termData.Languages, nLanguages); Array.Resize(ref termData.Flags, nLanguages); } } //--[ Keys ]-------------- for (int i = 1, imax = CSV.Count; i < imax; ++i) { Tokens = CSV[i]; string sKey = string.IsNullOrEmpty(Category) ? Tokens[0] : string.Concat(Category, "/", Tokens[0]); string specialization = null; if (sKey.EndsWith("]")) { int idx = sKey.LastIndexOf('['); if (idx > 0) { specialization = sKey.Substring(idx + 1, sKey.Length - idx - 2); if (specialization == "touch") { specialization = "Touch"; } sKey = sKey.Remove(idx); } } ValidateFullTerm(ref sKey); if (string.IsNullOrEmpty(sKey)) { continue; } TermData termData = GetTermData(sKey); // Check to see if its a new term if (termData == null) { termData = new TermData(); termData.Term = sKey; termData.Languages = new string[mLanguages.Count]; termData.Flags = new byte[mLanguages.Count]; for (int j = 0; j < mLanguages.Count; ++j) { termData.Languages[j] = string.Empty; } mTerms.Add(termData); mDictionary.Add(sKey, termData); } else // This term already exist if (UpdateMode == eSpreadsheetUpdateMode.AddNewTerms) { continue; } if (TypeColumnIdx > 0) { termData.TermType = GetTermType(Tokens[TypeColumnIdx]); } if (DescColumnIdx > 0) { termData.Description = Tokens[DescColumnIdx]; } for (int j = 0; j < LanIndices.Length && j < Tokens.Length - LanguagesStartIdx; ++j) { if (!string.IsNullOrEmpty(Tokens[j + LanguagesStartIdx])) // Only change the translation if there is a new value { var lanIdx = LanIndices[j]; if (lanIdx < 0) { continue; } var value = Tokens[j + LanguagesStartIdx]; if (value == "-") { value = string.Empty; } else if (value == "") { value = null; } termData.SetTranslation(lanIdx, value, specialization); } } } if (Application.isPlaying) { SaveLanguages(HasUnloadedLanguages()); } return(string.Empty); }
public static string RebuildTranslation(string text, TranslationDictionary dict, string LanguageCodeTo) { if (!text.Contains("[i2p_")) { return(GetTranslation(text, LanguageCodeTo, dict)); } // Get pluralType 'Plural' int idx0 = 0; int idx1 = text.IndexOf("[i2p_"); if (idx1 == 0) // Handle case where the text starts with a plural tag { idx0 = text.IndexOf("]", idx1) + 1; idx1 = text.IndexOf("[i2p_"); if (idx1 < 0) { idx1 = text.Length; } } var pluralText = text.Substring(idx0, idx1 - idx0); var match = Regex.Match(pluralText, @"{\[(.*?)\]}"); var param = (match == null ? string.Empty : match.Value); var sb = new System.Text.StringBuilder(); var newText = pluralText; int testNumber = GoogleLanguages.GetPluralTestNumber(LanguageCodeTo, ePluralType.Plural); newText = newText.Replace(param, testNumber.ToString()); var translation = GetTranslation(newText, LanguageCodeTo, dict); string pluralTranslation = translation.Replace(testNumber.ToString(), param); sb.Append(pluralTranslation); for (var i = (ePluralType)0; i < ePluralType.Plural; ++i) { if (!GoogleLanguages.LanguageHasPluralType(LanguageCodeTo, i.ToString())) { continue; } newText = pluralText; testNumber = GoogleLanguages.GetPluralTestNumber(LanguageCodeTo, i); newText = newText.Replace(param, testNumber.ToString()); translation = GetTranslation(newText, LanguageCodeTo, dict); translation = translation.Replace(testNumber.ToString(), param); if (!string.IsNullOrEmpty(translation) && translation != pluralTranslation) { sb.Append("[i2p_"); sb.Append(i.ToString()); sb.Append(']'); sb.Append(translation); } } return(sb.ToString()); }
public string Import_CSV(string Category, List <string[]> CSV, eSpreadsheetUpdateMode UpdateMode = eSpreadsheetUpdateMode.Replace) { string[] array = CSV[0]; int num = 1; int num2 = -1; int num3 = -1; string[] texts = new string[1] { "Key" }; string[] texts2 = new string[1] { "Type" }; string[] texts3 = new string[2] { "Desc", "Description" }; if (array.Length > 1 && ArrayContains(array[0], texts)) { if (UpdateMode == eSpreadsheetUpdateMode.Replace) { ClearAllData(); } if (array.Length > 2) { if (ArrayContains(array[1], texts2)) { num2 = 1; num = 2; } if (ArrayContains(array[1], texts3)) { num3 = 1; num = 2; } } if (array.Length > 3) { if (ArrayContains(array[2], texts2)) { num2 = 2; num = 3; } if (ArrayContains(array[2], texts3)) { num3 = 2; num = 3; } } int num4 = Mathf.Max(array.Length - num, 0); int[] array2 = new int[num4]; for (int i = 0; i < num4; i++) { if (string.IsNullOrEmpty(array[i + num])) { array2[i] = -1; continue; } string text = array[i + num]; bool flag = true; if (text.StartsWith("$")) { flag = false; text = text.Substring(1); } GoogleLanguages.UnPackCodeFromLanguageName(text, out string Language, out string code); int num5 = -1; num5 = (string.IsNullOrEmpty(code) ? GetLanguageIndex(Language) : GetLanguageIndexFromCode(code)); if (num5 < 0) { LanguageData languageData = new LanguageData(); languageData.Name = Language; languageData.Code = code; languageData.Flags = (byte)(0 | ((!flag) ? 1 : 0)); mLanguages.Add(languageData); num5 = mLanguages.Count - 1; } array2[i] = num5; } num4 = mLanguages.Count; int j = 0; for (int count = mTerms.Count; j < count; j++) { TermData termData = mTerms[j]; if (termData.Languages.Length < num4) { Array.Resize(ref termData.Languages, num4); Array.Resize(ref termData.Languages_Touch, num4); Array.Resize(ref termData.Flags, num4); } } int k = 1; for (int count2 = CSV.Count; k < count2; k++) { array = CSV[k]; string Term = string.IsNullOrEmpty(Category) ? array[0] : (Category + "/" + array[0]); bool flag2 = false; if (Term.EndsWith("[touch]")) { Term = Term.Remove(Term.Length - "[touch]".Length); flag2 = true; } ValidateFullTerm(ref Term); if (string.IsNullOrEmpty(Term)) { continue; } TermData termData2 = GetTermData(Term); if (termData2 == null) { termData2 = new TermData(); termData2.Term = Term; termData2.Languages = new string[mLanguages.Count]; termData2.Languages_Touch = new string[mLanguages.Count]; termData2.Flags = new byte[mLanguages.Count]; for (int l = 0; l < mLanguages.Count; l++) { termData2.Languages[l] = (termData2.Languages_Touch[l] = string.Empty); } mTerms.Add(termData2); mDictionary.Add(Term, termData2); } else if (UpdateMode == eSpreadsheetUpdateMode.AddNewTerms) { continue; } if (num2 > 0) { termData2.TermType = GetTermType(array[num2]); } if (num3 > 0) { termData2.Description = array[num3]; } for (int m = 0; m < array2.Length && m < array.Length - num; m++) { if (string.IsNullOrEmpty(array[m + num])) { continue; } int num6 = array2[m]; if (num6 >= 0) { string text2 = array[m + num]; if (flag2) { termData2.Languages_Touch[num6] = text2; termData2.Flags[num6] &= 253; } else { termData2.Languages[num6] = text2; termData2.Flags[num6] &= 254; } } } } return(string.Empty); } return("Bad Spreadsheet Format.\nFirst columns should be 'Key', 'Type' and 'Desc'"); }
static void ShowPluralTranslation(string pluralType, string langCode, string translation, ref string finalTranslation, bool show, bool allowDelete, bool showTag) { string tag = "[i2p_" + pluralType + "]"; int idx0 = translation.IndexOf(tag, System.StringComparison.OrdinalIgnoreCase); bool hasTranslation = idx0 >= 0 || pluralType == "Plural"; if (idx0 < 0) { idx0 = 0; } else { idx0 += tag.Length; } int idx1 = translation.IndexOf("[i2p_", idx0, System.StringComparison.OrdinalIgnoreCase); if (idx1 < 0) { idx1 = translation.Length; } var pluralTranslation = translation.Substring(idx0, idx1 - idx0); var newTrans = pluralTranslation; bool allowPluralForm = GoogleLanguages.LanguageHasPluralType(langCode, pluralType); if (hasTranslation && !allowPluralForm) { newTrans = ""; GUI.changed = true; } if (show && allowPluralForm) { if (!hasTranslation) { GUI.color = new Color(GUI.color.r, GUI.color.g, GUI.color.b, 0.35f); } GUILayout.BeginHorizontal(); if (showTag) { GUILayout.Label(pluralType, EditorStyles.miniLabel, GUILayout.Width(35)); } newTrans = EditorGUILayout.TextArea(pluralTranslation, Style_WrapTextField); if (allowDelete && GUILayout.Button("X", EditorStyles.toolbarButton, GUILayout.Width(15))) { newTrans = string.Empty; GUI.changed = true; GUIUtility.keyboardControl = 0; } GUILayout.EndHorizontal(); if (!hasTranslation) { GUI.color = new Color(GUI.color.r, GUI.color.g, GUI.color.b, 1); } } if (!string.IsNullOrEmpty(newTrans)) { if (hasTranslation || newTrans != pluralTranslation) { if (pluralType != "Plural") { finalTranslation += tag; } finalTranslation += newTrans; } } }
void OnGUI_LanguageList() { GUILayout.BeginHorizontal(EditorStyles.toolbar); GUILayout.FlexibleSpace(); GUILayout.Label("Languages:", EditorStyles.miniLabel, GUILayout.ExpandWidth(false)); GUILayout.FlexibleSpace(); GUILayout.Label("Code:", EditorStyles.miniLabel, GUILayout.Width(76)); GUILayout.EndHorizontal(); //--[ Language List ]-------------------------- int IndexLanguageToDelete = -1; int LanguageToMoveUp = -1; int LanguageToMoveDown = -1; mScrollPos_Languages = GUILayout.BeginScrollView(mScrollPos_Languages, EditorStyles.textArea, GUILayout.MinHeight(100), GUILayout.MaxHeight(Screen.height), GUILayout.ExpandHeight(false)); List <string> codes = GoogleLanguages.GetAllInternationalCodes(); codes.Sort(); codes.Insert(0, string.Empty); for (int i = 0, imax = mProp_Languages.arraySize; i < imax; ++i) { SerializedProperty Prop_Lang = mProp_Languages.GetArrayElementAtIndex(i); SerializedProperty Prop_LangName = Prop_Lang.FindPropertyRelative("Name"); SerializedProperty Prop_LangCode = Prop_Lang.FindPropertyRelative("Code"); SerializedProperty Prop_Flags = Prop_Lang.FindPropertyRelative("Flags"); bool isLanguageEnabled = (Prop_Flags.intValue & (int)eLanguageDataFlags.DISABLED) == 0; GUI.color = isLanguageEnabled ? Color.white : new Color(1, 1, 1, 0.3f); GUILayout.BeginHorizontal(); if (GUILayout.Button("X", "toolbarbutton", GUILayout.ExpandWidth(false))) { IndexLanguageToDelete = i; } GUILayout.BeginHorizontal(EditorStyles.toolbar); GUI.changed = false; string LanName = EditorGUILayout.TextField(Prop_LangName.stringValue, GUILayout.ExpandWidth(true)); if (GUI.changed && !string.IsNullOrEmpty(LanName)) { Prop_LangName.stringValue = LanName; GUI.changed = false; } int Index = Mathf.Max(0, codes.IndexOf(Prop_LangCode.stringValue)); GUI.changed = false; Index = EditorGUILayout.Popup(Index, codes.ToArray(), EditorStyles.toolbarPopup, GUILayout.Width(60)); if (GUI.changed && Index >= 0) { Prop_LangCode.stringValue = codes[Index]; } GUILayout.EndHorizontal(); GUI.enabled = (i < imax - 1); if (GUILayout.Button("\u25BC", EditorStyles.toolbarButton, GUILayout.Width(18))) { LanguageToMoveDown = i; } GUI.enabled = i > 0; if (GUILayout.Button("\u25B2", EditorStyles.toolbarButton, GUILayout.Width(18))) { LanguageToMoveUp = i; } GUI.enabled = true; if (GUILayout.Button(new GUIContent("Show", "Preview all localizations into this language"), EditorStyles.toolbarButton, GUILayout.Width(35))) { LocalizationManager.SetLanguageAndCode(LanName, Prop_LangCode.stringValue, false, true); } if (GUILayout.Button(new GUIContent("Translate", "Translate all empty terms"), EditorStyles.toolbarButton, GUILayout.ExpandWidth(false))) { TranslateAllToLanguage(LanName); } GUI.enabled = true; EditorGUI.BeginChangeCheck(); isLanguageEnabled = EditorGUILayout.Toggle(isLanguageEnabled, GUILayout.Width(15)); if (EditorGUI.EndChangeCheck()) { Prop_Flags.intValue = (Prop_Flags.intValue & ~(int)eLanguageDataFlags.DISABLED) | (isLanguageEnabled ? 0 : (int)eLanguageDataFlags.DISABLED); } GUILayout.EndHorizontal(); } GUILayout.EndScrollView(); OnGUI_AddLanguage(mProp_Languages); if (mConnection_WWW != null || mConnection_Text.Contains("Translating")) { // Connection Status Bar int time = (int)((Time.realtimeSinceStartup % 2) * 2.5); string Loading = mConnection_Text + ".....".Substring(0, time); GUI.color = Color.gray; GUILayout.BeginHorizontal(EditorStyles.textArea); GUILayout.Label(Loading, EditorStyles.miniLabel); GUI.color = Color.white; if (GUILayout.Button("Cancel", EditorStyles.toolbarButton, GUILayout.ExpandWidth(false))) { EditorApplication.update -= DelayedStartTranslation; StopConnectionWWW(); } GUILayout.EndHorizontal(); Repaint(); } if (IndexLanguageToDelete >= 0) { mLanguageSource.RemoveLanguage(mLanguageSource.mLanguages[IndexLanguageToDelete].Name); serializedObject.Update(); ParseTerms(true, false); } if (LanguageToMoveUp >= 0) { SwapLanguages(LanguageToMoveUp, LanguageToMoveUp - 1); } if (LanguageToMoveDown >= 0) { SwapLanguages(LanguageToMoveDown, LanguageToMoveDown + 1); } }
public string Import_CSV(string Category, List <string[]> CSV, eSpreadsheetUpdateMode UpdateMode = eSpreadsheetUpdateMode.Replace) { string[] Tokens = CSV[0]; int LanguagesStartIdx = 1; int TypeColumnIdx = -1; int DescColumnIdx = -1; var ValidColumnName_Key = new string[] { "Key" }; var ValidColumnName_Type = new string[] { "Type" }; var ValidColumnName_Desc = new string[] { "Desc", "Description" }; if (Tokens.Length > 1 && ArrayContains(Tokens[0], ValidColumnName_Key)) { if (UpdateMode == eSpreadsheetUpdateMode.Replace) { ClearAllData(); } if (Tokens.Length > 2) { if (ArrayContains(Tokens[1], ValidColumnName_Type)) { TypeColumnIdx = 1; LanguagesStartIdx = 2; } if (ArrayContains(Tokens[1], ValidColumnName_Desc)) { DescColumnIdx = 1; LanguagesStartIdx = 2; } } if (Tokens.Length > 3) { if (ArrayContains(Tokens[2], ValidColumnName_Type)) { TypeColumnIdx = 2; LanguagesStartIdx = 3; } if (ArrayContains(Tokens[2], ValidColumnName_Desc)) { DescColumnIdx = 2; LanguagesStartIdx = 3; } } } else { return("Bad Spreadsheet Format.\nFirst columns should be 'Key', 'Type' and 'Desc'"); } int nLanguages = Mathf.Max(Tokens.Length - LanguagesStartIdx, 0); int[] LanIndices = new int[nLanguages]; for (int i = 0; i < nLanguages; ++i) { if (string.IsNullOrEmpty(Tokens[i + LanguagesStartIdx])) { LanIndices [i] = -1; continue; } string langToken = Tokens[i + LanguagesStartIdx]; string LanName, LanCode; bool isLangEnabled = true; if (langToken.StartsWith("$")) { isLangEnabled = false; langToken = langToken.Substring(1); } GoogleLanguages.UnPackCodeFromLanguageName(langToken, out LanName, out LanCode); int LanIdx = -1; if (!string.IsNullOrEmpty(LanCode)) { LanIdx = GetLanguageIndexFromCode(LanCode); } else { LanIdx = GetLanguageIndex(LanName); } if (LanIdx < 0) { LanguageData lanData = new LanguageData(); lanData.Name = LanName; lanData.Code = LanCode; lanData.Flags = (byte)(0 | (isLangEnabled?0:(int)eLanguageDataFlags.DISABLED)); mLanguages.Add(lanData); LanIdx = mLanguages.Count - 1; } LanIndices[i] = LanIdx; } //--[ Update the Languages array in the existing terms]----- nLanguages = mLanguages.Count; for (int i = 0, imax = mTerms.Count; i < imax; ++i) { TermData termData = mTerms[i]; if (termData.Languages.Length < nLanguages) { Array.Resize(ref termData.Languages, nLanguages); Array.Resize(ref termData.Languages_Touch, nLanguages); Array.Resize(ref termData.Flags, nLanguages); } } //--[ Keys ]-------------- for (int i = 1, imax = CSV.Count; i < imax; ++i) { Tokens = CSV[i]; string sKey = string.IsNullOrEmpty(Category) ? Tokens[0] : string.Concat(Category, "/", Tokens[0]); bool isTouch = false; if (sKey.EndsWith("[touch]")) { sKey = sKey.Remove(sKey.Length - "[touch]".Length); isTouch = true; } LanguageSource.ValidateFullTerm(ref sKey); if (string.IsNullOrEmpty(sKey)) { continue; } TermData termData = GetTermData(sKey); // Check to see if its a new term if (termData == null) { termData = new TermData(); termData.Term = sKey; termData.Languages = new string[mLanguages.Count]; termData.Languages_Touch = new string[mLanguages.Count]; termData.Flags = new byte[mLanguages.Count]; for (int j = 0; j < mLanguages.Count; ++j) { termData.Languages[j] = termData.Languages_Touch[j] = string.Empty; } mTerms.Add(termData); mDictionary.Add(sKey, termData); } else // This term already exist if (UpdateMode == eSpreadsheetUpdateMode.AddNewTerms) { continue; } if (TypeColumnIdx > 0) { termData.TermType = GetTermType(Tokens[TypeColumnIdx]); } if (DescColumnIdx > 0) { termData.Description = Tokens[DescColumnIdx]; } for (int j = 0; j < LanIndices.Length && j < Tokens.Length - LanguagesStartIdx; ++j) { if (!string.IsNullOrEmpty(Tokens[j + LanguagesStartIdx])) // Only change the translation if there is a new value { var lanIdx = LanIndices[j]; if (lanIdx < 0) { continue; } var value = Tokens[j + LanguagesStartIdx]; //var isAuto = false;// value.Contains("[i2auto]"); //if (isAuto) //value = value.Replace ("[i2auto]", string.Empty); //if (value=="-") // value = string.Empty; if (isTouch) { termData.Languages_Touch[lanIdx] = value; /*if (isAuto) termData.Flags[lanIdx] |= (byte)TranslationFlag.AutoTranslated_Touch; * else */termData.Flags[lanIdx] &= byte.MaxValue ^ ((byte)TranslationFlag.AutoTranslated_Touch); } else { termData.Languages[lanIdx] = value; /*if (isAuto) termData.Flags[lanIdx] |= (byte)TranslationFlag.AutoTranslated_Normal; * else*/termData.Flags[lanIdx] &= byte.MaxValue ^ ((byte)TranslationFlag.AutoTranslated_Normal); } } } } return(string.Empty); }
public static void ApplyLocalizationParams(ref string translation, _GetParam getParam, bool allowLocalizedParameters = true) { if (translation == null) { return; } string pluralType = null; int idx0 = 0; int idx1 = translation.Length; int index = 0; while (index >= 0 && index < translation.Length) { int iParamStart = translation.IndexOf("{[", index); if (iParamStart < 0) { break; } int iParamEnd = translation.IndexOf("]}", iParamStart); if (iParamEnd < 0) { break; } // there is a sub param, so, skip this one: "this {[helo{[hi]} end" int isubParam = translation.IndexOf("{[", iParamStart + 1); if (isubParam > 0 && isubParam < iParamEnd) { index = isubParam; continue; } // Check that some plural parameters can have the form: {[#name]} var offset = translation[iParamStart + 2] == '#' ? 3 : 2; var param = translation.Substring(iParamStart + offset, iParamEnd - iParamStart - offset); var result = (string)getParam(param); if (result != null && allowLocalizedParameters) { // check if Param is Localized LanguageSourceData source; var termData = LocalizationManager.GetTermData(result, out source); if (termData != null) { int idx = source.GetLanguageIndex(LocalizationManager.CurrentLanguage); if (idx >= 0) { result = termData.GetTranslation(idx); } } var paramTag = translation.Substring(iParamStart, iParamEnd - iParamStart + 2); translation = translation.Replace(paramTag, result); int amount = 0; if (int.TryParse(result, out amount)) { pluralType = GoogleLanguages.GetPluralType(CurrentLanguageCode, amount).ToString(); } index = iParamStart + result.Length; } else { index = iParamEnd + 2; } } if (pluralType != null) { var tag = "[i2p_" + pluralType + "]"; idx0 = translation.IndexOf(tag, System.StringComparison.OrdinalIgnoreCase); if (idx0 < 0) { idx0 = 0; } else { idx0 += tag.Length; } idx1 = translation.IndexOf("[i2p_", idx0 + 1, System.StringComparison.OrdinalIgnoreCase); if (idx1 < 0) { idx1 = translation.Length; } translation = translation.Substring(idx0, idx1 - idx0); } }
public void AddLanguage(string LanguageName) { AddLanguage(LanguageName, GoogleLanguages.GetLanguageCode(LanguageName)); }
void OnGUI_LanguageList() { GUILayout.BeginHorizontal(EditorStyles.toolbar); GUILayout.FlexibleSpace(); GUILayout.Label("Languages:", EditorStyles.miniLabel, GUILayout.ExpandWidth(false)); GUILayout.FlexibleSpace(); GUILayout.Label("Code:", EditorStyles.miniLabel); GUILayout.Space(170); GUILayout.EndHorizontal(); //--[ Language List ]-------------------------- int IndexLanguageToDelete = -1; int LanguageToMoveUp = -1; int LanguageToMoveDown = -1; GUI.backgroundColor = Color.Lerp(GUITools.LightGray, Color.white, 0.5f); mScrollPos_Languages = GUILayout.BeginScrollView(mScrollPos_Languages, LocalizeInspector.GUIStyle_OldTextArea, GUILayout.MinHeight(200), /*GUILayout.MaxHeight(Screen.height),*/ GUILayout.ExpandHeight(false)); GUI.backgroundColor = Color.white; if (mLanguageCodePopupList == null || mLanguageCodePopupList.Count == 0) { mLanguageCodePopupList = GoogleLanguages.GetLanguagesForDropdown("", ""); mLanguageCodePopupList.Sort(); mLanguageCodePopupList.Insert(0, string.Empty); } for (int i = 0, imax = mProp_Languages.arraySize; i < imax; ++i) { SerializedProperty Prop_Lang = mProp_Languages.GetArrayElementAtIndex(i); SerializedProperty Prop_LangName = Prop_Lang.FindPropertyRelative("Name"); SerializedProperty Prop_LangCode = Prop_Lang.FindPropertyRelative("Code"); SerializedProperty Prop_Flags = Prop_Lang.FindPropertyRelative("Flags"); bool isLanguageEnabled = (Prop_Flags.intValue & (int)eLanguageDataFlags.DISABLED) == 0; GUI.color = isLanguageEnabled ? Color.white : new Color(1, 1, 1, 0.3f); GUILayout.BeginHorizontal(); if (GUILayout.Button("X", "toolbarbutton", GUILayout.ExpandWidth(false))) { IndexLanguageToDelete = i; } GUILayout.BeginHorizontal(EditorStyles.toolbar); EditorGUI.BeginChangeCheck(); string LanName = EditorGUILayout.TextField(Prop_LangName.stringValue, GUILayout.ExpandWidth(true)); if (EditorGUI.EndChangeCheck() && !string.IsNullOrEmpty(LanName)) { Prop_LangName.stringValue = LanName; } var currentCode = "[" + Prop_LangCode.stringValue + "]"; if (isLanguageEnabled) { int Index = Mathf.Max(0, mLanguageCodePopupList.FindIndex(c => c.Contains(currentCode))); EditorGUI.BeginChangeCheck(); Index = EditorGUILayout.Popup(Index, mLanguageCodePopupList.ToArray(), EditorStyles.toolbarPopup, GUILayout.Width(60)); if (EditorGUI.EndChangeCheck() && Index >= 0) { currentCode = mLanguageCodePopupList[Index]; int i0 = currentCode.IndexOf("["); int i1 = currentCode.IndexOf("]"); if (i0 >= 0 && i1 > i0) { Prop_LangCode.stringValue = currentCode.Substring(i0 + 1, i1 - i0 - 1); } else { Prop_LangCode.stringValue = string.Empty; } } var rect = GUILayoutUtility.GetLastRect(); GUI.Label(rect, Prop_LangCode.stringValue, EditorStyles.toolbarPopup); } else { GUILayout.Label(Prop_LangCode.stringValue, EditorStyles.toolbarPopup, GUILayout.Width(60)); } GUILayout.EndHorizontal(); GUI.enabled = (i < imax - 1); if (GUILayout.Button("\u25BC", EditorStyles.toolbarButton, GUILayout.Width(18))) { LanguageToMoveDown = i; } GUI.enabled = i > 0; if (GUILayout.Button("\u25B2", EditorStyles.toolbarButton, GUILayout.Width(18))) { LanguageToMoveUp = i; } GUI.enabled = true; if (GUILayout.Button(new GUIContent("Show", "Preview all localizations into this language"), EditorStyles.toolbarButton, GUILayout.Width(35))) { LocalizationManager.SetLanguageAndCode(LanName, Prop_LangCode.stringValue, false, true); } if (TestButtonArg(eTest_ActionType.Button_Languages_TranslateAll, i, new GUIContent("Translate", "Translate all empty terms"), EditorStyles.toolbarButton, GUILayout.ExpandWidth(false))) { GUITools.DelayedCall(() => TranslateAllToLanguage(LanName)); } GUI.enabled = true; GUI.color = Color.white; EditorGUI.BeginChangeCheck(); isLanguageEnabled = EditorGUILayout.Toggle(isLanguageEnabled, GUILayout.Width(15)); var r = GUILayoutUtility.GetLastRect(); GUI.Label(r, new GUIContent("", "Enable/Disable the language.\nDisabled languages can be used to store data values or to avoid showing Languages that are stil under development")); if (EditorGUI.EndChangeCheck()) { Prop_Flags.intValue = (Prop_Flags.intValue & ~(int)eLanguageDataFlags.DISABLED) | (isLanguageEnabled ? 0 : (int)eLanguageDataFlags.DISABLED); } GUILayout.EndHorizontal(); } GUILayout.EndScrollView(); OnGUI_AddLanguage(mProp_Languages); if (mConnection_WWW != null || mConnection_Text.Contains("Translating")) { // Connection Status Bar int time = (int)((Time.realtimeSinceStartup % 2) * 2.5); string Loading = mConnection_Text + ".....".Substring(0, time); GUI.color = Color.gray; GUILayout.BeginHorizontal(LocalizeInspector.GUIStyle_OldTextArea); GUILayout.Label(Loading, EditorStyles.miniLabel); GUI.color = Color.white; if (GUILayout.Button("Cancel", EditorStyles.toolbarButton, GUILayout.ExpandWidth(false))) { GoogleTranslation.CancelCurrentGoogleTranslations(); StopConnectionWWW(); } GUILayout.EndHorizontal(); Repaint(); } if (IndexLanguageToDelete >= 0) { if (EditorUtility.DisplayDialog("Confirm delete", "Are you sure you want to delete the selected language", "Yes", "Cancel")) { mLanguageSource.RemoveLanguage(mLanguageSource.mLanguages [IndexLanguageToDelete].Name); serializedObject.Update(); ParseTerms(true, false, false); } } if (LanguageToMoveUp >= 0) { SwapLanguages(LanguageToMoveUp, LanguageToMoveUp - 1); } if (LanguageToMoveDown >= 0) { SwapLanguages(LanguageToMoveDown, LanguageToMoveDown + 1); } }
public static void ApplyLocalizationParams(ref string translation, _GetParam getParam) { if (translation == null) { return; } string pluralType = null; int idx0 = 0; int idx1 = translation.Length; int index = 0; while (index >= 0 && index < translation.Length) { int iParamStart = translation.IndexOf("{[", index); if (iParamStart < 0) { break; } int iParamEnd = translation.IndexOf("]}", iParamStart); if (iParamEnd < 0) { break; } // there is a sub param, so, skip this one: "this {[helo{[hi]} end" int isubParam = translation.IndexOf("{[", iParamStart + 1); if (isubParam > 0 && isubParam < iParamEnd) { index = isubParam; continue; } var param = translation.Substring(iParamStart + 2, iParamEnd - iParamStart - 2); var result = (string)getParam(param); if (result != null) { var paramTag = translation.Substring(iParamStart, iParamEnd - iParamStart + 2); translation = translation.Replace(paramTag, result); int amount = 0; if (int.TryParse(result, out amount)) { pluralType = GoogleLanguages.GetPluralType(CurrentLanguageCode, amount).ToString(); } index = iParamStart + result.Length; } else { index = iParamEnd + 2; } } if (pluralType != null) { var tag = "[i2p_" + pluralType + "]"; idx0 = translation.IndexOf(tag, System.StringComparison.OrdinalIgnoreCase); if (idx0 < 0) { idx0 = 0; } else { idx0 += tag.Length; } idx1 = translation.IndexOf("[i2p_", idx0 + 1, System.StringComparison.OrdinalIgnoreCase); if (idx1 < 0) { idx1 = translation.Length; } translation = translation.Substring(idx0, idx1 - idx0); } }