8

iOS application, we're to display news, coming from server. UIlabel is used

  • Everything is perfect when he sentence is in a single language only with no regard to layout (we're switching layout RTL to LTR for different languages, including Arabic, Hebrew)
  • When inside LTR language we have RTL words, they break the sentence structure (see the picture, BTN must be in the beginning of the line, but it jumped to the end) English words inside RTL language Any idea how to solve this? Thanks in advance :)
Alexey Abraham
  • 379
  • 2
  • 13

5 Answers5

13

Apple are using "Unicode Bidirectional Algorithm" to present text. If the first character in a string is LTR the algorithm treat the presentation of the rest of the string as LTR. If you know in advance the language of the string RTL you can use the unicode \u200F and \u202c to force the RTL alignment.

Objective-C

[NSString stringWithFormat:@"\u200F%@\u202c", @"your string with RTL content"]

[NSString stringWithFormat:@"\u200E%@\u202c", @"your string with LTR content"]

Swift

String(format: "\u200F%@\u202c", "your string with RTL content")

String(format: "\u200E%@\u202c", "your string with LTR content")
Pichirichi
  • 1,440
  • 11
  • 15
  • 2
    This seemed to work for me, the relevant documentation from Apple around this can be found here: https://developer.apple.com/library/archive/documentation/MacOSX/Conceptual/BPInternational/SupportingRight-To-LeftLanguages/SupportingRight-To-LeftLanguages.html – jonhurlock Apr 12 '19 at 12:43
4

Here is @Pichirichi solution for swift 5.2 :

"\u{200F}\("your string with RTL content")\u{202c}"

"u200E\("your string with LTR content")\u{202c}"
Ali Pishvaee
  • 303
  • 5
  • 7
3

Swift 5:

extension String {
    
    func forceUnicodeRTL() -> String {
        return "\u{200F}\(self)\u{200E}"
    }
}
Farshid roohi
  • 722
  • 9
  • 23
2
  "arabic text \u200E english text \u200F arabic text \u200E english text"

Solved the issue

Alexey Abraham
  • 379
  • 2
  • 13
0

Some info from here is helpful:

[[self label] setTextAlignment:NSTextAlignmentNatural];

AutoLayout + RTL + UILabel text alignment

But sometimes it still not working as expected

Community
  • 1
  • 1
Alexey Abraham
  • 379
  • 2
  • 13