8

Ich habe versucht, eine lokalisierte Datumszeichenfolge mit strftime zu generieren, der Platzhalter, den ich verwende, ist %x. Die Sprache/Ländereinstellung lautet setlocale(LC_ALL, array('jp','japanese')), jedoch war keine Ländereinstellung verfügbar, sodass eine Zeichenfolge mit falschen Zeichen generiert wurde. Ich installierte dann das Gebietsschema ja_JP.utf8 und spezifizierte dieses als das erste Element im Array und das Datum, das ich hatte, wurde aufgelöst.Ist es möglich, sich auf setlocale zu verlassen und sich darauf zu verlassen, dass Ländereinstellungen installiert werden?

Meine Frage ist, sollte ich immer auf Locales installiert werden? Ich weiß, wie ich sie auf Boxen installiere, auf die ich root zugreifen kann. Was aber, wenn ich keinen Zugriff habe?

Ich glaube, Zend_Locale und Zend_Translate nicht auf setlocale überhaupt verlassen, aber irgendwie tun es intern, die mir den Eindruck gibt, dass es praktisch für Enterprise-Anwendungen nicht möglich ist.

Ich weiß, ich könnte wahrscheinlich Zend_Locale und Zend_Translate in meiner Anwendung verwenden, aber es muss auch PHP4 unterstützen, zumindest für ein weiteres Jahr, weshalb ich mich nicht allein auf diese verlassen kann.

Antwort

6

Wenn meine Untersuchung von setlocale() korrekt ist, lautet die Antwort: Nein und nein. Der Bereich der installierten Ländereinstellungen variiert ebenso wie der Name und die Verfügbarkeit einer bestimmten Ländereinstellung kann letztlich nicht mit absoluter Sicherheit vorhergesagt werden.

0

Machbar, ja. Weise, überhaupt nicht!

+1

Welche Methode verwenden Sie für lokalisierte Daten? –

+2

intl (http://www.php.net/manual/en/book.intl.php) ist eine Schnittstelle zur ICU, also vertraue ich darauf. Trotzdem: Vertrauen, aber verifizieren, wie Ronnie immer sagte. –

4

Sie können den Rückgabewert von setlocale prüfen und zumindest überprüfen, ob er installiert wurde. Sonst treten stumme Fehler auf:

setlocale(LC_ALL, 'en_US') or die('Locale not installed');