İOS'ta geçerli cihaz dilini mi alıyorsunuz?


431

Aygıt arayüzünün kullandığı geçerli dili göstermek istiyorum. Hangi kodu kullanırdım?

Bunu bir NSString tamamen hecelenmiş bir formatta istiyorum. ("En_US" içinde değil)

EDIT: Yolda devam edenler için, cevap yeni iOS sürümleriyle birlikte geliştiği için burada bir ton yararlı yorum var.


1
Bu yerleşiktir NSLocale. Cevabımı gör.
Erik B

15
iOS9 yorumu: Garip bir nedenden dolayı Apple'ın döndürdüğü biçimi değiştirmesine dikkat edin [NSLocale preferredLanguages]. eskiden alt en_USçizgiyle ayrılmıştı (örneğin ), ama şimdi bir tire olarak değiştirildi:en-US
ishahak

7
İOS9 hakkında daha fazla bilgi: Bir iOS 8.4 simülatöründe 9.0 simülatöre karşı [NSLocale preferlanLanguages] almanın tutarsızlıkları da vardır. İOS 8.4'te "en" ve iOS 9.0'da "en-US"
Kris Subramanian

Bu yorum bana çok yardımcı oldu! Yorumunuzu görünceye kadar yaklaşık 1 saat boyunca neyin yanlış gittiğini merak eden basit bir sorunla karşılaştık.
thandasoru

3
NSLocaleyöntemleri vardır componentsFromLocaleIdentifier:ve localeIdentifierFromComponents:bunlar muhtemelen (potansiyel olarak değiştirilebilir) formatı işlemek için doğru yoldur.
Benjohn

Yanıtlar:


808

Sunulan çözümler, o anda seçili olan dili değil, cihazın geçerli bölgesini döndürür. Bunlar genellikle bir ve aynıdır. Ancak, Kuzey Amerika'dayım ve dilimi Japonca olarak ayarlarsam, bölgem yine de İngilizce (ABD) olacaktır. Seçili dili almak için şunları yapabilirsiniz:

NSString * language = [[NSLocale preferredLanguages] firstObject];

Bu, seçili olan dil için iki harfli bir kod döndürür. İngilizce için "en", İspanyolca için "es", Almanca için "de" vb. Daha fazla örnek için lütfen bu Wikipedia girişine bakın (özellikle 639-1 sütunu):

ISO 639-1 kodlarının listesi

Ardından, iki harf kodunu görüntülemek istediğiniz dizeye dönüştürmek basit bir konudur. Eğer "en" ise, "English" i gösterin.

Umarım bu bölge ve şu anda seçili dil arasında ayrım yapmak isteyen birine yardımcı olur.

DÜZENLE

NSLocale.h başlık sayfasından alıntı yapmaya değer:

+ (NSArray *)preferredLanguages NS_AVAILABLE(10_5, 2_0); // note that this list does not indicate what language the app is actually running in; the [NSBundle mainBundle] object determines that at launch and knows that information

Uygulama diliyle ilgilenen kişiler @ mindvision'un cevabına bir göz atıyor


2
Tam aradığım şey. Bölgenin dil ile aynı olmadığı bir sorun yaşadım.
Jasarien

12
kötü cevap: Çince için zh-Hans döndürür, iso kodu değildir.
cyrilchampier

2
İlk iki karakter ülkeye, çizgi sonrası bölgeyi verir, gerisi sadece onu daha da daraltmak içindir (yerel lehçeler gibi). zh, Çince için iso kodu olarak listelenmiştir. Benim gibi belirli bir dil arayanlar için IANA kayıt defterini
Xono

3
zh-Hans tek istisna mı yoksa ISO 639-1 standardından farklı dil kodları var mı?
MPaulo

57
Uyarı: iOS 9'daNSLocale preferredLanguages değiştirilenindönüş değerideğişti. : Eğer elde edilmiştir önce "en" sadece iOS 9'da Eğer "en-US" veya "en-JP" vb Referans alacak olursa happyteamlabs.com/blog/...
Dj S

281

Seçilen cevap geçerli aygıt dilini döndürür, ancak uygulamada kullanılan gerçek dili döndürmez. Uygulamanızda kullanıcının tercih ettiği dil için bir yerelleştirme sağlamazsanız, kullanıcının tercih ettiği sipariş tarafından sipariş edilen ilk yerelleştirme kullanılır.

Yerelleştirmelerinizden seçilen geçerli dili keşfetmek için şunu kullanın:

