2010-10-26 25 views
14

Dil kodunun son eki ile dil için yeni değerler dizini oluşturma konusunda farkındayım. Almanca için: değerler-de veya fransız: değerler-fr o zaman string.xml'mizi buna kopyalayın ve her girişi çevirin. Ve bu, Telefon Yerelleştirme ayarlarına bağlı olarak çalışırÖzel Çoklu Dil desteği

Telefon ayarını devre dışı bırakıp kullanamayacağımızı ve kullanıcının uygulama içinde gerekli dili seçip seçemeyeceğini öğrenmek istedim.

Benim şartım, uygulamamın içinde bir dil seçimi seçeneği vermek ve kullanıcının uygulama için istediği dili seçmesini sağlamaktır .. string.xml (farklı diller için) arasında dinamik olarak nasıl geçiş yapılır? ? peşin

sayesinde

+0

Sen dil listesini sağlar aşağıdaki kütüphane, ayarlarınız ekranı için tercih kullanabilir ve dili geçersiz kılar senin application: https://github.com/delight-im/Android-Languages ​​ – caw

cevap

5

Kontrol dışarı Bu yazı ... Temelde aynı şeydir.

Changing Locale within the app itself

Locale appLoc = new Locale("en"); 
Locale.setDefault(appLoc); 
Configuration appConfig = new Configuration(); 
appConfig.locale = appLoc; 
getBaseContext().getResources().updateConfiguration(appConfig, 
    getBaseContext().getResources().getDisplayMetrics()); 
11

temel Locale.Lets kullanıcı Locale seçildiğinde

public static void setDefaultLocale(Context context,String locale) { 
     Locale locJa = new Locale(locale); 
     Locale.setDefault(locJa); 

     Configuration config = new Configuration(); 
     config.locale = locJa; 

     context.getResources().updateConfiguration(config, context.getResources() 
       .getDisplayMetrics()); 

     locJa = null; 
     config = null; 
    } 

Şimdi kontrol demek setleri yöntemi oluşturun. (Burada dil seçimi için temelde ben kullandım menüsü). Eğer kendi dillerini göre görüntüleri almak istiyorsanız

Configuration config = new Configuration(); 
String newLocale = config.locale.getLanguage().substring(0, 2) 
    .toLowerCase(); 
if ("ja".equalsIgnoreCase(newLocale)) { 
// Call above method with context & newLocale 
} 
// Sequentially you check for Locale & change that. 
+0

setDefaultLocale öğesinin sonunda locJa ve config değerini null olarak ayarlamanızın bir nedeni var mı? Onlar zaten kapsam dışına çıkmak üzereler ... –

+0

Onları null olarak ayarlamak için hiçbir neden yok. Burada yayınlanan yöntem kodu doğrudan benim uygulamamdan alınmıştır, bu yüzden uygulamada daha fazla kullanılmadığı için bunları yapıyorum. –

+1

+1 Her şeyi açıklamak için iyi şeyler – Naved

1

, Sen benim özel lokalizasyonu için örnek almak this.First gibi aşağıda düzeni klasör oluşturmak gerekir.

Locale appLoc = new Locale("xx"); 
Locale.setDefault(appLoc); 
Configuration appConfig = new Configuration(); 
appConfig.locale = appLoc; 
getBaseContext().getResources().updateConfiguration(appConfig, 
    getBaseContext().getResources().getDisplayMetrics()); 

düzeniniz klasör düzeni-xx olmalıdır ve çekilebilir klasör de dili değiştirdiğinizde, benim app kullanılan layout.I yenilemek zorunda çekilebilir-xx.But bir şey olmalı, almak bir düğme ve arka plan resmini ayarlayın.Ama bazen resimler değişmez bu yüzden böyle yaptım. -

btn.setBackgroundDrawable(null); 
btn.setBackgroundResource(R.drwable.yourimage); 
İlgili konular