2011-06-20 55 views
6

Tôi muốn ngôn ngữ ứng dụng được đặt theo tùy chọn của người dùng nhưng cho đến bây giờ nó không hoạt động như thế nào tôi muốn nó.Cài đặt ứng dụng Ngôn ngữ trong Tùy chọn Android

Tôi đã đặt giá trị mặc định: strings.xml và cũng có giá trị-es với một strings.xml bên trong tiếng Tây Ban Nha. Tôi có một tùy chọn trình đơn đưa người dùng đến một hoạt động Sở thích, nơi anh ấy có thể amon những thứ khác đã chọn ngôn ngữ.

Vì vậy, đây là một số trích đoạn code:

public class Preference extends PreferenceActivity implements 
     OnSharedPreferenceChangeListener { 
...... 
// Set up a listener whenever a key changes 
     getPreferenceScreen().getSharedPreferences() 
       .registerOnSharedPreferenceChangeListener(this); 


...} 
//(......) 

//and here I have the listener so when the language pref changes value the locale gets changed. 
    @Override 
    public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, 
      String key) { 
     if (key.equals("listPref2")) { 
      String idioma = sharedPreferences.getString("listPref2", "catala"); 
      if ("castella".equals(idioma)) { 
       idioma = "es_ES"; 

       Locale locale = new Locale(idioma); 
       Locale.setDefault(locale); 
       Configuration config = new Configuration(); 
       config.locale = locale; 
       getApplicationContext().getResources().updateConfiguration(config, 
         getBaseContext().getResources().getDisplayMetrics()); 
      } 
     } 
    } 

Vì vậy, khi tôi thay đổi ngôn ngữ nó hoạt động nhưng sau đó khi tôi quay lại sau hoặc khởi động lại giả lập ngôn ngữ được trở về Ngôn ngữ mặc định các en_US và ngôn ngữ ứng dụng được thay đổi trở lại mặc định. Tôi có thể làm gì để sắp xếp điều đó?

Tôi biết tôi có thể nhận được tùy chọn này (mà tôi có thể truy cập từ tất cả các hoạt động của mình) và sau đó mỗi lần thiết lập miền địa phương nhưng tôi thấy nó hơi nặng không có cách nào để làm điều đó trong một cách thanh lịch?

Điều tôi muốn làm là nếu người dùng thiết lập ngôn ngữ để khi quay lại 2 ngày sau, anh ấy không phải thay đổi ngôn ngữ nữa.

Bất kỳ ý tưởng nào?

Trả lời

11

OK có thể giúp ai đó. Tôi đã thêm folowing để manifest hoạt động chính:

android:configChanges="locale"

Sau đó, khi người dùng choses các ưu đãi tôi đã đặt một nút xác nhận và sau đó nút này sẽ đưa bạn đến hoạt động chính đó là lý do tại sao lnagages được thiết lập lại.

Tôi có một lớp tĩnh nơi tôi có mã này để thay đổi ngôn ngữ:

public static void updateLanguage(Context context, String idioma) { 
    if (!"".equals(idioma)) { 
     if ("castella".equals(idioma)) { 
      idioma = "es_ES"; 
     } else if ("catala".equals(idioma)) { 
      idioma = "ca_ES"; 
     } 
     Locale locale = new Locale(idioma); 
     Locale.setDefault(locale); 
     Configuration config = new Configuration(); 
     config.locale = locale; 
     context.getResources().updateConfiguration(config, null); 
    } 
} 

kết thúc tại mọi hoạt động tôi có như 20 trong số họ tôi gọi phương pháp này trước:

setContentView(R.layout.list_event);

Với các phương pháp này khi tôi xoay màn hình, các hoạt động không thay đổi ngôn ngữ đây là liên kết đến blog đã giúp tôi: http://adrianvintu.com/blogengine/post/Force-Locale-on-Android.aspx

1

Tôi nghĩ rằng bạn cần phải đặt ngôn ngữ trong phương thức MainActivity onCreate. Giống như cách bạn đang thiết lập khi phương thức onSharedPreferenceChanged.

+1

Tôi đã làm những gì bạn đã nói nhưng điều này chỉ thay đổi ngôn ngữ trong hoạt động chính. Tôi sẽ chỉ thêm cùng một mã vào đầu tất cả các hoạt động của tôi sau đó. cảm ơn – vallllll

+0

Tôi phải thừa nhận rằng tôi chưa bao giờ thử điều địa phương. Có vẻ như nó dựa trên cài đặt người dùng. bạn đã xem cái này chưa? http://developer.android.com/resources/tutorials/localization/index.html – bytebender

+0

có Tôi đã thiết lập ngôn ngữ mặc định và 2 ngôn ngữ: tiếng Tây Ban Nha và tiếng Anh và tôi cần người dùng có thể tự chọn ngôn ngữ. Xác định miền địa phương chỉ với điện thoại là không đủ. – vallllll

Các vấn đề liên quan