আইওএস-এ বর্তমান ডিভাইসের ভাষা পাচ্ছেন?


431

আমি ডিভাইস ইউআই ব্যবহার করছে এমন বর্তমান ভাষাটি প্রদর্শন করতে চাই। আমি কোন কোড ব্যবহার করব?

আমি এটি NSStringপুরোপুরি বানানযুক্ত ফর্ম্যাট হিসাবে চাই । (@ "En_US" নয়)

সম্পাদনা: যারা গাড়ি চালাচ্ছেন তাদের জন্য এখানে অনেকগুলি দরকারী মন্তব্য রয়েছে, কারণ উত্তরটি নতুন আইওএস রিলিজের সাথে বিকশিত হয়েছে।


1
এটি অন্তর্নির্মিত হয় NSLocale। আমার উত্তর দেখুন।
এরিক বি

15
আইওএস 9 মন্তব্য: কিছু অদ্ভুত কারণে, অ্যাপল ফিরিয়ে দেওয়া ফর্ম্যাটটি পরিবর্তন করেছে যেদিকে মনোযোগ দিন [NSLocale preferredLanguages]। এটি আন্ডারস্কোর (যেমন en_US) দ্বারা পৃথক করা হত , তবে এখন এটি ড্যাশে পরিবর্তিত হয়েছিল:en-US
ইশাহাক

7
আইওএস 9-তে আরও: আইওএস 8.4 সিমুলেটার বনাম 9.0 সিমুলেটারে [এনএসলোকেল পছন্দের ভাষাগুলি] পাওয়ার ক্ষেত্রেও তফাত রয়েছে। আইওএস 8.4 এ এটি "এনএন" এবং আইওএস 9.0 এটি "এন-ইউএস"
ক্রিস সুব্রাম্যানিয়ান

এই মন্তব্যটি আমাকে অনেক সাহায্য করেছে! আপনার মন্তব্যটি না দেখলে আমরা প্রায় 1 ঘন্টা কী ভুল হয়েছে তা ভেবে আমরা একটি সাধারণ সমস্যা নিয়ে আটকে ছিলাম।
থানডাসুরু

3
NSLocaleপদ্ধতি রয়েছে componentsFromLocaleIdentifier:এবং localeIdentifierFromComponents:যা সম্ভবত (সম্ভাব্য পরিবর্তনশীল) ফর্ম্যাটটি হ্যান্ডেল করার সঠিক উপায়।
বেঞ্জোহন

উত্তর:


808

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

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

এটি বর্তমানে নির্বাচিত ভাষার জন্য একটি দুটি বর্ণ কোড প্রদান করবে। ইংরেজির জন্য "এন", স্প্যানিশের জন্য "এস", জার্মানির জন্য "দে" ইত্যাদি more

আইএসও 639-1 কোডের তালিকা

তারপরে দুটি অক্ষর কোডকে আপনি যে স্ট্রিংতে প্রদর্শন করতে চান তাতে রূপান্তর করার বিষয়টি সাধারণ বিষয়। সুতরাং এটি যদি "এন" হয় তবে "ইংরাজী" প্রদর্শন করুন।

আশা করি এটি এমন কাউকে সহায়তা করবে যিনি অঞ্চল এবং বর্তমানে নির্বাচিত ভাষার মধ্যে পার্থক্য দেখাচ্ছেন।

সম্পাদনা

NSLocale.h থেকে শিরোনামের তথ্য উদ্ধৃত করার পক্ষে মূল্যবান:

