load($overwrite); } catch (\LangException $e) { $lang = array(); } $group = $group === true ? $file->group() : $group; } isset(static::$lines[$language]) or static::$lines[$language] = array(); if ($group === null) { static::$lines[$language] = $overwrite ? array_merge(static::$lines[$language], $lang) : \Arr::merge(static::$lines[$language], $lang); } else { $group = ($group === true) ? $file : $group; if ($overwrite) { \Arr::set(static::$lines[$language], $group, array_merge(\Arr::get(static::$lines[$language], $group, array()), $lang)); } else { \Arr::set(static::$lines[$language], $group, \Arr::merge(\Arr::get(static::$lines[$language], $group, array()), $lang)); } } return $lang; } /** * Save a language array to disk. * * @param string $file desired file name * @param string|array $lang master language array key or language array * @param string|null $language name of the language to load, null for the configured language * @return bool false when language is empty or invalid else \File::update result * @throws \LangException */ public static function save($file, $lang, $language = null) { ($language === null) and $language = static::get_lang(); // prefix the file with the language if ( ! is_null($language)) { $file = explode('::', $file); end($file); $file[key($file)] = $language.DS.end($file); $file = implode('::', $file); } if ( ! is_array($lang)) { if ( ! isset(static::$lines[$language][$lang])) { return false; } $lang = static::$lines[$language][$lang]; } $type = pathinfo($file, PATHINFO_EXTENSION); if( ! $type) { $type = 'php'; $file .= '.'.$type; } $class = '\\Lang_'.ucfirst($type); if( ! class_exists($class, true)) { throw new \LangException('Cannot save a language file of type: '.$type); } $driver = new $class; return $driver->save($file, $lang); } /** * Returns a (dot notated) language string * * @param string $line key for the line * @param array $params array of params to str_replace * @param mixed $default default value to return * @param string|null $language name of the language to get, null for the configured language * @return mixed either the line or default when not found */ public static function get($line, array $params = array(), $default = null, $language = null) { ($language === null) and $language = static::get_lang(); return isset(static::$lines[$language]) ? \Str::tr(\Fuel::value(\Arr::get(static::$lines[$language], $line, $default)), $params) : $default; } /** * Sets a (dot notated) language string * * @param string $line a (dot notated) language key * @param mixed $value the language string * @param string $group group * @param string|null $language name of the language to set, null for the configured language * @return void the \Arr::set result */ public static function set($line, $value, $group = null, $language = null) { $group === null or $line = $group.'.'.$line; ($language === null) and $language = static::get_lang(); isset(static::$lines[$language]) or static::$lines[$language] = array(); \Arr::set(static::$lines[$language], $line, \Fuel::value($value)); } /** * Deletes a (dot notated) language string * * @param string $item a (dot notated) language key * @param string $group group * @param string|null $language name of the language to set, null for the configured language * @return array|bool the \Arr::delete result, success boolean or array of success booleans */ public static function delete($item, $group = null, $language = null) { $group === null or $item = $group.'.'.$item; ($language === null) and $language = static::get_lang(); return isset(static::$lines[$language]) ? \Arr::delete(static::$lines[$language], $item) : false; } /** * Sets the current language, and optionally reloads all language files loaded in another language * * @param string $language name of the language to activate * @param bool $reload true to force a reload of already loaded language files * @return bool success boolean, false if no language or the current was passed, true otherwise */ public static function set_lang($language, $reload = false) { // check if a language was passedd if ( ! empty($language) and $language != static::get_lang()) { // set it \Config::set('language', $language); // do we need to reload? if ($reload) { foreach (static::$loaded_files as $file => $args) { // reload with exactly the same arguments if (strpos($file, $language.'/') !== 0) { call_user_func_array('Lang::load', $args); } } } // return success return true; } // no language or the current language was passed return false; } }