【问题标题】:Set-up the application Language in Android Preferences在 Android 偏好设置中设置应用程序语言
【发布时间】:2011-06-20 15:54:02
【问题描述】:

我希望根据用户偏好设置应用程序语言,但到目前为止,它还不能按照我的意愿工作。

我已经设置了默认值:strings.xml 和 values-es,其中包含西班牙语的 strings.xml。我有一个菜单选项,可将用户带到偏好活动,他可以在其中选择语言。

所以这里是一些代码的摘录:

public class Preference extends PreferenceActivity implements
        OnSharedPreferenceChangeListener {
......
// Set up a listener whenever a key changes 
        getPreferenceScreen().getSharedPreferences()
                .registerOnSharedPreferenceChangeListener(this);


...}
//(......)

//and here I have the listener so when the language pref changes value the locale gets changed.
    @Override
    public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,
            String key) {
        if (key.equals("listPref2")) {
            String idioma = sharedPreferences.getString("listPref2", "catala");
            if ("castella".equals(idioma)) {
                idioma = "es_ES";

                Locale locale = new Locale(idioma);
                Locale.setDefault(locale);
                Configuration config = new Configuration();
                config.locale = locale;
                getApplicationContext().getResources().updateConfiguration(config,
                        getBaseContext().getResources().getDisplayMetrics());
            }
        }
    }

因此,当我更改语言时它可以工作,但是当我稍后回来或重新启动模拟器时,语言会恢复为默认语言环境 en_US,并且应用程序语言会再次更改回默认值。我能做些什么来解决这个问题?

我知道我可以得到这个偏好(我可以从我的所有活动中访问它),然后每次设置语言环境,但我发现它有点重,没有办法在更 优雅的方式?

我想做的是,如果用户设置了语言,那么当他 2 天后回来时,他不必再次更改语言。

有什么想法吗?

【问题讨论】:

    标签: android localization locale


    【解决方案1】:

    好的,它可能对某人有所帮助。我已将以下内容添加到主要活动清单中:

    android:configChanges="locale"

    然后,当用户选择首选项时,我放了一个确认按钮,然后此按钮将您带到主要活动,这就是重置 lnagages 的原因。

    我有一个静态类,我有这个代码来更改语言环境:

    public static void updateLanguage(Context context, String idioma) {
        if (!"".equals(idioma)) {
            if ("castella".equals(idioma)) {
                idioma = "es_ES";
            } else if ("catala".equals(idioma)) {
                idioma = "ca_ES";
            }
            Locale locale = new Locale(idioma);
            Locale.setDefault(locale);
            Configuration config = new Configuration();
            config.locale = locale;
            context.getResources().updateConfiguration(config, null);
        }
    }
    

    在我喜欢的 20 个活动中结束,我之前调用过这个方法:

    setContentView(R.layout.list_event);

    使用这些方法,当我旋转屏幕时,活动不会改变语言 这是一个帮助我的博客的链接: http://adrianvintu.com/blogengine/post/Force-Locale-on-Android.aspx

    【讨论】:

      【解决方案2】:

      我认为您需要在 MainActivity onCreate 方法中设置语言环境。与onSharedPreferenceChanged 方法时的设置方式相同。

      【讨论】:

      • 我已经按照你说的做了,但这只会改变主要活动中的语言环境。然后,我将在所有活动的开头添加相同的代码。谢谢
      • 我不得不承认我从未尝试过本地的事情。看起来它是基于用户设置的。你看过这个吗? developer.android.com/resources/tutorials/localization/…
      • 是的,我已经设置了默认语言和 2 种语言:西班牙语和加泰罗尼亚语,我需要用户能够自己选择语言环境。仅通过手机确定区域设置是不够的。
      猜你喜欢
      • 2018-04-27
      • 1970-01-01
      • 1970-01-01
      • 2021-01-31
      • 1970-01-01
      • 2013-06-18
      • 1970-01-01
      • 2021-05-01
      • 2013-03-27
      相关资源
      最近更新 更多