在不同的语言RTL和LTR中组合两个字符串

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在不同的语言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];

并且开始日期是:2016年8月19日星期五在NString对象strDate中

另一方面,我在NSString对象timeForRequest中有文本07:00-16:00

我需要的格式是星期一,2016年1月15日| 16:00至07:00

当我尝试用下面的代码做同样的事情

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

它告诉我这样:星期五,19.08.2016 | 07:00-16:00

观察时间不对,请帮我从这种有线情况出来。

提前致谢。

答案

我很确定这里的问题是strDate中的希伯来日期带有unicode字符,使其从右向左显示。当与timeForResponse中的'普通'从左到右的字符串组合时,这会引起混乱。日期格式化程序从希伯来语语言环境中选择它。

试试这个:

  1. 将日期格式字符串更改为

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

  1. 将格式的字符串更改为

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

0x200E unicode字符是不可见的,但会将渲染恢复为从左到右的模式。

在上面之后,这是我得到的输出:

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

另一答案

我只需要从Debug更改为Release并安装Release .exe,现在这两个服务都在运行并且没有任何问题

以上是关于在不同的语言RTL和LTR中组合两个字符串的主要内容,如果未能解决你的问题,请参考以下文章

LTR 到 RTL 在目标 c 中使用相同的 xib

使用 2 个不同的故事板,一个用于 LTR,一个用于 RTL(非自动布局)

React-native 支持 RTL 和 LTR,无需更改设备语言

RTL和LTR抽屉根据用户语言在它们之间进行导航切换

在 TextView 中使用区域设置 (ltr/rtl) 作为重力

动态更改引导网格方向( ltr 到 rtl 或反向)