Laravel は、さまざまな言語や文化に適応するために、ローカルに設計されたアプリケーションです。 ローカリゼーションでは、翻訳を通じて国際化されたアプリケーションを特定の言語に合わせます。
localhost
. そうでない場合は、交換してください localhost
独自のドメイン名または IP アドレスを使用します (インストールによって異なります)。Laravel では、他の多くのフレームワークと同様に、さまざまな言語の翻訳を別々のファイルに保存できます。 Laravel 翻訳ファイルを整理するには、次の XNUMX つの方法があります。
resources/lang/{en,fr,ru}/{myfile.php}
;resources/lang/{fr.json, ru.json}
;地域によって異なる言語については、名前を付ける必要があります directory/file
ISO 15897 に準拠した言語です。たとえば、英国英語の場合は、 en_GB
の代わりに en-gb
. この記事では、XNUMX 番目の方法に焦点を当てますが、最初の方法についても同じことが言えます (翻訳キーの名前と取得方法を除く)。
では、行きましょう resources/views/welcome.blade.php
ファイルの内容を置き換えます body
次のように、私たちのタグを付けます。
<body class="antialiased">
<div class="relative flex items-top justify-center min-h-screen bg-gray-100 dark:bg-gray-900 sm:items-center py-4 sm:pt-0">
<div class="max-w-6xl mx-auto sm:px-6 lg:px-8">
<div class="flex justify-center pt-8 sm:justify-start sm:pt-0">
Welcome to our website
</div>
</div>
</div>
</body>
ローカリゼーションのウェルカム メッセージを準備することから始めます。これは Laravel では非常に簡単です。 「Welcome to our website」というテキストを次のコードに置き換えるだけです。 {{ __('Welcome to our website') }}
。 これにより、Laravel にデフォルトで「当社の Web サイトへようこそ」を表示するように指示されます。definite を実行し、英語以外の言語が設定されている場合は、この文字列の翻訳を探します (これについては後で説明します)。 英語がデフォルトの言語として設定されますdefi私たちのアプリの仕様なので、デフォルト設定ではdefi最後に「当社のウェブサイトへようこそ」というテキストを表示するだけです。 ロケールが異なる場合は、一致する翻訳が検索され、すぐに作成されます。
しかし、Laravel はどの言語が現在の言語であるか、またはどの言語がアプリケーションで使用可能かをどのように知るのでしょうか? これは、アプリのローカル構成を調べることによって行われます config/app.php
. このファイルを開いて、次の XNUMX つの連想配列キーを探します。
/*
|--------------------------------------------------------------------------
| Application Locale Configuration
|--------------------------------------------------------------------------
|
| The application locale determines the default locale that will be used
| by the translation service provider. You are free to set this value
| to any of the locales which will be supported by the application.
|
*/
'locale' => 'en',
/*
|--------------------------------------------------------------------------
| Application Fallback Locale
|--------------------------------------------------------------------------
|
| The fallback locale determines the locale to use when the current one
| is not available. You may change the value to correspond to any of
| the language folders that are provided through your application.
|
*/
'fallback_locale' => 'en',
キーの上に表示される説明は一目瞭然ですが、要するに、キー locale
ローカルプレが含まれていますdefi(少なくとも、コード内に他のロケールが設定されていない場合)。 そしてその fallback_locale
アプリケーションで存在しないロケールを設定した場合にアクティブになります。
このファイルを開いている間に、アプリケーションがサポートするすべてのロケールを一覧表示するための新しいキーを追加しましょう。 これは後でローカル スイッチャーを追加するときに使用します。 ただし、Laravel では実行する必要がないため、これはオプションのタスクです。
/*
|--------------------------------------------------------------------------
| Available locales
|--------------------------------------------------------------------------
|
| List all locales that your application works with
|
*/
'available_locales' => [
'English' => 'en',
'Italian' => 'it',
'French' => 'fr',
],
現在、アプリケーションは英語、イタリア語、フランス語の XNUMX つの言語をサポートしています。
作業するすべてのロケールを確立したので、プレウェルカム メッセージの翻訳に進むことができます。defiナイト。
新しいローカリゼーション ファイルをフォルダーに追加することから始めましょう。 resources/lang
. まず、ファイルを作成します resources/lang/it.json
次のように、対応する翻訳を追加します。
{
"Welcome to our website": "Benvenuto nel nostro sito web"
}
次に、ファイルを作成します resources/lang/fr.json
:
{
"私たちのウェブサイトへようこそ": 「当サイトへようこそ」
}
ご覧のとおり、常にプレメッセージを参照します。defiファイルに追加したnito welcome.blade.php
(どれが {{ __('Welcome to our website') }}
)。 ファイルを作成する必要がない理由 en.json
これは、Laravel が事前設定によってどのメッセージを渡すかをすでに知っているためですdefi関数を終えた __()
それらは私たちのローカルプレ用ですdefiにとえん。
この時点では、Laravel はロケールを変更する方法を知らないため、今のところはパス内で直接変換を実行しましょう。 事前にウェルカムパスを変更するdefi以下のように終了しました。
Route::get('/{locale?}', function ($locale = null) {
if (isset($locale) && in_array($locale, config('app.available_locales'))) {
app()->setLocale($locale);
}
return view('welcome');
});
使用可能な言語のいずれかを最初のパス セグメントとして指定して、Web サイトにアクセスできるようになりました。たとえば、 localhost/ru
o localhost/fr
. ローカライズされたコンテンツが表示されます。 サポートされていないロケールを指定した場合、またはロケールをまったく指定しなかった場合、Laravel は en
デフォルトではdefiニタ。
サイト リンクごとにロケールを切り替えることは、望ましくない場合があり、見栄えがよくない場合があります。 そのため、特別な言語スイッチャーを使用して言語設定を行い、ユーザー セッションを使用して翻訳されたコンテンツを表示します。 したがって、新しいミドルウェアを内部に作成します app/Http/Middleware/Localization.php
ファイルまたは実行 artisan make:middleware Localization
.
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\App;
use Illuminate\Support\Facades\Session;
class Localization
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle(Request $request, Closure $next)
{
if (Session::has('locale')) {
App::setLocale(Session::get('locale'));
}
return $next($request);
}
}
このミドルウェアは、ユーザーが選択したロケールがセッションに存在する場合、Laravel にそのロケールを使用するように指示します。
これはリクエストごとに実行する必要があるため、プレミドルウェア スタックにも追加する必要があります。defiで終わった app/http/Kernel.php
以下のために web
ミドルウェア グループ:
* The application's route middleware groups.
*
* @var array
*/
protected $middlewareGroups = [
'web' => [
\App\Http\Middleware\EncryptCookies::class,
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
\Illuminate\Session\Middleware\StartSession::class,
// \Illuminate\Session\Middleware\AuthenticateSession::class,
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
\App\Http\Middleware\VerifyCsrfToken::class,
\Illuminate\Routing\Middleware\SubstituteBindings::class,
\App\Http\Middleware\Localization::class, /* <--- add this */
],
次に、ロケールを変更するためのパスを追加する必要があります。 クロージャー パスを使用していますが、必要に応じてコントローラー内でまったく同じコードを使用できます。
Route::get('language/{locale}', function ($locale) {
app()->setLocale($locale);
session()->put('locale', $locale);
return redirect()->back();
});
また、以前にプレウェルカムパスに追加されたロケール切り替えを削除することを忘れないでください。defi夜:
Route::get('/', function () {
return view('welcome');
});
これが完了すると、ユーザーが現在設定されている言語を変更する唯一の方法は、次のように入力することです。 localhost/language/{locale}
。 ザ・ locale
選択内容はセッション内に保存され、ユーザーを元の場所にリダイレクトします ( Localization
ミドルウェア)。 試すには、にアクセスしてください localhost/language/ru
(ブラウザにセッション Cookie が存在する限り) 翻訳されたコンテンツが表示されます。 Web サイト内を自由に移動したり、ページを更新して選択した言語が保持されていることを確認したりできます。
ここで、ローカル コードを URL に手動で入力する代わりに、ユーザーがクリックして言語を変更できるものを作成する必要があります。 これを行うために、非常に単純な言語チェッカーを追加します。 したがって、新しい resources/views/partials/language_switcher.blade.php
次のコードを含むファイル:
<div class="flex justify-center pt-8 sm:justify-start sm:pt-0">
@foreach($available_locales as $locale_name => $available_locale)
@if($available_locale === $current_locale)
<span class="ml-2 mr-2 text-gray-700">{{ $locale_name }}</span>
@else
<a class="ml-1 underline ml-2 mr-2" href="language/{{ $available_locale }}">
<span>{{ $locale_name }}</span>
</a>
@endif
@endforeach
</div>
新しく作成したスイッチャーを「ようこそ」ビューに含めます。
<body class="antialiased">
<div class="relative flex items-top justify-center min-h-screen bg-gray-100 dark:bg-gray-900 sm:items-center py-4 sm:pt-0">
<div class="max-w-6xl mx-auto sm:px-6 lg:px-8">
@include('partials/language_switcher')
<div class="flex justify-center pt-8 sm:justify-start sm:pt-0">
{{ __('Welcome to our website') }}
</div>
</div>
</div>
</body>
XNUMX月 app/Providers/AppServiceProvider.php
ファイルを作成し、言語スイッチャーが構成されるときに共有するコードを追加します。 具体的には、ファイルとしてアクセスできる現在のロケールを共有します {{ $current_locale }}
.
主に取り組んでいきます resources/views/welcome.blade.php
、したがって、特に指定がない限り、すべてがウェルカム ビューで発生する必要があります。
たとえば、一般的なメッセージを表示するだけでなく、架空のユーザー (Amanda) に挨拶してみましょう。
{{ __('Welcome to our website, :Name', ['name' => 'caroline']) }}
最初の文字を小文字にした名前を使用しましたが、最初の文字を大文字にしたプレースホルダーを使用したことに注意してください。 このように、Laravel は実際の単語を自動的に大文字にするのに役立ちます。 これは、プレースホルダーが大文字で始まる場合に発生します。たとえば、 :Name
「Caroline」または完全に大文字の単語を生成し、 :NAME
、「キャロライン」をプロデュース。
翻訳ファイルも更新します resources/lang/fr.json
e resources/lang/it.json
、翻訳キーが翻訳と一致しないため、現時点では英語版しか表示されません。
フランス語:
{
"Welcome to our website, :Name": "Bienvenue sur notre site, :Name"
}
イタリア語:
{
"Welcome to our website, :Name": "Benvenuto sul nostro sito web, :Name"
}
複数形化の動作を確認するために、テキストの新しい段落を追加してみましょう。
複数形を実行するには、関数を使用する必要があります trans_choice
の代わりに __()
、 例えば:
{{ __('Welcome to our website, :Name', ['name' => 'caroline']) }}
<br>
{{ trans_choice('There is one apple|There are many apples', 2) }}
ご覧のとおり、複数形は a で区切られています。 |
.
では、複数の複数形が必要な場合はどうでしょうか。
これも可能です:
{{ trans_choice('{0} There :form no apples|{1} There :form just :count apple|[2,19] There :form :count apples', 24) }}
この場合、数字を許可します 0
, 1
、そして、 2
a 19
、そして最後に20以降。 もちろん、必要なだけルールを追加できます。
では、複数形のプレースホルダーが必要な場合はどうすればよいでしょうか?
{{ trans_choice('{0} There :form no apples|{1} There :form just :count apple|[2,19] There :form :count apples', 24, ['form' => 'is']) }}
プレースホルダーを使用して、必要に応じて「trans_choice」で渡されたカウントを使用することもできます :count
特別:
{{ trans_choice('{0} There :form no apples|{1} There :form just :count apple|[2,19] There :form :count apples', 1, ['form' => 'is']) }}
最後に、基本翻訳に加えた変更で翻訳ファイルを更新することを忘れないでください。
イタリア語:
{
"Welcome to our website, :Name": "Benvenuto nel nostro sito, :Name",
"{0} There :form no apples|{1} There :form just :count apple|[2,19] There :form :count apples": "{0} Nessuna mela|{1} C'è:count mela|[2,19] Ci sono :count mele"
}
フランス語:
{
"Welcome to our website, :Name": "Bienvenue sur notre site, :Name",
"{0} There :form no apples|{1} There :form just :count apple|[2,19] There :form :count apples": "{0} Il n'y a pas de pommes|{1} Il n'y :form :count pomme|[2,19] Il y :form :count pommes"
}
日付を特定するために、 Carbon 、Laravel にデフォルトで付属していますdefiニタ。 をチェックしてください カーボンドキュメンテーション ; 面白いことがたくさんできます。 たとえば、日付と時刻のルールを使用してロケールを設定できます。
簡単な例として、選択した言語にローカライズされた現在の日付を表示します。 私たちの中で routes/web.php
、ようこそページのパスを更新し、ローカライズされた日付メッセージを私たちのものに渡します view
いらっしゃいませ:
<?php
Route::get('/', function () {
$today = \Carbon\Carbon::now()
->settings(
[
'locale' => app()->getLocale(),
]
);
// LL is macro placeholder for MMMM D, YYYY (you could write same as dddd, MMMM D, YYYY)
$dateMessage = $today->isoFormat('dddd, LL');
return view('welcome', [
'date_message' => $dateMessage
]);
});
更新しましょう resources/views/welcome.blade.php
次のように日付表示を追加します。
{{ __('Welcome to our website, :Name', ['name' => 'amanda']) }}
<br>
{{ trans_choice('{0} There :form :count apples|{1} There :form just :count apple|[2,19] There :form :count apples', 1, ['form' => 'is']) }}
<br>
{{ $date_message }}
のホームページの言語を変更しようとしています localhost
、日付がローカライズされていることがわかります。次に例を示します。
国が異なれば、人々はさまざまな形式を使用して数値を表します。次に例を示します。
したがって、これらの違いを Laravel アプリに反映するには、次を使用できます。 ナンバーフォーマッター 次のように:
<?php
$num = NumberFormatter::create('en_US', NumberFormatter::DECIMAL);
$num2 = NumberFormatter::create('fr', NumberFormatter::DECIMAL);
数値を特定の言語で書き、「XNUMX」のように表示することもできます。
<?php
$num = NumberFormatter::create('en_US', NumberFormatter::SPELLOUT);
$num2 = NumberFormatter::create('fr', NumberFormatter::SPELLOUT);
さらに、NumberFormatter を使用すると、次のような通貨を簡単に見つけることができます。
<?php
$currency1 = NumberFormatter::create('fr', NumberFormatter::CURRENCY);
$currency2 = NumberFormatter::create('en_US', NumberFormatter::CURRENCY);
だから fr
ユーロが表示されますが、 en_US
通貨は米ドルになります。
Ercole Palmeri
先週の月曜日、フィナンシャル・タイムズ紙はOpenAIとの契約を発表した。 FT は世界クラスのジャーナリズムにライセンスを供与しています…