2009-06-24 3 views
7

Tôi muốn sử dụng các phím từ điển của mình để xuất ra trong một bảng được nhóm. Điều này phải được bản địa hóa với tất cả nội dung khác của tôi. Tôi có thể sử dụng NSLocalizedString làm khóa không?Bạn có sử dụng NSLocalizedString làm khóa trong từ điển không?

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

Trả lời

13

Bạn có thể, vì nó chỉ là một chuỗi. Điều đó nói rằng, không sử dụng kỹ thuật này cho từ điển mà bạn sẽ viết ra và sau đó đọc lại, bởi vì người dùng có thể thay đổi ngôn ngữ của mình ở giữa, và sau đó bạn sẽ tìm kiếm các phím sai.

2

Điều này giống như một từ điển tĩnh sẽ được tạo một lần trong chương trình của bạn và sau đó không thay đổi một lần nữa. Như vậy tôi không thấy vấn đề gì với nó. Tôi lấy nó khi bạn đang tạo từ điển không thể thay đổi, điều này sẽ không bị thay đổi và lưu trữ; bởi vì nếu có, tệp lưu trữ sẽ không thể trao đổi giữa những người dùng với các miền địa phương khác nhau, bởi vì các phím sẽ khác nhau.

Nếu, tuy nhiên, thay vì tạo mảng được bản địa hóa và tải chúng vào từ điển, bạn chỉ có thể có tệp plist được bản địa hóa được tải vào từ điển. Nó có thể làm cho mã của bạn dễ đọc hơn.

4

Như Peter đã chỉ ra, từ điển chỉ quan tâm rằng khóa là một đối tượng triển khai giao thức NSCopying. Một chuỗi statisfies rằng, và nội dung của nó không quan trọng như xa như là hợp pháp có liên quan.

Có lẽ sẽ không có vấn đề gì trong trường hợp này, nhưng có nhiều lần một từ trong một ngôn ngữ sẽ ánh xạ tới hai từ khác nhau theo một ngôn ngữ khác nhau tùy thuộc vào ngữ cảnh sử dụng từ đó. Điều ngược lại cũng có thể, hai từ trong một ngôn ngữ có thể ánh xạ tới cùng một từ trong một ngôn ngữ khác. Đây là một vấn đề khó xảy ra, nhưng có lẽ tốt nhất là chỉ xử lý các giá trị được bản địa hoá như các giá trị bạn hiển thị cho người dùng và sử dụng một số giá trị được xác định chặt chẽ khác làm khóa.