Zammy's Site-vragen

Status
Niet open voor verdere reacties.

zamg0d1

Gebruiker
Lid geworden
10 jan 2010
Berichten
46
Hallo,
Dit topic maak ik omdat ik bezig ben met een site en soms wel eens vragen kan hebben en dit dan ook redelijk veel vragen zijn... Ik begin dan ook met een vraag.

Ik ben nu bezig aan een site zoals sommige mensen wel zullen weten. Maar nu zit ik met een probleem, tijdens het bewerken moet ik nu EN de Engelse bestanden EN de Nederlandse bestanden aanpassen.

Is het dus mogelijk(, en zoja hoe) om taalbestanden te maken en een taal op te roepen met het commando 'index.php?l=en'? Waarvoor L staat voor de taal.

De talen die de site moeten worden zijn Nederlands en Engels, en evt. ooit nog een keer Fries en andere talen. Maar dat zal denk ik niet nodig zijn :clown: Maar ik wil wel taalbestanden voor Engels en Nederlands waar Engels op standaard staat.

Ik wil dit slechts om mijn eigen gemak tijdens het bewerken omdat ik dan niet meerdere bestanden hoef te maken, want de elementen die ALTIJD in de site zitten die heb ik in andere bestanden zoals header.php en footer.php en nog meer dingen. Nu heb ik dan ook twee aparte sites in twee submappen, /EN/ en /NL/, maar nu moet ik zoals gezegd wel eens meerdere teksten aanpassen en dus ook in meerdere bestanden zitten. Met het taal-systeem wil ik dit dus verhelpen en het gewoon in twee bestanden (/lang/en_US.php en /lang/nl.php) zodat ik het daar makkelijk kan aanpassen.


//Zammy :eek:

Ik heb dit ook al op een ander forum gevraagd maar daar kreeg ik hulp waar ik niks mee kon en uiteindelijk werd ik via msn erop afgekat dat ik eerst fatsoenlijk PHP moest gaan leren.. Dus graag als het kan iets met duidelijk uitleg erbij die ik zou kunnen snappen. Ik weet namelijk niet echt veel van PHP, zegmaar bijna niks, enige wat ik kan in PHP is een Array en een Include_Once maken.
 
Laatst bewerkt:
De makkelijkste manier is om de taal op te slaan in de sessie (op die manier hoef je hem niet bij iedere URL mee te geven) en een bestand met variabelen op te nemen in je file afhankelijk van de taal.

Dat gaat ongeveer zo:

PHP:
// we willen gebruik maken van de sessie voor de language vars
session_start();
// als de lang gezet is, verander deze dan.
if ( isset ( $_GET['lang'] ) ) {
  $_SESSION['lang'] == $_GET['lang'];
  $lang = $_GET['lang'];
}
// neem de huidige taal, indien beschikbaar
elseif ( isset ( $_SESSION['lang'] ) ) {
  $lang = $_SESSION['lang'];
} 
else {
  // standaard waarde
  $lang = 'nl';
}

// open het bestand met de teksten in de juiste taal
include ( 'languages/' .$lang . '.php' );

// begroet de gebruiker in de juiste taal!
echo $_TAAL['welcome'];

Vervolgens maak je voor elke taal een file met daarin een array met alle teksten. Dus in het nederlands bijvoorbeeld zo:
PHP:
$_TAAL = array (
  'welcome' => 'Welkom op mijn website!';
);

En in het engels zo:
PHP:
$_TAAL = array (
  'welcome' => 'Welcome to my website!';
);


Dan hoef je elke pagina nog maar 1x te maken en bovenaan het stukje om de taal te kiezen op te nemen. Je kunt dat natuurlijk ook in een aparte file zetten en includen, en dan hoef je bovenaan elke pagina nog maar 1 include regel te zetten om het taalsysteem te activeren.

Deze code is bedoeld als opzetje; er zit nog geen check in of de opgegeven taal wel bestaat ofzo, dus je wilt em misschien nog wel even uitbreiden. Ik heb em ook niet getest dus er kunnen nog foutjes inzitten, maar het idee kun je iig overnemen ;)

Succes ermee!
 
Okee :D Bedankt :) Maar nog een kleine vraag, hoe zorg ik er dan voor dat de taal word veranderd? Hoe kan ik dit doen dmv een url? :) Ik heb namelijk twee vlaggetjes op mijn site staan, maar kan ik het dan zo dan dat de taal word gewijzigd door op zo'n vlag te klikken?
 
Jep, in mijn voorbeeld wordt de URL gelezen om te kijken of de taal veranderd is.

Alle variabelen in $_GET komen uit de URL op de volgende manier:

