내가 가지고있는 ?setLang
매개 변수는 URL
if (isSet($_GET["setLang"])) {
setcookie("lang",$_GET["setLang"]);
}
if (!isSet($_COOKIE["lang"])) {
//negociate language and set locale
}else{
//set locale to cookie
}
//translate with gettex
내가 이동에있을 때 쿠키를 설정이 PHP 코드 website.com/?setLand=en 정확히 예상대로 작동합니다. gettext를 번역가 작동하지 않는 링크를 통해,
<a href="?setLang=en">en</a>
나는 그것을 클릭하면 (직접 이동하지 않음) : 내가 website.com에서이 형태로 URL에 연결할 때
문제는 그렇지 않으면 예상대로 작동합니다.
내 첫번째 생각은 내가 새로 고침의 어떤 종류를 강제해야한다고, 그래서 내가 그랬어 :
<a href="?setLang=en" onClick="window.location.reload(true);">en</a>
그러나 그것은 작동하지 않습니다.
코드를 검사했는데 링크를 클릭하면 쿠키가 설정되어 사실을 더욱 혼란스럽게합니다.
단지의 경우에 전체 코드는 다음
<?php
if (isSet($_GET["setLang"])) {
setcookie("lang",$_GET["setLang"]);
}
if (!isSet($_COOKIE["lang"])) {
$langs = array(
'en-US',// default
'fr',
'fr-FR',
'de',
'de-DE',
'de-AT',
'de-CH',
);
$locale = substr(http_negotiate_language($langs), 0, 2);
}else{
$locale = $_COOKIE["lang"];
}
//if (isSet($_GET["locale"])) $locale = $_GET["locale"];
if($locale == "en")
$locale = "en_US.utf8";
if($locale == "de")
$locale = "de_DE.utf8";
if($locale == "fr")
$locale = "fr_FR.utf8";
putenv("LC_ALL=$locale");
setlocale(LC_ALL, $locale);
// Specify location of translation tables
bindtextdomain("translation", "locale");
// Choose domain
textdomain("translation");
// Translation is looking for in ./locale/de_DE/LC_MESSAGES/myPHPApp.mo now
// Print a test message
//echo _("title");
?>
및 링크 : 당신이 링크가있을 때
...
<a href="?setLang=en" onClick="window.location.reload(true);">en</a>
...
쿠키는 website.com에서 작동하지만 localhost 또는 FQDN없이 링크를 사용할 때 할당 된 IP가 아닙니다. // 또 다른 디버깅/테스트 방법은 모든 쿠키를 보는 것입니다. print_r ($ _ COOKIE); ' – ndasusers
흥미로 우며, 서버에서 직접 시도해 보겠습니다. 내가 검사 할 때 쿠키가 랑 (lang)이라고 불리는 것으로 설정되어 있지만 $ _COOKIE를 인쇄하면 표시되지 않습니다 ... – Trufa
@ndasusers 그래서 나는 행운이없는 서버에서, $ _COOKIE를 출력 할 때 다음과 같은 결과를 얻었습니다. 메인 도메인에 도착했을 때 :'Array ([force_locale] => en [hl] => en)' 링크를 클릭하면'Array ([force_locale] => en [hl] => en)'(변경 없음)하고 링크를 직접 새로 고치거나 입력 할 때'Array ([lang] => de [force_locale] = > ko [hl] => ko)' – Trufa