2017-04-20 81 views
3

我們可以通過將字符串文件保存在適當的值文件夾中來更改語言,如下圖所示。在整個Android應用程序中更改語言

enter image description here

如何翻譯這我從Web服務獲取數據?有沒有任何圖書館可以實現這一目標?

+1

你可以使用谷歌翻譯API,但它不是免費的。 –

+1

您應該將某種標誌從您的應用傳遞到Web服務,以告訴他們您將使用您的應用使用哪種語言,並使它們以指定語言返回數據 –

回答

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()); 
} 
+0

這不會更改我從Web服務接收的語言?我對嗎? –

+0

你的意思是來自webservices的數據? Offcourses,由Web服務返回的數據需要由服務器進行翻譯。 – Pehlaj

+0

我們怎樣才能從android結束呢? –

2

對於Web服務響應的翻譯可以使用i18Next

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

作爲Configuration.locale =區域設置在API> = 21以下的代碼可用於棄用。

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"); 

您需要通過調用

重新創建()刷新你的活動屏幕;

在您的活動。

相關問題