Quốc tế hóa (I18N) trong ASP.NET Core với .NET 8
Ngày cập nhật: 2024-08-11
Lượt xem: 2017
Số từ: 613
Danh mục: Windows
Tìm kiếm
Giả sử bạn mong muốn đạt được hiệu quả như sau:
- Hỗ trợ hai ngôn ngữ là tiếng Trung và tiếng Anh
- Ngôn ngữ mặc định là tiếng Anh
- Tất cả các tệp tài nguyên dịch thuật sẽ được lưu trữ trong thư mục Resources
Dưới đây là đoạn mã cụ thể, thêm vào file Program.cs
:
|
|
Chi tiết có thể
Tuy nhiên, tài liệu chính thức đôi khi khá rời rạc và khó áp dụng trực tiếp. Vì vậy, hãy ưu tiên cấu hình theo mẫu trên.
Cách xác định thư mục Controller và View khác nhau
Với Views:
Ví dụ, nếu bạn có một file giao diện Views/Home/About.cshtml
, thì trong điều kiện đã chỉ định thư mục Resources
là nơi lưu trữ các bản dịch, hệ thống sẽ tìm đến một trong hai tệp dưới đây để lấy nội dung bản địa hóa:
Resources/Views/Home/About.fr.resx
Resources/Views.Home.About.fr.resx
Tôi cá nhân thích cách viết thứ nhất hơn vì nó dễ hiểu và dễ quản lý.
Nếu không cài đặt ResourcesPath
, thì các file .resx
có thể được đặt cùng cấp với các file .cshtml
. Tuy nhiên, tôi không khuyến khích làm như vậy vì việc quản lý tập trung sẽ bị ảnh hưởng.
Với Controllers:
Tương tự như trên, trong trường hợp đã chỉ định thư mục Resources
là nơi chứa các bản dịch, bạn có thể chọn giữa hai cách sau:
Resources/Controllers/HomeController.fr.resx
Resources/Controllers.HomeController.fr.resx
Nếu không chỉ định ResourcesPath
, bạn có thể đặt tệp .resx
ở gốc dự án với tên Controllers.HomeController.fr.resx
.
So sánh lại, việc dùng một thư mục Resources
riêng biệt vẫn là lựa chọn tốt nhất. Dù có thể thuận tiện hơn cho Views, nhưng đối với Controllers thì sự phân loại rõ ràng giúp dễ tra cứu hơn.
Cơ chế fallback
Giả sử tham số culture
gửi về là fr-CA
, ASP.NET sẽ lần lượt kiểm tra ba tệp nguồn sau, và trả về nội dung đầu tiên phù hợp:
Welcome.fr-CA.resx
Welcome.fr.resx
Welcome.resx
Đây là cơ chế giúp đảm bảo rằng người dùng luôn nhận được phiên bản gần đúng nhất khi không có bản dịch cụ thể.
Chuyển đổi ngôn ngữ
Bạn chỉ cần thêm tham số culture
tương ứng vào URL. Ví dụ, tôi đã triển khai công cụ tạo QR Code trực tuyến như sau:
- Phiên bản tiếng Trung:
- Phiên bản tiếng Anh:
Lỗi chuyển đổi ngôn ngữ không hoạt động
Tham khảo bài đăng này:
Mã ví dụ:
|
|
Hiện giờ tiếng Anh đã hiển thị bình thường.
Bạn có thể rút gọn thành:
|
|
SetDefaultCulture không có hiệu lực
Khi không cài đặt culture
hay cài đặt fr
, ứng dụng vẫn trả về tiếng Trung, chứ không phải tiếng Anh mặc định. Trên thực tế, có ba chiến lược được sử dụng:
QueryStringRequestCultureProvider
CookieRequestCultureProvider
AcceptLanguageHeaderRequestCultureProvider
Mặc định là đọc từ chuỗi query string trong URL. Nếu không tìm thấy, hệ thống sẽ chuyển sang sử dụng ngôn ngữ trình duyệt (tức là AcceptLanguageHeaderRequestCultureProvider
). Sau khi bạn thay đổi ngôn ngữ trình duyệt thành en
, mọi thứ hoạt động ổn.
.NET 8 thực hiện rất nghiêm ngặt và chặt chẽ trong xử lý quốc tế hóa, đảm bảo trải nghiệm đa ngôn ngữ hiệu quả và linh hoạt cho người dùng.