+ (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

অ্যাপ্লিকেশন ভাষার প্রতি আগ্রহী ব্যক্তিরা @ মাইন্ডভিশনের উত্তরটি একবার দেখুন


2
ঠিক আমি খুঁজছেন ছিল কি. অঞ্চলটি ভাষার মতো নয় বলে আমার একই সমস্যা ছিল।
জাসারিয়েন

12
খারাপ উত্তর: চিহ্ণদের জন্য zh-Hans প্রদান করে, যা আইসো কোড নয়।
সাইরিলচ্যাম্পিয়ার

2
প্রথম দুটি অক্ষর দেশকে দেয়, ড্যাশ দেওয়ার পরে স্টাফ অঞ্চল দেয়, বাকিটি কেবল এটি আরও সংকীর্ণ করার জন্য (যেমন স্থানীয় উপভাষা)। zh চাইনিজদের আইসো কোড হিসাবে তালিকাভুক্ত। আমি যেমন নির্দিষ্ট ভাষা খুঁজছিলাম তাদের জন্য আইএএনএ রেজিস্ট্রি
Xono

3
zh-હંস একমাত্র ব্যতিক্রম বা অন্যান্য ভাষা কোড আছে যা আইএসও 639-1 মান থেকে পৃথক?
এমপিওলো

57
সতর্কতা: আইওএস 9-এ ,NSLocale preferredLanguagesপরিবর্তিতটিরফেরতের মানপরিবর্তিত হয়েছে। আপনি কেবল "এন" পাওয়ার আগে, আইওএস 9-এ আপনি "এন-ইউএস" বা "এন-জেপি" ইত্যাদি পাবেন Re
ডিজে এস

281

নির্বাচিত উত্তরটি বর্তমান ডিভাইসের ভাষা প্রদান করে তবে অ্যাপটিতে ব্যবহৃত প্রকৃত ভাষা নয়। যদি আপনি আপনার অ্যাপ্লিকেশনটিতে ব্যবহারকারীর পছন্দের ভাষার জন্য স্থানীয়করণ সরবরাহ না করেন তবে ব্যবহারকারীর পছন্দের আদেশ অনুসারে অর্ডার করা প্রথম স্থানীয়করণ ব্যবহৃত হয়।

আপনার স্থানীয়করণের মধ্যে নির্বাচিত বর্তমান ভাষাটি আবিষ্কার করতে ব্যবহার করুন

[[NSBundle mainBundle] preferredLocalizations];

উদাহরণ:

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

সুইফট:

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

দুর্দান্ত, এটিই আমার আগ্রহী ছিল। পরীক্ষিত এবং এটি সঠিকভাবে কাজ করে!
স্মাইলিবার্গ

5
পারফেক্ট! এটির সাহায্যে কেবলমাত্র আমার অ্যাপ্লিকেশনকে অগ্রাধিকারযোগ্য ক্রমে সমর্থন করে এমন ভাষাগুলি দিয়ে স্থানীয়করণ করা দূরবর্তী সংস্থান পথ তৈরি করতে অনুমতি দেয়।
ইয়েভেন ডাবিনিন

এর পরে যদি আমরা পুরো ভাষার নাম পেতে চাই?
শাবরিনাথ পাব্বা

আপনি যদি পছন্দের লোকালাইজেশন থেকে পুরো ভাষার নাম পেতে চান তবে আপনি [[NSLocale বরাদ্দ] initwithLocaleIdentifier: ভাষা] (উপরে থেকে) ব্যবহার করতে পারেন। তারপরে আপনার লোকেল রয়েছে এবং ডিসপ্লেনেম ফরফোকে কল করতে পারেন।
ভ্যানেসা ফোর্নি

87

আইওএস 9 এর সমাধান:

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

ভাষা = "এন-ইউএস"

NSDictionary *languageDic = [NSLocale componentsFromLocaleIdentifier:language];

ল্যাঙ্গুয়েডিকের প্রয়োজনীয় উপাদান থাকবে

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

কান্ট্রি কোড = "মার্কিন"

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

ল্যাঙ্গুয়েজ কোড = "এন"


5
কেসিএফলোক্যালল্যাঙ্গোয়েজকোডেকি একটি সংজ্ঞায়িত ধ্রুবক যা আপনি নিজের স্ট্রিং তৈরির পরিবর্তে ব্যবহার করতে পারেন।
SNyamathi

1
NSLocaleLanguageCode = @ "kCFLocaleCountryCodeKey"
কাক

@ "কেসিএফএলএকএলএকজনারীকোডেকি", @ "কেসিএফএলএক লোকাল্যাঙ্গোজকোডেকি" এর জন্য এনএসলোক্যালকাউন্ট্রি কোড এবং এনএসলোক্যাল্যাঙ্গোজি কোড ব্যবহার করুন, প্রতিক্রিয়া হিসাবে
কাক

65

এটি সম্ভবত আপনি যা চান তা আপনাকে দেবে:

NSLocale *locale = [NSLocale currentLocale];

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

এটি ভাষার নামটি, ভাষাতেই দেখাবে। উদাহরণ স্বরূপ:

Français (France)
English (United States)

31
ভুল উত্তর: এটি স্থানীয়ভাবে ফিরিয়ে দেয়, ভাষা নয়, যা আলাদা হতে পারে ...
সাইরিলচ্যাম্পিয়ার

4
এটি স্পষ্টতই ভুল, উদাহরণস্বরূপ, আপনি যদি ফোনের সেটিংসে ভাষাটি ইংরেজিতে সেট করেন এবং অঞ্চলটিকে জার্মান, জার্মানি বলতে চান তবে উপরের উদাহরণটি "জার্মান" দেয় returns তবুও ফোনের ভাষাটি ইংরাজীতে সেট করা আছে।
জেক_হেটফিল্ড

2
এটি মোটেও ভুল নয়। লোকেলে ভাষা এবং অঞ্চল উভয়ই তথ্য থাকে। সুতরাং @ জ্যাক_হেথফিল্ডের উদাহরণে এটি "জার্মান" ফিরিয়ে দেবে না, এটি "ইংরাজী (জার্মানি)" ফিরিয়ে দেবে। এটি ড্রিমল্যাবের উত্তরগুলির সাথে একত্রে সঠিক উত্তর হওয়া উচিত।
সানআরআর

36

সাবধানবাণীগৃহীত, এবং অন্যান্য উত্তরগুলি সমস্তই বিবেচনায় নেয় না যে পছন্দসই ভাষা ডিভাইসের ভাষার চেয়ে অন্য ভাষা হতে পারে

ডিভাইস ভাষা যা অপারেটিং সিস্টেম উপাদান এবং অ্যাপল অ্যাপস উপস্থাপন করা হয় ভাষা।

পছন্দের ভাষা ভাষা ব্যবহারকারী। অ্যাপল শুধুমাত্র অনুবাদের একটি সীমিত সেট প্রদান স্থানীয় অ্যাপ্লিকেশান নেই চাই হয়। পছন্দসই ভাষা যদি এক ভাষা অ্যাপল তাদের অ্যাপ্লিকেশনগুলিতে অনুবাদ করে তবে এটি ডিভাইসের ভাষাও হবে। তবে ব্যবহারকারী যদি এমন কোনও ভাষা পছন্দ করেন যার জন্য অ্যাপল ডিভাইস অনুবাদগুলি সরবরাহ করে না এবং পছন্দসই ভাষা মেলে না । ডিভাইসের ভাষা পছন্দসই ভাষার তালিকায় প্রথম অবস্থানে থাকবে না।

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

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
}

যদি পছন্দের ভাষার তালিকাটি হয় তবে এটি কাজ করে:

  1. আফ্রিকান্স (আইওএস আফ্রিকান ভাষায় অনুবাদ হয় না)
  2. স্প্যানিশ (ডিভাইসের ভাষা)

পছন্দসই ভাষা তালিকা করা যেতে পারে সম্পাদনা : Settings.app -> সাধারণ -> ভাষা ও অঞ্চল -> পছন্দের ভাষাটি অবশ্যই ক্রম অনুসারে


আপনি ডিভাইসের ভাষা কোডটি ব্যবহার করে ভাষাটির নামে অনুবাদ করতে পারবেন। নিম্নলিখিত লাইনগুলি ডিভাইসের ভাষায় ডিভাইসের ভাষা মুদ্রণ করবে। উদাহরণস্বরূপ "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)
    }
} 

আমার বোধগম্যতা হল এটি দিয়ে আপনার বান্ডিল উদাহরণটি শুরু করে NSBundle(forClass: UIView.self) আপনি আপনি কোনও প্রদত্ত দর্শনের জন্য সুনির্দিষ্ট ভাষা সরবরাহ করার চেষ্টা করছেন। তবে এটি ব্যবহার করে আমি একটি ইস্যুতে ছড়িয়ে পড়েছি যেখানে প্রদত্ত শ্রেণীর জন্য কোনও ভাষা ফেরত দেওয়া হয়নি। আমি সূচনাটি পরিবর্তিত করেছিলাম NSBundle.mainBundle()এবং প্রত্যাশিত ভাষা কোডটি ফেরত দেওয়া হয়েছিল।
পলমি

