Bạn đang phát triển ứng dụng ASP.Net MVC phải không? Các câu trả lời khác dường như là cụ thể cho các ứng dụng máy tính để bàn. Hãy để tôi nắm bắt những điều phổ biến:
Phát hiện địa phương
Điều khá quan trọng là ứng dụng của bạn phát hiện ngôn ngữ của người dùng một cách chính xác. Trong ứng dụng máy tính để bàn, CultureInfo. . Đối với các ứng dụng web, bạn nên đặt cả hai nền văn hóa thành tự động (để tự động phát hiện ngôn ngữ từ tiêu đề AcceptL Language) trừ khi bạn muốn thực hiện một số quy trình phát hiện ngôn ngữ địa phương ưa thích (nghĩa là muốn hỗ trợ thay đổi ngôn ngữ theo yêu cầu).
Chuỗi bên ngoài
Tất cả các chuỗi phải đến từ tài nguyên, đó là các tệp Resx. Trong Ứng dụng Winforms có thể dễ dàng đạt được bằng cách đặt biểu mẫu Thuộc tính bản địa hóa thành đúng. Bạn cũng sẽ cần phải thủ công (không may) các chuỗi bên ngoài xuất phát từ các mô hình của mình. Nó cũng tương đối đơn giản. Trong Asp.Net, bạn sẽ cần phải thực hiện mọi thứ bằng tay ...
Bố cục
Bạn chắc chắn cần phải cho phép mở rộng chuỗi. Trong thế giới Winforms có thể đạt được thông qua TableLayoutPanel, nên được sử dụng để đảm bảo rằng bố cục sẽ tự động điều chỉnh để phù hợp với văn bản dài hơn. Trong thế giới web, bạn có một chút may mắn. Bạn có thể cần triển khai Cơ chế bản địa hóa CSS - một cách để sửa đổi (ghi đè) các định nghĩa CSS. Điều này sẽ cho phép người bản địa hóa sửa đổi các vấn đề về phong cách theo yêu cầu. Đảm bảo rằng mỗi phần tử HTML trong trang được hiển thị có id duy nhất - nó sẽ cho phép nhắm mục tiêu chính xác.
Vấn đề văn hóa cụ thể
Tránh sử dụng đồ họa, màu sắc và âm thanh có thể dành riêng cho văn hóa phương Tây. Nếu bạn thực sự cần nó, vui lòng cung cấp phương tiện Bản địa hóa. Tránh đồ họa nhạy cảm với hướng (vì đây sẽ là một vấn đề khi bạn cố gắng bản địa hóa để nói tiếng Ả Rập hoặc tiếng Do Thái). Ngoài ra, đừng cho rằng cả thế giới đang sử dụng cùng một số (nghĩa là không đúng với tiếng Ả Rập).
ToString () và Parse ()
Hãy chắc chắn luôn vượt qua CultureInfo khi gọi ToString () trừ khi nó không được hỗ trợ. Bằng cách đó bạn đang bình luận ý định của bạn. Ví dụ: nếu bạn đang sử dụng một số số trong nội bộ và vì một số lý do cần phải chuyển đổi nó thành chuỗi sử dụng:
int i = 42;
var s = i.ToString(CultureInfo.InvariantCulture);
Đối với các số sẽ được hiển thị cho người dùng sử dụng:
var s = i.ToString(CultureInfo.CurrentCulture); // formatting culture used
Điều tương tự cũng áp dụng cho Parse (), TryPude () và thậm chí là ParseExact () - một số lỗi khó chịu có thể được đưa vào mà không sử dụng đúng cách CultureInfo. Đó là bởi vì một số linh hồn nghèo nàn trong Microsoft, với đầy đủ ý định tốt đã quyết định rằng nên coi CultureInfo.CiverseCARM là mặc định (nó sẽ được sử dụng nếu bạn không vượt qua bất cứ điều gì) - sau tất cả khi ai đó đang sử dụng ToString ( ) anh ấy / cô ấy muốn hiển thị nó cho người dùng, phải không? Hóa ra không phải lúc nào cũng vậy - ví dụ: cố gắng lưu trữ số phiên bản ứng dụng của bạn trong cơ sở dữ liệu và sau đó chuyển đổi nó thành thể hiện của lớp Phiên bản. Chúc may mắn.
Ngày và múi giờ
Đảm bảo luôn lưu trữ và khởi tạo DateTime trong UTC (sử dụng DateTime.UtcNow thay vì DateTime.Now). Chuyển đổi nó thành giờ địa phương ở định dạng cục bộ khi hiển thị:
DateTime now = DateTime.UtcNow;
var s = now.ToLocalTime().ToString(CultureInfo.CurrentCulture);
Nếu bạn cần gửi email có tham chiếu thời gian trong cơ thể, hãy chắc chắn bao gồm thông tin múi giờ - bao gồm cả bù UTC và danh sách các thành phố:
DateTime someDate; // i.e. from database
var formattedDate = String.Format("{0} {1}",
someDate.ToLocaleTime().ToString(CultureInfo.CurrentCulture),
TimeZoneInfo.Local.DisplayName);
Tin nhắn tổng hợp
Bạn đã được cảnh báo không nối chuỗi. Thay vào đó, bạn có thể sẽ sử dụng String.Format () như được hiển thị ở trên. Tuy nhiên, tôi phải nói rõ rằng bạn nên giảm thiểu việc sử dụng tin nhắn ghép. Đó chỉ là do các quy tắc ngữ pháp đích khá khác nhau, do đó người dịch không chỉ cần phải sắp xếp lại câu (điều này sẽ được giải quyết bằng cách sử dụng trình giữ chỗ và String.Format ()), nhưng dịch toàn bộ câu theo cách khác nhau dựa trên những gì sẽ được thay thế. Để tôi cho bạn vài ví dụ:
// Multiple plural forms
English: 4 viruses found.
Polish: Znaleziono 4 wirusy. **OR** Znaleziono 5 wirusów.
// Conjugation
English: Program encountered incorrect character | Application encountered incorrect character.
Polish: Program napotkał nieznaną literę | Aplikacja napotkała nieznaną literę.
Các vấn đề nối khác
Ghép không bị giới hạn trong chuỗi. Tránh đặt ra các điều khiển cùng nhau, nói:
Nhắc tôi một lần nữa trong [hộp văn bản có số] ngày.
Điều này nên được thiết kế lại thành một cái gì đó như: Nhắc tôi một lần nữa trong số ngày này: [hộp văn bản].
Mã hóa ký tự và phông chữ
Luôn lưu, chuyển, bất kỳ văn bản nào trong Unicode (tức là trong UTF-8). Không sử dụng phông chữ mã cứng - Bản địa hóa có thể cần sửa đổi chúng và nó sẽ tắt cơ chế dự phòng phông chữ mặc định (trong trường hợp Winforms). Hãy nhớ cho phép các ký tự "lạ" trong hầu hết các trường (ví dụ: tên người dùng).
Kiểm tra
Bạn có thể sẽ cần phải thực hiện cái gọi là dịch giả, nghĩa là tạo tài nguyên để nói văn hóa Đức và sao chép chuỗi tiếng Anh của bạn thêm tiền tố và hậu tố. Bạn cũng có thể bọc giữ chỗ để dễ dàng phát hiện các chuỗi ghép. Mục đích của dịch giả là để phát hiện các vấn đề địa phương hóa như chuỗi mã hóa cứng, vấn đề bố cục và sử dụng quá mức các thông điệp ghép.