PageRenderTime 41ms CodeModel.GetById 17ms RepoModel.GetById 0ms app.codeStats 0ms

/app/modules/Core/Model/Language.php

https://gitlab.com/gregtyka/SiberianCMS
PHP | 162 lines | 127 code | 35 blank | 0 comment | 10 complexity | 74c1be8dd948cf1b2ffd8c5637267f13 MD5 | raw file
  1. <?php
  2. class Core_Model_Language extends Core_Model_Default {
  3. const DEFAULT_LOCALE = 'en_US';
  4. const DEFAULT_LANGUAGE = 'en';
  5. protected static $_countries_list;
  6. protected static $_current_currency;
  7. protected static $__session = null;
  8. protected static $_languages = array();
  9. protected static $_language_codes = array();
  10. public static function prepare() {
  11. $territories = Zend_Locale::getTranslationList('language');
  12. $directories = new DirectoryIterator(Core_Model_Directory::getBasePathTo('languages'));
  13. foreach($directories as $directory) {
  14. $dir_name = $directory->getFileName();
  15. if(!$directory->isDot() AND isset($territories[$dir_name])) {
  16. $locale = Zend_Locale::getLocaleToTerritory($dir_name);
  17. self::$_languages[$directory->getFileName()] = new Core_Model_Default(array(
  18. 'code' => $directory->getFileName(),
  19. 'name' => ucfirst($territories[$dir_name]),
  20. 'locale' => $locale,
  21. ));
  22. self::$_language_codes[] = $directory->getFileName();
  23. }
  24. }
  25. self::$_languages[self::DEFAULT_LANGUAGE] = new Core_Model_Default(array(
  26. 'code' => self::DEFAULT_LANGUAGE,
  27. 'name' => ucfirst($territories[self::DEFAULT_LANGUAGE]),
  28. 'locale' => self::DEFAULT_LOCALE
  29. ));
  30. self::$_language_codes[] = self::DEFAULT_LANGUAGE;
  31. asort(self::$_languages);
  32. }
  33. public static function setSession($session) {
  34. self::$__session = $session;
  35. }
  36. public static function getSession() {
  37. return self::$__session;
  38. }
  39. public static function getLanguages() {
  40. return self::$_languages;
  41. }
  42. public static function getLanguage($language_code) {
  43. return isset(self::$_languages[$language_code]) ? self::$_languages[$language_code] : array();
  44. }
  45. public static function getLanguageCodes() {
  46. return self::$_language_codes;
  47. }
  48. public static function getDefaultLanguage() {
  49. return self::DEFAULT_LANGUAGE;
  50. }
  51. public static function getDefaultLocale() {
  52. return self::DEFAULT_LOCALE;
  53. }
  54. public static function setCurrentLanguage($territory) {
  55. if(self::$__session) {
  56. self::$__session->current_language = $territory;
  57. }
  58. }
  59. public static function getCurrentLanguage() {
  60. $current_language = self::getDefaultLanguage();
  61. if(self::$__session) {
  62. $current_language = self::$__session->current_language;
  63. }
  64. return $current_language;
  65. }
  66. public static function getCurrentLocale() {
  67. $language = self::getLanguage(self::getCurrentLanguage());
  68. return $language->getLocale() ? $language->getLocale() : self::getDefaultLocale();
  69. }
  70. public static function getCurrentLocaleCode() {
  71. return Zend_Registry::get('Zend_Locale')->toString();
  72. }
  73. public static function setCurrentCurrency($currency, $locale = null) {
  74. if(!is_null($locale)) $currency->setLocale($locale);
  75. self::$_current_currency = $currency;
  76. }
  77. public static function getCurrentCurrency() {
  78. if(!self::$_current_currency instanceof Zend_Currency) {
  79. self::$_current_currency = new Zend_Currency();
  80. }
  81. return self::$_current_currency;
  82. }
  83. public static function getCurrencySymbol() {
  84. return self::getCurrentCurrency()->getSymbol();
  85. }
  86. public static function normalizePrice($price, $locale = null) {
  87. foreach(self::getCountriesList() as $country) {
  88. $price = str_replace($country->getSymbol(), '', $price);
  89. }
  90. return $price;
  91. }
  92. public static function getCountriesList() {
  93. if(is_null(self::$_countries_list)) {
  94. self::$_countries_list = array();
  95. $locale = Zend_Registry::get('Zend_Locale');
  96. $currency = new Zend_Currency();
  97. foreach(Zend_Locale::getTranslationList('Territory', null, 2) as $ter => $name) {
  98. $country_code = Zend_Locale::getLocaleToTerritory($ter);
  99. if(!is_null($country_code)) {
  100. try {
  101. $symbol = $currency->getSymbol($country_code);
  102. if(!empty($symbol)) {
  103. $countries[$country_code] = array(
  104. 'code' => $country_code,
  105. 'name' => $name,
  106. 'symbol' => $symbol
  107. );
  108. }
  109. }
  110. catch(Exception $e) {}
  111. }
  112. }
  113. uasort($countries, 'cmp');
  114. foreach($countries as $currency) {
  115. self::$_countries_list[] = new Core_Model_Default($currency);
  116. }
  117. }
  118. return self::$_countries_list;
  119. }
  120. }
  121. function cmp($a, $b) {
  122. $cmp = strcmp($a['name'], $b['name']);
  123. if ($cmp == 0) {
  124. return 0;
  125. }
  126. return ($cmp < 0) ? -1 : 1;
  127. }