cyberionsys / laravel-countries
包含所有配置翻译的ISO国家信息的数据库
v2.0.0
2023-08-10 21:24 UTC
Requires
- php: ^8.1
- illuminate/contracts: ^10.0
- spatie/laravel-package-tools: ^1.16.0
- spatie/laravel-translatable: ^6.5
- umpirsky/currency-list: ^1.1
- umpirsky/language-list: ^1.1
Requires (Dev)
- laravel/pint: ^1.10
- nunomaduro/collision: ^7.0
- nunomaduro/larastan: ^2.6
- orchestra/testbench: ^8.6
- pestphp/pest: ^2.13
- pestphp/pest-plugin-laravel: ^2.2
- phpstan/extension-installer: ^1.2
- phpstan/phpstan-deprecation-rules: ^1.1
- phpstan/phpstan-phpunit: ^1.3
- phpunit/phpunit: ^10.0
- spatie/laravel-ray: ^1.32
This package is auto-updated.
Last update: 2024-09-08 11:17:40 UTC
README
本包提供可用的应用程序模型,并将从各种来源的ISO数据填充到数据库中。此包适用于多语言应用程序,并支持几乎任何区域的Country/Language/Currency名称。
包含的数据集
- 国家:ISO 3166 alpha 2(包括名称、首都、经纬度、TLD、电话区号、地区、人口、基尼系数、面积)
- 语言:ISO 639-1(包括名称、语言家族、维基链接)
- 货币:ISO 4217(包括名称、符号、小数位数、舍入)
与其他包不同的是,此包还包括相关数据关系,例如
// Official languages spoken in Luxembourg ('LU') Country::find('LU')->languages; // Currencies used in Ghana ('GH') Country::find('GH')->currencies; // Countries that have Spanish ('es') as one of their official languages Language::find('es')->countries; // Countries that use the Euro ('EUR') as currency Currency::find('EUR')->countries;
安装
您可以通过composer安装此包
composer require cyberionsys/laravel-countries
此包的最新版本需要PHP版本8.1或更高。
迁移
您可以选择使用以下命令发布数据库迁移
php artisan vendor:publish --provider="Cyberionsys\Countries\CountriesServiceProvider" --tag="countries-migrations"
默认情况下,此数据库包含所有国家/语言/货币名称翻译成英语、德语、法语和西班牙语。如果您想编译包含其他语言的数据库,请参阅此处说明。
配置
您可以选择使用以下命令发布配置文件
php artisan vendor:publish --provider="Cyberionsys\Countries\CountriesServiceProvider" --tag="countries-config"
在配置中,您可以定义要在数据库中存储的国家/语言/货币名称的翻译。
这是已发布配置文件的内容
[ // Supported locales for names (countries, languages, currencies) 'locales' => [ 'en', 'de', 'fr', 'es', ], ];
警告 这将重新创建您的整个数据库。在运行之前,请采取适当的预防措施
php artisan migrate:refresh
用法
国家模型
Country::find('AD'); Cyberionsys\Countries\Models\Country { id: "AD", alpha3: "AND", name: "{"en":"Andorra","de":"Andorra","fr":"Andorre","es":"Andorra"}", native_name: "Andorra", capital: "Andorra la Vella", top_level_domain: ".ad", calling_code: "376", region: "Europe", subregion: "Southern Europe", population: 78014, lat: 42.5, lon: 1.5, demonym: "Andorran", area: 468, }
语言模型
Language::find('pt'); Cyberionsys\Countries\Models\Language { id: "pt", iso639_2: "por", iso639_2b: null, name: "{"en":"Portuguese","de":"Portugiesisch","fr":"portugais","es":"portugu\u00e9s"}", native_name: "Português", family: "Indo-European", wiki_url: "https://en.wikipedia.org/wiki/Portuguese_language", }
货币模型
Currency::find('COP'); Cyberionsys\Countries\Models\Currency { id: "COP", name: "{"en":"Colombian Peso","de":"Kolumbianischer Peso","fr":"peso colombien","es":"peso colombiano"}", name_plural: "Colombian pesos", symbol: "CO$", symbol_native: "$", decimal_digits: 0, rounding: 0, }
查询关系
所有模型都预定义了可以查询的多对多关系
// Retrieve languages that are spoken in Luxembourg Country::find('LU')->languages; Illuminate\Database\Eloquent\Collection { all: [ Cyberionsys\Countries\Models\Language { id: "de", iso639_2: "deu", iso639_2b: "ger", name: "{"en":"German","de":"Deutsch","fr":"allemand","es":"alem\u00e1n"}", native_name: "Deutsch", family: "Indo-European", wiki_url: "https://en.wikipedia.org/wiki/German_language", }, Cyberionsys\Countries\Models\Language { id: "fr", iso639_2: "fra", iso639_2b: "fre", name: "{"en":"French","de":"Franz\u00f6sisch","fr":"fran\u00e7ais","es":"franc\u00e9s"}", native_name: "français, langue française", family: "Indo-European", wiki_url: "https://en.wikipedia.org/wiki/French_language", }, Cyberionsys\Countries\Models\Language { id: "lb", iso639_2: "ltz", iso639_2b: null, name: "{"en":"Luxembourgish","de":"Luxemburgisch","fr":"luxembourgeois","es":"luxemburgu\u00e9s"}", native_name: "Lëtzebuergesch", family: "Indo-European", wiki_url: "https://en.wikipedia.org/wiki/Luxembourgish_language", }, ], }
// Retrieve all countries that use the Euro (EUR) as currency. Currency::find('EUR')->countries->pluck('name'); Illuminate\Support\Collection { all: [ "Andorra", "Austria", "Åland Islands", "Belgium", "St. Barthélemy", "Cyprus", "Germany", "Estonia", "Spain", "Finland", "France", "French Guiana", "Guadeloupe", "Greece", "Ireland", "Italy", "Lithuania", "Luxembourg", "Latvia", "Monaco", "Montenegro", "St. Martin", "Martinique", "Malta", "Netherlands", "St. Pierre & Miquelon", "Portugal", "Réunion", "Slovenia", "Slovakia", "San Marino", "French Southern Territories", "Vatican City", "Republic of Kosovo", "Mayotte", "Zimbabwe", ], }
本地化名称
每个包模型(国家、语言、货币)都有一个->name
属性,它将使用spatie/laravel-translatable包在应用程序的区域设置中显示。默认配置将迁移en
、de
、fr
和es
的本地化名称。这可以在配置中调整。配置中的app.locale
和app.fallback_locale
将自动包含。
// Set the app locale app()->setLocale('fr'); // Retrieve the top 10 countries in Africa (by population): Cyberionsys\Countries\Models\Country::where('region', 'Africa')->orderByDesc('population')->limit(10)->pluck('name'); // Country names will be returned according to the app locale (fr = French) Illuminate\Support\Collection { all: [ "Nigéria", "Éthiopie", "Égypte", "Congo-Kinshasa", "Afrique du Sud", "Tanzanie", "Kenya", "Algérie", "Soudan", "Ouganda", ], }
属性类型转换
如果您已经在模型中使用了ISO代码,您可以通过将其转换为Country/Language/Currency模型来丰富它们
use Cyberionsys\Countries\Casts\AsCurrency; class MyModel{ // ... protected $casts = [ 'currency' => AsCurrency::class, ]; // ... } // Now you can dynamically retrieve all meta data associated with the currency MyModel::first()->currency; Cyberionsys\Countries\Models\Currency { id: "JPY", name: "{"en":"Japanese Yen","de":"Japanischer Yen","fr":"yen japonais","es":"yen"}", name_plural: "Japanese yen", symbol: "¥", symbol_native: "¥", decimal_digits: 0, rounding: 0, } // When filling the model, the ISO code (string) or the model can be used MyModel::first()->update(['currency' => 'USD']); MyModel::first()->update(['currency' => Cyberionsys\Countries\Models\Currency::find('USD')]);
测试
composer test
贡献
有关详细信息,请参阅CONTRIBUTING
安全漏洞
请查看我们的安全策略以了解如何报告安全漏洞。
鸣谢
- Cyberion Systems
- 灵感来自Martin
- https://restcountries.com
- https://github.com/umpirsky/language-list
- https://github.com/umpirsky/currency-list
- https://github.com/spatie/laravel-translatable
- 所有贡献者
许可证
MIT 许可协议。请参阅许可文件以获取更多信息。