Avatar billede blach Nybegynder
02. oktober 2003 - 17:40 Der er 20 kommentarer og
1 løsning

Automatisk valg af sprog

Hej eksperter...

Jeg har brugt en stump kode i index.php til at definere om en side skal være dansk, engelsk eller tysk. Dette har da også virket fint, indtil jeg uploadede en side til en nyt webhotel: Nu starter siden med engelsk sprog og jeg kan ikke skifte det ved en <A HREF=index.php?sprog=da>

Hvad er der galt? Er min kode forældet?

index.php
-- cut --
<?
if($sprog == "da" || $sprog == "en" || $sprog == "de") {
  setcookie("languageCookie", $sprog);
  $languageCookie = $sprog;
}

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

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

else
  $language = "en";

if ($language == 'en') {
include "index_en.php";
}
if ($language == 'da') {
include "index_da.php";
}
if ($language == 'de') {
include "index_de.php";
}
?>
-- cut --
Avatar billede schaefner Juniormester
02. oktober 2003 - 17:45 #1
<?php
$sprog = $_GET['sprog'];
if ($sprog == 'da' || $sprog == 'en' || $sprog == 'de') {
    setcookie("languageCookie",$sprog);
}

if ($_COOKIE['languageCookie'] == "en" || $_COOKIE['languageCookie'] == "da" || $_COOKIE['languageCookie'] == "de") {
  $language = $_COOKIE['languageCookie'];
} 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 if ($_SERVER['HTTP_ACCEPT_LANGUAGE'] == "de") {
  $language = $_SERVER['HTTP_ACCEPT_LANGUAGE'];
} else {
  $language = "en";
}
if ($language == 'en') {
    include "index_en.php";
}
if ($language == 'da') {
    include "index_da.php";
}
if ($language == 'de') {
    include "index_de.php";
}
?>
Avatar billede jay Nybegynder
02. oktober 2003 - 17:47 #2
Tror det er helt som schaefner siger at du mangler $sprog = $_GET['sprog'];

Det er fordi din egen server har kørt med register_globals on og serveren af sikkerhedsgrunde kører med den off. Mener det er blevet standard at det er off (eller er det først i fremtidige versioner?)
Avatar billede schaefner Juniormester
02. oktober 2003 - 17:57 #3
Koden burde dog kunne reduceres kraftigt. Har heller ikke testet om den rent faktisk virker, da jeg skal smutte nu. Måske du også kan bruge noget herfra:

http://schaefner.dk/documents/demo/locator.php
http://schaefner.dk/documents/source/locator.php

mvh. Jesper Sørensen
Avatar billede blach Nybegynder
02. oktober 2003 - 18:04 #4
schaefner --> Har testet din kode på min egen webserver og ser helt fint ud, men der er 1 ting som du bliver nød til at lave om: Når jeg f.eks. er på den side med dansk sprog og klikker på et link (<A HREF=index.php?sprog=en>) så sproget ændres til engelsk, ændres det ikke ved klikket - dette først når jeg har klikket 1 gang mere rundt på siden...
Avatar billede sukos Juniormester
02. oktober 2003 - 18:25 #5
Det er jo fordi du først "kan se" cookien ved næste load af siden.
Hvis du laver valg af sprog til et link til f.eks. lang.php, kan du her sætte cookien, og derefter lav en header for at se sprogvalg med det samme.
Avatar billede blach Nybegynder
02. oktober 2003 - 18:29 #6
Okay, hvordan skal index.php så se ud?
og så skal index_da.php altså bare starte med (osv..):
--cut--
<? setcookie("languageCookie", da); ?>
--cut--
???
Avatar billede sukos Juniormester
02. oktober 2003 - 18:38 #7
hmm, jeg ville nok lave et par if'er:
<?php
if(!isset($_COOKIE["lang"])) {
$langs = array("da", "en", "de");

    if(in_array($_SERVER["HTTP_ACCEPT_LANGUAGE"], $langs) {
    include("index_". $_SERVER["HTTP_ACCEPT_LANGUAGE"] .".php");
    }else{
    include("index_da.php"); //Dansk er default
    }
}else{
include("index_". $_COOKIE["lang"] .".php");
}
?>
Avatar billede sukos Juniormester
02. oktober 2003 - 18:41 #8
Og så lave links til sprog a'la'

<a href="lang.php?lang=da">Dansk</a> <a href="lang.php?lang=en">English</a> <a href="lang.php?lang=de">Deutch</a>


Og i lang.php så sætte cookien alt efter hvad $_GET["lang"] er.
Avatar billede sukos Juniormester
02. oktober 2003 - 18:42 #9
Men du skal så osse lige tænke på at en "dum" bruger kunne jo finde på at skrive
lang.php?lang=shit i adressebaren, hvilket jo vil gi' en fejlmeddelse
Avatar billede sukos Juniormester
02. oktober 2003 - 18:45 #10
hmm, kikkede først nu på schaefners links, og det kunne jo godt bruges til noget! :O)
Omend at en bruger her i DK jo sagtens helst vil bruge engelsk :O)
Avatar billede blach Nybegynder
02. oktober 2003 - 19:17 #11
Kan vi ikke lave det ud fra schaefner's kode? Altså korte det cookie væk og få det ind på selve siderne?
Avatar billede sukos Juniormester
02. oktober 2003 - 19:33 #12
joo, det kan du jo godt, men så kan man heller ikke vælge sprog??
Avatar billede blach Nybegynder
02. oktober 2003 - 19:37 #13
Prøv at læs tråden fra start:
schaefner har løst problemet med index.php - her indsættes eks. index_da.php.
Hvis man så ønsker andet sprog bruger man linket <A HREF=index.php?sprog=en> i index_da.php og den skifter side - men først efter man har reloadet siden 1 gang til (altså så cookie træder i kraft).

