Change language settings (locale) for the device

2019-01-06 14:41发布

问题:

I know it's possible to have multiple languages in a single application through the res/string and depending on Locale. Here is a case (ANDROID) controling the user language

Now how can I change the language in the phone ? Like I'd do by Menu > Settings > Language & Keyboard > Select locale > languages

Is there some real code to access to these settings ? Or should I create intent for a shortcut to the language settings. Please post some code

Edit : With Locale class developer.android.com/intl/fr/reference/java/util/Locale.html

The constructor is at least Locale(String language) The input is language. How can you retrieve the current language used on the device ?

回答1:

Not sure about setting it directly from the app, but if you want to send the user there to change it themselves, try this:

Intent intent = new Intent(Intent.ACTION_MAIN);
intent.setClassName("com.android.settings", "com.android.settings.LanguageSettings");            
startActivity(intent);


回答2:

There is another way to open system settings to change the language:

Intent i = new Intent( android.provider.Settings.ACTION_LOCALE_SETTINGS );
startActivity( i );

It shows just the list of languages, and when you choose one - it changes the language on the device.



回答3:

I found another answer to my own question. There is an open source code project code.google.com/p/languagepickerwidget It's recreating a ListActivity to display and pick the languages.

Jim , your solution is much simple and exactly what I needed. It's a shorcut to the settings. Immediately after you published, I uploaded an app called "raygional" on the market. If I could (I only have 6 points) I'd make your answer useful.

There is another way to see the processes and intents. On the emulator go to Menu > Dev Tools > Development Settings > and click on Show running processes



回答4:

As far as I know, the only way to change the Locale of the device without using Intents (what the other solutions propose) is accessing internal classes through reflection (with the risks that this implies).

You can find an exact example for this use case here: http://www.tutorialforandroid.com/2010/07/access-internal-classes-in-android.html



回答5:

To expand on Jim's answer if you change the intent to:

intent.setClassName("com.android.settings", "com.android.settings.LocalePicker"); 

It will drop the user off directly in the language selection list and once a language is selected it will return to your application.

It removes a click, doesn't make the user think about which of the three (language, dictionary, and keyboard) options to choose and returns to your app immediately after selection.