void OnGUI() { //Scrolling for if window is too large for screen space scrollPos = EditorGUILayout.BeginScrollView(scrollPos); EditorGUILayout.Separator(); //label for clarity EditorGUILayout.LabelField("Choose current language:", EditorStyles.boldLabel); EditorGUILayout.BeginHorizontal(); //Convert our language objects to an array for use in a drop down. //Ordered to ensure they always get same order languageOptions = Languages.GetLanguages().OrderBy(x => x.LanguageKey).Select(x => x.LanguageKey).ToArray(); selected = EditorGUILayout.Popup("Select Language:", selected, languageOptions); if (languageOptions != null && languageOptions.Length > 0) { //To change selected language when it is changed in gui SetSelectedLanguage(languageOptions[selected]); } //Deleting a language if (GUILayout.Button("Delete Language")) { //Call function to delete DeleteLanguage(languageOptions[selected]); //set selected to zero and remake the languageOptions array selected = 0; languageOptions = Languages.GetLanguages().OrderBy(x => x.LanguageKey).Select(x => x.LanguageKey).ToArray(); } EditorGUILayout.EndHorizontal(); //styling EditorGUILayout.Separator(); EditorGUILayout.TextArea("", GUI.skin.horizontalSlider); EditorGUILayout.Separator(); EditorGUILayout.LabelField("Add new language:", EditorStyles.boldLabel); EditorGUILayout.BeginHorizontal(); //text field for new language names languageName = EditorGUILayout.TextField("Language Name: ", languageName); if (GUILayout.Button("Create", GUILayout.Width(100))) { Debug.Log(string.Format("{0}", languageName)); //we dont want multiple languages with same name created so this checks against //and stops from occuring if (LanguageHelper.LanguageNameExists(languageName)) { EditorUtility.DisplayDialog("Language Exists", "The language name already exists. Please enter a unique language name.", "OK"); } else { //create the language CreateLanguage(languageName); //set selected language to the new language in the dropdown var temp = Languages.GetLanguages().OrderBy(x => x.LanguageKey).Select(x => x.LanguageKey).ToList() .IndexOf(languageName); selected = temp; } //clear text field and return to end function processing languageName = string.Empty; return; } EditorGUILayout.EndHorizontal(); //more styling EditorGUILayout.Separator(); EditorGUILayout.TextArea("", GUI.skin.horizontalSlider); EditorGUILayout.Separator(); EditorGUILayout.LabelField("Modify language translations:", EditorStyles.boldLabel); //get the language object for selected language var selectedLanguage = Languages.GetLanguages().FirstOrDefault(x => x.LanguageKey == languageOptions[selected]); if (selectedLanguage != null && selectedLanguage.KeyWords != null && selectedLanguage.KeyWords.Count > 0) { //display a value editor for each pair of phrases and languages that exist foreach (var translationPair in selectedLanguage.KeyWords) { EditorGUILayout.BeginHorizontal(); translationPair.Value = EditorGUILayout.TextField(translationPair.Key, translationPair.Value); //this allows you to delete a phrase-value. It will delete the phrase from all languages if (GUILayout.Button("X", GUILayout.Width(20))) { //Confirmation to ensure user knows what will happen if (EditorUtility.DisplayDialog("Delete Translation Phrase?", "Deleting the translation will remove this translation phrase from all languages. Are you sure?", "Delete", "Keep")) { DeleteLanguageTranslation(translationPair.Key); //return to end processing of function return; } } EditorGUILayout.EndHorizontal(); } } //styling fun EditorGUILayout.Separator(); EditorGUILayout.TextArea("", GUI.skin.horizontalSlider); EditorGUILayout.Separator(); EditorGUILayout.LabelField("Add new translation:", EditorStyles.boldLabel); EditorGUILayout.BeginHorizontal(); EditorGUILayout.BeginVertical(); //Text fields for new phrase key and value phraseKey = EditorGUILayout.TextField("Phrase Identifier: ", phraseKey); phraseValue = EditorGUILayout.TextField("Phrase: ", phraseValue); EditorGUILayout.EndVertical(); //add button to add what is in the phrase key and value fields to the languages if (GUILayout.Button("Add", new GUILayoutOption[] { GUILayout.Height(35), GUILayout.Width(50) })) { //Check if phrase key already exists if (LanguageHelper.CheckIfTranslationKeyExists(phraseKey)) { EditorUtility.DisplayDialog("Phrase Identifier Exists!", "The phrase Identifier already exists. Please enter a unique identifier.", "OK"); } else { //add phrase to all languages, with value for only selected language and clear text fields AddLanguageTranslation(phraseKey, phraseValue, languageOptions[selected]); phraseKey = string.Empty; phraseValue = string.Empty; } } EditorGUILayout.EndHorizontal(); EditorGUILayout.Separator(); EditorGUILayout.TextArea("", GUI.skin.horizontalSlider); EditorGUILayout.Separator(); EditorGUILayout.HelpBox("If no language data exists you will need to create the asset. Click \"Assets->Create->Language Dictionary\" " + "and ensure it is created in the \"Assets\"Resources\" folder and titled \"Data\" (if you look in " + "windows explorer it will have the extension \".asset\")", MessageType.Info); EditorGUILayout.EndScrollView(); if (GUI.changed) { EditorUtility.SetDirty(Languages); } }