James Moger
2014-06-05 6537deb8b76b7a4725c40a174a7c440385f88e51
Revise language/locale preference handling
4 files modified
43 ■■■■■ changed files
src/main/java/com/gitblit/ConfigUserService.java 9 ●●●●● patch | view | raw | blame | history
src/main/java/com/gitblit/models/UserPreferences.java 6 ●●●● patch | view | raw | blame | history
src/main/java/com/gitblit/wicket/GitBlitWebApp.properties 2 ●●● patch | view | raw | blame | history
src/main/java/com/gitblit/wicket/pages/UserPage.java 26 ●●●●● patch | view | raw | blame | history
src/main/java/com/gitblit/ConfigUserService.java
@@ -707,8 +707,9 @@
                config.setBoolean(USER, model.username, DISABLED, true);
            }
            if (model.getPreferences() != null) {
                if (!StringUtils.isEmpty(model.getPreferences().locale)) {
                    config.setString(USER, model.username, LOCALE, model.getPreferences().locale);
                if (model.getPreferences().getLocale() != null) {
                    String val = model.getPreferences().getLocale().getLanguage() + "_" + model.getPreferences().getLocale().getCountry();
                    config.setString(USER, model.username, LOCALE, val);
                }
            }
@@ -880,11 +881,13 @@
                    user.stateProvince = config.getString(USER, username, STATEPROVINCE);
                    user.countryCode = config.getString(USER, username, COUNTRYCODE);
                    user.cookie = config.getString(USER, username, COOKIE);
                    user.getPreferences().locale = config.getString(USER, username, LOCALE);
                    if (StringUtils.isEmpty(user.cookie) && !StringUtils.isEmpty(user.password)) {
                        user.cookie = StringUtils.getSHA1(user.username + user.password);
                    }
                    // preferences
                    user.getPreferences().setLocale(config.getString(USER, username, LOCALE));
                    // user roles
                    Set<String> roles = new HashSet<String>(Arrays.asList(config.getStringList(
                            USER, username, ROLE)));
src/main/java/com/gitblit/models/UserPreferences.java
@@ -37,7 +37,7 @@
    public final String username;
    public String locale;
    private String locale;
    private final Map<String, UserRepositoryPreferences> repositoryPreferences = new TreeMap<String, UserRepositoryPreferences>();
@@ -58,6 +58,10 @@
        return new Locale(locale);
    }
    public void setLocale(String locale) {
        this.locale = locale;
    }
    public UserRepositoryPreferences getRepositoryPreferences(String repositoryName) {
        String key = repositoryName.toLowerCase();
        if (!repositoryPreferences.containsKey(key)) {
src/main/java/com/gitblit/wicket/GitBlitWebApp.properties
@@ -727,7 +727,7 @@
gb.accountPreferences = Account Preferences
gb.accountPreferencesDescription = Specify your account preferences
gb.languagePreference = Language Preference
gb.languagePreferenceDescription = Select your preferred translation for the Gitblit UI
gb.languagePreferenceDescription = Select your preferred translation for Gitblit
gb.displayNameDescription = The preferred name for display
gb.emailAddressDescription = The primary email address for receiving notifications
gb.sshKeys = SSH Keys
src/main/java/com/gitblit/wicket/pages/UserPage.java
@@ -181,28 +181,36 @@
                new Language("Português", "pt_BR"),
                new Language("中文", "zh_CN"));
        String lc = user.getPreferences().locale;
        if (StringUtils.isEmpty(lc)) {
        Locale locale = user.getPreferences().getLocale();
        if (locale == null) {
            // user has not specified language preference
            // try server default preference
            lc = app().settings().getString(Keys.web.forceDefaultLocale, null);
            String lc = app().settings().getString(Keys.web.forceDefaultLocale, null);
            if (StringUtils.isEmpty(lc)) {
                // server default language is not configured
                // try browser preference
                Locale sessionLocale = GitBlitWebSession.get().getLocale();
                if (sessionLocale != null) {
                    lc = sessionLocale.getLanguage() + "_" + sessionLocale.getCountry();
                    locale = sessionLocale;
                }
            } else {
            }
        }
        Language preferredLanguage = null;
        if (!StringUtils.isEmpty(lc)) {
        if (locale != null) {
            String localeCode = locale.getLanguage();
            if (!StringUtils.isEmpty(locale.getCountry())) {
                localeCode += "_" + locale.getCountry();
            }
            for (Language language : languages) {
                if (language.code.equals(lc)) {
                if (language.code.equals(localeCode)) {
                    // language_COUNTRY match
                    preferredLanguage = language;
                } else if (preferredLanguage != null && lc.startsWith(language.code)) {
                    // language match, but not COUNTRY match
                } else if (preferredLanguage != null && language.code.startsWith(locale.getLanguage())) {
                    // language match
                    preferredLanguage = language;
                }
            }
@@ -242,7 +250,7 @@
                Language lang = language.getObject();
                if (lang != null) {
                    user.getPreferences().locale = lang.code;
                    user.getPreferences().setLocale(lang.code);
                }
                try {