私はそれをすべて構築しました:フックで言語を切り替えることは機能することを意味しますが、今はURLから言語を取得して、次のように切り替えたいと思います:
または
したがって、最初のリンクを誰かに送信すると、言語が自動的に検出され、そのページとすべてのナビゲーションリンクがその言語で表示されます。
ルートでは、使用したい言語をメインコントローラーの関数パラメーターにすでに転送しています。次に、その言語を設定する必要があります。しかし、$ this-> session-> set_userdata( 'site_lang'、 "српски")を実行しても、背後の言語はすべて変更されません。
既存の言語スイッチャーでは、言語セッションを選択した言語に設定した後、リダイレクトが使用され、参照リンクにリダイレクトされることに気付きましたが、ユーザーの直接入力を管理する方法は?
私は自分自身を明確にし、誰かがこれに参加することを願っています。
ありがとうございました。
私はこのような解決策を見つけました:
アップデート1:
私は最初に言語スイッチャーでこのようにしました:
class LanguageSwitcher extends CI_Controller {
public function __construct() {
parent::__construct();
}
function switchLang($language = "") {
$lang_en['about-me'] = 'o-meni';
$lang_sr['o-meni'] = 'about-me';
$lang_en['services'] = 'usluge';
$lang_sr['usluge'] = 'services';
$lang_en['products'] = 'proizvodi';
$lang_sr['proizvodi'] = 'products';
$lang_en['downloads'] = 'preuzimanja';
$lang_sr['preuzimanja'] = 'downloads';
$lang_en['contact'] = 'kontakt';
$lang_sr['kontakt'] = 'contact';
if ($language === "") {
$language = 'српски';
}
$this->session->set_userdata('site_lang', $language);
$referrer = strtolower($this->agent->referrer());
//log_message('error', "switchLang:" . $referrer . ", lang:" . $language);
if ($referrer !== "") {
$l = str_replace(base_url(), "", substr($referrer, strrpos($referrer, base_url())));
if (urldecode($language) === 'српски' && array_key_exists($l, $lang_en)) {
$referrer = str_replace($l, $lang_en[$l], $referrer);
} else
if (urldecode($language) === 'english' && array_key_exists($l, $lang_sr)) {
$referrer = str_replace($l, $lang_sr[$l], $referrer);
}
redirect($referrer);
}
}
}
次に、コントローラーで、呼び出す関数を作成します。
private function redirectLanguage($param) {
$site_lang = urldecode($this->session->userdata('site_lang'));
//echo $param . "+" . $site_lang;
if ($param === "sr" && ($site_lang === "english" || $site_lang === "")) {
$this->session->set_userdata('site_lang', "српски");
$this->lang->load("message", "српски");
} else if ($param === "en" && ($site_lang === "српски" || $site_lang === "")) {
$this->session->set_userdata('site_lang', "english");
$this->lang->load("message", "english");
}
}
このような:
public function about($param = "") {
$this->redirectLanguage($param);
$this->load->view('header');
$this->load->view('main_starts');
$this->load->view('about-me');
$this->load->view('main_ends');
$this->load->view('footer');
}
このようにして、ブラウザのアドレスバーに直接貼り付けてメッセージをロードし、セッションsite_langを設定すると、それをキャッチできます。
IEとEDGEのいくつかの問題を除いて、すべて機能するようになりました。
アップデート2:
他のブラウザでも機能するように、これを追加する必要がありました。
$browser = $this->agent->browser();
if ($browser === "Chrome" || $browser === "Firefox") {
header("Cache-Control: max-age=3600, public");
} else {
header("Expires: Sun, 19 Nov 1978 05:00:00 GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");
}
キャッシュがオンになっていると、Internet Explorerでセッションがうまく機能しないため、オフにすることをお勧めします。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加