动态更改我的应用程序上下文的语言环境

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

根据我的经验,如果您指定的区域设置不正确,设备将直接使用默认区域设置

【讨论】:

以上是关于动态更改我的应用程序上下文的语言环境的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Eclipse 中更改动态 Web 项目的上下文根?

更改上下文时如何立即更新错误值

iOS 应用程序因语言环境更改而崩溃

从自定义 .js 文件访问应用程序上下文以获取语言环境消息

Android 在应用程序中更改和设置默认语言环境

当我在android中更改应用程序中的语言环境时如何重新加载当前视图