NSDateFormatter: solo muestra dates localizadas si la aplicación está localizada para el idioma

Actualmente estoy escribiendo una aplicación para el iPhone que trabaja en gran medida con dates. Estoy usando NSDateFormatter para convertir dates a cadenas. Convenientemente, NSDateFormatter crea automáticamente cadenas en el idioma del usuario según el formatting de región. Debido a que no puedo ubicar mi aplicación en todos los idiomas y regiones posibles, la aplicación solo está localizada en inglés, alemán, español y algunos otros.

Cuando la aplicación se está ejecutando para un usuario francés, por ejemplo, la aplicación tiene un valor pnetworkingeterminado en inglés. Eso está bien, pero las dates aún se convertirán usando el idioma francés. Esto da como resultado cadenas como "Mes: Juillet" en lugar de "Mes: Julio".

¿Cómo puedo hacer que NSDateFormatter siempre use el idioma en el que se ejecuta la aplicación? Sé que podría usar NSLocalizedString() para localizar los identificadores NSLocale , pero esto producirá una configuration de región incorrecta.

Cuando el usuario generalmente usa una región "en_GB" y mi aplicación está localizada en inglés en general, quiero que NSDateFormatter use "en_GB" y no solo "en" o "en_US". Cuando el usuario ejecuta francés, quiero que la configuration regional sea "en" y si ejecuta la aplicación en la región "de_DE", quiero que los formattings de date sean "de_DE", también, porque la aplicación admite alemán.

Saludos Fabian

Cuando crea el formateador de date, inicializa su estilo desde el entorno local actual, pero puede anularlo.

[no probado] Puede get la mejor configuration regional de la list de usuarios y su configuration regional disponible mediante NSBundle:

 + (NSArray *)prefernetworkingLocalizationsFromArray:(NSArray *)localizationsArray 

NSFormatter:

 + (NSString *)dateFormatFromTemplate:(NSString *)template options:(NSUInteger)opts locale:(NSLocale *)locale 

Debería darle una cadena de formatting localizado para la configuration regional especificada.

A continuación, puede usar setDateFormat para anular el formatting de date inicial para el formateador.