2015-09-09 8 views
18

ローカライゼーション機能を備えたlaravel(5.1)ブレードテンプレートエンジンを使用しています。私は表示する必要があるいくつかのケースではLaravel Bladeの最初の文字を大文字にする方法

{{ trans('messages.welcome') }} 

:ウェルカムメッセージがtransメソッドを使用して呼び出された私のブレードテンプレートで

return [ 
    'welcome' => 'welcome', 

/resources/lang/en/フォルダ内の言語ファイルmessages.phpあり同じメッセージですが、最初の文字は大文字で始まります(「ようこそ」)。私は翻訳ファイルで重複したレコードを使用したくありません。

これにはどのようにアプローチできますか?

答えて

45

使用PHPのネイティブucfirst機能:あなたのブレードに次のように使用することができます

public function boot() { 

    Blade::directive('lang_u', function ($s) { 
     return "<?php echo ucfirst(trans($s)); ?>"; 
    }); 

} 

この方法:

{{ ucfirst(trans('messages.welcome')) }} 
+0

や 'ucwords(使用)'あなたが複数の単語の文字列を持っていて、各単語が大文字になりたい場合は。 – orrd

+0

また、補足として、laravelのバージョンが使用されているかどうかは関係ありません.ucfirst、lcfirst、ucwordsはすべて標準のphpヘルパー関数です。 lcfirstはまずlowecaseで、php 5.3+に入ったところで、ucfirstとucwordsはPHP 5.0であったと私は信じています。 – Birdy

+1

悲しいことに、これはマルチバイトの解決策ではありません。mb_convert_case($ x、MB_CASE_TITLE、 'UTF-8')やCSSを次のように使用できます:.my-class:first-letter {text-transform:capitalize; } – SimZal

0

アプリ/プロバイダ/ AppServiceProviderのブート()関数に、ブレードディレクティブを追加します。ファイル:

@lang_u('messages.welcome') 

出力:Welcome

 

あなたは@lang_u( 'messages.welcome')だ:)

+0

あなたの出力がエスケープされないように注意してください。これはあなたをXSSに脆弱にします。 – Maantje

+0

@Maantjeありがとうございます。ブレードディレクティブ@ langもエスケープしません。この方法では、言語ファイルでhtmlを使用できます。このディレクティブは通常、静的言語ファイルからテキストを取得するために使用されるため、危険ではありません。ユーザーが生成した入力を表示したい場合は、もちろんそれをエスケープする必要があります。 – Pim

関連する問題