[PHP/MySQL] automatische taalselectie

Pagina: 1
Acties:
  • 115 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik wil mijn website (php/mysql) meertalig maken: engels en nederlands. Voor de woorden en korte zinnen op de website heb ik losse bestanden gemaakt met een paar arrays (dit wordt door veel forums ook gedaan) en voor de inhoud heb ik extra tabellen gemaakt in de database (en_content + nl_content etc) waar ik de data uit kan halen. Probleem waar ik nu een beetje mee zit is hoe ik de taalselectie het beste kan implementeren. Ik wil eigenlijk een automatische taalselectie, maar een gebruiker moet natuurlijk wel kunnen switchen als hij/zij dat wil.

het eerste probleem: in welke taal moet de website weergegeven worden?

optie - kijk naar de taalinstelling van de browser - $_SERVER['HTTP_ACCEPT_LANGUAGE'] zal "nl" teruggeven bij nederlandstalige browsers, maar bij nederlandse mensen met een engelstalige browser geeft het geen nl terug (tenzij de gebruiker die instelling handmatig heeft veranderd) wat dus een probleem is.

optie - download een ip-to-country database, vergelijk het ip adres van de gebruiker met de gegevens in de database en haal de landcode uit de database. Nadeel hiervan is dat de webmaster (ikzelf in dit geval) die database goed moet bijhouden en dat zie ik niet echt zitten en daarnaast de hogere serverlast vergeleken met de vorige optie

tweede probleem: taal of voorkeur van de gebruiker opslaan/onthouden

optie - als cookie opslaan, als er nog geen cookie is bovenstaande taaldetectie uitvoeren. Geeft alleen problemen bij mensen die cookies uit hebben staan.

optie - eerst een cookietest doen, wanneer een cookie niet kan worden gemaakt een sessievariabele gebruiken. nadeel is dat bij elk bezoek, van iemand die cookies uit heeft staan, de taaldetectie moet worden uitgevoerd en de gebruiker moet switchen naar een andere taal (wellicht eigen schuld in dit geval, maargoed)

Zijn er meer manieren/oplossingen voor deze problemen, ben ik iets vergeten of zijn er gebruikers met ervaring op het gebied van meertalige websites? graag jullie input

p.s. ik weet dat apache zelf ook een taalselectie kan uitvoeren, maar ook daar wordt alleen gekeken naar de taalinstelling van de browser, dus dan kan ik net zo goed een klein stukje php coden.

Acties:
  • 0 Henk 'm!

  • PrisonerOfPain
  • Registratie: Januari 2003
  • Laatst online: 26-05 17:08
de extentie uit gethostbyaddr($_SERVER['REMOTE_ADDR']); geeft ook een redelijke indicatie. Geef de gebruiker zelf de optie om te wisselen als het fout gaat en sla de gegevens van geregistreerde gebruikers in de database op.

Acties:
  • 0 Henk 'm!

  • rvrbtcpt
  • Registratie: November 2000
  • Laatst online: 19-09 16:18
Misschien erg simpel maar gewoon starten in de taal waar je domein naam op draait? Dus .nl dan in nederlands en .com dan in het engels.
En dan gewoon in de menubalk of zo icoontjes of een drop down waar de gebruiker zelf kan kiezen.

Het is namelijk irritant dat sommige programma's het zelf uitzoeken.
Ik werk bijvoorbeeld in Belgie en dan springt Google automatisch op zoekopdrachten voor sites uit Belgie terwijl ik liever .nl sites heb.

Acties:
  • 0 Henk 'm!

Verwijderd

Een truuckje voor het laten onthouden van de taal is het gebruiken van mod_rewrite van apache. Als de browser een url krijgt met iets als http://www.domain.com/en/home dan kun je dat achter de schermen laten omzetten naar http://www.domain.com/index.php?lang=en&page=home
De browser zal toch niet weten dat de directory "en" niet bestaat, en switchen van taal gaat met zoiets simpels als een link naar ../nl

