Wie mache ich Apple Cocoa GUI-Steuerelemente nicht automatisch "flip" Zeilen, die von rechts nach links Text enthalten (wie Arabisch)?Wie verhindert man, dass die Textlayout-Engine von OS X Zeilen mit Text von rechts nach links automatisch "umkehrt"?
Siehe, mein Testfall, bei dem ich plane die Sterne zu halten (**
) am Anfang der Linien, wenn sie auf dem Bildschirm gedruckt:
#import <Foundation/Foundation.h>
int main(int argc, char *argv[])
{
NSAutoreleasePool *autoReleasePool = [[NSAutoreleasePool alloc] init];
NSString *str1 = @"** english first then arabic تجر\n";
NSString *str2 = @"** تجر arabic first then english\n";
[str1 writeToFile:@"/dev/stdout" atomically:NO encoding:NSUTF8StringEncoding error:NULL];
[str2 writeToFile:@"/dev/stdout" atomically:NO encoding:NSUTF8StringEncoding error:NULL];
[autoReleasePool release];
return 0;
}
Wenn ich laufen diese in Terminal.app erhalte ich:
$ gcc -framework Foundation test.m
$ ./a.out
** english first then arabic تجر
arabic first then english تجر **
In iTerm, obwohl die Linien "gekippt" werden nicht:
$ gcc -framework Foundation test.m
$ ./a.out
** english first then arabic تجر
** تجر arabic first then english
Basierend auf einer oberflächlichen Untersuchung des iTerm-Codes scheint es, als wäre dies auf iTerms "manuelle" Zeichen-nach-Zeichen-Verarbeitung der Ausgabe und Terminal.apps (angenommene) Verwendung von OS-nativen String-Layout-APIs zurückzuführen. Gibt es eine Möglichkeit zu verhindern, dass dieses "Flippage" auftritt, wenn beispielsweise NSTextView
verwendet wird, um diese Arten von Strings anzuzeigen? Ich konnte in Apples Dokumentation keine Antworten finden.
Ich benutze ein Englisch Mac OS 10.5.6 mit Englisch als die # 1 Sprache in der Liste unter Systemeinstellungen> International> Sprache.
Ha! Solch eine einfache Lösung - jetzt bin ich dumm, das zu verpassen. Danke vielmals! :) – hasseg