lochmueller / language-detection
适用于TYPO3的现代语言检测中间件。基于PSR-7、PSR-14 & PSR-15。
资助包维护!
lochmueller
paypal.me/lochmueller
Requires
- php: ^8.0
- ext-intl: *
- typo3/cms-core: ^11.5||^12.4
Requires (Dev)
- ext-json: *
- friendsofphp/php-cs-fixer: ^3.11
- geoip2/geoip2: ^2.13
- infection/infection: ^0.26
- phpstan/extension-installer: ^1.2
- phpstan/phpstan: ^1.8
- qossmic/deptrac-shim: ^0.24||^1.0
- rector/rector: ^0.14
- ssch/typo3-rector: ^1.0
- typo3/testing-framework: ^7.0
Suggests
- geoip2/geoip2: Allows to use local MaxMind IP database or webservice
README
目录
为什么?
语言检测应该简单且易于集成,在开发中功能强大!TYPO3 核心不通过客户端信息处理语言检测。EXT:languag_detection 使用 PSR-15/PSR-7 中间件/请求(TYPO3 文档)通过 PSR-14 事件(TYPO3 文档)处理语言检测逻辑。非常灵活!试试看,看看语言检测的未来!
安装
composer require lochmueller/language-detection
配置
使用网站配置模块配置语言检测。只需启用它,它就会工作 :) 网站配置有几个配置选项来处理控制事件。以下截图显示了检测配置的选项。
事件结构
有四个核心 PSR-14 事件控制语言检测。附带的列表解释了不同的事件和默认监听器。事件按执行顺序排列。
CheckLanguageDetectionEvent
检查是否由扩展执行语言检测。您可以为此事件注册监听器,并在事件对象上调用 "disableLanguageDetection" 来禁用语言检测。
默认监听器
DetectUserLanguagesEvent
此事件收集用户信息以获取用户语言。您可以注册自己的检测并通过 "getUserLanguages" 和 "setUserLanguages" 操作数据。
默认监听器
如果使用 "IpLanguage" 监听器,请务必考虑数据隐私!
NegotiateSiteLanguageEvent
此事件计算与用户最佳匹配的页面语言。如果您构建自己的监听器,请使用 "setSelectedLanguage" 事件。如果已选择语言,则默认监听器将被跳过。
默认监听器
BuildResponseEvent
最后一个事件构建中间件响应。您可以覆盖此步骤。您必须使用 "setResponse" 设置响应。
默认监听器
故障排除
在检测过程中缺少或错误地存在语言。为什么?
您是否在隐身模式下检查?浏览器在隐身模式下不会发送所有语言,因此可能会出现“错误结果”。请详细检查 TYPO3 的请求头。否则,也许 DefaultNegotiation 没有为您所需的“最佳匹配语言”选择过程处理?
为什么子页面上的重定向不起作用?
中间件位于中间件堆栈的早期。没有链接和翻译(甚至页面UID)的概念。此外,建议不要在子页面上进行重定向。用户首先通过书签或搜索引擎查找子页面。在两种情况下,用户已经获得了正确的语言。我建议使用hreflang标签,以便搜索引擎获取内容的正确语言。https://developers.google.com/search/docs/advanced/crawling/localized-versions
开发
运行所有代码规范
docker run --rm -it --volume $(pwd):/app prooph/composer:8.0 -d /app code:all
使用PHP 8.0执行测试
docker run --rm -it --volume $(pwd):/app prooph/composer:8.0 -d /app test:unit
带有覆盖率
docker run --rm -it --volume $(pwd):/app cicnavi/dap:80 /app/.Build/bin/phpunit -c /app/phpunit.xml --coverage-text --testdox --coverage-html=/app/var/phpunit
运行突变测试
docker run --rm -it --workdir=/app/ --volume $(pwd):/app cicnavi/dap:80 /app/.Build/bin/infection -c /app/phpunit.xml
贡献
感谢大家为项目做出的巨大贡献!
许可
此包是Treeware。如果您在生产中使用它,那么我们要求您为世界购买一棵树以感谢我们的工作。通过为Treeware森林做出贡献,您将为当地家庭创造就业机会并恢复野生动物栖息地。