如何选择在应用程序内部切换语言

时间:2016-06-13 08:19:25

标签: android localization settings

我的Android应用中有6种不同的语言,我想创建一个选项来选择应用的语言。 我看到了那段代码,但应用程序在重启后重置语言:

public void setLocale(String lang) { 
myLocale = new Locale(lang); 
Resources res = getResources(); 
DisplayMetrics dm = res.getDisplayMetrics(); 
Configuration conf = res.getConfiguration(); 
conf.locale = myLocale; 
res.updateConfiguration(conf, dm); 
Intent refresh = new Intent(this, AndroidLocalize.class); 
startActivity(refresh); 
finish();
}

如何保留用户选择的语言?

2 个答案:

答案 0 :(得分:2)

您可以尝试这样的事情:

String sharedPrefName = "your_preference_name"
String key = "selected_language"

// save the selected language
SharedPreferences sharedpreferences = getSharedPreferences(sharedPrefName, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedpreferences.edit();
editor.putString(key, "english"); // replace "english" with user's selected language
editor.commit();

// retrieve selected language
SharedPreferences sharedpreferences = getSharedPreferences(sharedPrefName, Context.MODE_PRIVATE);
String language = sharedpreferences.getString(key, "english"); // replace "english" with your app's default language

// load the app with the language selected...

答案 1 :(得分:0)

Android的多语言支持很容易。使用语言代码的后缀为语言创建新值目录。对于german:values-de或french:values-fr而不是将strings.xml复制到其中并翻译每个条目。

当用户从语言列表中选择应用时,可以很容易地更改应用的语言。有一个像下面这样的方法接受语言环境作为字符串(如英语的“en”,印地语的“hi”),配置应用程序的语言环境并刷新当前活动以反映语言的变化。在您再次手动更改之前,您应用的区域设置不会更改。

public void setLocale(String lang) { 
    myLocale = new Locale(lang); 
    Resources res = getResources(); 
    DisplayMetrics dm = res.getDisplayMetrics(); 
    Configuration conf = res.getConfiguration(); 
    conf.locale = myLocale; 
    res.updateConfiguration(conf, dm); 
    Intent refresh = new Intent(this, AndroidLocalize.class); 
    startActivity(refresh); 
    finish();
} 

确保导入以下包裹:

import java.util.Locale; 
import android.os.Bundle; 
import android.app.Activity; 
import android.content.Intent; 
import android.content.res.Configuration; 
import android.content.res.Resources; 
import android.util.DisplayMetrics;