私はCIバージョン2.1を実行しており、最近CodeIgniter 2.1国際化i18n(オリジナル著者:JérômeJaglale)をインストールしました。コードの説明は次のとおりです:http://codeigniter.com/wiki/URI_Language_Identifier/CodeIgniter 2.1国際化i18n - ユーザデータが存在する場合にデフォルト言語を上書きする
これはうまく動作しますが、ユーザーがウェブサイトへの以前の訪問時に言語設定を変更した場合、デフォルトの言語を上書きしたいと思います(これはデータベースのテーブルに保存されます)。
私の質問は、どうしますか?
(デフォルト言語がロードされている)MY_Lang.php
は実際にCodeIgniter MY_Controller
より先に読み込まれるため、ユーザーが優先言語を持っているかどうかを見つけるためにデータベースを読み込むことができません。
デフォルトの言語は、ここでMY_Lang.php
に設定されている:私は事前に私の$this->session->userdata('language')
おかげにはアクセスできませんここにいるので
function default_lang()
{
$browser_lang = !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) ? strtok(strip_tags($_SERVER['HTTP_ACCEPT_LANGUAGE']), ',') : '';
$browser_lang = substr($browser_lang, 0,2);
$default_lang = array_splice(array_keys($this->languages), 0,1);
return (array_key_exists($browser_lang, $this->languages)) ? $browser_lang : $default_lang[0];
}
しかし、私はそれを上書きすることができません! HERE
ANSWER:あなたはMY_Lang.php
ファイル内のCookieを読み取るためにネイティブPHPのクッキーを使用することができることが判明
。 Cookieヘルパーを使用しようとするとうまくいかないので、代わりに$ _COOKIEを使用し、コンテンツを取得する前に適切なフィルタを実行してください。その後
、MY_Lang.php
にちょうどこの変更:それは私だった場合、私が代わりにデータベースでこれを保管のためにクッキーを使用したい
if($_COOKIE['int_lang']) {
$preferred_lang = filter_var($_COOKIE['int_lang'], FILTER_SANITIZE_STRING);
return (array_key_exists($preferred_lang, $this->languages)) ? $preferred_lang : $default_lang[0];
}
else
{
return (array_key_exists($browser_lang, $this->languages)) ? $browser_lang : $default_lang[0];
}
lang()メソッドでは、選択された "lang"の値を含むクッキーを送信するコードを追加する必要があることに注意してください。 – Henry8