multi localize localizable language i18n app iphone localization core-graphics

iphone - localize - swift string localization



Cómo mostrar acentos internacionales con gráficos de cuarzo/núcleo en iPhone (2)

He localizado una aplicación para el iPhone. No es de extrañar, la localización incluye algunos acentos:

"Tarjetas táctiles para seleccionar. Luego toque ''Pujar''". = "Touchez les cartes pour les sélectionner, puis touchez ''Miser''.";

Funcionan bien en cosas de alto nivel, como cuando pongo el texto en una tabla, pero cuando intento escribirlos en una UIView a mano, los acentos se destrozan:

Estoy usando kCGEncodingMacRoman y UTF8, los cuales deberían ser compatibles con los acentos, creo, pero claramente me falta algo:

CGContextSelectFont(ctx,fontName,thisWriting.fontSize,kCGEncodingMacRoman); CGContextShowTextAtPoint(ctx, thisWriting.center.x - floor(thisTextSize.width/2), yThusFar, [thisText UTF8String], [thisText length]);

La fuente es una variante de ArialMT. thisText es solo un NSString.


Quartz proporciona una interfaz limitada de bajo nivel para dibujar texto. Para obtener información sobre funciones de dibujo de texto, consulte CGContext Reference. Para obtener soporte completo de Unicode y diseño de texto, use los servicios proporcionados por Core Text o ATSUI.


Para ampliar lo que dijo sorin: Quartz / Core Graphics no son compatibles con el texto Unicode, que incluye los acentos que necesita para idiomas extranjeros. Tradicionalmente ha habido una serie de formas alternativas de resolver esto, pero actualmente la mejor respuesta es utilizar Core Text, que puede escribir directamente en un contexto gráfico, como lo estaba haciendo aquí.

El elemento principal en Core Text es la clase NSAttributedString o NSMutableAttributed String.

Aquí hay un código similar al que tuve para Core Text:

CTLineRef thisLine = CTLineCreateWithAttributedString((CFAttributedStringRef)thisAText); CGContextSetTextPosition(ctx, self.center.x - floor(thisTextSize.width/2), yThusFar); CTLineDraw(thisLine, ctx);

La fuente ya está cuidada, porque es parte de esa NSAttributedString (o CFAttributedStringRef, que es un puente equivalente sin cargo).

Este es el resultado: