সুইসটে এনএসলোক্যালাইজড স্ট্রিং সমতুল্য কী?


228

একটি সুইফ্ট সমতুল্য আছে? NSLocalizedString(...) ? ইন Objective-C, আমরা সাধারণত:

NSString *string = NSLocalizedString(@"key", @"comment");

আমি কীভাবে সুইফটে একই অর্জন করতে পারি? আমি একটি ফাংশন পেয়েছি:

func NSLocalizedString(
    key: String,
    tableName: String? = default,
    bundle: NSBundle = default,
    value: String = default,
    #comment: String) -> String

তবে এটি খুব দীর্ঘ এবং আদৌ সুবিধাজনক নয়।


2
কোড স্নিপেটের সংক্ষিপ্ত সংস্করণ তৈরি করা সেরা: এনএসলোক্যালাইজড স্ট্রিং ("", মন্তব্য: "") ... ... আমি এক্সটেনশন সমাধানটি পছন্দ করেছি, তবে সমস্যাটি হচ্ছে জেনস্ট্রিংগুলি এই স্ট্রিংগুলিকে অনুবাদ ফাইলে ক্যাপচার করবে না।
মতেজ উকমার

3
সুইফ্ট 3 এ আপনি কেবলমাত্র NSLocalizedString("Cancel", comment: "Cancel button title")ডিফল্ট মানগুলির সুবিধা গ্রহণ করতে পারেন । এটা আমার মনে হয় সুবিধাজনক।
LShi

এই স্থানীয়করণ (STRING এক্সটেনশন, বিভিন্ন স্ট্রিং টেবিল এবং এমনকি pluralization) সম্পর্কে একটি খুব ভাল নিবন্ধ medium.com/@marcosantadev/...
LightMan

একটি দৃ rob়
@

উত্তর:


373

আমি পরবর্তী সমাধান ব্যবহার:

1) এক্সটেনশন তৈরি করুন:

extension String {
    var localized: String {
        return NSLocalizedString(self, tableName: nil, bundle: Bundle.main, value: "", comment: "")
    }
}

2) স্থানীয়করণযোগ্য.স্ট্রিস্টিং ফাইলে:

"Hi" = "Привет";

3) ব্যবহারের উদাহরণ:

myLabel.text = "Hi".localized

উপভোগ করেন! ;)

--upd: -

মন্তব্যের ক্ষেত্রে আপনি এই সমাধানটি ব্যবহার করতে পারেন:

1) এক্সটেনশন:

extension String {
    func localized(withComment:String) -> String {
        return NSLocalizedString(self, tableName: nil, bundle: Bundle.main, value: "", comment: withComment)
    }
}

2) .স্ট্রিংস ফাইলটিতে:

/* with !!! */
"Hi" = "Привет!!!";

3) ব্যবহার:

myLabel.text = "Hi".localized(withComment: "with !!!")

92
genstringsএটির সাথে একমাত্র সমস্যাটি হ'ল আপনি নিজের .strings ফাইলগুলি তৈরি করতে ইউটিলিটিটি ব্যবহার করতে পারবেন না ।
নেড

9
এটা খুব ভাল ধারণা! আমি এটি পরিবর্তন করে func localized(comment: String = "") -> Stringএটি আরও সামান্য স্মার্ট করেছিলাম যাতে এটি আরও ছোট হয় এবং
গুই মৌরা

2
এর genstringsসাথে কীভাবে ব্যবহার করবেন কোনও ধারণা ?
ক্রিস

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

14
আমি এই দুর্দান্ত সমাধানটি github.com/marmelroy/Localize-Swift এ প্রয়োগ করেছি । লেখক অন্তর্ভুক্ত কাস্টম পাইথন স্ক্রিপ্ট দ্বারা জেনস্ট্রিংয়ের সমস্যাও সমাধান করা হয়। আমি লেখক নই।
টমেক সেজনার

279

NSLocalizedStringসুইফট বিশ্বে এছাড়াও বিদ্যমান।

