| 
<?php
 
 namespace PHPtricks\Logaty;
 
 
 use PHPtricks\Logaty\Helpers\Config;
 use PHPtricks\Logaty\Helpers\Detect;
 use PHPtricks\Logaty\Helpers\Link;
 use PHPtricks\Logaty\Helpers\Switcher;
 use PHPtricks\Logaty\Translate\Translator;
 
 class App
 {
 public function __construct()
 {
 $this->config = new Config();
 $this->link = new Link($this);
 $this->detect = new Detect();
 $this->trans = new Translator($this);
 $this->switcher = new Switcher($this);
 }
 
 /**
 * to use object as function
 * @param $string
 * @param string $lang
 * @return string
 *
 * @uses logaty(STRING, LANG-CODE);
 */
 public function __invoke($string, $lang = '')
 {
 return $this->_x($string, $lang);
 }
 
 
 /**
 * if we call a method like a property
 * we need to call a method correctly
 * @param $property
 * @return mixed|null
 */
 public function __get($property)
 {
 if(method_exists($this, $property))
 {
 if($property == 'default')
 return $this->defaultLang();
 
 return $this->$property();
 }
 
 return null;
 }
 
 
 /**
 * get root directory for our Library
 * @return string
 */
 public function rootDir()
 {
 return dirname(__DIR__) . DIRECTORY_SEPARATOR;
 }
 
 /**
 * get config value from config files
 * @param string $path
 * @return mixed|Config|null
 *
 * @uses   logaty()->config(file-name.config-name); // return value for key
 * @uses   logaty()->config(); // return all configurations
 */
 public function config($path = '')
 {
 return (
 $path ?
 $this->config->get($path) :
 $this->config->get()
 );
 }
 
 /**
 * get config value from Config/options.php file.
 * @param $optionName
 * @return string|null
 *
 * @uses logaty()->options(option-name);
 */
 public function options($optionName)
 {
 $option = $this->config("options.{$optionName}");
 return (!is_array($option) ? $option : null);
 }
 
 /**
 * get all enabled languages OR check if specified language is enabled
 * @param string $lang
 * @return string|bool
 *
 * @uses logaty()->enabled(); return (array) all enabled languages
 * @uses logaty()->enabled(language-code);
 *      return (bool) true if language enabled false if not
 */
 public function enabled($lang = '')
 {
 $enabledLanguages = $this->config('enabled');
 
 return (
 !$lang ?
 $enabledLanguages :
 in_array($lang, $enabledLanguages)
 );
 }
 
 /**
 * get flags
 * @param string $lang
 * @return string|array|null
 *
 * @uses logaty()->flag(); // return (array) all flags
 *       logaty()->flag(language-Code); // return flag for -language-Code- language
 *       return null if language code is undefined
 */
 public function flag($lang = '')
 {
 $flags = $this->config("flag");
 
 return ($lang ? @$flags[$lang] : $flags);
 }
 
 /**
 * get language direction (RTL, LTR)
 * @param string $lang
 * @return string|array|null
 *
 * @uses logaty()->direction(); // return (array) all directions
 *       logaty()->direction(language-Code); // return direction for -language-Code- language
 *       return null if language code is undefined
 */
 public function direction($lang = '')
 {
 $directions = $this->config("direction");
 
 return ($lang ? @$directions[$lang] : $directions);
 }
 
 /**
 * get language Name in English
 * @param string $lang
 * @return string|array|null
 *
 * @uses logaty()->name(); // return (array) all languages name
 *       logaty()->name(language-Code); // return name for -language-Code- language
 *       return null if language code is undefined
 */
 public function name($lang = '')
 {
 $names = $this->config("name.english");
 
 return ($lang ? @$names[$lang] : $names);
 }
 
 /**
 * get language Name in Natural Language
 * @param string $lang
 * @return string|array|null
 *
 * @uses logaty()->nameN(); // return (array) all languages name
 *       logaty()->nameN(language-Code); // return name for -language-Code- language
 *       return null if language code is undefined
 */
 public function nameN($lang = '')
 {
 $names = $this->config("name.natural");
 
 return ($lang ? @$names[$lang] : $names);
 }
 
 /**
 * Get Path
 * @param $path
 * @return mixed
 */
 public function path($path)
 {
 return $this->config('paths')[$path];
 }
 
 /**
 * return default Language
 */
 public function defaultLang()
 {
 return $this->options('default_lang');
 }
 
 public function current()
 {
 $parameter = $this->options('lang_key');
 if (isset($_GET[$parameter]))
 {
 if ($this->enabled(strtolower($_GET[$parameter])))
 {
 return strtolower($_GET[$parameter]);
 }
 }
 
 return $this->defaultLang();
 }
 
 /**
 * generate link
 * @param string $url
 * @param string $lang
 * @return string
 */
 public function link($url = '', $lang = '')
 {
 return $this->link->create($url, $lang);
 }
 
 /**
 * get translation
 * @param $string
 * @param string $lang
 */
 public function _x($string, $lang = '')
 {
 return $this->trans->getTranslate($string, $lang);
 }
 
 /**
 * print translation direct
 * @param $string
 * @param string $lang
 */
 public function __($string, $lang = '')
 {
 echo $this->_x($string, $lang);
 }
 
 public function detect($type = '')
 {
 $detectedLanguage = null;
 $detect = $this->detect;
 if (!$type)
 {
 if (
 $this->options('detect_browser_lang')
 &&
 $this->options('detect_country_lang')
 )
 {
 $detectedLanguage['browser'] = $detect->browser();
 $detectedLanguage['country'] = $detect->country();
 } else if ($this->options('detect_browser_lang'))
 {
 $detectedLanguage = $detect->browser();
 } else if ($this->options('detect_country_lang'))
 {
 $detectedLanguage = $detect->country();
 }
 } elseif ($type == "browser")
 {
 if ($this->options('detect_browser_lang'))
 $detectedLanguage = $detect->browser();
 } elseif ($type == "country")
 {
 if ($this->options('detect_country_lang'))
 $detectedLanguage = $detect->country();
 }
 
 return $detectedLanguage;
 }
 
 /*public function trans()
 {
 return $this->trans;
 }*/
 }
 |