par exemple si vous souhaitez que votre application pour prendre en charge l'anglais et les chaînes arabes (en plus des chaînes par défaut), vous pouvez simplement créer deux répertoires supplémentaires de ressources appelées /res/values-en
(pour le strings.xml anglais) et /res/values-ar
(pour les chaînes arabes.xml). Dans les fichiers strings.xml
, les noms des ressources sont identiques.
Par exemple, le fichier /res/values-en/strings.xml
pourrait ressembler à ceci:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="hello">Hello in English!</string>
</resources>
considérant que, le fichier /res/values-ar/strings.xml ressemblerait à ceci:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="hello">مرحبا في اللغة الإنجليزية</string>
</resources>
aussi , le fichier /res/values-ur_IN/strings.xml ressemblerait à ceci pour urdu:
ur_IN pour l'inde ur_PK pour pakisthan
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="hello">انگریزی میں خوش!!</string>
</resources>
Un fichier de mise en page par défaut dans le répertoire/res/layout qui affiche la chaîne fait référence à la chaîne par la chaîne nom de variable @/bonjour, sans tenir compte de la langue ou le répertoire la ressource de chaîne est.
le système d'exploitation Android détermine quelle version de la chaîne (français, anglais, ou par défaut) pour charger à la mise en page runtime.A avec un contrôle TextView pour afficher la chaîne pourrait ressembler à ceci:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TextView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:text="@string/hello" >
</LinearLayout>
La chaîne est accessible par programmation de la manière habituelle:
String str = getString(R.string.hello);
Pour changer la langue que vous devez aimer ce changement lang ..
btn_english.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Locale locale = new Locale("en");
Locale.setDefault(locale);
Configuration config = new Configuration();
config.locale = locale;
getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics());
Toast.makeText(this, getResources().getString(R.string.lbl_langSelectEnglis), Toast.LENGTH_SHORT).show();
}
});
btn_arbice.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Locale locale = new Locale("ar");
Locale.setDefault(locale);
Configuration config = new Configuration();
config.locale = locale;
getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics());
Toast.makeText(this, getResources().getString(R.string.lbl_langSelecURdu), Toast.LENGTH_SHORT).show();
}
});
btn_urdu.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Locale locale = new Locale("ur_IN");
Locale.setDefault(locale);
Configuration config = new Configuration();
config.locale = locale;
getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics());
Toast.makeText(HomeActivity.this, getResources().getString(R.string.lbl_langSelectEnglis), Toast.LENGTH_SHORT).show();
}
});
Voir aussi cet exemple pour un seul écran
Custom fonts for TextView based on languages inside String
Chaîne paragraph = "hey quoi de neuf ضعيف"; int NO_FLAG = 0; Bidi bidi = nouveau Bidi (paragraphe, NO_FLAG); int runCount = bidi.getRunCount(); pour (int i = 0; i < runCount; i ++) { Chaîne ltrtl = bidi.getRunLevel (i)% 2 == 0? "ltr": "rtl"; Chaîne subString = paragraphe.substring (bidi.getRunStart (i), bidi.getRunLimit (i)); Log.d (">> bidi:" + i, subString + "est" + ltrtl); }
impressions:
hey ce qui est up est ltr
ضعيف est-rtl
Alors maintenant, on peut facilement construire TypefaceSpan
ou MetricAffectingSpan
en fonction de la direction du langage comme celui-ci:
SpannableString spanString = new SpannableString(paragraph);
for (int i = 0; i < runCount; i++) {
Object span = bidi.getRunLevel(i) % 2 == 0 ? ltrFontSpan : rtlFontSpan;
spanString.setSpan(span, bidi.getRunStart(i), bidi.getRunLimit(i), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
}
textView.setText(spanString);