在网站内容运营中,细节往往能显著提升用户体验。其中一个常见但容易被忽略的细节,就是如何根据数量正确显示单词的单复数形式。想象一下,用户看到“您有 1 message”和“您有 2 messages”的显示,是不是比看到“您有 1 messages”或“您有 2 message”要自然流畅得多?安企CMS(AnQiCMS)深谙此道,为我们提供了一个极为便捷的工具来处理这类场景——那就是强大的 pluralize 过滤器。
pluralize 过滤器:智能处理单词单复数
pluralize 过滤器是安企CMS模板引擎中的一个实用功能,它能够根据变量所代表的数值,自动判断并为单词添加或移除表示复数的后缀。这使得在页面上显示计数相关的文本时,能够更加符合语言习惯,尤其是在英文内容展示中,效果尤为显著。
这个过滤器的核心在于它接收一个数值,并根据这个数值(通常是 1 或其他数字)来决定是否添加复数后缀。当数值为 1 时,单词通常保持单数形式;当数值为 0 或大于 1 时,单词则会转换为复数形式。
基础用法:自动添加 ’s’
pluralize 过滤器最简单的用法,是不带任何参数。在这种情况下,它会根据传入的数值,自动决定是否添加默认的复数后缀 ’s’。
例如,如果我们想要显示“item”这个单词的单复数形式:
<p>您购物车中有 {{ item_count }} item{{ item_count|pluralize }}。</p>
当 item_count 的值为 1 时,输出会是:您购物车中有 1 item。
当 item_count 的值为 0、2 或其他非 1 的数字时,输出会是:您购物车中有 0 items。 或 您购物车中有 2 items。
可以看到,当数值为 1 时,pluralize 过滤器会返回一个空字符串,从而保持单词的单数形式;而当数值为 0 或大于 1 时,它则会返回 ’s’,使单词变为复数。
进阶用法:自定义复数后缀
并非所有单词的复数形式都只是简单地加 ’s’。有些单词需要加 ‘es’(如 bus -> buses),有些则需要改变词尾(如 cherry -> cherries)。pluralize 过滤器也考虑到了这些情况,允许我们通过参数来自定义复数后缀。
1. 仅提供复数后缀(适用于加 ‘es’ 等情况)
如果单词的复数形式是在词尾直接添加 ‘es’ 或其他固定后缀,我们可以将这个后缀作为 pluralize 过滤器的第一个参数传入。
例如,对于 walrus(海象)这个词,复数是 walruses:
<p>动物园里有 {{ walrus_count }} walrus{{ walrus_count|pluralize:"es" }}。</p>
当 walrus_count 为 1 时,输出 1 walrus。
当 walrus_count 为 0、2 或其他数字时,输出 0 walruses 或 2 walruses。
2. 提供单数和复数后缀(适用于词尾变化或不规则复数)
对于像 cherry(樱桃)这样的词,单数形式以 ‘y’ 结尾,复数形式则需要将 ‘y’ 变为 ‘ies’。这时,我们可以提供两个参数,用逗号分隔:第一个是单数后缀,第二个是复数后缀。
<p>篮子里有 {{ cherry_count }} cherr{{ cherry_count|pluralize:"y,ies" }}。</p>
当 cherry_count 为 1 时,输出 1 cherry。
当 cherry_count 为 0、2 或其他数字时,输出 0 cherries 或 2 cherries。
注意,这里我们传入的是单词词干 cherr,然后由 pluralize 过滤器根据数量动态拼接 y 或 ies。
wordcount 与 pluralize 的结合应用
文档中提到,pluralize 过滤器如何根据 wordcount 的数值来正确显示单词的单复数形式。这实际上是这两个过滤器协同工作的一个非常实用的场景。
首先,我们来了解 wordcount 过滤器。顾名思义,wordcount 过滤器用于统计一段文本中包含的单词数量,并返回一个整数值。
例如:
{% set article_content = "AnQiCMS provides powerful content management features for various types of websites." %}
{% set total_words = article_content|wordcount %}
<p>您的文章总共有 {{ total_words }} words。</p>
这里 total_words 将会是 11。
现在,如果我们要让“word”这个词的显示也动态适应数量,就可以将 wordcount 的结果作为 pluralize 过滤器的输入:
{% set article_content = "AnQiCMS provides powerful content management features for various types of websites." %}
{% set total_words = article_content|wordcount %}
<p>您的文章总共有 {{ total_words }} word{{ total_words|pluralize }}。</p>
无论 total_words 是 1 还是其他数字,这里的“word”都会自动正确地显示为“word”或“words”。这在创建内容统计、搜索结果提示等功能时,能极大地提升用户界面的专业度和友好性。
总结
安企CMS的 pluralize 过滤器