beloop/language
Laravel package for handling application languages and localization: manage available languages, switch the current locale, and provide helpers/middleware for language detection and routing. Lightweight setup for multilingual sites and dashboards.
Installation
composer require beloop/language
(Note: Due to the package being archived, verify compatibility with your Laravel version—likely PHP 7.2+ and Laravel 5.x/6.x.)
Basic Usage
The package provides a Language facade for managing multilingual content. Initialize it in a service provider:
use Beloop\Language\Facades\Language;
// Set default language
Language::setDefault('en');
// Load translations (if using a custom loader)
Language::loadTranslations(['en' => 'en.json', 'fr' => 'fr.json']);
First Use Case: Dynamic Language Switching
// In a controller/middleware
$currentLang = Language::getCurrent();
$translatedText = Language::get('key.subkey', [], $currentLang);
Language Detection & Switching
Accept-Language header or session):
public function handle($request, Closure $next) {
$lang = $request->header('Accept-Language') ?? session('lang');
Language::setCurrent($lang);
return $next($request);
}
// Route
Route::get('/lang/{lang}', function ($lang) {
Language::setCurrent($lang);
return redirect()->back();
});
Translation Management
Beloop\Language\Loaders\LoaderInterface to fetch translations from a database or API:
class DatabaseLoader implements LoaderInterface {
public function load($locale) {
return DB::table('translations')->where('locale', $locale)->get();
}
}
config/language.php:
'fallbacks' => [
'fr' => ['en'],
'es' => ['en'],
],
Integration with Laravel Ecosystem
public function __construct() {
$this->middleware(function ($request, $next) {
app()->setLocale(Language::getCurrent());
return $next($request);
});
}
Blade::directive('lang', function ($expression) {
return "<?php echo \Beloop\Language\Facades\Language::get({$expression}); ?>";
});
Usage:
@lang('key.subkey')
API Responses
Accept-Language header in API responses:
return response()->json($data)
->header('Content-Language', Language::getCurrent());
Archived Package Risks
eval() in dynamic translation loading).Performance
Cache::remember("lang.{$locale}", 3600, function () use ($locale) {
return Language::loadTranslations([$locale => 'path']);
});
Edge Cases
if (!Language::hasLocale($locale)) {
abort(400, 'Unsupported language');
}
Debugging
Language::getAvailableLocales() and Language::getAvailableKeys() to inspect loaded data.fallbacks config and loaded data.Configuration
config/language.php:
return [
'default' => 'en',
'supported' => ['en', 'fr', 'es'],
'loader' => \Beloop\Language\Loaders\JsonLoader::class,
];
Testing
Language facade in tests:
$this->app->instance('Beloop\Language\Facades\Language', $mockLanguage);
Extending Functionality
class User extends Authenticatable {
public function setLanguage($lang) {
$this->language = $lang;
Language::setCurrent($lang);
$this->save();
}
}
Internationalization (i18n) Beyond Translations
Carbon or laravel-i18n).How can I help you explore Laravel packages today?