2011-12-12 21 views
6

Android cho phép người dịch xác định Plurals. Ví dụ sau đây làm việc cho tôi với locale 'en':Số lượng "hai" không hoạt động trong Android Strings-Resources Số nhiều

<plurals name="numberOfSongsAvailable"> 
    <item quantity="one">One song found.</item> 
    <item quantity="other">%d songs found.</item> 
</plurals> 

Nhưng thêm một giá trị đặc biệt cho two không hoạt động, vẫn là phiên bản other được lấy. Việc sử dụng two có phụ thuộc vào ngôn ngữ không? Vì vậy, Android chỉ có phiên bản two nếu ngôn ngữ địa phương chỉ định rõ ràng rằng cần có phiên bản two?

Câu hỏi SO Android plurals treatment of “zero” có cùng lỗi khi sử dụng zero bằng tiếng Anh cũng không được hỗ trợ. Không có giải pháp nào trong câu hỏi này ngoại trừ việc tránh các số nhiều của Android mà tôi muốn tránh.

+0

Có, cách sử dụng hai là dành riêng cho ngôn ngữ. Chỉ vì bạn cho nó số 2 không có nghĩa là nó sẽ sử dụng số lượng = "hai". Nó sẽ chỉ sử dụng số lượng đó cho các ngôn ngữ có trường hợp đặc biệt đối với số 2 – ByteMe

+0

bản sao có thể có của [Điều trị số nhiều của Android "không"] (http://stackoverflow.com/questions/5651902/android-plurals-treatment-of- số không) –

Trả lời

9

Android đang sử dụng hệ thống số nhiều của CLDR và ​​đây không phải là cách hoạt động của hệ thống (vì vậy, đừng mong đợi điều này thay đổi).

Hệ thống này được mô tả ở đây:

http://cldr.unicode.org/index/cldr-spec/plural-rules

Nói tóm lại, điều quan trọng là phải hiểu rằng "một" không có nghĩa là số 1. Thay vào đó các từ khóa này là danh mục, và những con số cụ thể n thuộc với từng loại được xác định bởi quy tắc trong cơ sở dữ liệu CLDR:

http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html

trong khi đó dường như là không có ngôn ngữ trong đó sử dụng "zero" cho bất cứ điều gì khác hơn là 0, re là các ngôn ngữ gán 0 cho "một". Chắc chắn có rất nhiều trường hợp "hai" chứa các số khác hơn chỉ 2.

Nếu Android cho phép bạn làm những gì bạn dự định, các ứng dụng của bạn không thể được dịch chính xác sang bất kỳ số ngôn ngữ nào với các quy tắc số nhiều phức tạp hơn .

3

Đó là số old bug. Chỉ có một vài mệnh đề nếu thiếu trong số relevant code section of the PluralRules class.

Khi câu trả lời trong câu hỏi được liên kết của bạn được nêu rõ, bạn nên sử dụng MessageFormat hoặc nội dung khác. Lỗi này đã được báo cáo trong năm 2010, tôi sẽ không mong đợi rằng việc sửa lỗi trong tương lai gần (và bạn vẫn có một phiên bản bị lỗi trên các thiết bị phiên bản cũ trong trường hợp này).

Hoàn toàn sai, xem nhận xét.

+2

Tôi đọc lỗi này và nó chỉ đơn giản là sai: Bug không tồn tại nữa vì lớp 'PluralRules' không còn tồn tại trên androids gần đây nữa. Thay vào đó, 'libcore.icu' được sử dụng. Mã được liên kết trong báo cáo lỗi rất cũ. Xem mã gần đây tại đây: https://github.com/android/platform_frameworks_base/blob/master/core/java/android/content/res/Resources.java – theomega

+0

Ops. Không nhận thức được điều đó. Bạn đúng. –

+2

Mặc dù bạn đúng: Nó không giúp họ sử dụng Mã mới cho điều này, nó có cùng lỗi (xem câu hỏi) và các phiên bản cũ vẫn có mã cũ. Vì vậy, cảm ơn câu trả lời của bạn! – theomega

2

Có, việc sử dụng hai cách cụ thể cho ngôn ngữ. Chỉ vì bạn cho nó số 2 không có nghĩa là nó sẽ sử dụng số lượng = "hai". Nó sẽ chỉ sử dụng số lượng mà cho các ngôn ngữ mà có trường hợp đặc biệt cho số 2

Từ http://developer.android.com/guide/topics/resources/string-resource.html#Plurals:

Lưu ý rằng việc lựa chọn được thực hiện dựa trên sự cần thiết về ngữ pháp. Một chuỗi cho số không bằng tiếng Anh sẽ bị bỏ qua ngay cả khi số lượng bằng 0, bởi vì 0 không khác biệt về mặt ngữ pháp từ 2, hoặc bất kỳ số nào khác ngoại trừ 1 ("sách không", "một cuốn sách", "hai cuốn sách". trên). Đừng bị lừa dối bởi thực tế là, hai âm thanh như nó chỉ có thể áp dụng cho số lượng 2: một ngôn ngữ có thể yêu cầu 2, 12, 102 (và vân vân) đều được đối xử như nhau nhưng khác với số lượng. Dựa vào dịch giả của bạn để biết những gì phân biệt ngôn ngữ của họ thực sự khẳng định.

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