[PHP] Setlocale op IIS via HTTP_ACCEPT_LANGUAGE

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

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Wolf3D
  • Registratie: Augustus 2001
  • Laatst online: 22-08 12:03
Het idee is simpel, maar het werkt niet en online is niets te vinden over mogelijke oplossingen. Dus probeer ik het hier..

Voor een website die in verschillende talen kan worden weergegeven (instelbaar door klant), wil ik een datum weergeven. Na veel problemen met het weergeven van het juiste formaat (d-m-y, d.m.y, m-d-Y, enz..) is besloten om de tekstuele versie te gebruik en in de juiste taal via setlocale weer te geven. Handig te weten is dat de website draait op een IIS-server.

PHP:
1
2
3
4
5
6
function presentDate($timestamp) {
  $date_lang = "nld_nld";
  setlocale(LC_ALL, $date_lang);
  $date = ucwords(strftime("%a %d %B '%y", $timestamp));
  return $date;
}


Dit werkt prima. Maar nu komt het probleem. Hoe kom ik aan de variabele waarde voor $date_lang, in mijn voorbeeld hard ingesteld op "nld_nld".
Via HTTP_ACCEPT_LANGUAGE kom ik niet verder dan nl_nl, en_us, enz enz. Daar kan setlocale via IIS dus niets mee. Dus hoe maak ik de vertaalslag van nl_nl -> nld_nld. Of is er toch een manier om setlocale te voeren met nl_nl ipv. nld_nld. Of is er een manier om nld_nld ergens vandaan te toveren?

Ik zat ook nog te denken aan een kopeltabel maar het lijkt me vrij veel werk om al deze koppelingen handmatig te maken.

Iemand ideeën of ervaring met dit probleem?

Acties:
  • 0 Henk 'm!

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 20-09 23:58

TeeDee

CQB 241

Als ik op php.net kijk zou dat gewoon moeten werken.
PHP:
1
2
3
4
setlocale(LC_ALL,"nl_nl");
//ander voorbeeld
$loc_de = setlocale(LC_ALL, 'de_DE@euro', 'de_DE', 'deu_deu');
echo "Preferred locale for german on this system is '$loc_de'";

[ Voor 35% gewijzigd door TeeDee op 07-06-2007 13:30 ]

Heart..pumps blood.Has nothing to do with emotion! Bored


Acties:
  • 0 Henk 'm!

  • Wolf3D
  • Registratie: Augustus 2001
  • Laatst online: 22-08 12:03
Die eerste werkt niet op Windows. Die tweede werkt inderdaad, maar zodra ik één van de argumenten weglaat valt hij weer terug naar het engelse formaat. En ik beschik in dit voorbeeld niet over 'deu_deu'.

Acties:
  • 0 Henk 'm!

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 20-09 23:58

TeeDee

CQB 241

Hmm, ik begrijp nu het probleem.

De http_accept_language bevat geen ISO 3166 definitie voor je je language. Vergeet trouwens ook niet dat locale != language he.

Zal nog eens even verder neuzen.

Heart..pumps blood.Has nothing to do with emotion! Bored


Acties:
  • 0 Henk 'm!

  • Wolf3D
  • Registratie: Augustus 2001
  • Laatst online: 22-08 12:03
Ja of ISO639 was het dacht ik. Maar af en toe zie ik door al die iso-bomen die iso-bos niet meer. :P

Wat bedoel je verder met locale != language? Het is toch o.a. een taalinstelling?

In ieder geval vast bedankt voor je hulp!

[ Voor 10% gewijzigd door Wolf3D op 07-06-2007 17:22 ]


Acties:
  • 0 Henk 'm!

  • Solopher
  • Registratie: December 2002
  • Laatst online: 11-09 14:55
Heb je dit toevallig al geprobeerd?
PHP:
1
2
3
<?php
setlocale(LC_ALL, 'dutch');
?>


Heel raar maar op een windows 2003 server machine met IIS erop werkte dit ook.

Acties:
  • 0 Henk 'm!

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 20-09 23:58

TeeDee

CQB 241

Solopher schreef op vrijdag 08 juni 2007 @ 01:53:
Heb je dit toevallig al geprobeerd?
PHP:
1
2
3
<?php
setlocale(LC_ALL, 'dutch');
?>


