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

Cách thay đổi ngôn ngữ ứng dụng theo chương trình trong Android

Giới thiệu

Hướng dẫn này trình bày cách thay đổi ngôn ngữ (locale) của ứng dụng Android theo chương trình, không phụ thuộc vào cài đặt hệ thống.

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:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">
    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/hello_world"
        android:textSize="30dp"
        android:textStyle="bold"
        android:textColor="@color/colorPrimary"
        android:layout_centerInParent="true" />
</RelativeLayout>

Bước 3: Viết logic xử lý (src/MainActivity.java)

import android.content.res.Configuration;
import android.content.res.Resources;
import android.os.Build;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.DisplayMetrics;
import java.util.Locale;

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // Đặt locale Tiếng Bulgaria (bg) trước setContentView
        setAppLocale("bg");
        setContentView(R.layout.activity_main);
    }
    
    private void setAppLocale(String localeCode) {
        Resources resources = getResources();
        DisplayMetrics dm = resources.getDisplayMetrics();
        Configuration config = resources.getConfiguration();
        
        Locale locale = new Locale(localeCode.toLowerCase());
        
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
            // API 17+ (Android 4.2+)
            config.setLocale(locale);
        } else {
            // API cũ
            config.locale = locale;
        }
        
        // Cập nhật configuration
        resources.updateConfiguration(config, dm);
    }
}

Bước 4: Tạo file strings cho ngôn ngữ mới

Chuột phải vào res → New → Android Resource Directory → Chọn values → Qualification: Locale → Language: bg (Bulgaria) → OK.

Tạo file res/values-bg/strings.xml:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="app_name">Sample</string>
    <string name="hello_world">Здравей свят</string> <!-- "Xin chào thế giới" bằng Bulgaria -->
</resources>

Bước 5: Cấu hình Manifest (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>

Lưu ý quan trọng

  • Gọi setAppLocale() trước setContentView() trong onCreate()
  • Cần tạo thư mục values-<language_code> cho từng ngôn ngữ hỗ trợ
  • Mã ngôn ngữ theo chuẩn ISO 639-1: vi (Việt), en (Anh), fr (Pháp), ja (Nhật), ko (Hàn), zh (Trung), v.v.
  • Từ Android 7.0 (API 24), hỗ trợ nhiều locale cùng lúc: config.setLocales(LocaleList)

Cách hiện đại (AppCompatDelegate - khuyến nghị)

// Trong Application class hoặc Activity
AppCompatDelegate.setApplicationLocales(new LocaleListCompat(new Locale("vi")));

Chạy ứng dụng

Kết nối thiết bị Android, nhấn Run trong Android Studio. Ứng dụng sẽ hiển thị "Здравей свят" (Tiếng Bulgaria) thay vì tiếng Anh mặc định.

Cách thay đổi ngôn ngữ ứng dụng theo chương trình trong Android

Cách thay đổi ngôn ngữ ứng dụng theo chương trình trong Android