Avatar billede blach Nybegynder
07. september 2004 - 15:51 Der er 25 kommentarer og
1 løsning

Sprog script virker ikke mere

Jeg har et sprog script, hvor man kan ændre sprog ved at lave f.eks. URL til main.php?sprog=da
Men hvorfor virker dette ikke på nogle servere? er der noget der skal ændres mht. GLOBALS?

Script:
<?
if($sprog == "da" || $sprog == "en") {
  setcookie("languageCookie", $sprog);
  $languageCookie = $sprog;
}

if ($languageCookie == "en" || $languageCookie == "da")
  $language = $languageCookie;

else if ($HTTP_ACCEPT_LANGUAGE == "en")
  $language = $HTTP_ACCEPT_LANGUAGE;
else if ($HTTP_ACCEPT_LANGUAGE == "da")
  $language = $HTTP_ACCEPT_LANGUAGE;

else
  $language = "en";

if ($language == 'en') {
include "main_en.php";
}
if ($language == 'da') {
include "main_da.php";
}
?>
Avatar billede coderdk Praktikant
07. september 2004 - 15:55 #1
Brug f.eks.:

if ($_COOKIE['languageCookie'] == "en" || $_COOKIE['languageCookie'] == "da")
  $language = $_COOKIE['languageCookie'];

osv...
Avatar billede detox Nybegynder
07. september 2004 - 15:55 #2
Ja, det er et godt bud. Prøv at indsætte dette foroven:

$sprog = $_GET['sprog'];
Avatar billede coderdk Praktikant
07. september 2004 - 15:56 #3
Avatar billede blach Nybegynder
07. september 2004 - 17:08 #4
ok, det ser et eller andet sted ud til at virke bedre...
Men hvorfor skifter den først sprog når jeg reloader siden? Altså jeg har sådan en SELECT box som nedenfor, men den skifter først sprog når jeg klikker på F5... Hvad kan jeg gøre?

    <FORM method="GET" action="main.php">
    <SELECT CLASS="but" style="width:150px" name="sprog" onchange="this.form.submit()">
      <option value="">Change language</option>
      <option value="en">English</option>
      <option value="da">Danish</option>
    </SELECT>
    </FORM>
Avatar billede blach Nybegynder
07. september 2004 - 17:32 #5
Man må da kunne gøre et eller andet??
Min side skifter fint nok, når jeg vel og mærket klikker F5... (eller videre på siden)
Avatar billede detox Nybegynder
07. september 2004 - 18:17 #6
Hvis du har lavet den ændring coderdk foreslår, er det korrekt at du skal reloade. Du kan først tjekke en cookie når du har reloadet.
Avatar billede blach Nybegynder
07. september 2004 - 18:23 #7
Skal jeg så undvære hans ændring og kun køre med din?
kan man ik lave et eller andet smart så den kan skifte med det samme? f.eks. med session?

Før i tiden kunne det script godt skifte med det samme...
Avatar billede detox Nybegynder
07. september 2004 - 18:24 #8
Så du burde kunne lave det i den her stil:

<?
if (isset($_COOKIE["languageCookie"])) {
    $languageCookie = $_COOKIE["languageCookie"];
} elseif(isset($_GET["sprog"])) {
    setcookie("languageCookie", $_GET["sprog"]);
    $languageCookie = $_GET["sprog"];
}

if ($languageCookie == "en" || $languageCookie == "da")
  $language = $languageCookie;

else if ($HTTP_ACCEPT_LANGUAGE == "en")
  $language = $HTTP_ACCEPT_LANGUAGE;
else if ($HTTP_ACCEPT_LANGUAGE == "da")
  $language = $HTTP_ACCEPT_LANGUAGE;

else
  $language = "en";

if ($language == 'en') {
include "main_en.php";
}
if ($language == 'da') {
include "main_da.php";
}
?>
Avatar billede detox Nybegynder
07. september 2004 - 18:25 #9
Eller måske skal du bytte rundt på de to første if/elseif alt efter hvad du vil tjekke først.
Avatar billede blach Nybegynder
07. september 2004 - 18:26 #10
Okay, hvis jeg undværer de ændringer som coder sendte, og tilføjer dine detox, så virker det fint..
men så sætter den vel ingen cookie?
Avatar billede detox Nybegynder
07. september 2004 - 18:26 #11
Altså:

if(isset($_GET["sprog"])) {
    setcookie("languageCookie", $_GET["sprog"]);
    $languageCookie = $_GET["sprog"];
}elseif (isset($_COOKIE["languageCookie"])) {
    $languageCookie = $_COOKIE["languageCookie"];
}
Avatar billede blach Nybegynder
07. september 2004 - 18:30 #12
yup det virker også fint... så sætter den en cookie?
Avatar billede detox Nybegynder
07. september 2004 - 18:34 #13
Ja, må jeg anbefale dig at skifte de 4 linjer:

