Bản địa hóa — bản chất, thích ứng nội dung theo ngôn ngữ và khu vực

Tác giả: IT Sectr Đã đăng: 2026-02-26 Thời gian đọc: 7 phút

Localization (bản địa hóa, l10n) — việc thích ứng nội dung ứng dụng di động với ngôn ngữ, khu vực và đặc điểm văn hóa của đối tượng mục tiêu. Khác với quốc tế hóa (i18n), nơi mã nguồn được chuẩn bị cho dịch thuật, bản địa hóa là quá trình thực tế dịch chuỗi, định dạng ngày tháng, số và tiền tệ, chọn hình ảnh và xem xét các chuẩn mực địa phương. Trên iOS, các bản dịch được lưu trong Localizable.strings (thư mục .lproj cho mỗi ngôn ngữ), trên Android — trong values-ru, values-de và các thư mục tài nguyên khác. Tìm hiểu thêm trong hướng dẫn bản địa hóa Android.

Điểm chính

  • Bản địa hóa (l10n) — dịch và thích ứng nội dung ứng dụng cho một ngôn ngữ và khu vực cụ thể
  • Localizable.strings — tệp iOS chứa các cặp khóa-giá trị cho mỗi ngôn ngữ
  • values-ru — thư mục tài nguyên Android cho ngôn ngữ Nga (strings.xml)
  • Thích ứng khu vực — ngày tháng, số, hình ảnh, màu sắc và yêu cầu pháp lý khác nhau theo quốc gia
  • Đặc điểm văn hóa — màu sắc, biểu tượng, cử chỉ và ví dụ phải phù hợp với chuẩn mực địa phương

Bản địa hóa (l10n) là gì và khác gì so với i18n?

Bản địa hóa (viết tắt là l10n — 10 chữ cái giữa “l” và “n”) là quá trình thích ứng ứng dụng với một ngôn ngữ và khu vực cụ thể. Nếu i18n là nền tảng kiến trúc, thì l10n là nội dung. i18n làm cho việc dịch thuật khả thi, l10n thực hiện nó. Bản địa hóa bao gồm: dịch tất cả văn bản giao diện, thích ứng định dạng ngày và số, thay thế hình ảnh nhạy cảm văn hóa, điều chỉnh văn bản pháp lý (chính sách quyền riêng tư, EULA), cấu hình hệ thống thanh toán theo khu vực và thử nghiệm trên các thiết bị mục tiêu.

ROI kinh doanh — bản địa hóa tác động trực tiếp đến tỷ lệ chuyển đổi. Theo CSA Research (2023), 76% người dùng thích mua hàng trong ứng dụng bằng tiếng mẹ đẻ của họ và 40% không bao giờ mua bằng tiếng nước ngoài. Bản địa hóa sang tiếng Nhật cho ứng dụng bán lẻ làm tăng chuyển đổi trung bình 150% (Google, 2022). Các ứng dụng đã bản địa hóa nhận được nhiều hơn 2–3 lần lượt cài đặt tự nhiên trên App Store và Google Play khu vực nhờ ASO khu vực (từ khóa bằng ngôn ngữ mục tiêu).

i18n vs l10n — hai mặt của cùng một quá trình. i18n: trích xuất chuỗi vào tài nguyên, hỗ trợ RTL, định dạng số. Được thực hiện một lần bởi các nhà phát triển. l10n: dịch chuỗi, thích ứng nội dung, thử nghiệm địa phương. Được thực hiện nhiều lần bởi người dịch và QA cho mỗi ngôn ngữ. Tại IT Sectr, chúng tôi dành 20–30% thời gian sprint cho việc bản địa hóa mỗi ngôn ngữ mới — điều này bao gồm dịch thuật, đánh giá, thử nghiệm trên thiết bị và sửa lỗi.

Bản địa hóa trong iOS: Localizable.strings và Base Internationalization

Localizable.strings — tệp chính để lưu trữ các bản dịch trong iOS. Mỗi ngôn ngữ có thư mục .lproj riêng: en.lproj/Localizable.strings, ru.lproj/Localizable.strings, de.lproj/Localizable.strings. Định dạng: “khóa” = “giá trị”; (có dấu chấm phẩy). Apple sử dụng Base Internationalization: Storyboard và XIB được tạo một lần (Base.lproj) và các chuỗi giao diện được xuất sang Localizable.strings cho mỗi ngôn ngữ. Điều này loại bỏ nhu cầu tạo bản sao của XIB cho mỗi ngôn ngữ.

swift
// en.lproj/Localizable.strings
// "settings.title" = "Cài đặt";
// "profile.greeting" = "Xin chào, %@!";
// "items.count" = "%d mục";

// ru.lproj/Localizable.strings
// "settings.title" = "Cài đặt";
// "profile.greeting" = "Xin chào, %@!";
// "items.count" = "%d mục";

// Tải chuỗi theo khóa
navigationItem.title = NSLocalizedString(
    "settings.title",
    comment: "Tiêu đề màn hình cài đặt"
)

// Chuỗi có tham số
let name = "Anna"
greetingLabel.text = String.localizedStringWithFormat(
    NSLocalizedString("profile.greeting", comment: ""), name
)

// Nhập XLIFF (Xcode → Editor → Import Localizations)
// Tự động cập nhật các tệp .lproj sau khi người dịch làm việc

Base Internationalization — cách tiếp cận của Apple, nơi giao diện (Storyboard, XIB) được tạo một lần trong Base.lproj. Khi thêm ngôn ngữ, Xcode xuất các chuỗi từ Base sang tệp XLIFF. Người dịch dịch XLIFF. Sau khi nhập, Xcode tạo .lproj với các chuỗi đã dịch. Ưu điểm: không cần sao chép XIB cho mỗi ngôn ngữ. Hạn chế: đối với các ngôn ngữ RTL (tiếng Ả Rập, tiếng Do Thái), có thể cần XIB riêng với bố cục phản chiếu.

InfoPlist.strings và bản địa hóa siêu dữ liệu

InfoPlist.strings — tệp để bản địa hóa tên ứng dụng (CFBundleDisplayName), quyền camera/micro (NSCameraUsageDescription) và các giá trị khác từ Info.plist. Được tạo trong .lproj: ru.lproj/InfoPlist.strings. Định dạng: CFBundleDisplayName = “Ứng dụng của tôi”; NSCameraUsageDescription = “Ứng dụng cần quyền truy cập camera để chụp ảnh”;. Nếu không có bản địa hóa InfoPlist.strings, các hộp thoại hệ thống sẽ bằng tiếng Anh.

Bản địa hóa trong Android: values-ru và tài nguyên đã bản địa hóa

Tài nguyên Android cho bản địa hóa được tổ chức thông qua các bộ định tính trong tên thư mục. Cho tiếng Nga — res/values-ru/, cho tiếng Đức — res/values-de/, cho tiếng Bồ Đào Nha Brazil — res/values-pt-rBR/. Android hỗ trợ hơn 160 ngôn ngữ. Hệ thống tự động chọn tài nguyên dựa trên ngôn ngữ thiết bị (Locale.getDefault()). Nếu không tìm thấy ngôn ngữ chính xác, tài nguyên từ values/ (ngôn ngữ cơ sở, thường là en) sẽ được sử dụng.

kotlin
// res/values/strings.xml (cơ sở — tiếng Anh)
<string name="settings_title">Settings</string>
<string name="greeting">Hello, %s!</string>

// res/values-ru/strings.xml (tiếng Nga)
<string name="settings_title">Cài đặt</string>
<string name="greeting">Xin chào, %s!</string>

// res/values-de/strings.xml (tiếng Đức)
<string name="settings_title">Einstellungen</string>
<string name="greeting">Hallo, %s!</string>

// Kotlin — mã thống nhất cho tất cả các ngôn ngữ
textView.text = getString(R.string.settings_title)

// Chuỗi có tham số
val greeting = getString(R.string.greeting, userName)

// Hình ảnh đã bản địa hóa
// res/drawable-ru/flag.png — cờ cho phiên bản tiếng Nga
// res/drawable/flag.png — cờ mặc định

// Bản địa hóa bố cục (cho ngôn ngữ RTL)
// res/layout-ar/activity_main.xml — phiên bản tiếng Ả Rập

Bản địa hóa ngoài chuỗi — Android cho phép bản địa hóa hình ảnh (res/drawable-ru/), màu sắc (res/values-ru/colors.xml), kích thước (res/values-ru/dimens.xml), hoạt ảnh, menu và thậm chí toàn bộ bố cục. Đối với các ngôn ngữ có độ dài từ khác nhau (tiếng Đức dài hơn tiếng Anh 30–40%), hãy sử dụng dimens.xml đã bản địa hóa với chiều rộng nút tăng lên. Đối với các khu vực có biểu tượng màu sắc khác nhau (màu trắng là tang tóc ở Trung Quốc), hãy sử dụng colors.xml đã bản địa hóa.

Kiểm tra bản địa hóa trên thiết bị

Kiểm tra — chuyển ngôn ngữ thiết bị sang ngôn ngữ mục tiêu qua Cài đặt → Hệ thống → Ngôn ngữ. Kiểm tra: tất cả các chuỗi đã được dịch, ngày tháng được định dạng chính xác, số hiển thị với dấu phân cách phù hợp, hình ảnh phù hợp với khu vực, bố cục không bị vỡ với các chuỗi dài. Để tự động hóa, hãy sử dụng Espresso với LocaleTestRule (Android Testing Library) — nó cho phép chạy thử nghiệm với các ngôn ngữ khác nhau mà không cần chuyển đổi ngôn ngữ thủ công.

