如何将 Laravel Blade 中的第一个字母大写

Posted

技术标签:

【中文标题】如何将 Laravel Blade 中的第一个字母大写【英文标题】:How to capitalize first letter in Laravel Blade 【发布时间】:2015-12-05 23:59:20 【问题描述】:

我正在使用具有本地化功能的 laravel (5.1) 刀片模板引擎。

/resources/lang/en/ 文件夹中有一个语言文件messages.php

return [
    'welcome' => 'welcome',

在我的刀片模板中,欢迎消息是使用 trans 方法调用的:

 trans('messages.welcome') 

在某些情况下,我需要显示相同的消息,但首字母大写(“欢迎”)。我不想在翻译文件中使用重复记录。

我该如何处理?

【问题讨论】:

【参考方案1】:

使用 Laravel 助手 Str::title()

 Str::title('messages.welcome') 

【讨论】:

【参考方案2】:

我认为最好的选择是使用 CSS text-transform 属性

在您的 CSS 文件中:

.lowercase 
    text-transform: lowercase;

.uppercase 
    text-transform: uppercase;

.capitalize 
    text-transform: capitalize;

您的刀片 (html) 文件:

<p class="lowercase"> trans('messages.welcome') </p> <!-- This will display welcome -->
<p class="uppercase"> trans('messages.welcome') </p> <!-- This will display WELCOME -->
<p class="capitalize"> trans('messages.welcome') </p><!-- This will display Welcome -->

或者,对我来说最好的选择,使用引导程序

<p class="text-lowercase"> trans('messages.welcome') </p><!-- This will display welcome -->
<p class="text-uppercase"> trans('messages.welcome') </p><!-- This will display WELCOME -->
<p class="text-capitalize"> trans('messages.welcome') </p><!-- This will display Welcome -->

【讨论】:

【参考方案3】:

另一种使用 PHP 和刀片将首字母大写的方法。

控制器

return view('stock.uk-lse', ['name' => 'djan']);

查看

<h1> ucfirst($name) </h1>

【讨论】:

【参考方案4】:

在 app/Providers/AppServiceProvider 的 boot() 函数中添加一个刀片指令:

public function boot() 

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


这样您可以在刀片文件中使用以下内容:

@lang_u('messages.welcome')

哪个输出:欢迎

 

你是@lang_u('messages.welcome') :)

【讨论】:

小心这个,因为你的输出不会被转义,这会让你容易受到 XSS 的攻击。 @Maantje 谢谢,但仅限于某些特定用例。刀片指令@lang 也不会转义;这样,您可以在语言文件中使用 html。该指令通常用于从静态语言文件中检索文本,因此这并不危险。如果你想显示用户生成的输入,你当然应该转义它。【参考方案5】:

使用PHP原生的ucfirst函数:

 ucfirst(trans('messages.welcome')) 

【讨论】:

如果您有一个包含多个单词的字符串并且您希望每个单词都大写,则使用ucwords() 另外作为旁注,我相信使用什么版本的 laravel 并不重要,因为 .. ucfirst、lcfirst、ucwords 都是标准的 php 辅助函数。 lcfirst 是小写的,并且出现在 php 5.3+ 中,而我相信 ucfirst 和 ucwords 在 php 5.0 中。 遗憾的是,这不是多字节解决方案。您可以像这样使用 mb_convert_case( $x, MB_CASE_TITLE, 'UTF-8') 或 CSS: .my-class:first-letter text-变换:大写;

以上是关于如何将 Laravel Blade 中的第一个字母大写的主要内容,如果未能解决你的问题,请参考以下文章

在带有 Blade 的 Laravel 4 中看不到内容视图中的变量

将 Laravel 路由中的数组传递给 Blade 模板

将 Laravel 中的表单值传递给 Blade 模板

从 Laravel Blade 中的 JSON 中选择值

Laravel 中的 Blade 模板与普通 php

将 Laravel Blade 中的实时通知绑定为警报