Лучшая практика с использованием 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? Может быть, есть даже фреймворк, который его инкапсулирует?

Ответы на вопрос(9)

Ваш ответ на вопрос