Đa ngôn ngữ trong Android
Một app Android tốt cần phải hướng đến đối tượng người sử dụng rộng rãi. Việc bạn là người Việt Nam và bạn chỉ viết ngôn ngữ Việt Nam là đã tự hạn chế lượng lớn người dùng trên toàn thế giới Chính vì vậy ngày hôm nay nhận tiện trong khi mình đang tìm hiểu về đa ngôn ngữ. Mình xin phép được viết ...
Một app Android tốt cần phải hướng đến đối tượng người sử dụng rộng rãi. Việc bạn là người Việt Nam và bạn chỉ viết ngôn ngữ Việt Nam là đã tự hạn chế lượng lớn người dùng trên toàn thế giới
Chính vì vậy ngày hôm nay nhận tiện trong khi mình đang tìm hiểu về đa ngôn ngữ. Mình xin phép được viết bài hướng dẫn cách sử dụng đa ngôn ngữ trong Android luôn.
Ban đầu ở những phiên bản đầu tiên Android chỉ hỗ trợ 2 ngôn ngữ là Anh và Đức. Sau này nhận thấy sự quan trong của đa ngôn ngữ nó đã thêm dần các ngôn ngữ vào trong các phiên bản tiếp theo. Và từ phiên bản 2.3 trở đi đã có gần hết các ngôn ngữ trên thế giới trong đó có Tiếng Việt.
Language Locale values/strings.xml German de values-de/strings.xml Chinese zh values-zh/strings.xml Czech cs values-cs/strings.xml Dutch nl values-nl/strings.xml French fr values-fr/strings.xml Italian it values-it/strings.xml Japanese ja values-ja/strings.xml Korean ko values-ko/strings.xml Polish pl values-pl/strings.xml Russian ru values-ru/strings.xml Spanish es values-es/strings.xml Arabic ar values-ar/strings.xml Bulgarian bg values-bg/strings.xml Catalan ca values-ca/strings.xml Croatian hr values-hr/strings.xml Danish da values-da/strings.xml Finnish fi values-fi/strings.xml Greek el values-el/strings.xml Hebrew iw values-iw/strings.xml Hindi hi values-hi/strings.xml Hungarian hu values-hu/strings.xml Indonesian in values-in/strings.xml Latvian lv values-lv/strings.xml Lithuanian lt values-lt/strings.xml Norwegian nb values-nb/strings.xml Portuguese pt values-pt/strings.xml Romanian ro values-ro/strings.xml Serbian sr values-sr/strings.xml Slovak sk values-sk/strings.xml Slovenian sl values-sl/strings.xml Swedish sv values-sv/strings.xml Tagalog tl values-tl/strings.xml Thai th values-th/strings.xml Turkish tr values-tr/strings.xml Ukrainian uk values-uk/strings.xml Vietnamese vi values-vi/strings.xml
Đa ngôn ngữ cũng có 2 hướng sử dụng riêng biệt
- Ngôn ngữ được xét theo ngôn ngữ chính của thiết bị sử dụng
- Ngôn ngữ được xét theo ý muốn của người sử dụng ngay bên trong app của mình.
Cách 1
Bạn chỉ cần tạo thêm 1 file xml với mã ngôn ngữ bạn muốn Vd : mình đang có 1 file string.xml như sau :
<resources> <string name="app_name">demo</string> <string name="tieng_viet">Tiếng Việt</string> </resources>
Ở đây giả sử mình muốn có thêm ngôn ngữ Tiếng Anh cho những thiết bị chọn ngôn ngữ mặc định là Tiếng Anh. Thì mình sẽ tạo thêm 1 file string.xml và chọn locale là en:English.
Tạo xong bạn sẽ thấy có 1 file string.xml(en) và có biểu tượng cờ của US là đúng.
Bên trong bạn phải sửa lại ngôn ngữ cho đúng Tiếng Anh nhé.
<resources> <string name="app_name">demo</string> <string name="tieng_viet">English</string> </resources>
Thế là xong rồi đó. Và kết quả như sau. Bạn chạy app rồi thay đổi ngôn ngữ của thiết bị để kiểm tra nhé .
Kết quả như sau :
Cách 2
Với cách thứ 2 thì có phần dài dòng hơn 1 chút.
Bước 1 : Bạn cần thêm android:configChanges="locale|orientation|keyboardHidden"> vào trong manifest.
Bước 2 : Bạn vẫn tạo các file xml về các ngôn ngữ mà bạn muốn như cách thứ nhất.
Bước 3 : Mình có ví dụ đoạn mã như sau :
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_awidth="match_parent" android:gravity="center" android:layout_height="match_parent" android:orientation="vertical" > <TextView android:id="@+id/tvHello" android:layout_awidth="fill_parent" android:layout_height="wrap_content" android:gravity="center" android:paddingTop="25sp" android:text="@string/hello" android:textSize="25sp" /> <LinearLayout android:orientation="horizontal" android:layout_marginTop="200dp" android:layout_awidth="match_parent" android:layout_height="wrap_content"> <Button android:id="@+id/but_vi" android:layout_weight="1" android:layout_awidth="0dp" android:text="Tiếng Việt" android:layout_height="wrap_content"/> <Button android:id="@+id/but_en" android:layout_weight="1" android:layout_awidth="0dp" android:text="Tiếng Anh" android:layout_height="wrap_content"/> <Button android:id="@+id/but_ja" android:layout_weight="1" android:layout_awidth="0dp" android:text="Tiếng Nhật" android:layout_height="wrap_content"/> </LinearLayout> </LinearLayout>
và
public class MultiLanguage2 extends Activity { private Locale mLocale; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.multi_language_2); findViewById(R.id.but_vi).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { setLocale("vi"); } }); findViewById(R.id.but_en).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { setLocale("en"); } }); findViewById(R.id.but_ja).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { setLocale("ja"); } }); } public void setLocale(String lang) { mLocale = new Locale(lang); Resources resources = getResources(); Configuration configuration = resources.getConfiguration(); configuration.locale = mLocale; resources.updateConfiguration(configuration, resources.getDisplayMetrics()); startActivity( new Intent(this, MultiLanguage2.class)); } }
Và kết quả là :
Cùng thử nghiệm nhé, chúc một ngày làm việc vui vẻ !