2012-08-29 11 views
37

UIBarButtonItem tienen identificadores como Cancelar, Listo y algunos otros. Se muestran como texto para el usuario. Si el usuario cambia de idioma, por ejemplo, el botón Cancelar se traducirá automáticamente. Y como desarrollador no necesita proporcionar cadena de localización para estos botones. Significa Cancelar, Listo y otras cadenas ya localizadas y se combina con el sistema operativo.¿Cómo obtener localizado Cancelar, Hecho y etc.?

¿Hay aquí una manera de obtener este tipo de cadenas programáticamente?

No deseo agregar cadenas adicionales a los archivos de localización. Y si es posible acceder, sería muy bueno.

+0

no puedes conseguir acceso a su cadena a través de la propiedad del título? – tiguero

+2

Puedo obtener el título del UIBarButtonItem si este botón se coloca en la interfaz de usuario. Pero quiero obtener estas traducciones sin utilizar el trabajo. – Ramis

+0

yourUIBarButtonItem.title le permite recuperar la cadena que se muestra, ¿eso es lo que quiere? – tiguero

Respuesta

21

He aquí una pequeña macro que he creado para que el sistema UIKit Cuerdas:

#define UIKitLocalizedString(key) [[NSBundle bundleWithIdentifier:@"com.apple.UIKit"] localizedStringForKey:key value:@"" table:nil] 

utilizar de esta manera:

UIKitLocalizedString(@"Search"); 
UIKitLocalizedString(@"Done"); 
UIKitLocalizedString(@"Cancel"); 
... 
+8

realiza una función normal sin macro-olor – gaussblurinc

+1

¿Hay alguna forma de obtener todas las claves? – kelin

+0

ahora no funciona – Vyacheslav

1

Parece que lo que estás preguntando es si Apple proporciona una forma de acceder a un diccionario de cadenas previamente traducidas. Creo que cualquier cosa provista por Apple para algo como esto estaría en sus Documentos: Internationalization Programming Topics

Para responder a su pregunta, no creo que proporcionen un diccionario/lista de traducciones conocidas. O bien, tendrá que definirlos en su archivo de recursos Localizable.strings o hacer lo que otros han indicado en los comentarios y extraer el título del UIBarButtonItem (iría con el archivo de recursos personalmente).

3

Aunque quizás no sea exactamente lo que estaba buscando, hay una aplicación comercial en Mac App Store llamada "System Strings" que afirma que proporciona una colección de más de 53000 cadenas localizadas estándar. Fue lanzado el 2 de noviembre de 2012. No estoy de ninguna manera afiliado con esta aplicación o el autor. La URL es https://itunes.apple.com/us/app/systemstrings/id570467776.

+0

Sí, no es lo que quería, pero se ve bien. Cerca del punto. – Ramis

9

Una forma (la verdad es cuestionable) de lograr esto fácilmente se utilice localizaciones marco de haces de Apple directamente:

Para ver lo que tienen que ofrecer, abrir el siguiente directorio a través del Buscador:

/Applications/Xcode/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator6.1.sdk/System/Library/Frameworks

Y en su caso, posteriormente abrirá ./UIKit.framework/English.lproj/Localizable.strings (en TextMate). Aquí puede ver una gran variedad de traducciones que Apple utiliza para cosas como "Imprimir", "Aceptar", "Activado", "Desactivado", etc. La verdadera magia es que hay alrededor de 35 traducciones de idiomas diferentes que puede copiar en su propios archivos Localizable.strings, de forma gratuita.

Si usted es increíblemente descarada y no les importa poner la estabilidad futura de la aplicación en cuestión, se puede omitir el conjunto "copiar en su propio Localizable.strings" proceso e ir directamente a la fuente de programación:

NSBundle *uiKitBundle = [NSBundle bundleWithIdentifier:@"com.apple.UIKit"]; 
NSString *onText = uiKitBundle ? [uiKitBundle localizedStringForKey:@"Yes" value:nil table:nil] : @"YES"; 
NSString *offText = uiKitBundle ? [uiKitBundle localizedStringForKey:@"No" value:nil table:nil] : @"NO"; 

Advertencia: de ninguna manera hacer yo recomiendo que en realidad se accede a estos recursos localizados mediante programación en una aplicación que tiene la intención de presentar a la App Store. Simplemente estoy ilustrando una implementación particular que he visto que aborda su pregunta original.

0

¿Por qué no utilizar la localización base con su guión gráfico? Lo localizará por ti.

+0

Necesitaba acceso a estos para algunas pruebas de integración KIF. –

-3

Usted podría utilizar

NSLocalizedString(@"Cancel", @"Cancel") 
Cuestiones relacionadas