[[NSBundle mainBundle] preferredLocalizations];

Misal:

NSString *language = [[[NSBundle mainBundle] preferredLocalizations] objectAtIndex:0];

Swift:

let language = NSBundle.mainBundle().preferredLocalizations.first as NSString

Mükemmel, ben de ilgilendiğim bu oldu. Test edildi ve düzgün çalışıyor!
smileyborg

5
mükemmel! yalnızca uygulamamın desteklediği dillerle tercih edilen sırada yerelleştirilmiş uzak kaynak yolları oluşturmamı sağlıyor.
Yevhen Dubinin

bundan sonra tüm dil adını almak istersek ne olur?
Shabarinath Pabba

Dil adının tamamını tercih edilenYerelleştirme'den almak istiyorsanız, [[NSLocale tahsis] initWithLocaleIdentifier: dil] (yukarıdan) kullanabilirsiniz. Sonra yerel ayar var ve displayNameForKey çağırabilirsiniz.
Vanessa Forney

87

İOS 9 için çözüm:

NSString *language = [[NSLocale preferredLanguages] objectAtIndex:0];

language = "tr-TR"

NSDictionary *languageDic = [NSLocale componentsFromLocaleIdentifier:language];

languageDic gerekli bileşenlere sahip olacak

NSString *countryCode = [languageDic objectForKey:@"kCFLocaleCountryCodeKey"];

countryCode = "ABD"

NSString *languageCode = [languageDic objectForKey:@"kCFLocaleLanguageCodeKey"];

languageCode = "en"


5
kCFLocaleLanguageCodeKey , kendi dizenizi yapmak yerine kullanabileceğiniz tanımlanmış bir sabittir.
SNyamathi

1
NSLocaleLanguageCode = @ "kCFLocaleCountryCodeKey"
karga

için kullanılması NSLocaleCountryCode ve NSLocaleLanguageCode @ "kCFLocaleCountryCodeKey", @ "kCFLocaleLanguageCodeKey", repectively
karga

65

Bu muhtemelen size ne istediğinizi verecektir:

NSLocale *locale = [NSLocale currentLocale];

NSString *language = [locale displayNameForKey:NSLocaleIdentifier 
                                         value:[locale localeIdentifier]];

Dilin adını, dilin kendisinde gösterir. Örneğin:

Français (France)
English (United States)

31
yanlış cevap: bu farklı olabilir dil değil, yerel döndürür ...
cyrilchampier

4
Bu kesinlikle yanlıştır, örneğin telefon ayarlarındaki dili İngilizce ve Bölge biçiminde Almanca, Almanya diyelim olarak ayarlarsanız, yukarıdaki örnek "Almanca" döndürür. Yine de telefon dili İngilizce olarak ayarlanmıştır.
jake_hetfield

2
Bu hiç de yanlış değil. Yerel ayar hem dil hem de bölge bilgilerini içerir. Yani @ jake_hetfield örneğinde "Almanca" döndürmez, "İngilizce (Almanya)" döndürür. Bu, dreamlab'ın cevabı ile birlikte doğru cevap olmalıdır.
SeanR

36

uyarıKabul edilen ve diğer cevapların tümü, tercih edilen dilin cihaz dilinden başka bir dil olabileceğini dikkate almaz .

cihaz dili işletim sistemi elemanları ve Apple uygulamaları sunulduğu dildir.

Tercih dil kullanıcı Apple sadece çeviriler sınırlı kümesi sağlar. Yerelleştirilmiş uygulamalar istiyorum dildir. Tercih edilen dil Apple'ın uygulamalarını çevirdiği tek bir dilse, cihaz dili de olacaktır. Ancak , kullanıcı Apple'ın çeviri sağlamadığı bir dili tercih ederse cihaz tercih edilir ve tercih edilen diller eşleşmez . Cihaz dili, tercih edilen diller listesinde ilk sırada olmayacaktır.

Aşağıdaki işlev, tercih edilen diller listesinden geçer ve Apple çerçevelerinde bir çeviri olup olmadığını kontrol eder. Çeviri yapan ilk dil aygıt dilidir. İşlev dil kodunu döndürür.

