hn / intl
此扩展覆盖了 typo3 的日期视图助手,并使用 php-intl 函数进行渲染。
Requires
- php: ^7.1
- ext-json: *
- typo3/cms-core: ~8.7.10 || ~9.5.5
- typo3/cms-fluid: ~8.7.10 || ~9.5.5
- typo3fluid/fluid: ^2.3
Requires (Dev)
- nimut/testing-framework: ^4.1
- phpunit/phpunit: ^6.5
Conflicts
- typo3/cms-composer-installers: <1.5.4
Replaces
- typo3-ter/intl: v0.0.2-alpha
This package is auto-updated.
Last update: 2024-09-16 01:53:23 UTC
README
为 TYPO3 提供更好的日期格式化的即插即用解决方案
此扩展覆盖了默认的日期视图助手,使用 php-intl 进行国际化来渲染日期。
它是如何工作的
您通常像这样使用日期视图助手
<f:format:date date="now" format="d.m.Y" />
这将给出 21.01.2019
,这通常没问题,但此扩展将解析格式字符串,并确定您想要简短日期格式,并且使用当前 sys_language 实际上会给出 Jan 21, 2019
(如果您的语言是 en)。
然而,这可以根据语言完全改变。如果您想看到所有可能的本地化日期,请在您的机器或计划托管的服务器上运行 php -r 'use IntlDateFormatter as I; foreach (resourcebundle_locales("") as $locale) echo "$locale: ".(new I($locale, I::LONG, I::SHORT))->format(new DateTime("now"))."\n";'
。
根据您的格式,猜测将改变,以下是一些示例
格式 | 正常(基于格式) | intl(en) | intl(de) |
---|---|---|---|
d.m.y | 21.01.19 | 6/21/19 | 27.06.19 |
d.m.Y | 21.01.2019 | Jan 21, 2019 | 27.06.2019 |
d. F Y | 21. January 2019 | January 21, 2019 | 21. Januar 2019 |
l d. F Y | Monday, January 21, 2019 | Monday, January 21, 2019 | Montag, 21. Januar 2019 |
H:i | 10:30 | 10:30 AM | 10:30 |
H:i:s | 10:30:00 | 10:30:00 AM | 10:30:00 |
H:i:s T | 10:30:00 UTC | 10:30:00 AM GMT+1 | 10:30:00 MEZ |
H:i:s e | 10:30:00 UTC | 10:30:00 AM Central European Standard Time | 10:30:00 Mitteleuropäische Normalzeit |
d.m.Y H:i | 21.01.2019 10:30 | Jan 21, 2019, 10:30 AM | 21.01.2019, 10:30 |
d. F Y H:i | 21. January 2019 10:30 | January 21, 2019 at 10:30 AM | 21. Januar 2019 um 10:30 |
此表仅列出了示例。基本上,只与您使用的字符有关。
有些情况下,格式很重要。我尝试自动检测这些情况,因此无法读取的格式(如 Ymd
(没有空格))、格式如 c
(ISO 8601)、r
(RFC 2882)和 u
(时间戳)以及部分格式(如仅 Y
(年份))都不会被修改。这意味着此代码仍然会按预期工作
<time datetime="{date -> f:format.date(format: 'c')}">{date -> f:format.date(format: 'd. F Y H:i')}</time>
如果您仍然需要禁用这种魔法行为,您有 3 种选择
- 您可以通过将
intl="0"
传递给视图助手来禁用此魔法:<f:format:date date="now" format="d.m.Y" intl="0" />
这有一个缺点,那就是您现在依赖于此扩展,因为属性intl
通常不存在。然而,这是一种在特定情况下调整它的好方法。 - 您可以在 intl 扩展配置中禁用它(键:disableInExtensions)。如果集成一个扩展,出于某种原因需要按预期运行或已内置适当的语言支持,请使用此方法。
- 您可以完全禁用视图助手的覆盖。使用 intl 扩展配置并检查
disableOverride
。您仍然可以使用此扩展,但您必须显式导入命名空间并使用视图助手。
为什么不单独的视图助手?
- 您不需要学习新的视图助手,您会自动使用更好的日期格式。
- 现有扩展将自动改进,无需额外工作。
- 如果您考虑到使用此扩展:对此扩展没有硬性要求,并且可以无额外努力回退到默认渲染。
运行测试
本项目包含一些基本测试,以确保在composer.json中描述的所有typo3版本中都能正常工作。这些测试由bitbucket运行,并在bitbucket-pipelines.yml
中定义。
要本地运行它们,本项目提供了一些composer脚本。只需克隆项目,运行composer install
,然后运行composer db:start
,等待几秒钟,然后运行composer test
。您还可以运行composer test -- --filter TestCase
来运行特定的文本类/方法/数据集。
以下是可用命令列表
composer db:start
将使用docker命令启动数据库。如果您已有可用数据库,则无需使用它,但需要定义typo3Database*
变量。composer db:stop
不出所料地再次停止数据库...并删除它。composer test
将运行所有可用测试。如果您的第一次运行失败,则可能需要运行cc
。composer test:unit
将仅运行单元测试。composer test:functional
将仅运行功能测试。composer cc
将删除一些临时文件。如果您的功能测试没有明显原因而失败,请尝试此方法。