在我的应用中支持多种语言

时间:2018-03-30 08:01:45

标签: android localization

我想支持我的申请英语,印地语,乌尔都语。
为此,我创建了两个值字符串文件夹,如values-hi,values-ur,然后默认strings.xml为英语,当我点击Urdu时,我需要为所有标签加载Urdu字符串文件并进行UI RTL支持。

1 个答案:

答案 0 :(得分:0)

我使用某种ContextWrapper解决了类似的问题,迫使语言出现在任何活动中。

ContextWrapper代码是:

public class ContextWrapper extends android.content.ContextWrapper {

public ContextWrapper(Context base) {
    super(base);
}

@SuppressWarnings("deprecation")
public static ContextWrapper wrap(Context context, Locale newLocale) {

    Resources res = context.getResources();
    Configuration configuration = res.getConfiguration();

    if (BuildUtils.isAtLeast24Api()) {
        configuration.setLocale(newLocale);

        LocaleList localeList = new LocaleList(newLocale);
        LocaleList.setDefault(localeList);
        configuration.setLocales(localeList);

        context = context.createConfigurationContext(configuration);

    } else if (BuildUtils.isAtLeast17Api()) {
        configuration.setLocale(newLocale);
        context = context.createConfigurationContext(configuration);

    } else {
        configuration.locale = newLocale;
        res.updateConfiguration(configuration, res.getDisplayMetrics());
    }

    return new ContextWrapper(context);
}

}

您必须在要强制语言的每个活动中继承attachBaseContext生命周期回调,例如。

@Override
protected void attachBaseContext(Context base) {
    super.attachBaseContext(ContextWrapper.wrap(base, Locale.ENGLISH));
}

显然,如果你想在当前活动中改变语言,你必须重新加载它。