Android:改变活动语言

时间:2013-03-08 20:56:45

标签: android localization

我在更改应用程序的一个活动中的所有文本时遇到问题...我正在使用此代码更改语言:

else if (LANGUAGE.equals("Russian"))
        {
            Resources res = this.getResources();
            // Change locale settings in the app.
            DisplayMetrics dm = res.getDisplayMetrics();
            android.content.res.Configuration conf = res.getConfiguration();
            conf.locale = new Locale("ru-rRU");
            res.updateConfiguration(conf, dm);
}
AndroidManifest中的

我添加了这个字符串:

<activity
        android:name="com.vladimir.expert_suise.ThirdScreen"
        android:label="@string/title_activity_third_screen" 
        android:configChanges="locale">
    </activity>

当我在手机上启动应用程序时,语言没有改变=( 这是屏幕截图 - screen where i need to change language

所以我的代码出了什么问题?(

P.S我还创建了values-ru-rRU文件夹并在那里插入了翻译的string.xml文件

2 个答案:

答案 0 :(得分:1)

首先,将值-ru-rRU更改为值-ru。

您可以使用此方法获取资源

public Resources getCustomResource(String lang){
        Locale locale = new Locale(lang); 
        Resources standardResources = activity.getResources();
        AssetManager assets = standardResources.getAssets();
        DisplayMetrics metrics = standardResources.getDisplayMetrics();
        Configuration config = new Configuration(standardResources.getConfiguration());
        config.locale = locale;
        Resources res = new Resources(assets, metrics, config);
        return res;
    }

您可以在代码中使用它

else if (LANGUAGE.equals("Russian"))
    {
        Resources res = getCustomResource("ru");

}

希望这对你有所帮助。

答案 1 :(得分:0)

要仅设置一项活动的语言,而与 Application 语言(语言环境)无关,则可以使用以下代码

public override fun attachBaseContext(context: Context) {
    // pass desired language
    super.attachBaseContext(LocaleHelper.onAttach(context, "hi"));
}

LocaleHelper.java

public class LocaleHelper {

public static Context onAttach(Context context, String defaultLanguage) {
    return setLocale(context, defaultLanguage);
}

public static Context setLocale(Context context, String language) {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
        return updateResources(context, language);
    }

    return updateResourcesLegacy(context, language);
}

@TargetApi(Build.VERSION_CODES.N)
private static Context updateResources(Context context, String language) {
    Locale locale = new Locale(language);
    Locale.setDefault(locale);

    Configuration configuration = context.getResources().getConfiguration();
    configuration.setLocale(locale);

    return context.createConfigurationContext(configuration);
}

@SuppressWarnings("deprecation")
private static Context 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 context;
}

}