func deviceLanguage() -> String? {
    let systemBundle: NSBundle = NSBundle(forClass: UIView.self)
    let englishLocale: NSLocale = NSLocale(localeIdentifier: "en")

    let preferredLanguages: [String] = NSLocale.preferredLanguages()

    for language: String in preferredLanguages {
        let languageComponents: [String : String] = NSLocale.componentsFromLocaleIdentifier(language)

        guard let languageCode: String = languageComponents[NSLocaleLanguageCode] else {
            continue
        }

        // ex: es_MX.lproj, zh_CN.lproj
        if let countryCode: String = languageComponents[NSLocaleCountryCode] {
            if systemBundle.pathForResource("\(languageCode)_\(countryCode)", ofType: "lproj") != nil {
                // returns language and country code because it appears that the actual language is coded within the country code aswell
                // for example: zh_CN probably mandarin, zh_HK probably cantonese
                return language
            }
        }

        // ex: English.lproj, German.lproj
        if let languageName: String = englishLocale.displayNameForKey(NSLocaleIdentifier, value: languageCode) {
            if systemBundle.pathForResource(languageName, ofType: "lproj") != nil {
                return languageCode
            }
        }

        // ex: pt.lproj, hu.lproj
        if systemBundle.pathForResource(languageCode, ofType: "lproj") != nil {
            return languageCode
        }
    }

    return nil
}

Bu, tercih edilen dil listesi:

  1. Afrikaans (iOS diline çevrilmemiştir)
  2. İspanyolca (Cihaz Dili)

Tercih dil liste edilebilir düzenlenebilir : Settings.app -> Genel -> Dil ve Bölge -> Tercih Edilen Dil al


Cihazın dil kodunu kullanabilir ve dil adına çevirebilirsiniz. Aşağıdaki satırlar aygıt dilini aygıt dilinde yazdıracaktır. Örneğin, cihaz İspanyolca olarak ayarlanmışsa "Español".

if let deviceLanguageCode: String = deviceLanguage() {
    let printOutputLanguageCode: String = deviceLanguageCode
    let printOutputLocale: NSLocale = NSLocale(localeIdentifier: printOutputLanguageCode)

    if let deviceLanguageName: String = printOutputLocale.displayNameForKey(NSLocaleIdentifier, value: deviceLanguageCode) {
        // keep in mind that for some localizations this will print a language and a country
        // see deviceLanguage() implementation above
        print(deviceLanguageName)
    }
} 

Anladığım kadarıyla paket örneğinizi başlatarak NSBundle(forClass: UIView.self)belirli bir görünüm için en spesifik dili sağlamaya çalışıyorsunuz. Ancak, bunu kullanarak verilen sınıf için bir dilin döndürülmediği bir sorunla karşılaştım. Başlatma ayarını değiştirdim NSBundle.mainBundle()ve beklenen dil kodunu döndürdüm.
palmi

Açıklama: ile demetini başlatılıyor mainBundle()göründüğünü için başlığında önerildiği gibi Apple tarafından önerilen biri olmak NSLocale, // note that this list does not indicate what language the app is actually running in; the [NSBundle mainBundle] object determines that at launch and knows that information.
palmi

@Pouria NSBundle.mainBundle()uygulama paketinizi, NSBundle(forClass: UIView.self)sistem UIKit paketini döndürür. açıklanan yöntem, paketteki dizinleri arar. uygulama paketiniz yalnızca yerelleştirmek istediğiniz diller için olanları içerir. aygıt dilini belirlemek için sistem paketini kontrol etmeniz gerekir.
dreamlab

1
@ Sorun, iOS 9'un dönüş değerlerini değiştirmiş olması olabilir NSLocale.preferredLanguages(). i iOS 9 desteklemek cevabını güncellendi .
dreamlab

@dreamlab maalesef bu yaklaşım, pod gibi üçüncü taraf bileşenleri dahil ettiğinizde proje ayarlarında desteklemediğiniz yerelleştirmelerle yanlış pozitif sonuçlar verir.
kokoko

12

Bunu kullanıyorum

    NSArray *arr = [NSLocale preferredLanguages];
for (NSString *lan in arr) {
    NSLog(@"%@: %@ %@",lan, [NSLocale canonicalLanguageIdentifierFromString:lan], [[[NSLocale alloc] initWithLocaleIdentifier:lan] displayNameForKey:NSLocaleIdentifier value:lan]);
}

bellek sızıntısını yoksay ..

ve sonuç

