public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
        {
            if (LocalisationController.FindInstance())
            {
                if (!LocalisationController.instance.IsLoaded)
                {
                    LocalisationController.instance.Load();
                }

                Rect rect1 = new Rect(position.x, position.y, position.width - 80, position.height);
                Rect rect2 = new Rect(position.x + (position.width - 75), position.y, 75, position.height);

                SerializedProperty propertyKey = property.FindPropertyRelative("key");

                string[] keys     = LocalisationController.instance.GetKeys();
                int      keyIndex = System.Array.IndexOf <string>(keys, propertyKey.stringValue);

                keyIndex = EditorGUI.Popup(rect1, label.text, keyIndex, keys);
                propertyKey.stringValue = keys[Mathf.Clamp(keyIndex, 0, keys.Length)];

                if (GUI.Button(rect2, "Refresh", EditorStyles.miniButton))
                {
                    LocalisationController.instance.Load();
                }
            }
        }
        public override void OnInspectorGUI()
        {
            serializedObject.Update();

            bool keyUpdated = false;

            if (LocalisationController.FindInstance())
            {
                if (!LocalisationController.instance.IsLoaded)
                {
                    Debug.Log("Load");
                    LocalisationController.instance.Load();
                }

                EditorGUI.BeginChangeCheck();

                string[] keys     = LocalisationController.instance.GetKeys();
                int      keyIndex = System.Array.IndexOf <string>(keys, _propertyKey.stringValue);
                keyIndex = EditorGUILayout.Popup("Key", keyIndex, keys);
                _propertyKey.stringValue = keyIndex >= 0 ? keys[keyIndex] : string.Empty;

                string[] languages = LocalisationController.instance.GetSupportedLanguages();
                int      index     = System.Array.IndexOf <string>(languages, _propertyLanugage.stringValue);
                index = EditorGUILayout.Popup("Preview Language", index, languages);
                _propertyLanugage.stringValue = index >= 0 ? languages[index] : LocalisationController.instance.currentLanguage;

                EditorGUILayout.BeginHorizontal();
                GUILayout.FlexibleSpace();
                if (GUILayout.Button("Refresh", EditorStyles.miniButton, GUILayout.Width(100)))
                {
                    LocalisationController.instance.Load();
                    keyUpdated = true;
                }
                EditorGUILayout.EndHorizontal();

                keyUpdated = keyUpdated || EditorGUI.EndChangeCheck();
            }
            else
            {
                EditorGUILayout.PropertyField(_propertyKey);
                EditorGUILayout.HelpBox("Unable to locate LocalisationController, previewing disabled", MessageType.Warning);

                EditorGUILayout.BeginHorizontal();
                GUILayout.FlexibleSpace();
                if (GUILayout.Button("Search", EditorStyles.miniButton, GUILayout.Width(100)))
                {
                    LocalisationController.FindInstance();
                }
                EditorGUILayout.EndHorizontal();
            }

            serializedObject.ApplyModifiedProperties();

            if (keyUpdated)
            {
                _text.GetComponent <Text>().text = LocalisationController.instance.GetString(_propertyKey.stringValue, _propertyLanugage.stringValue);
                GUI.changed = true;
            }
        }