Я (, как и все остальные), использую NSLocalizedString
для локализации своего приложение.
К сожалению, есть несколько «недостатков» (, не обязательно по вине самой NSLocalizedString), в том числе
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?Может быть, есть даже фреймворк, который его инкапсулирует?