func NSLocalizedString(
    key: String,
    tableName: String? = default,
    bundle: NSBundle = default,
    value: String = default,
    #comment: String) -> String

tableName, bundle, এবং valueপরামিতিগুলি দিয়ে চিহ্নিত করাdefault শব্দ যার অর্থ হল আমরা এই পরামিতি ফাংশন কলিং যখন বর্জন করতে পারেন। এই ক্ষেত্রে, তাদের ডিফল্ট মান ব্যবহৃত হবে।

এটি একটি উপসংহারে নিয়ে যায় যে পদ্ধতি কলটি এখানে সরল করা যেতে পারে:

NSLocalizedString("key", comment: "comment")

সুইফট 5 - কোনও পরিবর্তন নেই, এখনও এর মতো কাজ করে।


44
এটি কেবলমাত্র পার্থক্য যে মন্তব্যটি নিখুঁত হতে পারে না এবং সংক্ষিপ্ত সংস্করণের জন্য স্বয়ংক্রিয়রূপটি স্বজ্ঞাত থেকে দূরে।
মার্সিন

1
এটি আর কাজ করছে না বলে আমি ত্রুটি পেয়েছি যে যথেষ্ট আর্গুমেন্ট ব্যবহার করা হচ্ছে না।
অ্যাপস 4 ইউ

2
উপরেরটি এক্সকোড in.৩ এ সঠিক নয়, উদ্দেশ্য-সি থেকে নির্দিষ্ট পরিবর্তন সহ সুইফট ১.২ এ মন্তব্যটি (মার্কিন বর্ণিত হিসাবে) শূন্য হতে পারে না, তবে এটি "খালি" হতে পারে।
নীল

2
একটি শূন্য / খালি মন্তব্য স্ট্রিং ফাইলের পরে স্ট্রিংটি স্থানান্তর করা শক্ত করে; অন্য কোনও কিছুই যদি শ্রেণি / ফাইলের নাম যুক্ত না করে যেখানে এটি মন্তব্য হিসাবে ব্যবহৃত হয়।
জোহান

এটা সঠিক উত্তর. অ্যাপল একবার সুইফ্টের জন্য এটি আপডেট করে দিলে, এক্সকোড কেবলমাত্র এই নতুন এপিআইটিকে তার নতুন সুইফ্ট এপিআইতে স্বতঃ-রূপান্তর করতে সক্ষম হবে এবং অন্য কিছুই ভাঙবে না। এমনকি বর্তমানে এক্সকোডের রিফ্রাক্টর মেনুতে (v 11.4.1) এমন একটি Wrap in NSLocalizedStringবিকল্প রয়েছে যা কেবলমাত্র টেক্সট হাইলাইট করে ডান-ক্লিক করে এবং মেনু আইটেমটি নির্বাচন করে জিনিসগুলি সত্যই সহজ করে তোলে।
ইথান অ্যালেন

28

বিদ্যমান উত্তরের বিভিন্নতা:

সুইফ্ট 5.1:

extension String {

    func localized(withComment comment: String? = nil) -> String {
        return NSLocalizedString(self, comment: comment ?? "")
    }

}

তারপরে আপনি এটিকে সহজেই বা মন্তব্য ছাড়াই ব্যবহার করতে পারেন:

"Goodbye".localized()
"Hello".localized(withComment: "Simple greeting")

দয়া করে মনে রাখবেন যে genstringsএই সমাধানটি দিয়ে কাজ করবে না।


14

এই উপায়টি ব্যবহার করে বিভিন্ন ধরণের (যেমন ইন্টার বা কাস্টম ইউনিট, ... এর মতো কাস্টম ক্লাস) এর জন্য একটি পৃথক বাস্তবায়ন তৈরি করা সম্ভব। জেনস্ট্রিংস ইউটিলিটিটি ব্যবহার করে এই পদ্ধতির জন্য স্ক্যান করাও সম্ভব। কমান্ডটিতে কেবল রুটিন পতাকা যুক্ত করুন

genstrings MyCoolApp/Views/SomeView.swift -s localize -o .

এক্সটেনশান:

import UIKit

extension String {
    public static func localize(key: String, comment: String) -> String {
        return NSLocalizedString(key, comment: comment)
    }
}

ব্যবহার:

String.localize("foo.bar", comment: "Foo Bar Comment :)")

এই উত্তরটি আশ্চর্যজনক এবং আরও উত্সাহ দেওয়া উচিত! আপনি এখনও অন্য লাইব্রেরি না এড়াতে চাইলে এটি এখন পর্যন্ত পাওয়া সবচেয়ে সহজ সমাধান। এটি একটি ভাল নেটিভ সমাধান।
cgossain

6

সুইফট 3 সংস্করণ:) ...

import Foundation

extension String {
    var localized: String {
        return NSLocalizedString(self, tableName: nil, bundle: Bundle.main, value: "", comment: "")
    }
}

