Search code examples
androidxmlstringbuild-automationlocalizable.strings

using different string files in android


I'm porting my iPhone app to android and I'm having a problem with the string files now.

The app is a translation tool and users can switch the languages, so all the localized strings are in both languages and they are independent from what locale the OS is running.

For iOS version I have different files like de.strings, en.strings and fr.strings and so on. For every target with specified language pair I read the strings from the string tables, e.g. for de-fr I will include de.strings and fr.strings in project and set the name of the string tables in the info-list file and read strings from them. In the end I have one project containing different targets (with different info-list files) and all are well configured.

I'm intending to do the same on android platform, but

  1. Is only one strings.xml allowed per project?

  2. How do I set different build target? e.g. my de-fr and de-en translation app are actually two apps where the only difference is the language pairs. How can I set something so that I can use one project to generate the two apps? In XCode it's simple but I can't find a solution with eclipse.

  3. How do I specify per target which strings.xml it should read?

Thank you for your answers but Please Note that I need OS locale independent language settings, i.e. if the user changes OS locale from en to de, my app still shows localized strings in English. What I'm asking is actually how I can set something like prebuild and load different string files for different targets.


Solution

  • Automatic locale selection, according to user settings

    The strings.xml contains the original text, assuming for the English language. To create translations into different languages you can create folders, for example: values-gr, values.it, for the Greek end Italian. Just copy strings.xml into those folders and translate it.

    On application launch, OS automatically picks a language according to the user's preferences.

    Manually locale selection, overriding user settings

    To force Greek for example you can use:

    Locale locale = new Locale("gr"); 
                Locale.setDefault(locale);
                Configuration config = new Configuration();
                config.locale = locale;
                getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics());
    

    You should, of course, provide a Greek translation for this to work.

    Read more

    You can check the documentation here: Support Different Languages - Android