【问题标题】:How to use a specific locale?如何使用特定的语言环境?
【发布时间】:2013-01-23 16:26:30
【问题描述】:

在 Android 中获取字符串是根据用户选择为设备设置的区域设置自动完成的。但是,有时用户可能希望在不同的应用程序中使用不同的区域设置(例如,程序 A 使用法语,程序 B 使用英语)。

我有一些关于使用特定语言环境的问题:

  1. 是否可以运行外部应用程序,并告诉它当前语言环境是 X(或使用特定语言环境)?如果有,怎么做?

  2. 是否可以运行当前应用程序并告诉它当前语言环境是 X? 如果有,怎么做?

  3. 是否可以使用特定的语言环境 X 在当前应用程序中获取字符串(例如使用 getString)?如果有,怎么做?

【问题讨论】:

    标签: android localization locale


    【解决方案1】:

    这是可能的,但你反对安卓系统。

    您可以使用类似的方式为每个活动设置语言:

        Resources res = context.getResources();
        // Change locale settings in the app.
        DisplayMetrics dm = res.getDisplayMetrics();
        android.content.res.Configuration conf = res.getConfiguration();
        conf.locale = new Locale(language_code.toLowerCase());
        res.updateConfiguration(conf, dm);
    

    你可以找到另一种方式来改变配置here

    【讨论】:

    • 这段代码有什么作用?你回答了我的哪些问题?其余的都是不可能的?此外,如果用户这样选择它,它怎么可能对抗android系统?例如,我想让我的新闻应用程序用希伯来语编写,但其余的应用程序用英语编写。我认为这没有任何问题。
    • 对不起,我回答得很快。如果当前应用程序意味着您正在编码的应用程序,我会回答 2。此代码更改您的活动的 android 资源配置。有了它,用户可以为应用程序本身选择多种语言。这种方法是针对 android 系统的,因为 android 没有提供更改语言环境的方法,它只是您必须在每个活动上应用的技巧。所以我认为 1 是不可能的,我真的不知道 3。
    • 对于 1,确实,这似乎是不可能的:stackoverflow.com/a/3012059/1720391,
    • 我不明白。你用代码回答了哪个问题,其他问题呢?
    【解决方案2】:

    对于问题 2、3:我使用以下方式为我的应用程序设置了特定的语言环境,尽管设备的语言环境(例如:我的设备的默认语言环境设置为日本,但我的应用程序将在美国的语言环境):

    扩展Application类,命名为MyApp类,在onCreate方法中,添加如下sn-p:

    public static Configuration mConfig;
    
    public void onCreate() {
       super.onCreate();
       ...
       mConfig = getResources().getConfiguration();
       mConfig.locale = new Locale(user_locale); // user_locale is your self-defined locale
       getResources().updateConfiguration(mConfig, null);
    }
    

    另外,你必须在你的 Manifest 文件中定义这个,主要活动部分:

    android:configChanges="locale"
    

    通过这种方式,我可以在问题 2 和 3 中执行您想要的操作。请注意,当您想要(或者您确实想要)将语言环境更改为另一个语言环境时,您必须重新启动您的应用程序。

    希望有所帮助。

    【讨论】:

    • 这实际上听起来更像是对#2 的单独回答,因为我无法获得超过 1 个 locale 的字符串,只有当前正在使用的字符串。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-18
    • 1970-01-01
    • 2020-07-21
    • 2011-09-25
    • 2011-02-08
    • 1970-01-01
    • 2023-03-26
    相关资源
    最近更新 更多