Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String rails4//当计数为0时,进行复数化_String_Ruby On Rails 4_Pluralize - Fatal编程技术网

String rails4//当计数为0时,进行复数化

String rails4//当计数为0时,进行复数化,string,ruby-on-rails-4,pluralize,String,Ruby On Rails 4,Pluralize,我有一个关于复数化的大问题:当0时,它确实使单词复数化 pluralize(@posts.size,"post") 如果@posts.size等于0: 0 posts 如果@posts.size等于1: 1 post 如果@posts.size等于或大于2: n posts 由于默认情况下0时不应添加s,因此我丢失了。有人看到这里出了什么问题吗?任何不是1的数字都被认为是复数。而不是说: You have 0 posts. 正确的英语句子应该是: You do not have any

我有一个关于复数化的大问题:当0时,它确实使单词复数化

pluralize(@posts.size,"post")
如果@posts.size等于0:

0 posts
如果@posts.size等于1:

1 post
如果@posts.size等于或大于2:

n posts

由于默认情况下0时不应添加s,因此我丢失了。有人看到这里出了什么问题吗?

任何不是1的数字都被认为是复数。而不是说:

You have 0 posts.
正确的英语句子应该是:

You do not have any posts.
看一看,然后

编辑:你的请求相当大,可能任何人(至少对我来说)都不可能在一篇文章中简明扼要地表达出来。我建议您通读国际化(通俗地称为i18n)文档

基本上,有两件事,
翻译
屈折因子

屈折因子是定义字符串或模式如何替换为单数或复数或是否不可数的规则。例如,
is
is
are
的复数定义为屈折符

I18n帮助您为字符串定义区域设置指定的人性化文本。如果您在Rails项目中的
config
文件夹中看到,您将看到一个名为
locales
的文件夹,其中包含每个locale的单个
YAML
文件。这种针对地区的人性化文本称为翻译

pluralize
是一个在3个位置定义的函数:

  • 内拐点模块
  • 作为
    字符串
    的实例方法
  • 作为
    ActionView
    中的助手方法
  • 通常在Rails中,我们调用helper方法,它可以调用String的方法,String的方法反过来调用definctor的方法

    您尝试在
    config/initializers/filename.rb中添加以下代码,然后再次尝试运行:

    module ActionView
      module Helpers
        module TextHelper
          def pluralize(count, singular, plural = nil)
            "#{count || 0} " + ([0, 1, '0', '1'].include?(count) ? singular : (plural || singular.pluralize))
          end
        end
      end
    end
    
    这将返回
    0 post
    ,但仅针对默认语言环境
    en
    。如果希望对特定的语言环境执行此操作,请使用选定的语言环境调用String pluralize函数,并将其作为3参数传递给上述函数。例如,对于
    fr
    locale,您可以尝试以下操作:

    pluralize 0, "post", "post".pluralize(:fr) # => will return for fr locale
    
    在SO提出更多问题,让专家们更详细地解释


    希望这对您有所帮助。

    我使用另一种方法:

    我认为:

    =t('counts.offers',count:project.nb\u offers)
    #t()是I18n.translate的快捷方式
    
    第一个参数是文件区域设置文件中的路径,第二个参数是您想要计算的内容

    然后,在您的config/locales/xx.yml(在我的例子中是fr)中:

    fr:
    计数:
    提供:
    零时零分
    一:一
    其他:“%{count}offres”
    

    因此,我不必创建新的配置文件,只需使用区域设置即可。但我是法国人,零时我们不会多元化。如何处理它?你想只为法语地区做还是为所有地区做,包括英语;如果你能教我如何处理这一切;我想那太完美了!谢谢你的解释!去看看further@Ben你并不孤单,作为一个非英语母语的人,我也这么认为,一开始这很烦人,但现在我已经克服了。