Можно ли использовать NSLocalizedString в качестве ключа в словаре? - PullRequest
7 голосов
/ 24 июня 2009

Я хочу использовать ключи моего словаря для вывода в сгруппированную таблицу. Это должно быть локализовано со всем моим другим контентом. Могу ли я использовать NSLocalizedString в качестве ключа?

NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:
    first_array, NSLocalizedString(@"First Array", @"The First Array"),
    second_array, NSLocalizedString(@"Second Array", @"The Second Array"), nil];

Ответы [ 3 ]

13 голосов
/ 24 июня 2009

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

4 голосов
/ 24 июня 2009

Как указал Питер, словарь заботится только о том, чтобы ключ был объектом, реализующим протокол NSCopying. Строка подтверждает это, и ее содержание не имеет значения, если речь идет о законности.

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

2 голосов
/ 24 июня 2009

Это похоже на статический словарь, который будет создан один раз в вашей программе, а затем снова не изменен. Таким образом, я не вижу проблем с этим. Я так понимаю, что когда вы создаете неизменяемый словарь, он не будет изменен и заархивирован; потому что, если это так, то архивный файл не сможет быть обменен между пользователями с разными локалями, потому что ключи будут разными.

Если, однако, вместо создания локализованных массивов и загрузки их в словарь, вы можете просто иметь локализованный файл plist, который загружается в словарь. Это может сделать ваш код более читабельным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...