কীভাবে সুইফট সহ বর্তমান ভাষার কোড পাবেন?


131

আমি সুইফটে লেখা আমার অ্যাপটিতে ডিভাইসের ভাষা কোড (এন, এস ...) পেতে চাই। এটি কীভাবে পাওয়া যায়?

আমি এটি চেষ্টা করছি:

var preferredLanguages : NSLocale!
let pre = preferredLanguages.displayNameForKey(NSLocaleIdentifier, value: preferredLanguages)

কিন্তু এই শূন্য ফিরে।

উত্তর:


185

সুইফ্ট 3 এ

let langStr = Locale.current.languageCode

13
হওয়া উচিত: লোকাল কোডার.আর.এফটিফায়ার তবে লোকাল কোডার.আর.গ্র্যাজকোড চাইনিজদের জন্য, এটি সর্বদা 'জেডএইচ' ফেরত আসে তবে এটি
জেডএইচ

2
@ ব্যবহারকারী 9527 আপনার কারণে সম্ভবত আপনার প্রকল্প সেটিংসে সেই ভাষার জন্য স্থানীয়করণ সক্ষম করা হয়নি।
কিরিল কুদায়েভ

'লোকালে' টাইপ করতে স্ট্রিংয়ের ধরণের মান নির্ধারণ করা যায় না?
পূজি ওয়াহানো

1
যতদূর আমি লক্ষ্য করেছি, সেটিংস -> সাধারণ -> ভাষা ও অঞ্চল -> আইফোন ভাষা কেবলমাত্র যদি আপনার প্রকল্পে প্রকল্প -> স্থানীয়করণের অধীনে আপনার ভাষাতে সক্ষম করা হয় তবে ভাষার জন্য স্থানীয় ভাষা সেট করা যায় language অন্যথায় এটি উন্নয়নের ভাষা।
হুরালঙ্ক

85

অ্যাপ্লিকেশন ভাষা এবং ডিভাইস লোকাল ভাষার মধ্যে পার্থক্য করা গুরুত্বপূর্ণ (নীচের কোডটি সুইফট 3 এ রয়েছে )

ডিভাইসের ভাষা ফিরিয়ে দেবে :

let locale = NSLocale.current.languageCode

অ্যাপ্লিকেশন ভাষা ফিরে আসবে :

let pre = Locale.preferredLanguages[0]

4
আমি ডিভাইস ভাষা বা অ্যাপ্লিকেশন ভাষার মধ্যে পার্থক্য বুঝতে পারি না। পার্থক্য সম্পর্কে আপনার কোনও ডকুমেন্টেশন আছে?
যিরমিয়

1
@ জেরেমিয়া লোকালে ডিভাইসের ভাষা থাকবে, উদাহরণস্বরূপ আপনার ডিভাইসের ভাষা ফ্রেঞ্চ ভাষায় কনফিগার করা হয়েছে। প্রাক ব্যবহারকারীর (বা অ্যাপ) পছন্দসই ভাষা ধারণ করবে, উদাহরণস্বরূপ: আপনার অ্যাপ্লিকেশনটি কেবল চাইনিজকে সমর্থন করে, তাই আপনি একটি ফরাসী ডিভাইসে একটি চীনা অ্যাপ্লিকেশন ইনস্টল করতে পারেন। আশা করি আমি এই 4 টি ইউ
রেডকে

আপনি যখন বলছেন যে ডিভাইসটি ফরাসিতে কনফিগার করা হয়েছে তখন আপনার অর্থ কী? দেখে মনে হয় যে আমি যদি ভাষাটি সেটিং-এ ইংরেজী ব্যতীত অন্য কোনও কিছুতে পরিবর্তন করি তবে এটি পছন্দসই ভাষাগুলিতে উপস্থাপন করা হয় তবে ভাষা কোডে নয়। ল্যাঙ্গুয়েজ কোডটি কীভাবে পরিবর্তিত হয়?
যিরমিয়

আপনি অন্যান্য এমন কিছু বিষয় যা ইংরেজি আপনি NSLocale.current.languageCode তার মান পেতে হবে সেটিংসে পরিবর্তন করেন তাহলে
raed

9
এটি কি অন্য পথে নয়? যখন আমার অ্যাপ্লিকেশন উন্নয়ন ভাষা টীকা এবং আমি ডি কনফিগার ডিভাইস, যার জন্য আমি অ্যাপ্লিকেশন ফল আঞ্চলিক চালানো: Locale.current.languageCode: de Locale.current.identifier: de_DE Locale.preferredLanguages[0]: de যখন আমার অ্যাপ্লিকেশন উন্নয়ন ভাষা টীকা এবং আমি একটি এফ আর কনফিগার ডিভাইসে চালানোর জন্য, যার জন্য আমি আছে না স্থানীয় অ্যাপটির ফলাফলটি হ'ল: Locale.current.languageCode: en Locale.current.identifier: en_FR Locale.preferredLanguages[0]: fr
আরজেন হিমস্ট্র্রা

55

সুইফ্ট 4 এবং 5:

Locale.current.languageCode

'লোকালে' টাইপ করতে স্ট্রিংয়ের ধরণের মান নির্ধারণ করা যায় না?
পুজি ওয়াহানো

2
চেষ্টা করুন Locale(identifier: Locale.current.identifier);
koen

Locale.autoupdatingCurrent.languageCodeএছাড়াও উপলব্ধ
সি বেস


35

আপনার অ্যাপ্লিকেশনে বর্তমান ভাষা ব্যবহার করতে (পছন্দের ভাষার চেয়ে আলাদা)

NSLocale.currentLocale().objectForKey(NSLocaleLanguageCode)!

29

3 এবং 4 এবং 4.2 এবং 5 এ স্যুইফ্ট করুন

Locale.current.languageCodeনিয়মিত সংকলন করে না কারণ আপনি আপনার প্রকল্পের জন্য স্থানীয়করণ প্রয়োগ করেন নি।

আপনার দুটি সম্ভাব্য সমাধান রয়েছে

1) String(Locale.preferredLanguages[0].prefix(2)) এটি সঠিকভাবে ফোন ল্যাং ফেরত।

আপনি যদি টাইপটি পেতে চান তবে আপনি এটি en-Enব্যবহার করতে পারেনLocale.preferredLanguages[0]

2) নির্বাচন করুন Project(MyApp)-> Project (not Target)-> এ + বোতাম টিপুন Localizations, তারপরে আপনার পছন্দসই ভাষা যুক্ত করুন।


এটি সত্যিই আকর্ষণীয়! আপনি কোথায় সমাধান সমাধান পড়েছেন? অ্যাপল ডকুমেন্টেশনে এই তথ্যটি খুঁজে পাওয়া যায় না
কুজডু

16

দ্রুত 3

let preferredLanguage = Locale.preferredLanguages[0] as String
print (preferredLanguage) //en-US

let arr = preferredLanguage.components(separatedBy: "-")
let deviceLanguage = arr.first
print (deviceLanguage) //en

1
"-" দ্বারা আলাদা ভাষা কোড এবং দেশের কোড বগি। আপনার কোডটি 'zh-Hans-US' এর মতো কিছু ক্ষেত্রে ভঙ্গ হবে।
এভিলিসন জিয়াং

let langStr = Locale.preferredLanguages.first!এটিই আমি এই পোস্টটি পর্যালোচনা করেছি। এটি কাজ করছে এবং langStr.lowercased().contains("es")উদাহরণস্বরূপ আমি সমস্ত স্প্যানিশ ভাষার প্রকরণের সাথে আমার ভাষার সাথে তুলনা করি ।
আয়ান ওরতেগা


7

আমি যখনই ব্যবহারকারী আমার অ্যাপ্লিকেশনটি চালু করি প্রতিবার সেটিংস অ্যাপে ব্যবহারকারীদের দ্বারা নির্বাচিত ভাষাটি আমি ট্র্যাক করতে চাই - এটি এখনও স্থানীয়করণ হয়নি (আমার অ্যাপটি কেবল ইংরেজিতে রয়েছে)। আমি এই যুক্তি গ্রহণ করেছি:

  1. অ্যারেতে ভাষাগুলি পরিচালনা করা আরও সহজ করার জন্য একটি এনাম তৈরি করুন

    enum Language: String {
    
    case none = ""
    case en = "English"
    case fr = "French"
    case it = "Italian"
    
    } // add as many languages you want
  2. একটি দম্পতি তৈরি এক্সটেনশন করার লোকেল

    extension Locale {
    
        static var enLocale: Locale {
    
            return Locale(identifier: "en-EN")
        } // to use in **currentLanguage** to get the localizedString in English
    
        static var currentLanguage: Language? {
    
            guard let code = preferredLanguages.first?.components(separatedBy: "-").last else {
    
                print("could not detect language code")
    
                return nil
            }
    
            guard let rawValue = enLocale.localizedString(forLanguageCode: code) else {
    
                print("could not localize language code")
    
                return nil
            }
    
            guard let language = Language(rawValue: rawValue) else {
    
                print("could not init language from raw value")
    
                return nil
            }
            print("language: \(code)-\(rawValue)")
    
            return language
        }
    }
  3. আপনার যখন প্রয়োজন হবে, আপনি কেবল এক্সটেনশনটি ব্যবহার করতে পারেন

    if let currentLanguage = Locale.currentLanguage {
        print(currentLanguage.rawValue)
        // Your code here.
    }

ধন্যবাদ @ সিস্কেল :)
মিনিয়াপ্পস

এক্সটেনশনটি ভালোবাসি :)। এটি কোনওভাবে পড়তে না পারলে আর ফিরে না আসা আরও অর্থবোধ করে না। কারণ সেই মানটি কিছু মান তৈরি করতে ব্যবহৃত হতে পারে।
অ্যালিক্স

5

সুইফটে, আপনি লোকেলটি ব্যবহার করে পেতে পারেন।

let locale = Locale.current.identifier

2

Locale.current.languageCode আমাকে ভুল কোড দেয়, তাই আমি এই এক্সটেনশনগুলি ব্যবহার করি:

extension Locale {
    static var preferredLanguageCode: String {
        let defaultLanguage = "en"
        let preferredLanguage = preferredLanguages.first ?? defaultLanguage
        return Locale(identifier: preferredLanguage).languageCode ?? defaultLanguage
    }

    static var preferredLanguageCodes: [String] {
        return Locale.preferredLanguages.compactMap({Locale(identifier: $0).languageCode})
    }
}

0

এটি আমি সুইফ্ট 5 এক্সকোড 11 এ ব্যবহার করি:

শ্রেণীর ভেরিয়েবলের ভিতরে:

let languagePrefix = Bundle.main.preferredLocalizations.first?.prefix(2)

এটি একটি স্ট্রিং হিসাবে আসে। এটি 2 টি অক্ষর, যেমন "এন", "এস", "ডি" প্রদান করে ...

এ থেকে আমি কোন ভাষাটি প্রদর্শিত হবে তা সহজেই নির্ধারণ করতে পারি:

 if languagePrefix == "es" { self.flipCard.setTitle("última carta", for: .normal) }
 if languagePrefix == "en" { self.flipCard.setTitle("Last Card", for: .normal) }

আপনি যদি ভাষাটির সম্পূর্ণ তথ্য চান, তবে? .প্রিফেক্স (2) সরান

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.