在Laravel 5.7中,文档说要使用以下语法来检索语言环境
{{ __ ('my.locale')}}
但我注意到
{{Lang::get('my.locale')}}
也可以使用,实际上,以前的版本中也使用过。
这两者之间是否有根本区别,还是只是语法有所改变?
答案 0 :(得分:0)
如果使用json转换文件,则可能必须使用__()
或@lang
。除此之外,语法没有改变。他们最终都会归因于\Illuminate\Translation\Translator::get()
。
这些都可以通过Blade文件运行:
@lang('...')
{{ __('...') }}
{{ Lang::get('...') }}
{{ trans('...') }}
{{ app('translator')->get('...') }}
{{ Lang::trans('...') }}
({@lang
不会转义输出,因此,如果使用它,则需要将转义的字符串存储在翻译文件中)
如果您想更深入地学习,则会有一些 细微变化。例如,__()
:
/**
* Translate the given message.
*
* @param string $key
* @param array $replace
* @param string $locale
* @return string|array|null
*/
function __($key, $replace = [], $locale = null)
{
return app('translator')->getFromJson($key, $replace, $locale);
}
您可以看到它正在使用getFromJson()
。这是一个片段directly from that method,如果在您的json文件中找不到任何内容,它会回落到get()
:
// If we can't find a translation for the JSON key, we will attempt to translate it
// using the typical translation file. This way developers can always just use a
// helper such as __ instead of having to pick between trans or __ with views.
if (! isset($line)) {
$fallback = $this->get($key, $replace, $locale);
if ($fallback !== $key) {
return $fallback;
}
}
然后是trans()
,无非是别名:
public function trans($key, array $replace = [], $locale = null)
{
return $this->get($key, $replace, $locale);
}