Thích ứng văn hóa: những gì cần dịch ngoài văn bản

Đặc điểm văn hóa — bản địa hóa không chỉ giới hạn ở việc dịch chuỗi. Biểu tượng màu sắc khác nhau: đỏ là may mắn ở Trung Quốc, nguy hiểm ở Mỹ, tang tóc ở Nam Phi. Trắng là tinh khiết ở Châu Âu, tang tóc ở Trung Quốc. Biểu tượng cử chỉ: ngón tay cái giơ lên là tích cực ở Mỹ, là sự xúc phạm ở Trung Đông. Hình ảnh con người: ở các nước Ả Rập, hình ảnh phụ nữ mặc đồ bơi là không thể chấp nhận. Biểu tượng tôn giáo: thập tự, trăng lưỡi liềm, sao David chỉ nên được sử dụng trong bối cảnh phù hợp.

Yêu cầu pháp lý — mỗi quốc gia có luật riêng về sản phẩm kỹ thuật số. GDPR (EU) — sự đồng ý bắt buộc đối với cookie và xử lý dữ liệu. CCPA (California) — quyền xóa dữ liệu. Luật Dữ liệu Cá nhân (Nga, 152-FZ) — lưu trữ dữ liệu trên máy chủ Nga. LGPD (Brazil) — tương đương GDPR. Thanh toán: ở Trung Quốc cần Alipay/WeChat Pay, ở Ấn Độ — UPI, ở Brazil — Boleto và PIX. Cấu hình cổng thanh toán theo khu vực trước khi triển khai bản địa hóa.

Khía cạnhMỹTrung QuốcUAEĐức
Hệ thống thanh toánApple Pay, ThẻAlipay, WeChat PayThẻ, Apple PayPayPal, Giropay
Màu thương hiệuBất kỳĐỏ — may mắnXanh lá — Hồi giáoĐen/Vàng
Mạng xã hộiInstagram, XWeChat, DouyinWhatsApp, XWhatsApp, X
NgàyMM/dd/yyyyyyyy/MM/dddd/MM/yyyydd.MM.yyyy
Luật dữ liệuCCPAPIPLPDPLGDPR

Ví dụ và nội dung — điều chỉnh ví dụ theo khu vực. Cho bản địa hóa tiếng Đức, sử dụng hệ mét (kg, km), cho Mỹ — hệ Anh (lb, mi). Số điện thoại, mã bưu điện, địa chỉ — tất cả đều được định dạng khác nhau. Ví dụ về tiền tệ: ¥1000 ở Nhật, $9.99 ở Mỹ, 999 ₽ ở Nga. Hình ảnh thực phẩm, quần áo và nội thất phải phù hợp với tiêu chuẩn khu vực. Tại IT Sectr, chúng tôi khuyên bạn nên thuê các chuyên gia tư vấn địa phương để xác minh khả năng thích ứng văn hóa.

Quy trình bản địa hóa: công cụ, người dịch, CI/CD

Công cụ bản địa hóa — các nền tảng chuyên nghiệp tự động hóa quy trình: Lokalise, Crowdin, POEditor, Smartling, Phrase. Chúng tích hợp với kho lưu trữ, tự động nhập các chuỗi mới, theo dõi thay đổi (Cập nhật Delta — chỉ dịch các chuỗi đã thay đổi), cung cấp Bộ nhớ dịch (TM — lưu trữ các cụm từ đã dịch trước đó) và Bảng thuật ngữ. Chi phí dịch thuật chuyên nghiệp trung bình: $0.08–0.15 mỗi từ (tùy thuộc vào ngôn ngữ).

Quy trình — (1) Nhà phát triển thêm khóa i18n vào mã, push lên kho lưu trữ. (2) CI/CD (GitHub Actions / GitLab CI) tự động gửi các khóa mới đến nền tảng bản địa hóa. (3) Người dịch nhận được thông báo, dịch và lưu. (4) Các tệp đã dịch tự động tạo PR trong kho lưu trữ. (5) QA kiểm tra bản địa hóa trên thiết bị. (6) Phát hành. Chu kì cho một ngôn ngữ: 2–5 ngày làm việc (tùy theo khối lượng). Cho 10 ngôn ngữ: 5–15 ngày với công việc song song của người dịch.

