beholdr/folio-translate
Folio Translate
Easy translation for Laravel Folio pages. This package based on mcamara/laravel-localization.
This package extends laravel-localization with these features:
- translate Folio content via files in the same folder
- check and hide unsupported locales in a language switcher
- redirect to a default locale if a page does not support current locale
Installation
You can install the package via composer:
composer require beholdr/folio-translate
Usage
Add middleware alias in your bootstrap/app.php:
return Application::configure(basePath: dirname(__DIR__))
->withMiddleware(function (Middleware $middleware) {
$middleware->alias([
// other middleware aliases...
'setLocaleFromBrowser' => \Beholdr\FolioTranslate\Middleware\SetLocaleFromBrowser::class,
'supportedLocales' => \Beholdr\FolioTranslate\Middleware\SupportedLocales::class,
]);
Add middlewares in your app/Providers/FolioServiceProvider.php:
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use Laravel\Folio\Folio;
use Mcamara\LaravelLocalization\Facades\LaravelLocalization;
class FolioServiceProvider extends ServiceProvider
{
public function boot(): void
{
$locale = LaravelLocalization::setLocale();
Folio::path(resource_path('views/pages'))->middleware([
'*' => [
'localeSessionRedirect',
'localizationRedirect',
'supportedLocales',
],
])->uri($locale ?? '');
}
}
Content translation
Given you have a page views/pages/index.blade.php and want to translate it to english and russian languages.
- Call
translatefunction inviews/pages/index.blade.phpfile:
<?php
use function Beholdr\FolioTranslate\translate;
translate();
?>
- Create
views/pages/index-en.blade.phpandviews/pages/index-ru.blade.phpfiles in the same directory with original file. Translated files should have the same prefix as the original file, for example:
views
pages
some-path
filename.blade.php
filename-en.blade.php
filename-ru.blade.php
index.blade.php
index-en.blade.php
index-ru.blade.php
- Put your translated content in these files. They will be rendered for each corresponding locale.
For example
views/pages/index-en.blade.php:
<x-layouts.base title="English page">
English content...
</x-layouts.base>
Fallback locale
You can pass an optional argument to translate function to specify default (fallback) locale: translate('en').
This locale will be used to load content if there is no translation for a current locale.
If not specified, it equals to a system APP_FALLBACK_LOCALE.
Define supported languages manually
Sometimes you need to define supported languages for page manually. It even could be non-Folio page.
In this case you can use middleware supportedLocales or a helper method setSupportedLanguagesKeys.
Middleware
You can add supportedLocales middleware with a list of supported languages to any route:
Route::get('/news', NewsController::class)
->middleware('supportedLocales:en,ru');
In this case a page will support passed languages.
Helper method
Also you can programmatically set supported languages, using FolioTranslate::setSupportedLanguagesKeys() method:
if ($redirect = FolioTranslate::setSupportedLanguagesKeys(['ru', 'en'])) {
return $redirect;
}
In case of absent translation for current language, setSupportedLanguagesKeys will return redirect to a default locale version.
SetLocaleFromBrowser middleware
This middleware sets application locale from a browser request (Accept-Language header).
Route::get('/endpoint', EndpointController::class)
->middleware('setLocaleFromBrowser');
Testing
composer test
License
The MIT License (MIT). Please see License File for more information.
Related Packages
Package to integrate multi language (multi locale) functionality in Laravel 5.x
Laravel 5 package for better translation syntax using php-intl extension
Version History
| Version | Released | PHP | Laravel | License |
|---|---|---|---|---|
| v0.0.5 | ^8.3 | ^11.0| | MIT | |
| v0.0.4 | ^8.3 | ^11.0| | MIT | |
| v0.0.3 | ^8.3 | ^11.0| | MIT | |
| v0.0.2 | ^8.3 | ^11.0| | MIT | |
| v0.0.1 | ^8.3 | ^11.0| | MIT |