Uygulamamda dil seçimi seçeneğim var.Başvurumun dilini nasıl değiştirebilirim?
Üç dil vardır: İngilizce, Almanca & İspanyolca. Bir seçenek belirlediğimde, tüm uygulama dili değiştirilmelidir.
Bunu nasıl mümkün yapabilirim?
Uygulamamda dil seçimi seçeneğim var.Başvurumun dilini nasıl değiştirebilirim?
Üç dil vardır: İngilizce, Almanca & İspanyolca. Bir seçenek belirlediğimde, tüm uygulama dili değiştirilmelidir.
Bunu nasıl mümkün yapabilirim?
Telefondaki varsayılan dilden başka bir dil kullanmak istediğiniz anlamına mı geliyor? Tek bir uygulamada var ve yapmak zorunda olduğum şey bu.
AndroidManifest.xml
<activity
android:name=".ui.SomeActivity"
android:configChanges="locale"
:
:
</activity>
sizin etkinlik bildiriye bu ekleme Ve sonra aktivitesinde onCreate
gelen böyle bir yöntemi çağırmak:
public static void setLanguage(Context context, String languageToLoad) {
Log.d(TAG, "setting language");
Locale locale = new Locale(languageToLoad); //e.g "sv"
Locale systemLocale = SystemLocale.getInstance().getCurrentLocale(context);
if (systemLocale != null && systemLocale.equals(locale)) {
Log.d(TAG, "Already correct language set");
return;
}
Locale.setDefault(locale);
android.content.res.Configuration config = new android.content.res.Configuration();
config.locale = locale;
context.getResources().updateConfiguration(config, context.getResources().getDisplayMetrics());
Log.d(TAG, "Language set");
}
Yani, iki şey üzerinde yaptıktan sonra sadece özgeçmiş dosyası (belirli bir dil desteği için R.String.Values.xml) ve uygulama ayarlarının dilini ayarlayabilmem gerekir. Sağ ? –
SystemLocale ve TAG'ı nereden buldunuz? – Teysz
'SystemLocale ....' yerine 'Locale.getDefault()' kullanılmalıdır. –
Sadece dile göre değer klasör eklemek . Örneğin, 3 dil ekledim: İngilizce, Arapça ve Hintçe. res
klasöründe, arabic için values-ar
ve hindi'nin uygulamada kullanılan tüm dizeleri tutması için values-hi
oluşturun. Artık dillerin bir listesini görüyorum. Kullanıcı dilden birini tıkladığında, uygulama dili değişecek ve telefon dili aynı kalacaktır. İşte .. kodudur
listview.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
// When clicked, show a toast with the TextView text
String language = ((TextView) view).getText().toString();
if (language.equals("English")) {
Locale locale = new Locale("en");
Locale.setDefault(locale);
Configuration config = new Configuration();
config.locale = locale;
getBaseContext().getResources()
.updateConfiguration(
config,
getBaseContext().getResources()
.getDisplayMetrics());
Toast.makeText(ChangeLanguage.this, "Locale in English",
Toast.LENGTH_LONG).show();
} else if (language.equals("Arabic")) {
Locale locale = new Locale("ar");
Locale.setDefault(locale);
Configuration config = new Configuration();
config.locale = locale;
getBaseContext().getResources()
.updateConfiguration(
config,
getBaseContext().getResources()
.getDisplayMetrics());
Toast.makeText(ChangeLanguage.this, "Locale in Arabic",
Toast.LENGTH_LONG).show();
}else if (language.equals("Hindi")) {
Locale locale = new Locale("hi");
Locale.setDefault(locale);
Configuration config = new Configuration();
config.locale = locale;
getBaseContext().getResources()
.updateConfiguration(
config,
getBaseContext().getResources()
.getDisplayMetrics());
Toast.makeText(ChangeLanguage.this, "Locale in Hindi",
Toast.LENGTH_LONG).show();
} else {
Toast.makeText(ChangeLanguage.this,
"Locale in not changed!", Toast.LENGTH_LONG).show();
}
/*
* Toast.makeText(getApplicationContext(), language,
* Toast.LENGTH_SHORT) .show();
*/
GetterSetter.getInstance().setLanguage(changelanguage);
startActivity(new Intent(ChangeLanguage.this,
MainSettings.class));
main.tabhost.setCurrentTab(3);
}
});
Kodunuzu kesinlikle DRY yapmalısınız. – JJD
Bir soru hazırlamak ve editör denetimlerini kullanın, doğrudan HTML etiketlerini kullanmadığınızda önizleme penceresinde bakınız. Soru metniniz hiç gösterilmiyordu. – Mat
Yeni adama yardım ettiğin için teşekkürler, @Mat. – DOK