为android应用程序启用多语言支持
我正在开发一个android应用程序,它应该支持英语和阿拉伯语 A.为英语和阿拉伯语创建了values文件夹,并更新了使用的字符串。 B为本地化创建了一个应用程序类 C在按钮点击活动中实现了代码 查看我的申请文件 MyApp.java为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
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();
}
是否需要重新启动
-您尝试过吗?你为什么不退回到设备的区域设置呢?这也是对新版本进行本地化的正确方法吗。现在,本地化不是用我的代码完成的。不,正确的方法是使用系统语言环境,而不是手动设置。是否需要重新启动
-您尝试过吗?你为什么不退回到设备的区域设置呢?这也是对新版本进行本地化的正确方法吗。现在本地化不是用我的代码完成的。不,正确的方法是使用系统语言环境,而不是手动设置。明白了。谢谢你的回答:)有用。谢谢:)明白了。谢谢你的回答:)有用。谢谢:)