При изменении локали приложения меняют тип, цифры, формат устройства - PullRequest
0 голосов
/ 25 октября 2018

Я меняю приложение на языке локали, как показано ниже:

@Override
protected void attachBaseContext(Context newBase) {
    String languageID = new SessionManager(newBase).getIdLanguage();
    super.attachBaseContext(ContextWrapper.wrap(newBase, languageID));
}

Проблема: Но когда я меняю приложение на языке локали, меняется цифра приложения.

НоМне не нужно менять digits. (Мне нужны цифры на английском)

И мой ContextWrapper.class ниже:

public class ContextWrapper extends android.content.ContextWrapper {

    private ContextWrapper(Context base) {
        super(base);
    }
    @SuppressWarnings("deprecation")
    public static android.content.ContextWrapper wrap(Context context, String language) {
        Configuration config = context.getResources().getConfiguration();
        if (language != null && !TextUtils.isEmpty(language)) {
            Locale locale = new Locale(language);
            Locale.setDefault(locale);
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
                setSystemLocale(config, locale);
            } else {
                setSystemLocaleLegacy(config, locale);
            }
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
                context = context.createConfigurationContext(config);
            } else {
                context.getResources().updateConfiguration(config, context.getResources().getDisplayMetrics());
            }
        } else {
            Locale locale = new Locale("en");
            Locale.setDefault(locale);
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
                setSystemLocale(config, locale);
            } else {
                setSystemLocaleLegacy(config, locale);
            }
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
                context = context.createConfigurationContext(config);
            } else {
                context.getResources().updateConfiguration(config, context.getResources().getDisplayMetrics());
            }
        }
        return new ContextWrapper(context);
    }

    @SuppressWarnings("deprecation")
    private static void setSystemLocaleLegacy(Configuration config, Locale locale) {
        config.locale = locale;
    }

    @TargetApi(Build.VERSION_CODES.N)
    private static void setSystemLocale(Configuration config, Locale locale) {
        config.setLocale(locale);
    }
} 

Что я могу сделать?

Как я могу установить digits по умолчанию для приложения на en?

Например, когда я устанавливаю язык локали на Arabic, получите арабские цифры для цифр или арабский язык для дат.цифры.

Мне нужно решить эту проблему во всех приложениях, которые мне не нужно использовать снизу:

int i = 1;
NumberFormat nf = NumberFormat.getInstance(new Locale("hi", "IN"));
nf.format(i);

И я проверяю снизу, но не работаю:

Locale locale = new Locale("ar", "EN");

1 Ответ

0 голосов
/ 25 октября 2018

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

Calendar mydate = Calendar.getInstance();
        mydate.setTimeInMillis(unix * 1000);
        return
                String.format(Locale.US, "%02d", mydate.get(Calendar.DAY_OF_MONTH))
                        + "." +
                        String.format(Locale.US, "%02d", (mydate.get(Calendar.MONTH) + 1))
                        + "." + mydate.get(Calendar.YEAR);
...