Объединить текст на двух языках 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. Форматировщик даты берет это из еврейского языка.

Попробуй это:

  1. Измените строку формата даты на

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

  1. Измените строку с форматом на

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

Unicode-символ 0x200E невидим, но переводит рендеринг обратно в режим слева направо.

После вышесказанного, это вывод, который я получаю:

07: 00-16: 00 | 17.08.2016,יום רביעי

Мне просто нужно было перейти с Debug на Release и установить Release .exe, теперь обе службы работают и работают без проблем.

Другие вопросы по тегам