2017-06-30 8 views
0

英語とアラビア語の両方をサポートする必要があるアンドロイドアプリケーションを開発しています。 a。英語とアラビア語のための作成された値フォルダと使用された文字列を更新しました。 b。ローカライゼーション用のアプリケーションクラスを作成しました c。活動アンドロイドアプリケーションのマルチ言語サポートを有効にする

にボタンのクリックでコードを実装することは

import android.app.Application; 
import android.content.Context; 
import android.content.res.Configuration; 
import java.util.Locale; 
public class MyApp extends Application{ 
    @Override 
    public void onCreate() { 
     super.onCreate(); 
    } 

    public static void setLocaleAr (Context context){ 
     Locale locale = new Locale("ar"); 
     Locale.setDefault(locale); 
     Configuration config = new Configuration(); 
     config.locale = locale; 
     context.getApplicationContext().getResources().updateConfiguration(config, null); 
    } 

    public static void setLocaleEn (Context context){ 
     Locale locale = new Locale("en_US"); 
     Locale.setDefault(locale); 
     Configuration config = new Configuration(); 
     config.locale = locale; 
     context.getApplicationContext().getResources().updateConfiguration(config, null); 
    } 
} 

マイアクティビティクラス使用してボタンを

MainActivity.javaをクリックし

MyApp.java私のアプリケーションのファイルを参照してください。

import android.app.Activity; import android.content.Intent; import android.content.res.Configuration; import android.content.res.Resources; import android.os.Bundle; import android.os.Handler; import android.util.DisplayMetrics; import android.view.View; import android.view.Window; import android.widget.Button; import android.widget.SimpleAdapter; import java.util.Locale; public class SplashActivity extends Activity implements View.OnClickListener{ // Splash screen timer private static int SPLASH_TIME_OUT = 3000; Button buttonEnglish,buttonArabic; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_splash); buttonEnglish =(Button) findViewById(R.id.buttonEnglish); buttonArabic =(Button) findViewById(R.id.buttonArabic); buttonEnglish.setOnClickListener(this); buttonArabic.setOnClickListener(this); } @Override public void onClick(View view) { switch(view.getId()) { case R.id.buttonEnglish: MyApp.setLocaleEn(SplashActivity.this); setLocale("en"); break; case R.id.buttonArabic: { //buttonArabic.setBackground(getDrawable(R.color.white)); MyApp.setLocaleAr(SplashActivity.this); setLocale("ar"); break; } } } } 
+0

を更新するには、 'ニーズが再起動するか、not'このメソッドを使用し、スプラッシュActivityクラス自体からロケールを更新することができます - あなたはそれを試してみましたか?そして、なぜあなたはデバイスのロケールに落ち着かないのですか? –

+0

これは、新しいバージョンのローカライゼーションを行う正しい方法ですか?今ではローカライゼーションは自分のコードではできません。 – prg

+1

いいえ、正しい方法はシステムロケールを使用し、手動で設定しないことです。 –

答えて

2
/**Hey Just forget everything and just implement the below code Snipeet 
I am sure it will work for you**/ 

@Override 
    public void onClick(View view) 
    { 
     switch(view.getId()) 
     { 
      case R.id.buttonEnglish: 

       updateLanguage("en"); 

       break; 
      case R.id.buttonArabic: 

       updateLanguage("ar"); 

       break; 
     } 
    } 

@Override 
public void recreate() 
{ 
    if (android.os.Build.VERSION.SDK_INT >= 14) 
    { 
     super.recreate(); 
    } 
    else 
    { 
     startActivity(getIntent()); 
     finish(); 
    } 
} 

private void updateLanguage(String language) 
{ 
    Locale locale = new Locale(language); 
    Locale.setDefault(locale); 
    Configuration config = new Configuration(); 
    config.locale = locale; 
    getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics()); 

    SharedPreferences languagepref = getSharedPreferences("language",MODE_PRIVATE); 
    SharedPreferences.Editor editor = languagepref.edit(); 
    editor.putString("languageToLoad",language); 
    editor.apply(); 

    recreate(); 
} 
+1

それを得ました。答えに感謝します:) – prg

+0

便利です。ありがとう:) – fidato

1

アクティビティを再作成する必要があります。

あなたはロケール

//input: local values like "en","fr", "it" 
    public void setLocale(String locale) { 

    // Update Locale in App Configuration 
    getResources().getConfiguration().setLocale(new Locale(locale)); 
    getResources().updateConfiguration(getResources().getConfiguration(), getResources().getDisplayMetrics()); 


    // Restart Activity 
    finish(); 
    overridePendingTransition(0, 0); 
    startActivity(getIntent()); 
    overridePendingTransition(0, 0); 

} 
関連する問題