2013-03-02 20:01:57.457 xx[12334:907] zh-Hans: zh-Hans 中文(简体中文)
2013-03-02 20:01:57.460 xx[12334:907] en: en English
2013-03-02 20:01:57.462 xx[12334:907] ja: ja 日本語
2013-03-02 20:01:57.465 xx[12334:907] fr: fr français
2013-03-02 20:01:57.468 xx[12334:907] de: de Deutsch
2013-03-02 20:01:57.472 xx[12334:907] nl: nl Nederlands
2013-03-02 20:01:57.477 xx[12334:907] it: it italiano
2013-03-02 20:01:57.481 xx[12334:907] es: es español

sadece merak için, burada bellek sızıntısı nerede?
Can Poyrazoğlu

Sızıntı - [[[NSLocale ayırma] initWithLocaleIdentifier: lan].
Pavel

1
Ancak ARC dışı projeler için.
Josh Hinman

12

Gibi tercüme dil kodları en_US içine İngilizce (ABD) bir özelliği inşa edilmiştir NSLocaleve NSLocalesize gelen dil kodlarını nereden ilgilenmez. Dolayısıyla, kabul edilen cevabın önerdiği gibi, kendi çevirinizi uygulamak için hiçbir neden yoktur.

// Example code - try changing the language codes and see what happens
NSLocale *locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en"];
NSString *l1 = [locale displayNameForKey:NSLocaleIdentifier value:@"en"];
NSString *l2 = [locale displayNameForKey:NSLocaleIdentifier value:@"de"];
NSString *l3 = [locale displayNameForKey:NSLocaleIdentifier value:@"sv"];
NSLog(@"%@, %@, %@", l1, l2, l3);

Baskılar: İngilizce, Almanca, İsveççe


1
Aslında, yerel ayarınızı başlatmak için [NSLocale autoupdatingCurrentLocale] kullanmalısınız. Bu şekilde dil adları kullanıcıların anadilinde görüntülenir. Örneğin İsveççe Svenska olacak.
Maciej Swic

8

Mevcut cihaz dilini almanın daha iyi bir yolu bile var. Aşağıdaki kodu deneyelim -

NSLog(@"Current Language - %@", [[NSLocale preferredLanguages] firstObject]);

Öneren Abizern üzerinde burada


7

Şu displayNameForKey:value:yöntemi kullanabilirsiniz NSLocale:

// get a French locale instance
NSLocale *frLocale = [[[NSLocale alloc] initWithLocaleIdentifier:@"fr_FR"] autorelease];

// use it to get translated display names of fr_FR and en_US
NSLog(@"%@", [frLocale displayNameForKey:NSLocaleIdentifier value:@"fr_FR"]);
NSLog(@"%@", [frLocale displayNameForKey:NSLocaleIdentifier value:@"en_US"]);

Bu çıktı:

français (France)
anglais tats-Unis)