Heel raar maar op een windows 2003 server machine met IIS erop werkte dit ook.
Dat zal ongetwijfeld werken, maar dat kan je niet uit je HTTP_ACCEPT_LANGUAGE halen.
Ik denk dat het enige wat je kan doen is alles hardcoden in een conversie tabel of iets dergelijks.

Heart..pumps blood.Has nothing to do with emotion! Bored


Acties:
  • 0 Henk 'm!

Verwijderd

Zet gewoon Linux op je bak en je hebt geen problemen meer met setlocale ;)

Acties:
  • 0 Henk 'm!

  • Wolf3D
  • Registratie: Augustus 2001
  • Laatst online: 22-08 12:03
Verwijderd schreef op zaterdag 09 juni 2007 @ 00:33:
Zet gewoon Linux op je bak en je hebt geen problemen meer met setlocale ;)
Geloof me .. als dat kon had ik dat direct gedaan! Helaas heeft zo'n keuze in dit geval iets meer impact.
TeeDee schreef op vrijdag 08 juni 2007 @ 11:47:
Ik denk dat het enige wat je kan doen is alles hardcoden in een conversie tabel of iets dergelijks.
Ik had ook al zo'n eng vermoeden dat zo'n conversie tabel de enige en beste optie was. Maar het lijkt me dat ik niet de eerste ben die dit probleem tegen komt .. misschien is er ergens zo'n tabel te vinden. Nog maar eens verder zoeken .....

Acties:
  • 0 Henk 'm!

  • Wolf3D
  • Registratie: Augustus 2001
  • Laatst online: 22-08 12:03
