Ik heb een taal script in elkaar gesleuteld maar nu ben ik al poosje opzoek hoe je de taal optie altijd op de juiste manier altijd op het eind van de url krijgt. Dus ?lang= of &lang=

Na echt dagen zoeken dacht ik een goede oplossing gevonden te hebben op deze site LINK maar ik krijg het niet werkend.

Kan me hier iemand bij helpen?

Het taal selector script dat ik gebruik.

<?php

session_start();

if(isset($_COOKIE["langset"])){
$_SESSION['lang'] = $_COOKIE["langset"];
}

// Bevat de URL-variabele 'lang' niet minstens 2 tekens voor een
// korte taalcode, gebruik dan de HTTP-header 'Accept-Language':
if ((strlen($_SESSION['lang']) < 2) and (isset($_SERVER['HTTP_ACCEPT_LANGUAGE']))) {
    $_SESSION['lang'] = $_SERVER['HTTP_ACCEPT_LANGUAGE'];
}

// $_SESSION['lang'] omzetten in kleine letters:
$_SESSION['lang'] = strtolower($_SESSION['lang']);

// Stel standaard taal in (indien deze nog niet is ingesteld)
if(isset($_SESSION['lang']) == false)
{
    $_SESSION['lang'] = 'en';
}

// Gebruik reguliere expressies om langere taalvoorkeuren
// te verwerken.
    if (ereg("en", $_SESSION['lang'])) {
        $_SESSION['lang'] = "en"; // Engels
    } elseif (ereg("nl", $_SESSION['lang'])) {
        $_SESSION['lang'] = "nl"; // Nederlands
    } elseif (ereg("de", $_SESSION['lang'])) {
        $_SESSION['lang'] = "de"; // Duits
    } else {
        $_SESSION['lang'] = "en"; // Engels
    }

if(isset($_GET['lang'])) // Kijk of de gebruiker de taal wil wijzigen
{
    $lang= strtolower(trim($_GET['lang']));

    if(in_array($lang, array('nl', 'de', 'en'))) // Kijk of de taal beschikbaar is binnen deze website
    {
        $_SESSION['lang'] = $lang;
    }
}

// Taalcode voor HTTP en HTML, en paginatitel instellen:
switch ($_SESSION['lang']) {
    case "nl": // Nederlands
        $taalcode = "nl";
        $title    = "Talen in Europa";
        break;
    case "en": // Engels
        $taalcode = "en";
        $title    = "Languages in Europe";
        break;
    case "de": // Duits
        $taalcode = "de";
        $title    = "Sprachen in Europa";
        break;
    default: // Engels is de standaardinstelling
        $taalcode = "en";
        $title    = "Languages in Europe";
}

// HTTP-headers instellen:
if (!headers_sent()) {
    header("Content-Language: " . $taalcode);
    header("Content-Type: text/html; charset=iso-8859-1");
}

$number_of_days = 30 ;
$date_of_expiry = time() + 60 * 60 * 24 * $number_of_days ;
setcookie ("langset", $_SESSION['lang'], $date_of_expiry) ;

$pup = $_SERVER['REQUEST_URI'];

?><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html lang="<?php echo $taalcode; ?>">
<head>

<meta http-equiv="Content-Language" content="<?php echo $taalcode; ?>">
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">

	<title><?php echo $title; ?></title>

</head>
<body lang="<?php echo $taalcode; ?>">

<a href="?pag=pag1">pag 1</a> | <a href="?pag=pag2">pag 2</a><br><br>

<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="get">
<select name="newlanguage" onChange="top.location.href=this.options[this.selectedIndex].value">
<option value="<?php if ($pup == "/test-4" || $pup == "/test-4/" || $pup == "/test-4/index.php"){ echo "?lang=nl"; } else { echo $_SERVER['REQUEST_URI']."&lang=nl"; } ?>" <?php if ($_SESSION['lang'] == nl){ echo "selected"; } ?>>Nederlands</option>
<option value="<?php if ($pup == "/test-4" || $pup == "/test-4/" || $pup == "/test-4/index.php"){ echo "?lang=en"; } else { echo $_SERVER['REQUEST_URI']."&lang=en"; } ?>" <?php if ($_SESSION['lang'] == en){ echo "selected"; } ?>>English</option>
<option value="<?php if ($pup == "/test-4" || $pup == "/test-4/" || $pup == "/test-4/index.php"){ echo "?lang=de"; } else { echo $_SERVER['REQUEST_URI']."&lang=de"; } ?>" <?php if ($_SESSION['lang'] == de){ echo "selected"; } ?>>Deutch</option>
</select></form>

<br>

<?php

$id = $_GET['pag'];

switch($id) {

case "pag1":
if ($_SESSION['lang'] == nl){
include ("includes/languages/dutch.php");
}
if ($_SESSION['lang'] == en){
include ("includes/languages/english.php");
}
if ($_SESSION['lang'] == de){
include ("includes/languages/german.php");
}
break;

case "pag2":
if ($_SESSION['lang'] == nl){
include ("includes/languages/dutch2.php");
}
if ($_SESSION['lang'] == en){
include ("includes/languages/english2.php");
}
if ($_SESSION['lang'] == de){
include ("includes/languages/german2.php");
}
break;

default:
if ($_SESSION['lang'] == nl){
include ("includes/languages/dutch.php");
}
if ($_SESSION['lang'] == en){
include ("includes/languages/english.php");
}
if ($_SESSION['lang'] == de){
include ("includes/languages/german.php");
}
break;
}

?>

</body>
</html>


Op dit adres http://test.kostons.net/test-4/index.php heb ik het taal script staan dan kun je eens kijken wat al wel en wat niet werkt.
Kies maar eens meerdere keren een andere taal maar blijf daarbij op dezelfde pagina dan zal je zien wat er in de url gebeurd.

Dat klopt dat wist ik.
In mijn bovenstaand bericht had ik een LINK gezet met uitleg hieromtrent. IK weet nog weinig van PHP ik heb het taal script bij elkaar geknipt/plakt enige dat me nu al dagen niet lukt is dus dit probleem van de urls maken zodat die taal optie steeds correct word toegevoegd dus ook als er al opties in de url staan maar ook als er nog geen opties bij instaan.

Ik krijg de voorbeelden die op LINK staan niet voor elkaar. Dit is het enige wat ik nog werkend moet krijgen dan kan ik het in m'n site bouwen.
Ik zou graag een voorbeeldje willen hebben dat hoe je het aanpakt.

Ik had gehoopt dat de uitleg op LINK zou lukken maar ik krijg het niet werkend met dit voorbeeld.

Misschien weet je een makkelijker/andere manier?

Ik begrijp het nog niet helemaal, bedoel je misschien zoiets?

<?php
if(strpos($_SERVER['PHP_SELF'], "?"))
{
    //gebruik &
}
else
{
    //gebruik ?
}
?>
Ik heb niet direct een antwoord op je vraag, maar ik zou je aanraden eens naar mod_rewrite te kijken (blanche heeft hier een uitstekende tutorial over geschreven).

Maar even wat anders: dit kan natuurlijk veel slimmer

Als je nu eens een structuur maakt alsvolgt:

includes/languages/pag1/nl.php
includes/languages/pag1/en.php
includes/languages/pag1/de.php

includes/languages/pag2/nl.php
includes/languages/pag2/en.php
includes/languages/pag2/de.php

etc.

En je vervangt die lap cases en ifs door zo'n stukje code:
<?php
$language_root = 'includes/languages/';
if (!preg_match('^\w+$',$_GET['pag']) {
// veiligheids foutafhandeling - de pagina mag alleen uit woordtekens bestaan
}
if (!file_exists($language_root . '/' . $_GET['pag']) ))
{
// foutafhandeling - pagina bestaat niet
}

if (!file_exists( $language_root . '/' . $_GET['pag'] . '/' $_SESSION['lang'] . '.php'))
{
// foutafhandeling - taal bestaat niet
// ook mogelijk: standaard de engelse versie inladen
include($language_root . '/' . $_GET['pag'] . '/en.php');
} else {
include($language_root . '/' . $_GET['pag'] . '/' $_SESSION['lang'] . '.php');
}
?>

Nu kan je gewoon naar hartelust in je mapjes /includes/languages/paginax/nl.php je verschillende pagina's aanmaken zonder dat je hoofdbestand eindeloos groot wordt bij eindeloos veel pagina's.
@Midas Sorry dat ik het niet zo heel goed kan uitleggen maar je zit warm gezien je voorbeeld. Alleen ben ik er zo nog niet want als er al opdrachten in de url staan dan moet de taal optie anders toegevoegd worden dan wanneer er nog geen opdrachten in staan. Ook als ik meedere keren achter elkaar een andere taal kies moet je niet krijgen dat het steeds erachter gezet word, zoals --> www.mijndomain.nl/index.php?lang=en&lang=nl&lang=de Dit laatste probleem heb ik nu dus zoals mijn taal script er nu uit ziet.

Al met al kom ik er dus niet uit hoe ik met een <select> selector de taal kan omschakelen. Het script dat ik gevonden had
<?php
$url = "http://www.vnoel.com?cmd=list#here";  // The simple url
$name = "option";                        // The parameter name
$value = "new";                          // The parameter value
 
// Pick the correct separator to use
$separator = "?";
if (strpos($url,"?")!==false)
  $separator = "&";
 
// Find the location for the new parameter
$insertPosition = strlen($url); 
if (strpos($url,"#")!==false)
  $insertPosition = strpos($url,"#");
 
// Build the new url
$newUrl = substr_replace($url,"$separator$name=$value",$insertPosition,0);
 
// prints:http://www.vnoel.com?cmd=list&option=new
print($newUrl);
?>
Leek me in eerste instantie te gek zeker omdat het ook met ankers rekening houd want dat is natuurlijk helemaal tof.
Alleen krijg ik dit script niet aan de praat in mijn taal script.
Dus daarom dat ik hier aan jullie mijn probleem voorleg.
Ik weet nog heel weinig van php dus weet nog niet zo goed de mogelijkheden allemaal.

@Arend bedankt voor het idee omtrent de switch die in mijn script staat. Ik vond het zelf ook al enorm lelijk maar zoals ik hierboven al schreef ik kan nog nauwelijks iets zelf verzinnen in php omdat ik nog vrijwel niks weet wat er allemaal mee kan. Ik dacht met wat plak/knip werk wel ver te komen maar loop regelmatig enorm vast en zoek en lees me dan "scheel".

Ik waardeer je voorbeeld en ga het zeker bestuderen en proberen toe te passen.

Reageren