2010-02-25 28 views
10

Tôi có một dự án sử dụng một thư viện tĩnh (SL). Trong SL đó, có một vài chuỗi mà tôi muốn bản địa hóa và dự án bao gồm tất cả các tệp bản địa hóa. Bản địa hóa hoạt động tốt khi lưu trữ tất cả các bản dịch văn bản trong cùng một tệp. Vấn đề là tôi muốn tách các chuỗi SL ra khỏi các chuỗi khác. Tôi đã cố gắng để đặt hai tập tin * .strings khác nhau (Localizable.strings và Localizable2.strings) trong thư mục ngôn ngữ quan tâm nhưng điều đó không hoạt động. Tôi cũng đã cố gắng sử dụng hai tập tin * .strings có cùng tên (Localizable.strings) nhưng với các đường dẫn khác nhau. Nó cũng không hoạt động. Có vẻ như chỉ có một tệp bản địa hóa được hỗ trợ, đúng không? Bất cứ ai có thể đề xuất một cách tốt để làm điều này? Tôi đang sử dụng SDK 3.2 beta 2.Nội địa hóa các chuỗi trong lib tĩnh

Trả lời

15

Không thể gộp nó trong một lib tĩnh, nhưng bạn có thể tạo gói mới như "MyStaticLibraryName.bundle", đặt bên trong tất cả các bản địa hóa và sử dụng mã bên dưới để thay thế "NSLocalizedString()". Tất cả những gì bạn cần làm: thêm một thư viện tĩnh và gói tài nguyên.

NSString *MyLocalizedString(NSString* key, NSString* comment) { 
static NSBundle* bundle = nil; 
if (!bundle) { 
    NSString* path = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"MyStaticLibraryName.bundle"]; 
    bundle = [[NSBundle bundleWithPath:path] retain]; 
} 

return [bundle localizedStringForKey:key value:key table:nil]; 
} 
+1

Đối với chuỗi gen để làm việc với thiết lập này tham số -s phải được sử dụng. – hariseldon78

2

Tạo chuỗi địa phương cho thư viện tĩnh, sau đó đặt tệp chuỗi đó vào thư mục "YourLibraryResource". Đổi tên thư mục "YourLibraryResource.bundle".

Bây giờ bạn cũng bao gồm gói này trong dự án cùng với thư viện. Sau đó sử dụng mã được đưa ra bởi abuharsky.

6

Đặt các tệp có cùng tên giới thiệu một dự án không bao giờ hoạt động, bởi vì trong ứng dụng kết quả, chúng kết thúc tất cả trong cùng một vị trí. (. Xcode không duy trì cấu trúc thư mục của bạn)

Nhưng bạn có thể đặt một phần của nội địa hóa của bạn vào Localizable2.strings và sau đó sử dụng:

NSLocalizedStringFromTable (@ "chìa khóa", @ "Localizable2", @ "")

+1

Vâng, đó chính xác là giải pháp đúng! – slatvick

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