android– 以编程方式设置Locale

android– 以编程方式设置Locale,第1张

概述我的应用程序支持3种(很快4种)语言.由于几个语言环境非常相似,我想让用户选择在我的应用程序中更改语言环境,例如意大利人可能更喜欢西班牙语而不是英语.有没有办法让用户在可用于应用程序的语言环境中进行选择,然后更改使用的语言环境?我不认为为每个Activity设置语言环境是一个问

我的应用程序支持3种(很快4种)语言.由于几个语言环境非常相似,我想让用户选择在我的应用程序中更改语言环境,例如意大利人可能更喜欢西班牙语而不是英语.

有没有办法让用户在可用于应用程序的语言环境中进行选择,然后更改使用的语言环境?我不认为为每个Activity设置语言环境是一个问题,因为它是在基类中执行的简单任务.

解决方法:

对于仍在寻找此答案的人,由于从API 24弃用了configuration.locale,您现在可以使用:

configuration.setLocale(locale);

考虑到此方法的minSkdVersion是API 17.

完整示例代码:

@SuppressWarnings("deprecation")private voID setLocale(Locale locale){    SharedPrefUtils.saveLocale(locale); // optional - Helper method to save the selected language to SharedPreferences in case you might need to attach to activity context (you will need to code this)    Resources resources = getResources();    Configuration configuration = resources.getConfiguration();    displayMetrics displayMetrics = resources.getdisplayMetrics();    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1){        configuration.setLocale(locale);    } else{        configuration.locale=locale;    }    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N){        getApplicationContext().createConfigurationContext(configuration);    } else {        resources.updateConfiguration(configuration,displayMetrics);    }}

不要忘记,如果使用正在运行的Activity更改语言环境,则需要重新启动它才能使更改生效.

编辑2018年5月11日

从@ cookieMonster的帖子开始,您可能无法在较高的API版本中保持区域设置更改.如果是这样,请将以下代码添加到Base Activity,以便在每次创建Activity时更新上下文区域设置:

@OverrIDeprotected voID attachBaseContext(Context base) {     super.attachBaseContext(updateBaseContextLocale(base));}private Context updateBaseContextLocale(Context context) {    String language = SharedPrefUtils.getSavedLanguage(); // Helper method to get saved language from SharedPreferences    Locale locale = new Locale(language);    Locale.setDefault(locale);    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {        return updateResourcesLocale(context, locale);    }    return updateResourcesLocaleLegacy(context, locale);}@TargetAPI(Build.VERSION_CODES.N)private Context updateResourcesLocale(Context context, Locale locale) {    Configuration configuration = context.getResources().getConfiguration();    configuration.setLocale(locale);    return context.createConfigurationContext(configuration);}@SuppressWarnings("deprecation")private Context updateResourcesLocaleLegacy(Context context, Locale locale) {    Resources resources = context.getResources();    Configuration configuration = resources.getConfiguration();    configuration.locale = locale;    resources.updateConfiguration(configuration, resources.getdisplayMetrics());    return context;}

如果您使用此功能,请不要忘记在使用setLocate(语言环境)设置语言环境时将语言保存到SharedPreferences

总结

以上是内存溢出为你收集整理的android – 以编程方式设置Locale全部内容,希望文章能够帮你解决android – 以编程方式设置Locale所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1104508.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-28
下一篇 2022-05-28

发表评论

登录后才能评论

评论列表(0条)

保存