TYPO3 tx_news列表视图:无法自定义月份名称的技术求助
如何修改TYPO3 tx_news中的自定义月份名称
环境配置
- TYPO3 12.4.11
- News 11.4.1
- PHP 8.2.15
问题描述
需要将新闻日期中的月份名称(如January)改为自定义名称Jannewaris,使日期显示为01 Jannewaris 2024。已尝试以下操作但均无效:
- 修改
typo3conf/l10n/da/news/Resources/Private/Language/da.locallang.xlf中的month.01翻译节点 - 在TS Setup中添加
plugin.tx_news._LOCAL_LANG.da.month.01 = Jannewaris - 删除上述语言文件后,前端仍显示丹麦语标准月份名称
当前TS配置plugin.tx_news._LOCAL_LANG.da.dateFormat = %d %B -%Y.可正常修改日期格式,但无法改变月份拼写;模板中使用f:format.date调用该日期格式。
核心原因
当使用f:format.date的%B格式符时,月份名称并非来自tx_news的语言文件,而是由**PHP的系统区域设置(locale)**提供。这就是为什么修改tx_news语言文件无效,删除文件后仍显示标准丹麦语月份——PHP的da_DK locale已内置默认月份名称。
tx_news自带的month.xx翻译键仅用于插件内部特定场景(如归档菜单的月份选项),不影响f:format.date的%B输出。
解决方案
方法1:改用自定义翻译键(推荐)
放弃%B格式符,改为通过翻译系统调用自定义月份名称,步骤如下:
- 修改TS中的日期格式定义:
plugin.tx_news._LOCAL_LANG.da.dateFormat = %d %m %Y
(用%m获取两位数字的月份,后续用于匹配翻译键)
- 在TS Setup中添加自定义月份翻译:
plugin.tx_news._LOCAL_LANG.da.month.01 = Jannewaris plugin.tx_news._LOCAL_LANG.da.month.02 = Febnewaris # 依次添加12个月份的自定义名称
- 修改模板
Partials/List/list.html中的日期渲染逻辑,拆分日期并调用翻译:
<time itemprop="datePublished" class="event-fa-time" datetime="{f:format.date(date:newsItem.datetime, format:'Y-m-d')}"> <f:format.date date="{newsItem.datetime}" format="d" /> <f:translate key="month.{f:format.date(date:newsItem.datetime, format:'m')}" /> <f:format.date date="{newsItem.datetime}" format="Y" /> </time>
(如需保留原格式中的分隔符,可自行调整拼接方式)
方法2:自定义日期格式化ViewHelper(进阶)
如果希望保留类似%B的简洁调用方式,可以自定义一个ViewHelper,在内部替换月份名称为自定义翻译。核心逻辑:
- 获取日期的月份数字
- 调用tx_news的自定义月份翻译
- 拼接成目标日期格式
方法3:修改PHP locale(不推荐)
若坚持使用%B,需修改PHP的da_DK locale对应的月份名称,但此操作会影响整个系统的日期显示,且需要服务器权限修改locale文件,不建议在共享主机环境使用。
内容的提问来源于stack exchange,提问作者Tony
相关产品推荐
相关产品推荐

