Tôi muốn cho phép người dùng thay đổi ngôn ngữ của ứng dụng của tôi bằng cách sử dụng spinner (hoặc bất kỳ cách nào). Tôi đã thử nhiều cách nhưng họ thay đổi ngôn ngữ của hoạt động này không phải tất cả các hoạt động và tôi muốn lưu nó để khi người dùng khởi động lại ứng dụng, anh ấy sẽ tìm thấy ngôn ngữ được chọn cuối cùng.Android cách thay đổi ngôn ngữ ứng dụng tại thời gian chạy
Trả lời
bạn có thể sử dụng mã này trong spinner hoặc bất kỳ cách nào bạn muốn
String languageToLoad = "en"; // your language
Locale locale = new Locale(languageToLoad);
Locale.setDefault(locale);
Configuration config = new Configuration();
config.locale = locale;
getBaseContext().getResources().updateConfiguration(config,
getBaseContext().getResources().getDisplayMetrics());
thì bạn nên lưu các ngôn ngữ như thế này
SharedPreferences languagepref = getSharedPreferences("language",MODE_PRIVATE);
SharedPreferences.Editor editor = languagepref.edit();
editor.putString("languageToLoad",languageToLoad);
editor.commit();
và sử dụng cùng một mã trong mọi hoạt động trong onCreate()
để tải languageToLoad
từ SharedPreferences
Sử dụng SharedPreferences để theo dõi ngôn ngữ mà người dùng đã chọn và sau đó đặt hoạt động sử dụng ngôn ngữ đó trong phương thức onCreate() và onResume(). Bằng cách này, nó sẽ tồn tại qua khởi động lại ứng dụng, vv
tất cả nhà phát triển đều sử dụng cách này trong ứng dụng đó, tôi cảm thấy nó không rõ ràng lắm! –
Tôi không thể nói cho các nhà phát triển khác vì tôi không có quyền truy cập vào mã số của họ –
Vâng, đây là cách được đề xuất và rõ ràng hơn để truyền thông tin mà bạn có trong một Hoạt động cho các hoạt động khác. Cách khác, hacky/không hiệu quả hơn để làm điều đó là giữ dữ liệu như một trường tĩnh trong Activity, và truy cập nó từ các hoạt động khác, nhưng nếu ai đó hỏi, tôi đã không nói với bạn điều đó! :) –
Đây là câu hỏi cũ nhưng tôi sẽ trả lời: -) Bạn có thể mở rộng lớp Ứng dụng để áp dụng giải pháp của Abol3z trên mọi Hoạt động. Tạo lớp:
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
String lang = preferences.getString("lang", "en");
Locale locale = new Locale(lang);
Locale.setDefault(locale);
Configuration config = new Configuration();
config.locale = locale;
getBaseContext().getResources().updateConfiguration(config,
getBaseContext().getResources().getDisplayMetrics());
}
}
Và thiết MyApplication như lớp ứng dụng trong manifest:
<application
android:name=".MyApplication"
...
/>
Bạn có thể thiết lập giá trị lang (trong spinner của bạn):
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(getContext());
preferences.edit().putString("lang", "en").commit();
Theo [tài liệu] (https://developer.android.com/reference/android/app/Application.html#onCreate()) Ứng dụng onCreate() chỉ được gọi khi khởi động ứng dụng . Vì vậy, bạn không thực sự thay đổi ngôn ngữ trong thời gian chạy, nhưng khi bắt đầu ứng dụng tiếp theo, phải không? Chỉnh sửa: Đọc lại câu hỏi gốc, cách của bạn đã giải quyết được vấn đề sau khi tất cả. – Micha
btnChange.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(mContext);
//preferences.edit().putString("lang", "bn").commit();
String lang = preferences.getString("lang", "en");
//Log.e("lang", "lang in Main Activity:"+lang);
if (lang.equalsIgnoreCase("en")){
setLocale("bn");
preferences.edit().putString("lang", "bn").commit();
btnChange.setText("Eng");
}else if(lang.equalsIgnoreCase("bn")){
setLocale("en");
preferences.edit().putString("lang", "en").commit();
btnChange.setText("বাংলা");
}
}
});
public void setLocale(String lang) {
myLocale = new Locale(lang);
Resources res = getResources();
DisplayMetrics dm = res.getDisplayMetrics();
Configuration conf = res.getConfiguration();
conf.locale = myLocale;
res.updateConfiguration(conf, dm);
Intent refresh = new Intent(this, MainActivity.class);
startActivity(refresh);
finish();
}
chúng tôi sử dụng hai ngôn ngữ cho mục đích kiểm tra. giữ tất cả chuỗi trong các thư mục khác nhau có tên là giá trị và giá trị bn.
- 1. Thay đổi ngôn ngữ cho NSLocalizedString() trong thời gian chạy
- 2. Thay đổi ngôn ngữ tại thời điểm chạy trong Swing
- 3. Cách thích hợp để thay đổi ngôn ngữ tại thời gian chạy
- 4. Thay đổi ngôn ngữ khi chạy?
- 5. WPF: Cách thay đổi CurrentUICulture tại thời gian chạy
- 6. Thay đổi menu tại thời gian chạy
- 7. Thay đổi App.config tại Thời gian chạy
- 8. Thay đổi Cài đặt ứng dụng trong thời gian chạy
- 9. Làm cách nào để hiển thị ngôn ngữ (ngôn ngữ) hiện tại ứng dụng Android?
- 10. Cách thay đổi ngôn ngữ khi chạy trong java swing
- 11. Cách thay đổi Spring's @Scheduled fixedDelay tại thời gian chạy
- 12. WPF + PRISM Cách thay đổi vùng tại thời gian chạy
- 13. Cách thay đổi vị trí trang tại thời gian chạy
- 14. Chuyển đổi ngôn ngữ bên trong ứng dụng android
- 15. Android - Thay đổi bố cục đoạn trong thời gian chạy
- 16. Thay đổi hướng trong thời gian chạy
- 17. Thay đổi kích cỡ một THREE.CubeGeometry tại thời gian chạy
- 18. ứng dụng đa ngôn ngữ wpf
- 19. Thay đổi ngôn ngữ ứng dụng theo lập trình
- 20. thay đổi Vị trí nhãn tại thời gian chạy
- 21. Làm thế nào để rơi trở lại nhiều ngôn ngữ trong Django tại thời gian chạy?
- 22. Thay đổi thuộc tính log4j tại thời gian chạy
- 23. Drupal: cách thay đổi ngôn ngữ phân loại hiện tại
- 24. Thay đổi ngôn ngữ giả lập Android tự động
- 25. Android - thay đổi chế độ xem tiêu đề tùy chỉnh tại thời gian chạy
- 26. Làm cách nào để thay đổi ngôn ngữ của ứng dụng khi người dùng chọn ngôn ngữ?
- 27. iOS: Cách nhận ngôn ngữ ứng dụng hiện tại
- 28. Android - Thay đổi Nguồn Chế độ xem Hình ảnh tại thời gian chạy sau vài giây
- 29. Thay đổi ngôn ngữ hệ thống C#
- 30. Thay đổi Font trong thời gian chạy
Liệu sự thay đổi này có nằm trong toàn bộ hệ thống Android hay nó sẽ chỉ thay đổi cho ứng dụng? Khi yêu cầu điều này để khi người dùng rời khỏi ứng dụng, họ sẽ có thể tiếp tục với ngôn ngữ mặc định là lang –
@KarueBensonKarue mặc định sẽ chỉ thay đổi trong ứng dụng. –
Tốt, cảm ơn phản hồi của bạn –