স্পেসিফিকেশন: এর সাথে বান্ডেলটি আরম্ভ mainBundle()করা আপেল দ্বারা প্রস্তাবিত এক হিসাবে প্রস্তাবিত হিসাবে উপস্থিত হয়েছে 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
পলমি

@ পুরিয়া NSBundle.mainBundle()আপনার অ্যাপ্লিকেশন বান্ডেলটি NSBundle(forClass: UIView.self)ফিরিয়ে দেয় , যেখানে সিস্টেমগুলি ইউআইকিট বান্ডেল দেয়। বর্ণিত পদ্ধতিটি বান্ডলে ডিরেক্টরিগুলির সন্ধান করে। আপনার অ্যাপ্লিকেশন বান্ডেলটি কেবলমাত্র সেই ভাষাগুলির জন্য থাকবে যা আপনি স্থানীয় করতে চান। ডিভাইসের ভাষা নির্ধারণ করতে আপনাকে সিস্টেম বান্ডিল পরীক্ষা করতে হবে।
স্বপ্নলাখ

1
@ পুরিয়া ইস্যুটি হতে পারে আইওএস 9 এর থেকে ফেরতের মানগুলি পরিবর্তন করেছে NSLocale.preferredLanguages()। আমি iOS 9 সমর্থন করার জন্য উত্তর আপডেট করেছি
স্বপ্নালব

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

12

আমি এটি ব্যবহার করি

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

স্মৃতি ফাঁস উপেক্ষা করুন ..

এবং ফলাফল হয়

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

শুধু কৌতূহলের জন্য, এখানে স্মৃতি ফাঁস কোথায়?
পোয়েরাজোয়েলু

ফুটো - [[[এনএসলোকেল বরাদ্দ] initWithLocaleIdentifier: ল্যান]।
পাভেল

1
যদিও কেবল নন-এআরসি প্রকল্পের জন্য।
জোশ হিনম্যান

12

যেমন অনুবাদ ভাষা কোডের en_US মধ্যে ইংরেজি (মার্কিন যুক্তরাষ্ট্র) একটি বৈশিষ্ট্য সালে নির্মিত হয় NSLocaleএবং NSLocaleগ্রাহ্য না করে তুমি কোথা থেকে ভাষা কোডগুলি পান। সুতরাং গ্রহণযোগ্য উত্তর হিসাবে পরামর্শ হিসাবে আপনার নিজের অনুবাদ বাস্তবায়নের কোনও কারণ নেই।

// 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);

প্রিন্ট: ইংরেজি, জার্মান, সুইডিশ


1
প্রকৃতপক্ষে, আপনার স্থানীয় দৃষ্টান্তটি আরম্ভ করার জন্য আপনার [এনএসলোকেল স্বতঃপাদকরণকেনারলোক্যাল] ব্যবহার করা উচিত। এইভাবে ভাষার নাম ব্যবহারকারীদের মাতৃভাষায় প্রদর্শিত হবে। উদাহরণস্বরূপ সুইডেন সুইভেনস্কায় পরিণত হবে।
ম্যাকিয়েজ সুইচ

8

এমনকি বর্তমান ডিভাইসের ভাষা পাওয়ার আরও ভাল উপায় রয়েছে। কোডের নীচে চেষ্টা করে দেখুন -

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

দ্বারা প্রস্তাবিত Abizern উপর এখানে


7

আপনি এই displayNameForKey:value:পদ্ধতিটি ব্যবহার করতে পারেন 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"]);

এটি মুদ্রণ করবে:

français (France)
anglais tats-Unis)

