2009-09-13 8 views

Respuesta

8

Zend_Date está completamente internacionalizado. Debe comprobar que fuera para una forma sencilla de hacerlo:

Todos los nombres completos y abreviados de meses y días de la semana son compatibles con más de 130 idiomas. Los métodos admiten tanto la entrada como la salida de las fechas utilizando los nombres localizados de meses y entre semana, en el formato convencional asociado con cada localidad.

+0

La solución simple que estaba buscando. Danke. –

+1

¿No supone esto que tienes que estar usando el framework zend? que no se menciona en la pregunta. – KdgDev

+1

@WebDevHobo - no, no tiene que usar todo, sus componentes están ligeramente acoplados por diseño. – karim79

5

En realidad, no creo que es muy posible en PHP 5.2 :-(

Al menos, no con lo que está incluido con/en PHP (Hay bibliotecas codificadas en PHP que se puede utilizar, aunque , al igual que otras respuestas señalaron)


Con PHP 5.3, sin embargo, usted tiene la clase IntlDateFormatter, que hace exactamente lo que quiere:

Esta clase representa la fecha en la UCI funcionalidad de formateo. Permite a los usuarios de mostrar las fechas en un formato localizado o analizar cadenas en valores de fecha PHP usando cadenas de patrones y/o patrones enlatados.

Por ejemplo, el uso de esa clase, como esto:

echo IntlDateFormatter::create('fr_FR', IntlDateFormatter::FULL, IntlDateFormatter::FULL)->format(time(time())) . "\n"; 
echo IntlDateFormatter::create('fr_FR', IntlDateFormatter::MEDIUM, IntlDateFormatter::SHORT)->format(time(time())) . "\n"; 

echo IntlDateFormatter::create('zh-Hant-TW', IntlDateFormatter::FULL, IntlDateFormatter::FULL)->format(time(time())) . "\n"; 
echo IntlDateFormatter::create('zh-Hant-TW', IntlDateFormatter::MEDIUM, IntlDateFormatter::SHORT)->format(time(time())) . "\n"; 

echo IntlDateFormatter::create('en_US', IntlDateFormatter::FULL, IntlDateFormatter::FULL)->format(time(time())) . "\n"; 
echo IntlDateFormatter::create('en_US', IntlDateFormatter::MEDIUM, IntlDateFormatter::SHORT)->format(time(time())) . "\n"; 

se obtendría:

dimanche 9 novembre 2008 23:54:47 GMT+00:00 
9 nov. 2008 23:54 
2008年11月9日星期日 下午11時54分47秒 GMT+00:00 
2008/11/9 下午 11:54 
Sunday, November 9, 2008 11:54:47 PM GMT+00:00 
Nov 9, 2008 11:54 PM 

que se ve bastante bien, ¿no es así?

Lo triste es PHP 5.3 es sólo unos pocos meses de edad, y no está disponible en muchos servicios de alojamiento ... Y va a requerir pruebas (y probablemente fija) para su aplicación ...


Pensando en ello : tal vez puede instalar el PECL intl extension en PHP 5.2, y obtener la misma funcionalidad ...

+0

Puede valer la pena señalar que IntlDateFormatter :: format ($ time) fallará en silencio si $ time es una cadena. ¡Asegúrate de pasar siempre un número entero! (Probado con Ubuntu 10.04 LTS y PHP 5.3.) –

2

Si necesita una manera más simple que Zend_Date y IntlDateFormatter pruebe la función estándar strftime en php. Aquí está lo que hice para ponerlo en funcionamiento con el idioma ruso ejecutando php 5.3 en Ubuntu (la configuración regional rusa no estaba instalada).

instalar el locale

  1. cd /usr/share/locales
  2. sudo ./install-language_pack ru_RU
  3. sudo dpkg-reconfigure locales
  4. Reinicia Apache

A continuación, utilizar el siguiente fragmento de código PHP:

setlocale(LC_TIME, 'ru_RU.UTF-8'); 
echo strftime('%A', time()); 

Debe salir hoy el día de la semana.

+0

En mi humilde opinión, tanto 'IntlDateFormatter' (siempre que esté ejecutando PHP 5.3 con intl instalado) y' Zend_Date' son más simples que cualquier cosa que requiera 'setlocale()'. –

Cuestiones relacionadas