Другой шрифт для параметров в NSLocalizedString - PullRequest
0 голосов
/ 27 января 2019

Я хочу дать метке текст с несколькими шрифтами.Это может быть достигнуто путем создания NSMutableAttributedString.Однако я не уверен, как мне отформатировать следующий случай:

String(format: NSLocalizedString("%@ has replied in '%@'", comment: ""), username, conversationTitle)

Я хочу дать имя пользователя и заголовок разговора отдельным шрифтом.Я хочу сделать это менее навязчивым способом.Что я подразумеваю под этим:

  • Я не хочу выяснять username позже в строке, используя подстроку.Это вызывает проблемы, когда conversationTitle совпадает с username, или conversationTitle находится в username и т. Д. И т. Д.
  • Я не хочу создавать строку,как показано здесь: https://stackoverflow.com/a/37992022/7715250. Это просто плохо при создании NSLocalizedString's, я думаю, что переводчикам будет плохо, когда строки создаются таким образом.

Такие вопросы, как: Выделение текста жирным шрифтом с использованием приписанной строки в swift , Существуют ли подходы для использования приписанных строк в сочетании с локализацией? и другие в основном строковые литералы без NSLocalizedString или NSLocalizedString с параметрами.

1 Ответ

0 голосов
/ 27 января 2019

Во-первых, вы должны иметь в своих .strings гораздо более общий и читаемый ключ, что-то вроде:

"_REPLIED_IN_" = "%@ has replied in %@";

Не путайте ключи и значения, как вы это делаете в своем примере. Кроме того, позже будет легче увидеть, когда в вашем коде нет жестко закодированной строки.

Теперь есть проблема, потому что в английском это может быть в таком порядке, но не обязательно в других языках.

Так что вместо:

"_REPLIED_IN_" = "%1$@ has replied in %$2@";

Теперь я буду использовать пример, выделенный жирным шрифтом, потому что это проще, но вы можете использовать некоторые пользовательские теги, чтобы сообщить вам, что он должен быть выделен жирным шрифтом, например HTML, MarkDown и т. Д.

В HTML:

"_REPLIED_IN_" = "<b>%1$@</b> has replied in <b>%$2@</b>";

Вам нужно разобрать его в NSAttributedString:

let translation = String(format: NSLocalizedString(format: "_REPLIED_IN_", comment: nil), userName, conversationTitle)
let attributedText = NSAttributedString.someMethodThatParseYourTags(translation)

Вы сами выбираете самый простой формат тега), в соответствии с вашими потребностями: это легко понять переводчикам и легко разобрать (у CocoaTouch уже есть анализатор HTML и т. Д.).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...