Voor mijn site heb ik een talenscript gevonden. Op zich werkt deze prima op twee dingen na.
1. Als je de site voor het eerst bezoekt vertaald hij de tekst niet. Dit doet hij pas nadat ik de pagina ververs. Weet iemand hoe ik kan zorgen dat hij meteen de vertaalde tekst laat zien?
2. Rechtsbovenaan kan je kiezen uit de taal. Wanneer de pagina wordt ververst vertaald hij de tekst wel, maar standaard blijft er "Nederlands" staan, omdat deze als standaard is ingesteld. Graag zou ik willen dat er de gekozen taal blijft staan.
btw: het script werkt alleen als ik deze voor de doctype plaats, anders zegt hij: header is already sent.
Weet niet of dit wel klopt.
En hebben jullie ervaring of Google cookies herkend (in de Title-tag bijvoorbeeld)?
Code pagina:
PHP Code:
<?PHP
# We gaan straks cookies gebruiken, dus ob_start() is vereist!
ob_start ();
# De talen array
$aTalen = array ("nederlands", "engels", "duits");
?>
<?PHP
// De gebruiker heeft zijn voorkeur veranderd door een taal te kiezen uit
// het menu, en op de knop te drukken
if (isset ($_POST['kiezen']))
{
# Cookie met de gekozen taal met de duur van 1 jaar aanmaken
setcookie ("taal", $_POST['taalkeuze'], time()+60*60*24*7*52);
# De pagina moet gerefreshed worden voordat de cookie goed werkt bij een $_POST
header ("Location: test.php");
}
// Heeft de gebruiker nog geen voorkeur-cookie? Maak dan een cookie aan
// met de nederlandse taal
if (!isset ($_COOKIE['taal']))
{
# Cookie met de nederlandse taal met de duur van 1 jaar aanmaken
setcookie ("taal", "nederlands", time()+60*60*24*7*52);
}
// Als de cookie wel is gezet, maar niet geldig is, maak dan een nieuwe
// cookie aan met de nederlandse taal
elseif (!in_array ($_COOKIE['taal'], $aTalen))
{
# Cookie met de nederlandse taal met de duur van 1 jaar aanmaken
setcookie ("taal", "nederlands", time()+60*60*24*7*52);
}
// De cookie is nu hoe dan ook geldig, en kan gebruikt worden
else
{
# Include de gekozen (indien nodig: -aangewezen) taal
include ("talen/" . $_COOKIE['taal'] . ".lang.php");
}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>Test</title>
<!--
Copyright Edo Wierenga 2010
-->
<LINK HREF="master.css" REL="stylesheet" TYPE="text/css">
<META HTTP-EQUIV="Content-Type" CONTENT="text/html;charset=utf-8" >
<META NAME="description" LANG="nl" CONTENT="Bla bla">
<META NAME="keywords" LANG="nl" CONTENT="Bla bla bla">
<META NAME="robots" CONTENT="all, index, follow">
<META HTTP-EQUIV="imagetoolbar" CONTENT="no">
<META NAME="revisit-after" CONTENT="1 day">
<META NAME="language" CONTENT="EN">
<META NAME="author" CONTENT="Edo Wierenga">
</head>
<body>
<div id="top">
<div class="menu">
</div>
<form action="" method="post">
<div class="lang">
<select name="taalkeuze">
<?PHP
for ($i=0; $i < count ($aTalen); $i++)
{
?>
<option value="<?=$aTalen[$i];?>"><?=$aTalen[$i];?></option>
<?PHP
}
?>
</select>
<input name="kiezen" type="submit" value="<?PHP echo $_LANG['CHANGE']?>">
</div>
</form>
</div>
<?
include 'footer.php';
?>
</body>
</html>
- Talen script
-
15-09-2010, 22:22 #1
- Berichten
- 576
- Lid sinds
- 18 Jaar
Talen script
Laatst aangepast door Edo W : 25-09-2010 om 20:10
-
In de schijnwerper
-
16-09-2010, 00:47 #2
- Berichten
- 1.899
- Lid sinds
- 18 Jaar
Je kunt het script ook anders plaatsen hoor, zolang je maar zorgt dat:
PHP Code:<?php ob_start(); ?>
Je krijgt in het begin geen taal te zien omdat de cookie wel wordt ingesteld maar nog niet direct beschikbaar is (pas na een reload), en je taal wordt niet gewijzigd waarschijnlijk vanwege het ontbreken van de action="bestandsnaam.php". Dit stuk PHP zou moeten werken:
PHP Code:<?PHP
ob_start ();
# De talen array
$aTalen = array ("nederlands", "engels", "duits");
?>
<?PHP
// De gebruiker heeft zijn voorkeur veranderd door een taal te kiezen uit
// het menu, en op de knop te drukken
if ($_SERVER['REQUEST_METHOD'] == "POST" && isset ($_POST['kiezen']))
{
# Cookie met de gekozen taal met de duur van 1 jaar aanmaken
setcookie ("taal", $_POST['taalkeuze'], time()+60*60*24*7*52);
$activeLang = $_POST['taalkeuze'];
# De pagina moet gerefreshed worden voordat de cookie goed werkt bij een $_POST
header ("Location: test.php");
}
// Heeft de gebruiker nog geen voorkeur-cookie? Maak dan een cookie aan
// met de nederlandse taal
if (!isset ($_COOKIE['taal']))
{
# Cookie met de nederlandse taal met de duur van 1 jaar aanmaken
setcookie ("taal", "nederlands", time()+60*60*24*7*52);
$activeLang = "nederlands";
}
// Als de cookie wel is gezet, maar niet geldig is, maak dan een nieuwe
// cookie aan met de nederlandse taal
elseif (!in_array ($_COOKIE['taal'], $aTalen))
{
# Cookie met de nederlandse taal met de duur van 1 jaar aanmaken
setcookie ("taal", "nederlands", time()+60*60*24*7*52);
$activeLang = "nederlands";
}
// De cookie is nu hoe dan ook geldig, en kan gebruikt worden
else
{
# Include de gekozen (indien nodig: -aangewezen) taal
$activeLang = (isset($_COOKIE['taal']) && in_array($_COOKIE['taal'], $aTalen)) ? $_COOKIE['taal'] : "nederlands" ;
include ("talen/" . $activeLang . ".lang.php");
}
?>
-
16-09-2010, 07:50 #3
- Berichten
- 576
- Lid sinds
- 18 Jaar
Ik heb je code overgenomen, maar hij blijft niet goed werken. Nog steeds is er bij een 1e bezoek aan de pagina (wanneer de internetcache is gewist) niets te zien op de plek waar de vertaalde tekst zou moeten komen te staan. (Zie submit-button voor de vertaalde tekst.)
Ook blijft er Nederlands staan, wanneer je Engels selecteerd. De tekst wordt dan wel gewoon vertaald, maar voor bezoekers is het verwarrend als er Nederlands blijft staan.
Bedankt voor de hulp, maar is er nog een andere oplossing hiervoor?
-
16-09-2010, 08:05 #4
- Berichten
- 691
- Lid sinds
- 15 Jaar
Voor het selecteren van de geselecteerde taal zal iets als dit nodig zijn:
PHP Code:<select name="taalkeuze" onChange="this.form.submit();">>
<?php
$selected = $_COOKIE['taal'];
for ($i=0; $i < count ($aTalen); $i++)
{
?>
<option value="<?=$aTalen[$i];?>" <?php if($aTalen[$i] == $selected) echo "selected"; ?>><?=$aTalen[$i];?></option>
<?php
}
?>
</select>
<noscript>
<p>
<input name="kiezen" type="submit" value="<?PHP echo $_LANG['CHANGE']?>">
</p>
</noscript>Laatst aangepast door S. van Laere : 16-09-2010 om 08:23
-
16-09-2010, 08:24 #5
- Berichten
- 576
- Lid sinds
- 18 Jaar
Bedankt voor je reactie. Ik zal er vanavond naar kijken.
-
16-09-2010, 12:03 #6
- Berichten
- 1.899
- Lid sinds
- 18 Jaar
Dat hoeft niet, hij heeft een submit actie op zijn pagina staan en een <form> tag.
-
16-09-2010, 18:53 #7
- Berichten
- 576
- Lid sinds
- 18 Jaar
Beide werken niet helaas. Had idd al een submit actie en bij de oplossing van S. van Laere ververst de pagina, maar wordt er geen tekst vertaald en bij het 1e bezoek op de site zie je ook geen vertaalde tekst.
Iemand anders nog een idee? Of weet iemand nog een ander goed/beter Talen-script?
-
16-09-2010, 19:53 #8
- Berichten
- 691
- Lid sinds
- 15 Jaar
Ik krijg op jou url sowieso niks te zien behalve de taalselectie, daar een andere taal selecteren levert ook geen tekst op.
Je kunt ook een sessie gebruiken, deze code is getest en functioneel:
PHP Code:<?php
session_start();
# De talen array
$aTalen = array ("nederlands", "engels", "duits");
$standaardtaal = "engels";
$_SESSION['taal'] = $standaardtaal;
if(isset($_POST['taal']))
{
$taal = $_POST['taal'];
if (in_array($taal, $aTalen)){ $_SESSION['taal'] = $taal; }
else { $taal=$standaardtaal; }
}
else if(!isset($_SESSION['taal']))
{
$_SESSION['taal'] = $aTalen[0];
$taal = $_SESSION['taal'];
}
else
{
$taal = $_SESSION['taal'];
}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>Test</title>
<!--
Copyright Edo Wierenga 2010
-->
<link href="index_bestanden/master.css" rel="stylesheet" type="text/css">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="description" content="Bla bla" lang="nl">
<meta name="keywords" content="Bla bla bla" lang="nl">
<meta name="robots" content="all, index, follow">
<meta http-equiv="imagetoolbar" content="no">
<meta name="revisit-after" content="1 day">
<meta name="language" content="EN">
<meta name="author" content="Edo Wierenga">
</head>
<body>
<div id="top">
<div class="menu">
<?php include ("talen/" . $taal . ".lang.php"); ?>
</div>
<form action="" method="post">
<div class="lang">
<select name="taal" onChange="this.form.submit();">
<?php
$selected = $taal;
for ($i=0; $i < count ($aTalen); $i++)
{
?>
<option value="<?php echo $aTalen[$i];?>" <?php if($aTalen[$i] == $selected) echo 'selected="selected"'; ?>>
<?php echo $aTalen[$i];?></option>
<?php
}
?>
</select>
<noscript>
<p>
<input name="kiezen" type="submit" value="kiezen">
</p>
</noscript>
</div>
</form>
</div>
<div id="footer">
<p>
<a href="http://validator.w3.org/check?uri=referer"><img src="index_bestanden/valid-html401.png" alt="Valid HTML 4.01 Strict" height="31" width="88"></a>
</p>
<p>
<a href="http://jigsaw.w3.org/css-validator/check/referer"><img style="border: 0pt none; width: 88px; height: 31px;" src="index_bestanden/vcss-blue.gif" alt="Valide CSS!"></a>
</p>
</div>
</body>
</html>Laatst aangepast door S. van Laere : 16-09-2010 om 20:38
-
16-09-2010, 22:23 #9
- Berichten
- 576
- Lid sinds
- 18 Jaar
@ S. van Laere: Thnx, hij geeft nu meteen tekst weer, zonder de pagina eerst te refreshen.
Ook het vertalen werkt goed.
Alleen ik moet nu voor elke pagina opnieuw instellen welke taal ik wil. Ook als ik terug ga naar de vorige pagina. Hij zegt dan dat de pagina is verlopen.Laatst aangepast door Edo W : 16-09-2010 om 22:37
-
16-09-2010, 23:39 #10
- Berichten
- 691
- Lid sinds
- 15 Jaar
@ S. van Laere: Thnx, hij geeft nu meteen tekst weer, zonder de pagina eerst te refreshen.
Ook het vertalen werkt goed.
Alleen ik moet nu voor elke pagina opnieuw instellen welke taal ik wil. Ook als ik terug ga naar de vorige pagina. Hij zegt dan dat de pagina is verlopen.
Wat jij lijkt te willen is dat je aan elke pagina een taal wilt kunnen toewijzen waar deze mee moet beginnen?
-
17-09-2010, 09:03 #11
- Berichten
- 576
- Lid sinds
- 18 Jaar
Als ik op Pagina 1 Duits instel en naar pagina 2 ga (zie site) dan geeft Pagina 2 de standaard Engelse vertaling ipv Duits. Het lijkt of hij niet onthoudt welke taal is ingesteld. Ik neem aan dat op elke pagina hetzelfde script moet komen?
Ik wil dus 1x de taal moeten instellen, zodat hij het onthoudt voor elke pagina totdat de gebruiker opnieuw de taal veranderd. En op elke pagina wil ik de taal kunnen instellen.
Excuses als het lastig wordt, maar zelf kom ik er niet uit.
-
17-09-2010, 10:15 #12
- Berichten
- 691
- Lid sinds
- 15 Jaar
Zit sowieso een fout in:
PHP Code:$aTalen = array ("nederlands", "engels", "duits");
$standaardtaal = "engels";
$_SESSION['taal'] = $standaardtaal;
-
17-09-2010, 10:19 #13
- Berichten
- 576
- Lid sinds
- 18 Jaar
Super, nu werkt het. Zal vanavond even volledig testen, want moet nu werken.
Enorm bedankt voor de hulp.
Mocht er nog iets zijn dan laat ik het hier weten.
Aanvullend bericht:
Heb het getest en alles lijkt goed te werken.
Enige wat ik me af vraag is of het volgende nut heeft:
$standaardtaal = "engels";
Als ik namelijk de pagina voor het eerst open start hij met Nederlands, terwijl hierboven volgens mij Engels als standaard staat ingesteld.
Misschien overtollige code?
Laatst aangepast door Edo W : 17-09-2010 om 21:54 Reden: Automatisch samengevoegd.
-
17-09-2010, 22:16 #14
- Berichten
- 691
- Lid sinds
- 15 Jaar
Super, nu werkt het. Zal vanavond even volledig testen, want moet nu werken.
Enorm bedankt voor de hulp.
Mocht er nog iets zijn dan laat ik het hier weten.
Aanvullend bericht:
Heb het getest en alles lijkt goed te werken.
Enige wat ik me af vraag is of het volgende nut heeft:
$standaardtaal = "engels";
Als ik namelijk de pagina voor het eerst open start hij met Nederlands, terwijl hierboven volgens mij Engels als standaard staat ingesteld.
Misschien overtollige code?
Het idee van een standaardtaal was wel de bedoeling maar kennelijk werkt dat niet zoals gedacht.
Natuurlijk kun je ook een cookie naast de sessie gebruiken om de taalkeuze voor langere periode op te slaan.
-
17-09-2010, 23:16 #15
- Berichten
- 576
- Lid sinds
- 18 Jaar
Heb nu dus deze code:
PHP Code:<?php
session_start();
# De talen array
$aTalen = array ("nederlands", "engels", "duits");
if(isset($_POST['taal']))
{
$taal = $_POST['taal'];
if (in_array($taal, $aTalen)){ $_SESSION['taal'] = $taal; }
else { $taal=$standaardtaal; }
}
else if(!isset($_SESSION['taal']))
{
$_SESSION['taal'] = $aTalen[0];
$taal = $_SESSION['taal'];
}
else
{
$taal = $_SESSION['taal'];
}
?>
$standaardtaal = "engels";
Dit lijkt ook te werken.
Hoe zou ik dat moeten doen met een cookie en heeft dat nog nadelen?
Aanvullend bericht:
Weet alleen niet wat ik hiermee moet. Wil de regel met standaardtaal verwijderen als ik het niet nodig heb:
if(isset($_POST['taal']))
{
$taal = $_POST['taal'];
if (in_array($taal, $aTalen)){ $_SESSION['taal'] = $taal; }
else { $taal=$standaardtaal; }
Aanvullend bericht:
Is opgelost via PM.Laatst aangepast door Edo W : 23-09-2010 om 17:54 Reden: Automatisch samengevoegd.
Plaats een
- + Advertentie
- + Onderwerp
Marktplaats
Webmasterforum
- Websites algemeen
- Sitechecks
- Marketing
- Domeinen algemeen
- Waardebepaling
- CMS
- Wordpress
- Joomla
- Magento
- Google algemeen
- SEO
- Analytics
- Adsense
- Adwords
- HTML / XHTML
- CSS
- Programmeren
- PHP
- Javascript
- JQuery
- MySQL
- Ondernemen algemeen
- Belastingen
- Juridisch
- Grafisch ontwerp
- Hosting Algemeen
- Hardware Info
- Offtopic