<?php
namespace Illuminate\Translation;
use Illuminate\Filesystem\Filesystem;
class FileLoader implements LoaderInterface
{// FileLoader implements Loader Interface
/**
* The filesystem instance.
*
* @var \Illuminate\Filesystem\Filesystem
*/
protected $files;//The filesystem instance.
/**
* The default path for the loader.
*
* @var string
*/
protected $path;//The default path for the loader.
/**
* All of the namespace hints.
*
* @var array
*/
protected $hints = [];// All of the namespace hints.
/**
* Create a new file loader instance.
*
* @param \Illuminate\Filesystem\Filesystem $files
* @param string $path
* @return void
*/
public function __construct(Filesystem $files, $path)
{
$this->path = $path;// path
$this->files = $files;// files
}//Create a new file loader instance.
/**
* Load the messages for the given locale.
*
* @param string $locale
* @param string $group
* @param string $namespace
* @return array
*/
public function load($locale, $group, $namespace = null)
{
if (is_null($namespace) || $namespace == '*') {
return $this->loadPath($this->path, $locale, $group);// two type,one is loadPath
}//locale group and namespace
return $this->loadNamespaced($locale, $group, $namespace);// Load Namespace
}//Load the messages for the given locale.
/**
* Load a namespaced translation group.
*
* @param string $locale
* @param string $group
* @param string $namespace
* @return array
*/
protected function loadNamespaced($locale, $group, $namespace)
{//Load a namespaced translation group
if (isset($this->hints[$namespace])) {// if it is set
$lines = $this->loadPath($this->hints[$namespace], $locale, $group);//get this line
return $this->loadNamespaceOverrides($lines, $locale, $group, $namespace);// return a wrap function
}
return [];//default null
}
/**
* Load a local namespaced translation group for overrides.
*
* @param array $lines
* @param string $locale
* @param string $group
* @param string $namespace
* @return array
*/
protected function loadNamespaceOverrides(array $lines, $locale, $group, $namespace)
{//another load space
$file = "{$this->path}/vendor/{$namespace}/{$locale}/{$group}.php";//get this file
if ($this->files->exists($file)) {// if it is exists
return array_replace_recursive($lines, $this->files->getRequire($file));
}// return this thing
return $lines;// return line
}
/**
* Load a locale from a given path.
*
* @param string $path
* @param string $locale
* @param string $group
* @return array
*/
protected function loadPath($path, $locale, $group)
{
if ($this->files->exists($full = "{$path}/{$locale}/{$group}.php")) {
return $this->files->getRequire($full);
}// like include file by path ,the full is the full path
return [];// null
}//load a locale from a given path
/**
* Add a new namespace to the loader.
*
* @param string $namespace
* @param string $hint
* @return void
*/
public function addNamespace($namespace, $hint)
{
$this->hints[$namespace] = $hint;
}// addNamespace
//Add a new namespace to the loader
}