Поддържано приложение за Android гуджарати и хинди

Създавам приложение, което ще поддържа езика хинди и гуджарати. Задавам езика на приложението от екрана с настройки на приложението. като дадох опция на потребителя да избере език между английски/хинди/гуджарати.

Задавам Locale въз основа на избор на бутон за избор. Запазвам селекцията в постоянство и на тази основа променям шрифта на всички текстови изгледи в моето приложение.

ВСИЧКО РАБОТИ ДОБРЕ.. но сменя езика на английски между стартирането на приложението. да предположим, че съм избрал езика на хинди от моя екран с настройки и стартирам приложението си. изведнъж след 10-15 минути той взема текстови стойности от директорията "values", а не от "values-hi". Наистина не разбирам защо се взема от директорията със стойности по подразбиране. динамичните данни на приложенията ми работят добре. идва на хинди и дори чертежите на приложението ми също работят добре, но проблемът е само, че взема стойностите от директорията "стойности".

ТОЗИ МЕТОД СЕ ИЗПОЛЗВА, КОГАТО ПОТРЕБИТЕЛЯТ ИЗБЕРЕ ЕЗИКА ОТ ЕКРАНА ЗА НАСТРОЙКИ НА МОЕТО ПРИЛОЖЕНИЕ.

public void setLocale(Context context, String lang) {

    Locale myLocale = new Locale(lang);
    Resources res = context.getResources();
    DisplayMetrics dm = res.getDisplayMetrics();
    Configuration conf = res.getConfiguration();
    conf.locale = myLocale;
    res.updateConfiguration(conf, dm);

}

ТОЗИ МЕТОД СЕ ИЗПОЛЗВА ЗА НАСТРОЙКА НА TYPEFACE НА TEXTVIEW В МЕТОДА ONCREATE

public static void setTypeface(TextView textView, Context context) {
    SharedPreferences sp = context.getSharedPreferences("language_selection", context.MODE_PRIVATE);
    String language = sp.getString("language", "English");

    if (language != null) {

        if (language.equalsIgnoreCase("Hindi")) {
            textView.setTypeface(Typeface.createFromAsset(context.getAssets(), "gargi.ttf"));
        }
        if (language.equalsIgnoreCase("Gujrati")) {
            textView.setTypeface(Typeface.createFromAsset(context.getAssets(), "SHRUTI.TTF"));
        }
    }
}

person Zahid Naqvi    schedule 01.03.2014    source източник
comment
Какво е езиков код за хинди? becoz приключих със същото за немски и френски и работи перфектно за мен.   -  person M D    schedule 01.03.2014
comment
трябва да зададете Locale по подразбиране като Locale.setDefault(locale); опитайте според моя отговор   -  person M D    schedule 01.03.2014


Отговори (1)


Опитайте да зададете избрания от вас Language по този начин:

Locale locale = new Locale("YourSelectedLang");
Locale.setDefault(locale);
Configuration config = new Configuration();
config.locale = locale;
getBaseContext().getResources().updateConfiguration(config,
    getBaseContext().getResources().getDisplayMetrics());
person M D    schedule 01.03.2014
comment
Използвам метода по-долу. Аз също използвам settypeface. но изведнъж се променя на английски, когато използвам приложението за 10-15 минути public void setLocale(Context context, String lang) { Locale locale = new Locale(lang); Locale.setDefault(locale); Configuration config = new Configuration(); config.locale = locale; context.getResources().updateConfiguration(config, context.getResources().getDisplayMetrics()); } - person Zahid Naqvi; 01.03.2014
comment
както и задаване на шрифт. public static void setTypeface(TextView textView, Context context) { SharedPreferences sp = context.getSharedPreferences("language_selection", context.MODE_PRIVATE); String language = sp.getString("language", "English"); if (language != null) { if (language.equalsIgnoreCase("Hindi")) { textView.setTypeface(Typeface.createFromAsset(context.getAssets(), "gargi.ttf")); } if (language.equalsIgnoreCase("Gujrati")) { textView.setTypeface(Typeface.createFromAsset(context.getAssets(), "SHRUTI.TTF")); } } } - person Zahid Naqvi; 01.03.2014
comment
Той променя само статичен низ на моето приложение. означава вземане на текстове от values/strings.xml.. - person Zahid Naqvi; 01.03.2014
comment
Използвам Locale клас като по-долу Locale locale = new Locale("en"); // английски или Locale locale = new Locale("hi"); // хинди или Locale locale = new Locale("gi"); // гуджарати - person Zahid Naqvi; 01.03.2014