www.mijnsite.nl/file.html?var1=a&var2=b

Wordt in PHP:

$_GET['var1'] == 'a'
$_GET['var2'] == 'b'

Dus als je in mijn voorbeeld naar de URL:
www.mijnsite.nl/index.php?lang=nl
gaat, dan zal de taal ingesteld worden op 'nl', hetzelfde als je ipv 'nl' bijv 'en' erin zet.
 
Okee, ik zal even kijken :)
EDIT: Je script geeft een error :(

Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at /usr/home/xxx/domains/gaming-freak.nl/public_html/hillway/nl-en/include/header.php:4) in /usr/home/deb15335/domains/gaming-freak.nl/public_html/hillway/nl-en/language.php on line 3

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /usr/home/xxx/domains/gaming-freak.nl/public_html/hillway/nl-en/include/header.php:4) in /usr/home/deb15335/domains/gaming-freak.nl/public_html/hillway/nl-en/language.php on line 3
Maar nu heb ik een probleempje... Als ik dit doe:
PHP:
<?
include_once("language.php")
include_once("social-networks.php")
?>

Geeft een error:
Code:
Parse error: syntax error, unexpected T_INCLUDE_ONCE in /usr/home/xxx/domains/gaming-freak.nl/public_html/hillway/nl-en/include/header.php on line 22

Hoe kan ik dit oplossen? Want als ik het verander in
PHP:
<?
include_once("language.php")
?>
<?
include_once("social-networks.php")
?>
werkt het wel:eek:
 
Laatst bewerkt:
Je moet een puntkomma gebruiken om commando's af te sluiten :)

PHP:
<?
include_once("language.php");
include_once("social-networks.php");
?>

OW en de code session_start() moet je plaatsen voor je output geeft (ie: nog voor je <html>) anders werkt ie niet.
 
Ik zal het proberen, hopen dat het lukt :D



Helaas, hij werkt wel, maar slaat nog niet op als cookie :(
 
Laatst bewerkt:
Hij moet het in een sessie opslaan, niet in een cookie...

Dump de sessie eens, kijk of er wat in zit:

PHP:
var_dump( $_SESSION );
 
Hij moet het in een sessie opslaan, niet in een cookie...

Dump de sessie eens, kijk of er wat in zit:

PHP:
var_dump( $_SESSION );
Moet ik deze gewoon in de code erbij zetten? En wat moet ik dan doen?

En is het dan niet beter dat het als cookie word opgeslagen? Of is dit nog moeilijker?
 
Laatst bewerkt:
Tis een debug statement, die kun je gewoon in de code er bij zetten. Hij plakt naar het scherm wat er in de sessie zit.

Je kunt ook een cookie gebruiken:
PHP:
setcookie( 'lang', $_GET['lang'] );

Is net wat je liever hebt natuurlijk :)
 
En dan zou dit de code worden?

PHP:
// we willen gebruik maken van de sessie voor de language vars
setcookie( 'lang', $_GET['lang'] );
// als de lang gezet is, verander deze dan.
if ( isset ( $_GET['lang'] ) ) {
  $_COOKIE['lang'] == $_GET['lang'];
  $lang = $_GET['lang'];
}
// neem de huidige taal, indien beschikbaar
elseif ( isset ( $_COOKIE['lang'] ) ) {
  $lang = $_COOKIE['lang'];
} 
else {
  // standaard waarde
  $lang = 'nl';
}
 
// open het bestand met de teksten in de juiste taal
include ( 'languages/' .$lang . '.php' );
 
// begroet de gebruiker in de juiste taal!
echo $_TAAL['welcome'];
 
Bijna goed :)

setcookie is om informatie in de cookie te zetten, dus het gaat dan zo:

PHP:
// als de lang gezet is, verander deze dan.
if ( isset ( $_GET['lang'] ) ) {
  setcookie( 'lang', $_GET['lang'] );
  $lang = $_GET['lang'];
}
// neem de huidige taal, indien beschikbaar
elseif ( isset ( $_COOKIE['lang'] ) ) {
  $lang = $_COOKIE['lang'];
} 
else {
  // standaard waarde
  $lang = 'nl';
}
 
// open het bestand met de teksten in de juiste taal
include ( 'languages/' .$lang . '.php' );
 
// begroet de gebruiker in de juiste taal!
echo $_TAAL['welcome'];
 
Ja dat weet ik :cool: Maar wat ik bedoelde is dat je een slideshow maakt die aan fading doet. Maar waar je ook nog met pijltjes kunt kiezen tussen vorige en volgende.
 
Dat is nog steeds javascript :P

Dus je moet nog steeds naar een andere sectie xD
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan