ruby-on-rails 轨道4中不计数的复数

rdrgkggo  于 2023-03-24  发布在  Ruby
关注(0)|答案(6)|浏览(132)

我正在构建一个博客应用程序。我希望能够多元化的单词“文章”,如果一个以上的“职位”是“发表”。
像这样:可用文章或可用文章
这就是我的....

Available <%=  pluralize @posts.published, "Article" %>:

我试过了

Available <%=  pluralize @posts.published.count, "Article" %>:

这是可行的…但我不想要这个数字。它不应该读可用的5篇文章…它应该没有数字。

e4yzc0pl

e4yzc0pl1#

我发现这个复数形式有一个bug“user”.pluralize(1)=〉“user”“user”.pluralize(2)=〉“users”but“user”.pluralize(0)=〉“users”

a2mppw5e

a2mppw5e2#

这个简单的逻辑怎么样?我猜你想显示文章的数量,如果没有,那么简单地删除<%= @posts.published.count %>

Available <%= @posts.published.count %> 
    <% if @posts.published.count > 1 %>
        Articles
    <% else %>
        Article
    <% end %>

可以使用ternary operator

Available <%= @posts.published.count %> <%= if (@posts.published.count > 1) ? "Articles" : "Article" %>

输出:

=> Available 1 Article   # if there is only one article 
=> Available 2 Articles   # if there is more then 1 articles
nr9pn0ug

nr9pn0ug3#

我自己也一直在寻找这个问题的答案,但对现有的任何一个都不满意。下面是我找到的最整洁的解决方案:

Available <%=  "Article".pluralize(@posts.published.count) %>:

文档在这里。相关位:
返回字符串中单词的复数形式。

If the optional parameter count is specified,
the singular form will be returned if count == 1.
For any other value of count the plural will be returned.

  'post'.pluralize             # => "posts"
  'apple'.pluralize(1)         # => "apple"
  'apple'.pluralize(2)         # => "apples"
axr492tv

axr492tv4#

你可以使用Rails Internationalization (I18n)来完成这个任务。在你的config/data/en.yml中,你的翻译应该是这样的:

en:
  available_articles:
    zero: Available Article
    one: Available Article
    other: Available Articles

在你看来,你应该能够得到这样的翻译:

<%= t(:available_articles, count: @posts.published.count) %>
pxiryf3j

pxiryf3j5#

是的,我就是这么做的我很喜欢:

- if @post.comments.persisted.any?
    h4
      = t(:available_comments, count: @post.comments.count)
    = render @post.comments.persisted
  - else
    p
      | There are no comments for this post.
en:
  available_comments:
    one: "%{count} Comment"
    other: "%{count} Comments"

感谢@Jakob W!

m2xkgtsf

m2xkgtsf6#

您可以使用<%= @posts.published.count > 0 ? "Available Article".pluralize(@posts.published.count) : nil %>:

相关问题