2017 © Pedro Peláez
 

library multilingual-country-list

Lookup Objects for ISO 3166 Country Names and Codes

image

petercoles/multilingual-country-list

Lookup Objects for ISO 3166 Country Names and Codes

  • Tuesday, July 17, 2018
  • by petercoles
  • Repository
  • 2 Watchers
  • 12 Stars
  • 3,661 Installations
  • PHP
  • 0 Dependents
  • 0 Suggesters
  • 7 Forks
  • 1 Open issues
  • 8 Versions
  • 23 % Grown

The README.md

Multilingual Country Lists for Laravel

Code Coverage Build Status License, (*1)

Introduction

I've lost count of the number of times that I've carefully edited a list of 250 of so countries to create the data needed for a select field on a form - and that's just for one language. This thin Laravel wrapper around an industry-maintained list of country names in many, many languages, consigns that tedious task and ongoing maintenance of those lists to the trash bin of history., (*2)

The package provides easy access, through a simple API, to country names in an enormously large number of language and locale settings, together with their ISO-3166 alpha-2 two-letter country codes., (*3)

Data can be returned as a lookup array or an array of key-value pairs, where both the key and value labels can be set according to the needs of the software consuming them., (*4)

Installation

At the command line run, (*5)

composer require petercoles/multilingual-country-list

If you're using Laravel 5.5 or later (and haven't disabled package discovery), you're done. Move on to the usage section below., (*6)

If you're using an older version of Laravel, then add the service provider to the providers entry in your config/app.php file, (*7)

    'providers' => [
        // ...
        PeterColes\Countries\CountriesServiceProvider::class,
        // ...
    ],

An optional facade is also available and can be enabled by adding the following to the aliases array in your config/app.php file., (*8)

'Countries' => PeterColes\Countries\CountriesFacade::class,

Usage

Once installed the package exposes two API methods: lookup() and keyValue(), each of which returns a list of countries ordered by the country name in the language being used., (*9)

Lookup

The lookup method takes two optional parameters: $locale (default 'en') and $flip (default false) and returns a collection. This collection will be cast to a json object by Laravel if returned as a response, or can be cast to an array if needed with the toArray() method., (*10)

Locales can be expressed as a language code, e.g. 'fr', or a full locale code, e.g. zh_CN., (*11)

Lookup Examples

The default is English., (*12)

Countries::lookup();

// returns

{
  "AF": "Afghanistan",
  ...
  "ZW": "Zimbabwe"
}

The flip parameter facilitates reverse lookups, e.g. for typahead components that recognize values, but don't support keys, requiring the key to obtained later., (*13)

Countries::lookup('es', true);

// returns

{  
  "Afganistán": "AF",
  ...
  "Zimbabue": "ZW"
}

Non-latin character sets are supported too, including locale settings, (*14)

Countries::lookup('zh_CN');

// returns

{
  "AL": "阿尔巴尼亚",
  ...
  "HK": "中国香港特别行政区"
}

keyValue

The keyValue method takes three optional parameters: $locale (default 'en'), $key (default 'key') and $value (default 'value')., (*15)

Key Value Examples

The default is still English., (*16)

Countries::keyValue();

// returns

[
  {"key": "AF", "value": "Afghanistan"},
  ...
  {"key": "ZW", "value": "Zimbabwe"}
]

If you need a key-value list with custom indices, then the $key and $value parameters can be used to redfine them. this might be the case, for example, if you're using a javascript component to generate a select field and that component has expectations as to the indices used in the data that it receoves., (*17)

Countries::keyValue('zh', 'label', 'text');

// returns

[
  {"label": "AL", "text": "阿尔巴尼亚"},
  ...
  {"label": "HK", "text": "中国香港特别行政区"}
]

Country Names

If you just want to get the name of a country for a particular locale, then passing the $isoCode and $locale (default 'en') to the countryName method will return the requested text., (*18)

Country Name Example

Countries::countryName('BE', 'fr')

// returns

'Belgique'

Tweaking

