2014-04-24 6 views

risposta

3

mi piacerebbe correre locale -a e utilizzare la stringa in output. Su OS X 10.9, ottengo de_DE.UTF-8. Su Debian 6, ottengo . dpkg-reconfigure locales utilizza de_DE.UTF-8 d'altra parte. Il modo più sicuro è probabilmente quello di controllare il valore di ritorno di setlocale e provare diverse varianti se fallisce.

Detto questo, tutte le versioni dovrebbero funzionare normalmente: con o senza trattino, maiuscolo o minuscolo.

+0

Perfetto. Ho 'Debian GNU/Linux 6.0.9 (squeeze)' e 'locale -a' restituisce' de_DE.utf8' - tra un centinaio di altri. –

+1

@what 'locale -a | grep -i de_de' dovrebbe aiutare. – sjas

2

Il nome della codifica è UTF-8.

ma in questo caso entrambi i parametri sono corretti e che stanno facendo lo stesso lavoro per voi

0

Ecco una soluzione pragmatica per risolverlo in modo programmatico. Se lo strumento setlocale non funziona, restituisce 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 

Nel mio caso si potrebbe lavorare sui nostri Mac e l'altro sarebbe lavorare sulle scatole Linux CI, quindi questa soluzione rende i test passano su entrambi.

Btw; fai attenzione a LC_ALL. Imposta le impostazioni internazionali per l'ambito più debole di cui hai bisogno.

0

È possibile passare una serie di valori a setLocale(). Mi sono appena imbattuto in questo problema durante lo sviluppo su OSX e il test sull'hosting in esecuzione su Linux. Così ora faccio questo: setLocale(LC_ALL, ["de.utf", "de_DE.utf", "de_DE.UTF-8", "de", "de_DE"]) Il primo a corrispondere è un andare. Documenti: https://secure.php.net/setlocale