前提・実現したいこと
Laravelで多言語化をするにあたり、翻訳が空文字列だった場合は fallback_locale にフォールバックするようにヘルパ関数 __()
をオーバーライドしたいです
(翻訳ファイルに空文字列が含まれるのはCrowdinと連携して翻訳作業を行っており未翻訳の文字列は""
で処理されてしまうことによるものです)
現状
PHP
1// vendor/laravel/framework/src/Illuminate/Foundation/helpers.php 2 3if (! function_exists('__')) { 4 /** 5 * Translate the given message. 6 * 7 * @param string|null $key 8 * @param array $replace 9 * @param string|null $locale 10 * @return string|array|null 11 */ 12 function __($key = null, $replace = [], $locale = null) 13 { 14 if (is_null($key)) { 15 return $key; 16 } 17 18 return trans($key, $replace, $locale); 19 } 20}
こうしたい
PHP
1if(!function_exists('__')){ 2 /** 3 * Translate the given message. 4 * 5 * @param string|null $key 6 * @param array $replace 7 * @param string|null $locale 8 * @return string|array|null 9 */ 10 function __($key = null, $replace = [], $locale = null) 11 { 12 if (is_null($key)) { 13 return $key; 14 } 15 16 $get = trans($key, $replace, $locale); 17 // ひとまず現在のロケールで取得を試みる 18 19 return $get ?: trans($key, $replace, config('app.fallback_locale')); 20 // 空文字列だったなら、fallback_localeで取得 21 } 22}
※ 現状、これと同じコードを__fb()
という自作ヘルパで実装し意図した動作は得られています。が、IDEの補完機能の恩恵を得たいというのとオーバーライドができるのであればそれに越したことはないと思い質問をさせていただいた次第です。
お尋ねしたいこと
この場合、Laravelのヘルパ関数をオーバーライドする作法としてはどうするのが良いのでしょうか?
サービスコンテナについても調べてみましたがよく理解できませんでした... 私はあくまでヘルパ関数にちょっと追記するだけで用が足りるため、大本のクラスを変えるまでのことではないと思っていますが、この姿勢が正しいのかどうかもわかりません
補足情報(FW/ツールのバージョンなど)
FWのバージョン
- Laravel 6.18.10
読んでみた記事
回答2件
あなたの回答
tips
プレビュー