Search code examples
androidlocale

Android localization locales do not work, problems with all region codes


I need to add sub locales like for Switzerland to my app additionally to the normal German one.

The locale extension to the resource folder for German I found is de. So My folder is named "values-de". That works fine.

Then I added "values-de_CH" and keep getting the error "invalid resource directory name".

I also tried "values-de_rCH" and "values-de_ch" - to no avail.

When I set the phone to German (Switzerland) and print the locale from within the app with:

String locale = java.util.Locale.getDefault().getDisplayName();
String locale2 = java.util.Locale.getDefault().getLanguage();

if (DEBUG)
    Log.i(this.getClass().getSimpleName(), " ->" + "locale= " + locale
        + "country= " + locale2);

, it also only prints "de"

I also tried "values-en_US" and got the same error.

When I print all available locales I even get these:

07-30 11:45:38.236: D/asset(2298): locale 32: 'uk_UA'
07-30 11:45:38.236: D/asset(2298): locale 33: 'en_ZA'
07-30 11:45:38.236: D/asset(2298): locale 34: 'en_GB'
07-30 11:45:38.236: D/asset(2298): locale 35: 'et_EE'
07-30 11:45:38.236: D/asset(2298): locale 36: 'ga_IE'
07-30 11:45:38.236: D/asset(2298): locale 37: 'en_IE'
07-30 11:45:38.236: D/asset(2298): locale 38: 'bg_BG'
07-30 11:45:38.236: D/asset(2298): locale 39: 'fi_FI'
07-30 11:45:38.236: D/asset(2298): locale 40: 'sl_SI'
07-30 11:45:38.236: D/asset(2298): locale 41: 'mk_MK'
07-30 11:45:38.236: D/asset(2298): locale 42: 'sk_SK'
07-30 11:45:38.236: D/asset(2298): locale 43: 'no_NO'
07-30 11:45:38.236: D/asset(2298): locale 44: 'ro_RO'
07-30 11:45:38.236: D/asset(2298): locale 45: 'hr_HR'
07-30 11:45:38.236: D/asset(2298): locale 46: 'es_ES'
07-30 11:45:38.236: D/asset(2298): locale 47: 'is_IS'
07-30 11:45:38.236: D/asset(2298): locale 48: 'sr_RS'
07-30 11:45:38.236: D/asset(2298): locale 49: 'en_US'
07-30 11:45:38.236: D/asset(2298): locale 50: 'es_US'
07-30 11:45:38.236: D/asset(2298): locale 51: 'lt_LT'
07-30 11:45:38.236: D/asset(2298): locale 52: 'pt_PT'
07-30 11:45:38.236: D/asset(2298): locale 53: 'en_AU'
07-30 11:45:38.236: D/asset(2298): locale 54: 'hu_HU'
07-30 11:45:38.236: D/asset(2298): locale 55: 'ru_RU'
07-30 11:45:38.236: D/asset(2298): locale 56: 'lv_LV'
07-30 11:45:38.236: D/asset(2298): locale 57: 'kk_KZ'
07-30 11:45:38.236: D/asset(2298): locale 58: 'en_NZ'
07-30 11:45:38.236: D/asset(2298): locale 59: 'nl_BE'
07-30 11:45:38.241: D/asset(2298): locale 60: 'de_DE'
07-30 11:45:38.241: D/asset(2298): locale 61: 'sv_SE'
07-30 11:45:38.241: D/asset(2298): locale 62: 'de_CH'
07-30 11:45:38.241: D/asset(2298): locale 63: 'fr_CH'
07-30 11:45:38.241: D/asset(2298): locale 64: 'da_DK'
07-30 11:45:38.241: D/asset(2298): locale 65: 'nl_NL'
07-30 11:45:38.241: D/asset(2298): locale 66: 'pl_PL'
07-30 11:45:38.241: D/asset(2298): locale 67: 'fr_FR'
07-30 11:45:38.241: D/asset(2298): locale 68: 'el_GR'
07-30 11:45:38.241: D/asset(2298): locale 69: 'ko_KR'
07-30 11:45:38.241: D/asset(2298): locale 70: 'tr_TR'
07-30 11:45:38.241: D/asset(2298): locale 71: 'de_AT'
07-30 11:45:38.241: D/asset(2298): locale 72: 'it_IT'
07-30 11:45:38.241: D/asset(2298): locale 73: 'cs_CZ'

Isn't there a way to have the regions or is there anything special I need to do?

Many thanks


Solution

  • You need to use "values-de-rCH". Underscores are not allowed in the filenames.

    See http://developer.android.com/guide/topics/resources/providing-resources.html#AlternativeResources