我在更改应用程序的一个活动中的所有文本时遇到问题...我正在使用此代码更改语言:
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>
当我在手机上启动应用程序时,语言没有改变=( 这是屏幕截图 -
所以我的代码出了什么问题?(
P.S我还创建了values-ru-rRU文件夹并在那里插入了翻译的string.xml文件
答案 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;
}
}