bool OnGUI_SelectKey(ref string Term, bool Inherited) // Inherited==true means that the mTerm is empty and we are using the Label.text instead { GUILayout.Space(5); GUILayout.BeginHorizontal(); GUI.changed = false; mAllowEditKeyName = GUILayout.Toggle(mAllowEditKeyName, "Term:", EditorStyles.foldout, GUILayout.ExpandWidth(false)); if (GUI.changed && mAllowEditKeyName) { mNewKeyName = Term; mTermsArray = null; } bool bChanged = false; if (mTermsArray == null || (Term != "-" && System.Array.IndexOf(mTermsArray, Term) < 0)) { UpdateTermsList(Term); } if (Inherited) { GUI.contentColor = Color.Lerp(Color.gray, Color.yellow, 0.1f); } int Index = (Term == "-" || Term == "") ? mTermsArray.Length - 1 : System.Array.IndexOf(mTermsArray, Term); GUI.changed = false; int newIndex = EditorGUILayout.Popup(Index, mTermsArray); GUI.contentColor = Color.white; if (/*newIndex != Index && newIndex>=0*/ GUI.changed) { GUI.changed = false; if (mLocalize.Source != null && newIndex == mTermsArray.Length - 4) //< show terms from all sources > { mLocalize.Source = null; mTermsArray = null; } else if (newIndex == mTermsArray.Length - 2) //<inferred from text> { mNewKeyName = Term = string.Empty; } else if (newIndex == mTermsArray.Length - 1) //<none> { mNewKeyName = Term = "-"; } else { mNewKeyName = Term = mTermsArray[newIndex]; } if (GUI_SelectedTerm == 0) { mLocalize.SetTerm(mNewKeyName); } else { mLocalize.SetTerm(null, mNewKeyName); } mAllowEditKeyName = false; bChanged = true; } LanguageSourceData source = LocalizationManager.GetSourceContaining(Term); TermData termData = source.GetTermData(Term); if (termData != null) { if (Inherited) { bChanged = true; // if the term its inferred and a matching term its found, then use that } eTermType NewType = (eTermType)EditorGUILayout.EnumPopup(termData.TermType, GUILayout.Width(90)); if (termData.TermType != NewType) { termData.TermType = NewType; } } GUILayout.EndHorizontal(); if (mAllowEditKeyName) { GUILayout.BeginHorizontal(GUILayout.Height(1)); GUILayout.BeginHorizontal(EditorStyles.toolbar); if (mNewKeyName == null) { mNewKeyName = string.Empty; } GUI.changed = false; mNewKeyName = EditorGUILayout.TextField(mNewKeyName, new GUIStyle("ToolbarSeachTextField"), GUILayout.ExpandWidth(true)); if (GUI.changed) { mTermsArray = null; // regenerate this array to apply filtering GUI.changed = false; } if (GUILayout.Button(string.Empty, string.IsNullOrEmpty(mNewKeyName) ? "ToolbarSeachCancelButtonEmpty" : "ToolbarSeachCancelButton", GUILayout.ExpandWidth(false))) { mTermsArray = null; // regenerate this array to apply filtering mNewKeyName = string.Empty; } GUILayout.EndHorizontal(); string ValidatedName = mNewKeyName; LanguageSourceData.ValidateFullTerm(ref ValidatedName); bool CanUseNewName = (source.GetTermData(ValidatedName) == null); GUI.enabled = (!string.IsNullOrEmpty(mNewKeyName) && CanUseNewName); if (GUILayout.Button("Create", EditorStyles.toolbarButton, GUILayout.ExpandWidth(false))) { mNewKeyName = ValidatedName; mTermsArray = null; // this recreates that terms array LanguageSourceData Source = null; #if UNITY_EDITOR if (mLocalize.Source != null) { Source = mLocalize.Source.SourceData; } #endif if (Source == null) { Source = LocalizationManager.Sources[0]; } Term = mNewKeyName; var data = Source.AddTerm(mNewKeyName, eTermType.Text, false); if (data.Languages.Length > 0) { data.Languages[0] = mLocalize.GetMainTargetsText(); } Source.Editor_SetDirty(); AssetDatabase.SaveAssets(); mAllowEditKeyName = false; bChanged = true; GUIUtility.keyboardControl = 0; } GUI.enabled = (termData != null && !string.IsNullOrEmpty(mNewKeyName) && CanUseNewName); if (GUILayout.Button(new GUIContent("Rename", "Renames the term in the source and updates every object using it in the current scene"), EditorStyles.toolbarButton, GUILayout.ExpandWidth(false))) { mNewKeyName = ValidatedName; Term = mNewKeyName; mTermsArray = null; // this recreates that terms array mAllowEditKeyName = false; bChanged = true; LocalizationEditor.TermReplacements = new Dictionary <string, string>(System.StringComparer.Ordinal); LocalizationEditor.TermReplacements[termData.Term] = mNewKeyName; termData.Term = mNewKeyName; source.UpdateDictionary(true); LocalizationEditor.ReplaceTermsInCurrentScene(); GUIUtility.keyboardControl = 0; EditorApplication.update += LocalizationEditor.DoParseTermsInCurrentScene; } GUI.enabled = true; GUILayout.EndHorizontal(); bChanged |= OnGUI_SelectKey_PreviewTerms(ref Term); } GUILayout.Space(5); return(bChanged); }
static void OnGUI_Keys_Languages(string Key, ref TermData termdata, Localize localizeCmp, bool IsPrimaryKey, LanguageSource source) { //--[ Languages ]--------------------------- GUILayout.BeginVertical(EditorStyles.textArea, GUILayout.Height(1)); OnGUI_Keys_LanguageTranslations(Key, localizeCmp, IsPrimaryKey, ref termdata, source); if (termdata.TermType == eTermType.Text) { GUILayout.BeginHorizontal(); GUILayout.FlexibleSpace(); if (TestButton(eTest_ActionType.Button_Term_TranslateAll, "Translate All", "Button", GUILayout.Width(85))) { ClearErrors(); string mainText = localizeCmp == null?LanguageSource.GetKeyFromFullTerm(Key) : localizeCmp.GetMainTargetsText(); for (int i = 0; i < source.mLanguages.Count; ++i) { if (string.IsNullOrEmpty(termdata.GetTranslation(i)) && source.mLanguages[i].IsEnabled()) { var languages = (GUI_SelectedInputType == 0 ? termdata.Languages : termdata.Languages_Touch); var languagesOther = (GUI_SelectedInputType == 0 ? termdata.Languages_Touch : termdata.Languages); var langIdx = i; Translate(mainText, ref termdata, source.mLanguages[i].Code, (translation, error) => { if (error != null) { ShowError(error); } else if (translation != null) { languages[langIdx] = translation; languagesOther[langIdx] = null; } }); } } GUI.FocusControl(string.Empty); } GUILayout.EndHorizontal(); OnGUI_TranslatingMessage(); } GUILayout.EndVertical(); }
static void OnGUI_Keys_LanguageTranslations(string Key, Localize localizeCmp, bool IsPrimaryKey, ref TermData termdata, LanguageSource source) { bool IsSelect = Event.current.type == EventType.MouseUp; for (int i = 0; i < source.mLanguages.Count; ++i) { GUILayout.BeginHorizontal(); GUILayout.Label(source.mLanguages[i].Name, GUILayout.Width(100)); string Translation = (GUI_SelectedInputType == 0 ? termdata.Languages[i] : termdata.Languages_Touch[i]) ?? string.Empty; if (string.IsNullOrEmpty(Translation)) { Translation = (GUI_SelectedInputType == 1 ? termdata.Languages[i] : termdata.Languages_Touch[i]) ?? string.Empty; } if (termdata.Languages[i] != termdata.Languages_Touch[i] && !string.IsNullOrEmpty(termdata.Languages[i]) && !string.IsNullOrEmpty(termdata.Languages_Touch[i])) { GUI.contentColor = GUITools.LightYellow; } if (termdata.TermType == eTermType.Text) { GUI.changed = false; string CtrName = "TranslatedText" + i; GUI.SetNextControlName(CtrName); bool autoTranslated = termdata.IsAutoTranslated(i, GUI_SelectedInputType == 1); Translation = EditorGUILayout.TextArea(Translation, LocalizationEditor.Style_WrapTextField, GUILayout.Width(Screen.width - 260 - (autoTranslated ? 20 : 0))); if (GUI.changed) { if (GUI_SelectedInputType == 0) { termdata.Languages[i] = Translation; termdata.Flags[i] &= byte.MaxValue ^ (byte)TranslationFlag.AutoTranslated_Normal; } else { termdata.Languages_Touch[i] = Translation; termdata.Flags[i] &= byte.MaxValue ^ (byte)TranslationFlag.AutoTranslated_Touch; } EditorUtility.SetDirty(source); } if (localizeCmp != null && (GUI.changed || (GUI.GetNameOfFocusedControl() == CtrName && IsSelect))) { if (IsPrimaryKey && string.IsNullOrEmpty(localizeCmp.Term)) { localizeCmp.mTerm = Key; EditorUtility.SetDirty(localizeCmp); } if (!IsPrimaryKey && string.IsNullOrEmpty(localizeCmp.SecondaryTerm)) { localizeCmp.mTermSecondary = Key; EditorUtility.SetDirty(localizeCmp); } string PreviousLanguage = LocalizationManager.CurrentLanguage; LocalizationManager.PreviewLanguage(source.mLanguages[i].Name); localizeCmp.OnLocalize(true); LocalizationManager.PreviewLanguage(PreviousLanguage); } GUI.contentColor = Color.white; if (autoTranslated) { if (GUILayout.Button(new GUIContent("\u2713" /*"A"*/, "Translated by Google Translator\nClick the button to approve the translation"), EditorStyles.toolbarButton, GUILayout.Width(autoTranslated ? 20 : 0))) { termdata.Flags[i] &= (byte)(byte.MaxValue ^ (byte)(GUI_SelectedInputType == 0 ? TranslationFlag.AutoTranslated_Normal : TranslationFlag.AutoTranslated_Touch)); } } if (GUILayout.Button("Translate", EditorStyles.toolbarButton, GUILayout.Width(80))) { string mainText = localizeCmp == null?LanguageSource.GetKeyFromFullTerm(Key) : localizeCmp.GetMainTargetsText(); if (GUI_SelectedInputType == 0) { Translate(mainText, ref termdata, ref termdata.Languages[i], source.mLanguages[i].Code); termdata.Flags[i] |= (byte)TranslationFlag.AutoTranslated_Normal; } else { Translate(mainText, ref termdata, ref termdata.Languages_Touch[i], source.mLanguages[i].Code); termdata.Flags[i] |= (byte)TranslationFlag.AutoTranslated_Touch; } GUI.FocusControl(string.Empty); } } else { string MultiSpriteName = string.Empty; if (termdata.TermType == eTermType.Sprite && Translation.EndsWith("]")) // Handle sprites of type (Multiple): "SpritePath[SpriteName]" { int idx = Translation.LastIndexOf("["); int len = Translation.Length - idx - 2; MultiSpriteName = Translation.Substring(idx + 1, len); Translation = Translation.Substring(0, idx); } Object Obj = null; // Try getting the asset from the References section if (localizeCmp != null) { Obj = localizeCmp.FindTranslatedObject <Object>(Translation); } if (Obj == null && source != null) { Obj = source.FindAsset(Translation); } // If it wasn't in the references, Load it from Resources if (Obj == null && localizeCmp == null) { Obj = ResourceManager.pInstance.LoadFromResources <Object>(Translation); } System.Type ObjType = typeof(Object); switch (termdata.TermType) { case eTermType.Font: ObjType = typeof(Font); break; case eTermType.Texture: ObjType = typeof(Texture); break; case eTermType.AudioClip: ObjType = typeof(AudioClip); break; case eTermType.GameObject: ObjType = typeof(GameObject); break; case eTermType.Sprite: ObjType = typeof(Sprite); break; case eTermType.Material: ObjType = typeof(Material); break; #if NGUI case eTermType.UIAtlas: ObjType = typeof(UIAtlas); break; case eTermType.UIFont: ObjType = typeof(UIFont); break; #endif #if DFGUI case eTermType.dfFont: ObjType = typeof(dfFont); break; case eTermType.dfAtlas: ObjType = typeof(dfAtlas); break; #endif #if TK2D case eTermType.TK2dFont: ObjType = typeof(tk2dFont); break; case eTermType.TK2dCollection: ObjType = typeof(tk2dSpriteCollection); break; #endif #if TextMeshPro_Pre53 case eTermType.TextMeshPFont: ObjType = typeof(TMPro.TextMeshProFont); break; #elif TextMeshPro case eTermType.TextMeshPFont: ObjType = typeof(TMPro.TMP_FontAsset); break; #endif #if SVG case eTermType.SVGAsset: ObjType = typeof(SVGImporter.SVGAsset); break; #endif case eTermType.Object: ObjType = typeof(Object); break; } if (Obj != null && !string.IsNullOrEmpty(MultiSpriteName)) { string sPath = AssetDatabase.GetAssetPath(Obj); Object[] objs = AssetDatabase.LoadAllAssetRepresentationsAtPath(sPath); Obj = null; for (int j = 0, jmax = objs.Length; j < jmax; ++j) { if (objs[j].name.Equals(MultiSpriteName)) { Obj = objs[j]; break; } } } bool bShowTranslationLabel = (Obj == null && !string.IsNullOrEmpty(Translation)); if (bShowTranslationLabel) { GUI.backgroundColor = GUITools.DarkGray; GUILayout.BeginVertical("AS TextArea", GUILayout.Height(1)); GUILayout.Space(2); GUI.backgroundColor = Color.white; } Object NewObj = EditorGUILayout.ObjectField(Obj, ObjType, true, GUILayout.ExpandWidth(true)); if (Obj != NewObj && NewObj != null) { string sPath = AssetDatabase.GetAssetPath(NewObj); AddObjectPath(ref sPath, localizeCmp, NewObj); if (HasObjectInReferences(NewObj, localizeCmp)) { sPath = NewObj.name; } else if (termdata.TermType == eTermType.Sprite) { sPath += "[" + NewObj.name + "]"; } if (GUI_SelectedInputType == 0) { termdata.Languages[i] = sPath; } else { termdata.Languages_Touch[i] = sPath; } EditorUtility.SetDirty(source); } if (bShowTranslationLabel) { GUILayout.BeginHorizontal(); GUI.color = Color.red; GUILayout.FlexibleSpace(); GUILayout.Label(Translation, EditorStyles.miniLabel); GUILayout.FlexibleSpace(); GUI.color = Color.white; GUILayout.EndHorizontal(); GUILayout.EndVertical(); } } GUILayout.EndHorizontal(); } }
// this method shows the key description and the localization to each language public static void OnGUI_Keys_Languages(string Key, Localize localizeCmp, bool IsPrimaryKey = true) { if (Key == null) { Key = string.Empty; } TermData termdata = null; LanguageSource source = (localizeCmp == null ? mLanguageSource : localizeCmp.Source); if (source == null) { source = LocalizationManager.GetSourceContaining(Key, false); } if (source == null) { if (localizeCmp == null) { source = LocalizationManager.Sources[0]; } else { source = LocalizationManager.GetSourceContaining(IsPrimaryKey ? localizeCmp.SecondaryTerm : localizeCmp.Term, true); } } if (string.IsNullOrEmpty(Key)) { EditorGUILayout.HelpBox("Select a Term to Localize", UnityEditor.MessageType.Info); return; } else { termdata = source.GetTermData(Key); if (termdata == null && localizeCmp != null) { var realSource = LocalizationManager.GetSourceContaining(Key, false); if (realSource != null) { termdata = realSource.GetTermData(Key); source = realSource; } } if (termdata == null) { EditorGUILayout.HelpBox(string.Format("Key '{0}' is not Localized or it is in a different Language Source", Key), UnityEditor.MessageType.Error); GUILayout.BeginHorizontal(); GUILayout.FlexibleSpace(); if (GUILayout.Button("Add Term to Source")) { source.AddTerm(Key, eTermType.Text); GetParsedTerm(Key); SetAllTerms_When_InferredTerms_IsInSource(); } GUILayout.FlexibleSpace(); GUILayout.EndHorizontal(); return; } } //--[ Type ]---------------------------------- if (localizeCmp == null) { GUILayout.BeginHorizontal(); GUILayout.Label("Type:", GUILayout.ExpandWidth(false)); eTermType NewType = (eTermType)EditorGUILayout.EnumPopup(termdata.TermType, GUILayout.ExpandWidth(true)); if (termdata.TermType != NewType) { termdata.TermType = NewType; } GUILayout.EndHorizontal(); } //--[ Description ]--------------------------- mKeysDesc_AllowEdit = GUILayout.Toggle(mKeysDesc_AllowEdit, "Description", EditorStyles.foldout, GUILayout.ExpandWidth(true)); if (mKeysDesc_AllowEdit) { string NewDesc = EditorGUILayout.TextArea(termdata.Description, LocalizationEditor.Style_WrapTextField); if (NewDesc != termdata.Description) { termdata.Description = NewDesc; EditorUtility.SetDirty(source); } } else { EditorGUILayout.HelpBox(string.IsNullOrEmpty(termdata.Description) ? "No description" : termdata.Description, UnityEditor.MessageType.Info); } OnGUI_Keys_Language_SpecializationsBar(); //--[ Languages ]--------------------------- GUILayout.BeginVertical("AS TextArea", GUILayout.Height(1)); OnGUI_Keys_LanguageTranslations(Key, localizeCmp, IsPrimaryKey, ref termdata, source); if (termdata.TermType == eTermType.Text) { GUILayout.BeginHorizontal(); GUILayout.FlexibleSpace(); if (GUILayout.Button("Translate All", GUILayout.Width(85))) { string mainText = localizeCmp == null?LanguageSource.GetKeyFromFullTerm(Key) : localizeCmp.GetMainTargetsText(); for (int i = 0; i < source.mLanguages.Count; ++i) { if (string.IsNullOrEmpty(termdata.Languages[i])) { if (GUI_SelectedInputType == 0) { Translate(mainText, ref termdata, ref termdata.Languages[i], source.mLanguages[i].Code); termdata.Flags[i] |= (byte)TranslationFlag.AutoTranslated_Normal; } else { Translate(mainText, ref termdata, ref termdata.Languages_Touch[i], source.mLanguages[i].Code); termdata.Flags[i] |= (byte)TranslationFlag.AutoTranslated_Touch; } } } GUI.FocusControl(string.Empty); } GUILayout.EndHorizontal(); } GUILayout.EndVertical(); }
static void TranslateLanguage(string Key, TermData termdata, Localize localizeCmp, LanguageSourceData source) { ClearErrors(); string mainText = localizeCmp == null?LanguageSourceData.GetKeyFromFullTerm(Key) : localizeCmp.GetMainTargetsText(); for (int i = 0; i < source.mLanguages.Count; ++i) { if (source.mLanguages[i].IsEnabled() && string.IsNullOrEmpty(termdata.Languages[i])) { var langIdx = i; var term = termdata; var i2source = source; Translate(mainText, ref termdata, source.mLanguages[i].Code, (translation, error) => { if (error != null) { ShowError(error); } else if (translation != null) { term.Languages[langIdx] = translation; //SetTranslation(langIdx, translation); i2source.Editor_SetDirty(); } }, null); } } }
static void OnGUI_Keys_Languages(string Key, ref TermData termdata, Localize localizeCmp, bool IsPrimaryKey, LanguageSource source) { //--[ Languages ]--------------------------- GUILayout.BeginVertical(EditorStyles.textArea, GUILayout.Height(1)); OnGUI_Keys_LanguageTranslations(Key, localizeCmp, IsPrimaryKey, ref termdata, source); if (termdata.TermType == eTermType.Text) { GUILayout.BeginHorizontal(); GUILayout.FlexibleSpace(); if (GUILayout.Button("Translate All", GUILayout.Width(85))) { string mainText = localizeCmp == null?LanguageSource.GetKeyFromFullTerm(Key) : localizeCmp.GetMainTargetsText(false); for (int i = 0; i < source.mLanguages.Count; ++i) { if (string.IsNullOrEmpty(termdata.Languages[i]) && source.mLanguages[i].IsEnabled()) { var languages = (GUI_SelectedInputType == 0 ? termdata.Languages : termdata.Languages_Touch); var langIdx = i; Translate(mainText, ref termdata, source.mLanguages[i].Code, (translation) => { languages[langIdx] = translation; }); } } GUI.FocusControl(string.Empty); } GUILayout.EndHorizontal(); } GUILayout.EndVertical(); }