Meerdere talen in PHP met subdomeinen

Status
Niet open voor verdere reacties.

pilootnour5

Terugkerende gebruiker
Lid geworden
22 nov 2008
Berichten
1.895
Hallo,

ik wil van mijn momenteel Nederlandstalige website een Engelse vertaling maken om mijn bereik te vergroten. Het betreft hier PHP waarin ik alle tekst uit een language map haal waar bijvoorbeeld nl.php en en.php als bronnen staan.

Nu lijkt het mij handig om de taal te laten herkennen uit de url, dus voor de Nederlandse website kun je naar www.website.nl of naar nl.website.nl, voor de Engelse naar en.website.nl, etc etc.

Omdat ik in principe dus met language bronbestanden werk, hoef ik niet van alle pagina's een aparte vertaling te maken, maar wil ik dat op elke pagina gewoon naar de juiste language bronbestand wordt verwezen. De vraag is hoe ik dat het beste kan doen. Mijn host laat mij subdomeinen aanmaken en geeft me een aantal opties hiervoor: web alias, web forward, A, CNAME, TXT, SRV, AAAA, TLSA en SSHFP. Ik heb echter geen idee wat ik hier moet kiezen. Hoe kan ik een subdomein maken zonder dat daar daadwerkelijk echte 'andere' pagina's onder hoeven te staan?

Het herkennen van de subdomain in de php lijkt mij niet lastig. Zoiets?
PHP:
subdomain = explode('.', 'en.website.nl')[0];

Middels een if statement kan ik dan het juiste bronbestand laten ophalen. Daar zit verder geen probleem lijkt mij.

Heeft iemand advies over hoe ik dit nu het beste kan aanpakken?
 
Maak een A (IPv4) en AAAA (IPv6) record aan met een *
Zorg ook dat je jouw virtual host aanpast van je webserver zodat elke subdomein in je webroot uitkomt.

Als alles goed is moet elke subdomein op dezelfde index-file van jouw site komen. Test dat eerst eens uit als jouw DNS aangepast is.

Een DNS-wijziging kan een paar uur duren.
 
Laatst bewerkt:
Hoi. Bedankt voor je bericht. Standaard staan deze twee er al in vanuit de host, dus dat hoef ik niet meer te doen. De vraag is hoe ik juist ervoor zorg dat je vanuit elke subdomein in de webroot uitkomt.
 
Je zult je virtual host van je webserver moeten (laten) aanpassen. Het ligt eraan welke webserver je gebruikt en soms of je een bepaald control panel (DirectAdmin, Plesk bijv.) gebruikt.
 
Heeft dit 'proces' een specifieke naam? Dan kan ik het vragen aan mijn webhost.
 
Ja, wildcard DNS of Wildcard Virtual Host
Als alles goed is ingesteld moeten alle subdomeinen op je index-document uitkomen.
 
Ik heb een Web Alias gebruikt, hier verwees de helpdesk van mijn host naar. subdomein 'en' verwijst nu naar mijn root. Als ik naar en.phuel.nl ga (de website in kwestie), verwijst hij mij zonder verlies van url door naar de homepage. Als ik navigeer zie ik echter niet de url wijzigen naar de verschillende pagina's. Kan dat een probleem vormen?
 
Je URL moet juist toch niet verloren gaan? Je controleert er overigens toch op in je PHP-code?
Als de URL wel stil blijft staan als je een link bezoekt, dan heb je mogelijk een ordinaire cloaking frame, die al jaren uitgebannen hoort te zijn. Welke site is het? Eventueel wil ik wel even via Privé Bericht kijken.


Je gaat naar:
www.domein.com -> normale website in standaard taal, en je blijft op www.domein.com met de nodige directories en query-strings erachter...
en.domein.com -> Engelse website, en je blijft op en.domein.com met de nodige directories en query-strings erachter...
es.domein.com -> Spaanse website, en je blijft op es.domein.com met de nodige directories en query-strings erachter...

Dan zie ik geen probleem. Ik neem wel aan dat je site dan ook wel volledig vertaald wordt, en niet enkel gebruikt wordt om bijvoorbeeld enkel de valuta's aan te passen voor in een webshop. Want meerdere (sub)domeinnamen die dezelfde inhoud hebben kunnen voor lagere ranking in Google zorgen. En dat heet 'Duplicate content'. Als dat wél het geval is, zou ik voor een directory gaan (wat infeite met een goede opzet geen echte directory is). En dan krijg je dus www.domein.com/nl, www.domein.com/es, etc...
 
Laatst bewerkt:
Wat ik bedoelde is dat als je navigeert naar en.phuel.nl dat je dan naar de index.php gaat, maar als je bijvoorbeeld naar de info pagina navigeert, komt er geen en.phuel.nl/info.php in de url maar nog steeds en.phuel.nl.

Het gaat inderdaad om volledige vertaling. Ik ga het straks thuis eens proberen op deze manier. Bedankt voor je hulp tot nu toe! :)
 
Jep, omdat je een iframe gebruikt. En daar moet en wil je niet aan beginnen.
Je hebt geen controle over de URL, dus met PHP kan je er niks mee uitlezen, Google heeft moeite met indexeren, en bezoekers kunnen bepaalde pagina's niet eens fatsoenlijk opslaan in hun bladwijzers.

Je hosting moet juist een Alias aanmaken in het virtual host. Gebruik je een speciaal controlepaneel om je hostingpakket mee te beheren?
En zo ja, welke? Of is dit via de website van je hosting?
 
Jammer. Die iFrame oplossing is wel cheap van m'n host. Dan vraag ik me af of ze dit ondersteunen. Het controlepaneel (voor wat betreft de DNS) is van mijn host zelf. Verder PHPMyAdmin maar dat is denk ik niet zo relevant.