6

প্রকৃতপক্ষে, আপনি সুইফট প্রকল্পগুলিতে আপনার পাঠ্যগুলি অনুবাদ করতে দুটি পর্যায় ব্যবহার করতে পারেন:

1) প্রথম পর্যায়ে আপনার সমস্ত অনুবাদযোগ্য স্ট্রিং তৈরি করতে পুরানো উপায়টি ব্যবহার করা হচ্ছে:

NSLocalisedString("Text to translate", comment: "Comment to comment")

1.1) তারপরে লোকালাইজেবল.স্ট্রিংগুলি তৈরি করতে আপনার জেনস্ট্রিংগুলি ব্যবহার করা উচিত:

$ genstrings *swift

2) পরে, আপনার এই উত্তরটি ব্যবহার করা উচিত

২.১) নিয়মিত অভিব্যক্তির ভিত্তিতে আপনার এক্সকোড "খুঁজুন এবং প্রতিস্থাপন করুন" বিকল্পটি ব্যবহার করুন। প্রদত্ত উদাহরণ হিসাবে (আপনার কোনও মন্তব্য না থাকলে) নিয়মিত প্রকাশটি হ'ল:

NSLocalizedString\((.*)\, comment:\ \"\"\) 

এবং এটি দিয়ে প্রতিস্থাপন

$1.localized

বা (আপনার যদি মন্তব্য থাকে)

NSLocalizedString\((.*)\, comment:\ (.*)\)

এবং এটি দিয়ে প্রতিস্থাপন

$1.localizedWithComment(comment: $2)

আপনি ইচ্ছেমতো রেগেক্স এবং বিভিন্ন এক্সটেনশন সংমিশ্রণের সাথে খেলতে পারেন। সাধারণ পদ্ধতিটি পুরো প্রক্রিয়াটি দুটি পর্যায়ে বিভক্ত করছে। আশা করি এইটি কাজ করবে.


1
দুঃখিত আমি এখানে অনেক উত্তরের পয়েন্ট পাই না। পদ্ধতি ব্যবহার করে NSLocalizedString("Cancel", comment: "Cancel button title")কী লাভ ?
LShi

1
@ এল শি কিছু লোক অভিযোগ NSLocalizedStringকরছিলেন যে এটিকে দেখতে দেখতে সুইফিয়ার কম দেখায়। String.localizedঅন্যদিকে আরও সুইফ্টি দেখায় তবে আপনি gesntringsএটির সাথে ইউটিলিটি ব্যবহার করতে অক্ষম হন যা সাধারণত আন্তর্জাতিকীকরণের মাধ্যমে আপনার কাজটি সহজ করার জন্য ব্যবহৃত হয়। আমার বক্তব্য এটি উভয় পদ্ধতির মিশ্রিত করা বেশ সহজ pretty সুতরাং মূলত এটি পঠনযোগ্যতার প্রশ্ন।
GYFK

আপনার যদি আরও এক দফা করার দরকার হয় তবে কী হবে genstrings? তোমাদের সবাইকে ফিরে প্রতিস্থাপন না .localizedদ্বারা NSLocalizedString?
ক্রিশটিক

5

কেসগুলির জন্য একটি ছোট সহায়ক সাহায্যকারী পদ্ধতি তৈরি করেছেন, যেখানে "মন্তব্য" সর্বদা উপেক্ষা করা হয়। কম কোড পড়া সহজ:

public func NSLocalizedString(key: String) -> String {
    return NSLocalizedString(key, comment: "")
}

এটিকে যে কোনও জায়গায় রাখুন (শ্রেণীর বাইরে) এবং এক্সকোড এই বিশ্বব্যাপী পদ্ধতিটি খুঁজে পাবেন।


12
এটা খারাপ অভ্যাস। মন্তব্যগুলি প্রস্তাবিত এবং সহায়ক হয় যদি না আপনি নিজেই সমস্ত অনুবাদটি না করে থাকেন।
জেরেমিয়া

এমনকি যদি আপনি নিজের অনুবাদ করছেন, মন্তব্যগুলি সহায়ক হবে, বিশেষত একটি বড় প্রকল্পে।
shim 16

4

সম্ভবত সবচেয়ে ভাল উপায় এটি এখানে

fileprivate func NSLocalizedString(_ key: String) -> String {
    return NSLocalizedString(key, comment: "")
}

এবং

import Foundation
extension String {
    static let Hello = NSLocalizedString("Hello")
    static let ThisApplicationIsCreated = NSLocalizedString("This application is created by the swifting.io team")
    static let OpsNoFeature = NSLocalizedString("Ops! It looks like this feature haven't been implemented yet :(!")
}

তারপরে আপনি এটি এর মতো ব্যবহার করতে পারেন

let message: String = .ThisApplicationIsCreated
print(message)

আমার কাছে এটি সেরা কারণ

  • হার্ডকোডযুক্ত স্ট্রিংগুলি একটি নির্দিষ্ট ফাইলে থাকে, সুতরাং যে দিন আপনি এটি পরিবর্তন করতে চান তা সত্যিই সহজ
  • আপনার ফাইলটিতে স্ট্রিংগুলি প্রত্যেকবার টাইপ করার চেয়ে ব্যবহার করা সহজ
  • জেনস্ট্রিংগুলি এখনও কাজ করবে
  • জিনিসগুলি ঝরঝরে রাখার জন্য প্রতি ভিউ কন্ট্রোলারের মতো আপনি আরও এক্সটেনশন যুক্ত করতে পারেন

3
লক্ষ্য করার বিষয়টি হ'ল বর্ণিত উপায়ে সংজ্ঞায়িত স্ট্রিংগুলি স্থির স্ট্রিং। আইওএস সেটিংস অ্যাপে ভাষা পরিবর্তন করার পরে অ্যাপটি পুনরায় চালু করা উচিত। যদি তা না হয় তবে পরিবর্তনগুলি দেখার জন্য এটি নিজেই পুনরায় চালু করুন। এটিতে একটি মেমরি ওভারহেডও থাকতে পারে, যেহেতু আমরা সমস্ত স্ট্রিং একবারে শুরু করি, প্রয়োজনের সময়ে নয়।
iDevAmit

2
আমার মনে হয় এটা এখানে ভালো নির্ণিত বৈশিষ্ট্য ব্যবহার করার ভালোstatic var Hello: String = { return NSLocalizedString("Hello") }
শিল্প অফ স্বপ্ন

ডাউনটোটেড কারণ এটি সুইফ্ট নামকরণের নির্দেশিকা
ক্রিশটিক

3

আপনি যখন একটি এসডিকে বিকাশ করছেন। আপনার কিছু অতিরিক্ত অপারেশন দরকার।

1) আপনার লোকালাইজডেমোএসডিকে যথারীতি লোকালাইজেবল.স্ট্রিং তৈরি করুন ।

