可以使用NSLocalizedString作为字典中的键吗?

问题描述:

我想用我的字典键在分组表中输出。这必须与我所有的其他内容进行本地化。我可以使用NSLocalizedString作为关键吗?可以使用NSLocalizedString作为字典中的键吗?

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

你可以,因为它只是一个字符串。也就是说,不要将这种技术用于你要写出来的字典,然后再读回来,因为用户可能会在两者之间改变他或她的语言,然后你会寻找错误的键。

这看起来像一个静态字典,它将在您的程序中创建一次,然后不再更改。因此,我没有看到它的问题。我认为,当你创建非可变字典时,这不会被改变和存档;因为如果是这样,则归档文件将无法在具有不同语言环境的用户之间交换,因为这些密钥会有所不同。

但是,如果不是创建本地化的数组并将它们加载到字典中,而是只需将一个本地化的plist文件加载到字典中即可。它可能会使你的代码更具可读性。

正如Peter指出的,字典只关心关键是实现NSCopying协议的对象。一个字符串表明了这一点,而且就合法性而言,内容并不重要。

也许在这种情况下它不会成为问题,但有很多时候,一个语言中的一个单词会根据单词使用的上下文映射到不同语言的两个不同单词。反过来也是可能的,一种语言中的两个词可能映射到不同语言的相同词。这是一个不太可能遇到的问题,但最好将本地化值仅作为向用户显示的值来处理,并使用其他更加严格定义的值作为关键字。