Search
Write a publication
Pull to refresh

Comments 7

Опыт показывает, что лучше не использовать ключи для строк, а указывать сразу сами строки. То есть не
KOLocalized(key:"kChangeLanguage")

а прямо
KOLocalized(key:"Change Language")

Во-первых, когда возникнет необходимость использовать составные строки (например, «Last seen: %@ minutes ago», где значение отдельно от строки локализации), будет гораздо нагляднее.

Во-вторых, не нужно будет каждый раз лезть в плист, чтобы посмотреть, что подразумевается под ключем.

В-третьих, если в приложении используется какой-нибудь язык, с которым программист не знаком, то стороннему переводчику будет легче работать.
Так для всего это и нужны комментарии к ключам локализации и все три пункта, указанные вами, становятся неактуальными.

Со строками языка в качестве ключей есть проблема: одна строка на английском может по-разному переводиться на другой язык в зависимости от контекста.
По поводу писать ключ или слово, фразу, здесь решать вам, для меня удобнее с ключами работать, а от того напишите вы так «kChangeLanguage» или «Change Language» суть особо не поменяется. Я всего лишь показал решение некоторых проблем.
А если добавить extension к String, то получится еще удобнее и красивее (на мой взгляд):
textLabel.text = "Change Language".localized
Достаточно хороший вариант, но мне привычнее был представленный после Objective-c.
Однажды тоже озадачился подобным вопросом, но решил в итоге иным способом. Остался тот же самый NSLocalizedString, но bundle откуда он брал данные менялся в рантайме. Таким образом еще и осталась поддержка локализации storyboard'ов и других файлов (но, чтобы storyboardы локализовались их нужно было пересоздать).
https://bitbucket.org/Planemo/ios-support/raw/master/LocalizedBundle/Bundle+Localization.swift
Sign up to leave a comment.

Articles