2) আপনার লোকালাইজডেমোতে একই স্থানীয়করণযোগ্য strস্ট্রিংগুলি তৈরি করুন ।

3) আপনার লোকালাইজডেমোএসডিকে আপনার বান্ডিল পাথটি সন্ধান করুন।

সুইফট 4 :

// if you use NSLocalizeString in NSObject, you can use it like this
let value = NSLocalizedString("key", tableName: nil, bundle: Bundle(for: type(of: self)), value: "", comment: "")

Bundle(for: type(of: self))আপনাকে আপনার লোকালাইজডেমোএসডিকে বান্ডিলটি সন্ধান করতে সহায়তা করে। আপনি যদি এর Bundle.mainপরিবর্তে ব্যবহার করেন তবে আপনি একটি ভুল মান পাবেন (আসলে এটি কীটির সাথে একই স্ট্রিংটি হবে)।

তবে আপনি যদি ড ওক্স দ্বারা উল্লিখিত স্ট্রিং এক্সটেনশনটি ব্যবহার করতে চান । আপনার আরও কিছু করা দরকার। উত্সের এক্সটেনশনটি এর মতো দেখাচ্ছে।

extension String {
    var localized: String {
        return NSLocalizedString(self, tableName: nil, bundle: Bundle.main, value: "", comment: "")
    }
}

যেমনটি আমরা জানি, আমরা একটি এসডিকে তৈরি করছি, Bundle.main করছি, আপনারলোক্যালাইজডেমোর বান্ডিলটি পাব। আমরা যা চাই তা তা নয়। আপনার লোকালাইজডেমোএসডিকে আমাদের বান্ডিল দরকার। এটি দ্রুত খুঁজে পেতে একটি কৌশল।

আপনারলোক্যালাইজডেমোএসডিকে একটি এনএসবজেক্ট ইভেন্টে নীচের কোডটি চালান। এবং আপনি YourLocalizeDemoSDK এর URL পাবেন।

