Laravel 6のユーザー登録と認証の画面を日本語にするには

Laravel Laravel

ユーザー登録の画面

認証の画面

それぞれ英語になっているので、日本語化してみます。

試したときの環境

  • macOS 11.2.3 
  • PHP 8.0.3
  • Laravel 6.20.20

Laravel 6の環境設定

こちらの手順と同じです。

Laravel 6のインストール

“testapp”というプロジェクトにします。

composer create-project --prefer-dist laravel/laravel testapp "6.*"

Laravel Debugbar をインストール

cd tasks
composer require barryvdh/laravel-debugbar --dev
php artisan vendor:publish --provider="Barryvdh\Debugbar\ServiceProvider"

laravel/ui と Auth をインストール

composer require laravel/ui="1.*" --dev
php artisan ui vue --auth
npm install && npm run dev

データベースの接続設定

SQLiteを使います。

データベースを作成

touch database/database.sqlite

.env を編集

DB_CONNECTION=sqlite

config/database.php を編集

'default' => env('DB_CONNECTION', 'sqlite'),

マイグレーションと動作確認

php artisan migrate
php artisan serve

冒頭の画面が表示されればOKですね。

出来上がったファイルを確認する

ユーザー登録と認証の画面のテンプレートはこちら

  • resources/views/auth/register.blade.php
  • resources/views/auth/login.blade.php

それぞれ、内容を確認します。

@extends('layouts.app')

@section('content')
<div class="container">
    <div class="row justify-content-center">
        <div class="col-md-8">
            <div class="card">
                <div class="card-header">{{ __('Register') }}</div>

                <div class="card-body">
                    <form method="POST" action="{{ route('register') }}">
                        @csrf

                        <div class="form-group row">
                            <label for="name" class="col-md-4 col-form-label text-md-right">{{ __('Name') }}</label>

                            <div class="col-md-6">
                                <input id="name" type="text" class="form-control @error('name') is-invalid @enderror" name="name" value="{{ old('name') }}" required autocomplete="name" autofocus>

                                @error('name')
                                    <span class="invalid-feedback" role="alert">
                                        <strong>{{ $message }}</strong>
                                    </span>
                                @enderror
                            </div>
                        </div>

                        <div class="form-group row">
                            <label for="email" class="col-md-4 col-form-label text-md-right">{{ __('E-Mail Address') }}</label>

                            <div class="col-md-6">
                                <input id="email" type="email" class="form-control @error('email') is-invalid @enderror" name="email" value="{{ old('email') }}" required autocomplete="email">

                                @error('email')
                                    <span class="invalid-feedback" role="alert">
                                        <strong>{{ $message }}</strong>
                                    </span>
                                @enderror
                            </div>
                        </div>

                        <div class="form-group row">
                            <label for="password" class="col-md-4 col-form-label text-md-right">{{ __('Password') }}</label>

                            <div class="col-md-6">
                                <input id="password" type="password" class="form-control @error('password') is-invalid @enderror" name="password" required autocomplete="new-password">

                                @error('password')
                                    <span class="invalid-feedback" role="alert">
                                        <strong>{{ $message }}</strong>
                                    </span>
                                @enderror
                            </div>
                        </div>

                        <div class="form-group row">
                            <label for="password-confirm" class="col-md-4 col-form-label text-md-right">{{ __('Confirm Password') }}</label>

                            <div class="col-md-6">
                                <input id="password-confirm" type="password" class="form-control" name="password_confirmation" required autocomplete="new-password">
                            </div>
                        </div>

                        <div class="form-group row mb-0">
                            <div class="col-md-6 offset-md-4">
                                <button type="submit" class="btn btn-primary">
                                    {{ __('Register') }}
                                </button>
                            </div>
                        </div>
                    </form>
                </div>
            </div>
        </div>
    </div>
</div>
@endsection
@extends('layouts.app')

