Объединить текст на двух языках RTL и LTR
У меня есть два текста, один на иврите и один на английском.
В первом тексте у меня дата на иврите.
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];
и дата начала: יום שישי,19.08.2016 в NString объект strDate
С другой стороны, у меня есть текст 07: 00-16: 00 в NSString объект timeForRequest
Мой необходимый формат - יום שני, 15.01.2016 | 16:00 - 07:00
и когда я пытаюсь сделать то же самое с помощью следующего кода
[NSString stringWithFormat:@"%@ | %@",strDate,timeForRequest]
это показывает мне так: יום שישי, 19.08.2016 | 07: 00-16: 00
Обратите внимание, что время не правильное, пожалуйста, помогите мне выйти из этой проводной ситуации.
Заранее спасибо.
2 ответа
Я почти уверен, что проблема в том, что еврейская дата в strDate содержит символы юникода, которые отображают справа налево. Это вызывает хаос в сочетании с "обычной" строкой слева направо в timeForResponse. Форматировщик даты берет это из еврейского языка.
Попробуй это:
- Измените строку формата даты на
[dateFormatter setDateFormat:@"dd.MM.yyyy,EEEE"];
- Измените строку с форматом на
NSString *result = [NSString stringWithFormat:@"\u200E%@ | %@", timeForRequest, strDate];
Unicode-символ 0x200E невидим, но переводит рендеринг обратно в режим слева направо.
После вышесказанного, это вывод, который я получаю:
07: 00-16: 00 | 17.08.2016,יום רביעי
Мне просто нужно было перейти с Debug на Release и установить Release .exe, теперь обе службы работают и работают без проблем.