2011-12-06 17 views
6

En una aplicación, solo deseo admitir el idioma alemán. Esto está muy bien con todos los textos que yo defino como, pero no puede cambiar los textos mostrados por las vistas que ofrece el sistema, como el botón de cancelación de un UISearchBar:Uso de un idioma diferente para las vistas del sistema que el idioma actual del dispositivo

UISearchBar with English localization

Si el idioma del dispositivo es establecido en alemán, el botón cancelar muestra "Abbrechen" correctamente. Sin embargo, si configuro el idioma del dispositivo en inglés (o en cualquier otro idioma), el botón muestra "Cancelar", lo que es incorrecto ya que todo en la aplicación está en alemán, por lo que también quiero tener este botón en alemán. ¿Es posible hacer esto? ¿Qué hago mal?

  • Solo tengo una carpeta de.lproj y no tengo una carpeta en.lproj. Tengo InfoPlist.strings y mis principales archivos de punta dentro de la carpeta de.lproj.
  • El plumín para la vista de contenido UIViewController cuya propiedad searchDisplayController utilizo para acceder a la barra de búsqueda también está dentro de la carpeta de.lproj.
  • yo he dado la región de desarrollo dentro de la .pbxproj a alemán:

    developmentRegion = de; 
    
  • yo he dado la "región de desarrollo nativo de Localización" a "de" dentro del archivo Info.plist:

    <key>CFBundleDevelopmentRegion</key> 
    <string>de</string> 
    

Respuesta

0

Puede cambiar fácilmente el marcador de posición de UISearchBar configurando su propiedad placeholder.

Sin embargo, no hay ganchos fáciles para acceder al botón Cancelar.

una forma que puede acceder el botón de cancelar la barra de búsqueda está pasando a través de sus subvistas:

UIButton *cancelButton = nil; 

    for(UIView *subView in [searchBar subviews]) 
    { 
     if([subView isKindOfClass:[UIButton class]]) 
     { 
      cancelButton = (UIButton*)subView; 
      [cancelButton setText:@"Abbrechen"]; 
     } 
    } 
+0

Gracias. Estaba al tanto de esta solución, pero solo es una solución "local" para la barra de búsqueda y si su aplicación usa más vistas provistas por el sistema, debe "piratearlas" una por una. Estoy buscando la forma correcta de obligar al sistema a utilizar una localización particular para todos los elementos. –

0

he logrado resolver esto mediante la codificación duro el idioma de la aplicación de la función principal del programa, según lo sugerido por this answer .

int main(int argc, char *argv[]) 
{ 
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; 

    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
    [defaults setObject:[NSArray arrayWithObject:@"de_DE"] forKey:@"AppleLanguages"]; 

    int retVal = UIApplicationMain(argc, argv, nil, nil); 
    [pool release]; 
    return retVal; 
} 

Esto, sin embargo, solo resuelve el problema si solo tiene una localización.

0

Su solución es suficiente, no necesita meterse con AppleLanguages.

Si ha seguido todos los pasos que menciona en su pregunta, entonces probablemente el problema fue que ya tenía en.lproj en su dispositivo (o en el simulador) de versiones anteriores. Lo que debe hacer es eliminar la aplicación del dispositivo (o simulador), ejecutar Product > Clean en Xcode e instalarlo de nuevo.

Esos son los pasos que trabajó para mí:

  • Sólo tienen una carpeta de.lproj en el proyecto (sin en.lproj).
  • Conjunto developmentRegion = de; en project.pbxproj.
  • Conjunto knownRegions = (de,); en project.pbxproj.
  • Establezca "Localización región de desarrollo nativo" a "de".
Cuestiones relacionadas