ISO639.php 9.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341
  1. <?php
  2. /**
  3. * Part of Text_LanguageDetect
  4. *
  5. * PHP version 5
  6. *
  7. * @category Text
  8. * @package Text_LanguageDetect
  9. * @author Christian Weiske <cweiske@php.net>
  10. * @copyright 2011 Christian Weiske <cweiske@php.net>
  11. * @license http://www.debian.org/misc/bsd.license BSD
  12. * @version SVN: $Id$
  13. * @link http://pear.php.net/package/Text_LanguageDetect/
  14. */
  15. /**
  16. * Provides a mapping between the languages from lang.dat and the
  17. * ISO 639-1 and ISO-639-2 codes.
  18. *
  19. * Note that this class contains only languages that exist in lang.dat.
  20. *
  21. * @category Text
  22. * @package Text_LanguageDetect
  23. * @author Christian Weiske <cweiske@php.net>
  24. * @copyright 2011 Christian Weiske <cweiske@php.net>
  25. * @license http://www.debian.org/misc/bsd.license BSD
  26. * @link http://www.loc.gov/standards/iso639-2/php/code_list.php
  27. *
  28. * @SuppressWarnings(PHPMD)
  29. */
  30. class Text_LanguageDetect_ISO639
  31. {
  32. /**
  33. * Maps all language names from the language database to the
  34. * ISO 639-1 2-letter language code.
  35. *
  36. * NULL indicates that there is no 2-letter code.
  37. *
  38. * @var array
  39. */
  40. public static $nameToCode2 = array(
  41. 'albanian' => 'sq',
  42. 'arabic' => 'ar',
  43. 'azeri' => 'az',
  44. 'bengali' => 'bn',
  45. 'bulgarian' => 'bg',
  46. 'cebuano' => null,
  47. 'croatian' => 'hr',
  48. 'czech' => 'cs',
  49. 'danish' => 'da',
  50. 'dutch' => 'nl',
  51. 'english' => 'en',
  52. 'estonian' => 'et',
  53. 'farsi' => 'fa',
  54. 'finnish' => 'fi',
  55. 'french' => 'fr',
  56. 'german' => 'de',
  57. 'hausa' => 'ha',
  58. 'hawaiian' => null,
  59. 'hindi' => 'hi',
  60. 'hungarian' => 'hu',
  61. 'icelandic' => 'is',
  62. 'indonesian' => 'id',
  63. 'italian' => 'it',
  64. 'kazakh' => 'kk',
  65. 'kyrgyz' => 'ky',
  66. 'latin' => 'la',
  67. 'latvian' => 'lv',
  68. 'lithuanian' => 'lt',
  69. 'macedonian' => 'mk',
  70. 'mongolian' => 'mn',
  71. 'nepali' => 'ne',
  72. 'norwegian' => 'no',
  73. 'pashto' => 'ps',
  74. 'pidgin' => null,
  75. 'polish' => 'pl',
  76. 'portuguese' => 'pt',
  77. 'romanian' => 'ro',
  78. 'russian' => 'ru',
  79. 'serbian' => 'sr',
  80. 'slovak' => 'sk',
  81. 'slovene' => 'sl',
  82. 'somali' => 'so',
  83. 'spanish' => 'es',
  84. 'swahili' => 'sw',
  85. 'swedish' => 'sv',
  86. 'tagalog' => 'tl',
  87. 'turkish' => 'tr',
  88. 'ukrainian' => 'uk',
  89. 'urdu' => 'ur',
  90. 'uzbek' => 'uz',
  91. 'vietnamese' => 'vi',
  92. 'welsh' => 'cy',
  93. );
  94. /**
  95. * Maps all language names from the language database to the
  96. * ISO 639-2 3-letter language code.
  97. *
  98. * @var array
  99. */
  100. public static $nameToCode3 = array(
  101. 'albanian' => 'sqi',
  102. 'arabic' => 'ara',
  103. 'azeri' => 'aze',
  104. 'bengali' => 'ben',
  105. 'bulgarian' => 'bul',
  106. 'cebuano' => 'ceb',
  107. 'croatian' => 'hrv',
  108. 'czech' => 'ces',
  109. 'danish' => 'dan',
  110. 'dutch' => 'nld',
  111. 'english' => 'eng',
  112. 'estonian' => 'est',
  113. 'farsi' => 'fas',
  114. 'finnish' => 'fin',
  115. 'french' => 'fra',
  116. 'german' => 'deu',
  117. 'hausa' => 'hau',
  118. 'hawaiian' => 'haw',
  119. 'hindi' => 'hin',
  120. 'hungarian' => 'hun',
  121. 'icelandic' => 'isl',
  122. 'indonesian' => 'ind',
  123. 'italian' => 'ita',
  124. 'kazakh' => 'kaz',
  125. 'kyrgyz' => 'kir',
  126. 'latin' => 'lat',
  127. 'latvian' => 'lav',
  128. 'lithuanian' => 'lit',
  129. 'macedonian' => 'mkd',
  130. 'mongolian' => 'mon',
  131. 'nepali' => 'nep',
  132. 'norwegian' => 'nor',
  133. 'pashto' => 'pus',
  134. 'pidgin' => 'crp',
  135. 'polish' => 'pol',
  136. 'portuguese' => 'por',
  137. 'romanian' => 'ron',
  138. 'russian' => 'rus',
  139. 'serbian' => 'srp',
  140. 'slovak' => 'slk',
  141. 'slovene' => 'slv',
  142. 'somali' => 'som',
  143. 'spanish' => 'spa',
  144. 'swahili' => 'swa',
  145. 'swedish' => 'swe',
  146. 'tagalog' => 'tgl',
  147. 'turkish' => 'tur',
  148. 'ukrainian' => 'ukr',
  149. 'urdu' => 'urd',
  150. 'uzbek' => 'uzb',
  151. 'vietnamese' => 'vie',
  152. 'welsh' => 'cym',
  153. );
  154. /**
  155. * Maps ISO 639-1 2-letter language codes to the language names
  156. * in the language database
  157. *
  158. * Not all languages have a 2 letter code, so some are missing
  159. *
  160. * @var array
  161. */
  162. public static $code2ToName = array(
  163. 'ar' => 'arabic',
  164. 'az' => 'azeri',
  165. 'bg' => 'bulgarian',
  166. 'bn' => 'bengali',
  167. 'cs' => 'czech',
  168. 'cy' => 'welsh',
  169. 'da' => 'danish',
  170. 'de' => 'german',
  171. 'en' => 'english',
  172. 'es' => 'spanish',
  173. 'et' => 'estonian',
  174. 'fa' => 'farsi',
  175. 'fi' => 'finnish',
  176. 'fr' => 'french',
  177. 'ha' => 'hausa',
  178. 'hi' => 'hindi',
  179. 'hr' => 'croatian',
  180. 'hu' => 'hungarian',
  181. 'id' => 'indonesian',
  182. 'is' => 'icelandic',
  183. 'it' => 'italian',
  184. 'kk' => 'kazakh',
  185. 'ky' => 'kyrgyz',
  186. 'la' => 'latin',
  187. 'lt' => 'lithuanian',
  188. 'lv' => 'latvian',
  189. 'mk' => 'macedonian',
  190. 'mn' => 'mongolian',
  191. 'ne' => 'nepali',
  192. 'nl' => 'dutch',
  193. 'no' => 'norwegian',
  194. 'pl' => 'polish',
  195. 'ps' => 'pashto',
  196. 'pt' => 'portuguese',
  197. 'ro' => 'romanian',
  198. 'ru' => 'russian',
  199. 'sk' => 'slovak',
  200. 'sl' => 'slovene',
  201. 'so' => 'somali',
  202. 'sq' => 'albanian',
  203. 'sr' => 'serbian',
  204. 'sv' => 'swedish',
  205. 'sw' => 'swahili',
  206. 'tl' => 'tagalog',
  207. 'tr' => 'turkish',
  208. 'uk' => 'ukrainian',
  209. 'ur' => 'urdu',
  210. 'uz' => 'uzbek',
  211. 'vi' => 'vietnamese',
  212. );
  213. /**
  214. * Maps ISO 639-2 3-letter language codes to the language names
  215. * in the language database.
  216. *
  217. * @var array
  218. */
  219. public static $code3ToName = array(
  220. 'ara' => 'arabic',
  221. 'aze' => 'azeri',
  222. 'ben' => 'bengali',
  223. 'bul' => 'bulgarian',
  224. 'ceb' => 'cebuano',
  225. 'ces' => 'czech',
  226. 'crp' => 'pidgin',
  227. 'cym' => 'welsh',
  228. 'dan' => 'danish',
  229. 'deu' => 'german',
  230. 'eng' => 'english',
  231. 'est' => 'estonian',
  232. 'fas' => 'farsi',
  233. 'fin' => 'finnish',
  234. 'fra' => 'french',
  235. 'hau' => 'hausa',
  236. 'haw' => 'hawaiian',
  237. 'hin' => 'hindi',
  238. 'hrv' => 'croatian',
  239. 'hun' => 'hungarian',
  240. 'ind' => 'indonesian',
  241. 'isl' => 'icelandic',
  242. 'ita' => 'italian',
  243. 'kaz' => 'kazakh',
  244. 'kir' => 'kyrgyz',
  245. 'lat' => 'latin',
  246. 'lav' => 'latvian',
  247. 'lit' => 'lithuanian',
  248. 'mkd' => 'macedonian',
  249. 'mon' => 'mongolian',
  250. 'nep' => 'nepali',
  251. 'nld' => 'dutch',
  252. 'nor' => 'norwegian',
  253. 'pol' => 'polish',
  254. 'por' => 'portuguese',
  255. 'pus' => 'pashto',
  256. 'rom' => 'romanian',
  257. 'rus' => 'russian',
  258. 'slk' => 'slovak',
  259. 'slv' => 'slovene',
  260. 'som' => 'somali',
  261. 'spa' => 'spanish',
  262. 'sqi' => 'albanian',
  263. 'srp' => 'serbian',
  264. 'swa' => 'swahili',
  265. 'swe' => 'swedish',
  266. 'tgl' => 'tagalog',
  267. 'tur' => 'turkish',
  268. 'ukr' => 'ukrainian',
  269. 'urd' => 'urdu',
  270. 'uzb' => 'uzbek',
  271. 'vie' => 'vietnamese',
  272. );
  273. /**
  274. * Returns the 2-letter ISO 639-1 code for the given language name.
  275. *
  276. * @param string $lang English language name like "swedish"
  277. *
  278. * @return string Two-letter language code (e.g. "sv") or NULL if not found
  279. */
  280. public static function nameToCode2($lang)
  281. {
  282. $lang = strtolower($lang);
  283. if (!isset(self::$nameToCode2[$lang])) {
  284. return null;
  285. }
  286. return self::$nameToCode2[$lang];
  287. }
  288. /**
  289. * Returns the 3-letter ISO 639-2 code for the given language name.
  290. *
  291. * @param string $lang English language name like "swedish"
  292. *
  293. * @return string Three-letter language code (e.g. "swe") or NULL if not found
  294. */
  295. public static function nameToCode3($lang)
  296. {
  297. $lang = strtolower($lang);
  298. if (!isset(self::$nameToCode3[$lang])) {
  299. return null;
  300. }
  301. return self::$nameToCode3[$lang];
  302. }
  303. /**
  304. * Returns the language name for the given 2-letter ISO 639-1 code.
  305. *
  306. * @param string $code Two-letter language code (e.g. "sv")
  307. *
  308. * @return string English language name like "swedish"
  309. */
  310. public static function code2ToName($code)
  311. {
  312. $lang = strtolower($code);
  313. if (!isset(self::$code2ToName[$code])) {
  314. return null;
  315. }
  316. return self::$code2ToName[$code];
  317. }
  318. /**
  319. * Returns the language name for the given 3-letter ISO 639-2 code.
  320. *
  321. * @param string $code Three-letter language code (e.g. "swe")
  322. *
  323. * @return string English language name like "swedish"
  324. */
  325. public static function code3ToName($code)
  326. {
  327. $lang = strtolower($code);
  328. if (!isset(self::$code3ToName[$code])) {
  329. return null;
  330. }
  331. return self::$code3ToName[$code];
  332. }
  333. }