public void setLocale(final String localeKey) {

        if (localeKey != null || !localeKey.isEmpty()) {
            String[] parts = localeKey.split("[_\\.]");
            if (parts.length == 1) {
                currentLocale = new Locale(parts[0]);
            } else if (parts.length == 2) {
                currentLocale = new Locale(parts[0], parts[1]);
            } else if (parts.length == 3) {
                currentLocale = new Locale(parts[0], parts[1], parts[2]);
            }
        }

        ResourceBundle.clearCache();
        formatCache.clear();
        BackpacksPlugin.getInstance().getLogger().info("Using Locale: " + this.currentLocale.toString());

        try {
            localeBundle = ResourceBundle.getBundle(MESSAGES, currentLocale);
        } catch (MissingResourceException e) {
            localeBundle = new ResourceBundle() {
                @Override
                protected Object handleGetObject(String key) {
                    return null;
                }

                @Override
                public Enumeration<String> getKeys() {
                    return null;
                }
            };
        }

        try {
            customBundle = ResourceBundle.getBundle(MESSAGES, currentLocale, new FileClassLoader(this.backpacksPlugin, this.backpacksPlugin.getClass().getClassLoader()));
        } catch (MissingResourceException e) {
            customBundle = new ResourceBundle() {
                @Override
                protected Object handleGetObject(String key) {
                    return null;
                }

                @Override
                public Enumeration<String> getKeys() {
                    return null;
                }
            };
        }
    }