let bundleURLOfSDK = Bundle(for: type(of: self)).bundleURL
let mainBundleURL = Bundle.main.bundleURL

দুটি ইউআরএল উভয়ই মুদ্রণ করুন, আপনি দেখতে পাবেন যে আমরা মেইনবান্ডেল URL এ bundleURLofSDK বেস তৈরি করতে পারি। এই ক্ষেত্রে, এটি হবে:

let bundle = Bundle(url: Bundle.main.bundleURL.appendingPathComponent("Frameworks").appendingPathComponent("YourLocalizeDemoSDK.framework")) ?? Bundle.main

এবং স্ট্রিং এক্সটেনশনটি হ'ল:

extension String {
    var localized: String {
        let bundle = Bundle(url: Bundle.main.bundleURL.appendingPathComponent("Frameworks").appendingPathComponent("YourLocalizeDemoSDK.framework")) ?? Bundle.main
        return NSLocalizedString(self, tableName: nil, bundle: bundle, value: "", comment: "")
    }
}

আশা করি এটা সাহায্য করবে.


2

আমি কাস্টম অনুবাদ ফাংশনটি ব্যবহার করে স্ট্রিংগুলি বের করার জন্য আমার নিজস্ব জেনস্ট্রিংস সাজানোর সরঞ্জাম তৈরি করেছি

extension String {

    func localizedWith(comment:String) -> String {
        return NSLocalizedString(self, tableName: nil, bundle: Bundle.main, value: "", comment: comment)
    }

}

https://gist.github.com/Maxdw/e9e89af731ae6c6b8d85f5fa60ba848c

এটি আপনার সমস্ত সুইফ্ট ফাইলকে বিশ্লেষণ করবে এবং আপনার কোডের স্ট্রিং এবং মন্তব্যগুলিকে একটি .strings ফাইলে রফতানি করবে।

সম্ভবত এটি করার সহজতম উপায় নয়, তবে এটি সম্ভব।


1

যদিও এটি সংক্ষিপ্ত সমস্যার কোনও উত্তর দেয় না, তবে এটি আমাকে বার্তাগুলি সংগঠিত করতে সহায়তা করেছে, আমি নীচের মতো ত্রুটি বার্তাগুলির জন্য একটি কাঠামো তৈরি করেছি

struct Constants {
    // Error Messages
    struct ErrorMessages {
        static let unKnownError = NSLocalizedString("Unknown Error", comment: "Unknown Error Occured")
        static let downloadError = NSLocalizedString("Error in Download", comment: "Error in Download")
    }
}

let error = Constants.ErrorMessages.unKnownError

এইভাবে আপনি বার্তাগুলি সংগঠিত করতে এবং জেনস্ট্রিংগুলিকে কাজ করতে পারেন।

এবং এটি ব্যবহৃত জেনস্ট্রিংস কমান্ড

find ./ -name \*.swift -print0 | xargs -0 genstrings -o .en.lproj

1

ইউনিট পরীক্ষায় ব্যবহারের জন্য হেল্পফুল:

এটি একটি সাধারণ সংস্করণ যা বিভিন্ন ব্যবহারের ক্ষেত্রে বাড়ানো যেতে পারে (যেমন টেবিলের নাম ব্যবহার করে)।

public func NSLocalizedString(key: String, referenceClass: AnyClass, comment: String = "") -> String 
{
    let bundle = NSBundle(forClass: referenceClass)
    return NSLocalizedString(key, tableName:nil, bundle: bundle, comment: comment)
}

এটি এর মতো ব্যবহার করুন:

NSLocalizedString("YOUR-KEY", referenceClass: self)

বা মন্তব্য সহ এটি পছন্দ করুন:

NSLocalizedString("YOUR-KEY", referenceClass: self, comment: "usage description")

1
মন্তব্যগুলি ছেড়ে দেওয়া খারাপ অভ্যাস।
জোসে

@ জোসé আপনার মন্তব্যের জন্য ধন্যবাদ। কোডটি ধারণা হিসাবে বোঝানো হয়েছিল, অনুলিপি এবং অনুলিপি হিসাবে নয়। তবে আমি চাইলে মন্তব্যগুলি যুক্ত করার বিকল্পটি যুক্ত করেছি;)
গ্যাটোকুরিওসো

1