Gevonden! De vrij complete lijst:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
$browserlang = array(
    'af' => 'afrikaans', // ISO-8859-1
    'sq' => 'albanian',  // ISO-8859-1
    'ar' => 'arabic',    // 1256
    'ar-dz' => 'arabic', // algeria
    'ar-bh' => 'arabic', // bahrain
    'ar-eg' => 'arabic', // egypt
    'ar-iq' => 'arabic', // iraq
    'ar-jo' => 'arabic', // jordan
    'ar-kw' => 'arabic', // kuwait
    'ar-lb' => 'arabic', // lebanon
    'ar-ly' => 'arabic', // libya
    'ar-ma' => 'arabic', // morocco
    'ar-om' => 'arabic', // oman
    'ar-qa' => 'arabic', // qatar
    'ar-sa' => 'arabic', // Saudi Arabia
    'ar-sy' => 'arabic', // syria
    'ar-tn' => 'arabic', // tunisia
    'ar-ae' => 'arabic', // U.A.E
    'ar-ye' => 'arabic', // yemen
    'hy' => 'armenian',
    'ast' => 'asturian',
    'eu' => 'basque',
    'be' => 'belarusian',
    'bs' => 'bosanski',//bosnian -bosanski is nuke lang name
    'bg' => 'bulgarian',
    'ca' => 'catalan',
    'zh' => 'chinese',
    'zh-cn' => 'chinese', // China
    'zh-hk' => 'chinese', // Hong Kong
    'zh-sg' => 'chinese', // Singapore
    'zh-tw' => 'chinese', // Taiwan
    'hr' => 'croatian',   // 1250
    'cs' => 'czech',
    'da' => 'danish',   // ISO-8859-1
    'dcc' => 'desi',    // Deccan, India
    'nl' => 'dutch',    // ISO-8859-1
    'nl-be' => 'dutch', // Belgium
    'en' => 'english',
    'en-au' => 'english', // Australia
    'en-bz' => 'english', // Belize
    'en-ca' => 'english', // Canada
    'en-ie' => 'english', // Ireland
    'en-jm' => 'english', // Jamaica
    'en-nz' => 'english', // New Zealand
    'en-ph' => 'english', // Philippines
    'en-za' => 'english', // South Africa
    'en-tt' => 'english', // Trinidad
    'en-gb' => 'english', // United Kingdom
    'en-us' => 'english', // United States
    'en-zw' => 'english', // Zimbabwe
    'eo' => 'esperanto',
    'et' => 'estonian',
    'eu' => 'euraska',   // ISO-8859-1
    'fo' => 'faeroese',
    'fi' => 'finnish',   // ISO-8859-1
    'fr' => 'french',    // ISO-8859-1
    'fr-be' => 'french', // Belgium
    'fr-ca' => 'french', // Canada
    'fr-fr' => 'french', // France
    'fr-lu' => 'french', // Luxembourg
    'fr-mc' => 'french', // Monaco
    'fr-ch' => 'french', // Switzerland
    'gl' => 'galego', //galician- galego is nuke lang name // ISO-8859-1
    'ka' => 'georgian',
    'de' => 'german',    // ISO-8859-1
    'de-at' => 'german', // Austria
    'de-de' => 'german', // Germany
    'de-li' => 'german', // Liechtenstein
    'de-lu' => 'german', // Luxembourg
    'de-ch' => 'german', // Switzerland
    'el' => 'greek',      // ISO-8859-7
    'he' => 'hebrew',
    'hu' => 'hungarian',  // ISO-8859-2
    'is' => 'icelandic',  // ISO-8859-1
    'id' => 'indonesian', // ISO-8859-1
    'ga' => 'irish',
    'it' => 'italian',    // ISO-8859-1
    'it-ch' => 'italian', // Switzerland
    'ja' => 'japanese',
    'ko' => 'korean',
    'ko-kp' => 'korean', // North Korea
    'ko-kr' => 'korean', // South Korea
    'ku' => 'kurdish',      // 1254
    'lv' => 'latvian',
    'lt' => 'lithuanian',   // 1257
    'mk' => 'macedonian',   // 1251
    'ms' => 'malayu',
    'no' => 'norwegian',    // ISO-8859-1
    'nb' => 'norwegian',    // bokmal
    'nn' => 'norwegian',    // nynorsk
    'pl' => 'polish',       // ISO-8859-2
    'pt' => 'portuguese',   // 28591, Latin-I, iso-8859-1
    'pt-br' => 'brazilian', // Brazil
    'ro' => 'romanian',     // 28592, Central Europe, iso-8859-2
    'ru' => 'russian',      // 1251 ANSI
    'gd' => 'scots gealic',
    'sr' => 'serbian',
    'sk' => 'slovak',       // 1250 ANSI
    'sl' => 'slovenian',    // 28592, Central Europe, iso-8859-2
    'es' => 'spanish',      // 28591, Latin-I, iso-8859-1
    'es-ar' => 'spanish',   // Argentina
    'es-bo' => 'spanish', // Bolivia
    'es-cl' => 'spanish', // Chile
    'es-co' => 'spanish', // Colombia
    'es-cr' => 'spanish', // Costa Rica
    'es-do' => 'spanish', // Dominican Republic
    'es-ec' => 'spanish', // Ecuador
    'es-sv' => 'spanish', // El Salvador
    'es-gt' => 'spanish', // Guatemala
    'es-hn' => 'spanish', // Honduras
    'es-mx' => 'spanish', // Mexico
    'es-ni' => 'spanish', // Nicaragua
    'es-pa' => 'spanish', // Panama
    'es-py' => 'spanish', // Paraguay
    'es-pe' => 'spanish', // Peru
    'es-pr' => 'spanish', // Puerto Rico
    'es-es' => 'castellano', // Spain
    'es-uy' => 'spanish', // Uruguay
    'es-ve' => 'spanish', // Venezuela
    'sv' => 'swedish',
    'sv-fi' => 'swedish',   // Finland
    'sw' => 'swahili',      // Kenya and Tanzania
    'th' => 'thai',         // 874
    'tr' => 'turkish',      // 1254
    'ug' => 'uighur',       // ISO-8859-1, 28591 Turkish, Uzbek, China
    'uk' => 'ukrainian',
    'vi' => 'vietnamese',
    'cy' => 'welsh',
    'xh' => 'xhosa',
    'yi' => 'yiddish',
    'zu' => 'zulu'
);


Deze lijst heb ik gevonden en gekopieerd van http://dragonflycms.org/c...tions/language.php?v=9.13

En toen was ik weer een stapje verder!
Pagina: 1