আপনার জন্য একই লোকেল আইডেন্টিফায়ার উল্লেখ করেন initWithLocaleIdentifier:এবং displayNameForKey:value:পদ্ধতি, তাহলে এটি আপনি ভাষা নেটিভ নাম দিতে হবে। আমি আবিষ্কার করেছি যে আপনি যদি কান্ট্রি কোড সরিয়ে শুধু ব্যবহার frএবং en, এটি প্রদর্শন নাম থেকে দেশকে বাদ করবে (Mac OS X এর উপর অন্তত আইওএস সম্পর্কে নিশ্চিত নয়)।


6

দ্রুতগতি

ডিভাইসের বর্তমান ভাষা পেতে

NSLocale.preferredLanguages()[0] as String

আবেদনের ভাষা পেতে

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

বিঃদ্রঃ:

এটি আপনি সিএফবান্ডেলডেভলপমেন্ট রিজিওনে যে ভাষা দিয়েছেন তা এনেছে info.plist এর

যদি CFBundleAllowMixedLocalizations এর info.plist তারপর প্রথম আইটেম সত্য CFBundleLocalizations মধ্যে info.plist ফিরিয়ে দেওয়া হয়


6

আমি নিজের জন্য সঠিক সমাধান বের করার চেষ্টা করেছি। আমি যখন ব্যবহার করিLocale.preferredLanguages.first আপনার অ্যাপ্লিকেশন সেটিংস থেকে পছন্দসই ভাষা ফিরে আসে।

আপনি যদি ব্যবহারকারী ডিভাইস সেটিংস থেকে ভাষা জানতে চান তবে নীচের ব্যবহারের স্ট্রিংটি আপনার উচিত:

সুইফট 3

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

মোড়ানো এবং নীচের লাইনটি দেখুন ব্যবহার করতে:

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

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

আপনি যদি এই Bundle.main.preferredLocalizations [0] টি স্ট্রিং হিসাবে ব্যবহার করেন তবে আপনাকে মোড় করতে হবে না
λαβέ.λαβέ

5

ব্যবহারকারীর ডিভাইস বর্তমান ভাষা পাওয়ার জন্য নিম্নলিখিত কোডটি এটি আমার জন্য কাজ করে।

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

4

আইওএস 13, সুইফ্ট 5+, ডাব্লুডাব্লুডিসি 2015 https://developer.apple.com/videos/play/wwdc2019/403/

ব্যবহারকারীরা ওএস ভাষা থেকে কোনও অ্যাপের পছন্দসই ভাষা স্বাধীনভাবে নির্বাচন করতে পারেন।

আপনি এগুলি ব্যবহার করতে পারেন:

    // 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

মনো টাচ সি # বিকাশকারীদের জন্য ব্যবহার করুন:

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

দ্রষ্টব্য: আমি জানি এটি একটি আইওএসের প্রশ্ন ছিল, তবে আমি যেমন মনো টাচ বিকাশকারী, এই পৃষ্ঠার উত্তর আমাকে সঠিক দিকে নিয়ে গেছে এবং আমি ভেবেছিলাম ফলাফলগুলি ভাগ করব share


আমি বর্তমানে NSLocale.PreferredLanguages ​​ব্যবহার করছি এবং আমি একটি খালি অ্যারে পাচ্ছি। আমি ধরে নিয়েছি আপনি ডকুমেন্টেশনে পড়েছেন যে এটি কখনও খালি হতে পারে না তবে আমি এটি কোথাও দেখতে পাচ্ছি না?
জেফুল্কস

না, সত্যি বলতে এটি কেবল আমার নিজের একটি ধারণা ছিল।
চক সেভেজ

@ ল্যারিএফ এই ভিডিওটি দেখুন: jonas.follesoe.no/2011/07/22/cross-platform-momot-ndc-2011 আপনার কোড / মাল্টি-প্ল্যাটফর্ম অ্যাপ্লিকেশন কীভাবে গঠন করবেন সে সম্পর্কে এটি খুব তথ্যবহুল।
চক সেভেজ


3

সুইফট 3

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

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

3

সাধারণ সুইফট 3 ফাংশন:

  @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

