如何在Laravel Blade中将首字母大写

58

我正在使用带有本地化功能的 Laravel (5.1) Blade 模板引擎。

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

return [
    'welcome' => 'welcome',

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

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

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

我该如何处理?

7个回答

127

使用 PHP 的本地 ucfirst 函数:

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

16
如果你有一个包含多个单词的字符串,并且想要每个单词的首字母大写,可以使用 ucwords() 函数。 - orrd
1
另外顺带一提,我认为使用哪个版本的laravel并不重要,因为ucfirst、lcfirst和ucwords都是标准的php辅助函数。lcfirst是小写首字母,出现在php 5.3+中,而ucfirst和ucwords则出现在php 5.0中。 - Birdy
2
遗憾的是,这不是一个多字节解决方案...你可以使用mb_convert_case($x, MB_CASE_TITLE, 'UTF-8')或者像这样的CSS:.my-class:first-letter { text-transform: capitalize; } - SimZal

9

使用 Laravel 帮助函数 Str::title()

{{ Str::title('messages.welcome') }}

这将使所有单词大写 - Reign.85
如果有超过一个单词,就提取所有的首字母,对于名词来说这样做是很好的,包括名字和姓氏。 - Amir Khan

4
在app/Providers/AppServiceProvider的boot()方法中添加一个blade指令:
public function boot() {

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

}

这样您就可以在Blade文件中使用以下内容:
@lang_u('messages.welcome')

输出结果为:欢迎

 

您好,欢迎光临!


1
小心这个,因为你的输出不会被转义,这会让你容易受到 XSS 攻击。 - Maantje
@Maantje 谢谢,但只适用于某些特定的用例。blade指令@lang也不会进行转义;这样,您可以在语言文件中使用HTML。该指令通常用于从静态语言文件中检索文本,因此不会存在危险。如果您想显示用户生成的输入,则当然应该对其进行转义。 - Pim

3

使用PHP和Blade让首字母大写的另一种方法。

控制器

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

查看视图。
<h1>{{ ucfirst($name) }}</h1>

2
我认为最好的选择是使用CSS的text-transform属性。
在你的CSS文件中:
.lowercase {
    text-transform: lowercase;
}
.uppercase {
    text-transform: uppercase;
}
.capitalize {
    text-transform: capitalize;
}

你的 blade (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 -->

或者,对我而言最好的选择是使用Bootstrap

<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 -->

1
{{ ucfirst(strtolower(trans('messages.welcome'))) }}

如果您使用上面的代码,即使字符串包含多个大写字母,也可以确保仅有第一个字母被大写。

1

Laravel提供了类Str,其中包含许多字符串格式化函数。

要将所有单词的首字母大写:

Str::title($string)

将第一个单词的首字母大写:

Str::ucfirst($string)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接