@section('content')
<div class="container">
    <div class="row justify-content-center">
        <div class="col-md-8">
            <div class="card">
                <div class="card-header">{{ __('Login') }}</div>

                <div class="card-body">
                    <form method="POST" action="{{ route('login') }}">
                        @csrf

                        <div class="form-group row">
                            <label for="email" class="col-md-4 col-form-label text-md-right">{{ __('E-Mail Address') }}</label>

                            <div class="col-md-6">
                                <input id="email" type="email" class="form-control @error('email') is-invalid @enderror" name="email" value="{{ old('email') }}" required autocomplete="email" autofocus>

                                @error('email')
                                    <span class="invalid-feedback" role="alert">
                                        <strong>{{ $message }}</strong>
                                    </span>
                                @enderror
                            </div>
                        </div>

                        <div class="form-group row">
                            <label for="password" class="col-md-4 col-form-label text-md-right">{{ __('Password') }}</label>

                            <div class="col-md-6">
                                <input id="password" type="password" class="form-control @error('password') is-invalid @enderror" name="password" required autocomplete="current-password">

                                @error('password')
                                    <span class="invalid-feedback" role="alert">
                                        <strong>{{ $message }}</strong>
                                    </span>
                                @enderror
                            </div>
                        </div>

                        <div class="form-group row">
                            <div class="col-md-6 offset-md-4">
                                <div class="form-check">
                                    <input class="form-check-input" type="checkbox" name="remember" id="remember" {{ old('remember') ? 'checked' : '' }}>

                                    <label class="form-check-label" for="remember">
                                        {{ __('Remember Me') }}
                                    </label>
                                </div>
                            </div>
                        </div>

                        <div class="form-group row mb-0">
                            <div class="col-md-8 offset-md-4">
                                <button type="submit" class="btn btn-primary">
                                    {{ __('Login') }}
                                </button>

                                @if (Route::has('password.request'))
                                    <a class="btn btn-link" href="{{ route('password.request') }}">
                                        {{ __('Forgot Your Password?') }}
                                    </a>
                                @endif
                            </div>
                        </div>
                    </form>
                </div>
            </div>
        </div>
    </div>
</div>
@endsection

日本語化してみる

単に英語の部分を日本語にするだけでしたら、例えば、

<div class="card-header">{{ __('Register') }}</div>

となっているところを

<div class="card-header">会員登録</div>

に変えれば良さそうなものですが、Laravelには「多言語化」という機能があるので、それを使ってみます。

6.x 多言語化 Laravel

ロケールを日本語にする

config/app.phpでロケールが英語になっているのを日本語に変えます。

// 'locale' => 'en',
'locale' => 'ja',

翻訳用のJSONファイルを作成する

resources/lang/ja.jsonを作成します。

{

}

ここにヘルパ関数(__())の引数に指定されている英語と翻訳したい日本語を対にして書いていけばいいです。

{
    "Register": "会員登録"
}

作ってみたJSONファイルがこちら。

{
    "Login": "ログイン",
    "Register": "会員登録",
    "Name": "お名前",
    "E-Mail Address": "E-mailアドレス",
    "Password": "パスワード",
    "Confirm Password": "パスワード再入力",
    "Remember Me": "ログイン情報を記憶しておく",
    "Forgot Your Password?": "パスワードを忘れた方はこちら"
}

表示確認

configファイルを書き換えたときには、キャッシュをクリアしないと表示が変わらないことがあるので、下記のコマンドを実行しておきます。

php artisan config:cache

このように表示されればOKですね!😃

この記事を書いた人

余分なこだわりは捨てる。それがぼくのスタイル。

PHPでWebアプリを作り、小さな花の写真を撮ってよろこんでいる人。元Webエンジニア。プログラミング講師。余分なこだわりを捨てて生きやすくなりたいと思いつつも、なかなかこだわりを捨てきれない頑固者。まろと呼んでください。

さかのうえの まろをフォローする
Laravel
シェアする