Пара ключ-значение Localizable.strings

Я хочу локализовать "1 из 9", а 1 и 9 - это параметры int, мой код такой, как показано ниже.

context = [NSString stringWithFormat:NSLocalizedString(@"%d of %d", 
          "This text will be used to show page number on the screen"), 
          currentPageIndex + 1, pageCount];

И сгенерированные Localizable.strings выглядят так

/* This text will be used to show page number on the screen */
"%d of %d" = "%1$d of %2$d";

Я думаю, что слева от «=» находится ключ, а справа от «=» — значение, но я хочу, чтобы ключ выглядел как «show_page_number», не включая формат «% d», как я могу это сделать? ? Я пытаюсь заменить "%d из %d" на "show_page_number", но это не работает. Любой совет?


person wangshaoping    schedule 07.07.2017    source источник


Ответы (2)


NSLocalizedString() заменил ключ значением во время выполнения. Таким образом, вы можете использовать любую строку в качестве ключа, и во время выполнения она будет заменена на «%1$d из %2$d». Добавьте строку в локализуемый файл:

"show_page_number" = "%1$d of %2$d";

& в коде используйте этот ключ

context = [NSString stringWithFormat:NSLocalizedString(@"show_page_number", "This text will be used to show page number on the screen"), currentPageIndex + 1, pageCount];

Добавить файл localizable.string в проект xcode.

EDIT

person Ellen    schedule 07.07.2017
comment
Я пробовал это, но на экране будет отображаться show_page_number. - person wangshaoping; 10.07.2017
comment
Убедитесь, что вы добавили show_page_number = %1$d из %2$d в файлы Localizable.strings. Потому что я использую строки с форматом в разных местах кода, и он работает нормально. - person Ellen; 10.07.2017
comment
Интересно, куда вы помещаете локализуемый файл, есть ли какой-то конкретный путь, который мне нужно указать, чтобы iOS могла обнаружить строковый файл? - person wangshaoping; 10.07.2017
comment
да. Зайдите в настройки проекта. Выберите «Проект» на левой панели. Добавьте локализуемый файл. См. прикрепленный снимок экрана в разделе «РЕДАКТИРОВАТЬ». - person Ellen; 10.07.2017
comment
Извините, но когда я пытаюсь использовать + добавить, файл списка имеет значение null, не включает localizable.strings, сгенерированные genstrings. Знаете ли вы, как заставить iOS обнаруживать Localizable.strings, сгенерированные командой. - person wangshaoping; 10.07.2017
comment
Добавьте существующий строковый файл в папку en.lproj и переименуйте его в Localizable.strings. - person Ellen; 10.07.2017
comment
Я создаю папку en.lproj в своем проекте iOS и помещаю Localizable.strings в en.lproj, но когда я нажимаю + в локализации, список все равно становится пустым. - person wangshaoping; 11.07.2017
comment
Импортировали ли вы Localizable.strings в цель приложения. Либо перетащите и отпустите, либо щелкните правой кнопкой мыши -> добавьте файлы в цель. Его следует добавить в качестве ресурсов пакета. Проверьте в разделе «Фазы сборки» -> «Копировать ресурсы пакета». Или обратитесь к документу Apple developer.apple.com/library/content/documentation/MacOSX/ - person Ellen; 11.07.2017
comment
Большое спасибо, и я знаю, в чем моя проблема, я использую пакет по умолчанию, но мои Localizable.strings не включены в основной пакет. - person wangshaoping; 11.07.2017
comment
Этот ответ вызовет большие проблемы. При следующем запуске genstrings внесенные вручную изменения в Localizable.strings будут потеряны. Вот почему вам нужно использовать NSLocalizedStringWithDefaultValue, как показано в моем ответе. - person rmaddy; 11.07.2017
comment
Извините, но это проблема genstrings, которая перезаписывает строковый файл. NSLocalizedStringWithDefaultValue выберет значение из комментариев... что не поможет для многоязычных переводов. Для автоматического создания строкового файла я думаю, что по этой ссылке лучше всего следовать заголовку stackoverflow.com/questions/16806682/ - person Ellen; 12.07.2017

Если вы хотите получить полный контроль над ключом и его начальным значением, вам нужно использовать NSLocalizedStringWithDefaultValue вместо NSLocalizedString (который использует ключ в качестве начального значения).

Измените свой код на:

NSString *format = NSLocalizedStringWithDefaultValue(@"show_page_number", @"Localizable", NSBundle.mainBundle, @"%1$d of %2$d", @"This text will be used to show page number on the screen")
context = [NSString stringWithFormat:format, currentPageIndex + 1, pageCount];

Когда вы запустите genstrings, вы получите:

/* This text will be used to show page number on the screen */
"show_page_number" = "%1$d of %2$d";
person rmaddy    schedule 07.07.2017
comment
Спасибо, вы спасли мой день. - person wangshaoping; 07.07.2017