master

laravel/framework

Last updated at: 29/12/2023 09:25

TranslationServiceProvider.php

TLDR

This file is the implementation of the TranslationServiceProvider class in the Illuminate\Translation namespace. It extends the ServiceProvider class and implements the DeferrableProvider interface. It is responsible for registering the translation service provider and the translation line loader.

Methods

register

This method is responsible for registering the translation service provider. It registers the loader and sets up the translator with the default and fallback locales.

registerLoader

This method is responsible for registering the translation line loader. It creates a new instance of the FileLoader class and binds it into the container.

provides

This method returns an array of services provided by the provider: translator and translation.loader.

<?php

namespace Illuminate\Translation;

use Illuminate\Contracts\Support\DeferrableProvider;
use Illuminate\Support\ServiceProvider;

class TranslationServiceProvider extends ServiceProvider implements DeferrableProvider
{
    /**
     * 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->getLocale();

            $trans = new Translator($loader, $locale);

            $trans->setFallback($app->getFallbackLocale());

            return $trans;
        });
    }

    /**
     * Register the translation line loader.
     *
     * @return void
     */
    protected function registerLoader()
    {
        $this->app->singleton('translation.loader', function ($app) {
            return new FileLoader($app['files'], [__DIR__.'/lang', $app['path.lang']]);
        });
    }

    /**
     * Get the services provided by the provider.
     *
     * @return array
     */
    public function provides()
    {
        return ['translator', 'translation.loader'];
    }
}