рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рднрд╛рд╖рд╛ рдХреА рд╕рдХреНрд╖рдо рдкрд░рд┐рднрд╛рд╖рд╛

рдЕрдм рдореИрдВ рдПрдХ рдРрд╕реА рд╕рд╛рдЗрдЯ рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдЬреЛ рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ рд╡реИрд╢реНрд╡рд┐рдХ рд╣реЛрдиреЗ рдХрд╛ рджрд╛рд╡рд╛ рдХрд░рддреА рд╣реИ рдФрд░ рдмрд╣реБрднрд╛рд╖рд╛рд╡рд╛рдж рдХреЗ рд╕рд╛рде рдпрд╣ рд╕рдм рдареАрдХ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рд╡рд┐рднрд┐рдиреНрди рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреЛрдИ рдмрд╛рдд рдирд╣реАрдВ рд╣реЛрдЧреАред рд╣рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рднрд╛рд╖рд╛ рдХрд╛ рдирд┐рд░реНрдзрд╛рд░рдг рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗ, рдФрд░ рд╕рд╛рдЗрдЯ рдкрд░ рдЙрдкрд▓рдмреНрдз рд╕рдмрд╕реЗ рдЙрдкрдпреБрдХреНрдд рднрд╛рд╖рд╛ рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЪрдпрди рдХрд░реЗрдВрдЧреЗред

рдЬреЛ рдкрдврд╝рдиреЗ рдореЗрдВ рдмрд╣реБрдд рдЖрд▓рд╕реА рд╣реИ - рдкреЗрдВрдЪрдХрд╕ рдХреЛ рджреЗрдЦреЛ , рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмрд╣реБрдд рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЗрд╕реЗ рдпрд╣рд╛рдВ рдкреЛрд╕реНрдЯ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реВрдВред

рдФрд░ рдЗрд╕рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдкрд╛рд╕:

рдЙрджреНрджреЗрд╢реНрдп:
рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рднрд╛рд╖рд╛ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ рдФрд░ рдпрджрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд░реВрд╕реА-рднрд╛рд╖реА рд╣реИ (рд░реВрд╕реА, рдмреЗрд▓рд╛рд░реВрд╕, рдпреВрдХреНрд░реЗрдиреА рдкреВрд░реНрдг рд╕реВрдЪреА рдпрд╣рд╛рдВ ) рд╣рдо рдЙрд╕реЗ рд░реВрд╕реА рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рджрд┐рдЦрд╛рддреЗ рд╣реИрдВред рдпрджрд┐ рдирд╣реАрдВ, рддреЛ рдЕрдВрдЧреНрд░реЗрдЬреА рдореЗрдВред
рдпрд╣ рд╕рдм рдХрд┐рд╕реА рд╡рд░реНрдЧ рдпрд╛ рдХрд╛рд░реНрдп рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рддрд╛рдХрд┐ рд╕рд╛рдЗрдЯ рдкрд░ рдЙрд╕рдХреА рд╕рдордЭ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рднрд╛рд╖рд╛ рд╕реЗ рд▓рд┐рдВрдХ рдХреА рддрд░рд╣ рдХреБрдЫ рдЬрд▓реНрджреА рд╕реЗ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣реЛред

рд╕рдорд╛рдзрд╛рди:
рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рднрд╛рд╖рд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рд╕реБрдкрд░рдЧреНрд▓реЛрдмрд▓ рд╕рд░рдгреА $ _SERVER рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдпрд╛ рдЗрд╕рдХреЗ рддрддреНрд╡ $ _SERVER ['HTTP_ACCEPT_LANGUAGE'], рдпрд╣ рднрд╛рд╖рд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЧреНрд░рд╛рд╣рдХ рдХреА рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдУрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдПрдХреНрд╕реЗрдкреНрдЯ-рд▓реИрдВрдЧреНрд╡реЗрдЬ HTTP рд╣реЗрдбрд░ рд╕реЗ рдирд┐рдХрд╛рд▓рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдХреНрд▓рд╛рдЗрдВрдЯ рд╕рд░реНрд╡рд░ рдкрд░ рднреЗрдЬрддрд╛ рд╣реИред
рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдерд╛
ru-ru,ru;q=0.8,en-us;q=0.6,en;q=0.4 

рдЗрд╕ рдкрдВрдХреНрддрд┐ рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рднрд╛рд╖рд╛рдПрдВ рд╣реИрдВ рдЬреЛ рд╡рд╣ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЙрдирдХреА рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдУрдВ рдХреЛ q рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╡реНрдпрдХреНрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдпрджрд┐ q рднрд╛рд╖рд╛ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рд╣реИ, рддреЛ рдпрд╣ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ 1. рд╣реЛрдЧрд╛ред рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рдХрдо рдкрдардиреАрдп рд░реВрдк рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
 Array ( [ru-ru] => 1 [ru] => 0.8 [en-us] => 0.6 [en] => 0.4 ) 

рдЗрд╕рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рд░реВрд╕реА рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВ, рдФрд░ рджреВрд╕рд░реЗ рд╕реНрдерд╛рди рдкрд░ рдореЗрд░реЗ рдкрд╛рд╕ рдЕрдВрдЧреНрд░реЗрдЬреА рд╣реИред
рднрд╛рд╖рд╛рдПрдВ рджреЛ рд╕реНрд╡рд░реВрдкреЛрдВ рдореЗрдВ рд▓рд┐рдЦреА рдЬрд╛рддреА рд╣реИрдВред рдореБрдЦреНрдп рднрд╛рд╖рд╛ рдХреЛрдб рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ "рдЖрд░рдпреВ" рдФрд░ "рдПрди" рд╣реИ, рдЬреЛ рднрд╛рд╖рд╛ рдорд╛рдирдХреЛрдВ рдЖрдИрдПрд╕рдУ 0439 рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИ
рдФрд░ рдореБрдЦреНрдп рднрд╛рд╖рд╛ рдХреЛрдб рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рднрд╛рд╖рд╛ рдХреЛрдб рд╣реИ, рдпрд╣ "рдЖрд░рдпреВ-рдЖрд░рдпреВ" рдФрд░ "рдПрди-рдпреВ" рд╣реИ рдпрд╣рд╛рдВ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рднрд╛рд╖рд╛ рдХреЛрдб рдЙрд╕ рднрд╛рд╖рд╛ рдХреЗ рдХреНрд╖реЗрддреНрд░ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдореИрдВ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ рд╕рдВрдпреБрдХреНрдд рд░рд╛рдЬреНрдп рдЕрдореЗрд░рд┐рдХрд╛ рд╣реИред
рдХрдИ рдмрд╛рд░, рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдЧрд▓рддрдлрд╣рдореА рд╣реЛрддреА рд╣реИ рдХрд┐ рдЬрдм рдЖрдИрдПрд╕рдУ рдХреЛрдб рд╕реВрдЪрд┐рдпреЛрдВ рдореЗрдВ рджреЛ-рдЕрдХреНрд╖рд░ рдФрд░ рддреАрди-рдЕрдХреНрд╖рд░ рдХреЛрдб (рдХрднреА-рдХрднреА рдХрдИ рддреАрди-рдЕрдХреНрд╖рд░ рдХреЛрдб) рд╣реЛрддреЗ рд╣реИрдВ, рддреЛ рднрд╛рд╖рд╛рдУрдВ рдХреЛ рдХреИрд╕реЗ рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПред рдЕрдм рд╕рднреА рдорд╛рдиреНрдп рдХреЛрдб рдПрдХ IANA рд░рдЬрд┐рд╕реНрдЯреНрд░реА рдореЗрдВ рд╕реВрдЪреАрдмрджреНрдз рд╣реИрдВ, рдЬреЛ рдХрд┐ рднрд╛рд╖рд╛ рдХреЗ рд▓рд┐рдП ISO рд╕реВрдЪрд┐рдпреЛрдВ рд╕реЗ рдХреЗрд╡рд▓ рдПрдХ рдорд╛рди рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рджреЛ-рдЕрдХреНрд╖рд░ рдХрд╛ рдЖрдИрдПрд╕рдУ рдХреЛрдб рдЙрдкрд▓рдмреНрдз рд╣реИ, рддреЛ рдпрд╣ рд░рдЬрд┐рд╕реНрдЯреНрд░реА рдореЗрдВ рдПрдХ рд╣реЛрдЧрд╛ред рдЕрдиреНрдпрдерд╛, рд░рдЬрд┐рд╕реНрдЯреНрд░реА рдореЗрдВ рдПрдХ рддреАрди-рдЕрдХреНрд╖рд░ рдХреЛрдб рд╣реЛрдЧрд╛ред рдпрд╣ рдЪреАрдЬреЛрдВ рдХреЛ рд╕рд░рд▓ рдХрд░реЗрдЧрд╛ред

рд╣рдордиреЗ рд╕рд┐рджреНрдзрд╛рдВрдд рдХреЛ рд╣рд▓ рдХрд┐рдпрд╛ рдФрд░ рдЕрднреНрдпрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝реЗ:
рдХреНрд▓рд╛рд╕ рдХрдВрдЯреНрд░реЛрд▓рд░ рдХрд╛ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рд▓рд┐рдЦреЗрдВ:
 public function __construct() { if (($list = strtolower($_SERVER['HTTP_ACCEPT_LANGUAGE']))) { if (preg_match_all('/([az]{1,8}(?:-[az]{1,8})?)(?:;q=([0-9.]+))?/', $list, $list)) { $this->language = array_combine($list[1], $list[2]); foreach ($this->language as $n => $v) $this->language[$n] = $v ? $v : 1; arsort($this->language, SORT_NUMERIC); } } else $this->language = array(); } 

рдпрд╣рд╛рдВ рд╣рдо $ _SERVER ['HTTP_ACCEPT_LANGUAGE'] рджреНрд╡рд╛рд░рд╛ рд▓реМрдЯрд╛рдП рдЧрдП рддрд╛рд░ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдпрд╣ рдлрд╝реЙрд░реНрдо рдХрд╛ рдПрдХ рд╕рд░рдгреА рдмрди рдЬрд╛рдП
 Array ( [ru-ru] => 1 [ru] => 0.8 [en-us] => 0.6 [en] => 0.4 ) 

рднрд╛рд╖рд╛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХреЗ рдШрдЯрддреЗ рдХреНрд░рдо рдореЗрдВ рдХреНрд░рдордмрджреНрдз (q рдорд╛рди)

рдЕрдЧрд▓рд╛, рдПрдХ рд╡рд┐рдзрд┐ рдмрдирд╛рдПрдВ рдЬреЛ рд╕рдмрд╕реЗ рдЙрдкрдпреБрдХреНрдд рднрд╛рд╖рд╛ рдХреЛ рдвреВрдВрдврддреА рд╣реИред
рдкрд╣рд▓рд╛ рдкреИрд░рд╛рдореАрдЯрд░ рдЗрд╕реЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рднрд╛рд╖рд╛ рдХреЗ рд▓рд┐рдП рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рджреВрд╕рд░рд╛ рд╕рд░рдгреА рдЬрд┐рд╕рдореЗрдВ рд╕рд╛рдЗрдЯ рдкрд░ рдореМрдЬреВрдж рднрд╛рд╖рд╛рдПрдВ рд╣реЛрдВрдЧреА, рдФрд░ рдЕрдиреНрдп рднрд╛рд╖рд╛рдУрдВ рд╕реЗ рдЗрд╕рдХреЗ рд▓рд┐рдВрдХ рдХреЗ рдорд╛рди рдПрдХ рд╕рд░рдгреА рдХреА рддрд░рд╣ рджрд┐рдЦрддреЗ рд╣реИрдВ:
 $langs=array( 'ru'=>array('ru','be','uk','ky','ab','mo','et','lv'), 'de'=>'de' ); 

рд╡рд┐рдзрд┐ рдХреЛрдб:
  public function getBestMatch($default, $langs) { $languages=array(); foreach ($langs as $lang => $alias) { if (is_array($alias)) { foreach ($alias as $alias_lang) { $languages[strtolower($alias_lang)] = strtolower($lang); } }else $languages[strtolower($alias)]=strtolower($lang); } foreach ($this->language as $l => $v) { $s = strtok($l, '-'); //          "en-us, ru-ru" if (isset($languages[$s])) return $languages[$s]; } return $default; } 

рдлрд╝рдВрдХреНрд╢рди рдореБрдЦреНрдп рднрд╛рд╖рд╛ рдХреЛрдб рдкреНрд░рд╛рд░реВрдк рдХреА рднрд╛рд╖рд╛рдУрдВ рдХреЛ рдХрд╛рдЯ рджреЗрддрд╛ рд╣реИ - рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рднрд╛рд╖рд╛ рдХреЛрдб рдкреНрд░рд╛рд░реВрдк рдХреЗ рдмрд╛рдж рд╕реЗ рдореБрдЦреНрдп рднрд╛рд╖рд╛ рдХреЛрдб рднрд╛рд╖рд╛ рдХреЗ рдЕрдВрдЧреНрд░реЗрдЬреА рдФрд░ рдЕрдореЗрд░рд┐рдХреА рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЙрддреНрдкрдиреНрди рд╣реЛрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдк рдЪрд╛рд╣реЗрдВ рддреЛ рдЗрд╕реЗ рд╣рдореЗрд╢рд╛ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред
рдЗрд╕рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╕рдмрд╕реЗ рдЙрдкрдпреБрдХреНрдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рднрд╛рд╖рд╛ рд╣реЛрдЧреА, рдЖрдИрдПрд╕рдУ 639 рдкреНрд░рд╛рд░реВрдк рдореЗрдВ, рдореИрдВрдиреЗ рдЕрдВрдЧреНрд░реЗрдЬреА рдХреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рднрд╛рд╖рд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛, рдФрд░ рдПрди рдЙрди рд╕рднреА рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╡рд╛рдкрд╕ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдЬреЛ $ рд▓реИрдВрдЧреНрд╕ рд╕рд░рдгреА рдореЗрдВ рдирд╣реАрдВ рд╣реИрдВред

рдпрд╣рд╛рдВ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ

Source: https://habr.com/ru/post/In159129/


All Articles