Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Android

Cách thay đổi ngôn ngữ ứng dụng khi người dùng chọn trong Android

Giới thiệu

Ví dụ này minh họa cách thay đổi ngôn ngữ ứng dụng (locale) tại runtime khi người dùng chọn từ Spinner.

Các bước thực hiện

Bước 1: Tạo dự án mới

Mở Android Studio, chọn File → New Project và điền thông tin cần thiết.

Bước 2: Thiết kế giao diện (res/layout/activity_main.xml)

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="https://schemas.android.com/apk/res/android"
    xmlns:tools="https://schemas.android.com/tools"
    android:id="@+id/rl"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="10dp"
    tools:context=".MainActivity">

    <Spinner
        android:id="@+id/spinner"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true" />

    <TextView
        android:id="@+id/string"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/spinner"
        android:layout_centerInParent="true"
        android:text="@string/thank_you"
        android:textSize="24sp" />

</RelativeLayout>

Bước 3: Tạo file strings cho các ngôn ngữ

res/values/strings.xml (Mặc định - Tiếng Anh)

<resources>
    <string name="app_name">Language Demo</string>
    <string name="thank_you">Thank you</string>
</resources>

res/values-vi/strings.xml (Tiếng Việt)

<resources>
    <string name="app_name">Demo Ngôn Ngữ</string>
    <string name="thank_you">Cảm ơn bạn</string>
</resources>

res/values-fr/strings.xml (Tiếng Pháp)

<resources>
    <string name="app_name">Demo Langue</string>
    <string name="thank_you">Je vous remercie</string>
</resources>

res/values-es/strings.xml (Tiếng Tây Ban Nha)

<resources>
    <string name="app_name">Demo Idioma</string>
    <string name="thank_you">Gracias</string>
</resources>

res/values-hi/strings.xml (Tiếng Hindi)

<resources>
    <string name="app_name">भाषा डेमो</string>
    <string name="thank_you">धन्यवाद</string>
</resources>

Bước 4: Viết code MainActivity.java

import android.content.Intent;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import android.widget.Toast;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;

public class MainActivity extends AppCompatActivity {
    Spinner spinner;
    String currentLanguage = "en";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        spinner = findViewById(R.id.spinner);

        List<String> languages = new ArrayList<>();
        languages.add("Chọn ngôn ngữ");
        languages.add("English");
        languages.add("Tiếng Việt");
        languages.add("Français");
        languages.add("Español");
        languages.add("हिन्दी");

        ArrayAdapter<String> adapter = new ArrayAdapter<>(this,
            android.R.layout.simple_spinner_dropdown_item, languages);
        spinner.setAdapter(adapter);

        spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                switch (position) {
                    case 0: break;
                    case 1: setLocale("en"); break;
                    case 2: setLocale("vi"); break;
                    case 3: setLocale("fr"); break;
                    case 4: setLocale("es"); break;
                    case 5: setLocale("hi"); break;
                }
            }

            @Override
            public void onNothingSelected(AdapterView<?> parent) {}
        });
    }

    private void setLocale(String localeCode) {
        if (!localeCode.equals(currentLanguage)) {
            Locale locale = new Locale(localeCode);
            Locale.setDefault(locale);
            
            Resources res = getResources();
            DisplayMetrics dm = res.getDisplayMetrics();
            Configuration conf = res.getConfiguration();
            conf.setLocale(locale); // API 17+
            res.updateConfiguration(conf, dm);

            currentLanguage = localeCode;
            
            // Restart activity để áp dụng ngôn ngữ mới
            Intent refresh = new Intent(this, MainActivity.class);
            startActivity(refresh);
            finish();
        } else {
            Toast.makeText(this, "Ngôn ngữ đã được chọn", Toast.LENGTH_SHORT).show();
        }
    }

    @Override
    public void onBackPressed() {
        moveTaskToBack(true);
    }
}

Lưu ý quan trọng (Android 7.0+):

  • Sử dụng conf.setLocale(locale) thay vì conf.locale = locale
  • Cần override attachBaseContext() trong Application hoặc Activity để persist locale
  • Xem thêm: ContextWrapper với ConfigurationWrapper cho hỗ trợ tốt hơn

Bước 5: Cấu hình AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest
    xmlns:android="https://schemas.android.com/apk/res/android"
    package="app.com.sample">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">

        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

    </application>
</manifest>

Chạy ứng dụng

Kết nối thiết bị, nhấn Run. Chọn ngôn ngữ từ Spinner để xem ứng dụng thay đổi ngôn ngữ ngay lập tức.

Cách thay đổi ngôn ngữ ứng dụng khi người dùng chọn trong Android

Cách thay đổi ngôn ngữ ứng dụng khi người dùng chọn trong Android