重用Laravel 5.2中的翻译

时间:2016-08-01 11:12:04

标签: php laravel laravel-5.2

我想知道是否可以在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重用翻译。

2 个答案:

答案 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')}}

这是一个有效的例子,可以帮助你扩展你的想法。