Dịch máy + Đánh giá con người — tiêu chuẩn hiện đại. Dịch thuật mạng nơ-ron (DeepL, Google Translate, GPT-4) cung cấp chất lượng 80–90% cho các cặp ngôn ngữ phổ biến. Người dịch kiểm tra: thuật ngữ, ngữ cảnh (từ có thể có ý nghĩa khác nhau trên các màn hình khác nhau), thích ứng văn hóa. Tại IT Sectr, chúng tôi sử dụng phương pháp kết hợp: dịch ML + đánh giá bởi người bản ngữ. Đối với các chuỗi quan trọng (pháp lý, thanh toán) — chỉ dịch chuyên nghiệp. Tiết kiệm: lên đến 60% chi phí trong khi vẫn duy trì chất lượng.

Câu hỏi thường gặp

Bản địa hóa khác quốc tế hóa như thế nào?

Quốc tế hóa — chuẩn bị mã cho dịch thuật (trích xuất chuỗi, RTL, định dạng). Bản địa hóa — bản dịch thực tế và thích ứng văn hóa. i18n được nhà phát triển thực hiện một lần, l10n — người dịch cho từng ngôn ngữ. i18n mà không có l10n — ứng dụng sẵn sàng để dịch nhưng chưa được dịch. l10n mà không có i18n — phải viết lại mã cho từng ngôn ngữ.

Các bản dịch được lưu ở đâu trong iOS?

Trong các tệp Localizable.strings bên trong các thư mục .lproj. Cho mỗi ngôn ngữ: en.lproj (tiếng Anh), ru.lproj (tiếng Nga), de.lproj (tiếng Đức). Định dạng: “khóa” = “giá trị”;. Cho số nhiều — Localizable.stringsdict. Cài đặt ứng dụng (CFBundleDisplayName) — trong InfoPlist.strings. Xcode quản lý .lproj thông qua Base Internationalization.

values-ru trong Android là gì?

values-ru — thư mục tài nguyên Android cho ngôn ngữ Nga. Chứa strings.xml với các bản dịch. Tương tự cho các ngôn ngữ khác: values-de (tiếng Đức), values-fr (tiếng Pháp). Android chọn tài nguyên dựa trên ngôn ngữ hệ thống. Nếu không tìm thấy values-ru, nó sử dụng values/ (ngôn ngữ cơ sở, thường là tiếng Anh).

Làm thế nào để định dạng ngày tháng cho các khu vực khác nhau?

Luôn sử dụng Locale API. iOS: DateFormatter.locale = Locale(identifier: locale). Android: DateFormat.getDateInstance(DateFormat.SHORT, locale). Nga: 31.12.2024. Mỹ: 12/31/2024. Nhật: 2024/12/31. Không bao giờ đặt định dạng cố định — mỗi quốc gia có tiêu chuẩn riêng. Để nhập ngày, hãy sử dụng UIDatePicker / DatePicker.

Cần bao nhiêu ngôn ngữ cho một ứng dụng toàn cầu?

Để tiếp cận toàn cầu, 10–15 ngôn ngữ là đủ: tiếng Anh, tiếng Tây Ban Nha, tiếng Pháp, tiếng Đức, tiếng Nhật, tiếng Trung, tiếng Hàn, tiếng Bồ Đào Nha, tiếng Nga, tiếng Ý, tiếng Ả Rập. Cho khu vực — 1–2 ngôn ngữ. Mỗi ngôn ngữ bổ sung làm tăng lượt cài đặt tự nhiên lên 5–15% ở khu vực tương ứng. App Store yêu cầu ít nhất bản địa hóa tiếng Anh.

Tổng kết

  • Bản địa hóa (l10n) — dịch và thích ứng văn hóa nội dung cho một ngôn ngữ và khu vực cụ thể
  • iOS — Localizable.strings trong thư mục .lproj, Base Internationalization, InfoPlist.strings
  • Android — values-ru/strings.xml, drawable và layout đã bản địa hóa qua bộ định tính
  • Thích ứng văn hóa — màu sắc, biểu tượng, cử chỉ, hệ thống thanh toán, yêu cầu pháp lý
  • Quy trình — CI/CD → nền tảng bản địa hóa → người dịch → QA → phát hành (2–5 ngày mỗi ngôn ngữ)
  • Phương pháp kết hợp — dịch ML (DeepL, GPT) + đánh giá người bản ngữ để tiết kiệm 60%
  • ROI — 76% người dùng chỉ mua bằng tiếng mẹ đẻ (CSA Research, 2023)

Chúng tôi sẽ phát triển ứng dụng di động chìa khóa trao tay

IT Sectr tạo các ứng dụng iOS và Android cho các công ty khởi nghiệp và doanh nghiệp từ năm 2017. Chúng tôi sẽ tư vấn và đề xuất giải pháp tốt nhất cho bạn.

Thảo luận dự án

Đọc thêm