devrabiul / laravel-geo-genius
Laravel GeoGenius β A powerful, intelligent toolkit for geo-location, timezone, and locale-based features in Laravel applications.
Installs: 82
Dependents: 0
Suggesters: 0
Security: 0
Stars: 62
Watchers: 1
Forks: 3
Open Issues: 1
Language:JavaScript
Requires
- php: ^8.0
README
Laravel GeoGenius is a lightweight, flexible package for Laravel applications that handles:
- π Geolocation β Detect user location via IP
- π Timezone Management β Detect and convert user timezones automatically
- π·οΈ Multilingual & Translation Support β Auto-detect locale, translate messages, and even convert numbers
- π± Country Picker & Phone Validation β Auto-detect default country, show a dropdown of all countries, format and validate numbers automatically
It automatically retrieves detailed IP-based location data, detects the userβs timezone, sets the correct locale, and even initialises a fully-functional phone input field with country picker and validation β all seamlessly integrated into your app.
β Fully compatible with Livewire, works via cookies or headers, and enables a truly global-ready Laravel application.
Featured On
Iβm proud to share that GeoGenius was featured on Laravel News in their article: βGeoGenius Package for Laravelβ.
Read it here: GeoGenius Package for Laravel β Laravel News
π Live Demo
π Try the Live Demo
β¨ Key Features
- π Automatic Timezone Detection β via cookies, headers, or fallback strategies
- π§ Timezone Conversion Helpers β convert timestamps automatically
- π± Country Picker & Phone Validation β detect visitorβs country, show dropdown, format & validate numbers
- β‘ Lightweight & Dependency-Free β no jQuery or frontend frameworks required
- π Livewire Compatible β works seamlessly with Livewire apps
- π§ Configurable Detection Strategy β customise detection method per app requirements
- π¦ Migration & Artisan Support β add
timezone
column effortlessly - π Caching & Offline Support β reduces API calls and handles offline gracefully
- π Multilingual Ready β built-in translation and auto-translation support
Under the hood, it leverages reliable IP geolocation APIs like ipwho.is
and ip-api.com
with caching for optimal performance.
π¦ Installation
composer require devrabiul/laravel-geo-genius
Publish the configuration and migration stub:
php artisan vendor:publish --provider="Devrabiul\\LaravelGeoGenius\\LaravelGeoGeniusServiceProvider"
β‘ Quick Start
Use Laravel GeoGenius in two ways:
- β
Global Helper β
laravelGeoGenius()
(recommended) - π§° Service Class β manually instantiate
GeoLocationService
Global Helper
laravelGeoGenius()->geo()->locateVisitor(); laravelGeoGenius()->geo()->getCountry(); laravelGeoGenius()->geo()->getTimezone(); laravelGeoGenius()->geo()->getLatitude();
Service Class
use Devrabiul\LaravelGeoGenius\Services\GeoLocationService; $geo = new GeoLocationService(); $ip = $geo->getClientIp(); $locationData = $geo->locateVisitor();
π Multilingual & Translation
Built-in auto translation and number conversion:
use function Devrabiul\LaravelGeoGenius\geniusTrans; use function Devrabiul\LaravelGeoGenius\geniusTranslateNumber; echo geniusTrans('welcome_message'); echo geniusTranslateNumber(12345); // Bengali digits if locale is 'bn'
Configure in config/laravel-geo-genius.php
:
'translate' => [ 'auto_translate' => true, ],
π Translation Artisan Commands
Laravel GeoGenius provides a set of helpful artisan commands to manage languages and translations easily:
Command | Description |
---|---|
php artisan geo:add-language {locale} |
Create a new language directory with starter files (e.g. en , bn ). |
php artisan geo:translations-generate --locale={locale} |
Scan your app for translate('...') calls and auto-generate messages.php . |
php artisan geo:translate-language {locale} --count={n} |
Translate up to n messages from new-messages.php into messages.php . |
php artisan geo:translate-language-all {locale} --count={n} |
Keep running batch translations until all strings are translated. |
php artisan geo:translate-language-batch {locale} --count={n} |
Translate a fixed batch of n messages at a time. |
Examples
# 1. Add English language support php artisan geo:add-language en # 2. Generate messages.php file from all translate() calls php artisan geo:translations-generate --locale=en # 3. Translate up to 100 strings for English php artisan geo:translate-language en --count=100 # 4. Keep translating until all English strings are done (300 at a time) php artisan geo:translate-language-all en --count=300 # 5. Translate 50 strings in a batch (useful for automation) php artisan geo:translate-language-batch en --count=50
π Change Current User Language
You can programmatically change the current user's language using the changeUserLanguage
method:
use Illuminate\Support\Facades\Route; Route::get('/change-lang', function () { // Change current user language to Bengali laravelGeoGenius()->language()->changeUserLanguage('bn'); // Continue your logic return redirect()->back(); });
Supported locale codes depend on your configuration (
config/laravel-geo-genius.php
) and the languages you have added viageo:add-language
.
π Timezone Artisan Commands
Laravel GeoGenius ships with helpful artisan commands:
Command | Description |
---|---|
php artisan geo:add-language {locale} |
Add a new language (e.g. en , bn ) to your app. |
Examples
# Add Bengali language
php artisan geo:add-language bn
π Timezone Detection & Conversion
use Devrabiul\LaravelGeoGenius\Services\TimezoneService; $tz = new TimezoneService(); // Detect user's timezone $timezone = $tz->getUserTimezone(); // Convert UTC datetime to user timezone echo $tz->convertToUserTimezone('2025-09-13 15:00:00');
π Timezone Artisan Commands
Laravel GeoGenius ships with helpful artisan commands:
Command | Description |
---|---|
php artisan geo:add-timezone-column {table} |
Add a nullable timezone column to the specified table if it does not exist. |
Examples
# Add a timezone column to the 'users' table
php artisan geo:add-timezone-column users
π± Country Picker & Phone Input
Laravel GeoGenius makes it trivial to initialise a country-aware phone input field:
- Auto-detects visitorβs default country
- Displays country dropdown (or restrict to one country)
- Formats phone numbers as the user types
- Provides built-in validation for numbers
Quick Blade Example
<!DOCTYPE html> <html lang="{{ app()->getLocale() }}"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> </head> <body> {!! laravelGeoGenius()->initIntlPhoneInput() !!} <input id="phone" type="tel" name="phone"> </body> </html>
GeoGenius injects the detected country code into a hidden span:
<span class="system-default-country-code" data-value="us"></span>
Then you can use intl-tel-inputβs API to validate on submit:
const input = document.querySelector("#phone"); const iti = window.intlTelInput(input, { initialCountry: document.querySelector('.system-default-country-code').dataset.value, utilsScript: "https://cdn.jsdelivr.net/npm/intl-tel-input@19.2.15/build/js/utils.js", }); form.addEventListener('submit', e => { if (!iti.isValidNumber()) { e.preventDefault(); alert('Please enter a valid phone number'); } });
All scripts/styles are included automatically by
initIntlPhoneInput()
β you only need to add the<input>
and optionally the validation snippet.
π§ Additional Notes
- π APIs Used: ipify.org, ipwho.is
- π Caching: Geo data cached 7 days per IP (
ttl_minutes
= cache lifetime in minutes) - βοΈ Fallback: Returns default structure if offline
- π§ͺ Localhost Handling: Fetches external IP for
127.0.0.1
or::1
π€ Contributing
We welcome contributions! Please:
- Fork the repository
- Create a feature branch
- Make your changes
- Add tests if applicable
- Submit a pull request
Report bugs through GitHub Issues.
π± Treeware
This package is Treeware. If you use it in production, please buy the world a tree to thank us for our work. Your support helps create employment for local families and restores wildlife habitats.
π License
MIT License. See LICENSE for details.
π¬ Support
- π§ Email: devrabiul@gmail.com
- π GitHub: devrabiul/laravel-geo-genius
- π¦ Packagist: packagist.org/packages/devrabiul/laravel-geo-genius
π Changelog
See CHANGELOG.md for recent changes and updates.