Hvordan får jeg dette ændret så den skifter med det samme? Det gav du selv svaret på, men kan du ikke lave koden ud fra schaefner's?
Avatar billede sukos Juniormester
02. oktober 2003 - 20:16 #14
hmm, er ikke helt med, men du kan jo lægge dette i toppen af din side:

<?php
if(isset($_GET['sprog'])) {
$sprog = $_GET['sprog'];
if ($sprog == 'da' || $sprog == 'en' || $sprog == 'de') {
    setcookie("languageCookie",$sprog);
  }
header("Location:". $_SERVER["PHP_SELF"] ."");
exit;
}
?>

resten af din side.............
Avatar billede blach Nybegynder
02. oktober 2003 - 20:18 #15
og hvordan skal min index.php så se ud? Som schaefner skrev?
Avatar billede sukos Juniormester
02. oktober 2003 - 20:24 #16
Jaaahhh, bare uden det med setcookie()
Men som schafner skriver, så kan det jo reduceres en del.
Avatar billede schaefner Juniormester
02. oktober 2003 - 22:11 #17
Avatar billede schaefner Juniormester
02. oktober 2003 - 22:25 #18
og koden:

<?php
// Indstillinger
$languages = array('da','en','de'); // forkortelser for de sprog der kan benyttes
$default = 'default language'; // default sprog, f.eks. da

if (isset($_GET['language']) && in_array($_GET['language'],$languages)) {
    setcookie('langCookie',$_GET['language']);
    header("Location: ".$_SERVER['PHP_SELF']);
}
if (isset($_COOKIE['langCookie'])) {
    $lang = $_COOKIE['langCookie'];
} elseif (in_array($_SERVER['HTTP_ACCEPT_LANGUAGE'],$languages)) {
    $lang = $_SERVER['HTTP_ACCEPT_LANGUAGE'];
} else {
    $lang = $default;
}
include('index_'.$lang.'.php');
?>
<hr>
<b>Switch : <a href="?language=da">Dansk</a> | <a href="?language=en">English</a> | <a href="?language=de">Deutch</a>

Jeg har ikke lige tid til at optimere den mere.
Avatar billede blach Nybegynder
03. oktober 2003 - 14:29 #19
Det ser rigtig godt ud schaefner, jeg uploader det lige til serveren og hvis det virker, er pointene dine...
Avatar billede blach Nybegynder
03. oktober 2003 - 14:29 #20
Så send lige et svar :]
Avatar billede schaefner Juniormester
03. oktober 2003 - 17:21 #21
et svar hvis det virker :)
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