সুইফট ভেরিয়েবল সহ এনএসলোক্যালাইজড স্ট্রিং


86

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

NSLocalizedString(" - \(count) Notifica", comment: "sottotitolo prescrizione per le notifiche al singolare")

বা

NSLocalizedString("Notifica per \(medicina!) della prescrizione \(prescription!)\nMemo: \(memoTextView.text)", comment: "Messaggio della Local Notification")

সম্ভবত এটি ধরণের জিনিসগুলির সঠিক সংশ্লেষ নয়। কেউ একজন আমাকে ব্যাখ্যা করতে পারেন কীভাবে তাড়াতাড়ি করবেন? আপনাকে অনেক ধন্যবাদ.


একটি
দৃust়

উত্তর:


138

আপনি এর মধ্যে sprintfফর্ম্যাট প্যারামিটারগুলি ব্যবহার করতে পারেন NSLocalizedString, যাতে আপনার উদাহরণটি দেখতে পারা যায়:

let myString = String(format: NSLocalizedString(" - %d Notifica", comment: "sottotitolo prescrizione per le notifiche al singolare"), count)

6
লোকালাইজেবল
ভ্যান ডু ট্রান

" - %d Notifica"=" - %d Notifica";
ওবজে

4
আমি কীভাবে একটি স্ট্রিং প্রতিস্থাপন করব? আমি %sমোডিফায়ার ব্যবহার করার চেষ্টা করেছি যা কাজ করে না = = \
igrek

12
@igrek %@একটি স্ট্রিং প্রতিস্থাপনের জন্য ব্যবহার করুন ।
ইয়েওয়া

4
এই ফর্ম্যাট প্যারামিটারগুলির জন্য উল্লেখটি বিকাশকারী
app অ্যাপ্লিকেশন / লাইব্রেরি / কনটেন্ট / ডকুমেন্টেশন / কোকো /

96

ডাব্লুডাব্লুডিসি2014 এর সেশন # 412-এ "এক্সকোড 6 দিয়ে স্থানীয়করণ" স্যুইফ্টে এটির সঠিক উপায়টি নিম্নলিখিত:

String.localizedStringWithFormat(
    NSLocalizedString(" - %d Notifica",
    comment: "sottotitolo prescrizione per le notifiche al singolare"),
    count)

আপনার কেন এনএসলোক্যালাইজড স্ট্রিং (...) ব্যবহার করা দরকার? স্ট্রিং.লোক্যালাইজড স্ট্রিংউইথফোর্ম্যাট (...) বাস্তবায়নে এটি ঘটে না?
ইয়েজচাক


4
আমি জিজ্ঞাসা করার পরে ধন্যবাদ ইতিমধ্যে এটি দেখেছি। এটি অন্যদের জন্য খুব সহায়ক হবে তাই ধন্যবাদ
Yitzchak

25

স্থানীয়করণের জন্য আমার অনেক স্ট্রিং রয়েছে বলে আমি স্ট্রিংয়ে এক্সটেনশন তৈরির পদ্ধতির অনুসরণ করেছি।

extension String {
    var localized: String {
        return NSLocalizedString(self, comment:"")
    }
}

কোডে স্থানীয়করণের জন্য এটি ব্যবহার করতে:

self.descriptionView.text = "Description".localized

গতিশীল ভেরিয়েবলের সাথে স্ট্রিং অনুসরণ করুন:

self.entryTimeLabel.text = "\("Doors-open-at".localized) \(event.eventStartTime)"

স্ট্রিং ফাইলগুলিতে বিভিন্ন ভাষার জন্য স্ট্রিংগুলি ঘোষণা করুন (উদাহরণ: আরবী এবং ইংরেজি)

এখানে চিত্র বর্ণনা লিখুন এখানে চিত্র বর্ণনা লিখুন

আশা করি সাহায্য করবে!


4
তবে আমার কাছে মনে হচ্ছে আপনি কেবল সময়টির সাথে যুক্ত হচ্ছেন। যদি আপনার স্থানীয়করণের স্ট্রিংটি কেমন ছিল The doors open at %@ o'clock। আপনার সমাধান এখনও কাজ করবে?
হিউম্যান

