2

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

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>

当我在手机上启动我的应用程序时,语言没有改变=(这里是屏幕截图 -我需要更改语言的屏幕

那么我的代码有什么问题?(

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

4

2 回答 2

2

要仅设置一项活动的语言,而不考虑应用程序语言(区域设置),可以使用以下代码

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;
}

}
于 2019-03-12T11:35:03.907 回答
1

首先,将 values-ru-rRU 更改为 values-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");

}

希望这对你有帮助。

于 2013-03-08T21:15:44.360 回答