Рекомендации по использованию NSLocalizedString

Я (, как и все остальные), использую NSLocalizedStringдля локализации своего приложение.

К сожалению, есть несколько «недостатков» (, не обязательно по вине самой NSLocalizedString), в том числе

  • Отсутствие автодополнения для строк в Xcode. Это делает работу не только подверженной ошибкам-, но и утомительной.
  • Вы можете в конечном итоге переопределить строку просто потому, что не знали, что эквивалентная строка уже существует (, т.е. «Пожалуйста, введите пароль» или «Сначала введите пароль»)
  • Как и в случае с автозаполнением-, вам нужно «запомнить»/скопировать строки комментариев, иначе genstringв конечном итоге будет несколько комментариев для одной строки.
  • Если вы хотите использовать genstringпосле того, как вы уже локализовали некоторые строки, вы должны быть осторожны, чтобы не потерять свои старые локализации.
  • Одни и те же строки разбросаны по всему вашему проекту. Например, вы везде использовали NSLocalizedString(@"Abort", @"Cancel action"), а затем Code Review просит вас переименовать строку в NSLocalizedString(@"Cancel", @"Cancel action"), чтобы сделать код более последовательным.

То, что я делаю, (и после некоторых поисков на SO я понял, что многие люди делают это), чтобы иметь отдельный strings.hфайл, в котором я #defineлокализую-код. Например,

// In strings.h
#define NSLS_COMMON_CANCEL NSLocalizedString(@"Cancel", nil)
// Somewhere else
NSLog(@"%@", NSLS_COMMON_CANCEL);

Это, по сути, обеспечивает завершение кода-, единственное место для изменения имен переменных (, так что больше нет необходимости в genstring), и уникальное ключевое слово для автоматического-рефакторинга. Однако за это приходится платить целой кучей #defineутверждений, которые не структурированы по своей сути (, т.е. например, LocString.Common.Cancel или что-то в этом роде).

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

134
задан JiaYow 11 June 2014 в 07:40
поделиться