SetLocale.php 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231
  1. <?php
  2. namespace App\Http\Middleware;
  3. use Closure;
  4. use Illuminate\Http\Request;
  5. use Illuminate\Support\Facades\App;
  6. use Illuminate\Support\Facades\Session;
  7. class SetLocale
  8. {
  9. function getLocaleCodeForDisplayLanguage($name){
  10. $languageCodes = array(
  11. "aa" => "Afar",
  12. "ab" => "Abkhazian",
  13. "ae" => "Avestan",
  14. "af" => "Afrikaans",
  15. "ak" => "Akan",
  16. "am" => "Amharic",
  17. "an" => "Aragonese",
  18. "ar" => "Arabic",
  19. "as" => "Assamese",
  20. "av" => "Avaric",
  21. "ay" => "Aymara",
  22. "az" => "Azerbaijani",
  23. "ba" => "Bashkir",
  24. "be" => "Belarusian",
  25. "bg" => "Bulgarian",
  26. "bh" => "Bihari",
  27. "bi" => "Bislama",
  28. "bm" => "Bambara",
  29. "bn" => "Bengali",
  30. "bo" => "Tibetan",
  31. "br" => "Breton",
  32. "bs" => "Bosnian",
  33. "ca" => "Catalan",
  34. "ce" => "Chechen",
  35. "ch" => "Chamorro",
  36. "co" => "Corsican",
  37. "cr" => "Cree",
  38. "cs" => "Czech",
  39. "cu" => "Church Slavic",
  40. "cv" => "Chuvash",
  41. "cy" => "Welsh",
  42. "da" => "Danish",
  43. "de" => "German",
  44. "dv" => "Divehi",
  45. "dz" => "Dzongkha",
  46. "ee" => "Ewe",
  47. "el" => "Greek",
  48. "en" => "English",
  49. "eo" => "Esperanto",
  50. "es" => "Spanish",
  51. "et" => "Estonian",
  52. "eu" => "Basque",
  53. "fa" => "Persian",
  54. "ff" => "Fulah",
  55. "fi" => "Finnish",
  56. "fj" => "Fijian",
  57. "fo" => "Faroese",
  58. "fr" => "French",
  59. "fy" => "Western Frisian",
  60. "ga" => "Irish",
  61. "gd" => "Scottish Gaelic",
  62. "gl" => "Galician",
  63. "gn" => "Guarani",
  64. "gu" => "Gujarati",
  65. "gv" => "Manx",
  66. "ha" => "Hausa",
  67. "he" => "Hebrew",
  68. "hi" => "Hindi",
  69. "ho" => "Hiri Motu",
  70. "hr" => "Croatian",
  71. "ht" => "Haitian",
  72. "hu" => "Hungarian",
  73. "hy" => "Armenian",
  74. "hz" => "Herero",
  75. "ia" => "Interlingua (International Auxiliary Language Association)",
  76. "id" => "Indonesian",
  77. "ie" => "Interlingue",
  78. "ig" => "Igbo",
  79. "ii" => "Sichuan Yi",
  80. "ik" => "Inupiaq",
  81. "io" => "Ido",
  82. "is" => "Icelandic",
  83. "it" => "Italian",
  84. "iu" => "Inuktitut",
  85. "ja" => "Japanese",
  86. "jv" => "Javanese",
  87. "ka" => "Georgian",
  88. "kg" => "Kongo",
  89. "ki" => "Kikuyu",
  90. "kj" => "Kwanyama",
  91. "kk" => "Kazakh",
  92. "kl" => "Kalaallisut",
  93. "km" => "Khmer",
  94. "kn" => "Kannada",
  95. "ko" => "Korean",
  96. "kr" => "Kanuri",
  97. "ks" => "Kashmiri",
  98. "ku" => "Kurdish",
  99. "kv" => "Komi",
  100. "kw" => "Cornish",
  101. "ky" => "Kirghiz",
  102. "la" => "Latin",
  103. "lb" => "Luxembourgish",
  104. "lg" => "Ganda",
  105. "li" => "Limburgish",
  106. "ln" => "Lingala",
  107. "lo" => "Lao",
  108. "lt" => "Lithuanian",
  109. "lu" => "Luba-Katanga",
  110. "lv" => "Latvian",
  111. "mg" => "Malagasy",
  112. "mh" => "Marshallese",
  113. "mi" => "Maori",
  114. "mk" => "Macedonian",
  115. "ml" => "Malayalam",
  116. "mn" => "Mongolian",
  117. "mr" => "Marathi",
  118. "ms" => "Malay",
  119. "mt" => "Maltese",
  120. "my" => "Burmese",
  121. "na" => "Nauru",
  122. "nb" => "Norwegian Bokmal",
  123. "nd" => "North Ndebele",
  124. "ne" => "Nepali",
  125. "ng" => "Ndonga",
  126. "nl" => "Dutch",
  127. "nn" => "Norwegian Nynorsk",
  128. "no" => "Norwegian",
  129. "nr" => "South Ndebele",
  130. "nv" => "Navajo",
  131. "ny" => "Chichewa",
  132. "oc" => "Occitan",
  133. "oj" => "Ojibwa",
  134. "om" => "Oromo",
  135. "or" => "Oriya",
  136. "os" => "Ossetian",
  137. "pa" => "Panjabi",
  138. "pi" => "Pali",
  139. "pl" => "Polish",
  140. "ps" => "Pashto",
  141. "pt" => "Portuguese",
  142. "qu" => "Quechua",
  143. "rm" => "Raeto-Romance",
  144. "rn" => "Kirundi",
  145. "ro" => "Romanian",
  146. "ru" => "Russian",
  147. "rw" => "Kinyarwanda",
  148. "sa" => "Sanskrit",
  149. "sc" => "Sardinian",
  150. "sd" => "Sindhi",
  151. "se" => "Northern Sami",
  152. "sg" => "Sango",
  153. "si" => "Sinhala",
  154. "sk" => "Slovak",
  155. "sl" => "Slovenian",
  156. "sm" => "Samoan",
  157. "so" => "Somali",
  158. "sq" => "Albanian",
  159. "sr" => "Serbian",
  160. "ss" => "Swati",
  161. "st" => "Southern Sotho",
  162. "su" => "Sundanese",
  163. "sv" => "Swedish",
  164. "sw" => "Swahili",
  165. "ta" => "Tamil",
  166. "te" => "Telugu",
  167. "tg" => "Tajik",
  168. "th" => "Thai",
  169. "ti" => "Tigrinya",
  170. "tk" => "Turkmen",
  171. "tl" => "Tagalog",
  172. "tn" => "Tswana",
  173. "to" => "Tonga",
  174. "tr" => "Turkish",
  175. "ts" => "Tsonga",
  176. "tt" => "Tatar",
  177. "tw" => "Twi",
  178. "ty" => "Tahitian",
  179. "ug" => "Uighur",
  180. "uk" => "Ukrainian",
  181. "ur" => "Urdu",
  182. "uz" => "Uzbek",
  183. "ve" => "Venda",
  184. "vi" => "Vietnamese",
  185. "vo" => "Volapuk",
  186. "wa" => "Walloon",
  187. "wo" => "Wolof",
  188. "xh" => "Xhosa",
  189. "yi" => "Yiddish",
  190. "yo" => "Yoruba",
  191. "za" => "Zhuang",
  192. "zh" => "Chinese",
  193. "zu" => "Zulu"
  194. );
  195. return array_search($name, array_flip($languageCodes));
  196. }
  197. /**
  198. *
  199. * Handle an incoming request.
  200. *
  201. * @param Request $request
  202. * @param Closure $next
  203. * @return mixed
  204. */
  205. public function handle($request, Closure $next)
  206. {
  207. if (Session::has('locale')) {
  208. $locale = Session::get('locale', config('app.locale'));
  209. } else {
  210. if (!config('app.dynamic_locale')) {
  211. $locale = config('app.locale');
  212. }else{
  213. $locale = substr($request->server('HTTP_ACCEPT_LANGUAGE'), 0, 2);
  214. if (!in_array($locale, config('app.available_locales'))
  215. || in_array(strtolower($this->getLocaleCodeForDisplayLanguage($locale)), UNSUPPORTED_LANGS)) {
  216. $locale = config('app.locale');
  217. }
  218. }
  219. }
  220. App::setLocale($locale);
  221. return $next($request);
  222. }
  223. }