Laavel-admin에 언어 전환 추가

개요
Laavel-admin 관리 화면에서

이런 언어 전환 단추를 설치해 보았다.
컨디션
Laravel 5.8
Laravel-admin 1.7.2
설치 단계
언어 전환 기능 추가
참조여기 기사. 언어 전환 기능 추가
먼저 라벨의 기본 언어를 일본어로 바꾼 다음에 라벨-admin의 언어로 전환합니다.
config/app.php
'locale' => 'ja',  //もとはen
다음은 config/language입니다.php에 쓰기:
config/language.php
<?php

/**
 * 登録言語
 */
return [
    'ja' => 'Japanese',
    'en' => 'English',
];
그리고 언어를 컨트롤러로 전환합니다
php artisan make:controller LanguageController
생성된 컨트롤러
App\Http\Controllers\LanguageController

use Session;

class LanguageController extends Controller
{
    /**
     * 言語切替
     *
     * @param string $lang config/language.php のキー
     */
    public function switchLanguage($lang) {
        if(array_key_exists($lang,config('language'))) {  //登録されている言語の場合
            Session::put('applocale',$lang);
        }else {  //それ以外
            Session::put('applocale','ja');
        }

        return redirect()->back();
    }
}
언어로 페이지를 전환합니다.php로 변경
routes/web.php
Route::get('/admin/lang/{lang}','LanguageController@switchLanguage');
이 페이지를 삽입하여 언어를 전환합니다.
마지막으로 중간부품을 추가하려면 다음과 같이 하십시오.
php artisan make:middleware Language
중간부품을 만들고 Kernel에 로그인
App/Http/Kernel.php
protected $middlewareGroups = [
    'web' => [
        \App\Http\Middleware\Language::class,  //これを追加する
    ],
];
다음 제작의 중간부품
App/Http/Middleware/Language.php
use Session;
use App;

class Language
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        if (Session::has('applocale') && array_key_exists(Session::get('applocale'), config('language'))) {
            App::setLocale(Session::get('applocale'));
        }
        else {
            App::setLocale('ja');
        }
        return $next($request);
    }
}
를 참고하십시오.
번역 파일 준비
다국어로 하는 방법으로.
__('メッセージ');
trans('messeage');
__() 문장을 키워드 정의 번역 파일로 직접 지정하고trans()resource/lang/ja/이하 정의의 배열 키를 지정합니다. 자세한 내용은 문서를 참조하십시오.
이번에 사용한 것은 __()의 실복이다.json 파일 추가
resource/lang/en.json
{
    "タイトル" : "Title",
    "価格" : "Price",
    "ページ数" : "Page",
    "カテゴリー" : "Category",
    "著者" : "Authoer",
    "作成日時" : "Created at",
    "更新日時" : "Updated at"
}
왼쪽은 호출 키, 오른쪽은 번역.
Admin\Controllers\BookController.php
protected function grid()
{
    $grid = new Grid(new Book);
    $grid->column('id','Id');
    $grid->column('title', __('タイトル'));
    $grid->column('price', __('価格'));
    $grid->column('page', __('ページ数'));
    $grid->column('category_id', __('カテゴリー'));
    $grid->column('author_id', __('著者'));
    $grid->column('created_at', __('作成日時'));
    $grid->column('updated_at', __('更新日時'));
    return $grid;
}
이렇게 하다

그렇습니다. 일본어는 확실히 영어로 번역되었습니다.
언어 전환 버튼 추가
Laavel-admin의 머리에 언어 전환 버튼을 추가합니다.
우선 bootstrap입니다.php에 다음을 추가합니다.
Admin/bootstrap.php
Admin::navbar(function (\Encore\Admin\Widgets\Navbar $navbar) {

    $navbar->right(view('admin.language',[
        'lang' => config('language'),
    ]));

});
내비게이션 표시줄의 오른쪽에view가 지정한 blade를 추가합니다. 왼쪽에 추가하려면 left 을 사용하십시오.
다음 단추를 위한 blade 준비:
resources/views/admin/language.blade.php
<li class="dropdown lang lang-switch" style="position:relative;">
    <a href="#" class="dropdown-toggle" data-toggle="dropdown" aria-expanded="true">
        <span class="hidden-xs">Language</span>
    </a>
    <ul class="dropdown-menu" style="position: absolute; left:0px; min-width:180px;">
        <li class="lang-header">
        </li>
        <li class="lang-footer clearfix" style="display:flex; justify-content: left; flex-wrap:wrap;">
            @foreach ($lang as $key => $label)
                <div style="display:inline-block; padding-left:5px; padding-bottom:2px;">
                    <a href="/admin/lang/{{$key}}" class="btn btn-default btn-flat lang-change">{{$label}}</a>
                </div>
            @endforeach
        </li>
    </ul>
</li>
첫 번째 화면이 완성됐습니다.
언어 전환 시 전체 화면 다시 불러오기
Laavel-admin에서 페이지 이동은 pjax로 이루어집니다. 따라서 눈썹과 사이드바 등은 추가 언어 전환 단추를 눌러도 원래의 언어 상태를 유지합니다. 따라서 언어를 전환할 때만 pjax를 통해 페이지 이동을 하지 않습니다.
public\vendor\laravel-admin\laravel-admin\laravel-admin.js
// 言語変更ボタンも例外にする
//もとは $(document).pjax('a:not(a[target="_blank"])', {
$(document).pjax('a:not(a[target="_blank"]):not(.lang-change)', {
    container: '#pjax-container'
});
이렇게 하면 언어를 전환할 때 일반적인 페이지 전환이 진행됩니다.
참고 자료
  • Laavel에서 언어 전환을 실현할 때의 메모(다언어화)
  • Laavel-admin 공식 문서
  • 좋은 웹페이지 즐겨찾기