Verder wil ik je afraden met dingen als en_content in een database aan de gang te gaan. Normaliseer je database iets beter en maak gebruik van koppeltabellen (n:m relaties tussen talen en pagina's)

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
PrisonerOfPain schreef op 13 juni 2004 @ 11:18:
de extentie uit gethostbyaddr($_SERVER['REMOTE_ADDR']); geeft ook een redelijke indicatie
nooit aan gedacht - dat is inderdaad wel een goede manier
Frijns.Net schreef op 13 juni 2004 @ 11:19:
Het is namelijk irritant dat sommige programma's het zelf uitzoeken.
Ik werk bijvoorbeeld in Belgie en dan springt Google automatisch op zoekopdrachten voor sites uit Belgie terwijl ik liever .nl sites heb.
dat een site zich automatisch aanpast vind ik juist erg makkelijk, alleen moet een gebruiker wèl kunnen omschakelen en moet die voorkeur onthouden worden, vandaar deel2 van mijn post.
Verwijderd schreef op 13 juni 2004 @ 11:21:
Een truuckje voor het laten onthouden van de taal is het gebruiken van mod_rewrite van apache. Als de browser een url krijgt met iets als http://www.domain.com/en/home dan kun je dat achter de schermen laten omzetten naar http://www.domain.com/index.php?lang=en&page=home
De browser zal toch niet weten dat de directory "en" niet bestaat, en switchen van taal gaat met zoiets simpels als een link naar ../nl

Verder wil ik je afraden met dingen als en_content in een database aan de gang te gaan. Normaliseer je database iets beter en maak gebruik van koppeltabellen (n:m relaties tussen talen en pagina's)
naar mod_rewrite zal ik even moeten kijken, daar heb ik geen ervaring mee (weet ook niet of dat beschikbaar is op de server, ik heb zo'n shared hosting pakketje). Over de database: in het verleden was het niet mogelijk om tabellen in mysql te koppelen en daarom gebruik ik meestal een koppeltabel die niet echt koppelt. Ik had dit dus in gedachte

code:
1
2
3
4
5
6
idx_inhoud
---------
id (auto_increment)
auteur
datum
datum_gewijzigd
code:
1
2
3
4
en_inhoud
---------
id
inhoud
code:
1
2
3
4
nl_inhoud
---------
id
inhoud
waarbij en_inhoud.id en nl_inhoud.id horen bij idx_inhoud.id. Ik zal eens kijken hoe dat koppelen van tabellen werkt

Acties:
  • 0 Henk 'm!

  • Skaah
  • Registratie: Juni 2001
  • Laatst online: 16-09 18:38
code:
1
2
3
4
tblPaginas
==========
pagId
pagAuteur


code:
1
2
3
4
tblTalen
========
taalId
taalNaam


code:
1
2
3
4
5
6
tblInhouden
===========
inhoudId
inhoudTitel
inhoudInhoud
inhoudTaalId


code:
1
2
3
4
5
6
tblKoppelTaalenPagina
=====================
kplId
kplPaginaId
kplInhoudId
kplTaalId


Zo kun je dus meerdere pagina's in alle talen die je wilt opslaan, maar is het niet noodzakelijk dat iedere pagina multi-talig is. Je maakt voor elke pagina een rij in tblPagina's. Voor elke taal maak je een rij in tblInhoud. Deze koppelje met tblKoppelTaalenPagina.

Voorbeeldje (gebruiker vraag pagina met id = 3 op) (niet getest!)
SQL:
1
2
3
4
5
6
7
SELECT pagId, pagAuteur, inhoudInhoud, inhoudTitel, taalNaam FROM tblPaginas,
 tblInhouden, tblTalen, tblKoppelTaalenPagina
WHERE kplPaginaId = 3 
 AND kplPaginaId = pagId
 AND kplInhoudId = inHoudId 
 AND kplTaalId = taalId
 AND taalNaam = 'nl-nl';

[ Voor 43% gewijzigd door Skaah op 13-06-2004 13:48 ]

Pagina: 1