2010-05-24 10 views
11

He creado un UIDatePicker en mi aplicación y también tengo soporte para varios idiomas. Mi UIDatePicker se creó en Interface Builder, y he creado un XIB de localización separada para poder personalizar mi UIDatePicker.UIDatePicker - Localización de problemas

Al configurar la opción "Configuración regional" en IB, parece que no se hace nada. El intento de cambiar mi DatePicker programáticamente con la configuración regional y NSCalender también no hacer nada a través del siguiente código:

NSLocale * locale = [[NSLocale alloc] initWithLocaleIdentifier:@"es_ES"]; 
datePicker.locale = locale; 
datePicker.calender = [locale objectForKey:NSLocaleCalender]; 

Esto resulta en un selector de Inglés.

Aquí está lo realmente extraño. La palabra para "Hoy" está traducida. Como se ve en la captura de pantalla adjunta. (OK No estoy autorizado para publicar imágenes. Pero imaginar una fecha & selector de tiempo con "Mayo" en Inglés y "Hoy" escrito "Ajourd'hui".

Sobre la base de lo que he leído, la adición de la UIDatePicker programáticamente no parece ayudar mucho.

Respuesta

10

Después de una investigación más a fondo, esto no es manejado por la configuración de idioma del iPhone. El UIDatePicker es localizado automáticamente según la configuración de "Formato de región" y no el idioma. Esto es extraño porque las fechas están localizadas, por lo que podría pensar que la localización del selector estaría vinculada al idioma del dispositivo, no al formato de región.

De todos modos, para simular el DatePicker localizada en el simulador:

  1. la salida de su aplicación, vaya a Configuración.
  2. Seleccione General
  3. Select International
  4. Seleccione la opción inferior, Región de formato.
  5. Cambie a la región deseada.
  6. ¡Vuelva a iniciar su aplicación y vea el nuevo selector de IU!
1

Lo que se me ha dado a entender es que el UIDatePicker se muestra automáticamente en la configuración regional en que está configurado el dispositivo. No estoy seguro de cómo anularlo, pero parece que probablemente no debe anularlo

+4

A veces solo tiene que ser anulado. Es decir. aplicación de un solo idioma. –

0

Desde mi experiencia el "Hoy" sigue las configuraciones que tiene en su info.plist. Por alguna razón, han olvidado adaptar esto.

3

A partir de iOS 6 UIDatePicker ya no mira la configuración del dispositivo para la información de configuración regional. Debe establecer el NSLocale manualmente o usará la configuración regional predeterminada.

Ver esta respuesta: https://stackoverflow.com/a/12975871/1128896

Una solución simple:

datePicker.locale = [NSLocale currentLocale]; 

Actualizado

Mientras que la configuración regional ahora se puede establecer en UIDatePicker, de forma predeterminada se establece en ' Predeterminado 'en lugar de cualquier idioma en particular. 'Predeterminado' verificará la configuración regional del dispositivo y se establecerá a eso. (ver el comentario de Dave DeLong below).Por lo tanto, la mayoría de los proyectos nuevos no deberían verse afectados por este cambio.

Si está trabajando con proyectos más antiguos, que migran a iOS 6, es posible que los UIDatePickers que se crean en xibs tienen su localidad por defecto en 'Inglés' u otro idioma en lugar de 'por defecto'. (He encontrado que todos mis proyectos anteriores, anteriores a iOS6, seguían este comportamiento). Para solucionar esto, simplemente cambie la configuración regional a 'Predeterminado' en IB.

+1

La configuración regional predeterminada * es * la configuración regional del dispositivo. (es decir, el '+ currentLocale') –

+0

Gran punto Dave. Vi tu otro comentario sobre establecer la configuración regional en un xib si se creó allí, [1] (http://stackoverflow.com/questions/1151335/can-i-localize-a-uidatepicker/12975871#comment18351115_12975871). Miré un poco más, y parece que cualquier UIDatePicker creado en versiones más nuevas de Xcode, de forma predeterminada establece la configuración regional en "Predeterminado". Pero todos mis proyectos anteriores, que incluían versiones de iOS 5 o 4, configuran la configuración regional en 'inglés' de forma predeterminada. Por lo tanto, para la mayoría de los proyectos nuevos, esto no debería ser un problema, pero los proyectos más antiguos que pasen a iOS 6 solo deberían verificar su configuración regional de xibs. – Mike

+0

sí, eso es correcto. :) –