else if ($HTTP_ACCEPT_LANGUAGE == "en")
  $language = $HTTP_ACCEPT_LANGUAGE;
else if ($HTTP_ACCEPT_LANGUAGE == "da")
  $language = $HTTP_ACCEPT_LANGUAGE;

til:

else if ($_SERVER['HTTP_ACCEPT_LANGUAGE'] == "en")
  $language = $HTTP_ACCEPT_LANGUAGE;
else if ($_SERVER['HTTP_ACCEPT_LANGUAGE'] == "da")
  $language = $_SERVER['HTTP_ACCEPT_LANGUAGE'];
Avatar billede detox Nybegynder
07. september 2004 - 18:35 #14
Skulle selvfølgelig være:

else if ($_SERVER['HTTP_ACCEPT_LANGUAGE'] == "en" || $_SERVER['HTTP_ACCEPT_LANGUAGE'] == "da")
  $language = $_SERVER['HTTP_ACCEPT_LANGUAGE'];
Avatar billede blach Nybegynder
07. september 2004 - 18:37 #15
Dette ik godt nok?
<?
if(isset($_GET["sprog"])) {
    setcookie("languageCookie", $_GET["sprog"]);
    $languageCookie = $_GET["sprog"];
}elseif (isset($_COOKIE["languageCookie"])) {
    $languageCookie = $_COOKIE["languageCookie"];
}


if ($languageCookie == "en" || $languageCookie == "da")
  $language = $languageCookie;

else if ($HTTP_ACCEPT_LANGUAGE == "en")
  $language = $HTTP_ACCEPT_LANGUAGE;
else if ($HTTP_ACCEPT_LANGUAGE == "da")
  $language = $HTTP_ACCEPT_LANGUAGE;

else
  $language = "en";

if ($language == 'en') {
include "main_en.php";
}
if ($language == 'da') {
include "main_da.php";
}
?>
Avatar billede detox Nybegynder
07. september 2004 - 18:42 #16
Jo måske, jeg vil bare råde dig til at bruge: $_SERVER['HTTP_ACCEPT_LANGUAGE'] istedet for: $HTTP_ACCEPT_LANGUAGE.
Og så skal du være obs på at cookie kun holder under selve sessionen når du ikke sætter tid på den.
Avatar billede detox Nybegynder
07. september 2004 - 18:47 #17
Skal den fx virke 1 time, skal den se sådan ud:

setcookie("languageCookie", $_GET["sprog"], time()+3600);

eller 1 år:

setcookie("languageCookie", $_GET["sprog"], time()+(3600*24*365));
Avatar billede blach Nybegynder
07. september 2004 - 18:48 #18
ok, det lyder helt fint..
men hvorfor så have cookie på når den bliver slettet alligevel?
Avatar billede detox Nybegynder
07. september 2004 - 18:49 #19
Næ, normalt sætter man osse en tidsbegrænsning på dem.
Avatar billede blach Nybegynder
07. september 2004 - 18:55 #20
Kan du lave scriptet uden cookie?
Avatar billede blach Nybegynder
07. september 2004 - 18:55 #21
-bare med session?
Avatar billede detox Nybegynder
07. september 2004 - 19:03 #22
Ja, det kan du sagtens, hvis det alligevel bare skal holde under selve sessionen.

<?
session_start();
if(isset($_GET["sprog"])) {
    $_SESSION['language'] = $_GET["sprog"];
    $slanguage = $_GET["sprog"];
}elseif (isset($_SESSION['language'])) {
    $slanguage = $_SESSION['language'];
}

if ($slanguage == "en" || $slanguage == "da")
  $language = $slanguage;
else if ($_SERVER['HTTP_ACCEPT_LANGUAGE'] == "en")
  $language = $_SERVER['HTTP_ACCEPT_LANGUAGE'];
else if ($_SERVER['HTTP_ACCEPT_LANGUAGE'] == "da")
  $language = $_SERVER['HTTP_ACCEPT_LANGUAGE'];
else
  $language = "en";

if ($language == 'en') {
  include "main_en.php";
}
if ($language == 'da') {
  include "main_da.php";
}

?>
Avatar billede detox Nybegynder
07. september 2004 - 19:05 #23
Så skal du bare huske: session_start(); på alle sider.
Avatar billede web-geek Nybegynder
07. september 2004 - 19:06 #24
Avatar billede blach Nybegynder
07. september 2004 - 19:35 #25
Tusinde tak skal du have detox :)
Avatar billede detox Nybegynder
07. september 2004 - 19:48 #26
Velbekommen
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester