2011-08-18 19:56:29 -05:00
|
|
|
<?php namespace Laravel;
|
2011-06-08 23:45:08 -05:00
|
|
|
|
2011-09-03 22:36:27 -05:00
|
|
|
class Lang {
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* All of the loaded language lines.
|
|
|
|
|
*
|
|
|
|
|
* The array is keyed by [$language.$file].
|
2011-08-29 22:11:40 -05:00
|
|
|
*
|
|
|
|
|
* @var array
|
|
|
|
|
*/
|
2011-09-08 17:49:16 -05:00
|
|
|
protected static $lines = array();
|
2011-08-29 22:11:40 -05:00
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* The key of the language line being retrieved.
|
2011-08-24 22:51:32 -05:00
|
|
|
*
|
|
|
|
|
* @var string
|
|
|
|
|
*/
|
2011-09-08 17:49:16 -05:00
|
|
|
protected $key;
|
2011-08-24 22:51:32 -05:00
|
|
|
|
2011-06-08 23:45:08 -05:00
|
|
|
/**
|
2011-08-29 22:11:40 -05:00
|
|
|
* The replacements that should be made on the language line.
|
2011-06-08 23:45:08 -05:00
|
|
|
*
|
|
|
|
|
* @var array
|
|
|
|
|
*/
|
2011-09-08 17:49:16 -05:00
|
|
|
protected $replacements;
|
2011-08-29 22:11:40 -05:00
|
|
|
|
|
|
|
|
/**
|
2011-09-08 17:49:16 -05:00
|
|
|
* The language in which the line should be retrieved.
|
2011-08-29 22:13:32 -05:00
|
|
|
*
|
2011-08-29 22:11:40 -05:00
|
|
|
* @var string
|
|
|
|
|
*/
|
2011-09-08 17:49:16 -05:00
|
|
|
protected $language;
|
2011-06-08 23:45:08 -05:00
|
|
|
|
|
|
|
|
/**
|
2011-09-03 22:36:27 -05:00
|
|
|
* The paths containing the language files.
|
2011-06-08 23:45:08 -05:00
|
|
|
*
|
2011-09-03 22:36:27 -05:00
|
|
|
* @var array
|
2011-06-08 23:45:08 -05:00
|
|
|
*/
|
2011-09-08 17:49:16 -05:00
|
|
|
protected $paths;
|
2011-06-08 23:45:08 -05:00
|
|
|
|
|
|
|
|
/**
|
2011-09-03 22:36:27 -05:00
|
|
|
* Create a new Lang instance.
|
2011-08-24 22:51:32 -05:00
|
|
|
*
|
2011-06-08 23:45:08 -05:00
|
|
|
* @param string $key
|
2011-07-21 08:18:49 -07:00
|
|
|
* @param array $replacements
|
2011-09-03 22:36:27 -05:00
|
|
|
* @param string $language
|
2011-09-21 21:46:16 -05:00
|
|
|
* @param array $paths
|
2011-09-03 22:36:27 -05:00
|
|
|
* @return void
|
2011-06-08 23:45:08 -05:00
|
|
|
*/
|
2011-09-21 21:46:16 -05:00
|
|
|
protected function __construct($key, $replacements = array(), $language = null, $paths = array())
|
2011-06-08 23:45:08 -05:00
|
|
|
{
|
2011-08-29 22:11:40 -05:00
|
|
|
$this->key = $key;
|
2011-09-21 21:46:16 -05:00
|
|
|
$this->paths = $paths;
|
2011-09-03 22:36:27 -05:00
|
|
|
$this->language = $language;
|
2011-08-29 22:11:40 -05:00
|
|
|
$this->replacements = $replacements;
|
2011-06-08 23:45:08 -05:00
|
|
|
}
|
|
|
|
|
|
2011-09-20 23:14:09 -05:00
|
|
|
/**
|
|
|
|
|
* Create a new language line instance.
|
|
|
|
|
*
|
|
|
|
|
* @param string $key
|
|
|
|
|
* @param array $replacements
|
|
|
|
|
* @param string $language
|
2011-09-21 21:46:16 -05:00
|
|
|
* @param array $paths
|
2011-09-20 23:14:09 -05:00
|
|
|
* @return Lang
|
|
|
|
|
*/
|
2011-09-21 21:46:16 -05:00
|
|
|
public static function line($key, $replacements = array(), $language = null, $paths = array())
|
2011-09-20 23:14:09 -05:00
|
|
|
{
|
2011-09-21 21:46:16 -05:00
|
|
|
if (count($paths) == 0) $paths = array(SYS_LANG_PATH, LANG_PATH);
|
|
|
|
|
|
|
|
|
|
return new static($key, $replacements, $language, $paths);
|
2011-09-20 23:14:09 -05:00
|
|
|
}
|
|
|
|
|
|
2011-06-08 23:45:08 -05:00
|
|
|
/**
|
2011-06-22 06:52:10 -07:00
|
|
|
* Get the language line.
|
2011-06-08 23:45:08 -05:00
|
|
|
*
|
2011-07-12 20:04:14 -05:00
|
|
|
* @param string $language
|
2011-09-08 17:49:16 -05:00
|
|
|
* @param string $default
|
2011-06-08 23:45:08 -05:00
|
|
|
* @return string
|
|
|
|
|
*/
|
2011-09-08 17:49:16 -05:00
|
|
|
public function get($language = null, $default = null)
|
2011-06-08 23:45:08 -05:00
|
|
|
{
|
2011-09-08 17:49:16 -05:00
|
|
|
if ( ! is_null($language)) $this->language = $language;
|
|
|
|
|
|
2011-08-24 22:51:32 -05:00
|
|
|
list($file, $line) = $this->parse($this->key);
|
2011-06-08 23:45:08 -05:00
|
|
|
|
2011-08-24 22:51:32 -05:00
|
|
|
if ( ! $this->load($file))
|
2011-08-02 20:20:17 -05:00
|
|
|
{
|
2011-08-26 00:31:18 -05:00
|
|
|
return ($default instanceof \Closure) ? call_user_func($default) : $default;
|
2011-08-02 20:20:17 -05:00
|
|
|
}
|
|
|
|
|
|
2011-09-03 22:36:27 -05:00
|
|
|
$line = Arr::get(static::$lines[$this->language.$file], $line, $default);
|
2011-07-12 20:04:14 -05:00
|
|
|
|
2011-06-08 23:45:08 -05:00
|
|
|
foreach ($this->replacements as $key => $value)
|
|
|
|
|
{
|
|
|
|
|
$line = str_replace(':'.$key, $value, $line);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return $line;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Parse a language key.
|
|
|
|
|
*
|
|
|
|
|
* @param string $key
|
|
|
|
|
* @return array
|
|
|
|
|
*/
|
2011-09-08 17:49:16 -05:00
|
|
|
protected function parse($key)
|
2011-06-08 23:45:08 -05:00
|
|
|
{
|
2011-08-08 10:44:03 -05:00
|
|
|
if (count($segments = explode('.', $key)) > 1)
|
|
|
|
|
{
|
2011-08-24 22:51:32 -05:00
|
|
|
return array($segments[0], implode('.', array_slice($segments, 1)));
|
2011-08-08 10:44:03 -05:00
|
|
|
}
|
2011-06-08 23:45:08 -05:00
|
|
|
|
2011-08-03 22:10:07 -05:00
|
|
|
throw new \Exception("Invalid language line [$key]. A specific line must be specified.");
|
2011-06-08 23:45:08 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Load a language file.
|
|
|
|
|
*
|
|
|
|
|
* @param string $file
|
2011-08-18 23:23:57 -05:00
|
|
|
* @return bool
|
2011-06-08 23:45:08 -05:00
|
|
|
*/
|
2011-09-08 17:49:16 -05:00
|
|
|
protected function load($file)
|
2011-06-08 23:45:08 -05:00
|
|
|
{
|
2011-09-03 22:36:27 -05:00
|
|
|
if (isset(static::$lines[$this->language.$file])) return;
|
2011-08-03 22:10:07 -05:00
|
|
|
|
2011-08-24 22:51:32 -05:00
|
|
|
$language = array();
|
2011-08-18 23:23:57 -05:00
|
|
|
|
2011-09-21 21:46:16 -05:00
|
|
|
foreach ($this->paths as $directory)
|
2011-06-08 23:45:08 -05:00
|
|
|
{
|
2011-09-03 22:36:27 -05:00
|
|
|
if (file_exists($path = $directory.$this->language.'/'.$file.EXT))
|
2011-08-24 22:51:32 -05:00
|
|
|
{
|
|
|
|
|
$language = array_merge($language, require $path);
|
|
|
|
|
}
|
2011-06-08 23:45:08 -05:00
|
|
|
}
|
2011-08-18 23:23:57 -05:00
|
|
|
|
2011-09-06 22:26:14 -05:00
|
|
|
if (count($language) > 0) static::$lines[$this->language.$file] = $language;
|
2011-08-18 23:23:57 -05:00
|
|
|
|
2011-09-03 22:36:27 -05:00
|
|
|
return isset(static::$lines[$this->language.$file]);
|
2011-06-08 23:45:08 -05:00
|
|
|
}
|
|
|
|
|
|
2011-07-21 08:32:59 -07:00
|
|
|
/**
|
|
|
|
|
* Get the string content of the language line.
|
|
|
|
|
*/
|
|
|
|
|
public function __toString()
|
|
|
|
|
{
|
|
|
|
|
return $this->get();
|
|
|
|
|
}
|
|
|
|
|
|
2011-06-08 23:45:08 -05:00
|
|
|
}
|