Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
581 views
in Technique[技术] by (71.8m points)

ios - Combine Two String in different Language RTL & LTR

I have two text, one in Hebrew language and one in English.

In first text I have date that is in Hebrew.

    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    NSLocale *hebrew = [[NSLocale alloc] initWithLocaleIdentifier:@"he_IL"]; // Hebrew

    [dateFormatter setDateFormat:@"yyyy-MM-dd'T'hh:mm:ss.SSSZ"];

    NSDate *date = [dateFormatter dateFromString:model.startDate];

    NSLog(@"%@", date);

    [dateFormatter setDateFormat:@"EEEE,dd.MM.yyyy"];
    dateFormatter.locale = hebrew;
    NSString *strDate = [dateFormatter stringFromDate:date];

and start Date is : ??? ????,19.08.2016 in NString object strDate

On other hand I have text 07: 00-16: 00 in NSString object timeForRequest

My needed format is ??? ???, 15.01.2016 | 16:00 - 07:00

and when I try to do same with following code

[NSString stringWithFormat:@"%@ | %@",strDate,timeForRequest]

it shows me like this :??? ????,19.08.2016 | 07: 00-16: 00

Observe the time is not correct, please help me to come out from this wired situation.

Thanks in advance.

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

I'm pretty sure that the problem here is that the hebrew date in strDate is carrying unicode characters that make it display right-to-left. That's causing chaos when combined with the 'ordinary' left-to-right string in timeForResponse. The date formatter is picking that up from the hebrew locale.

Try this:

  1. Change your date format string to

[dateFormatter setDateFormat:@"dd.MM.yyyy,EEEE"];

  1. Change your string with format to

NSString *result = [NSString stringWithFormat:@"u200E%@ | %@", timeForRequest, strDate];

The 0x200E unicode character is invisible but puts the rendering back into left-to-right mode.

After the above, this is the output that I'm getting:

07: 00-16: 00 | 17.08.2016,??? ?????


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...