2011-07-15 6 views
5

Tôi đã gặp phải sự cố lạ với các chuỗi được bản địa hóa. Tôi chỉ có một 'Localizable.strings' trong thư mục 'en.lproj' của tôi và nó hoạt động tốt. tất cả các chuỗi được hiển thị trên thiết bị. nhưng lần sau tôi biên dịch và chạy, nó chỉ hiển thị ID của các chuỗi. ngay cả khi tôi không thay đổi gì cả và chỉ nhấp vào gỡ lỗi xây dựng &. và lần sau nó hoạt động tốt trở lại và lần sau lại được hiển thị với ID.xcode địa phương hóa chuỗi không được tải

vì vậy, có ai biết tại sao điều này xảy ra không? nó là loại gây phiền nhiễu mà tôi luôn luôn cần phải xây dựng hai lần.

+0

Ứng dụng có hiển thị bất kỳ lỗi nào không? Bằng cách nào đó tập tin không được sao chép. –

+0

không có thông báo lỗi nào cả. – boreas

Trả lời

3

Kiểm tra xem bạn có nhiều Localizable.strings trong dự án của mình hay không. Sáp nhập chúng vào một giải quyết nó cho tôi. (Kiểm tra bất kỳ mã bên ngoài bạn sử dụng ví dụ ShareKit)

+0

Điều này sẽ không giải quyết được vấn đề nếu bạn có nhiều ngôn ngữ. Bạn cần nhiều thư mục .lproj chứa một tệp "Localized.strings" (+ InfoPlist.strings nếu muốn) cho từng ngôn ngữ. Nếu bạn hợp nhất tất cả, bạn sẽ có nhiều khóa trùng lặp. – GtotheB

+0

@GtotheB Nếu tôi hiểu chính xác bạn muốn kết hợp tất cả các ngôn ngữ với nhau? Không, đừng làm thế! Chỉ hợp nhất các tệp sử dụng ngôn ngữ CÙNG (ví dụ: hợp nhất Localizable.strings từ tất cả các en.lproj cùng nhau và tất cả các Localizable.strings từ tất cả các de.lproj một cách riêng biệt) – Reggian

+0

Tôi giả định đó là ý của bạn. Có, việc hợp nhất các bảng ngôn ngữ sẽ mang lại kết quả xấu. Tuy nhiên, kết hợp (ví dụ: bảng tiếng Anh cũng có thể dẫn đến các khóa trùng lặp. Vì vậy, nếu được thực hiện như vậy, hãy đảm bảo các phím là duy nhất trong toàn bộ bảng [now] toàn bộ. – GtotheB

4

SOLUTION của tôi là ở phía dưới:

Tôi đã chạy vào cùng một vấn đề: Xen kẽ chạy nhường đúng, bản dịch sau đó không chính xác (chỉ dành cho tiếng Anh mặc dù).

Thêm "-NSShowNonLocalizedStrings YES" như một cuộc tranh cãi với ứng dụng mang lại:

Localizable string "MyKey" not found in strings table "Localizable" of bundle CFBundle 

Vì vậy, tôi đã cố gắng tải các tập tin quan trọng trực tiếp từ gói như là một chuỗi và đổ nó. Vâng, thời gian nó không hoạt động chính xác, nó đã được hiển thị một loạt các tin nhắn iOS tích hợp. Vì vậy, tôi đã đi đến các tập tin APP được xây dựng, mở nội dung gói, và xem các tập tin en.lproj/Localizable.strings ... và thì đấy !!! Tệp đã được lấp đầy bằng cặp khóa/giá trị Apple iOS. Trong lần xây dựng tiếp theo, nó đã được lấp đầy như mong đợi.

Tất nhiên, điều này không liên quan gì đến việc mã hóa các tệp (phải là UTF-16). Tôi đã không thể xác định được bất cứ điều gì có đề cập đến vấn đề cụ thể này.

GIẢI PHÁP CỦA TÔI:

tôi sao chép nội dung của Localizable.strings tiếng Anh hợp pháp nộp từ App GÓI (không phải từ nguồn của tôi) vào một tập tin XML (khi biên soạn, các tập tin được chuyển đổi thành .strings XML) và được thêm vào dự án của tôi. Sau đó tôi tải tập tin này vào một từ điển lúc khởi động, và nếu cuộc gọi đến NSLocalizedString trả về khóa thay vì giá trị, tôi đã tra cứu từ điển tôi đã nạp. Về lý thuyết, bạn có thể làm điều này cho tất cả các ngôn ngữ, nhưng tôi chỉ gặp vấn đề với tiếng Anh.

Vâng, đó không phải là câu trả lời cho vấn đề, nhưng đó là một giải pháp.

+0

hiện sự cố này chỉ xảy ra trên trình mô phỏng không? hoặc trên cả trình mô phỏng và thiết bị? – JAHelia

+0

Nó đã xảy ra trong cả hai. Tuy nhiên, cuối cùng tôi đã xác định được vấn đề. Dữ liệu iOS xuất hiện thực sự là một bảng bản địa hóa tiếng Anh ẩn cho thư viện của bên thứ ba.Tại sao Xcode luân phiên giữa hai bảng nằm ngoài tôi, nhưng loại bỏ nó giải quyết được vấn đề. – GtotheB