Я расширяю существующее приложение iPhone (4.x и выше) с поддержкой большего количества языков: эстонский, латышский и литовский.
В моем iPhone и в симуляторе нет поддержки для этих языков, и я уверен, что для них не существует специальной прошивки либо для использования на этих территориях.
Как я могу лучше всего сделать приложение, которое их поддерживает?
Я придумал два решения, которые мне не нравятся. Ни один из них не позволяет мне иметь более одного языка в приложении, так как пользователь не может выбирать связанные языки из списка Settings.app. Это означает, что для каждого языка должна быть представлена одна версия.
Вариант 1: Нарушить каталог en.lproj
Для каждого целевого языка (lt, lv, et) я помещаю файлы строк для этого языка в каталог en.lproj.
Плюсы: Использует известный механизм. Приложение просто думает, что работает на английском языке.
Минусы: Наносит ущерб моим инструментам локализации. Его запутанность для будущих сопровождающих и, следовательно, склонность к ошибкам. Требуется странная настройка сборки.
Вариант 2: Злоупотребление NSUserDefaults [AppleLanguages]
Объект AppleLanguages
в NSUserDefaults содержит список языков для использования приложения. Установив его так, я могу загрузить приложение, например, литовский из каталога lt.lproj:
[[NSUserDefaults standardUserDefaults] setObject:[NSArray arrayWithObjects:@"lt", nil] forKey:@"AppleLanguages"];
(По историческим причинам, я уже делаю несколько более сложную версию этого, чтобы удалить устаревший перевод в некоторых версиях приложения. В противном случае старые установки подхватили бы lproj, даже если я больше не свяжу его с приложением. )
Плюсы: Использует правильно названные каталоги lproj. Интегрирует хорошо с инструментами локализации. Простая настройка. Для реализации требуется только одна строка в main.m
.
Минусы: Несмотря на то, что клавиша AppleLanguages
используется многими людьми, это решение использует его для загрузки в противном случае неподдерживаемых языков, поэтому я боюсь, что могу кататься на тонком льду.
Le Questions
- Как другие приложения обычно поддерживают эти "неподдерживаемые" языки?
- Есть ли способ поддерживать их вместе с нормально поддерживаемыми языками?
- Как вы относитесь к взлому
AppleLanguages
?