2010-11-03 9 views
5

¿Cómo puedo hacer que UIBarbuttonItem sea localizable?UIBarButtonSystemItem localizable

Mi aplicación:

 
UIBarButtonItem   *cancelButton = [[UIBarButtonItem alloc] 
              initWithBarButtonSystemItem:UIBarButtonSystemItemDone 
              target:self 
              action:@selector(cancel)]; 

Originalmente pensé que es automático, porque parece fácil de hacer que sea así, pero parece que no.

EDIT1: Official Apple dox dice que los botones de cancelar, terminar, editar, guardar están localizados, pero no está seguro de cómo hacerlo.

Respuesta

1

No estoy seguro Entiendo su pregunta correctamente, pero los elementos del botón de la barra estándar (sistema) están localizados y, por lo tanto, aparecen automáticamente en el idioma seleccionado por el usuario. Hay excepciones notables como UISwitch que muestra 0/1 en lugar de ON/OFF. ¿Con qué idioma estás teniendo problemas?

Dicho esto, siempre puede usar elementos de botón de barra personalizados en lugar de los del sistema y proporcionar las traducciones necesarias usted mismo. Es exagerado en la mayoría de los casos.

+0

Gracias por la entrada Costique, uso dos dispositivos, uno con la configuración de formato Rep. Checa y el eslovaco, pero ambos me han mostrado siempre "Cancelar" en lugar de inspeccionar "Zrusit". No quiero exagerar, no es agradable. Tal vez me olvidé de algo para establecer? – Vanya

+0

El idioma de la interfaz de usuario se establece en Configuración-> General-> Internacional-> Idioma. Region Format se usa para establecer un estilo separado para NSNumberFormatter y NSDateFormatter. Si con el idioma de la interfaz de usuario configurado en eslovaco, el botón Cancelar sigue indicando Cancelar, entonces sí, solo use UIBarButtonItems personalizados. – Costique

+0

Sí, por supuesto, se ha establecido para el idioma eslovaco como predeterminado y no he cambiado eso, es por eso que me pregunto cómo puedo hacerlo. Mi primer pensamiento fue que puede estar relacionado con el formato, pero no parece ser así. – Vanya

4

Bien, creo que sé lo que está pasando.

UIKit decide en qué idioma mostrar las cadenas, según el valor de [[NSBundle mainBundle] preferredLocalizations]. La idea detrás de esto es usar recursos traducidos siempre que sea posible, volviendo al inglés de otra manera. Por ejemplo, si no proporciona la traducción de su aplicación en finlandés y se selecciona el finlandés en Configuración-> General-> Internacional-> Idioma, su aplicación estará en inglés. Puede ser un poco más complicado (UIKit puede revisar toda la lista de idiomas en el orden mostrado en Settings.app, tratando de encontrar el primer idioma para el que tiene traducciones), pero el punto es válido.

Lo anterior puede ser demasiado obvio como para omitir un matiz crucial. El idioma determinado por el algoritmo anterior se utiliza para la interfaz de usuario completa de la aplicación. Por ejemplo, si el paquete de la aplicación no contiene sk.lproj, no se mostrará nada en eslovaco. De hecho, tiene sentido porque de lo contrario algunas partes de la interfaz de usuario estarían en eslovaco, otras partes, en inglés.

Abra el paquete de la aplicación compilada para ver qué carpetas * .lproj están allí. El mismo conjunto, ordenado según las preferencias del usuario, será devuelto por [[NSBundle mainBundle] preferredLocalizations]. Todas las cadenas localizables, incluidos los elementos del botón de la barra del sistema, se mostrarán en uno de esos idiomas. Si no admite, por ejemplo, ruso, toda la interfaz de usuario aparecerá en otro idioma, incluso si se selecciona ruso en Settings.app.

Si este es el caso de su aplicación en efecto, hay dos cosas bien y un mal que hay que hacer:

  • derecha: proporcionar una traducción eslovaca para todos y cada cadena que se muestra en su aplicación, traducir cualquier texto -contiene puntas para eslovaco también;
  • derecho: ignore completamente el eslovaco si no puede (o no necesita) dar soporte;
  • mal: seleccione cualquier archivo de cadenas o cualquier punta, abra el inspector de Xcode, haga clic en "Añadir localización ..." (si el botón está desactivado, primero haga clic en "Hacer archivo localizable"), escriba "sk", haga clic en "Agregar" y compile el proyecto. Esto hará que UIKit piense que su aplicación se traduce al eslovaco, y los elementos del botón de la barra del sistema aparecerán automáticamente en eslovaco cuando se seleccione en Settings.app.

Si ve un comportamiento diferente, puede haber algún problema con la aplicación project/build/built.Por ejemplo, noté que cuando hace un archivo localizado, su copia no localizada no se elimina del paquete de aplicaciones previamente creado.

4

Bump, pero creo problema Vanya ’ s podría ser la región “ localización desarrollo nativo ”/CFBundleDevelopmentRegion entrada en Info.plist. Si esto está configurado en inglés y no hay localizaciones explícitamente disponibles, como explica Costique, todas las cadenas del sistema no estarán localizadas. Pero, configúralo para sk y - violà.

+0

Esto lo hizo por mí. La IU de Xcode no permite cambiar la entrada 'Proyecto/Información/Localización/Inglés - Lenguaje de desarrollo 'a otro idioma. Ahora "Hecho", "Cancelar", etc. aparecen en japonés, que es el idioma preferido de mi aplicación. –

0

Mi aplicación en Swift:

let doneButton = UIBarButtonItem(barButtonSystemItem: .done, target: self, action: #selector(doneButtonTapped(button:))) 

Esto utiliza el idioma por defecto del sistema para el texto "Hecho".

Cuestiones relacionadas