2009-06-01 9 views
10

Quiero localizar cadenas en mi aplicación de iPhone para en_GB y otros sub idiomas 'en', pero XCode y el iphone se niegan a permitir que esto suceda. He creado una localización de "Localizable.strings" para en_GB y en_US (probé tanto guiones como guiones bajos) para fines de prueba, pero simplemente no son reconocidos. El único código de idioma que funciona es simplemente "en" (se muestra como "Inglés" en XCode).iPhone en_ * localización de sublanguage

No puedo creer que esto no sea posible, entonces ¿qué estoy haciendo mal? También espero obtener el típico comportamiento de "cascada" donde si una cadena no se encuentra en el sub-idioma, p. Ej. "en_GB" luego debería tomarse de "en" si es posible. ¿Ayuda?

Respuesta

6

Cuando elige 'Inglés' en la lista de idiomas en las preferencias del iPhone, eso significa realmente el idioma 'en_US'.

De modo que hasta que apple actualice su software con sub idiomas adicionales como "English (British)" etc. nos quedará con ir por la configuración regional y cargar cadenas manualmente desde otra tabla string.

Sin embargo, el idioma y la configuración regional están separados por un motivo: un usuario español en el Reino Unido puede querer fechas/horas formateadas de acuerdo con las costumbres locales, pero cadenas de programas en su lengua materna. Sería incorrecto detectar la configuración regional (UK) y, por lo tanto, mostrar las cadenas del Reino Unido.

Así que básicamente no hay forma de hacer esto actualmente.

+0

¡Buena respuesta! Sin embargo, esto plantea la pregunta: ¿para qué sirve el formato de Configuración de Región, si no es para localizar cadenas? –

+0

La configuración de región se utiliza para formatear fechas, monedas, para elegir qué caracteres separan los dígitos fraccionarios en un número, etc. –

4

Lo que está haciendo debe funcionar de acuerdo con los documentos. Pero parece que la implementación de iPhoneOS está en desacuerdo con la documentación. De acuerdo con Radar 6158876, no hay soporte para el idioma en_GB, solo la configuración regional (formatos de fecha y similares).

1

Encontré el mismo problema.

Por cierto, si nos fijamos en los Ajustes del iPhone -> General -> menú internacional, se hace la distinción entre el lenguaje y la región bastante claro:

Idiomas: -Inglés
Formato

Región:
-Estados Unidos
-Reino Unido

la arquitectura de localización sólo aparece a prestar atención a la l anguage, no la región.

Estoy tentado de plantear una solicitud de mejora para esto con Apple, como IMO es razonable que un usuario quiera usar inglés británico (para el texto) mientras se encuentra en los Estados Unidos (donde, por ejemplo, números de teléfono debe estar en formato de EE. UU.).

1

Cree un recurso de cadena por separado, digamos UKLocalization.strings, y cree localizaciones para cada uno de los idiomas admitidos. Para todas las localizaciones que no sean en, este archivo está vacío. Para en, contiene solo las cadenas que tienen deletreo en_GB único.

A continuación, crea un reemplazo para NSLocalizationString que primero verificará la tabla UKLocalization antes de volver a la tabla de localización estándar.

p. Ej.:

static NSString* _locTable = nil; 
void RTLocalizationInit() 
{ 
    _locTable = nil; 

    NSString* country = [[NSLocale currentLocale] objectForKey:NSLocaleCountryCode]; 
    if ([country isEqual:@"GB"]) 
    { 
     _locTable = @"UKLocalization"; 
    } 
} 

NSString* RTLocalizedString(NSString* key, NSString* ignored) 
{ 
    NSString* value = nil; 
    value = [[NSBundle mainBundle] localizedStringForKey:key value:nil table: _locTable]; 
    if (value == key) 
    { 
     value = NSLocalizedString(key, @""); 
    } 
    return value; 
} 
1

No estoy seguro de qué versión de IOS que se introdujo, pero iOS 7 definitivamente tiene un 'Inglés británico' preferencia de idioma que recogerá recursos del directorio en_GB.lproj. Los diversos hacks que flotan en la web no deberían ser necesarios a menos que busque un dialecto * más especializado.

* vea lo que hice allí;)

+0

¿Estás seguro de que esto funciona? Usé uno de los hacks: http://stackoverflow.com/questions/3308519/iphone-app-localization-english-problems. Pero ios 8.1 rompió ese truco. Por lo tanto, estoy tratando de implementar su solución. Mis localizaciones en_GB.lproj no se recogen. – Mike

+0

El problema es cuando el usuario está en Gran Bretaña pero (razonablemente) selecciona su idioma como "inglés" en lugar de "inglés británico". La aplicación se localiza para inglés estadounidense –