2012-05-31 11 views
7

Có thể để có được một chuỗi cục bộ từ một tập tin localized.strings cụ thể, chứ không phải từ hệ thống lựa chọn tập tin localized.strings, CHỈ MỘT LẦN. Tôi không cần phải thay đổi tất cả các văn bản được bản địa hóa, chỉ một số trong số chúng.Iphone sdk - Nhận văn bản Localized từ localized.strings cụ thể nộp

Những gì tôi muốn làm là để có cục bộ chuỗi xác định từ tuỳ chọn ngôn ngữ mà còn nội địa hóa. Vì vậy, một người dùng từ Brazil với tiếng Anh lang sẽ nhận được các ứng dụng bằng tiếng Anh nhưng một số văn bản sẽ được cụ thể cho khu vực vì vậy tôi muốn họ bằng tiếng Bồ Đào Nha.

Nhưng một người dùng từ Argentina, còn với iPhone bằng tiếng Anh sẽ nhận được ứng dụng bằng tiếng Anh, nhưng một số văn bản sẽ được ở Tây Ban Nha.

Something như

NSLocalizedStringFromTable("string.key","pt_BR",nil) 

Tôi nghĩ rằng việc gửi đó vào bảng tham số sẽ làm việc nhưng nó đã không phải là nó sẽ tìm kiếm tên của tập tin và không cho ngôn ngữ.

Trả lời

3

Có lẽ bạn muốn sử dụng NSBundle của localizedStringForKey:value:table: hơn NSLocalizedString(). Phương pháp này sẽ cho bạn cơ hội để chỉ định một bảng khác.

[[NSBundle mainBundle] localizedStringForKey:@"stringKey" 
    value:defaultString table:tableName]; 

BTW, đừng quên @ trước chuỗi mục tiêu C ;-).

+0

Có, tôi đồng nghĩa với việc, nhưng các tham số Bảng là tên tệp .strings, vì vậy tôi cần phải có hai tệp bổ sung pt.strings và es.strings, thay vì sử dụng tệp Localizable.strings mong muốn e. Không phải là một vấn đề để thực hiện nhưng không trả lời câu hỏi của tôi mặc dù. – htafoya

1
+1

Vâng, tôi có nghĩa là, nhưng tham số Bảng là tên tệp .strings, vì vậy tôi cần phải có hai tệp bổ sung pt.strings và es.strings, thay vì sử dụng tệp Localizable.strings mong muốn. – htafoya

+0

Câu hỏi của bạn không rõ ràng như vậy bởi vì nó dường như yêu cầu làm thế nào để có được nó từ một tập tin khác nhau. "Có thể lấy chuỗi được bản địa hóa từ một tệp cụ thể không, thay vì từ tệp được định sẵn đã được xác định trước." – Dad

4

Bạn có thể sử dụng các gói khác nhau để lựa chọn ngôn ngữ cụ thể:

NSString * path = [[NSBundle mainBundle] pathForResource:@"pt-PT" ofType:@"lproj"]; 
NSBundle * bundle = nil; 
if(path == nil){ 
    bundle = [NSBundle mainBundle]; 
}else{ 
    bundle = [NSBundle bundleWithPath:path]; 
} 
NSString * str = [bundle localizedStringForKey:@"a string" value:@"comment" table:nil]; 

Swift 3.0:

extension Bundle { 
    static let base: Bundle = { 
     if let path = Bundle.main.path(forResource: "Base", ofType: "lproj") { 
      if let baseBundle = Bundle(path: path) { 
       return baseBundle 
      } 
     } 
     return Bundle.main 
    }() 
} 

let localizedStr = Bundle.base.localizedString(forKey: key, value: nil, table: table) 
+1

Điều này thật tuyệt vời - tôi không biết tại sao nó không có nhiều upvotes hơn. Dễ dàng hơn nhiều so với tất cả các phương pháp được đề xuất khác. Tôi đang sử dụng nó để lấy phiên bản của một chuỗi trong ngôn ngữ phát triển, vì vậy tôi sử dụng '[[NSBundle mainBundle] pathForResource: @" Base "ofType: @" lproj "]; ' – deltacrux

+0

Đây là câu trả lời hàng đầu, tôi đã thử nghiệm nó và nó hoạt động! Đã thêm phiên bản Swift 3.0. – kelin

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