2011-11-26 18 views
5

Tôi biết nhiều nhà phát triển chỉ làm như sau: Họ bắt đầu phát triển ứng dụng bằng tiếng Anh và đặt NSLoclaizedString(@"Tap this to do that!", @"Telling what to do...") thay vì chỉ đơn giản là @"Tap this to do that!".Có an toàn khi sử dụng các khóa "thực" trong NSLocalizedString() không? Có ngôn ngữ dự phòng được bảo đảm không?

Sau đó, chúng chạy genstrings tạo tệp Localizable.strings bằng cách nào đó bằng cách trích xuất tất cả các chuỗi này. Phần lộn xộn: Các văn bản dài được sử dụng trong mã trở thành chìa khóa. Nó hoạt động. Cho đến một ngày mà bạn nhanh chóng đi vào mã của bạn và thay đổi chuỗi tiếng anh và quên về bản địa hóa và nó phục vụ như là chìa khóa cho tất cả những tập tin Localizable.strings.

Vì vậy, tôi có xu hướng sử dụng các phím "thực" không bị lẫn lộn với chuỗi. Để kiểm tra nhanh, tôi đã tạo một dự án được bản địa hóa sang tiếng Anh và tiếng Pháp. Sau đó, tôi đặt ngôn ngữ Trình mô phỏng thành tiếng Đức. Bởi vì, bạn biết đấy, nó sẽ hút khủng khiếp nếu người dùng sẽ thấy khóa như TTTDT.

Vì vậy, chỉ với tiếng Anh và tiếng Đức tại chỗ, tôi đã khởi chạy ứng dụng demo. Và những gì tôi nhận được là văn bản tiếng Anh từ tệp English Localizable.strings.

Kết luận: Dường như NSLocalizedString rơi trở lại tệp tiếng Anh nếu ngôn ngữ hệ điều hành không được ứng dụng bao trả.

Quesion: Giả sử luôn có tệp Localizable.strings (English) và các khóa nằm trong tệp cùng với các giá trị được định dạng đúng. Có trường hợp nào theo đó NSLocalizedString sẽ không thành công và sau đó hiển thị khóa trực tiếp?

Trả lời

4

Để trả lời câu hỏi của bạn: Có, tôi đã gặp sự cố bạn đang lo lắng, tức là tên khóa xuất hiện mặc dù tệp localizable.strings đã có mặt và bao gồm các mục nhập cho những tên khóa đó. Điều này xảy ra khi bạn có nhiều hơn một tệp localizable.strings trong dự án của mình. Mà có thể dễ dàng xảy ra nếu bạn thả một tập hợp các tập tin từ một dự án mã nguồn mở có localizable.strings riêng của họ (chẳng hạn như ShareKit) vào dự án của bạn.

Here is a related question thảo luận vấn đề này.

Nhưng ít nhất nếu bạn sử dụng tên khóa kiểu ID, bạn sẽ nhận thấy vấn đề như vậy khi bạn kiểm tra ứng dụng của mình bằng bất kỳ ngôn ngữ nào. Nếu bạn đã sử dụng chuỗi tiếng Anh (hoặc ngôn ngữ cơ sở) làm khóa, thì bạn sẽ không thấy vấn đề ngớ ngẩn này cho đến khi bạn kiểm tra các phiên bản được bản địa hoá và nó có thể bị trượt dễ dàng hơn. Vì vậy, trên đầu trang của bạn về việc phải nhớ để cập nhật các phím (trong tất cả các ngôn ngữ) khi viết lại văn bản, có vấn đề tiềm năng ẩn lỗi khi sử dụng văn bản tiếng Anh như là chìa khóa (tiếng Anh sẽ trông OK, nhưng bản địa hóa phiên bản sẽ không). Vì vậy, có vẻ như với tôi rằng việc sử dụng các tên khóa "thực" hơn là văn bản thực tế thì thực tế hơn. Nếu bạn vẫn lo lắng rằng vì lý do nào đó, các tên khóa có thể xuất hiện, hãy chọn một khóa ít nhất là đủ để mô tả dễ hiểu.

+0

Điểm tốt. Tôi cũng sẽ thêm hiệu suất tốt hơn. – dontWatchMyProfile

1

Chúng tôi có xu hướng sử dụng các khóa "thực" nhưng chúng thường là văn bản tiếng Anh (hoặc dạng viết tắt) và thêm "Khóa" vào cuối. Bằng cách đó nó là rõ ràng.

0

Tôi đã viết một số mã tùy chỉnh thực sự xác minh rằng tất cả các phím trong ứng dụng xuất hiện trong tất cả các tệp localizable.string. Có hai bước cho quá trình này - sử dụng genstrings để tạo tệp chuỗi có thể bản địa hóa mới chứa tất cả các khóa hiện được tham chiếu trong nguồn. Sau đó, tôi sử dụng một số mục tiêu-C api để tải trong các tập tin hiện có của tôi localizable.strings, và so sánh rằng tất cả chúng đều có cùng một bộ khóa (không nhiều hơn và không kém) như là một mới được tạo ra.

Các vấn đề liên quan