为android应用程序启用多语言支持

为android应用程序启用多语言支持,android,localization,multilingual,Android,Localization,Multilingual,我正在开发一个android应用程序,它应该支持英语和阿拉伯语 A.为英语和阿拉伯语创建了values文件夹,并更新了使用的字符串。 B为本地化创建了一个应用程序类 C在按钮点击活动中实现了代码 查看我的申请文件 MyApp.java import android.app.Application; import android.content.Context; import android.content.res.Configuration; import java.util.Locale; p

我正在开发一个android应用程序,它应该支持英语和阿拉伯语 A.为英语和阿拉伯语创建了values文件夹,并更新了使用的字符串。 B为本地化创建了一个应用程序类 C在按钮点击活动中实现了代码

查看我的申请文件

MyApp.java

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);
    }
}
    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;
               }
           }
        }
    }
我的活动类使用按钮点击

MainActivity.java

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

您需要重新创建活动。

您可以从Splash活动类本身更新区域设置,使用此方法更新区域设置

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

}

您需要重新创建活动。

您可以从Splash活动类本身更新区域设置,使用此方法更新区域设置

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

}

忘记一切,实现下面的代码片段

在build.gradle文件中

defaultConfig
 {
    resConfigs "en", "ar"
 }
在你的活动中:

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

忘记一切,实现下面的代码片段

在build.gradle文件中

defaultConfig
 {
    resConfigs "en", "ar"
 }
在你的活动中:

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

是否需要重新启动
-您尝试过吗?你为什么不退回到设备的区域设置呢?这也是对新版本进行本地化的正确方法吗。现在,本地化不是用我的代码完成的。不,正确的方法是使用系统语言环境,而不是手动设置。
是否需要重新启动
-您尝试过吗?你为什么不退回到设备的区域设置呢?这也是对新版本进行本地化的正确方法吗。现在本地化不是用我的代码完成的。不,正确的方法是使用系统语言环境,而不是手动设置。明白了。谢谢你的回答:)有用。谢谢:)明白了。谢谢你的回答:)有用。谢谢:)