我想知道是否可以在Laravel 5.2中重用本地化翻译。这样的东西,或更好的真实全局可访问密钥,直接使用brand
,而不是键入文件夹或文件名(在此示例中为global
)。
// resources/lang/en/global.php
return [
'brand' => 'Stackoverflow',
'my' => 'My :attribute',
'my_brand' => trans('global.my', ['attribute' => trans('global.brand')])
];
希望他们能够通过Laravel重用翻译。
答案 0 :(得分:0)
您应该能够使用View Composer将翻译全局注入应用程序的所有视图中。您应遵循的步骤如下。
composer类应该看起来像这样,它的命名空间应该是App \ Http \ ViewComposers(App可以根据应用程序的命名空间而不同)
class TranslationsComposer
{
protected $translations;
public function __construct()
{
$this->translations = [
'brand' => trans('global.brand'),
'my' => trans('global.my'),
];
}
public function compose(View $view)
{
$view->with('translations', $this->translations);
}
}
您可以使用循环来获取翻译,但这是一个简单的示例,只是为了演示方式。
现在对于服务提供商,你应该使用类似这样的东西
namespace App\Http\ViewComposers;
use Illuminate\Contracts\View\View;
use Illuminate\Users\Repository as UserRepository;
class ComposerServiceProvider extends ServiceProvider
{
public function boot()
{
view()->composer(
'*','App\Http\ViewComposers\TranslationsComposer'
);
}
public function register()
{
//
}
}
执行此操作后,您应该能够在刀片模板中将这些变量用作{{translations.brand}}。
您可以在Laravel官方文档中找到有关视图作曲家的更多信息 https://laravel.com/docs/5.1/views
答案 1 :(得分:0)
您可以创建自己的帮助文件来解析lang变量。
步骤1:在App \ Helpers中创建扩展名为.php的文件。任何文件名(扩展名为.php)都应由Helper ServiceProvider自动加载。在你的HelperServiceProvider中,你应该找到一些代码如下:
public function register()
{
foreach (glob(app_path().'/Helpers/*.php') as $filename){
require_once($filename);
}
}
步骤2:在新的帮助文件中创建一个函数,如下所示:
if(! function_exists('my_trans')){
function my_trans($key){
// load all the lang variable as an array here which should look like as below
$lang = [
'key1'=>'value1',
'key2'=>'value2',
'key3'=>'value3',
'key4'=>'value4',
'key5'=>'value5'
];
return $lang[$key];
}
}
步骤3:使用刀片文件中的密钥调用该功能,如下所示:
{{my_trans('key2')}}
这是一个有效的例子,可以帮助你扩展你的想法。