Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 7ca226b1 authored by Eric Fischer's avatar Eric Fischer
Browse files

Add a way to override the display names for locales in the locale picker.

In particular, show (the Chinese for) "Chinese (Simplified)" and "Chinese
(Traditional)" instead of "Chinese (China)" and "Chinese (Taiwan)".
parent ba127f57
Loading
Loading
Loading
Loading
+13 −0
Original line number Diff line number Diff line
@@ -255,4 +255,17 @@
        <item>2</item>
    </string-array>

    <!-- Locales in this list are displayed with the corresponding
         name from special_locale_names instead of using the name
         from Locale.getDisplayName(). -->
    <string-array translatable="false" name="special_locale_codes">
        <item>zh_CN</item>
        <item>zh_TW</item>
    </string-array>

    <string-array translatable="false" name="special_locale_names">
        <item>中文(简体)</item>
        <item>中文 (繁體)</item>
    </string-array>

</resources>
+21 −6
Original line number Diff line number Diff line
@@ -39,6 +39,8 @@ public class LocalePicker extends ListActivity {
    private static final String TAG = "LocalePicker";

    Loc[] mLocales;
    String[] mSpecialLocaleCodes;
    String[] mSpecialLocaleNames;

    private static class Loc implements Comparable {
        static Collator sCollator = Collator.getInstance();
@@ -70,6 +72,9 @@ public class LocalePicker extends ListActivity {
        super.onCreate(icicle);
        setContentView(getContentView());

        mSpecialLocaleCodes = getResources().getStringArray(R.array.special_locale_codes);
        mSpecialLocaleNames = getResources().getStringArray(R.array.special_locale_names);

        String[] locales = getAssets().getLocales();
        Arrays.sort(locales);

@@ -98,15 +103,13 @@ public class LocalePicker extends ListActivity {
                            language)) {
                        Log.v(TAG, "backing up and fixing "+
                                preprocess[finalSize-1].label+" to "+
                                preprocess[finalSize-1].locale.
                                getDisplayName(l));
                                getDisplayName(preprocess[finalSize-1].locale));
                        preprocess[finalSize-1].label = toTitleCase(
                                preprocess[finalSize-1].
                                locale.getDisplayName(l));
                                getDisplayName(preprocess[finalSize-1].locale));
                        Log.v(TAG, "  and adding "+
                                toTitleCase(l.getDisplayName(l)));
                                toTitleCase(getDisplayName(l)));
                        preprocess[finalSize++] =
                                new Loc(toTitleCase(l.getDisplayName(l)), l);
                                new Loc(toTitleCase(getDisplayName(l)), l);
                    } else {
                        String displayName;
                        if (s.equals("zz_ZZ")) {
@@ -140,6 +143,18 @@ public class LocalePicker extends ListActivity {
        return Character.toUpperCase(s.charAt(0)) + s.substring(1);
    }

    private String getDisplayName(Locale l) {
        String code = l.toString();

        for (int i = 0; i < mSpecialLocaleCodes.length; i++) {
            if (mSpecialLocaleCodes[i].equals(code)) {
                return mSpecialLocaleNames[i];
            }
        }

        return l.getDisplayName(l);
    }

    @Override
    public void onResume() {
        super.onResume();