0

我正在构建一个有两种语言的应用程序,使用用户可以更改语言的设置活动。一旦用户选择了任何语言,我想保存他/她的选择,这样当应用程序再次启动时,新语言就会出现。我已经完成了与不同语言和不同方向的布局相关的所有事情。

我的问题

当我启动应用程序时,它总是以该English语言启动,尽管我打印语言环境并且结果是Arabic.

暗示

当用户从设置活动中更改语言并按下保存时,应用程序在新语言下完美运行。不幸的是,重新启动应用程序时,它并没有以这种新语言启动。

我的代码

Tags.java - 一个只包含三个字符串的类:

public class Tags {
    public final static String LANGUAGE = "Language";
    public final static String ENGLISH_LANGUAGE = "en";
    public final static String ARABIC_LANGUAGE = "ar";
}

启动活动- 应用程序启动的活动:

someData = getSharedPreferences(filename, 0);
android.content.SharedPreferences.Editor editor = someData.edit();
if (!someData.contains(Tags.LANGUAGE)) {
    editor.putString(Tags.LANGUAGE, Tags.ENGLISH_LANGUAGE);
    Locale locale = new Locale(Tags.ENGLISH_LANGUAGE);
    Locale.setDefault(locale);
    android.content.res.Configuration config = new android.content.res.Configuration();
    config.locale = locale;
    getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics());
    Setting.setLanguage(Tags.ENGLISH_LANGUAGE);
} else {
    String currentLanguage = someData.getString(Tags.LANGUAGE, Tags.ENGLISH_LANGUAGE);
    Setting.setLanguage(currentLanguage);
    Log.e("currnetLanPHone", Setting.getLanguage());
    if (currentLanguage.equalsIgnoreCase(Tags.ENGLISH_LANGUAGE)) {
        Locale locale = new Locale(Tags.ENGLISH_LANGUAGE);
        Locale.setDefault(locale);
        android.content.res.Configuration config = new android.content.res.Configuration();
        config.locale = locale;
        getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics());
    } else {
        Locale locale = new Locale(Tags.ARABIC_LANGUAGE);
        Locale.setDefault(locale);
        android.content.res.Configuration config = new android.content.res.Configuration();
        config.locale = locale;
        getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics());
    }
}
editor.commit();

这让我感到困惑,因为正如我之前解释的那样,当我将语言从Setting activity.

我相信你会要求我给你代码,Setting activity以便将我在该活动中所做的与启动活动进行比较。这段代码如下:

设置活动

if (s_language.getSelectedItem().toString().equalsIgnoreCase("English")) {
    editor.putString(Tags.LANGUAGE, Tags.ENGLISH_LANGUAGE);
    Locale locale = new Locale(Tags.ENGLISH_LANGUAGE);
    Locale.setDefault(locale);
    Log.e("Inside", Tags.ENGLISH_LANGUAGE);
    android.content.res.Configuration config = new android.content.res.Configuration();
    config.locale = locale;
    getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics());
    Setting.setLanguage(Tags.ENGLISH_LANGUAGE);
} else {
    editor.putString(Tags.LANGUAGE, Tags.ARABIC_LANGUAGE);
    Locale locale = new Locale(Tags.ARABIC_LANGUAGE);
    Locale.setDefault(locale);
    android.content.res.Configuration config = new android.content.res.Configuration();
    config.locale = locale;
    getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics());
    Setting.setLanguage(Tags.ARABIC_LANGUAGE);
}
editor.commit();

代码非常简单,我使用了s_language来自两个值的 Spiner。

一个问题可能是,在设置活动中,当用户按下 时saveSetting活动就完成了。在splash活动中,我检查oncreate函数中的语言,然后继续活动并在完成多个步骤后完成它。我不认为完成活动是问题,但我只是为了让图像清晰而告诉你。

我该如何解决这个问题?

4

0 回答 0