Локализация - при выполнении локализации в приложении Android только несколько строк преобразуются в хинди - PullRequest
0 голосов
/ 12 сентября 2018

У меня есть метод в базовом действии, называемый setLanguage (Context context, String language). Он принимает контекст действия и языковую строку, в которой должна выполняться локализация. Проблема в том, что только хинди системы Androidотображаются строки, а не strings.xml (привет).Например, я могу видеть перевод понедельника - सोमवार, но не любых других строк, которые я определил в strings.xml (hi).

public final void setLanguage(Context context, String language) {
        Locale locale = new Locale(language);
        setLanguage(context, locale);
}


public final void setLanguage(Context context, Locale locale) {       
        LanguageSetting.setLanguage(activity, locale);
        notifyLanguageChanged();
}


public class LanguageSetting {
private static final String PREFERENCE_LANGUAGE = "pref_language";
private static final String KEY_LANGUAGE = "key_language";
private static Locale DEFAULT_LANGUAGE = Locale.ENGLISH;

public static void setDefaultLanguage(Locale locale) {
    DEFAULT_LANGUAGE = locale;
}

public static Locale getDefaultLanguage() {
    return DEFAULT_LANGUAGE;
}

public static void setLanguage(Context context, Locale locale) {
    Locale.setDefault(locale);
    SharedPreferences.Editor editor = getLanguagePreference(context).edit();
    editor.putString(KEY_LANGUAGE, locale.toString());
    editor.apply();
}

public static Locale getLanguage(Context context) {
    String[] language = getLanguagePreference(context)
            .getString(KEY_LANGUAGE, DEFAULT_LANGUAGE.toString())
            .split("_");
    Locale locale;
    if (language.length == 1) {
        locale = new Locale(language[0]);
    } else if (language.length == 2) {
        locale = new Locale(language[0], language[1].toUpperCase());
    } else {
        locale = DEFAULT_LANGUAGE;
    }
    return locale;
}

private static SharedPreferences getLanguagePreference(Context context) {
    return context.getSharedPreferences(PREFERENCE_LANGUAGE, Activity.MODE_PRIVATE);
}
}

Ответы [ 2 ]

0 голосов
/ 24 сентября 2018

Наконец нашел ответ. Я жестко закодировал локаль в файле Gradle.

        android { 
   defaultConfig {
        ...
        resConfigs "en" 
        ...
   }
}

Мне просто нужно было удалить resConfigs "en"

0 голосов
/ 13 сентября 2018

Я думаю, что эта ссылка может иметь ответ, который вы ищете.

https://stackoverflow.com/a/2900144/2781626

Вот код из поста, если вы спешите и вам просто нужен код, и вы планируете проверить ссылку в другое время, чтобы узнать, почему этот код может быть вашим решением. Я полагаю, что вы можете сохранить часть / большую часть вашего текущего кода, но вам, возможно, придется изменить его, чтобы изменить локаль для всего приложения.

`Resources res = context.getResources();
// Change locale settings in the app.
DisplayMetrics dm = res.getDisplayMetrics();
android.content.res.Configuration conf = res.getConfiguration();
conf.setLocale(new Locale(language_code.toLowerCase())); // API 17+ only.
// Use conf.locale = new Locale(...) if targeting lower versions
res.updateConfiguration(conf, dm);`
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...