twig - 如何在 Twig 中定义“如果最后 2 位数字不是......”
问题描述
我正在尝试根据评论的数量以正确的俄语形式显示“评论”一词。
{% set numberOfComments = 11 %}
{{ numberOfComments }} {% if numberOfComments|last == 1 and not (numberOfComments ends with 11) %}комментарий{% elseif numberOfComments|last > 1 and numberOfComments|last < 5 %}комментария{% else %}комментариев{% endif %}
但它忽略and not (numberOfComments ends with 11)
并显示“комментарий”而不是“комментариев”,即使评论数是 11/111/等。我能做些什么呢?
解决方案
正如评论中所建议的那样,我使用了正则表达式。所以我想出了这个:
{{ numberOfComments }} {% if numberOfComments|last == 1 and not (numberOfComments matches '{11$}') %}комментарий{% elseif numberOfComments|last > 1 and numberOfComments|last < 5 and not (numberOfComments matches '{1[2-4]$}') %}комментария{% else %}комментариев{% endif %}
正则表达式{11$}
选择以 11 结尾的任何给定字符串。{}
只是为了在 Twig 中定义正则表达式。
UPD:为问题中缺少但实际上需要的以 12-14 结尾的数字添加了缺失逻辑。
推荐阅读
- postgresql - 如何在列中创建带有切片的表
- r - 跨多个列运行函数
- python - 读取公共 json 文件时出现 Python FileNotFoundError
- javascript - 如何使用触发函数来控制显示或隐藏div
- javascript - React 组件未显示在浏览器上,屏幕为空
- r - 正则表达式提取数字和尾随字母或空格
- node.js - 数据库主键 dynamoDB 或其他
- c++ - 编码管道“|” 在 C++ 中:为什么在管道后进入 getline 的空行?
- c++ - C++ 析构函数返回类型
- html - Flexbox:填充单击的行并在下方/上方包裹元素以填充空间