Saya ingin aplikasi saya mendukung tiga bahasa Spanyol, Portugis & Inggris. Dan berikan opsi untuk memilih bahasa di app. Saya telah membuat
1) 3 folder drawable drawable-es, drawable-pt, drawable.
2) 3 nilai folder values-es, values-pt, values Ubah nilai String.xml menurut bahasa.
Saya memiliki imageView untuk memilih bahasa. Saat klik menu terbuka yang terdiri dari pilihan bahasa Inggris, Spanyol, Portugis.
Saya mengatur Lokal di dalam aplikasi pada pemilihan opsi dengan kode ini
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.en:
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, "Locale in English !", Toast.LENGTH_LONG).show();
break;
case R.id.pt:
Locale locale2 = new Locale("pt");
Locale.setDefault(locale2);
Configuration config2 = new Configuration();
config2.locale = locale2;
getBaseContext().getResources().updateConfiguration(config2, getBaseContext().getResources().getDisplayMetrics());
Toast.makeText(this, "Locale in Portugal !", Toast.LENGTH_LONG).show();
break;
case R.id.es:
Locale locale3 = new Locale("es");
Locale.setDefault(locale3);
Configuration config3 = new Configuration();
config3.locale = locale3;
getBaseContext().getResources().updateConfiguration(config3, getBaseContext().getResources().getDisplayMetrics());
Toast.makeText(this, "Locale in Spain !", Toast.LENGTH_LONG).show();
break;
}
return super.onOptionsItemSelected(item);
}
Saya telah mendeklarasikan di Manifest- android: configChanges = "locale"
Ini berfungsi tetapi memiliki beberapa masalah.
Masalah:-
1) Ketika bahasa dipilih, layar yang berisi gambar pemilihan bahasa tidak berubah tetapi layar lain berubah.
2) Setelah orientasi mengubah bahasa pemulihan aplikasi sesuai dengan lokal telepon.
sumber
android:configChanges="locale"
untuk Aktivitas Anda di dalam AndroidManifest.xmlJawaban:
Ini kutipan untuk halaman web: http://android.programmerguru.com/android-localization-at-runtime/
Sangat mudah untuk mengubah bahasa aplikasi Anda setelah pengguna memilihnya dari daftar bahasa. Miliki metode seperti di bawah ini yang menerima lokal sebagai String (seperti 'en' untuk bahasa Inggris, 'hi' untuk hindi), konfigurasikan lokal untuk Aplikasi Anda dan segarkan aktivitas Anda saat ini untuk mencerminkan perubahan bahasa. Lokal yang Anda terapkan tidak akan diubah hingga Anda mengubahnya lagi secara manual.
Pastikan Anda mengimpor paket berikut:
tambahkan manifes ke aktivitas android: configChanges = "locale | orientasi"
sumber
finish()
perlu dipanggil sebelumnyastartActivity(refresh)
. Jika tidak, Aplikasi dapat keluar daripada Aktivitas yang dimulai ulang.Solusi yang bagus dijelaskan dengan cukup baik di sini. Tapi ini satu lagi.
Buat
CustomContextWrapper
kelas Anda sendiri memperluasContextWrapper
dan gunakan untuk mengubah pengaturan Lokal untuk aplikasi lengkap. Berikut adalah GIST dengan penggunaan.Dan kemudian panggil
CustomContextWrapper
dengan pengenal lokal tersimpan misalnya'hi'
untuk bahasa Hindi dalam metode siklus hidup aktivitasattachBaseContext
. Penggunaan di sini:sumber
MyContextWrapper.warp
dalamonAttach
hanya satu fragmen dari aplikasi saya tapi bahasa itu diubah untuk seluruh aplikasi, tetapi judul aktivitas tidak berubah, saya pikir itu karena judul manifes lebih diutamakan, tetapi jika saya memanggil metode yang sama dionAttachBaseContex
subkelas aplikasi saya, judul aktivitas juga berubah ke bahasa yang dipilih, tetapi kemudian perubahan hanya diterapkan ke fragmen yang saya panggil dalam metode warp, mengapa demikian? ?warp
metode itu dionAttach
dalam fragmen, sebelumnya saya mengatakan saya hanya perlu melakukannya dengan fragmen aktivitas utama dan bahasa diubah di seluruh aplikasi itu benar, tetapi untuk semua fragmen lain bahasa berubah menjadi bahasa Inggris pada perubahan konfigurasi jadi saya perlu memasukkanonattach
semua fragmen dan alih-alih manifes saya menetapkan judul bilah tindakan dalam kode, sekarang aplikasi berfungsi seperti yang diharapkan. terima kasihattachBaseContext
fungsinya saja. Dan itu melakukannya untuk semua layar. Sudahkah Anda membuat 'BaseActivity' untuk semua aktivitas di aplikasi Anda?wrap()
kode tersebut perlu dijalankan pada setiap perubahan konfigurasi, jadi saya memasukkannya ke dalam Kegiatan abstrak dari mana semua kegiatan lain meluas, sekarang bekerjaAnda harus menghapus
android:configChanges="locale"
dari manifes, yang akan menyebabkan aktivitas dimuat ulang, atau menggantionConfigurationChanged
metode:sumber
semua kode @ Uday di atas sempurna tetapi hanya satu hal yang hilang (konfigurasi default di build.gradle)
}
Milik saya tidak berfungsi hanya karena bahasanya tidak disebutkan di file konfigurasi (build.gradle)
setelah itu, semua bahasa mulai berjalan
sumber
Mereka yang mendapatkan masalah versi mencoba kode ini ..
sumber
Kode sampel Udhay berfungsi dengan baik. Kecuali soal Sofiane Hassaini dan Chirag SolankI, untuk masuk kembali, tidak berhasil. Saya mencoba memanggil kode Udhay tanpa memulai ulang aktivitas di onCreate (), sebelum super.onCreate (storedInstanceState) ;. Maka tidak apa-apa! Cuma sedikit masalah, menu string masih belum diubah ke set Locale.
sumber
Intent refresh = new Intent(this, ThisActivity.class); startActivity(refresh);
?