mjahn / multilingual-country-list
查找 ISO 3166 国家名称和代码的对象
Requires
- php: >=5.6.0
- illuminate/support: >=5
Requires (Dev)
- mockery/mockery: ^0.9.4
- phpunit/phpunit: ~5.0
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, // ... ],
还有一个可选的facade可用,可以通过在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参数简化了反向查找,例如对于识别值但不支持键的类型提示组件,需要稍后获取键。
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": "中国香港特别行政区"} ]
调整
因此,你有一份国家名单,但它并不完全符合你的需求。由于查找和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 许可证。