2012-08-02 7 views
9

Actualmente tengo un semi-automated way para localizar mis vistas. Sin embargo, hoy encontré una sección interesante en IB, que parece sugerir que puedo localizar mis puntos de vista desde Interface Builder.Localizar una vista dentro de un guión gráfico utilizando "Atributos de tiempo de ejecución definidos por el usuario"

Por lo tanto, en IB puede definir los atributos de tiempo de ejecución para un objeto seleccionado en el Inspector de identidad. Así que para mi UILabel puedo configurar el text keypath de mi etiqueta en el String Hello World.

Sin embargo, cuando elijo Type = Localized String y luego el nombre de una clave en mi Localized.strings no obtengo una cadena traducida sino el valor (de ahí la clave) que ingresé en IB.

No entiendo cómo se supone que funciona este mecanismo. Me gustaría amor para poder traducir mis puntos de vista de esta manera, alguna idea?

+1

Estoy exactamente en el mismo punto. ¿Has encontrado algo sobre esto? –

Respuesta

4

Los "atributos de tiempo de ejecución definidos por el usuario" están poco documentados. Lo que puedo recordar de algunos libros que leí es que UDRA se implementó por primera vez para la programación de MacOSX, por lo que el Tipo "Cadena Localizada" podría ser una característica que no está completamente soportada por ahora en iOS.

Lo curioso es que está traduciendo las cuerdas en las vistas previas del guión gráfico (xCode 4.5.1), pero más adelante en la aplicación compilada de iOS, solo está inyectando la cadena de teclas.

Una solución en la que estoy pensando ahora, es hacer una pequeña clase de ayuda, es decir, verificar las cadenas de título/texto de viewDidLoad para una palabra clave como "clave", p. "XYControllerTitleKey", y luego haga NSLocalizedString-Method en eso.

+1

Votación descendente porque la respuesta no es precisa (al menos en la versión actual de Xcode): el tipo "Cadena localizada" significa que el atributo de tiempo de ejecución participará en el proceso de localización, en contraste con el uso de un tipo simple "Cadena". Puede verificar esto si genera el archivo de cadenas del guión gráfico: si usa "Cadena", el valor no se incluirá en el archivo de cadenas generado; si usa "Cadena Localizada" será. –

+0

Como mencioné en mi otro comentario: Las herramientas para el proceso de localización se encargan de UDRA, sin embargo, el tiempo de ejecución de iOS no lo hace. El valor para UDRA no se toma del archivo .strings. –

1

Para mí, el uso de iOS 6, si se generan las cuerdas de su base localizada guión gráfico (por tener XCode generar ellos o utilizando el ibtool --generate-strings-file obtendrá cadenas generadas automáticamente que se ven así (debe ir en MainStoryBoard.strings, por ejemplo) :

/* Class = "IBUITextField"; b4a-O4-bNZ.ibExternalUserDefinedRuntimeAttributesLocalizableStrings[0] = "Event Name"; ObjectID = "b4a-O4-bNZ"; */ 
"b4a-O4-bNZ.ibExternalUserDefinedRuntimeAttributesLocalizableStrings[0]" = "Event Name"; 

por desgracia, que sería bueno para ellos han identificado por la Ruta de la clave, pero al menos usted tiene la ubicación en sus cadenas definidas por el usuario deben ser localizados

6

el propósito de la "localizada. El tipo "String" es para permitirle definir un valor de atributo de tiempo de ejecución que participará en el lo proceso de calibración (usando localización base). Esto es útil si, por ejemplo, define un control personalizado, lo incluye en el guión gráfico y desea asignar una cadena localizable a una de sus propiedades. Sin embargo, esto solo funciona en Mac OS, no en iOS.

Puede confirmar fácilmente esto realizando el siguiente experimento: coloque un UILabel/NSTextField en su guión gráfico y establezca la propiedad "text"/"stringValue" utilizando un atributo de tiempo de ejecución definido por el usuario. Si usa "Cadena" como el tipo del atributo y genera el archivo de cadenas correspondiente, no lo verá en ninguna parte del archivo. Por el contrario, si se cambia el tipo de "zonas localizadas cadena" y generar las cuerdas archivo encontrará una entrada como esta:

/* Class = "IBUILabel"; wij-Kq-q92.ibExternalUserDefinedRuntimeAttributesLocalizableStrings[0] = "Localized value"; ObjectID = "wij-Kq-q92"; */ 
"wij-Kq-q92.ibExternalUserDefinedRuntimeAttributesLocalizableStrings[0]" = "Localized value"; 

A continuación, se puede localizar este valor en el archivo de cadenas de idioma correspondiente. De nuevo, esto funciona en Mac OS, pero no en iOS.

+0

¿esto continúa funcionando solo en Mac OS y no en iOS en 2016? – helloB

+0

No lo sé, no lo he probado recientemente. De todos modos, puede verificarlo fácilmente utilizando el proceso descrito en la respuesta. Háganos saber si lo hace :) –

+0

Estaba a punto de volver a verificar que los atributos de tiempo de ejecución son una mejor opción aquí y funcionan con una anulación simple de setValue forKeyPath, así que esa es la opción con la que voy. esta respuesta me ayudó la mayor parte del camino: http://stackoverflow.com/questions/21870950/localized-string-with-interface-builder-user-defined-runtime-attributes – helloB

Cuestiones relacionadas