设备语言对应用语言的影响

时间:2017-10-15 13:52:51

标签: java android

我有两种语言英语和阿拉伯语的Android应用程序,我改变了这样的应用程序语言:

public void setLocale() {
    if (SharedPreferencesHelper.getSharedPreferencesInt(this, AppConstant.LANGUAGE, AppConstant.LANGUAGE_EN_MFQ) == AppConstant.LANGUAGE_AR_MFQ) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
            getWindow().getDecorView().setLayoutDirection(View.LAYOUT_DIRECTION_RTL);
        }
        Locale locale = new Locale("ar");
        Locale.setDefault(locale);
        Configuration config = new Configuration();
        config.locale = locale;
        getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics());
    } else {
        Locale locale = new Locale("en");
        Locale.setDefault(locale);
        Configuration config = new Configuration();
        config.locale = locale;
        getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics());
    }
}

当设备语言为英语和应用程序语言英语时,该应用程序可以正常工作,但是,当应用程序是阿拉伯语并且设备是英语时,某些片段会提供错误的语言,或者某些视图(如阿拉伯语中的文本和其他英语文本)在同一个片段,这是我的问题,我怎么能解决这个问题?

2 个答案:

答案 0 :(得分:1)

我对您的问题没有答案,但我会告诉您我是如何使用英语/阿拉伯语创建应用程序的。

我使用了此博文中的LocaleHelper.java课程:Change Language Programmatically in Android

并创建了一个自定义Activity类(覆盖基本上下文)作为应用程序中所有活动的基类

public class MyAppCompatActivity extends AppCompatActivity {

    @Override
    protected void attachBaseContext(Context base) {
        super.attachBaseContext(LocaleHelper.onAttach(base, LocaleHelper.LOCALE_DEFAULT_LANG));
    }

}

这对我很有用,希望有所帮助

答案 1 :(得分:0)

你的问题不太清楚。对于

  

当应用程序是阿拉伯语并且设备是英语时,某些片段会提供错误的语言

您的应用会默认选择字符串 values个文件夹或values-en。因此,您需要将英文字符串放在正常的values/strings.xmlvalues-en/strings.xml文件中。

对于设备语言阿拉伯语您需要创建一个文件夹values-ar,并将所有字符串翻译为阿拉伯语,并将包含阿拉伯字符串的strings.xml文件放在此文件夹中。 您需要查找任何硬编码字符串并将它们放在strings.xml文件中。