2011-12-27 34 views
6

Để hỗ trợ quốc tế hóa phần mềm, nhiều ngôn ngữ lập trình và nền tảng hỗ trợ phương tiện lấy tài nguyên được bản địa hóa được sử dụng trong giao diện người dùng được hiển thị cho người dùng (ví dụ: lớp java.util.ResourceBundle của Java). Thông thường, nếu tài nguyên cho miền địa phương ưa thích của người dùng không có sẵn, thì có một cơ chế dự phòng hoặc quy trình giải quyết miền địa phương, sẽ cố định vị trí các tài nguyên phù hợp gần nhất từ ​​tập hợp các tài nguyên có sẵn. Ví dụ: nếu tài nguyên cho en-US không khả dụng thì hệ thống thường cố gắng tìm tài nguyên cho en.Có một thuật toán chuẩn cho độ phân giải miền địa phương không?

Quy trình giải quyết miền địa phương có vẻ gần giống với nhiều giải pháp gói tài nguyên của nhiều ngôn ngữ và nền tảng. Chúng có tuân theo một số thuật toán phân giải địa phương chuẩn hay không, nếu không, có tồn tại một tiêu chuẩn như vậy không?

+1

Họ (các chuyên gia i18n thiết kế các tính năng này) tuân theo các phương pháp hay nhất. Thực hành tốt nhất sẽ ít nhiều rõ ràng hơn khi bạn biết điều gì đó về lãnh thổ (~ quốc gia) và ngôn ngữ. Cơ chế quay trở lại dễ dàng được mô tả bởi Tom là một phần của Java lên phiên bản 6. Bây giờ với Java 7 và BCP 47 là cách phức tạp hơn - xem các ngôn ngữ Trung Quốc ví dụ (zh-SG & zh-CN => zh-Hans, zh- TW, zh-HK, zh-MO => zh-Hant). BTW. Lưu ý rằng tôi đang sử dụng các thẻ ngôn ngữ ... –

Trả lời

1

Tôi không biết về tiêu chuẩn.

Tuy nhiên, thuật toán được sử dụng là một hậu quả tầm thường của thực tế là ngôn ngữ là phân cấp. Có một ngôn ngữ gốc (notional) không có tên. Bên dưới đây là ngôn ngữ chỉ có ngôn ngữ (en, fr, v.v.). Bên dưới là các ngôn ngữ quốc gia (en_GB, en_, v.v.). Bên dưới đó là tùy chọn, các ngôn ngữ biến thể (en_GB_Yorkshire, en_GB_cockney, v.v. - ví dụ thực tế, nhìn vào Na Uy).

Cách tự nhiên để tìm tài nguyên phù hợp là bắt đầu với địa điểm thấp nhất, cụ thể nhất, bạn có thể và đi bộ lên cây cho đến khi bạn tìm thấy thứ gì đó. Vì vậy, bắt đầu với en_US_TX, bạn bước lên en_, sau đó vi, sau đó là gốc.

+0

Hầu hết thời gian các tài nguyên sẽ được cung cấp bởi người viết ứng dụng sao cho có một hệ thống phân cấp, nhưng có thể ứng dụng cung cấp tài nguyên cho 'de' (mặc định) và' en-GB'. Nếu ngôn ngữ của người dùng là 'en-US', thì độ phân giải phân cấp nghiêm ngặt sẽ dẫn đến' de'. Nó sẽ là thích hợp trong trường hợp này để di chuyển ngang trong hệ thống phân cấp. Ngoài ra, có lẽ nếu tài nguyên cho một ngôn ngữ không khả dụng, kết quả gần nhất phải là ngôn ngữ tương tự (ví dụ: không có tài nguyên nào cho tiếng Ukraina có thể trả lại tài nguyên của Nga thay vì tài nguyên tiếng Anh mặc định). –

+1

Trong trường hợp đó, một giải pháp phân cấp nghiêm ngặt sẽ dẫn đến không có gì được tìm thấy. Không de_ en_GB là một trận đấu cho en_. Đề xuất di chuyển ngang của bạn cả hai dường như là một ý tưởng tồi với tôi: bạn nên hoặc là hỗ trợ một miền địa phương đúng, hoặc không phải ở tất cả. Do đó, điều quan trọng là cho phép người dùng chọn ngôn ngữ của họ: người Ukraina có thể chọn tiếng Nga nếu đó là điều tốt nhất họ có thể nhận được, nhưng không nên bán phá giá cho họ là phù hợp nhất với tiếng Ukraina. –

+0

Làm cách nào để sử dụng lại mã độ phân giải miền địa phương của JDK 7 cho một ngôn ngữ được đề cập và một vài miền địa phương đã biết? – curious1

2

Rõ ràng là RFC 4647, Kết hợp thẻ ngôn ngữ, mô tả cú pháp "phạm vi ngôn ngữ" để chỉ định danh sách ngôn ngữ ưa thích của người dùng, cũng như cơ chế "lọc" và "tra cứu" để so sánh và đối sánh phạm vi ngôn ngữ đến các thẻ ngôn ngữ RFC 4646. RFC 4647 mô tả các cơ chế này là:

Bộ lọc tạo ra bộ thẻ ngôn ngữ (có thể trống), trong khi tra cứu sẽ tạo ra một thẻ ngôn ngữ duy nhất.

Các vấn đề liên quan