Android 国际化不适用于某些 Android 设备
Android Internationalization not working for some Android devices
我有一个针对 SDK 版本 25 和最低 SDK 17 的 android 应用程序。该应用程序应该支持 4 种语言:法语, 斯瓦希里语、英语和基隆迪语。
但对于某些 android 设备,所有四种语言都可以正常工作,但对于其他一些设备,当用户切换到 Kirundi 时,所有其他语言都可以正常工作。
这是我的代码:
public class LanguageSwitcher extends AppCompatActivity {
//Variables declaration
private TextView bdi,en,fr,sw;
private Resources res;
private DisplayMetrics dm;
android.content.res.Configuration conf;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_language_switcher);
bdi = (TextView)findViewById(R.id.bdi); //Kirundi textview
fr = (TextView)findViewById(R.id.fr); //francais textview
en = (TextView)findViewById(R.id.en); //english textview
sw = (TextView)findViewById(R.id.sw); //swahili textview
res = getResources();
dm = res.getDisplayMetrics();
conf= res.getConfiguration();
//getting the sharedPreferences
SharedPreferences sharedPreferences=getSharedPreferences("profile", Context.MODE_PRIVATE);
String lang = sharedPreferences.getString("lang","");
final SharedPreferences.Editor editor = sharedPreferences.edit();
bdi.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
conf.locale = new Locale("rn"); // API 17+ only.
editor.putString("lang","rn");
editor.apply();
res.updateConfiguration(conf, dm);
startActivity(new Intent(getApplicationContext(),Acceuil.class));
}
});
fr.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
conf.locale = new Locale("fr"); // API 17+ only.
editor.putString("lang","fr");
editor.apply();
res.updateConfiguration(conf, dm);
startActivity(new Intent(getApplicationContext(),Acceuil.class));
}
});
sw.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
conf.locale = new Locale("sw"); // API 17+ only.
editor.putString("lang","sw");
editor.apply();
res.updateConfiguration(conf, dm);
startActivity(new Intent(getApplicationContext(),Acceuil.class));
}
});
en.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
conf.locale = new Locale("en"); // API 17+ only.
editor.putString("lang","en");
editor.apply();
res.updateConfiguration(conf, dm);
startActivity(new Intent(getApplicationContext(),Acceuil.class));
}
});
}
}
我不知道我的代码哪里错了。我需要你的帮助
在 onCreate() 之前设置你的语言
或 super.onCreate()
我们可以使用自定义字体。它们可以是 Downloadable Fonts or we can give Fonts in XML
您可以使用 this link 了解有关如何在 Android 应用程序 XML 中集成字体的更多信息。
基本上,我们可以在应用程序本身提供 ttf
或 otf
文件,这样我们就可以在我们的应用程序中使用字体,而不是依赖于 OEM 字体。
在 Android 开发者网站上查看分步指南的链接。
我做了一些研究,发现与其他语言不同,基隆迪语资源应该在 res/values-rn-rBI
文件夹下,而不是 res/values-rn
文件夹下。 rn
作为 ISO 639-1 语言代码,与 Android 和 BI
中的任何其他语言一样 ISO 3166-1 Alpha -2 国家(布隆迪)的代码 并且有效。
我有一个针对 SDK 版本 25 和最低 SDK 17 的 android 应用程序。该应用程序应该支持 4 种语言:法语, 斯瓦希里语、英语和基隆迪语。
但对于某些 android 设备,所有四种语言都可以正常工作,但对于其他一些设备,当用户切换到 Kirundi 时,所有其他语言都可以正常工作。
这是我的代码:
public class LanguageSwitcher extends AppCompatActivity {
//Variables declaration
private TextView bdi,en,fr,sw;
private Resources res;
private DisplayMetrics dm;
android.content.res.Configuration conf;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_language_switcher);
bdi = (TextView)findViewById(R.id.bdi); //Kirundi textview
fr = (TextView)findViewById(R.id.fr); //francais textview
en = (TextView)findViewById(R.id.en); //english textview
sw = (TextView)findViewById(R.id.sw); //swahili textview
res = getResources();
dm = res.getDisplayMetrics();
conf= res.getConfiguration();
//getting the sharedPreferences
SharedPreferences sharedPreferences=getSharedPreferences("profile", Context.MODE_PRIVATE);
String lang = sharedPreferences.getString("lang","");
final SharedPreferences.Editor editor = sharedPreferences.edit();
bdi.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
conf.locale = new Locale("rn"); // API 17+ only.
editor.putString("lang","rn");
editor.apply();
res.updateConfiguration(conf, dm);
startActivity(new Intent(getApplicationContext(),Acceuil.class));
}
});
fr.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
conf.locale = new Locale("fr"); // API 17+ only.
editor.putString("lang","fr");
editor.apply();
res.updateConfiguration(conf, dm);
startActivity(new Intent(getApplicationContext(),Acceuil.class));
}
});
sw.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
conf.locale = new Locale("sw"); // API 17+ only.
editor.putString("lang","sw");
editor.apply();
res.updateConfiguration(conf, dm);
startActivity(new Intent(getApplicationContext(),Acceuil.class));
}
});
en.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
conf.locale = new Locale("en"); // API 17+ only.
editor.putString("lang","en");
editor.apply();
res.updateConfiguration(conf, dm);
startActivity(new Intent(getApplicationContext(),Acceuil.class));
}
});
}
}
我不知道我的代码哪里错了。我需要你的帮助
在 onCreate() 之前设置你的语言 或 super.onCreate()
我们可以使用自定义字体。它们可以是 Downloadable Fonts or we can give Fonts in XML
您可以使用 this link 了解有关如何在 Android 应用程序 XML 中集成字体的更多信息。
基本上,我们可以在应用程序本身提供 ttf
或 otf
文件,这样我们就可以在我们的应用程序中使用字体,而不是依赖于 OEM 字体。
在 Android 开发者网站上查看分步指南的链接。
我做了一些研究,发现与其他语言不同,基隆迪语资源应该在 res/values-rn-rBI
文件夹下,而不是 res/values-rn
文件夹下。 rn
作为 ISO 639-1 语言代码,与 Android 和 BI
中的任何其他语言一样 ISO 3166-1 Alpha -2 国家(布隆迪)的代码 并且有效。