https://github.com/devrabiul/laravel-geo-genius
π Laravel GeoGenius β IP-based geolocation, timezone, multilingual toolkit + country picker & phone validation for Laravel apps
https://github.com/devrabiul/laravel-geo-genius
country-picker geolocation laravel multilingual package timezone user-timezone
Last synced: 25 days ago
JSON representation
π Laravel GeoGenius β IP-based geolocation, timezone, multilingual toolkit + country picker & phone validation for Laravel apps
- Host: GitHub
- URL: https://github.com/devrabiul/laravel-geo-genius
- Owner: devrabiul
- License: mit
- Created: 2025-09-13T01:06:12.000Z (27 days ago)
- Default Branch: main
- Last Pushed: 2025-09-13T01:14:46.000Z (27 days ago)
- Last Synced: 2025-09-13T03:15:04.423Z (27 days ago)
- Topics: country-picker, geolocation, laravel, multilingual, package, timezone, user-timezone
- Language: JavaScript
- Homepage: https://packages.rixetbd.com/laravel-geo-genius
- Size: 1.62 MB
- Stars: 1
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
- Funding: .github/FUNDING.yml
- License: LICENSE
- Code of conduct: CODE_OF_CONDUCT.md
- Security: SECURITY.md
Awesome Lists containing this project
README
# π¦ Laravel GeoGenius β Timezone, Geolocation, Multilingual Toolkit & Country Picker for Laravel
**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 automaticallyIt 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**.
[](https://packagist.org/packages/devrabiul/laravel-geo-genius)
[](https://packagist.org/packages/devrabiul/laravel-geo-genius)
[](https://packagist.org/packages/devrabiul/laravel-geo-genius)

[](https://plant.treeware.earth/devrabiul/laravel-geo-genius)
---
## π Live Demo
π [Try the Live Demo](https://packages.rixetbd.com/laravel-geo-genius)

---
## β¨ 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 supportUnder the hood, it leverages reliable **IP geolocation APIs** like [`ipwho.is`](https://ipwho.is) and [`ip-api.com`](http://ip-api.com) with caching for optimal performance.
---
## π¦ Installation
```bash
composer require devrabiul/laravel-geo-genius
```Publish the configuration and migration stub:
```bash
php artisan vendor:publish --provider="Devrabiul\\LaravelGeoGenius\\LaravelGeoGeniusServiceProvider"
```---
## β‘ Quick Start
Use Laravel GeoGenius in two ways:
1. β **Global Helper** β `laravelGeoGenius()` *(recommended)*
2. π§° **Service Class** β manually instantiate `GeoLocationService`### Global Helper
```php
laravelGeoGenius()->geo()->locateVisitor();
laravelGeoGenius()->geo()->getCountry();
laravelGeoGenius()->geo()->getTimezone();
laravelGeoGenius()->geo()->getLatitude();
```### Service Class
```php
use Devrabiul\LaravelGeoGenius\Services\GeoLocationService;$geo = new GeoLocationService();
$ip = $geo->getClientIp();
$locationData = $geo->locateVisitor();
```---
## π Multilingual & Translation
Built-in auto translation and number conversion:
```php
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`:
```php
'translate' => [
'auto_translate' => true,
],
```## π Change Current User Language
You can programmatically change the current user's language using the `changeUserLanguage` method:
```php
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 via `geo: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
```bash
# Add Bengali language
php artisan geo:add-language bn
````---
## π Timezone Detection & Conversion
```php
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
```bash
# 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
```html
// must be use type="tel" in your phone input
// Before Body close tag
{!! laravelGeoGenius()->initIntlPhoneInput() !!}```
GeoGenius injects the detected country code into a hidden span:
```html
```Then you can use intl-tel-inputβs API to validate on submit:
```js
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 `` and optionally the validation snippet.
---
## π§ Additional Notes
* π **APIs Used:** [ipify.org](https://api.ipify.org), [ipwho.is](https://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:
1. Fork the repository
2. Create a feature branch
3. Make your changes
4. Add tests if applicable
5. Submit a pull requestReport bugs through [GitHub Issues](https://github.com/devrabiul/laravel-geo-genius/issues).
---
## π± Treeware
This package is [Treeware](https://treeware.earth). If you use it in production, please [**buy the world a tree**](https://plant.treeware.earth/devrabiul/laravel-geo-genius) to thank us for our work. Your support helps create employment for local families and restores wildlife habitats.
---
## π License
MIT License. See [LICENSE](https://github.com/devrabiul/laravel-geo-genius/blob/main/LICENSE) for details.
---
## π¬ Support
- π§ Email: [devrabiul@gmail.com](mailto:devrabiul@gmail.com)
- π GitHub: [devrabiul/laravel-geo-genius](https://github.com/devrabiul/laravel-geo-genius)
- π¦ Packagist: [packagist.org/packages/devrabiul/laravel-geo-genius](https://packagist.org/packages/devrabiul/laravel-geo-genius)---
## π Changelog
See [CHANGELOG.md](https://github.com/devrabiul/laravel-geo-genius/blob/main/CHANGELOG.md) for recent changes and updates.