diff --git a/src/Services/MaxMindDatabase.php b/src/Services/MaxMindDatabase.php index 180c672..f871fa5 100644 --- a/src/Services/MaxMindDatabase.php +++ b/src/Services/MaxMindDatabase.php @@ -2,6 +2,8 @@ namespace Torann\GeoIP\Services; +use GeoIp2\Model\City; +use Illuminate\Support\Arr; use PharData; use Exception; use GeoIp2\Database\Reader; @@ -55,9 +57,29 @@ public function locate($ip) 'lon' => $record->location->longitude, 'timezone' => $record->location->timeZone, 'continent' => $record->continent->code, + 'localizations' => $this->getLocalizations($record), ]); } + /** + * Get localized country name, state name and city name based on config languages + * + * @param City $record + * @return array + */ + private function getLocalizations(City $record): array + { + $localizations = []; + + foreach ($this->config('locales', ['en']) as $lang) { + $localizations[$lang]['country'] = Arr::get($record->country->names, $lang); + $localizations[$lang]['state_name'] = Arr::get($record->mostSpecificSubdivision->names, $lang); + $localizations[$lang]['city'] = Arr::get($record->city->names, $lang); + } + + return $localizations; + } + /** * Update function for service. * diff --git a/src/Services/MaxMindWebService.php b/src/Services/MaxMindWebService.php index 189f13f..49ed00b 100644 --- a/src/Services/MaxMindWebService.php +++ b/src/Services/MaxMindWebService.php @@ -2,7 +2,9 @@ namespace Torann\GeoIP\Services; +use GeoIp2\Model\City; use GeoIp2\WebService\Client; +use Illuminate\Support\Arr; class MaxMindWebService extends AbstractService { @@ -46,6 +48,26 @@ public function locate($ip) 'lon' => $record->location->longitude, 'timezone' => $record->location->timeZone, 'continent' => $record->continent->code, + 'localizations' => $this->getLocalizations($record), ]); } + + /** + * Get localized country name, state name and city name based on config languages + * + * @param City $record + * @return array + */ + private function getLocalizations(City $record): array + { + $localizations = []; + + foreach ($this->config('locales', ['en']) as $lang) { + $localizations[$lang]['country'] = Arr::get($record->country->names, $lang); + $localizations[$lang]['state_name'] = Arr::get($record->mostSpecificSubdivision->names, $lang); + $localizations[$lang]['city'] = Arr::get($record->city->names, $lang); + } + + return $localizations; + } } \ No newline at end of file