Avatar billede blach Nybegynder
28. juni 2002 - 23:22 Der er 26 kommentarer og
1 løsning

Flere sprog

Jeg har bladret igennem experten for at finde ud af en måde at have flere sprog på en hjemmeside - men jeg har stadig brug for hjælp!
Der bliver talt om "sprog fil", phpMyAdmin-måden osv..
Men jeg forstår ikke helt! Dog kan jeg se at funktionen $HTTP_ACCEPT_LANGUAGE er brugbar..

Men hvis I gider hjælpe en smule: Det er til en camping hjemmeside, og man skal kunne vælge sprog. $HTTP_ACCEPT_LANGUAGE skulle vist, hvis jeg har forstået rigtigt, kunne identificere hvilket sprog browseren bruger. I mit eksempel vil jeg gerne have at den tjekker om der bruges dansk eller svensk - hvis ikke skal den bruge engelsk! Men jeg vil også stadig have så man kan vælge via 3 knapper...

Hvordan laver man dette nemmest?
Avatar billede lp Nybegynder
28. juni 2002 - 23:43 #1
Løsningen med at detecte det fx fra PHP er IKKE holdbar alene. Danske brugere med en engelsk IE vil dermed blive opfattet som englændere.

Just my 2 cents....
Avatar billede blach Nybegynder
28. juni 2002 - 23:50 #2
Jeg tænkte også på en kombination!
Avatar billede Slettet bruger
28. juni 2002 - 23:52 #3
Jamen, du sætter jo sproget udfra $HTTP_ACCEPT_LANGUAGE, som du selv nævner. Det er dét sprog som browseren (hvis denne sender denne header) er sat til.

Og så giver du brugeren mulighed for at vælge mellem de andre tilrådeværende sprog.

Nøjagtigt som du selv nævner. Hvad er du i tvivl om?
Avatar billede blach Nybegynder
29. juni 2002 - 00:17 #4
Hvor skal jeg lave dette, sådan mere teknisk set?
Avatar billede Slettet bruger
29. juni 2002 - 00:35 #5
Du vil typisk lave en fil du inkluderer i starten af alle dine andre sider. Lad os kalde denne header.phtml. Alle dine sider starter så med include("header.phtml").

I denne fil, hitter du ud af hvilket sprog der skal benyttes på siden. Noget ala:

# Hvis en bruger implicit har valgt et sprog på siden. Altså trykket på en af dine sprog knapper. Jeg forestiller mig, at du sætter en cookie 'languageCookie' indeholdende det sprog, som brugeren har valgt. Dette checker vi her. Er en sådan cookie tilstede og har den en gyldig værdi bliver dette sproget, vi anvender på siden.
if ($languageCookie == "en" || $languageCookie == "da" || $languageCookie == "se")
  $language = $languageCookie;

# Hvis der ikke ekisterer et sprogvalg i forvejen, checker vi på browserens setting. Indeholder den et af vores gyldige sprog, er det dette vi anvender.
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 == "se")
  $language = $HTTP_ACCEPT_LANGUAGE;

# Ingen af delene er tilfældet. Vi sætter sproget til default.
else
  $language = "en";

Du kan nu på alle dine sider være sikker på at $language indeholder et gyldigt sprog. Og du kan bruge denne variable trygt i dine forspørgsler. Eksempelvis:

mysql_query("SELECT velkommenTekst_".$language." AS tekst FROM velkommen");
Avatar billede blach Nybegynder
29. juni 2002 - 11:50 #6
Ja, okay!
Jeg prøver at bikse noget sammen - vender lige tilbage senere!
Avatar billede blach Nybegynder
29. juni 2002 - 12:47 #7
Altså du vil have disse cookies sætninger imellem <head> tagsne, ik?

<?
if ($languageCookie == "en" || $languageCookie == "da" || $languageCookie == "se")
  $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 == "se")
  $language = $HTTP_ACCEPT_LANGUAGE;

else
  $language = "en";

?>
Avatar billede Slettet bruger
30. juni 2002 - 13:37 #8
Hvorfor dog i <HEAD>? Nej.

Det script skal bare være i en fil du inkluderer (include()) i toppen af alle din sider.

Og du er med på at $languageCookie er tænkt som navnet på den cookie, du sætter, når en bruger vælger et sprog på en af dine knapper ikke?

Hvor meget erfaring har du med PHP?
Avatar billede blach Nybegynder
30. juni 2002 - 14:01 #9
En del, men ikke så meget med cookies og den slags.. Jeg har alle mine sider i 1 så bruger ikke den include() i toppen! (vil bare have koden sat ind)
Men hvad er koden til cookien? Er det den fra oven af? Hvad skal linket så være i de knapper?
Avatar billede Slettet bruger
30. juni 2002 - 14:04 #10
Jeg orker ikke skære det hele ude i pap. Du har her nogenlunde, hvad du skal bruge, for at afgøre hvilket sprog der skal anvendes.

Nu skal du bare sætte dig ind i, hvordan du får sat en cookie, når en bruger trykker på en given knap.
Avatar billede blach Nybegynder
30. juni 2002 - 15:38 #11
verdammt...
Avatar billede Slettet bruger
30. juni 2002 - 15:42 #12
Det er en god indstilling :)
Avatar billede blach Nybegynder
30. juni 2002 - 15:53 #13
:]
Du sagde: Nu skal du bare sætte dig ind i, hvordan du får sat en cookie, når en bruger trykker på en given knap.

