在 Blade 文件中使用哪种语法进行翻译?
Which syntax to use to translate in Blade files?
我正在使用 Laravel 8,我想翻译一个网站。由于我有很多翻译要做,我将使用“翻译字符串作为关键字”(请参阅Laravel documentation)。
我可以在我的 Blade 文件中使用以下两种方法。
{{ __('A propos') }}
或
@lang('A propos')
我的问题是:你用什么方法,为什么?
我真的更喜欢使用 __ 辅助函数。如果你深入研究,你会发现这个辅助函数在功能和灵活性方面非常酷。除了翻译字符串,它还接收 2 个其他参数。一个是 replace[] 另一个是 local.
if (! function_exists('__')) {
/**
* Translate the given message.
*
* @param string|null $key
* @param array $replace
* @param string|null $locale
* @return string|array|null
*/
function __($key = null, $replace = [], $locale = null)
{
if (is_null($key)) {
return $key;
}
return trans($key, $replace, $locale);
}
}
因此我们可以使用此函数使用键执行翻译,并且在奖励中还可以用 第二个参数 中传递的值替换翻译。不仅如此,我们还可以选择在第三个参数.
中指定我们需要翻译的语言
其次,我们可以在项目的任何地方使用这个函数,无论是在Laravel控制器,视图等
另一方面,我们有 blade 指令 @lang()。我在供应商的任何地方都找不到它的定义,但我确信您只能在 blade 模板中使用它。此外,它没有 replace[] 和 locale 参数灵活性,就像 __() 辅助函数一样。
在辩论结束时,我真的会选择 __() 辅助函数,因为它灵活、可重用且文档完善。
对于任何需要上述方法的最佳组合的人(比如我),只需使用 @tr(...)
指令,例如:
@tr('My :app says hello!', ['app' => env('APP_NAME')])
但要使上述功能正常运行,请在您的 AppServiceProvider.php
文件中(在 app/Providers
目录中)执行以下操作:
<?php
namespace App\Providers;
use Illuminate\Support\Facades\Blade;
use Illuminate\Support\ServiceProvider;
class AppServiceProvider extends ServiceProvider
{
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
Blade::directive('tr', function ($expression) {
return "<?php echo __($expression); ?>";
});
}
}
PhpStorm
创建指令后,启用 auto-completion:
在 IDE 设置中,转到 Languages & Frameworks > PHP > Blade
。
禁用复选框Use default settings
。
然后切换到Directives
选项卡,添加新指令,设置为:
- 姓名:
tr
- 前缀:
<?php echo __(
- 后缀:
); ?>
我正在使用 Laravel 8,我想翻译一个网站。由于我有很多翻译要做,我将使用“翻译字符串作为关键字”(请参阅Laravel documentation)。
我可以在我的 Blade 文件中使用以下两种方法。
{{ __('A propos') }}
或
@lang('A propos')
我的问题是:你用什么方法,为什么?
我真的更喜欢使用 __ 辅助函数。如果你深入研究,你会发现这个辅助函数在功能和灵活性方面非常酷。除了翻译字符串,它还接收 2 个其他参数。一个是 replace[] 另一个是 local.
if (! function_exists('__')) {
/**
* Translate the given message.
*
* @param string|null $key
* @param array $replace
* @param string|null $locale
* @return string|array|null
*/
function __($key = null, $replace = [], $locale = null)
{
if (is_null($key)) {
return $key;
}
return trans($key, $replace, $locale);
}
}
因此我们可以使用此函数使用键执行翻译,并且在奖励中还可以用 第二个参数 中传递的值替换翻译。不仅如此,我们还可以选择在第三个参数.
中指定我们需要翻译的语言其次,我们可以在项目的任何地方使用这个函数,无论是在Laravel控制器,视图等
另一方面,我们有 blade 指令 @lang()。我在供应商的任何地方都找不到它的定义,但我确信您只能在 blade 模板中使用它。此外,它没有 replace[] 和 locale 参数灵活性,就像 __() 辅助函数一样。
在辩论结束时,我真的会选择 __() 辅助函数,因为它灵活、可重用且文档完善。
对于任何需要上述方法的最佳组合的人(比如我),只需使用 @tr(...)
指令,例如:
@tr('My :app says hello!', ['app' => env('APP_NAME')])
但要使上述功能正常运行,请在您的 AppServiceProvider.php
文件中(在 app/Providers
目录中)执行以下操作:
<?php
namespace App\Providers;
use Illuminate\Support\Facades\Blade;
use Illuminate\Support\ServiceProvider;
class AppServiceProvider extends ServiceProvider
{
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
Blade::directive('tr', function ($expression) {
return "<?php echo __($expression); ?>";
});
}
}
PhpStorm
创建指令后,启用 auto-completion:
在 IDE 设置中,转到
Languages & Frameworks > PHP > Blade
。禁用复选框
Use default settings
。然后切换到
Directives
选项卡,添加新指令,设置为:- 姓名:
tr
- 前缀:
<?php echo __(
- 后缀:
); ?>
- 姓名: