0
0

More than 3 years have passed since last update.

Laravelで指定の言語で翻訳があるかどうかの判定をしたい

Posted at

はじめに

こんにちは。ひそかに保持しているビットコインがついに800%を超えました、筆者です :smile:

Laravelで多言語サイトの構築をしているのですが、指定の言語で翻訳があるかどうかの判定をしたいケースがありました。

先入観にとらわれ地味にうまくいかなかったので記事にしました。
参考にしてくださいませ。

前提

翻訳ファイル

resources/lang/ja/messages.php
return [
];
resources/lang/en/messages.php
return [
    'title' => 'Hello',
];

設定ファイル

config/app.php
return [
    'fallback_locale' => 'en',
];

悪い例:sob:

App::setLocale('ja');
$has = \Illuminate\Support\Facades\Lang::has('messages.title');
dump($has); // true

App::setLocale('en');
$has = \Illuminate\Support\Facades\Lang::has('messages.title');
dump($has); // true

良い例:thumbsup:

App::setLocale('ja');
$has = \Illuminate\Support\Facades\Lang::hasForLocale('messages.title');
dump($has); // false

App::setLocale('en');
$has = \Illuminate\Support\Facades\Lang::hasForLocale('messages.title');
dump($has); // true

結論

\Illuminate\Support\Facades\Lang::hasでは、設定ファイルにfallback_localeを設定している場合、指定の言語で翻訳が無い場合にそちらの値が採用されてしまいます。
そのため、jaに翻訳が無くても、enを見に行ってあるので、trueが返ってしまいます。

fallback_localeを無視して翻訳のあるかどうかの判定をする場合は、\Illuminate\Support\Facades\Lang::hasForLocaleを使ってください!

おわりに

hasでも第3引数にfalse渡せば同じですが、引数3つ渡さないといけないので、hasForLocaleが便利です:thumbsup:

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0