Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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.

like image 864
boreas Avatar asked Dec 05 '12 10:12

boreas


2 Answers

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

like image 84
Paschalis Avatar answered Sep 29 '22 19:09

Paschalis


you have to put your localized strings in different folders like values-es, values-de, values-fr, etc.

The file must contain the same keys, for example in values folder:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="hello">Hello</string>
</resources>

in values-es folder:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="hello">Hola</string>
</resources>

and so on.

like image 42
Adrián Rodríguez Avatar answered Sep 29 '22 17:09

Adrián Rodríguez