2014-04-24 12 views

Odpowiedz

3

bym uruchomić locale -a i użyć ciągu wyprowadza. Na OS X 10.9 otrzymuję de_DE.UTF-8. Na Debianie 6 otrzymuję . dpkg-reconfigure locales używa de_DE.UTF-8 z drugiej strony. Najbezpieczniejszym sposobem jest prawdopodobnie sprawdzenie wartości zwracanej setlocale i wypróbowanie różnych wariantów w przypadku niepowodzenia.

To powiedziawszy, wszystkie wersje powinny zwykle działać: z myślnikiem lub bez, z dużymi lub małymi literami.

+0

Idealny. Mam 'Debian GNU/Linux 6.0.9 (squeeze)' a 'locale -a' wypisuje' de_DE.utf8' - pośród setek innych. –

+1

@what 'locale -a | grep -i de_de' powinien pomóc. – sjas

2

Nazwa kodowania to UTF-8.

ale w tym przypadku oba parametry są prawidłowe i robią to samo zadanie dla ciebie

0

Oto pragmatyczne rozwiązanie do jego programowego rozwiązania. Po niepowodzeniu setlocale zwraca wartość false.

if (!setlocale(LC_ALL, str_replace('utf-8', 'utf8', $locale)) 
&& !setlocale(LC_ALL, str_replace('utf8', 'utf-8', $locale))) { 
    /* fail gracefully */ 
} 
/* your locale has been set up properly 

W moim przypadku można by pracować na naszych komputerach Mac, a drugi będzie pracować na polach Linux CI, więc rozwiązanie to sprawia, testy przechodzą na obu.

Btw; uważaj na LC_ALL. Ustaw locale na najsłabszy zakres, jakiego potrzebujesz.

0

Można faktycznie przekazać tablicę wartości do setLocale(). Właśnie natknąłem się na ten problem, rozwijając system OSX i testując na hostingu działającym pod Linuksem. Teraz robię to: setLocale(LC_ALL, ["de.utf", "de_DE.utf", "de_DE.UTF-8", "de", "de_DE"]) Pierwszy, który pasuje, to odejść. Dokumenty: https://secure.php.net/setlocale