2012-06-27 5 views
27

Tengo algunos problemas al hacer una aplicación danesa. (El idioma, no la pastelería)Localizando el menú Cortar | Copiar | Pegar en iOS

He configurado el CFBundleDevelopmentRegion para da_DK para danés en mi info.plist, pero la ventana emergente que aparece para el ingreso de texto todavía está en inglés, incluso en teléfonos con sistema operativo danés.

enter image description here

¿Cómo, en nombre de Jobs puedo cambiar esto?

El dispositivo de prueba es un iPhone 4S sin jailbreak que ejecuta iOS 5.1 con danés como su configuración de iOS, y una cuenta danesa de iTunes asociada.

No uso .xibs para diseños. todas las interfaces están programadas como viewcontrollers.

+0

debe cambiar cuando cambie el teléfono, este es un caso curioso –

+0

Realmente. Ha reiniciado el dispositivo varias veces, y como puede ver desde el teclado, el idioma del iPhone es danés ... Curioso ... –

+0

¡Hehe! ¡Esto es divertido! ¿Tal vez deberías presentar un informe de incidente a Apple sobre esto? – Neeku

Respuesta

33

En el árbol de archivos de Xcode (Project Navigator) seleccione su proyecto. en el panel de la derecha, seleccione su proyecto nuevamente. seleccione Información y agregue su idioma.

configure i18n


he creado un sample project, este es el resultado:

enter image description here

+0

Hola, +1 para conocer el método científico sobre esto, pero ¿podrías intentar incluir los archivos faltantes de .strings que faltan en los repositorios git? a InfoPlist.strings le falta alemán, turco y danés ... –

+0

Lo arreglé y agregué una llamada NSLocalizedString. Cambié el nombre de InfoPlist en Localizable.strings, el nombre predeterminado. No sé, por qué Xcode eligió otro nombre. – vikingosegundo

+0

Hizo el truco:] Gracias, Tak y gracias –

-1

Busque si su .xib está localizado (lo encontrará en el inspector en el panel derecho) si es así vaya a su Proyecto/Configuración de destino presione la tecla + -Signar y seleccione "Duplicar inglés a danés" o algo lo que significa lo mismo (no puedo verificar el artículo correcto en este momento)

Por cierto, se llama iPhone 4S.

+0

No uso .xibs para diseños. todas las interfaces están programadas como viewcontrollers. –

+0

¿Qué pasa con MainWindow.xib? –

+0

como dije, no estoy usando el constructor de interfaz. Estoy desarrollando programáticamente todos mis puntos de vista. –

2

Debe localizar su aplicación en danés para hacer que los elementos de la interfaz estándar aparecen en ese idioma. Esto es para evitar tener una IU con idiomas mixtos.

Si no usa xibs, generalmente haría esto agregando un archivo Localizable.strings a su proyecto. En el cuadro de diálogo "Agregar archivo" de Xcode, puede usar la plantilla "Archivo de cadenas" (en "Recursos") para esto.

para localizar realmente el archivo de cadenas, abra el inspector de archivos (1) y haga clic en el botón + en la sección "Localización". Finalizará con el archivo que se muestra como un grupo en el navegador del proyecto, con una entrada secundaria para cada idioma.

El archivo de cadenas tiene el formato:

"Label_Text" = "Smørrebrød"; 

(no olvide el punto y coma)

Para utilizar cadenas localizadas en su código, puede utilizar la macro NSLocalizedString así:

myLabel.text = NSLocalizedString(@"Label_Text", nil); 

(El segundo parámetro es para un comentario. Esto puede ser útil si usa la herramienta genstrings para extraer cadenas localizables de su código y dar r esulting file a un traductor profesional.)

Si utiliza las cadenas en inglés como claves, puede dejar la versión en inglés de Localizable.strings vacía (pero no la elimine).

Tener un archivo Localizable.strings en el idioma que el usuario ha seleccionado también hará que los elementos de IU estándar, como el menú de edición, el selector de fotografías, etc. aparezcan en ese idioma.

2

Si no puede hacerlo funcionar de la manera oficial, como lo proporciona @vikingosegundo, puede hacerlo con algo de ingeniería creativa (Creative como en, oh dios mío que es peligroso). Descubrí este método cuando accidentalmente eliminé [NSBundle localizedStringForKey:value:tableName:].

1) Añadir una categoría para NSBundle con los siguientes métodos:

#import <objc/runtime.h> 

+ (void) load { 
    Method original, swizzled; 

    original = class_getInstanceMethod(self, @selector(localizedStringForKey:value:table:)); 
    swizzled = class_getInstanceMethod(self, @selector(swizzled_localizedStringForKey:value:table:)); 
    method_exchangeImplementations(original, swizzled); 
} 

- (NSString*) swizzled_localizedStringForKey:(NSString *)key value:(NSString *)value table:(NSString *)tableName { 

    NSLog(@"Key: %@. Value: %@", key, value); 

    return [self swizzled_localizedStringForKey: key value:value table:tableName]; 
} 

2) Donde basta con acceder la clave/valor, que desea poner un if ([clave isEqualToString: xxx] bloque). Allí, desea capturar (al menos algunos de) los siguientes valores clave: Cortar, Copiar [Menú], Seleccionar, Seleccionar todo, Pegar, Eliminar [Menú], Reemplazar ..., Definir, Hablar, Pausa. Estos son los valores predeterminados que pueden aparecer allí.

3) Cuando haya capturado el valor, puede buscar en una tabla personalizada o utilizar valores codificados. Si busca en una tabla personalizada, asegúrese de tener un truco en su método swizzled para evitar el bucle infinito en su tabla personalizada.

NB: ¿Por qué necesitas swizzle? Porque esto anula todo el texto de Apple para su aplicación. Seguirá deseando los valores predeterminados para todas las demás cadenas, por lo que debe cambiar para obtener los valores predeterminados para las cadenas que no le interesan.

Buena suerte. Paul

2

Intente agregar/establecer el indicador "Los recursos traducidos pueden mezclarse" en Info.plist a YES.

2

Puede hacerlo directamente en la info.plist. Algo como esto:

<key>CFBundleDevelopmentRegion</key> 
<string>en</string> 
<key>CFBundleLocalizations</key> 
<array> 
    <string>en</string> 
    <string>de</string> 
    <string>es</string> 
    <string>ja</string> 
</array>  
Cuestiones relacionadas