+2

Đa ngôn ngữ trong Android

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

  1. Ngôn ngữ được xét theo ngôn ngữ chính của thiết bị sử dụng
  2. 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.

a.jpg

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 :

cc2.jpg

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>

    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à :

collage.jpg

Cùng thử nghiệm nhé, chúc một ngày làm việc vui vẻ !


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí