static void OnGUI_Keys_LanguageTranslations(string Key, Localize localizeCmp, bool IsPrimaryKey, ref TermData termdata, LanguageSourceData source) { bool IsSelect = Event.current.type == EventType.MouseUp; for (int i = 0; i < source.mLanguages.Count; ++i) { bool forcePreview = false; bool isEnabledLanguage = source.mLanguages[i].IsEnabled(); if (!isEnabledLanguage) { if (!GUI_ShowDisabledLanguagesTranslation) { continue; } GUI.color = new Color(GUI.color.r, GUI.color.g, GUI.color.b, 0.35f); } GUILayout.BeginHorizontal(); if (GUILayout.Button(source.mLanguages[i].Name, EditorStyles.label, GUILayout.Width(100))) { forcePreview = true; } string Translation = termdata.GetTranslation(i, GUI_SelectedSpecialization, editMode: true); if (Translation == null) { Translation = 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 || termdata.TermType == eTermType.Child) { EditorGUI.BeginChangeCheck(); string CtrName = "TranslatedText" + i; GUI.SetNextControlName(CtrName); EditPluralTranslations(ref Translation, i, source.mLanguages[i].Code); //Translation = EditorGUILayout.TextArea(Translation, Style_WrapTextField, GUILayout.Width(Screen.width - 260 - (autoTranslated ? 20 : 0))); if (EditorGUI.EndChangeCheck()) { termdata.SetTranslation(i, Translation, GUI_SelectedSpecialization); source.Editor_SetDirty(); forcePreview = true; } if (localizeCmp != null && (forcePreview || /*GUI.changed || */ (GUI.GetNameOfFocusedControl() == CtrName && IsSelect))) { if (IsPrimaryKey && string.IsNullOrEmpty(localizeCmp.Term)) { localizeCmp.mTerm = Key; } if (!IsPrimaryKey && string.IsNullOrEmpty(localizeCmp.SecondaryTerm)) { localizeCmp.mTermSecondary = Key; } string PreviousLanguage = LocalizationManager.CurrentLanguage; LocalizationManager.PreviewLanguage(source.mLanguages[i].Name); if (forcePreview || IsSelect) { LocalizationManager.LocalizeAll(); } else { localizeCmp.OnLocalize(true); } LocalizationManager.PreviewLanguage(PreviousLanguage); EditorUtility.SetDirty(localizeCmp); } 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_SelectedSpecialization==0 ? TranslationFlag.AutoTranslated_Normal : TranslationFlag.AutoTranslated_Touch)); // } //} if (termdata.TermType == eTermType.Text) { if (TestButtonArg(eTest_ActionType.Button_Term_Translate, i, new GUIContent("T", "Translate"), EditorStyles.toolbarButton, GUILayout.Width(20))) { var termData = termdata; var indx = i; var key = Key; GUITools.DelayedCall(() => TranslateTerm(key, termData, source, indx)); GUI.FocusControl(string.Empty); } } } else { string MultiSpriteName = string.Empty; if (termdata.TermType == eTermType.Sprite && Translation.EndsWith("]", StringComparison.Ordinal)) // Handle sprites of type (Multiple): "SpritePath[SpriteName]" { int idx = Translation.LastIndexOf("[", StringComparison.Ordinal); 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); } 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; case eTermType.Mesh: ObjType = typeof(Mesh); break; #if NGUI case eTermType.UIAtlas: ObjType = typeof(UIAtlas); break; case eTermType.UIFont: ObjType = typeof(UIFont); break; #endif #if TK2D case eTermType.TK2dFont: ObjType = typeof(tk2dFont); break; case eTermType.TK2dCollection: ObjType = typeof(tk2dSpriteCollection); break; #endif #if 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(EditorStyles.textArea, GUILayout.Height(1)); GUILayout.Space(2); GUI.backgroundColor = Color.white; } Object NewObj = EditorGUILayout.ObjectField(Obj, ObjType, true, GUILayout.ExpandWidth(true)); if (Obj != NewObj) { string sPath = null; if (NewObj != null) { sPath = AssetDatabase.GetAssetPath(NewObj); mCurrentInspector.serializedObject.ApplyModifiedProperties(); foreach (var cmp in mCurrentInspector.serializedObject.targetObjects) { AddObjectPath(ref sPath, cmp as Localize, NewObj); } mCurrentInspector.serializedObject.ApplyModifiedProperties(); if (HasObjectInReferences(NewObj, localizeCmp)) { sPath = NewObj.name; } else if (termdata.TermType == eTermType.Sprite) { sPath += "[" + NewObj.name + "]"; } } termdata.SetTranslation(i, sPath, GUI_SelectedSpecialization); source.Editor_SetDirty(); } 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(); GUI.color = Color.white; } }
static void OnGUI_Keys_Language_SpecializationsBar(TermData termData, LanguageSourceData source) { var activeSpecializations = termData.GetAllSpecializations(); GUILayout.BeginHorizontal(); var TabStyle = new GUIStyle(GUI.skin.FindStyle("dragtab")); TabStyle.fixedHeight = 0; //var ss = GUI.skin.FindStyle("TL tab left"); var TabOpenStyle = new GUIStyle(GUI.skin.FindStyle("minibuttonmid")); TabOpenStyle.margin.right = -1; var TabCloseStyle = new GUIStyle(EditorStyles.label); //var TabCloseStyle = new GUIStyle(GUI.skin.FindStyle("TL tab right")); TabCloseStyle.margin.left = -1; TabCloseStyle.padding.left = 4; //-- Specialization Tabs ----- var prevSpecialization = "Any"; foreach (var specialization in SpecializationManager.Singleton.mSpecializations) { if (!activeSpecializations.Contains(specialization) && specialization != GUI_SelectedSpecialization) { continue; } bool isActive = (specialization == GUI_SelectedSpecialization); var labelContent = new GUIContent(specialization, "Specialization of the main translation (i.e. variants that show only on specific platforms or devices)\nThis allows using 'tap' instead of 'click' for touch devices."); if (isActive && activeSpecializations.Count > 1) { GUILayout.BeginHorizontal(TabOpenStyle); GUILayout.Toggle(isActive, labelContent, TabStyle, GUILayout.Height(20), GUILayout.ExpandWidth(false)); //GUILayout.Label(labelContent, TabOpenStyle); if (specialization != "Any" && GUILayout.Button("x", TabCloseStyle, GUILayout.Width(15))) { termData.RemoveSpecialization(specialization); GUI_SelectedSpecialization = prevSpecialization; GUI.FocusControl(null); } GUILayout.EndHorizontal(); } else if (GUILayout.Toggle(isActive, labelContent, TabStyle, GUILayout.Height(25), GUILayout.ExpandWidth(false)) && !isActive) { GUI_SelectedSpecialization = specialization; GUI.FocusControl(null); } } //-- Add new Specialization ----- int newIndex = EditorGUILayout.Popup(-1, SpecializationManager.Singleton.mSpecializations, "DropDown", GUILayout.Width(20)); if (newIndex >= 0) { string newSpecialization = SpecializationManager.Singleton.mSpecializations[newIndex]; if (!activeSpecializations.Contains(newSpecialization)) { for (int iLang = 0; iLang < source.mLanguages.Count; ++iLang) { string Translation = termData.GetTranslation(iLang, GUI_SelectedSpecialization, editMode: true); termData.SetTranslation(iLang, Translation, GUI_SelectedSpecialization); } GUI_SelectedSpecialization = newSpecialization; } } GUILayout.FlexibleSpace(); GUI_ShowDisabledLanguagesTranslation = GUILayout.Toggle(GUI_ShowDisabledLanguagesTranslation, new GUIContent("L", "Show Disabled Languages"), "Button", GUILayout.ExpandWidth(false)); GUILayout.EndHorizontal(); GUILayout.Space(-3); }