开发者

Change language settings (locale) for the device

开发者 https://www.devze.com 2022-12-26 05:26 出处:网络
I know it\'s possible to have multiple languages in a single application through the 开发者_开发知识库res/string and depending on Locale.

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 ?


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);


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.


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


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.


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

0

精彩评论

暂无评论...
验证码 换一张
取 消