Staat hier toevallig in wat jij bedoelt? https://help.one.com/hc/en-us/articles/115005595925-Manage-your-DNS-settings

Edit: net weer contact gehad met de chat. Virtual aliassing wordt niet ondersteund... :( Dus dan met subdirectory doen.
 
Laatst bewerkt:
DNS instellingen zijn nu even niet aan de orde, zolang alle subdomeinen ergens op uitkomen. Maar zorg dat die * er in staat.

Zet eerst even die cheap iframe-oplossing uit. En kijk eens wat er dan gebeurt als je naar niet bestaande subdomeinen surft.
Komt alles op één index.php uit? Zo ja, dan is er niks aan het handje.
 
Laatst bewerkt:
Nee dat heb ik al geprobeerd voordat ik de web alias had aangemaakt. Ik kreeg een 404. De Web alias wordt nu verwijderd.
 
Vraag ze anders zonder moeilijke termen gewoon voor een oplossing om alle subdomeinen naar je index.php te laten verwijzen, zonder frames.
 
Dat is uiteindelijk wel de bedoeling, maar dan moet de webhostingsoftware van hun wel snappen dat alles bij index.php uit moet komen.
Nu wordt dat dus op een plek gerouteerd waar jij blijkbaar geen invloed op kan uitoefenen.

Ben trouwens ook al met de lui in gesprek....
 
Laatst bewerkt:
Ik heb reactie van hen.....
Probeer dit eens in .htaccess

Code:
RewriteEngine On
      RewriteBase /
      RewriteRule ^index\.php$ - [L]
      RewriteCond %{REQUEST_FILENAME} !-f
      RewriteCond %{REQUEST_FILENAME} !-d
      RewriteRule . /index.php [L]
 
Nu lijkt het mij handig om de taal te laten herkennen uit de url
Je kan dit via een cookie doen. Deze snippet kijkt eerst naar de GUI-taal van de browser. Dan of er al eerder een taalkeuze is opgeslagen in een cookie. En dan maakt het de keuze uit NL of EN. Andere talen gaan automatisch naar EN. De taalkeuze voorkeur wordt opgelsgen voor andere paigna's of voor het volgende bezoek.
Code:
<?php
if (isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])) {
  // is er een http_accept_language voorkeur
  $lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'],0,2);
}
if (isset($_COOKIE['taalkeuze'])) {
  // heeft bezoeker al een cookie met de taalkeuze
  $lang = $_COOKIE['taalkeuze'];
}
if (isset($lang)) {
  if ($lang !== 'nl') $lang = 'en';
} else {
  $lang = 'nl';
}
setcookie('taalkeuze', $lang, time() + (86400 * 30), "/");
?>


<div id="language">
  <img src="nl-vlag.jpg" alt="nl" style="display:inline-block">
  <img src="en-vlag.jpg" alt="en" style="display:inline-block">
</div>
<script>
$("#language img").on("click", function(e) {
  var myLang = $(this).attr("alt");
  var d = new Date();
  d.setTime(d.getTime() + (24*60*60*1000));
  var expires = "expires=" + d.toUTCString();
  document.cookie = "taalkeuze=" + myLang + ";" + expires + ";path=/";
});
</script>
Dit staat los van de discussie of je cookies wil gebruiken. Deze cookie is in deze vorm een 'technische' cookie.
 
Je kan dit via een cookie doen. Deze snippet kijkt eerst naar de GUI-taal van de browser. Dan of er al eerder een taalkeuze is opgeslagen in een cookie. En dan maakt het de keuze uit NL of EN. Andere talen gaan automatisch naar EN. De taalkeuze voorkeur wordt opgelsgen voor andere paigna's of voor het volgende bezoek.
Code:
<?php
if (isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])) {
  // is er een http_accept_language voorkeur
  $lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'],0,2);
}
if (isset($_COOKIE['taalkeuze'])) {
  // heeft bezoeker al een cookie met de taalkeuze
  $lang = $_COOKIE['taalkeuze'];
}
if (isset($lang)) {
  if ($lang !== 'nl') $lang = 'en';
} else {
  $lang = 'nl';
}
setcookie('taalkeuze', $lang, time() + (86400 * 30), "/");
?>


<div id="language">
  <img src="nl-vlag.jpg" alt="nl" style="display:inline-block">
  <img src="en-vlag.jpg" alt="en" style="display:inline-block">
</div>
<script>
$("#language img").on("click", function(e) {
  var myLang = $(this).attr("alt");
  var d = new Date();
  d.setTime(d.getTime() + (24*60*60*1000));
  var expires = "expires=" + d.toUTCString();
  document.cookie = "taalkeuze=" + myLang + ";" + expires + ";path=/";
});
</script>
Dit staat los van de discussie of je cookies wil gebruiken. Deze cookie is in deze vorm een 'technische' cookie.

Zou inderdaad ook nog een manier kunnen zijn.

@PHP4U
Momenteel krijg ik op http://en.phuel.nl een 302 error. M'n htaccess ziet er zo uit
Code:
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteCond %{REQUEST_URI}  !^/widget
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}

ErrorDocument 404 /fout.php

  RewriteBase /
  RewriteRule ^index\.php$ - [L]
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteRule . /index.php [L]

Edit: De hele site lag plat dus ik heb de laatste 5 regels weer even verwijderd.
 
Laatst bewerkt:
Vraag de hosting maar waarom het niet werkt.
Blijkbaar is die opzet daar een zooitje.

Misschien is verhuizen zelfs beter.
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan