void OnGUI()
        {
            GUILayout.Space(10);

            // Languages list
            GUILayout.BeginHorizontal();
            GUILayout.Label("Languages", EditorStyles.boldLabel, GUILayout.Width(position.width * _columnsWidth[0]));

            var guiContent     = "";
            var languagesCount = _languagesList.Length;

            for (int i = 0; i < languagesCount; i++)
            {
                guiContent += _languagesList.GetValue(i);
                if (i < languagesCount - 1)
                {
                    guiContent += ", ";
                }
            }
            GUILayout.Label(guiContent);
            GUILayout.EndHorizontal();

            GUILayout.Space(10);
            GUILayout.Label("Text entries", EditorStyles.boldLabel);

            // Dictionary content
            GUILayout.BeginVertical(_arrayStyle);
            // header
            GUILayout.BeginHorizontal(_headerStyle);
            GUILayout.Label("Key", GUILayout.Width(position.width * _columnsWidth[0]));
            GUILayout.Label("Value");
            GUILayout.EndHorizontal();
            // array
            _scrollPosition = GUILayout.BeginScrollView(_scrollPosition);
            GUILayout.BeginVertical(_linesStyle);
            int index = 0;

            foreach (var entry in _languageDictionary.dictionary)
            {
                // one line (one dictionary entry)
                GUILayout.BeginVertical(_singleLStyle);
                GUILayout.BeginHorizontal();
                GUILayout.BeginVertical(GUILayout.Width(position.width * _columnsWidth[0]));
                GUILayout.Label("" + index);
                GUILayout.BeginHorizontal();
                GUILayout.FlexibleSpace();
                GUILayout.FlexibleSpace();
                GUILayout.EndHorizontal();
                GUILayout.EndVertical();
                GUILayout.BeginVertical();
                var entryLen = entry.values.Count;
                for (var i = 0; i < entryLen; i++)
                {
                    // one language
                    var lang = entry.values[i];
                    GUILayout.BeginHorizontal();
                    GUILayout.Label(lang.key.ToString(),
                                    GUILayout.MaxWidth(position.width * _columnsWidth[1]), GUILayout.MinWidth(60f));
                    lang.value = GUILayout.TextArea(lang.value);
                    GUILayout.EndHorizontal();
                }
                GUILayout.EndVertical();
                GUILayout.EndHorizontal();
                Color defaultBg = GUI.backgroundColor;
                GUI.backgroundColor = Color.red;
                GUILayout.BeginHorizontal();
                GUILayout.FlexibleSpace();
                if (GUILayout.Button("-", GUILayout.Width(50f)))
                {
                    _languageDictionary.DeleteEntry(index);
                    break;
                }
                GUILayout.EndHorizontal();
                GUI.backgroundColor = defaultBg;
                GUILayout.EndVertical();    // line end
                index++;
            }
            if (GUILayout.Button("Add"))
            {
                _languageDictionary.AddEntry();
            }
            GUILayout.EndVertical();
            GUILayout.EndScrollView();
            GUILayout.EndVertical();
            if (GUI.changed)
            {
                Undo.RecordObject(_languageDictionary, "Dictionary edited");
                EditorUtility.SetDirty(_languageDictionary);
            }
        }