marcnewton / laravel-alsl
检测用户在Accept-Language请求头中的语言偏好,从其语言偏好的顺序;尝试找到并设置在Laravel的resources/lang目录中可用的匹配区域设置。
Requires
- php: >=7.4|^8.0
This package is auto-updated.
Last update: 2024-09-19 02:06:08 UTC
README
添加对il8n检测的支持。
迭代用户的语言偏好,这些偏好是在Accept-Language
请求头中设置的,使用用户网络浏览器中的语言偏好顺序;尝试找到在Laravel resources/lang
目录中可用的匹配区域设置。
- 尝试回退到大陆语言,尊重用户的首选。
- 如果设置了,则从认证用户
User::locale
恢复保存的用户偏好。 - 否则回退到Laravel配置
app.locale
或en
(英语)。
安装
composer require marcnewton/laravel-alsl
使用信息
app()->getLocale()
将返回用户的网络浏览器语言偏好的值或认证用户locale
属性(如果存在),只要在resources/lang
目录中找到匹配的ISO即可,否则将使用app.locale
配置值。
语言变体
为了支持变体,在resources/lang
中创建语言翻译文件夹。
例如,为了支持英语(美国)和英语(英国);除了创建en
(英语)外,还创建以下目录:en-US
和en-GB
。
检测如何工作。
网络浏览器在安装时默认设置为系统用户的语言偏好,然后用户可以在浏览器中进一步配置回退偏好,这些信息通过名为Accept-Language的头部发送,这是一个广泛支持的规范,通常被忽视。
处理该头部并检测与Laravel语言目录的最佳匹配,并使用Laravel内置的区域功能设置。
以下是一个示例,说明了一个偏好为墨西哥西班牙语(西班牙语墨西哥人 es-MX)且次要回退为美国西班牙语(美国西班牙语 es-US)的个人的一些不同场景。
如果用户只指定了西班牙语,那么这将匹配es
,但如果服务器只有en
,则将显示en
。
然而,如果用户首先指定了西班牙语的偏好,然后是一个西班牙语变体,es
将首先匹配,而不是变体的其他选择,除非服务器没有es
语言文件夹,否则变体文件夹将匹配,然后回退到配置默认值。
下划线从Accept-Language
头部转换为短横线,以与PHP和JavaScript本地化方法的用法保持一致。
部署
当在resources/lang
中添加或删除语言支持时,您应确保运行php artisan cache:forget resources.languages
以清除缓存。