Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

iOS - Emphasise with bold strings in Localizable.strings

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

like image 544
ironRoei Avatar asked Feb 11 '19 12:02

ironRoei


People also ask

How do I bold text in a string in Swift?

Usage: let label = UILabel() label. attributedText = NSMutableAttributedString() . bold("Address: ") .

What are localizable strings?

A localized string can have different values depending on the language in which the project is being build. There are two categories of localized strings: the strings included in the installation package's UI, common to every MSI file.

How do I localize a string in Swift?

string file, select it and on the File Inspector (right menu) select “Localize”. Select your the new language you added and click on “Finish”. If you select the file again you should see something similar to the first image below (be sure to select both the supported languages).


2 Answers

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.

like image 132
Matic Oblak Avatar answered Oct 03 '22 23:10

Matic Oblak


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.

like image 29
Ratul Sharker Avatar answered Oct 03 '22 23:10

Ratul Sharker