赵克雷斯 / 多语言国家列表
ISO 3166 国家名称和代码的查找对象
Requires
- php: >=7.4
- illuminate/support: ~5|~6|~7|~8|~9|~10|~11
Requires (Dev)
- mockery/mockery: ^1
- phpunit/phpunit: >=9 <10
README
介绍
我已经数不清有多少次仔细编辑了250多个国家的列表,以创建表单上的选择字段所需的数据——这仅仅是一个语言的情况。这个围绕许多语言中行业维护的国家名称列表的Laravel包装,将这项繁琐的任务和列表的持续维护放入历史的垃圾箱。
该软件包通过简单的API提供了对大量语言和区域设置中国家名称的便捷访问,以及它们的ISO-3166 alpha-2双字母国家代码。
数据可以返回为查找数组或键值对数组,其中键和值的标签可以根据使用该软件的软件需求进行设置。
安装
在命令行中运行
composer require petercoles/multilingual-country-list
如果你使用Laravel 5.5或更高版本(且未禁用包发现),你已完工。继续阅读下方的使用部分。
如果你使用较老版本的Laravel,则将服务提供者添加到你的 config/app.php 文件中的 providers 条目。
'providers' => [ // ... PeterColes\Countries\CountriesServiceProvider::class, // ... ],
还有一个可选的外观可以通过将以下内容添加到 config/app.php 文件中的 aliases 数组来启用。
'Countries' => PeterColes\Countries\CountriesFacade::class,
使用方法
安装完成后,该软件包公开了两个API方法:lookup() 和 keyValue(),每个方法都返回一个按使用的语言中的国家名称排序的列表。
查找
lookup
方法接受两个可选参数:$locale(默认 'en')和 $flip(默认 false),并返回一个集合。如果作为响应返回,该集合将被Laravel转换为JSON对象,或者如果需要,可以使用 toArray() 方法转换为数组。
区域可以表示为语言代码,例如 'fr',或完整的区域代码,例如 zh_CN。
查找示例
默认是英语。
Countries::lookup(); // returns { "AF": "Afghanistan", ... "ZW": "Zimbabwe" }
flip 参数便于反向查找,例如对于识别值但不支持键的typahead组件,需要稍后获取键。
Countries::lookup('es', true); // returns { "Afganistán": "AF", ... "Zimbabue": "ZW" }
支持包括区域设置在内的非拉丁字符集
Countries::lookup('zh_CN'); // returns { "AL": "阿尔巴尼亚", ... "HK": "中国香港特别行政区" }
keyValue
keyValue
方法接受三个可选参数:$locale(默认 'en'),$key(默认 'key')和 $value(默认 'value')。
键值示例
默认仍为英语。
Countries::keyValue(); // returns [ {"key": "AF", "value": "Afghanistan"}, ... {"key": "ZW", "value": "Zimbabwe"} ]
如果你需要一个具有自定义索引的键值列表,则可以使用 $key 和 $value 参数来重新定义它们。例如,如果你正在使用一个用于生成选择字段的javascript组件,并且该组件对其接收到的数据中使用的索引有期望。
Countries::keyValue('zh', 'label', 'text'); // returns [ {"label": "AL", "text": "阿尔巴尼亚"}, ... {"label": "HK", "text": "中国香港特别行政区"} ]
国家名称
如果你只想获取特定区域的国家的名称,则将 $isoCode 和 $locale(默认 'en')传递给 countryName 方法将返回所需文本。
国家名称示例
Countries::countryName('BE', 'fr') // returns 'Belgique'
调整
所以,你有一个国家列表,但它并不完全符合你的需求。由于查找和 keyValue 方法返回Laravel集合,调整结果非常简单。
过滤
这些列表所使用的数据包括“欧元区”,尽管一些政治家的愿望,但这并不是一个真正的国家。让我们去掉它。
Countries::lookup()->reject(function($country, $key) { return $key == 'EZ'; });
还有一些条目可能被认为是其他国家的一部分。不涉及政治问题,我们也去除加那利群岛(西班牙)和瓜德罗普(法国)。
Countries::lookup()->reject(function($country, $key) { return in_array($key, [ 'EZ', 'IC', 'GP' ]); });
修改
此外,我们知道英国的国际代码是“GB”,但我们的支付网关期望的是“UK”。所以,让我们将其更改为。
Countries::lookup()->mapWithKeys(function($country, $key) { return $key == 'GB' ? [ 'UK' => $country ] : [ $key => $country ]; });
添加
认可的国家数量在增长,但并不总是像地面上的变化那样快,所以,不对政治的是非进行评论,让我们添加一个新的条目。
Countries::lookup()->put('CT', 'Catalonia')->sort();
这里有一些警告
- 请检查代码是否已经存在。
- 记得在添加后对列表进行排序。
- 别忘了继续检查列表,以便在它变得官方时可以删除你的添加。
问题
本软件包是为了满足特定需求而开发的,然后推广到更广泛的使用。如果您有当前未满足的使用案例,或看到似乎不正常工作的内容,请在github仓库中提出问题。
贡献
欢迎贡献,但通常需要测试。我建议首先提出问题,以便在开发开始之前讨论提出的更改或增强功能。
许可证
本软件包根据MIT许可证授权。