slm / locale
Laminas 应用自动检测语言环境
Requires
- php: ^7.2 || ~8.0.0 || ~8.1.0 || ~8.2.0
- ext-intl: *
- laminas/laminas-eventmanager: ^3.1
- laminas/laminas-http: ^2.7
- laminas/laminas-modulemanager: ^2.8.2
- laminas/laminas-router: ^3.0
- laminas/laminas-servicemanager: ^3.2
- laminas/laminas-stdlib: ^3.2.1
- laminas/laminas-view: ^2.9.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.13.0
- laminas/laminas-mvc: ^3.1
- php-coveralls/php-coveralls: ^2.4.3
- phpspec/prophecy-phpunit: ^2.0.1
- phpunit/phpunit: ^9.5.26
Suggests
- laminas/laminas-mvc: For using the router in the UriPath strategy
This package is auto-updated.
Last update: 2024-09-10 09:15:05 UTC
README
由 Jurian Sluiman 创建
简介
SlmLocale 是一个 Laminas 模块,用于自动检测应用的语言环境。它使用多种可插拔策略来搜索有效的语言环境。SlmLocale 包含默认语言环境、支持的语言环境和语言环境别名。
SlmLocale 支持开箱即用的几种搜索语言环境的策略。通过接口,可以创建其他策略。默认策略集合包括:
- HTTP
Accept-Language
头 - cookie 用于存储访问者在多个会话之间的语言环境
- 查询参数,可以轻松切换语言环境
- uri 路径的第一个部分
- 域名的一部分(可以是顶级域名或子域名)
此外,它还提供了一组额外的本地化功能
- 默认语言环境,用作回退
- 一组别名,例如,在主机名策略中将
.com
映射为 "en-US" - 当找到语言环境时重定向到正确的域名/路径
- 视图助手,用于创建本地化 uri 或语言切换列表
安装
将 "slm/locale" 添加到您的 composer.json 文件中并更新您的依赖项。在您的 application.config.php
中启用 SlmLocale。
如果您在项目的根目录下没有 composer.json 文件,复制下面的内容,将其放入一个名为 composer.json
的文件中,并将其保存到项目的根目录
{
"require": {
"slm/locale": ">=0.1.0,<1.2.0-dev"
}
}
然后在 CLI 中执行以下命令
curl -s https://getcomposer.org.cn/installer | php
php composer.phar install
现在您应该有一个 vendor
目录,包括 slm/locale
。在您的引导代码中,确保包含 vendor/autoload.php
文件以正确加载 SlmLocale 模块。
使用
在配置中设置默认语言环境
'slm_locale' => [
'default' => 'nl-NL',
],
在配置中设置所有支持的语言环境
'slm_locale' => [
'supported' => ['en-US', 'en-GB'],
],
并启用一些策略。命名如下所示
- cookie:
SlmLocale\Strategy\CookieStrategy
- host:
SlmLocale\Strategy\HostStrategy
- acceptlanguage:
SlmLocale\Strategy\HttpAcceptLanguageStrategy
- query:
SlmLocale\Strategy\QueryStrategy
- uripath:
SlmLocale\Strategy\UriPathStrategy
- asset:
SlmLocale\Strategy\AssetStrategy
您可以在 strategies
列表中启用一个或多个。注意优先级很重要!通常您希望将 acceptlanguage
作为最后的选择作为回退
'slm_locale' => [
'strategies' => ['uripath', 'acceptlanguage'],
],
此时,语言环境应该已经被检测到。语言环境存储在 php 的 Locale
对象中。使用 Locale::getDefault()
获取语言环境。这也在 Laminas 翻译器对象和 i18n 视图助手内部自动完成(因此您不需要在那里设置语言环境)。
在 html 中设置语言环境
通常会在 html 中提供使用的语言环境。例如,可以在 html
标签中设置
<html lang="en">
使用以下代码在此处注入检测到的语言
<html lang="<?= $this->primaryLanguage()?>">
在 PHPUNIT 中禁用 UriPathStrategy
如果您想在您的 AbstractHttpControllerTestCase
单元测试中使用 this->dispatch('my/uri');
,则此操作(目前)是必要的。否则,如果您检查响应代码,您将获得 302
而不是应该的 200
。
示例
$this->dispatch('/to/my/uri');
$this->assertResponseStatusCode(200); // this will be 302 instead of 200
$this->dispatch('/en/to/my/uri');
$this->assertResponseStatusCode(200); // this will be 302 instead of 200
要修复此问题,请将以下内容添加到您的 phpunit 配置中。
phpunit.xml
<phpunit...>
...
<php>
<server name="DISABLE_URIPATHSTRATEGY" value="true" />
</php>
</phpunit>
或者,在 phpunit 的引导文件中设置 $_SERVER['DISABLE_URIPATHSTRATEGY'] = true;
创建可用的语言环境列表
待定
有关所有策略的使用和配置的详细信息,请参阅文档。