Я показываю вам метод, который я использовал для перевода веб-сайта на несколько языков с вашими потребностями в LARAVEL 5.8
В этом примере мои маршруты переводятся (в соответствии с SEO), щелкая флаг, и текст переводится одновременно.
Вы можете использовать оба метода, один для коротких строк и один для длинных строк (https://laravel.com/docs/5.8/localization#defining-translation-strings).
Сначала вы получаете эти папки:
resources/lang
1) Для коротких строк с использованием коротких клавиш:
resources/lang/de/messages.php
resources/lang/en/messages.php
Вы получаете сообщения php-файлов, например одно из них на английском языке:
<?php
// resources/lang/en/messages.php
return [
'Willkommen' => 'Welcome',
'kontakt' => 'contact',
'Aktuelles' => 'News',
];
2) Для длинных строк с использованием строк перевода в качестве ключей:
resources/lang/de.json
resources/lang/en.json
Вы получаете файлы json, например, один из них, с немецкого на английский (en.json):
{
"Ich akzeptiere die Bedingungen der Datenschutzerklärung.": "I accept the terms and conditions of the privacy policy.",
"Das Album wurde gut aufgenommen.": "The album has been saved",
}
3) Для разных видов лезвий файлов вы можете использовать оба метода:
echo __('messages.Willkommen');
echo __('Ich akzeptiere die Bedingungen der Datenschutzerklärung.');
or with the blade helpers:
{{ __('messages.Willkommen') }}
@lang('messages.Willkommen'')
4) Для маршрута вы можете перевести URL , соответствующий SEO для примера:
https://website.com/de/aktuelles/
https://website.com/en/news/
Для маршрута необходимо создать два файла:
resources/lang/de/routes.php
resources/lang/en/routes.php
Вы получаете файлы маршрутов, например один из них на английский язык:
<?php
// resources/lang/en/routes.php
return [
'willkommen' => 'welcome',
'aktuelles' => 'news',
];
5) Переключение маршрута с флагами, Вы должны использовать config / app.php с параметрами:
<?php
// config/app.php
'locales' => ['de', 'en'],
'fallback_locale' => 'de',
и чтобы получить переключатель языка, вы должны добавить этот код в блэйд макета, например:
@foreach(config('app.locales') as $locale)
@if($locale != session('locale'))
<a class="btn btn-sm" href="{{ route('language', $locale) }}">
<img alt="{{ $locale }}" title="{{ $locale }}"
src="{!! asset('images/flags/' . $locale . '.png') !!}"/>
</a>
@endif
@endforeach
6) Добавление маршрута для действия переключения флага 'language'.
Имена других маршрутов в маршрутах / web.php:
'locale.name'
сохраняя имя всегда на немецком языке (ваш основной язык).
Вы получаете немецкое имя и английское имя:
'de.aktuelles'
'en.aktuelles'
<?php
// routes/web.php
Route::name('language')->get('/{lang}', 'YourController@language');
foreach(['de', 'en'] as $locale) {
Route::prefix($locale)->group(function() use ($locale) {
Route::get(trans('routes.aktuelles', array(), $locale), function() {
return view('aktuelles', ['name'=>'aktuelles', 'localName' => trans('routes.aktuelles', array(), session('locale'))]);//trans('routes.aktuelles');
})->name($locale.'.'.'aktuelles');
});
}
Вы можете добавить маршрут по умолчанию для главной страницы вашего сайта следующим образом:
Route::get('/', function () {
return redirect('/de/willkommen');
});
7) Теперь вам нужно добавить промежуточное программное обеспечение , которое проверяет, зарегистрирован ли языковой стандарт в сеансе:
<?php
app/Http/Middleware/Locale.php
public function handle($request, Closure $next)
{
if (!session ()->has ('locale')) {
session (['locale' => $request->getPreferredLanguage (config ('app.locales'))]);
}
$locale = session ('locale');
app ()->setLocale ($locale);
setlocale (LC_TIME, app()->environment('local') ? $locale : config('locale.languages')[$locale][1]);
return $next ($request);
}
Вы добавляете этот промежуточный класс в приложение / Http / Kernel.php:
protected $middlewareGroups = [
'web' => [
...,
\App\Http\Middleware\Locale::class,
],
...
];
8) Вам также необходим контроллер для действия «language» (переключение языка):
Для этого мне нужно получить предыдущее имя маршрута для добавления новой локали для перенаправления на правильный маршрут.
Я использую отличный совет здесь , чтобы сделать это!
<?php
// app/Http/Controllers/YourController.php
public function language(String $locale, Request $request)
{
// Previous route name Visit
$oneRoute = app('router')->getRoutes()->match(app('request')->create(url()->previous()))->getName();
// Replacing the locale in the road name
$nextRoute = substr_replace($oneRoute, $locale, 0, 2);
$locale = in_array ($locale, config ('app.locales')) ? $locale : config ('app.fallback_locale');
session (['locale' => $locale]);
return redirect()->route($nextRoute);
}
9) Возможно, вы захотите перевести пункты меню в дополнение к маршрутам. Итак, по вашему лезвию:
{{-- ie for one item --}}
<li class="nav-item">
<a class="nav-link" href="{{ route(session('locale') .'.aktuelles') }}">{{ __('messages.Aktuelles') }}</a>
</li>
10) В конце я не решил, что вы хотели бы удалить частицу "de" из ваших немецких URL, например:
yourwebsite.com / Aktuelles * +1101 *
вместо
yourwebsite.com / де / Aktuelles
...