我想为Illuminate\Translate\Translator
实现一些额外的功能。
所以,我在~/vendor
目录中创建我的文件夹,放置My/Traslator
类,它将实现Symfony\Component\Translation\TranslatorInterface
。正确?
在我的包中扩展laravel翻译类(否则会复制很多功能)是否可以?
如果没问题 - 将需要绑定到当前的laravel版本以保持代码稳定。但是,如果最终用户laravel版本与我的包中所需的版本不同,会发生什么?
我应该怎么做才能让laravel在应用程序中使用我的翻译类(外墙等)?
答案 0 :(得分:3)
此页面包含更多信息:http://laravel.com/docs/5.0/extending#container-based-extension
所以你需要做的是:
现在,当您从服务容器中直接(app('translator')
)或使用Lang
外观要求翻译服务提供商时,它将返回您的翻译课程而不是Laravel的。
答案 1 :(得分:0)
制作一个Translator类,并将其扩展为Illuminate\Translation\Translator
<?php
namespace App\Helpers;
use Illuminate\Translation\Translator as LaravelTranslator;
class Translator extends LaravelTranslator
{
// here you can overwrite any functions you want/need
}
在TranslationServiceProvider
内创建自己的app/providers
(只需复制laravel翻译服务提供商,并将其使用Translator的行更改为您自己的Translator类,其中您已覆盖所需的内容)< / p>
<?php
namespace App\Providers;
use App\Helpers\Translator; // <= Your own class
use Illuminate\Translation\FileLoader;
use Illuminate\Support\ServiceProvider;
class TranslationServiceProvider extends ServiceProvider
{
/**
* Register the service provider.
*
* @return void
*/
public function register()
{
$this->registerLoader();
$this->app->singleton('translator', function ($app) {
$loader = $app['translation.loader'];
// When registering the translator component, we'll need to set the default
// locale as well as the fallback locale. So, we'll grab the application
// configuration so we can easily get both of these values from there.
$locale = $app['config']['app.locale'];
$trans = new Translator($loader, $locale);
$trans->setFallback($app['config']['app.fallback_locale']);
return $trans;
});
}
/**
* Register the translation line loader.
*
* @return void
*/
protected function registerLoader()
{
$this->app->singleton('translation.loader', function ($app) {
return new FileLoader($app['files'], $app['path.lang']);
});
}
/**
* Get the services provided by the provider.
*
* @return array
*/
public function provides()
{
return ['translator', 'translation.loader'];
}
}
注释或删除config / app.php中的Laravels转换器服务行:
//Illuminate\Translation\TranslationServiceProvider::class,
在同一阵列中添加您自己的提供程序
App\Providers\TranslationServiceProvider::class,