initWithLocaleIdentifier:Ve aynı displayNameForKey:value:yöntem için aynı yerel ayar tanımlayıcısını belirtirseniz, size dilin yerel adını verir. Ülke kodunu kaldırır ve sadece kullanırsanız frve enaynı zamanda ülkeyi görünen addan da çıkaracağını keşfettim (en azından Mac OS X'te, iOS hakkında emin değilim).


6

hızlı

Mevcut cihaz dilini almak için

NSLocale.preferredLanguages()[0] as String

Uygulama dilini edinmek

NSBundle.mainBundle().preferredLocalizations[0] as NSString

Not:

Bu verdiğimiz o dili getirir CFBundleDevelopmentRegion Info.plist arasında

eğer CFBundleAllowMixedLocalizations ait Info.plist sonra ilk maddesinde doğrudur CFBundleLocalizations Info.plist döndürülür içinde


6

Kendim için doğru çözümü bulmaya çalıştım. Kullandığımda Locale.preferredLanguages.first, uygulama ayarlarınızdan tercih edilen dil döndürüldü.

Kullanıcı cihaz ayarlarından dili öğrenmek istiyorsanız, aşağıdaki dizeyi kullanmalısınız:

Hızlı 3

let currentDeviceLanguage = Locale.current.languageCode
// Will return the optional String

Paketini açmak ve kullanmak için aşağıdaki satıra bakın:

if let currentDeviceLanguage = Locale.current.languageCode {
    print("currentLanguage", currentDeviceLanguage)

    // For example
    if currentDeviceLanguage == "he" {
        UIView.appearance().semanticContentAttribute = .forceRightToLeft
    } else {
        UIView.appearance().semanticContentAttribute = .forceLeftToRight
    }
}

bu Bundle.main.preferredLocalizations [0] dizesini kullanırsanız, paketini açmak zorunda değilsiniz
μολὼν.λαβέ

5

Kullanıcı cihazı geçerli dili almak için benim için çalıştı aşağıdaki kodu kullanın.

NSString * myString = [[NSLocale preferredlanguage]objectAtIndex:0];

4

iOS13, Swift 5+, WWDC2019 https://developer.apple.com/videos/play/wwdc2019/403/

Kullanıcılar OS dilinden bağımsız olarak bir uygulamanın tercih ettiği dili seçebilir.

Bunları kullanabilirsiniz:

    // Returns a list of the user's preferred languages.
    // Maybe more than (or none of) your app supports!
    Locale.preferredLanguages

    // a subset of this bundle's localizations, re-ordered into the preferred order
    // for this process's current execution environment; the main bundle's preferred localizations
    // indicate the language (of text) the user is most likely seeing in the UI
    Bundle.main.preferredLocalizations



    // The current running app language
    Bundle.main.preferredLocalizations.first

    // list of language names this bundle appears to be localized to
    Bundle.main.localizations

3

MonoTouch C # geliştiricileri için şunları kullanın:

NSLocale.PreferredLanguages.FirstOrDefault() ?? "en"

Not: Bunun bir iOS sorusu olduğunu biliyorum, ancak bir MonoTouch geliştiricisi olduğum için, bu sayfadaki cevap beni doğru yönde yönlendirdi ve sonuçları paylaşacağımı düşündüm.


Şu anda NSLocale.PreferredLanguages ​​kullanıyorum ve boş bir dizi alıyorum. Belgelerde hiç boş kalmayacağını okuduğunuzu varsayıyorum, ancak bunu hiçbir yerde göremiyorum?
JFoulkes

Hayır, dürüst olmak gerekirse, bu sadece benim bir varsayımdı.
Chuck Savage

@LarryF Bu videoyu izleyin: jonas.follesoe.no/2011/07/22/cross-platform-mobile-ndc-2011 Kod / çoklu platform uygulamalarınızı nasıl yapılandıracağınız konusunda çok bilgilendiricidir.
Chuck Savage

3

İçinde Swift:

let languageCode = NSLocale.currentLocale().objectForKey(NSLocaleLanguageCode) as? String

3

Hızlı 3

let locale = Locale.current
let code = (locale as NSLocale).object(forKey: NSLocale.Key.countryCode) as! String?
print(code!)

Stack Overflow'a hoş geldiniz! Bu kod parçası soruyu cevaplayabilirken, sorunun ne olduğu ve kodunuzun verilen sorunla nasıl başa çıkacağına dair bir açıklama eklemek daha iyidir. Gelecek için, Stack Overflow'da harika bir cevabı nasıl çözeceğiniz hakkında bazı bilgiler .
dirtydanee

3

Basit Swift 3 işlevi:

  @discardableResult
  func getLanguageISO() -> String {
    let locale = Locale.current
    guard let languageCode = locale.languageCode,
          let regionCode = locale.regionCode else {
        return "de_DE"
    }
    return languageCode + "_" + regionCode
  }

3

Tercih edilen dil kodunu ("en", "de", "es" ...) ve yerelleştirilmiş tercih edilen dil adını (geçerli yerel ayar için) arıyorsanız, Swift'te basit bir uzantı:

extension Locale {
static var preferredLanguageIdentifier: String {
    let id = Locale.preferredLanguages.first!
    let comps = Locale.components(fromIdentifier: id)
    return comps.values.first!
}

static var preferredLanguageLocalizedString: String {
    let id = Locale.preferredLanguages.first!
    return Locale.current.localizedString(forLanguageCode: id)!
}

}


2
-(NSString *)returnPreferredLanguage { //as written text

NSUserDefaults * defaults = [NSUserDefaults standardUserDefaults];
NSArray *preferredLanguages = [defaults objectForKey:@"AppleLanguages"];
NSString *preferredLanguageCode = [preferredLanguages objectAtIndex:0]; //preferred device language code
NSLocale *enLocale = [[NSLocale alloc] initWithLocaleIdentifier:@"en"]; //language name will be in English (or whatever)
NSString *languageName = [enLocale displayNameForKey:NSLocaleIdentifier value:preferredLanguageCode]; //name of language, eg. "French"
return languageName;

}

2

Burada sadece dil almak istiyorsanız benim önerilen cevabım:

NSString *langplusreg = [[NSLocale preferredLanguages] objectAtIndex:0];
NSString * langonly = [[langplusreg componentsSeparatedByString:@"-"] 
objectAtIndex:0];

Benim durumumda sadece Yerel ayar dil değil yerel bölge istedim.

Çıktı: Yerel diliniz Japonca ve yerel ayar bölgesi Japonya ise:

langplusreg = ja-JP

langonly = ja


1

Swift'te @amir yanıtı:

// Get language prefered by user
    let langageRegion = NSLocale.preferredLanguages().first!
    let languageDic = NSLocale.componentsFromLocaleIdentifier(langageRegion)
    let language = languageDic[NSLocaleLanguageCode]

1

Açıkçası, örneğin,

[[NSLocale preferredLanguages] objectAtIndex:0]

genellikle iyi çalışır ve geçerli aygıt dilini döndürür.

Ancak bazı durumlarda yanıltıcı olabilir:

Bu değeri almak istediğiniz uygulama dili zaten değiştirdiyse, örneğin bu tür bir kodla:

NSString *lg = @"en"; // or anything like @"en", @"fr", etc.
[[NSUserDefaults standardUserDefaults] 
    setObject:[NSArray arrayWithObjects:lg, nil]  
    forKey:@"AppleLanguages"]

Bu durumda, [NSLocale preferlanLanguages] aslında geçerli cihaz dilini değil, bu uygulamada tercih edilen dil setini (ve kullanılan) döndürür!

Ve ... bu durumda, geçerli geçerli aygıt dilini (ve daha önce uygulamada ayarlanmamış olanı) düzgün bir şekilde almanın tek yolu, öncelikle NSUserDefaults'daki @ "appleLanguages" anahtarını şu şekilde temizlemektir:

[[NSUserDefaults standardUserDefaults]removeObjectForKey:@"AppleLanguages"];

Ardından, [NSLocale preferlanLanguages] artık doğru değeri döndürüyor.

Umarım bu yardım.


1

Swift 4 için güncellenmiş cevap

let language = Bundle.main.preferredLocalizations.first

Bunun, kullanılabilir (paket tarafından desteklenen, yani) ve tercih edilen (kullanıcı tarafından) yerelleştirmelerin toplu listesini aldığını unutmayın . NSLocale.preferredLanguagespaketin desteklediği şeye uymadan kullanıcının tercih ettiği ürünü iade etmelidir.
Jonny

1

Swift 3.0 için sorunuzu cevaplamak için aşağıdaki kod kullanılabilir:

 let language = Bundle.main.preferredLocalizations.first! as NSString

1

Swift 4.2 ve Xcode 10.1'de

let language = NSLocale.preferredLanguages[0]
print(language)//en

0

Apple belgelerine göre

NSUserDefaults* defs = [NSUserDefaults standardUserDefaults];
NSArray* languages = [defs objectForKey:@"AppleLanguages"];
NSString* preferredLang = [languages objectAtIndex:0];


0

Swift 3 için:

NSLocale.preferredLanguages ​​[0] Dize olarak


0

İOS 9'dan itibaren, dil kodunu sadece ülke kodu olmadan istiyorsanız, bu tür bir yardımcı işlev isteyeceksiniz - çünkü dil ülke kodunu içerecektir.

// gets the language code without country code in uppercase format, i.e. EN or DE
NSString* GetLanguageCode()
{
    static dispatch_once_t onceToken;
    static NSString* lang;
    dispatch_once(&onceToken, ^
    {
        lang = [[[NSLocale preferredLanguages] objectAtIndex:0] uppercaseString];
        NSRegularExpression* regex = [NSRegularExpression regularExpressionWithPattern:@"^[A-Za-z]+" options:0 error:nil];
        NSTextCheckingResult* match = [regex firstMatchInString:lang options:0 range:NSMakeRange(0, lang.length)];
        if (match.range.location != NSNotFound)
        {
            lang = [lang substringToIndex:match.range.length];
        }
    });
    return lang;
}

0

SWIFT 4

 // To get device default selected language. It will print like short name of zone. For english, en or spain, es.



let language = Bundle.main.preferredLocalizations.first! as NSString
    print("device language",language)

Bunun, kullanılabilir (paket tarafından desteklenen, yani) ve tercih edilen (kullanıcı tarafından) yerelleştirmelerin toplu listesini aldığını unutmayın . NSLocale.preferredLanguagespaketin desteklediği şeye uymadan kullanıcının tercih ettiği ürünü iade etmelidir.
Jonny
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.