
рдЕрдм рдореИрдВ рдПрдХ рдРрд╕реА рд╕рд╛рдЗрдЯ рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдЬреЛ рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ рд╡реИрд╢реНрд╡рд┐рдХ рд╣реЛрдиреЗ рдХрд╛ рджрд╛рд╡рд╛ рдХрд░рддреА рд╣реИ рдФрд░ рдмрд╣реБрднрд╛рд╖рд╛рд╡рд╛рдж рдХреЗ рд╕рд╛рде рдпрд╣ рд╕рдм рдареАрдХ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рд╡рд┐рднрд┐рдиреНрди рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреЛрдИ рдмрд╛рдд рдирд╣реАрдВ рд╣реЛрдЧреАред рд╣рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рднрд╛рд╖рд╛ рдХрд╛ рдирд┐рд░реНрдзрд╛рд░рдг рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗ, рдФрд░ рд╕рд╛рдЗрдЯ рдкрд░ рдЙрдкрд▓рдмреНрдз рд╕рдмрд╕реЗ рдЙрдкрдпреБрдХреНрдд рднрд╛рд╖рд╛ рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЪрдпрди рдХрд░реЗрдВрдЧреЗред
рдЬреЛ рдкрдврд╝рдиреЗ рдореЗрдВ рдмрд╣реБрдд рдЖрд▓рд╕реА рд╣реИ - рдкреЗрдВрдЪрдХрд╕ рдХреЛ рджреЗрдЦреЛ
, рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмрд╣реБрдд рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЗрд╕реЗ рдпрд╣рд╛рдВ рдкреЛрд╕реНрдЯ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реВрдВред
рдФрд░ рдЗрд╕рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдкрд╛рд╕:
- рдкреАрдПрдЪрдкреА
- CodeIgniter рдврд╛рдВрдЪрд╛ (рд╡рд░реНрдЧ рдЗрд╕ рдврд╛рдВрдЪреЗ рдХреЗ рд▓рд┐рдП рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдорд╛рдореВрд▓реА рдмрджрд▓рд╛рд╡реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╣реАрдВ рднреА рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ)
рдЙрджреНрджреЗрд╢реНрдп:
рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рднрд╛рд╖рд╛ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ рдФрд░ рдпрджрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд░реВрд╕реА-рднрд╛рд╖реА рд╣реИ (рд░реВрд╕реА, рдмреЗрд▓рд╛рд░реВрд╕, рдпреВрдХреНрд░реЗрдиреА рдкреВрд░реНрдг рд╕реВрдЪреА
рдпрд╣рд╛рдВ ) рд╣рдо рдЙрд╕реЗ рд░реВрд╕реА рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рджрд┐рдЦрд╛рддреЗ рд╣реИрдВред рдпрджрд┐ рдирд╣реАрдВ, рддреЛ рдЕрдВрдЧреНрд░реЗрдЬреА рдореЗрдВред
рдпрд╣ рд╕рдм рдХрд┐рд╕реА рд╡рд░реНрдЧ рдпрд╛ рдХрд╛рд░реНрдп рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рддрд╛рдХрд┐ рд╕рд╛рдЗрдЯ рдкрд░ рдЙрд╕рдХреА рд╕рдордЭ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рднрд╛рд╖рд╛ рд╕реЗ рд▓рд┐рдВрдХ рдХреА рддрд░рд╣ рдХреБрдЫ рдЬрд▓реНрджреА рд╕реЗ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣реЛред
рд╕рдорд╛рдзрд╛рди:
рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рднрд╛рд╖рд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рд╕реБрдкрд░рдЧреНрд▓реЛрдмрд▓ рд╕рд░рдгреА $ _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, '-');
рдлрд╝рдВрдХреНрд╢рди
рдореБрдЦреНрдп рднрд╛рд╖рд╛ рдХреЛрдб рдкреНрд░рд╛рд░реВрдк рдХреА рднрд╛рд╖рд╛рдУрдВ рдХреЛ рдХрд╛рдЯ рджреЗрддрд╛ рд╣реИ
- рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рднрд╛рд╖рд╛ рдХреЛрдб рдкреНрд░рд╛рд░реВрдк
рдХреЗ рдмрд╛рдж рд╕реЗ
рдореБрдЦреНрдп рднрд╛рд╖рд╛ рдХреЛрдб рднрд╛рд╖рд╛ рдХреЗ рдЕрдВрдЧреНрд░реЗрдЬреА рдФрд░ рдЕрдореЗрд░рд┐рдХреА рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЙрддреНрдкрдиреНрди рд╣реЛрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдк рдЪрд╛рд╣реЗрдВ рддреЛ рдЗрд╕реЗ рд╣рдореЗрд╢рд╛ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред
рдЗрд╕рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╕рдмрд╕реЗ рдЙрдкрдпреБрдХреНрдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рднрд╛рд╖рд╛ рд╣реЛрдЧреА,
рдЖрдИрдПрд╕рдУ 639 рдкреНрд░рд╛рд░реВрдк рдореЗрдВ, рдореИрдВрдиреЗ рдЕрдВрдЧреНрд░реЗрдЬреА рдХреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рднрд╛рд╖рд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛, рдФрд░
рдПрди рдЙрди рд╕рднреА рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╡рд╛рдкрд╕ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдЬреЛ $ рд▓реИрдВрдЧреНрд╕ рд╕рд░рдгреА рдореЗрдВ рдирд╣реАрдВ рд╣реИрдВред
рдпрд╣рд╛рдВ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдбрд╛рдЙрдирд▓реЛрдб
рдХрд░реЗрдВ