使用strings.xml进行本地化

时间:2018-02-06 10:21:59

标签: android localization

我想在我的应用中更改区域设置。我有几个strings.xml文件,具体取决于各种locales.Issue我面临的是应用程序区域设置得到更新但是标题或标签标题中的字符串不会根据区域设置更改而更新。

我已使用System.exit(0)杀死了我的应用并手动重新启动它,但更改未反映出来。请帮忙。

Locale locale = new Locale(language);
    Locale.setDefault(locale);

    Resources res = context.getResources();
    Configuration config = new Configuration(res.getConfiguration());
    if (Build.VERSION.SDK_INT >= 17) {
        config.setLocale(locale);
        context = context.createConfigurationContext(config);
    } else {
        config.locale = locale;
        res.updateConfiguration(config, res.getDisplayMetrics());
    }

    res.updateConfiguration(config, res.getDisplayMetrics());

2 个答案:

答案 0 :(得分:0)

您可以使用以下代码更改区域设置

public void setLocale(Context context, String language)
{
    Locale newLocale;

    switch (language)
    {
        case "UK":
            newLocale = Locale.UK;
            break;

        default:
            newLocale = Locale.US;
            break;
    }

    Locale.setDefault(newLocale);
    Configuration config = new Configuration();

    if (Build.VERSION.SDK_INT >= 17) {
        config.setLocale(newLocale);
    } else {
       config.locale = newLocale;
    }

    context.getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics());
}

注意:您必须在创建MainActivity时使用此代码。

要重新启动您的应用,您可以使用此功能:

public void resetApp(Context context) {
    Intent intent = context.getPackageManager().getLaunchIntentForPackage(getBaseContext().
    getPackageName());
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    startActivity(intent);
}

Java Supported Locales

Android - Get List of supported Locales

答案 1 :(得分:0)

为本地化语言编写一个util文件:

public class LocaleUtil {

public static Configuration onAttach(Context context) {
    String lang = SessionSharedPrefs.getInstance().getLanguage();
    if (lang == null || lang.isEmpty()) {
        lang = "en";
    }
    return setLocale(context, lang);
}

public static Configuration setLocale(Context context, String language) {
    return updateResourcesLegacy(context, language);
}

@SuppressWarnings("deprecation")
private static Configuration updateResourcesLegacy(Context context, String language) {
    Locale locale = new Locale(language);
    Locale.setDefault(locale);

    Resources resources = context.getResources();

    Configuration configuration = resources.getConfiguration();
    configuration.locale = locale;

    resources.updateConfiguration(configuration, resources.getDisplayMetrics());

    return configuration;
}
}

您可以使用此类util:

//language should be in language code like "en", "te";
android.content.res.Configuration configuration = LocaleUtil.setLocale(getActivity(), language);
onConfigurationChanged(configuration);