আপনি যদি পছন্দের ভাষার কোড ("এন", "ডি", "এস" ...) এবং স্থানীয়ীকৃত পছন্দের ভাষার নাম (বর্তমান লোকেলের জন্য) সন্ধান করছেন, তবে সুইফটে এখানে একটি সাধারণ এক্সটেনশান রয়েছে:

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

আপনি যদি এখানে কেবল ভাষা পেতে চান তবে আমার প্রস্তাবিত উত্তর:

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

আমার ক্ষেত্রে আমি কেবল স্থানীয় ভাষা চাই স্থানীয় অঞ্চল নয় region

আউটপুট: যদি আপনার স্থানীয় ভাষা জাপানি হয় এবং স্থানীয় অঞ্চল জাপান হয় তবে:

langplusreg = জা-জেপি

langonly = জা


1

সুইফটে @ আমিরের প্রতিক্রিয়া:

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

1

স্পষ্টতই, সমাধানগুলি নির্ভর করে, উদাহরণস্বরূপ

[[NSLocale preferredLanguages] objectAtIndex:0]

সাধারণত সূক্ষ্মভাবে কাজ করে এবং বর্তমান ডিভাইসের ভাষা ফিরে আসে।

তবে এটি কিছু ক্ষেত্রে বিভ্রান্তিকর হতে পারে:

আপনি যে অ্যাপটিতে এই মানটি পেতে চান তা যদি ইতিমধ্যে ভাষা পরিবর্তন করে থাকে, উদাহরণস্বরূপ এই ধরণের কোড সহ:

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

এই ক্ষেত্রে, [এনএসলোকেলে পছন্দের ভাষাগুলি] আসলে এই বিশেষ অ্যাপটিতে পছন্দসই ভাষা সেটটি (এবং ব্যবহৃত) ফিরিয়ে দেয়, বর্তমান ডিভাইসের ভাষা নয়!

এবং ... এক্ষেত্রে আসল বর্তমান ডিভাইসের ভাষা সঠিকভাবে পাওয়ার একমাত্র উপায় (এবং এটি অ্যাপ্লিকেশনটিতে আগে সেট করা হয়নি), প্রথমে এনএসউসারডেফাল্টসে কী @ "আপেলল্যাঙ্গোজেজস" মুছে ফেলা হবে:

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

তারপরে, [এনএসলোকেলের পছন্দের ভাষাগুলি] এখন সঠিক মান প্রদান করে।

এই সাহায্য আশা করি।


1

সুইফট 4 এর জন্য আপডেট উত্তর

let language = Bundle.main.preferredLocalizations.first

লক্ষ্য করুন এই রাশীকৃত তালিকা নিয়ে আসে প্রাপ্তিসাধ্য এবং (বান্ডিল অর্থাত আপনি সমর্থন করে) পছন্দের (ব্যবহারকারী দ্বারা) স্থানীয়করণের। NSLocale.preferredLanguagesবান্ডেলটি যা সমর্থন করে তাতে মান না দিয়ে ব্যবহারকারীর পছন্দসই বিষয়গুলি ফিরিয়ে দেওয়া উচিত।
জনি

1

সুইফট ৩.০ এর জন্য নীচের কোডটি আপনার প্রশ্নের উত্তর দিতে ব্যবহার করা যেতে পারে:

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

1

সুইফটে 4.2 এবং এক্সকোড 10.1

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




0

আইওএস 9-র হিসাবে, আপনি যদি কেবল দেশের কোডবিহীন ভাষা কোড চান তবে আপনি এই ধরণের সহায়ক ফাংশনটি চান - যেহেতু ভাষাতে দেশের কোড থাকবে।

// 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

স্যুইফ্ট -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)

নোট করুন যে এটি উপলব্ধ (বান্ডেল দ্বারা সমর্থিত অর্থাত্) আপনার পছন্দসই (ব্যবহারকারী দ্বারা) স্থানীয়করণের তালিকা সংগ্রহ করে। NSLocale.preferredLanguagesবান্ডেলটি যা সমর্থন করে তাতে মান না দিয়ে ব্যবহারকারীর পছন্দসইগুলি ফিরিয়ে দেওয়া উচিত।
জনি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.