Nano Hash - криптовалюты, майнинг, программирование

Как локализовать NSString в формате

Как локализовать NSString с помощью format.

int value = 20;

NSString *str = @"hello";   

textLabel.text = [NSString stringWithFormat:@"%d %@", value, str];

Я попытался

textLabel.text = [NSString stringWithFormat:NSLocalizedString(@"%d %@", @"%d %@"), value, str];

но не работал. Любая помощь приветствуется.


  • насколько я понимаю, локализованные строки предопределены и не могут быть изменены, если у вас нет служебного вызова, который возвращает локализованные строки для данной строки. 10.01.2018
  • Прочтите параграф Форматирование строковых ресурсов в Руководство по программированию ресурсов 10.01.2018
  • Вы пытаетесь локализовать строку форматирования, вашу строку (@"hello") или и то, и другое? Отредактируйте свой вопрос, чтобы было ясно, что означает «не сработало». Это поможет людям помочь вам. 10.01.2018
  • Я хочу преобразовать как текст, так и целое число @CRD 10.01.2018
  • Как вы хотите преобразовать целое число? Вы хотите, чтобы 20 hello можно было перевести, скажем, на испанский, veinte hola? В настоящее время вы пытаетесь локализовать только строку формата, вы не пытаетесь локализовать str или value. Отредактируйте свой вопрос и укажите, на какой результат вы надеялись, что у вас есть в вашем файле строк и т. д., и это поможет людям помочь вам. 10.01.2018
  • Определить не получилось. 10.01.2018

Ответы:


1

Сама ваша локализованная строка должна быть шаблоном формата:

"ValueAndStringFMT" = "Value %1$d and string %2$@";

И в вашем коде:

textLabel.text = [NSString 
    stringWithFormat:NSLocalizedString(@"ValueAndStringFMT"),
    value, str
];

Почему %1$d, а не только %d? Таким образом, вы можете изменить порядок. Например. на каком-то языке вы можете поменять порядок местами:

"ValueAndStringFMT" = "Cadena %2$@ y valor %1$d";

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

"ValueAndStringFMT" = "Value [[VALUE]] and string [[STRING]]";

И в вашем коде:

NSString * string = NSLocalizedString(@"ValueAndStringFMT");
string = [string stringByReplacingOccurrencesOfString:@"[[VALUE]]" 
    withString:@(value).stringValue
];
string = [string stringByReplacingOccurrencesOfString:@"[[STRING]]" 
    withString:str
];
textLabel.text = string;

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

Если вам нужно локализовать одну из переменных формата, вам нужно сделать это сначала на собственном шаге:

NSString * str = NSLocalizedString(@"hello");
10.01.2018
  • Ничего себе понял. Спасибо. 10.01.2018
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

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

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..