Невозможно найти правильный strings.xml для данной локали - PullRequest
0 голосов
/ 14 февраля 2019

Я поддерживаю Hindi Locale в моем приложении для Android.Для этого я добавил strings.xml в новую папку values-hi.

После этого я установил свой resource.configuration.locale в значение "hi" из отдельного действия в моем приложении.

Когда я отлаживал, где любая строка была установлена ​​в представление, я обнаружил, что языковой стандарт уже был установлен как "hi", но при оценке

getString(R.string.title) он возвратил значение по умолчанию из файла strings.xml по умолчаниюнаходится в папке значений.

Пожалуйста, помогите мне, как решить эту проблему.

Я добавляю свой менеджер локалей, используемый для установки локали,

public class LocaleManager {

public static final  String LANGUAGE_ENGLISH   = "en";
private static final String LANGUAGE_KEY       = "language_key";

private final SharedPreferences prefs;

public LocaleManager(Context context) {
    prefs = PreferenceManager.getDefaultSharedPreferences(context);
}

public Context setLocale(Context c) {
    return updateResources(c, getLanguage());
}

public Context setNewLocale(Context c, String language) {
    persistLanguage(language);
    return updateResources(c, language);
}

public String getLanguage() {
    return prefs.getString(LANGUAGE_KEY, LANGUAGE_ENGLISH);
}

@SuppressLint("ApplySharedPref")
private void persistLanguage(String language) {
    // use commit() instead of apply(), because sometimes we kill the application process immediately
    // which will prevent apply() to finish
    prefs.edit().putString(LANGUAGE_KEY, language).commit();
}

private Context updateResources(Context context, String language) {
    Locale locale = new Locale(language);
    Locale.setDefault(locale);

    Resources res = context.getResources();
    Configuration config = new Configuration(res.getConfiguration());
    if (Utility.isAtLeastVersion(JELLY_BEAN_MR1)) {
        config.setLocale(locale);
        context = context.createConfigurationContext(config);
    } else {
        config.locale = locale;
        res.updateConfiguration(config, res.getDisplayMetrics());
    }
    return context;
}

public static Locale getLocale(Resources res) {
    Configuration config = res.getConfiguration();
    return Utility.isAtLeastVersion(N) ? config.getLocales().get(0) : config.locale;
}

}`

Также я добавил следующие строки в мои Application.java и BaseActivity.java

@Override
protected void attachBaseContext(Context base) {

super.attachBaseContext(TBApplication.localeManager.setLocale(base));
    Log.d(TAG, "attachBaseContext");
}
...