При разработке набора вычислений дат и языковых правил для преобразования числовых значений и дат в строки я пишу тесты, которые утверждают результат метода форматирования строк. Мнимое утверждение для него может выглядеть так:
NSAssert([dateString isEqualToString:@"Three days, until 6:00 PM"], @"Date string should match expectation");
Однако, поскольку приложение локализовано для нескольких языков, а мои коллеги-разработчики также находятся в разных локалях, а не в разных местах, может случиться, что ваше устройство или симулятор настроено на другой язык, чем тот, который тестирует написан для. В подобном сценарии содержимое dateString
может быть примерно таким:
@"Drie dagen, tot 18:00" // the assertion fails
@"Drei Tage, bis 18 Uhr" // the assertion also fails
Это может быть или не быть правильной датой даты для этих локалей, но часть, о которой идет речь, - это способ запуска тестов в определенную локаль, когда базовый код использует API Apple, как это
[NSDateFormatter localizedStringFromDate:date
dateStyle:NSDateFormatterNoStyle
timeStyle:NSDateFormatterShortStyle];
Я хотел бы прикрыть свои слова на двух или более языках, например:
[NSSomething actionToSetTheLocaleTo:@"en_US"];
dateString = ...; // the formatting
NSAssert([dateString isEqualToString:@"Three days, until 6:00 PM"], @"match en_US");
[NSSomething actionToSetTheLocaleTo:@"nl_NL"];
dateString = ...; // the formatting
NSAssert([dateString isEqualToString:@"Drie dagen, tot 18:00"], @"match nl_NL");
Кто знает, как добиться этого эффекта?
Примечания:
- Изменение предпочтительного языка не сокращает его, оно также должно влиять на поведение NSDateFormatter и NSNumberFormatter.
- Поскольку это только для тестирования модулей, я бы хотел использовать частный API. Однако, в интересах других людей, спотыкающихся об этом посту, предпочтительным является публичный API.
- Передача пользовательской локали для каждого API-интерфейса даты или числа может быть окончательным, но я отправляю этот вопрос, надеясь, что избежать вернется к этим экстремальным мерам. Если вы, однако, знаете, что это единственное решение, предоставьте некоторую ссылку, и я больше не буду тратить время.
Ссылки по теме: