在Android应用程序中更改语言

时间:2017-04-20 10:10:16

标签: android multilingual

我们可以选择通过将字符串文件保存在适当的值文件夹中来更改语言,如下图所示。

enter image description here

如何翻译我从Web服务获取的数据?有没有可用的库来实现这个目标?

3 个答案:

答案 0 :(得分:3)

您无法使用Android翻译Web服务返回的数据,但可以更改语言以便在应用程序中休息,如下所述:

在调用changeLocale方法后尝试重新创建活动。

changeLocale("ar");

private void changeLocale(String lang) {
    updateConfiguration(activity, lang); //lang = "en" OR "ar" etc

    activity.recreate();
}

public static void updateConfiguration(Activity activity, String language) {
    Locale locale = new Locale(language);
    Locale.setDefault(locale);

    Configuration configuration = new Configuration();
    configuration.locale = locale;

    Resources resources = activity.getBaseContext().getResources();
    resources.updateConfiguration(configuration, resources.getDisplayMetrics());
}

答案 1 :(得分:2)

对于网络服务响应转换,您可以使用i18Next

I18Next i18next = I18Next.getInstance();
Loader loader = i18next.loader();
loader.load();
loader.lang(String lang);

答案 2 :(得分:2)

由于在API> = 21中不推荐使用Configuration.locale = locale,因此可以使用以下代码。

 public void setLocale(Context context,String lang){
    Locale[] locales = Locale.getAvailableLocales();
    // print locales
    boolean is_supported=false;
    //check if the intended locale is supported by device or not..
    for (int i = 0; i < locales.length; i++) {
        if(lang.equals(locales[i].toString()))
        {
            is_supported=true;
            break;
        }
        Log.e( "Languages",i+" :"+ locales[i]);
    }
 if(is_supported) {
        Locale myLocale = new Locale(lang);
        Resources res = context.getResources();
        DisplayMetrics dm = res.getDisplayMetrics();
        Configuration conf = res.getConfiguration();
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
            conf.setLocale(myLocale);
        } else {
            conf.locale = myLocale;
        }
        res.updateConfiguration(conf, dm);
    }else{
       //do something like set english as default
    }

现在通过调用:

在代码中使用此函数
setLocale("hi");

您需要通过调用

重新加载活动屏幕

重新创建();

在您的活动中。