So, you've got a list of countries, but it doesn't quite meet your needs. Since the lookup and keyValue methods return Laravel collections, tweaking the results is super easy., (*19)

Filtering

The data from which these lists are drawn includes "Eurozone" and, despite some politicans wishes, that's not really a country. Let's remove it., (*20)

Countries::lookup()->reject(function($country, $key) {
    return $key == 'EZ';
});

There are also some entries that may be considered parts of other countries. Without getting into the politics, let's also remove the Canary Islands (Spain) and Guadeloupe (France)., (*21)

Countries::lookup()->reject(function($country, $key) {
    return in_array($key, [ 'EZ', 'IC', 'GP' ]);
});

Modifying

Also, we know that the international code for the United Kingdom is "GB", but our payment gateway is expecteding "UK". So lets change that., (*22)

Countries::lookup()->mapWithKeys(function($country, $key) {
    return $key == 'GB' ? [ 'UK' => $country ] : [ $key => $country ];
});

Adding

The number of recognized countries is growing, but not always as fast as changes on the ground, so, with no comment on the political rights and wrongs, let's add a new one., (*23)

Countries::lookup()->put('CT', 'Catalonia')->sort();

A few warnings here:, (*24)

  • Do check that the code isn't being already.
  • Do remember to sort the list after making the addition.
  • Don't forget to keep checking the list so that you can remove your addition if it becomes official.

Issues

This package was developed to meet a specific need and then generalised for wider use. If you have a use case not currently met, or see something that appears to not be working correctly, please raise an issue at the github repo., (*25)

Contributions

Contributions are welcome, but will generally need tests. I recommend raising an issue first so that proposed changes or enhancements can be discussed before development starts., (*26)

License

This package is licensed under the MIT license., (*27)

The Versions

17/07 2018

dev-master

9999999-dev https://github.com/petercoles/multilingualcountry-list

Lookup Objects for ISO 3166 Country Names and Codes

  Sources   Download

MIT

The Requires

 

The Development Requires

laravel iso 3166 country codes country lists country lookup

02/01 2018

1.2.4

1.2.4.0 https://github.com/petercoles/multilingualcountry-list

Lookup Objects for ISO 3166 Country Names and Codes

  Sources   Download

MIT

The Requires

 

The Development Requires

laravel iso 3166 country codes country lists country lookup

26/09 2017

1.2.3

1.2.3.0 https://github.com/petercoles/multilingualcountry-list

Lookup Objects for ISO 3166 Country Names and Codes

  Sources   Download

MIT

The Requires

 

The Development Requires

laravel iso 3166 country codes country lists country lookup

27/06 2017

1.2.2

1.2.2.0 https://github.com/petercoles/multilingualcountry-list

Lookup Objects for ISO 3166 Country Names and Codes

  Sources   Download

MIT

The Requires

 

The Development Requires

laravel iso 3166 country codes country lists country lookup

27/06 2017

1.2.1

1.2.1.0 https://github.com/petercoles/multilingualcountry-list

Lookup Objects for ISO 3166 Country Names and Codes

  Sources   Download

MIT

The Requires

 

The Development Requires

laravel iso 3166 country codes country lists country lookup

07/05 2016

1.2.0

1.2.0.0 https://github.com/petercoles/multilingualcountry-list

Lookup Objects for ISO 3166 Country Names and Codes

  Sources   Download

MIT

The Requires

 

The Development Requires

laravel iso 3166 country codes country lists country lookup

30/04 2016

1.1.0

1.1.0.0 https://github.com/petercoles/countries

Lookup Objects for ISO 3166 Country Names and Codes

  Sources   Download

MIT

The Requires

 

The Development Requires

laravel iso 3166 country codes country lists country lookup

23/04 2016

1.0.0

1.0.0.0 https://github.com/petercoles/countries

Lookup Objects for ISO 3166 Country Names and Codes

  Sources   Download

MIT

The Requires

 

The Development Requires

laravel iso 3166 country codes country lists country lookup