2011-05-30 21 views
38

tôi đã sử dụng mã này để nhận nước nào iPhone thuộc về:NSLocale và đất nước tên

NSLocale *locale = [NSLocale currentLocale]; 
NSString *countryCode = [locale objectForKey: NSLocaleCountryCode]; 
NSString *country = [locale displayNameForKey: NSLocaleCountryCode value: countryCode]; 

và tôi muốn lấy tên nước luôn bằng tiếng Anh, nhưng nếu iPhone là trong bất kỳ ngôn ngữ khác, nó trả về tên quốc gia trong ngôn ngữ đó ...

+4

Lưu ý rằng ngôn ngữ và ngôn ngữ đều có thể định cấu hình người dùng. Ví dụ: một người dùng nói tiếng Anh bản địa chưa bao giờ rời Hoa Kỳ nhưng việc học tiếng Ý có thể thay đổi ngôn ngữ và ngôn ngữ trên iPhone của họ sang Ý và một người nào đó bằng điện thoại của họ được đặt sang tiếng Anh Mỹ có thể du lịch ở nước ngoài. Nếu bạn thực sự muốn tìm hiểu điện thoại của quốc gia nào, hãy sử dụng vị trí địa lý. –

+0

@ JeremyW.Sherman: Đồng ý. Sử dụng ngôn ngữ để xác định cách bản địa hóa nội dung của bạn, không xác định vị trí của người dùng. – Alan

Trả lời

90

Query một miền địa phương tiếng Anh cho displayName

như thế này:

NSLocale *locale = [NSLocale currentLocale]; 
NSString *countryCode = [locale objectForKey: NSLocaleCountryCode]; 

NSLocale *usLocale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"]; 

NSString *country = [usLocale displayNameForKey: NSLocaleCountryCode value: countryCode]; 
11

Dưới đây là một chút một mã số để nhận một số thông tin về sẵn NSLocale-Objects trong SWIFT, Chỉ cần đặt mã vào sân chơi:

func printInEnglish() { 

    // get all available Identifiers 
    let allLocaleIdentifiers : Array<String> = NSLocale.availableLocaleIdentifiers as Array<String> 

    // init an english NSLocale to get the english name of all NSLocale-Objects 
    let englishLocale : NSLocale = NSLocale.init(localeIdentifier : "en_US") 

    // enumerate all available Identifiers 
    for anyLocaleID in allLocaleIdentifiers { 

     // get the english name 
     var theEnglishName : String? = englishLocale.displayName(forKey: NSLocale.Key.identifier, value: anyLocaleID) 
     if theEnglishName == nil {theEnglishName = "no english name available"} 

     // create a NSLocale-Object 
     let anyLocale : NSLocale = NSLocale.init(localeIdentifier : anyLocaleID) 

     // ask for CurrencyCode, CurrencySymbol and CountryCode, ... of the created NSLocale-Object 
     var theCurrencyCode : String? = anyLocale.object(forKey: NSLocale.Key.currencyCode) as? String 
     if theCurrencyCode == nil {theCurrencyCode = "no Currency Code available"} 

     var theCurrencySymbol : String? = anyLocale.object(forKey: NSLocale.Key.currencySymbol) as? String 
     if theCurrencySymbol == nil {theCurrencySymbol = "no currency symbol available"} 

     var theCountryCode : String? = anyLocale.object(forKey: NSLocale.Key.countryCode) as? String 
     if theCountryCode == nil {theCountryCode = "no country code available"} 

     var theLanguageCode : String? = anyLocale.object(forKey: NSLocale.Key.languageCode) as? String 
     if theLanguageCode == nil {theLanguageCode = "no language code available"} 

     // print the result -> see the result in LoggingArea of xCode 
     print("Identifier : \(anyLocaleID)\nName   : \(theEnglishName!)\nCurrencyCode : \(theCurrencyCode!)\nSymbol  : \(theCurrencySymbol!)\nLanguageCode : \(theLanguageCode!)\nCountryCode : \(theCountryCode!)\n----------------------------") 
    } 
} 

printInEnglish() 

Bạn nhận được loại thông tin này (ví dụ):

You get this kind of information (example):

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