--> er det ik sådan et eller andet?
<?
if($sprog == "da"){
setcookie("$da", "1", time()+3600*1);
include("da/index.php");
}
?>

Men jeg kan stadig ikke helt dreje hvad knappens URL skal være...
Avatar billede blach Nybegynder
30. juni 2002 - 16:22 #14
if($da){
setcookie("$languageCookie", "da", time()+3600*1); //24 timer fra nu
include("da/index.php");
}

Men hvordan sætter jeg cookien??
Avatar billede blach Nybegynder
30. juni 2002 - 16:42 #15
Okay mercur8, nu har jeg prøvet.. men kan du så se fejlen? Den skulle sætte cookie og skifte sprog hvis jeg trykker på et af linkene!

<?
if($sprog == da){
setcookie("$languageCookie", "da", time()+3600*1);
}
if($sprog == no){
setcookie("$languageCookie", "no", time()+3600*1);
}
if($sprog == se){
setcookie("$languageCookie", "se", time()+3600*1);
}
if($sprog == en){
setcookie("$languageCookie", "en", time()+3600*1);
}
?>
<?
if ($languageCookie == "en" || $languageCookie == "da" || $languageCookie == "se" || $languageCookie == "no")
  $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 == "se")
  $language = $HTTP_ACCEPT_LANGUAGE;
else if ($HTTP_ACCEPT_LANGUAGE == "no")
  $language = $HTTP_ACCEPT_LANGUAGE;

else
  $language = "en";
?>

<html>
<body>
Sprogvælger:<br>
<a href=index.php?sprog=no>norsk</a> | <a href=index.php?sprog=da>dansk</a> | <a href=index.php?sprog=se>svensk</a> | <a href=index.php?sprog=en>Engelsk</a>
<br><br>
<?
echo "Sproget er: $language <br><br>";
?>
</body>
</html>
Avatar billede Slettet bruger
30. juni 2002 - 16:46 #16
Du skriver ikke noget om, hvad fejlen er.

Når du sætter en cookie på en side, vil den først have effekt på den næste side der loades.

Så prøv at reload din side (uden sprog parameteren naturligvis), og se om language så ikke er sat, til det, du valgte den til.
Avatar billede Slettet bruger
30. juni 2002 - 16:48 #17
Der er iøvrigt en fejl i alle dine set_cookie funktioner, de skal være som følgende eksempel:

setcookie("languageCookie", "en", time()+3600); og ikke setcookie("$languageCookie", "en", time()+3600*1);
Avatar billede blach Nybegynder
30. juni 2002 - 16:49 #18
Fejlen er, at den ikke laver sproget om, når jeg klikker på et link.
Altså bliver den ved med at have mit browser sprog, da.
Avatar billede blach Nybegynder
30. juni 2002 - 16:50 #19
Det hjalp, tak..
Men man skal stadig opdatere siden 1 ekstra gang efter man har klikket før sproget virker..
Hvad kan jeg gøre der?
Avatar billede Slettet bruger
30. juni 2002 - 16:54 #20
Hele din første blok kan faktisk omskrives til:

<?
if($sprog == "da" || $sprog == "en" || $sprog == "se" || $sprog == "no") {
  setcookie("languageCookie", $sprog, time()+3600);
  $languageCookie = $sprog;
}
?>
Avatar billede blach Nybegynder
30. juni 2002 - 17:14 #21
Mercur, kan jeg så ikke bruger header("Location: __.php"); til at sende dem til nogle undersider:
da/index.php
no/index.php

osv?

Koden er nu:
<?
if($sprog == "da" || $sprog == "en" || $sprog == "se" || $sprog == "no") {
  setcookie("languageCookie", $sprog);
  $languageCookie = $sprog;
}

if ($languageCookie == "en" || $languageCookie == "da" || $languageCookie == "se" || $languageCookie == "no")
  $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 == "se")
  $language = $HTTP_ACCEPT_LANGUAGE;
else if ($HTTP_ACCEPT_LANGUAGE == "no")
  $language = $HTTP_ACCEPT_LANGUAGE;

else
  $language = "en";
?>
<html>
<body>
Sprogvælger:<br>
<a href=index.php?sprog=no>norsk</a> | <a href=index.php?sprog=da>dansk</a> | <a href=index.php?sprog=se>svensk</a> | <a href=index.php?sprog=en>Engelsk</a>
<br><br>
<?
echo "Sproget er: $language <br><br>";
?>
</body>
</html>
Avatar billede blach Nybegynder
30. juni 2002 - 17:23 #22
Hmm, det er lidt et problem, for den kan finde på at sætte 2 cookies... (hvis man klikker på 2 sprog)
Så har jeg lidt et problem med at definere en given tekst der skal ind på siden når den både vil have eks. svensk og norsk...
Avatar billede blach Nybegynder
30. juni 2002 - 17:24 #23
Mercur, kan man ikke vælge nyeste cookie?
Avatar billede Slettet bruger
30. juni 2002 - 17:26 #24
Ehh, sætte 2 cookies? Det kan ikke være et problem. Du anvender kun én cookie, nemlig "languageCookie". Så det er noget vrøvl.

Så vælger man et andet sprog, bliver det første bare overskrevet.
Avatar billede Slettet bruger
30. juni 2002 - 17:26 #25
Slut herfra.
Avatar billede Slettet bruger
30. juni 2002 - 17:29 #26
Ellers kan vi jo blive ved, til jeg har lavet hele dit website for dig.
Avatar billede blach Nybegynder
30. juni 2002 - 17:30 #27
tjaa, du får sgu pointene !
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