/default_www/backend/core/engine/language.php

https://github.com/zakgrant/forkcms · PHP · 417 lines · 155 code · 75 blank · 187 comment · 23 complexity · 8438c184cb6fb9d4ecd31c7e968e0d0d MD5 · raw file

  1. <?php
  2. /**
  3. * This class will store the language-dependant content for the Backend, it will also store the current language for the user.
  4. *
  5. * @package backend
  6. * @subpackage core
  7. *
  8. * @author Tijs Verkoyen <tijs@netlash.com>
  9. * @since 2.0
  10. */
  11. class BackendLanguage
  12. {
  13. /**
  14. * The labels
  15. *
  16. * @var array
  17. */
  18. protected static $err = array(),
  19. $lbl = array(),
  20. $msg = array();
  21. /**
  22. * The active languages
  23. *
  24. * @var array
  25. */
  26. protected static $activeLanguages;
  27. /**
  28. * The current interface-language
  29. *
  30. * @var string
  31. */
  32. protected static $currentInterfaceLanguage;
  33. /**
  34. * The current language that the user is working with
  35. *
  36. * @var string
  37. */
  38. protected static $currentWorkingLanguage;
  39. /**
  40. * Get the active languages
  41. *
  42. * @return array
  43. */
  44. public static function getActiveLanguages()
  45. {
  46. // validate the cache
  47. if(empty(self::$activeLanguages))
  48. {
  49. // grab from settings
  50. $activeLanguages = (array) BackendModel::getModuleSetting('core', 'active_languages');
  51. // store in cache
  52. self::$activeLanguages = $activeLanguages;
  53. }
  54. // return from cache
  55. return self::$activeLanguages;
  56. }
  57. /**
  58. * Get an error from the language-file
  59. *
  60. * @return string
  61. * @param string $key The key to get.
  62. * @param string[optional] $module The module wherin we should search.
  63. */
  64. public static function getError($key, $module = null)
  65. {
  66. // do we know the module
  67. if($module === null)
  68. {
  69. if(Spoon::exists('url')) $module = Spoon::get('url')->getModule();
  70. elseif(isset($_GET['module']) && $_GET['module'] != '') $module = (string) $_GET['module'];
  71. else $module = 'core';
  72. }
  73. // redefine
  74. $key = (string) $key;
  75. $module = (string) $module;
  76. // if the error exists return it,
  77. if(isset(self::$err[$module][$key])) return self::$err[$module][$key];
  78. // if it exists in the core-errors
  79. if(isset(self::$err['core'][$key])) return self::$err['core'][$key];
  80. // otherwise return the key in label-format
  81. return '{$err' . SpoonFilter::toCamelCase($module) . $key . '}';
  82. }
  83. /**
  84. * Get all the errors from the language-file
  85. *
  86. * @return array
  87. */
  88. public static function getErrors()
  89. {
  90. return (array) self::$err;
  91. }
  92. /**
  93. * Get the current interface language
  94. *
  95. * @return string
  96. */
  97. public static function getInterfaceLanguage()
  98. {
  99. return self::$currentInterfaceLanguage;
  100. }
  101. /**
  102. * Get all the possible interface languages
  103. *
  104. * @return array
  105. */
  106. public static function getInterfaceLanguages()
  107. {
  108. // init var
  109. $languages = array();
  110. // grab the languages from the settings & loop language to reset the label
  111. foreach((array) BackendModel::getModuleSetting('core', 'interface_languages', array('nl')) as $key)
  112. {
  113. // fetch language's translation
  114. $languages[$key] = self::getMessage(mb_strtoupper($key), 'core');
  115. }
  116. // sort alphabetically
  117. asort($languages);
  118. // return languages
  119. return $languages;
  120. }
  121. /**
  122. * Get a label from the language-file
  123. *
  124. * @return string
  125. * @param string $key The key to get.
  126. * @param string[optional] $module The module wherin we should search.
  127. */
  128. public static function getLabel($key, $module = null)
  129. {
  130. // do we know the module
  131. if($module === null)
  132. {
  133. if(Spoon::exists('url')) $module = Spoon::get('url')->getModule();
  134. elseif(isset($_GET['module']) && $_GET['module'] != '') $module = (string) $_GET['module'];
  135. else $module = 'core';
  136. }
  137. // redefine
  138. $key = (string) $key;
  139. $module = (string) $module;
  140. // if the error exists return it,
  141. if(isset(self::$lbl[$module][$key])) return self::$lbl[$module][$key];
  142. // if it exists in the core-errors
  143. if(isset(self::$lbl['core'][$key])) return self::$lbl['core'][$key];
  144. // otherwise return the key in label-format
  145. return '{$lbl' . SpoonFilter::toCamelCase($module) . $key . '}';
  146. }
  147. /**
  148. * Get all the labels from the language-file
  149. *
  150. * @return array
  151. */
  152. public static function getLabels()
  153. {
  154. return self::$lbl;
  155. }
  156. /**
  157. * Get all the possible locale languages
  158. *
  159. * @return array
  160. */
  161. public static function getLocaleLanguages()
  162. {
  163. // grab from settings
  164. $languages = (array) BackendModel::getModuleSetting('locale', 'languages');
  165. // init var
  166. $return = array();
  167. // loop language to reset the label
  168. foreach($languages as $key) $return[$key] = self::getMessage(mb_strtoupper($key), 'core');
  169. // sort alphabetically
  170. asort($return);
  171. // return
  172. return $return;
  173. }
  174. /**
  175. * Get a message from the language-file
  176. *
  177. * @return string
  178. * @param string $key The key to get.
  179. * @param string[optional] $module The module wherin we should search.
  180. */
  181. public static function getMessage($key, $module = null)
  182. {
  183. // do we know the module
  184. if($module === null)
  185. {
  186. if(Spoon::exists('url')) $module = Spoon::get('url')->getModule();
  187. elseif(isset($_GET['module']) && $_GET['module'] != '') $module = (string) $_GET['module'];
  188. else $module = 'core';
  189. }
  190. // redefine
  191. $key = (string) $key;
  192. $module = (string) $module;
  193. // if the error exists return it,
  194. if(isset(self::$msg[$module][$key])) return self::$msg[$module][$key];
  195. // if it exists in the core-errors
  196. if(isset(self::$msg['core'][$key])) return self::$msg['core'][$key];
  197. // otherwise return the key in label-format
  198. return '{$msg' . SpoonFilter::toCamelCase($module) . $key . '}';
  199. }
  200. /**
  201. * Get the messages
  202. *
  203. * @return array
  204. */
  205. public static function getMessages()
  206. {
  207. return self::$msg;
  208. }
  209. /**
  210. * Get the current working language
  211. *
  212. * @return string
  213. */
  214. public static function getWorkingLanguage()
  215. {
  216. return self::$currentWorkingLanguage;
  217. }
  218. /**
  219. * Get all possible working languages
  220. *
  221. * @return array
  222. */
  223. public static function getWorkingLanguages()
  224. {
  225. // init var
  226. $languages = array();
  227. // grab the languages from the settings & loop language to reset the label
  228. foreach((array) BackendModel::getModuleSetting('core', 'languages', array('nl')) as $key)
  229. {
  230. // fetch the language's translation
  231. $languages[$key] = self::getMessage(mb_strtoupper($key), 'core');
  232. }
  233. // sort alphabetically
  234. asort($languages);
  235. // return languages
  236. return $languages;
  237. }
  238. /**
  239. * Set locale
  240. * It will require the correct file and init the needed vars
  241. *
  242. * @return void
  243. * @param string $language The language to load.
  244. */
  245. public static function setLocale($language)
  246. {
  247. // redefine
  248. $language = (string) $language;
  249. // check if file exists
  250. if(!SpoonFile::exists(BACKEND_CACHE_PATH . '/locale/' . $language . '.php'))
  251. {
  252. // require the BackendLocaleModel
  253. require_once BACKEND_MODULES_PATH . '/locale/engine/model.php';
  254. // build locale file
  255. BackendLocaleModel::buildCache($language, APPLICATION);
  256. }
  257. // store
  258. self::$currentInterfaceLanguage = $language;
  259. // attempt to set a cookie
  260. try
  261. {
  262. // store in cookie
  263. SpoonCookie::set('interface_language', $language);
  264. }
  265. // catch exceptions
  266. catch(SpoonCookieException $e)
  267. {
  268. // settings cookies isn't allowed, because this isn't a real problem we ignore the exception
  269. }
  270. // store in session for TinyMCE
  271. SpoonSession::set('tiny_mce_language', $language);
  272. SpoonSession::set('interface_language', $language);
  273. // init vars
  274. $err = array();
  275. $lbl = array();
  276. $msg = array();
  277. // require file
  278. require BACKEND_CACHE_PATH . '/locale/' . $language . '.php';
  279. // set language specific labels
  280. self::$err = (array) $err;
  281. self::$lbl = (array) $lbl;
  282. self::$msg = (array) $msg;
  283. }
  284. /**
  285. * Set the current working language
  286. *
  287. * @return void
  288. * @param string $language The language to use, if not provided we will use the working language.
  289. */
  290. public static function setWorkingLanguage($language)
  291. {
  292. self::$currentWorkingLanguage = (string) $language;
  293. }
  294. }
  295. /**
  296. * An alias for BackendLanguage with some extras.
  297. *
  298. *
  299. * @package backend
  300. * @subpackage core
  301. *
  302. * @author Tijs Verkoyen <tijs@sumocoders.be>
  303. * @author Davy Hellemans <davy@netlash.com>
  304. * @since 2.0
  305. */
  306. class BL extends BackendLanguage
  307. {
  308. /**
  309. * Get an error from the language-file
  310. *
  311. * @return string
  312. * @param string $key The key to get.
  313. * @param string[optional] $module The module wherein we should search.
  314. */
  315. public static function err($key, $module = null)
  316. {
  317. return BackendLanguage::getError($key, $module);
  318. }
  319. /**
  320. * Get a label from the language-file
  321. *
  322. * @return string
  323. * @param string $key The key to get.
  324. * @param string[optional] $module The module wherein we should search.
  325. */
  326. public static function lbl($key, $module = null)
  327. {
  328. return BackendLanguage::getLabel($key, $module);
  329. }
  330. /**
  331. * Get a message from the language-file
  332. *
  333. * @return string
  334. * @param string $key The key to get.
  335. * @param string[optional] $module The module wherein we should search.
  336. */
  337. public static function msg($key, $module = null)
  338. {
  339. return BackendLanguage::getMessage($key, $module);
  340. }
  341. }
  342. ?>