代码之家  ›  专栏  ›  技术社区  ›  hasseg

如何防止OSX文本布局引擎自动“翻转”具有从右向左文本的行?

  •  1
  • hasseg  · 技术社区  · 15 年前

    如何制作苹果的可可图形用户界面控件 自动“翻转”包含从右向左文本的行(如阿拉伯语)?

    看看我的测试用例,我打算保留星号( ** )在打印到屏幕上的行首:

    #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;
    }
    

    当我在terminal.app中运行时,我得到:

    $ gcc -framework Foundation test.m
    $ ./a.out
    ** english first then arabic تجر
    arabic first then english تجر **
    

    不过,在iTerm中,这些行不会被“翻转”:

    $ gcc -framework Foundation test.m
    $ ./a.out
    ** english first then arabic تجر
    ** تجر arabic first then english    
    

    基于对ITerm代码的粗略检查,这似乎是由于ITerm对输出和终端的“手动”字符处理造成的。是否有任何方法可以防止在使用时发生这种“翻页”,例如, NSTextView 要显示这些类型的字符串吗?我在苹果的文档中找不到任何答案。

    我正在运行一个英文Mac OS 10.5.6,其中英文是下表中的第一种语言 系统首选项国际语言 .

    1 回复  |  直到 15 年前
        1
  •  2
  •   Alnitak    15 年前

    你试过了吗?

    [nstextviewobj setBaseWritingDirection:NSWritingDirectionLeftToRight];
    

    此方法位于 NSText 父类。