Обновить

Комментарии 10

image

Напомнило иллюстрацию.

А по теме, что будет если у вас 30 языков? Будете «элс-ифы» дописывать? :-). Можно ведь просто пытаться загрузить сборку из названия переменной, а если таковой не существует, использовать дефолтную (например, английскую или какая у вас будет более уместна). И грамматические с орфографическими ошибками в статье остались еще — продолжайте «чистить» :-).
дело в том что так не получиться без Localizable.strings перевода не состоится просто. но я не видел 30 языков в одном приложении. именно в таком на которым я работаю. переводчики не в счет, так как они переводят, но не локализируют сами себя. Обычно в приложениях 3-4 не более. а бывает и 2. Но это кодинг, там может быть столько кода, сколько нужно. Я лишь дал точку отрыва, если кто-то реализует более экономично. велкам.
Я надеюсь вы это не серьезно? Вот эта простыня из if-else и switch-ей уж никак не является примером хорошего кода.
Да и ваше «скопировать в новую папочку» — в xCode в File Inspector (первая вкладочка в правой колонке) есть специально обученный раздел для локализации любых ресурсов в приложении:
image

Статья более вредна чем полезна ИМХО
Вот именно таким путем у меня часто стирались целые классы. Мне даже пришлось часть кода восстанавливать вручную по памяти. И такой способ не получить форсированную локализацию. Ведь мы идем к цели, не важно как мы добиваемся своей цели. Тем более что я должен запомнить какая локаль стоит сейчас, когда пользователь перезапустит приложение она у него останется и не слетит. Я перепробовал много разных способов и на кнопку localize вообще не нужно жать. это излишне.
А можно подробнее о «стирании целых классов»? Это стандартное поведение при локализации ресурсов — они копируются хкодом по тем самым папочкам *.lproj. Или вы файлы с исходным кодом пытались локализовать?
да-да именно это и пытался. в любом случае мой способ работает быстро, без глюков Xcode. такой способ еще очень глючный, если я стираю какую-то локаль через время мне Xcode снова добавляет их в инспектор. в Этом способе еще полно багов. Я пока не рекомендую им пользоваться пока Apple не исправит их. Я перепробовал много разных способов. Этот способ один из старых способов по локализации еще когда появился xib. Я получил то что хотел. И даже локализировал название приложения.
Погодите… Целая статья лишь о том, как реализовать локализацию одной строки?

дело в том что так не получиться без Localizable.strings перевода не состоится просто. но я не видел 30 языков в одном приложении. именно в таком на которым я работаю.

Это не значит, что можно писать кривой код. Это очень печальная практика, когда человек думает «да, тут всего-то надо...», в итоге делает ужасный код. Ужасно не то, что он в конкретном случае поленился сделать нормально, а в том, что он привыкает к такому подходу. В итоге может никогда и не переучиться…

p.s. в строке "myLabel.text = [self languageSelectedStringForKey:@"Accountt"];" ошибка.
не одной строки, а как примера я взял одну. все остальные локализации картинок нужно смотреть WWDC Sessions 2012. Я не удивлен что тут есть тут есть трудности понимания прочитанного. И да на хабре нельзя редактировать статью. По крайней мере я не нашел как.
Итак, статья сводится к фразе «если вам необходимо принудительно сменить локализацию в приложении используйте метод:»
-(NSString*)localizedStringForLanguage:( NSString* )languageCode // @"en"|@"he"|@"ru"|@"fr"|@"ar"|@"he"|other
                                   key:( NSString* )key
{
    NSString *path = [[NSBundle mainBundle] pathForResource:languageCode ofType:@"lproj"];
    if ( !path )
        return NSLocalizedString(key, nil);

    return [[NSBundle bundleWithPath:path] localizedStringForKey:key value:@"" table:nil];
}
Макс, спасибо за то, что внес поправку. этот вариант более верный. с точки зрения экономии в коде.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации