Home > Mobile >  SwiftUI Localize Raw Strings
SwiftUI Localize Raw Strings

Time:05-14

In SwiftUI how can i get my raw string localized?

Text(#"Hello \\\\"#)

Adding this to the localized file will not work.

"Hello \\\\" = "is not translated \\\\";

CodePudding user response:

"Raw strings" don't exist in the syntax of .strings files. See here:

some characters must be prefixed with a backslash before you can include them in the string. These characters include double quotation marks, the backslash character itself, and special control characters such as linefeed (\n) and carriage returns (\r).

So when you write:

"Hello \\\\" = "is not translated \\\\";

You are adding a localised string with the key Hello \\. On the other hand, your Swift string is a raw string, which means it represents the string Hello \\\\. These are different, so it is not translated.

To fix it, you should change the .strings file to escape each of the backslashes too, as it is a non-raw string:

"Hello \\\\\\\\" = "is not translated \\\\\\\\";

After that, you still need to convert the Swift raw string to a LocalizedStringKey for some reason:

Text(.init(#"Hello \\\\"#))

Note that the 8 slashes in the .strings file will become 2 slashes when displayed on the screen. This is because the 8 slashes first get reduced to 4 slashes due to the escaping syntax of the .strings file, then, since the Text.init(_:tableName:bundle:comment:) initialiser interprets the string as markdown, the 4 slashes becomes 2. Backslashes are escaped in markdown too.

CodePudding user response:

Here is possible variant

Text(verbatim: NSLocalizedString("Hello \\\\", comment: ""))

Tested with Xcode 13.3 / iOS 15.4

CodePudding user response:

// ...unless you explicitly convert it to a localized string key. Text(LocalizedStringKey(yourString))

CodePudding user response:

This is possible and worked for me without add every thing anther .

"Hello \\\\" = "Hello World"

I define "Hello \\\\" as key in localized file and "Hello World" as value that .

  • Related