有没有可能在使用Android资源的同时,以编程方式更改应用程序的语言?
如果不是,是否可以请求特定语言的资源?
我想让用户从应用程序中更改应用程序的语言。
发布于 2016-02-25 11:02:03
如果你想在你的所有应用程序中强制改变语言,你必须做两件事。
首先,创建一个基本活动,并使您的所有活动都从以下内容扩展:
public class BaseActivity extends AppCompatActivity {
private Locale mCurrentLocale;
@Override
protected void onStart() {
super.onStart();
mCurrentLocale = getResources().getConfiguration().locale;
}
@Override
protected void onRestart() {
super.onRestart();
Locale locale = getLocale(this);
if (!locale.equals(mCurrentLocale)) {
mCurrentLocale = locale;
recreate();
}
}
public static Locale getLocale(Context context){
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context);
String lang = sharedPreferences.getString("language", "en");
switch (lang) {
case "English":
lang = "en";
break;
case "Spanish":
lang = "es";
break;
}
return new Locale(lang);
}
}
请注意,我将新语言保存在sharedPreference中。
第二,创建应用程序的扩展,如下所示:
public class App extends Application {
@Override
public void onCreate() {
super.onCreate();
setLocale();
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
setLocale();
}
private void setLocale() {
final Resources resources = getResources();
final Configuration configuration = resources.getConfiguration();
final Locale locale = getLocale(this);
if (!configuration.locale.equals(locale)) {
configuration.setLocale(locale);
resources.updateConfiguration(configuration, null);
}
}
}
请注意,getLocale()与上面的相同。
就这样!我希望这能帮助到一些人。
发布于 2013-09-25 18:01:34
只是多加了一块让我被绊倒了。
而其他答案用"de“就可以了,例如
String lang = "de";
Locale locale = new Locale(lang);
Locale.setDefault(locale);
Configuration config = new Configuration();
config.locale = locale;
getBaseContext().getResources().updateConfiguration(config,
getBaseContext().getResources().getDisplayMetrics());
例如,上面的代码不适用于"fr_BE"
语言环境,因此它将使用values-fr-rBE
文件夹或类似的文件夹。
要使用"fr_BE"
,需要做以下细微的更改
String lang = "fr";
//create a string for country
String country = "BE";
//use constructor with country
Locale locale = new Locale(lang, country);
Locale.setDefault(locale);
Configuration config = new Configuration();
config.locale = locale;
getBaseContext().getResources().updateConfiguration(config,
getBaseContext().getResources().getDisplayMetrics());
发布于 2013-02-19 14:59:07
我为我的应用程序start本身更改了德语。
这是我的正确代码。有没有人想对我用同样的..(如何以编程方式更改android中的语言)
我的代码:
Configuration config ; // variable declaration in globally
// this part is given inside onCreate Method starting and before setContentView()
public void onCreate(Bundle icic)
{
super.onCreate(icic);
config = new Configuration(getResources().getConfiguration());
config.locale = Locale.GERMAN ;
getResources().updateConfiguration(config,getResources().getDisplayMetrics());
setContentView(R.layout.newdesign);
}
https://stackoverflow.com/questions/2900023
复制相似问题