2010-05-04 3 views
6

Mam następujący fragment kodu:setlocale mający żadnego wpływu na PHP

setlocale(LC_ALL, "de"); 
print(strftime("%A %e %B %Y", time())); 

i to drukowanie

wtorek 04 maja 2010

zamiast

Dienstag 4. Mai 2010

Jakieś pomysły, dlaczego? Jak naprawić?

Odpowiedz

14

Czy masz dostępne locale de; co dla Ciebie zwraca setlocale? Patrz: return values for setlocale().

Sprawdź także listę dostępnych ustawień regionalnych (np. locale -a lub inną konfigurację systemu operacyjnego), aby sprawdzić, czy jest wśród nich de. Prawdopodobne alternatywy to de_DE lub , aby wymienić tylko kilka.

W Debianie, w celu wygenerowania nowego lokum, uruchom polecenie:

dpkg-reconfigure locales 

i wybrać te, które chcesz.

5

Ustawienie lokalizacji nie przyniesie efektu, jeśli ustawienia regionalne nie są zainstalowane w systemie.

3

Spróbuj ustawić LC_ALL na "de_DE". W moim systemie nie zadziała, dopóki tego nie zrobię.

$ LC_ALL=de date 
Tue May 4 07:40:13 CDT 2010 
$ LC_ALL=de_DE date 
Di 4. Mai 07:39:27 CDT 2010 
4

Dla mnie dodaje wystarczyły:

setlocale(LC_TIME, ""); 

W połączeniu z:

echo strftime("%d. %B %Y"); 

To jak mam aktualną datę w formacie niemieckim. Nadzieja, która może pomóc.

3

Używam Ubuntu na Raspberry Pi, miał ten sam problem próbuje użyć portugalski miejscowy dla terminu:

setlocale(LC_TIME, "C"); 
echo strftime("%A"); 
echo setlocale(LC_TIME, "pt_PT"); 
echo strftime(" in Portuguese %A"); 

następnie sprawdzane z poleceniem lokalny -a, pt_PT nie było na liście, więc dodałem go sudo/usr/share/locale/install-language-pack pt_PT i uruchomić lokalnej -a znowu: tam było pt_PT.utf8. Po tym wyniku wynik jest taki sam: wynik oczekiwany dla pt_PT nadal w języku angielskim. Oto niewielka różnica, że ​​wykonana praca rzeczy do mnie:

··· 
echo setlocale(LC_TIME, "pt_PT.utf8"); 
··· 

Więc musiałem skręcić pt_PT w pt_PT.utf8

+0

To co pracował dla mnie. To, co zrobiłem, to zainstalować cały pakiet językowy, nie określając w szczególności: '/ usr/share/locales/install-language-pack es' –

+0

Istnieje literówka:" setlocale "zamiast" etlocale "w pierwsza linia przykładowego kodu. Nie można tego edytować, przepraszam! –

+0

Dzięki @NEXTLEVELSHIT! Już teraz poprawiono. – alexscmar

0

może nie być zainstalowany locale, więc jeśli jesteś na ubuntu możesz sprawdzić listę za pomocą "locale -a" bez cuotes i sprawdzić dostępne języki w pliku/usr/share/i18n/SUPPORTED i wygenerować ustawienia wymagane przez "locale-gen de_DE"

nadzieję, że ta praca dla Ciebie.

0

Należy pamiętać, że najprawdopodobniej po wygenerowaniu nowych lokalizacji w systemie Linux konieczne będzie ponowne uruchomienie deamonów httpd i php-fpm.

Bez restartu php (7.2) nie mógł ich znaleźć, nawet jeśli był wymieniony w locale -a.

nadzieję, że uratować komuś trochę czasu :)

1
locale -a 
locale-gen nb_NO.UTF-8 
locale-gen nb_NO 
update-locale 
locale -a 
restart php5-fpm 
+0

Proszę podać wyjaśnienie, na czym polega rozwiązanie, które publikujesz. –