Bạn có thể thêm một tùy chỉnh cho nó. Theo mặc định, Rails sẽ thêm inflections.rb
vào config/initializers
. Ở đó bạn có thể thêm:
ActiveSupport::Inflector.inflections do |inflect|
inflect.irregular "is", "are"
end
Sau đó, bạn có thể sử dụng pluralize(@total_users, "is")
để trả lại đang/đang sử dụng quy tắc tương tự như người dùng/người dùng.
EDIT: Bạn đã làm rõ câu hỏi về cách đa định hóa câu. Điều này là khó khăn hơn nhiều để làm chung, nhưng nếu bạn muốn làm điều đó, bạn sẽ phải dive into NLP.
Như nhận xét gợi ý, bạn có thể làm điều gì đó với i18n nếu bạn chỉ muốn làm điều đó với một vài câu, bạn có thể xây dựng một cái gì đó như thế này:
def pluralize_sentence(count, i18n_id, plural_i18n_id = nil)
if count == 1
I18n.t(i18n_id, :count => count)
else
I18n.t(plural_i18n_id || (i18n_id + "_plural"), :count => count)
end
end
pluralize_sentence(@total_users, "user_count")
Và trong config/locales/en.yml
:
en:
user_count: "There is %{count} user."
user_count_plural: "There are %{count} users."
Nguồn
2012-01-09 15:01:58
Trên thực tế, tôi nghĩ rằng câu hỏi là thêm về cách suy số lượng người dùng, ví dụ: một cái gì đó mà có thể trông giống như một sự pha trộn giữa i18n và pluralisation ví dụ 'số nhiều (@total_users," có $ 1 người dùng ")' ... rõ ràng sẽ thất bại thảm hại :) – Pierre
Trong [Phát triển nhanh với Rails, Ấn bản thứ tư] (http://pragprog.com/book/rails4/agile- web-development-with-rails), trang 217, họ sử dụng 'one' và' other' trong tập tin YAML để thực hiện các thông báo lỗi. Điều này được sử dụng mà không cần thêm bất kỳ mã nào để hiển thị các lỗi trang, do đó nó sẽ hoạt động trực tiếp với 't()'. – l0b0
Một vấn đề tôi gặp phải với giải pháp này là nếu bạn có một mô hình kết thúc bằng 'là' (trong trường hợp của tôi ExtendedCare), tất cả các ngắt mã của bạn – Doug