<?php

namespace Illuminate\Translation;

use Illuminate\Support\ServiceProvider;
// namesapce
class TranslationServiceProvider extends ServiceProvider
{// son and father
    /**
     * Indicates if loading of the provider is deferred.
     *
     * @var bool
     */
    protected $defer = true;// wether provider indicates

    /**
     * Register the service provider.
     *
     * @return void
     */
    public function register()
    {// register the service provider
        $this->registerLoader();//set the register Loader

        $this->app->singleton('translator', function ($app) {
            $loader = $app['translation.loader'];// a singleton function

            // 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'];
            // 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.

            $trans = new Translator($loader, $locale);//get a instance

            $trans->setFallback($app['config']['app.fallback_locale']);// set Fall back

            return $trans;// return this 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']);
        });// use a big wrap function
    }// register loader

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