weijiajia / country-accept-language
Provides Accept-Language header strings based on country codes for Laravel applications.
dev-main
2025-05-12 10:14 UTC
Requires
- php: ^8.0
- illuminate/support: ^8.0|^9.0|^10.0|^11.0|^12.0
Requires (Dev)
- laravel/pint: ^1.0
- orchestra/testbench: ^6.0|^7.0|^8.0
- pestphp/pest: ^2.0
- pestphp/pest-plugin-laravel: ^2.0
- pestphp/pest-plugin-mock: ^2.0
This package is auto-updated.
Last update: 2025-06-12 10:20:16 UTC
README
根据国家代码提供 Accept-Language 头部字符串的 Laravel 包。
功能特点
- 根据国家代码(ISO 3166-1 alpha-2)获取 Accept-Language 头部字符串
- 支持 200+ 个国家和地区
- 解析 Accept-Language 字符串为结构化数组
- 完全支持 Laravel 框架
- 提供方便的 Facade 接口
安装
通过 Composer 安装:
composer require weijiajia/country-accept-language
Laravel 集成
该包支持 Laravel 的包自动发现功能,无需手动注册服务提供者。
自定义数据
默认情况下,包会使用自带的国家语言映射数据。如果您希望自定义或修改这些数据:
-
发布数据文件: 运行以下命令,将包内的数据文件
country-language.php
复制到您应用的resources/data/
目录下:php artisan vendor:publish --provider="Weijiajia\CountryAcceptLanguage\CountryAcceptLanguageServiceProvider" --tag="data" # 或者如果服务提供者已自动发现,可以简化为: # php artisan vendor:publish --tag="data"
发布后,您可以在
resources/data/country-language.php
文件中修改映射关系。 -
配置数据文件路径(重要): 仅仅发布数据文件并不会让应用自动使用它。您需要告诉应用去加载这个新发布的文件。为此,您需要在 Laravel 应用的配置文件中(例如,您可以创建一个
config/country-accept-language.php
文件)指定data_file
的路径:// config/country-accept-language.php <?php return [ 'data_file' => resource_path('data/country-language.php'), ];
如果未进行此配置,包将继续使用其内部的默认数据文件。
使用方法
在 Laravel 中使用
使用 Facade:
use Weijiajia\CountryAcceptLanguage\Facades\CountryAcceptLanguage; use Weijiajia\CountryAcceptLanguage\Exception\CountryNotFoundException; try { // 获取美国的 Accept-Language 头部 $headerUS = CountryAcceptLanguage::getAcceptLanguageHeader('US'); // 返回: "en-US,en;q=0.9" // 获取中国的 Accept-Language 头部 $headerCN = CountryAcceptLanguage::getAcceptLanguageHeader('CN'); // 返回: "zh-CN,zh;q=0.9,en;q=0.8" // 获取一个不存在的国家代码会抛出异常 // $headerInvalid = CountryAcceptLanguage::getAcceptLanguageHeader('XX'); // 获取所有支持的国家代码 (基于加载的数据文件) $countries = CountryAcceptLanguage::getSupportedCountries(); // 解析为结构化数组 $languages = CountryAcceptLanguage::getPreferredLanguages('CN'); /* 返回: [ [ 'locale' => 'zh-CN', 'language' => 'zh', 'region' => 'CN', 'quality' => 1.0, ], [ 'locale' => 'zh', 'language' => 'zh', 'region' => null, 'quality' => 0.9, ], [ 'locale' => 'en', 'language' => 'en', 'region' => null, 'quality' => 0.8, ], ] */ } catch (CountryNotFoundException $e) { // 处理国家代码未找到的情况 echo "Error: " . $e->getMessage(); }
通过依赖注入:
use Weijiajia\CountryAcceptLanguage\CountryAcceptLanguage; use Weijiajia\CountryAcceptLanguage\DataRepository; // 默认使用包内数据 // $service = new CountryAcceptLanguage(new DataRepository()); // 使用指定路径的数据文件 $customDataPath = '/path/to/your/custom-country-language.php'; $service = new CountryAcceptLanguage(new DataRepository($customDataPath)); $header = $service->getAcceptLanguageHeader('US');
在非 Laravel 项目中使用
use Weijiajia\CountryAcceptLanguage\CountryAcceptLanguage; use Weijiajia\CountryAcceptLanguage\DataRepository; $service = new CountryAcceptLanguage(new DataRepository()); $header = $service->getAcceptLanguageHeader('US');
测试
composer test
贡献
欢迎贡献!请查看 CONTRIBUTING.md 了解详情。
许可证
MIT 许可证 (MIT)。请查看 LICENSE 了解详情。