/includes/classes/class.locale.php

https://github.com/DragonFire/wowcs · PHP · 251 lines · 220 code · 12 blank · 19 comment · 23 complexity · f75171966fcdf1c041e5cf50e86155f7 MD5 · raw file

  1. <?php
  2. /**
  3. * Copyright (C) 2010-2011 Shadez <https://github.com/Shadez>
  4. *
  5. * This program is free software; you can redistribute it and/or modify
  6. * it under the terms of the GNU General Public License as published by
  7. * the Free Software Foundation; either version 2 of the License, or
  8. * (at your option) any later version.
  9. *
  10. * This program is distributed in the hope that it will be useful,
  11. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  13. * GNU General Public License for more details.
  14. *
  15. * You should have received a copy of the GNU General Public License
  16. * along with this program; if not, write to the Free Software
  17. * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
  18. **/
  19. Class WoW_Locale {
  20. private static $locale_name = null;
  21. private static $locale_id = -1;
  22. private static $locale_holder = null;
  23. private static $menu_holder = null;
  24. public static $navigation = null;
  25. public static function SetLocale($locale_name, $locale_id, $load_locale = true) {
  26. self::$locale_name = self::GetAppropriateLocaleNameForLocale($locale_name);
  27. self::$locale_id = $locale_id;
  28. if($load_locale) {
  29. self::LoadLocale();
  30. }
  31. }
  32. public static function GetLocale($type = LOCALE_SINGLE) {
  33. switch($type) {
  34. default:
  35. case LOCALE_SINGLE:
  36. return self::$locale_name;
  37. break;
  38. case LOCALE_DOUBLE:
  39. return self::$locale_id == LOCALE_EN ? 'en-gb' : self::$locale_name . '-' . self::$locale_name;
  40. break;
  41. case LOCALE_SPLIT:
  42. return self::$locale_id == LOCALE_EN ? 'engb' : self::$locale_name . self::$locale_name;
  43. break;
  44. case LOCALE_PATH:
  45. return self::$locale_id == LOCALE_EN ? 'en_gb' : self::$locale_name . '_' . self::$locale_name;
  46. }
  47. }
  48. public static function GetLocaleID() {
  49. return self::$locale_id;
  50. }
  51. public static function LoadLocale() {
  52. if(self::$locale_name == null || self::$locale_id == -1) {
  53. return false;
  54. }
  55. if(!@include(WOW_DIRECTORY . '/includes/locales/locale_' . self::$locale_name . '.php')) {
  56. @include(WOW_DIRECTORY . '/includes/locales/locale_' . WoWConfig::$DefaultLocale . '.php');
  57. }
  58. if(!@include(WOW_DIRECTORY . '/includes/locales/menu_' . self::$locale_name . '.php')) {
  59. @include(WOW_DIRECTORY . '/includes/locales/menu_' . WoWConfig::$DefaultLocale . '.php');
  60. }
  61. self::$locale_holder = $WoW_Locale;
  62. self::$menu_holder = self::$navigation = self::prepareBreadCrumb($Menu);
  63. return true;
  64. }
  65. private static function prepareBreadCrumb($Menu) {
  66. WoW_Forums::InitForums();
  67. $forum_categories = WoW_Forums::GetForumCategories();
  68. if(is_array($forum_categories)) {
  69. $tmp_cat = 0;
  70. foreach($forum_categories as $category) {
  71. $info = $category['category_info'];
  72. $forums_output[$tmp_cat] = array('label' => $info['title'],
  73. 'url' => '/forum/#forum'.$info['cat_id'],);
  74. $subcats = $category['subcategories'];
  75. if(is_array($subcats)) {
  76. $tmp_subcat = 0;
  77. foreach($subcats as $subcat) {
  78. $subcats_output[$tmp_subcat] = array('label' => $subcat['title'],
  79. 'url' => '/forum/'.$subcat['cat_id'].'/',);
  80. $tmp_subcat++;
  81. }
  82. $forums_output[$tmp_cat]['children'] = $subcats_output;
  83. }
  84. $tmp_cat++;
  85. }
  86. }
  87. $Menu['children'][3]['children'] = $forums_output;
  88. return $Menu;
  89. }
  90. public static function GetString($index, $gender = -1) {
  91. if(!isset(self::$locale_holder[$index])) {
  92. return $index;
  93. }
  94. $string = self::$locale_holder[$index];
  95. // Replace $gTEXT_MALE:TEXT_FEMALE; to correct one according with provided gender ID.
  96. // AoWoW
  97. if(preg_match('/\$g(.*?):(.*?);/iu', $string, $matches)) {
  98. if(!is_array($matches) || !isset($matches[0]) || !isset($matches[1]) || !isset($matches[2])) {
  99. return $string;
  100. }
  101. switch($gender) {
  102. default:
  103. case GENDER_MALE:
  104. $string = str_replace($matches[0], $matches[1], $string);
  105. break;
  106. case GENDER_FEMALE:
  107. $string = str_replace($matches[0], $matches[2], $string);
  108. break;
  109. }
  110. }
  111. return $string;
  112. }
  113. public static function GetMenuString() {
  114. return json_encode(self::$menu_holder);
  115. }
  116. public static function IsLocale($locale_str, $locale_id) {
  117. switch(strtolower($locale_str)) {
  118. case 'de':
  119. case 'dede':
  120. case 'de-de':
  121. case 'de_de';
  122. return $locale_id == LOCALE_DE;
  123. break;
  124. case 'en':
  125. case 'enen':
  126. case 'enus':
  127. case 'engb':
  128. case 'en-en':
  129. case 'en-us':
  130. case 'en-gb':
  131. case 'en_en':
  132. case 'en_us':
  133. case 'en_gb':
  134. return $locale_id == LOCALE_EN;
  135. break;
  136. case 'es':
  137. case 'eses':
  138. case 'es-es':
  139. case 'es_es':
  140. return $locale_id == LOCALE_ES;
  141. break;
  142. case 'fr':
  143. case 'frfr':
  144. case 'fr-fr':
  145. case 'fr_fr':
  146. return $locale_id == LOCALE_FR;
  147. break;
  148. case 'ru':
  149. case 'ruru':
  150. case 'ru-ru':
  151. case 'ru_ru':
  152. return $locale_id == LOCALE_RU;
  153. break;
  154. }
  155. return false;
  156. }
  157. public static function GetLocaleIDForLocale($locale_str) {
  158. switch(strtolower($locale_str)) {
  159. case 'de':
  160. case 'dede':
  161. case 'de-de':
  162. case 'de_de';
  163. return LOCALE_DE;
  164. break;
  165. case 'en':
  166. case 'enen':
  167. case 'enus':
  168. case 'engb':
  169. case 'en-en':
  170. case 'en-us':
  171. case 'en-gb':
  172. case 'en_en':
  173. case 'en_us':
  174. case 'en_gb':
  175. return LOCALE_EN;
  176. break;
  177. case 'es':
  178. case 'eses':
  179. case 'es-es':
  180. case 'es_es':
  181. return LOCALE_ES;
  182. break;
  183. case 'fr':
  184. case 'frfr':
  185. case 'fr-fr':
  186. case 'fr_fr':
  187. return LOCALE_FR;
  188. break;
  189. case 'ru':
  190. case 'ruru':
  191. case 'ru-ru':
  192. case 'ru_ru':
  193. return LOCALE_RU;
  194. break;
  195. }
  196. return false;
  197. }
  198. private static function GetAppropriateLocaleNameForLocale($locale_str) {
  199. switch(strtolower($locale_str)) {
  200. case 'de':
  201. case 'dede':
  202. case 'de-de':
  203. case 'de_de';
  204. return 'de';
  205. break;
  206. case 'en':
  207. case 'enen':
  208. case 'enus':
  209. case 'engb':
  210. case 'en-en':
  211. case 'en-us':
  212. case 'en-gb':
  213. case 'en_en':
  214. case 'en_us':
  215. case 'en_gb':
  216. return 'en';
  217. break;
  218. case 'es':
  219. case 'eses':
  220. case 'es-es':
  221. case 'es_es':
  222. return 'es';
  223. break;
  224. case 'fr':
  225. case 'frfr':
  226. case 'fr-fr':
  227. case 'fr_fr':
  228. return 'fr';
  229. break;
  230. case 'ru':
  231. case 'ruru':
  232. case 'ru-ru':
  233. case 'ru_ru':
  234. return 'ru';
  235. break;
  236. }
  237. }
  238. }
  239. ?>