হ্যাঁ, পিছন থেকে স্ট্রিংয়ের মতো সময় পাওয়ায় এটি পুরোপুরি কাজ করছে।
জসপ্রীতকৌর

4
একটি রেফারেন্স অন্তর্ভুক্ত করার জন্য ধন্যবাদ Localizable.strings। তবে আমি মনে করি @ হিউম্যানের একটি বৈধ উদ্বেগ রয়েছে।
ম্যাট

আমি জানি না কেন লোকেরা "মন্তব্য" মান বাদ দিতে চায়। এটি স্থানীয়করণ প্রকৌশলীগুলিকে পাঠ্যের বিবরণ এবং তার উদ্দেশ্য বর্ণনা করে যা ব্যতীত তারা কোনও পাঠ্য কোনও বোতামে বা লেবেল হিসাবে ব্যবহার করতে পারে না
সত্যম

8

আমি উপরের সমাধানগুলি চেষ্টা করেছি তবে নীচের কোডটি আমার পক্ষে কাজ করেছে

সুইফট 4

extension String {

    /// Fetches a localized String
    ///
    /// - Returns: return value(String) for key
    public func localized() -> String {
        let path = Bundle.main.path(forResource: "en", ofType: "lproj")
        let bundle = Bundle(path: path!)
        return (bundle?.localizedString(forKey: self, value: nil, table: nil))!
    }


    /// Fetches a localised String Arguments
    ///
    /// - Parameter arguments: parameters to be added in a string
    /// - Returns: localized string
    public func localized(with arguments: [CVarArg]) -> String {
        return String(format: self.localized(), locale: nil, arguments: arguments)
    }

}

// variable in a class
 let tcAndPPMessage = "By_signing_up_or_logging_in,_you_agree_to_our"
                                     .localized(with: [tAndc, pp, signin])

// Localization File String
"By_signing_up_or_logging_in,_you_agree_to_our" = "By signing up or logging in, you agree to our \"%@\" and \"%@\" \nAlready have an Account? \"%@\"";

7

আমি স্ট্রিংয়ে এটি ব্যবহার করি যা এটি ভেরিয়েবল আর্গুমেন্ট সহ একটি স্থানীয়করণ উইথফর্ম্যাট ফাংশন যোগ করে,

extension String:{

     func localizeWithFormat(arguments: CVarArg...) -> String{
        return String(format: self.localized, arguments: arguments)        
     }

     var localized: String{
         return Bundle.main.localizedString(forKey: self, value: nil, table: "StandardLocalizations")
     }
}

ব্যবহার:

let siriCalendarText = "AnyCalendar"
let localizedText = "LTo use Siri with my app, please set %@ as the default list on your device reminders settings".localizeWithFormat(arguments: siriCalendarTitle)

স্ট্রিংয়ের একই ফাংশন এবং সম্পত্তির নাম ব্যবহার না করার জন্য কেবল সাবধান হন। আমি আমার সমস্ত কাঠামোর ফাংশনগুলির জন্য সাধারণত 3 বর্ণের উপসর্গ ব্যবহার করি।


-5

আমি একজন নির্মিত extensionকরার Stringযেহেতু আমি অনেক ছিল stringsহতে localized

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

উদাহরণ স্বরূপ:

let myValue = 10
let anotherValue = "another value"

let localizedStr = "This string is localized: \(myValue) \(anotherValue)".localized
print(localizedStr)

6
এই পদ্ধতির বড় ক্ষতিটি হ'ল অনুবাদকের কাছে পাঠানোর জন্য আপনার নিজের হাতে স্ট্রিংগুলি বের করতে Editor > Export for Localization...হবে কারণ সেগুলি বেছে না নি।
জেসন মুর

@ জেসনমুরের পরামর্শ অনুসারে দেওয়া, আমি মনে করি এটি সঠিক পদ্ধতি নয় the
Yuchen Zhong

@ জেসনমুর সম্পূর্ণরূপে আপনার সাথে একমত আপনাদের মধ্যে কেউ কি এর জন্য সমাধান খুঁজে পেয়েছেন?
গ্যাসফারফ

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