2012-10-05 31 views
5

Tôi đã gặp phải sự cố với chuỗi số lượng (số nhiều).Làm cách nào để các chuỗi số lượng của Nga hoạt động bình thường?

The manual says, tôi có thể cung cấp chuỗi số lượng cụ thể cho từng bản địa hóa và có một số trường hợp phổ biến: "zero", "one", "two", "few", "many" và "other". Tôi không biết nếu tất cả các trường hợp có thể có cho tất cả các ngôn ngữ trên thế giới đã được bảo hiểm; dù sao, nó cũng đủ cho Nga mà tôi đang cố gắng làm cho một bản địa hóa.

Ở Nga, các số từ 2 đến 4 phải được coi là "ít" (quy tắc thực sự phức tạp hơn nhưng tôi chỉ cần số dưới mười).

Tuy nhiên, khi tôi yêu cầu chuỗi số lượng cho 2, hệ thống sẽ lấy chuỗi "khác". Nó không lấy cả chuỗi "hai" lẫn "vài" (tôi đã cung cấp chúng trong tài nguyên của tôi). Nếu tôi loại bỏ các "khác" chuỗi, tôi nhận được ngoại lệ:

android.content.res.Resources$NotFoundException: 
    Plural resource ID #0x7f080000 quantity=2 item=other 

Tôi cố gắng này cả trên giả lập (Android 2.1) và trên một thiết bị thực tế (Android 2.3), hành vi là như nhau sai trong cả hai trường hợp . Rõ ràng, có một sai lầm ở đâu đó - hệ thống không nhận ra số lượng địa phương cụ thể cho ngôn ngữ của tôi. Nó có thể là Android có một số lỗi ở đây?

Trả lời

1

Nhờ Brigham người có chỉ vào số issue nơi vấn đề được giải thích; lời giải thích đó trước tiên đã đưa ra nhiều câu hỏi hơn nhưng bây giờ chúng dường như đã được giải quyết. Thật vậy, các chuỗi số lượng không hoạt động đúng (ít nhất là trước API 11, là Android 3.x), vì vậy bạn phải sử dụng một giải pháp thay thế.

Giải pháp cho API trước phiên bản 11 được đề cập trong comment 15 có chứa liên kết đến project for alternative handling of quantity strings. Dự án đó là một chương trình đơn giản làm những gì hệ thống được cho là phải làm. Nó có thể được chuyển đổi thành thư viện một cách dễ dàng, vì vậy bạn chỉ cần thêm nó vào dự án của bạn, nhập lớp và đi.

3

Tôi tin rằng điều này hiện đang bị hỏng trong Android.

http://code.google.com/p/android/issues/detail?id=8287

Cụ thể, đoạn mã sau vào PluralRules.java cho thấy hầu hết ngôn ngữ chỉ sử dụng one hoặc other chuỗi, nhưng Czech sẽ sử dụng few chuỗi:

static final PluralRules ruleForLocale(Locale locale) { 
    String lang = locale.getLanguage(); 
    if ("cs".equals(lang)) { 
     if (cs == null) cs = new cs(); 
     return cs; 
    } 
    else { 
     if (en == null) en = new en(); 
     return en; 
    } 
} 

private static PluralRules cs; 
private static class cs extends PluralRules { 
    int quantityForNumber(int n) { 
     if (n == 1) { 
      return QUANTITY_ONE; 
     } 
     else if (n >= 2 && n <= 4) { 
      return QUANTITY_FEW; 
     } 
     else { 
      return QUANTITY_OTHER; 
     } 
    } 
} 

private static PluralRules en; 
private static class en extends PluralRules { 
    int quantityForNumber(int n) { 
     if (n == 1) { 
      return QUANTITY_ONE; 
     } 
     else { 
      return QUANTITY_OTHER; 
     } 
    } 
} 
0
  1. Xác định chuỗi số nhiều bạn trong giá trị-ru/strings.xml không giá trị/strings.xml
  2. thiết lập ngôn ngữ điện thoại di động của bạn như Nga (từ thiết lập-> Ngôn ngữ & Input-> Ngôn ngữ -> chọn Nga)

Nếu ngôn ngữ của bạn không phải là Nga nó sẽ mất chuỗi số nhiều từ các giá trị/strings.xml

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