Я поддерживаю 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");
}