PageRenderTime 57ms CodeModel.GetById 29ms RepoModel.GetById 0ms app.codeStats 0ms

/zan/helpers/i18n.php

https://github.com/triartdesign/ZanPHP
PHP | 368 lines | 287 code | 42 blank | 39 comment | 36 complexity | 8a221fe72ac62a5f526568d9b28796d3 MD5 | raw file
  1. <?php
  2. /**
  3. * ZanPHP
  4. *
  5. * An open source agile and rapid development framework for PHP 5
  6. *
  7. * @package ZanPHP
  8. * @author MilkZoft Developer Team
  9. * @copyright Copyright (c) 2011, MilkZoft, Inc.
  10. * @license http://www.zanphp.com/documentation/en/license/
  11. * @link http://www.zanphp.com
  12. * @version 1.0
  13. */
  14. /**
  15. * Access from index.php:
  16. */
  17. if(!defined("_access")) {
  18. die("Error: You don't have permission to access here...");
  19. }
  20. /**
  21. * i18n Helper
  22. *
  23. *
  24. *
  25. * @package ZanPHP
  26. * @subpackage core
  27. * @category helpers
  28. * @author MilkZoft Developer Team
  29. * @link http://www.zanphp.com/documentation/en/helpers/i18n_helper
  30. */
  31. /**
  32. * __()
  33. *
  34. * Returns the translation of a specific text
  35. *
  36. * @param string $text
  37. * @return string value
  38. */
  39. function __($text, $encode = TRUE) {
  40. if(get("translation") === "gettext") {
  41. global $Gettext_Reader;
  42. if(is_null($Gettext_Reader)) {
  43. return $text;
  44. }
  45. return $Gettext_Reader->translate($text);
  46. } else {
  47. global $Load, $phrase;
  48. $language = whichLanguage();
  49. if(file_exists("www/lib/languages/". strtolower($language) .".php")) {
  50. include_once "www/lib/languages/". strtolower($language) .".php";
  51. }
  52. $position = strtolower(str_replace(" ", "_", $text));
  53. $position = strtolower(str_replace("?,", "", $position));
  54. $position = strtolower(str_replace("!", "", $position));
  55. $position = strtolower(str_replace("ÂĄ", "", $position));
  56. $position = strtolower(str_replace("Âż", "", $position));
  57. $position = strtolower(str_replace(",", "", $position));
  58. $position = strtolower(str_replace(":", "", $position));
  59. $position = strtolower(str_replace("'", "", $position));
  60. if(isset($phrase[$position])) {
  61. return ($encode) ? encode($phrase[$position]) : $phrase[$position];
  62. } else {
  63. if($language !== "English") {
  64. $content = "";
  65. $logfile = "www/lib/languages/". strtolower($language) . ".txt";
  66. $today = date("d/m/Y");
  67. if(file_exists($logfile)) {
  68. $content = file_get_contents($logfile);
  69. }
  70. $file = fopen($logfile, "a+");
  71. $pos = strrpos($content, "$today");
  72. if($pos !== FALSE) {
  73. if(!@preg_match("/\\b" . addslashes($position) . "\\b/i", substr($content, $pos + 14))) {
  74. fwrite($file, "$position\r\n");
  75. }
  76. } else {
  77. fwrite($file, "--- $today ---\r\n");
  78. fwrite($file, "$position\r\n");
  79. }
  80. }
  81. return $text;
  82. }
  83. }
  84. }
  85. /**
  86. * getLanguage
  87. *
  88. * Returns the translation of a specific Language Word
  89. *
  90. * @param boolean $invert = TRUE
  91. * @return string value
  92. */
  93. function getLanguage($lang, $flags = FALSE) {
  94. $languages = getLanguagesFromDir();
  95. foreach($languages as $language) {
  96. if($flags) {
  97. if($language["language"] === $lang) {
  98. return '<img class="flag no-border" src="'. get("webURL") .'/www/lib/images/icons/flags/'. strtolower($lang) .'.png" alt="'. __($lang) .'" />';
  99. }
  100. } else {
  101. if($language["language"] === $lang) {
  102. return __($lang);
  103. }
  104. }
  105. }
  106. return FALSE;
  107. }
  108. /**
  109. * isLanguage
  110. *
  111. * Defines if an Abbrevation is a standard XML language
  112. *
  113. * @param boolean $invert = TRUE
  114. * @return string value
  115. */
  116. function isLang($lang = FALSE) {
  117. $lang = (!$lang) ? strtolower(segment(0)) : $lang;
  118. $langs = array("ar", "bs", "be", "bu", "ca", "ch", "cr", "cz", "da", "du", "en", "et", "fi", "fr", "ga", "ge", "gr", "he", "hu", "in", "it", "jp", "ku", "li", "ma", "pe", "po", "pt", "ro", "ru", "se", "sk", "sn", "es", "sw", "th", "tk", "uk", "ur", "vi");
  119. return in_array($lang, $langs) ? TRUE : FALSE;
  120. }
  121. /**
  122. * whichLanguage
  123. *
  124. * Returns the default Language
  125. *
  126. * @param boolean $invert = TRUE
  127. * @return string value
  128. */
  129. function whichLanguage($invert = TRUE, $lower = FALSE) {
  130. global $Load;
  131. $Load->helper("router");
  132. if(isLang(segment(0))) {
  133. if(segment(0) and !$invert) {
  134. return segment(0);
  135. } elseif(segment(0) and getLang(segment(0), TRUE)) {
  136. return ($lower) ? strtolower(getLang(segment(0), TRUE)) : getLang(segment(0), TRUE);
  137. } elseif(!$invert) {
  138. return getLang(get("webLanguage"));
  139. } else {
  140. return ($lower) ? strtolower(get("webLanguage")) : get("webLanguage");
  141. }
  142. } else {
  143. if(!$invert) {
  144. return getLang(get("webLanguage"));
  145. } else {
  146. return ($lower) ? strtolower(get("webLanguage")) : get("webLanguage");
  147. }
  148. }
  149. }
  150. function getLanguages($flags = FALSE) {
  151. $data = array();
  152. $languages = getLanguagesFromDir();
  153. foreach($languages as $language) {
  154. $default = ($language["language"] === get("webLanguage")) ? TRUE : FALSE;
  155. $data[] = array("default" => $default, "name" => $language["language"], "value" => getLanguage($language["language"], $flags));
  156. }
  157. return $data;
  158. }
  159. function getLanguagesInput($lang = NULL, $name = "language", $input = "radio") {
  160. $languages = getLanguages(TRUE);
  161. $HTML = NULL;
  162. if($input === "select") {
  163. $HTML = '<select name="'. $name .'" size="1">';
  164. }
  165. foreach($languages as $language) {
  166. if(!isset($checked)) {
  167. if(!is_null($lang)) {
  168. if($lang === $language["name"]) {
  169. $check = ($input === "radio") ? ' checked="checked"' : ' selected="selected"';
  170. $checked = TRUE;
  171. } else {
  172. $check = NULL;
  173. }
  174. } else {
  175. if($language["default"] === TRUE) {
  176. $check = ($input === "radio") ? ' checked="checked"' : ' selected="selected"';
  177. $checked = TRUE;
  178. }
  179. }
  180. }
  181. $show = isset($check) ? $check : NULL;
  182. if($input === "radio") {
  183. $HTML .= ' <input id="language" name="'. $name .'" type="radio" value="'. $language["name"] .'" '. $show .' /> '. $language["value"] .' ';
  184. } elseif($input === "select") {
  185. $HTML .= ' <option value="'. $language["name"] .'"'. $show .'>'. __($language["name"]) .'</option>';
  186. }
  187. unset($check);
  188. }
  189. if($input === "select") {
  190. $HTML .= '</select>';
  191. }
  192. return $HTML;
  193. }
  194. function getLocal($lang = FALSE) {
  195. if(!$lang) {
  196. $lang = whichLanguage();
  197. }
  198. $languages = array(
  199. "Arabic" => "ar_AR",
  200. "Basque" => "eu_ES",
  201. "Belarusian" => "be_BY",
  202. "Bulgarian" => "bg_BG",
  203. "Catalan" => "ca_ES",
  204. "Chinese" => "zh_CN",
  205. "Croatian" => "hr_HR",
  206. "Czech" => "cs_CZ",
  207. "Danish" => "da_DK",
  208. "Dutch" => "nl_NL",
  209. "English" => "en_US",
  210. "Estonian" => "et_EE",
  211. "Finnish" => "fi_FI",
  212. "French" => "fr_FR",
  213. "Galician" => "gl_ES",
  214. "German" => "de_DE",
  215. "Greek" => "el_GR",
  216. "Hebrew" => "he_IL",
  217. "Hungarian" => "hu_HU",
  218. "Indonesian" => "id_ID",
  219. "Italian" => "it_IT",
  220. "Japanese" => "ja_JP",
  221. "Kurdish" => "ku_TR",
  222. "Lithuanian" => "lt_LT",
  223. "Macedonian" => "mk_MK",
  224. "Persian" => "Persian",
  225. "Polish" => "pl_PL",
  226. "Portuguese" => "pt_BR",
  227. "Romanian" => "ro_RO",
  228. "Russian" => "ru_RU",
  229. "Serbian" => "sr_RS",
  230. "Slovak" => "sk_SK",
  231. "Slovenian" => "sl_SI",
  232. "Spanish" => "es_LA",
  233. "Swedish" => "sv_SE",
  234. "Thai" => "th_TH",
  235. "Turkish" => "tr_TR",
  236. "Ukrainian" => "uk_UA",
  237. "Vietnamese" => "vi_VN"
  238. );
  239. foreach($languages as $language => $locale) {
  240. if($language === $lang) {
  241. return $locale;
  242. }
  243. }
  244. }
  245. function getLang($lg, $invert = FALSE) {
  246. $languages = array(
  247. "Arabic" => "ar",
  248. "Basque" => "bs",
  249. "Belarusian" => "be",
  250. "Bulgarian" => "bu",
  251. "Catalan" => "ca",
  252. "Chinese" => "ch",
  253. "Croatian" => "cr",
  254. "Czech" => "cz",
  255. "Danish" => "da",
  256. "Dutch" => "du",
  257. "English" => "en",
  258. "Estonian" => "et",
  259. "Finnish" => "fi",
  260. "French" => "fr",
  261. "Galician" => "ga",
  262. "German" => "ge",
  263. "Greek" => "gr",
  264. "Hebrew" => "he",
  265. "Hungarian" => "hu",
  266. "Indonesian" => "in",
  267. "Italian" => "it",
  268. "Japanese" => "jp",
  269. "Kurdish" => "ku",
  270. "Lithuanian" => "li",
  271. "Macedonian" => "ma",
  272. "Persian" => "pe",
  273. "Polish" => "po",
  274. "Portuguese" => "pt",
  275. "Romanian" => "ro",
  276. "Russian" => "ru",
  277. "Serbian" => "se",
  278. "Slovak" => "sk",
  279. "Slovenian" => "sn",
  280. "Spanish" => "es",
  281. "Swedish" => "sw",
  282. "Thai" => "th",
  283. "Turkish" => "tk",
  284. "Ukrainian" => "uk",
  285. "Vietnamese" => "vi"
  286. );
  287. foreach($languages as $language => $lang) {
  288. if($invert) {
  289. if($lg === $lang) {
  290. return $language;
  291. }
  292. } else {
  293. if($language === $lg) {
  294. return $lang;
  295. }
  296. }
  297. }
  298. return ($invert) ? "English" : "en";
  299. }
  300. function getLanguagesFromDir() {
  301. $path = "www/lib/languages";
  302. $dir = dir($path);
  303. $i = 1;
  304. while($element = $dir->read()) {
  305. if($element !== ".." and $element !== "." and $element !== ".DS_Store" and $element !== "index.html") {
  306. $language = str_replace("language.", "", $element);
  307. $parts = explode(".", $language);
  308. if(count($parts) > 1) {
  309. if($parts[1] === "php") {
  310. $languages[$i]["language"] = ucfirst($parts[0]);
  311. $languages[$i]["lang"] = getLang(ucfirst($parts[0]));
  312. $i++;
  313. }
  314. }
  315. }
  316. }
  317. $dir->close();
  318. return $languages;
  319. }