Warm tip: This article is reproduced from serverfault.com, please click

iOS: Localise multi-line string literals

发布于 2018-07-23 12:03:57

Since a recent swift version, multi line string literals are available that allow to format the appearance of a multi line string easily.

I'm looking for a way, though, to localise such a string.

Here is an example of the text of a pre-configured mail, that users can send:

mailComposerVC.setMessageBody("""
                              Hi,

                               I would like to share the following feedback:

                              """,
                              isHTML: false)

It seems there is no way to properly transform this into the localisable .strings file.

As a workaround, I came up with the solution to individually localise each part of the message and use interpolation:

let localisedGreeting = NSLocalizedString("Hi", comment: "")
let localisedMessage = NSLocalizedString("I would like to share the following feedback: ", comment: "")
    mailComposerVC.setMessageBody("""
                                  \(localisedGreeting),

                                   \(localisedMessage)

                                  """,
                                  isHTML: false)

The .strings file looks like this:

"Hi" = "Hallo";
"I would like to share the following feedback: " = "ich möchte folgendes Feedback geben: ";

Is there a better/more concise way to do this?

Questioner
nontomatic
Viewed
0
Martin R 2018-07-23 20:30:15

Both keys and values in the Localizable.strings file can be multi-line. With

"Hi,

 I would like to share the following feedback:
" = "Hallo,

 ich möchte folgendes Feedback geben:
";

the call

let localizedMessage = NSLocalizedString("""
                      Hi,

                       I would like to share the following feedback:

                      """, comment: "")

expands as intended.

This might however not work with localization tools, and also does not display with the correct syntax coloring in the Localizable.strings, which might be confusing.

I would use a short (single-line) key instead, and localize that for all languages (including the default language english).