Comments 7
Опыт показывает, что лучше не использовать ключи для строк, а указывать сразу сами строки. То есть не
а прямо
Во-первых, когда возникнет необходимость использовать составные строки (например, «Last seen: %@ minutes ago», где значение отдельно от строки локализации), будет гораздо нагляднее.
Во-вторых, не нужно будет каждый раз лезть в плист, чтобы посмотреть, что подразумевается под ключем.
В-третьих, если в приложении используется какой-нибудь язык, с которым программист не знаком, то стороннему переводчику будет легче работать.
KOLocalized(key:"kChangeLanguage")
а прямо
KOLocalized(key:"Change Language")
Во-первых, когда возникнет необходимость использовать составные строки (например, «Last seen: %@ minutes ago», где значение отдельно от строки локализации), будет гораздо нагляднее.
Во-вторых, не нужно будет каждый раз лезть в плист, чтобы посмотреть, что подразумевается под ключем.
В-третьих, если в приложении используется какой-нибудь язык, с которым программист не знаком, то стороннему переводчику будет легче работать.
Так для всего это и нужны комментарии к ключам локализации и все три пункта, указанные вами, становятся неактуальными.
Со строками языка в качестве ключей есть проблема: одна строка на английском может по-разному переводиться на другой язык в зависимости от контекста.
Со строками языка в качестве ключей есть проблема: одна строка на английском может по-разному переводиться на другой язык в зависимости от контекста.
По поводу писать ключ или слово, фразу, здесь решать вам, для меня удобнее с ключами работать, а от того напишите вы так «kChangeLanguage» или «Change Language» суть особо не поменяется. Я всего лишь показал решение некоторых проблем.
А если добавить extension к String, то получится еще удобнее и красивее (на мой взгляд):
textLabel.text = "Change Language".localized
Однажды тоже озадачился подобным вопросом, но решил в итоге иным способом. Остался тот же самый NSLocalizedString, но bundle откуда он брал данные менялся в рантайме. Таким образом еще и осталась поддержка локализации storyboard'ов и других файлов (но, чтобы storyboardы локализовались их нужно было пересоздать).
https://bitbucket.org/Planemo/ios-support/raw/master/LocalizedBundle/Bundle+Localization.swift
https://bitbucket.org/Planemo/ios-support/raw/master/LocalizedBundle/Bundle+Localization.swift
Вот есть очень хороший вариант со стандартным NSLocalisedString
https://gist.github.com/narikbi/352e93e446e8b1faf283
https://gist.github.com/narikbi/352e93e446e8b1faf283
Sign up to leave a comment.
Альтернатива NSLocalizedString, смена языка без перезагрузки приложения