动态更改我的应用程序上下文的语言环境
Posted
技术标签:
【中文标题】动态更改我的应用程序上下文的语言环境【英文标题】:Changing the locale of my application context dynamically 【发布时间】:2013-12-04 22:29:35 【问题描述】:我是一名刚接触 Java 和 android 的 .NET 开发人员。我从平台开始进行一些单元测试,我有一个我想测试的日期方法,它将当前的context
作为参数。我想 moc 这个上下文并指定我选择的区域设置,而与当前设备设置无关。
这可能吗?谁能告诉我该怎么做?
我尝试创建一个自定义类来扩展 Application 并覆盖 onCreate
方法,在那里设置语言环境。然后我通过调用getApplicationContext()
方法将它传递到我的方法中,但这似乎并没有起到作用。这是我尝试过的:
class UKApplication extends Application
@Override
public void onCreate()
super.onCreate();
Locale locale = new Locale("en_GB");
Locale.setDefault(locale);
Configuration config = new Configuration();
config.locale = locale;
getBaseContext().getResources().updateConfiguration(config,
getBaseContext().getResources().getDisplayMetrics());
我也尝试设置似乎更接近的上下文配置,但是当我提取日期格式时,它似乎不会影响日期格式。
Locale locale = new Locale("en_GB");
Locale.setDefault(locale);
Configuration config = new Configuration();
config.locale = locale;
mContext.getResources().updateConfiguration(config, mContext.getResources().getDisplayMetrics());
myStaticClass.methodToTest(mContext);
有什么建议吗?
这是使用上下文获取日期格式的代码。模式似乎总是以 MM/dd/yyyy 的形式出现:
final DateFormat shortDateFormat = android.text.format.DateFormat.getDateFormat(context.getApplicationContext());
if (shortDateFormat instanceof SimpleDateFormat)
final String pattern = ((SimpleDateFormat) shortDateFormat).toPattern();
谢谢!
【问题讨论】:
嗯,你提到的实际日期方法是什么样的? (其输出应受en_GB
语言环境影响的代码。)
@Jonik 添加了代码
【参考方案1】:
当您更改区域设置时,您将指定完整的区域设置“en_GB”。这不起作用。根据documentation,需要分别指定语言和国家
Locale locale = new Locale("en","GB");
根据我的经验,如果您指定的区域设置不正确,设备将直接使用默认区域设置
【讨论】:
以上是关于动态更改我的应用程序上下文的语言环境的主要内容,如果未能解决你的问题,请参考以下文章