7

Is there a way bold some words inside the Localizable file like so?

"Pending network connection" = "<b>Pending</b> network connection";

I have this string inside and i want to emphasis only certen words:

 "camSave" = "To complete onboarding:\n1. Tap Save and disconnect to disconnect from the camera.\n2. Connect to the internet.\n3. Log in to Cloud.";

Btw i want to use it inside alert

ironRoei
  • 2,049
  • 24
  • 45

2 Answers2

5

You can achieve this like following:

  1. Break the string into template and parameter format.
  2. Provide individual localization.
  3. Form the complete string from the template and parameter.
  4. Find the parameter's within the complete string and apply formats using NSAttributedString.

So in your case, in the Localizable.string file will look like following

"%@ network connection" = "%@ network connection";
"Pending" = "Pending";

Now form the complete string which is localized

let complete = String(format: NSLocalizedString("%@ network connection", ""), NSLocalizedString("Pending", ""))

Then find the Range of the parameterized string within the complete string.

let range = complete.range(of: NSLocalizedString("Pending", ""))

Now apply whatever attributes you need to apply in this range by forming NSAttributedString.

Ratul Sharker
  • 7,484
  • 4
  • 35
  • 44
3

You can actually use HTML tags with NSAttributedString. This is what I used:

static func convertFromHTMLString(_ input: String?) -> NSAttributedString? {
    guard let input = input else { return nil }

    guard let data = input.data(using: String.Encoding.unicode, allowLossyConversion: true) else { return nil  }
    return try? NSAttributedString(data: data, options: [NSAttributedString.DocumentReadingOptionKey.documentType : NSAttributedString.DocumentType.html], documentAttributes: nil)
}

So I convert an input string to raw data using UTF8 format. Then I use a constructor of attributed string with data using appropriate flags NSAttributedString.DocumentReadingOptionKey.documentType : NSAttributedString.DocumentType.html.

Matic Oblak
  • 16,318
  • 3
  • 24
  • 43
  • How do you use it? i want to implement it inside ui alert title – ironRoei Feb 11 '19 at 13:07
  • @ironRoei I don't think native alert views support this. You will have to create a custom alert view to do this. After that I assume you will use a label in it for title so `label.attributedText = convertFromHTMLString(myLocalizedString)`. – Matic Oblak Feb 11 '19 at 13:23