8 berichten aan het bekijken - 1 tot 8 (van in totaal 8)
  • Q:
    Bijdrager
    Jakko Westerbeke

    [PHP] setlocale()

    Klopt het dat setlocale() alleen lijkt te werken als je een volledige taal/land-combinatie opgeeft? Deze manier werkt niet:
    [code:1:21a1d4baad]setlocale(LC_ALL, "nl")[/code:1:21a1d4baad]
    maar wat wel het goede resultaat geeft is:
    [code:1:21a1d4baad]setlocale(LC_ALL, "nl_NL")[/code:1:21a1d4baad]
    Helaas is de rest van het lokalisatiemechanisme dat ik voor m’n site gebouwd heb gebaseerd op alleen de taal en niet het land (dus alleen “nl”, niet “nl_NL”), en zou ik dus liever die eerste manier gebruiken — en kijkende naar de voorbeelden voor setlocale() krijg ik toch de indruk dat dat zou moeten werken …

    Hoe los ik dit op?

    Bijdrager
    HerQ

    Dirty oplossing wat eigenlijk geen oplossing is:

    [code:1:84293d2cfd]$locale = ‘nl’;
    setlocale(LC_ALL, locale . ‘_’ . strtoupper($locale), $locale);[/code:1:84293d2cfd]

    Bijdrager
    palahala

    Ligt het niet aan de locales op de server, dus: van hetgeen er op de server geïnstalleerd is?

    Los daarvan: op Windows server mag je volgens mij (maar ik ben geen PHP expert) setlocale niet gebruiken om in PHP een taal voor je site te kiezen: als je een beetje veel bezoekers krijgt dan kan de ene gebruiker, voor zover ik weet, dan de weergave van andere gebruikers beïnvloeden.

    Bijdrager
    Jakko Westerbeke
    ”HerQ”

    [code:1:062f946747]$locale = ‘nl’;
    setlocale(LC_ALL, locale . ‘_’ . strtoupper($locale), $locale);[/code:1:062f946747]

    Dat werkt alleen als taal- en landcode hetzelfde zijn, zoals nl_NL of fr_FR, maar lukt niet bij b.v. nl_BE of en_GB.

    Maar eigenlijk is het niet zo’n punt, heb ik al bedacht — om de tweelettercode te krijgen kun je natuurlijk altijd gewoon de eerste twee letters van de “volledige” code pakken, en ben je ook klaar …

    ”palahala”

    Ligt het niet aan de locales op de server, dus: van hetgeen er op de server geïnstalleerd is?

    Voor zover ik weet bepaalt de server welke landcode je kunt gebruiken; op een POSIX-systeem (d.w.z. Unix) wordt het dus iets als “nl_NL” maar onder Windows iets als “NLD-NLD” of zo. Maar omdat de site getest wordt op m’n Mac en draait op een Linux-server is dat geen probleem.

    Bijdrager
    palahala
    ”Jakko

    Maar eigenlijk is het niet zo’n punt, heb ik al bedacht — om de tweelettercode te krijgen kun je natuurlijk altijd gewoon de eerste twee letters van de “volledige” code pakken, en ben je ook klaar …

    …maar je had toch juist alleen de korte?

    Iets anders: de HTTP Accept-Language header kan volgens mij zowel kort als lang specificeren, net naar gelang de instelling van de gebruiker. Ik weet niet of je daar iets mee wilt doen, maar je zou toch inderdaad verwachten dat PHP ook iets met de korte code kan.

    (Hoewel ik persoonlijk eerder een knopje voor de taalkeuze op een site zou zetten, dan van Accept-Language gebruik te maken, want de meeste bezoekers hebben geen idee dat ze die taal kunnen instellen in hun browser.)

    Bijdrager
    leaf

    Volgens mij werken locales zo:

    [code:1:ecb9a845ea]
    $taal = "nl_NL.UTF8";
    etc
    [/code:1:ecb9a845ea]

    :?

    Bijdrager
    palahala
    ”leaf”

    Volgens mij werken locales zo:
    [code:1:0a94bdca00]$taal = "nl_NL.UTF8";
    etc[/code:1:0a94bdca00]

    Volgens mij heeft Jakko gelijk, met het volgende:

    ”Jakko

    Voor zover ik weet bepaalt de server welke landcode je kunt gebruiken; op een POSIX-systeem (d.w.z. Unix) wordt het dus iets als “nl_NL” maar onder Windows iets als “NLD-NLD” of zo.

    UTF8 heeft trouwens niks met Locales te maken.

    Bijdrager
    Jakko Westerbeke
    ”palahala”

    …maar je had toch juist alleen de korte?

    Ja en nee — ik was een beetje kwijt waar ik zelf mee bezig was toen ik het bericht schreef, denk ik:) De pagina vraagt de gewenste taal op aan de browser, en daar kapte ik het begin vanaf om de landcode te vinden … maar dat was ik geloof ik vergeten (niet vergeten te vermelden, gewoon vergeten) toen ik deze thread begon.

    Wat ik zo’n beetje bedoelde met dat ik alleen de korte landcode had, is dat de mappen waarin de gelocaliseerde bestanden staan, alleen de tweeletter-landcode gebruiken. dus niet met de regio erbij. Maar om de getallen goed te laten werken heb ik maar een tweede variabele erbij gepakt om daar de land+regiocode in op te slaan. Wel vreemd daarin trouwens dat er voor Nederlands geen scheidingsteken voor duizendtallen wordt gedefinieerd in PHP, maar goed …

    ”palahala”

    Iets anders: de HTTP Accept-Language header kan volgens mij zowel kort als lang specificeren, net naar gelang de instelling van de gebruiker. Ik weet niet of je daar iets mee wilt doen

    De ellende met die header is dat hij per browser verschilt. Firefox geeft een veel uitgebreidere dan Safari, om maar wat te noemen. Je kunt er als scriptbouwer dus niet echt van op aan dat hij altijd op een bepaalde manier in elkaar zal steken.

    ”palahala”

    maar je zou toch inderdaad verwachten dat PHP ook iets met de korte code kan.

    Inderdaad, zeker aangezien de voorbeelden op de PHP-site reeksen van mogelijkheden laten zien, in de trant van
    [code:1:31276aa27e]"de_DE.UTF-8", "de_DE", "de"[/code:1:31276aa27e]
    waardoor ik dan verwacht ik dat hij alleen “nl” ook zal pikken — maar nee, dus:(

    ”palahala”

    (Hoewel ik persoonlijk eerder een knopje voor de taalkeuze op een site zou zetten, dan van Accept-Language gebruik te maken, want de meeste bezoekers hebben geen idee dat ze die taal kunnen instellen in hun browser.)

    Misschien komt dat er wel, daar ben ik nog niet helemaal uit — het is vooral afhankelijk van of er een manier is om de waarden van variabelen te bewaren wanneer de pagina herladen wordt. Ik ben nu grofweg een week met PHP bezig, dus hoe het allemaal precies werkt ben ik nog niet helemaal uit …

8 berichten aan het bekijken - 1 tot 8 (van in totaal 8)

Je moet ingelogd zijn om een reactie op dit onderwerp te kunnen geven.