Đa ngôn ngữ trong Android
Bài đăng này đã không được cập nhật trong 3 năm
Mở đầu
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.
Phiên bản hỗ trợ
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.
Bảng mã ngôn ngữ
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
Hướng dẫn
Đ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_width="match_parent"
android:gravity="center"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/tvHello"
android:layout_width="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_width="match_parent"
android:layout_height="wrap_content">
<Button
android:id="@+id/but_vi"
android:layout_weight="1"
android:layout_width="0dp"
android:text="Tiếng Việt"
android:layout_height="wrap_content"/>
<Button
android:id="@+id/but_en"
android:layout_weight="1"
android:layout_width="0dp"
android:text="Tiếng Anh"
android:layout_height="wrap_content"/>
<Button
android:id="@+id/but_ja"
android:layout_weight="1"
android:layout_width="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ẻ !
All rights reserved