এটি "। স্থানীয়" পদ্ধতির উন্নতি on শ্রেণীবদ্ধ এক্সটেনশন যুক্ত করে শুরু করুন কারণ এটি আপনার অগ্রগতিযুক্ত যে কোনও স্ট্রিংয়ে সহায়তা করবে:

extension String {
    func localized (bundle: Bundle = .main, tableName: String = "Localizable") -> String {
        return NSLocalizedString(self, tableName: tableName, value: "\(self)", comment: "")
    }
}

আপনি প্রোগ্রামিকভাবে সেট করা স্ট্রিংগুলির উদাহরণ ব্যবহার:

  override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)

এখন এক্সকোডের স্টোরিবোর্ড অনুবাদ ফাইলগুলি ফাইল ম্যানেজারকে অগোছালো করে তোলে এবং স্টোরিবোর্ডের আপডেটগুলি ভালভাবে পরিচালনা করে না। একটি নতুন পদ্ধতির জন্য একটি নতুন বেসিক লেবেল শ্রেণি তৈরি করা এবং এটি আপনার সমস্ত স্টোরিবোর্ড লেবেলগুলিতে অর্পণ করা:

class BasicLabel: UILabel {
    //initWithFrame to init view from code
    override init(frame: CGRect) {
      super.init(frame: frame)
      setupView()
    }

    //initWithCode to init view from xib or storyboard
    required init?(coder aDecoder: NSCoder) {
      super.init(coder: aDecoder)
      setupView()
    }

    //common func to init our view
    private func setupView() {
        let storyboardText = self.text
        text = storyboardText?.localized()
    }
}

স্টোরিবোর্ডে আপনার যুক্ত করা এবং ডিফল্ট ডিফল্ট সরবরাহ করা প্রতিটি লেবেল স্বয়ংক্রিয়ভাবে অনুবাদ হয়ে যাবে, ধরে নিই যে আপনি এর জন্য কোনও অনুবাদ সরবরাহ করেছেন।

আপনি ইউআইবাটনের ক্ষেত্রেও এটি করতে পারেন:

class BasicBtn: UIButton {
    //initWithFrame to init view from code
    override init(frame: CGRect) {
      super.init(frame: frame)
      setupView()
    }

    //initWithCode to init view from xib or storyboard
    required init?(coder aDecoder: NSCoder) {
      super.init(coder: aDecoder)
      setupView()
    }

    //common func to init our view
    private func setupView() {
        let storyboardText = self.titleLabel?.text
        let lclTxt = storyboardText?.localized()
        setTitle(lclTxt, for: .normal)
    }
}

0

আপনি যখন অনুবাদ করতে চান, ইংরেজী থেকে বলুন, যেখানে কোনও শব্দগোল একই, অন্য ভাষায় যেখানে এটি আলাদা (লিঙ্গ, ক্রিয়া সংযোগ বা ক্ষতির কারণেই ) সুইফটে সহজ সরল এনএসএসআরং ফর্ম যা সমস্ত ক্ষেত্রেই কাজ করে সেগুলি হ'ল তিনটি যুক্তি one । উদাহরণস্বরূপ, ইংরাজি ফ্রেজ "পূর্ববর্তী ছিল", "ওজন" ( "предыдущ ক্ষেত্রে জন্য রাশিয়ান থেকে ভিন্নভাবে অনুবাদ করা হয় ий был") এবং "কোমর" ( "предыдущ জন্য ая был а ")।

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

NSLocalizedString("previousWasFeminine", value: "previous was", comment: "previousWasFeminine")

NSLocalizedString("previousWasMasculine", value: "previous was", comment: "previousWasMasculine")

যেখানে কীগুলি ("পূর্ববর্তী ওয়াসফেমিনাইন" এবং "পূর্ববর্তী ওয়াসম্যাসকুলাইন") আলাদা।

আমি জানি যে সাধারন পরামর্শটি হ'ল বাক্যটিকে পুরো হিসাবে অনুবাদ করতে হয়, তবে কখনও কখনও এটি খুব সময় ব্যয়কারী এবং অসুবিধে হয়।


-1

ডিফল্ট ভাষার সাথে স্থানীয়করণ:

extension String {
func localized() -> String {
       let defaultLanguage = "en"
       let path = Bundle.main.path(forResource: defaultLanguage, ofType: "lproj")
       let bundle = Bundle(path: path!)

       return NSLocalizedString(self, tableName: nil, bundle: bundle!, value: "", comment: "")
    }
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.