আজকাল বিশ্ব একটি বিশ্বব্যাপী বাজার হওয়ার সাথে সাথে, আপনার মোবাইল অ্যাপ্লিকেশনগুলির ক্ষমতা বিভিন্ন ভাষা এবং সংস্কৃতিতে থাকা কেবল একটি বিকল্প নয় বরং এটি একটি প্রয়োজনীয়তা। স্থানীয়করণ ব্যবহারকারীর অভিজ্ঞতাকে উন্নত করে, এর নাগাল প্রসারিত করে এবং আন্তর্জাতিক স্তরে সফ্টওয়্যারের সাফল্যের উপর বিরাট প্রভাব ফেলতে পারে।
আইওএস ডেভেলপারদের জন্য, সুইফট অ্যাপ্লিকেশানগুলিতে সহজে স্থানীয়করণকে অন্তর্ভুক্ত করার জন্য শক্তিশালী সরঞ্জাম সরবরাহ করে। এই নির্দেশিকাটি সুইফটে স্থানীয়করণে রূপান্তর ব্যাখ্যা করে, প্রাথমিক কৌশলগুলি থেকে সর্বশেষ টুলে, বিকাশকারীদের এই ক্ষমতাগুলির সম্পূর্ণ সুবিধা নিতে সাহায্য করার জন্য৷
প্রাথমিকভাবে, যখন সুইফট প্রথম চালু করা হয়েছিল, তখন এটি অবজেক্টিভ-সি থেকে স্থানীয়করণ পরিকাঠামো উত্তরাধিকার সূত্রে প্রাপ্ত হয়েছিল, যেটি Localizable.strings
ফাইল এবং NSLocalizedString
ফাংশনের চারপাশে নির্মিত হয়েছিল। এইভাবে, ডেভেলপারদের স্থানীয় স্ট্রিংগুলিকে ম্যানুয়ালি সম্পাদনা করতে হয়েছিল এবং সেগুলিকে বিভিন্ন ভাষার ফাইলগুলিতে সিঙ্ক্রোনাইজ করতে হয়েছিল, একটি প্রক্রিয়া যা ত্রুটি এবং সময়সাপেক্ষ উভয়ই প্রবণ।
Localizable.strings
এর বেসিকস্থানীয়করণযোগ্য ফাইল হল একটি সাধারণ কী-মানের জোড়া ফাইল যেখানে স্ট্রিংগুলি একটি "কী" = "মান" বিন্যাসে সংরক্ষণ করা হয়, যেখানে "কী" হল কোড শনাক্তকারী এবং "মান" হল স্থানীয়কৃত স্ট্রিং যা ব্যবহারকারী দেখতে পাবে৷ এই ফাইলটিকে প্রতিটি সমর্থিত ভাষায় সদৃশ এবং অনুবাদ করতে হবে এবং যথাযথ সংশ্লিষ্ট '.lproj' ডিরেক্টরিতে রাখতে হবে, যেমন ইংরেজি ভাষার জন্য 'en.lproj' এবং জার্মান ভাষার জন্য 'de.lproj' ।
Localizable.strings
এন্ট্রির উদাহরণ : "hello_world_key" = "Hello, World!";
সুইফট কোডে, এই স্ট্রিংটি এইভাবে পুনরুদ্ধার করা যেতে পারে:
let greeting = NSLocalizedString("hello_world_key", comment: "The default greeting")
NSLocalizedString ফাংশন Localizable.strings
থেকে কী ব্যবহার করে স্থানীয় বিষয়বস্তু অ্যাক্সেস করা সহজ করে তোলে।
এই ফাংশনটি একটি কী নেয়, একটি ফলব্যাক মান প্রদান করে এবং অনুবাদকদের জন্য একটি মন্তব্য রাখে। একটি মন্তব্য অফার করা অত্যন্ত গুরুত্বপূর্ণ কারণ এটি অনুবাদকদের অনুবাদের নির্ভুলতা এবং উপযুক্ততা উন্নত করার জন্য সাবটেক্সট দেয়।
উদাহরণ: দিনের সময়ের উপর ভিত্তি করে একজন ব্যবহারকারীকে শুভেচ্ছা জানানো:
func greetingBasedOnTime() -> String { let hour = Calendar.current.component(.hour, from: Date()) let key = hour < 12 ? "good_morning_key" : "good_evening_key" return NSLocalizedString(key, comment: "Greeting based on time of day") }
সংশ্লিষ্ট Localizable.strings
এর সাথে, এন্ট্রিগুলি দেখতে এইরকম:
"good_morning_key" = "Good morning!"; "good_evening_key" = "Good evening!";
এখানে স্থানীয়করণের সাথে কিছু চ্যালেঞ্জ রয়েছে। স্ট্রিং যা আপনি সম্মুখীন হতে পারে:
1) মাপযোগ্যতা সমস্যা.
স্ট্রিংয়ের সংখ্যা বাড়ার সাথে সাথে তাদের পরিচালনা করা কঠিন হয়ে পড়ে। সময়ের সাথে সাথে একাধিক .strings ফাইল পরিচালনা করা কষ্টকর হয়ে ওঠে।
2) নকল।
প্রতিটি ভাষার জন্য একটি পৃথক ফাইলের প্রয়োজন হয়, যা সম্ভাব্য অসঙ্গতি এবং স্ট্রিং পরিচালনার ক্ষেত্রে সদৃশ প্রচেষ্টার দিকে পরিচালিত করে। সমর্থন করার জন্য একটি ভাষা সহ, এটি একটি সমস্যা নাও হতে পারে কিন্তু যখন আপনাকে একাধিক ভাষা পরিচালনা করতে হবে, এটি কখনও কখনও খুব ঝামেলার হয়ে ওঠে।
3) প্রসঙ্গের অভাব।
যাইহোক, মন্তব্যগুলি NSLocalizedString-এ যোগ করা যেতে পারে – এমনকি যদি তারা সবসময় অনুবাদককে প্রসঙ্গটি সম্পূর্ণরূপে বুঝতে সাহায্য না করে, এর ফলে অনুবাদে ভুল হতে পারে। ডেভেলপাররা প্রায়ই তাদের সঠিকভাবে পূরণ করতে অলস হয়।
stringsdict
স্থানান্তর করা হচ্ছে stringsdict
ফাইলগুলির প্রবর্তন সুইফ্ট স্থানীয়করণের জন্য একটি উল্লেখযোগ্য উন্নতি এনেছে, যা প্রাথমিকভাবে বহুবচনের সমস্যাগুলির সমাধান করেছে। প্রধান কারণ হল যে ভাষার বহুবচন ভিন্নভাবে গঠিত হয়, এবং ইংরেজির জন্য যা কার্যকর হতে পারে তা রাশিয়ান বা আরবি অন্যান্য ভাষার জন্য নাও হতে পারে।
stringsdict
প্রবর্তনের আগে, তাদের পরিচালনা করা খুব কঠিন ছিল। stringsdict
প্রোগ্রামারদের "এক", "কয়েক", "অনেক" এবং "অন্যান্য" এর মতো বিভাগগুলির জন্য নিয়ম নির্ধারণ করতে সক্ষম করে, যা সমস্ত ভাষা জুড়ে অনুবাদে একই স্তরের সঠিকতা নিশ্চিত করে।
stringsdict
ফাইল বোঝা
Stringsdict
ফাইল হল একটি XML সম্পত্তির তালিকা, যা সাংখ্যিক মানের উপর নির্ভর করে স্থানীয়করণ করা স্ট্রিং তৈরি করতে ব্যবহৃত হয়। এই কার্যকারিতাটি সঠিকভাবে বহুবচন ফর্মগুলিকে প্রক্রিয়া করার উদ্দেশ্যে কারণ বিভিন্ন ভাষার বহুবচন ফর্মগুলি প্রক্রিয়া করার জন্য তাদের নিজস্ব আলাদা নিয়ম রয়েছে৷
একটি stringsdict
ফাইলের গঠন :
stringsdict
ফাইলের একটি নমুনায় সমস্ত স্ট্রিংগুলির এন্ট্রি রয়েছে যেগুলিকে বহুবচন করতে হবে। প্রতিটি এন্ট্রিতে একটি কী এবং একটি অভিধান থাকে যেখানে ব্যবহারকারী বিভিন্ন বহুবচন বিভাগের প্রতিনিধিত্বকারী এক বা একাধিক সাবকি সংজ্ঞায়িত করে।
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>numberOfSongs</key> <dict> <key>NSStringLocalizedFormatKey</key> <string>%#@songs@</string> <key>songs</key> <dict> <key>NSStringFormatSpecTypeKey</key> <string>NSStringPluralRuleType</string> <key>one</key> <string>One song</string> <key>other</key> <string>%d songs</string> </dict> </dict> </dict> </plist>
বহুবচনের জন্য stringsdict
ব্যবহারের উদাহরণ
ধরা যাক আমাদের একটি অ্যাপ্লিকেশন আছে যা একজন ব্যবহারকারীর পড়া নিবন্ধের সংখ্যা দেখায়। স্ক্রিনে, এটি পঠিত নিবন্ধের সংখ্যার সঠিক বহুবচন ফর্ম উপস্থাপন করে একটি বার্তা দেখাতে হবে।
ইংরেজি এবং পোলিশের জন্য Localizable.stringsdict
:
<!-- English --> <key>article_count</key> <dict> <key>NSStringLocalizedFormatKey</key> <string>%#@articles@</string> <key>articles</key> <dict> <key>NSStringFormatSpecTypeKey</key> <string>NSStringPluralRuleType</string> <key>one</key> <string>One article</string> <key>other</key> <string>%d articles</string> </dict> </dict> <!-- Polish --> <key>article_count</key> <dict> <key>NSStringLocalizedFormatKey</key> <string>%#@articles@</string> <key>articles</key> <dict> <key>NSStringFormatSpecTypeKey</key> <string>NSStringPluralRuleType</string> <key>one</key> <string>Jeden artykuł</string> <key>few</key> <string>%d artykuły</string> <key>many</key> <string>%d artykułów</string> <key>other</key> <string>%d artykułu</string> </dict> </dict>
এখানে, পোলিশ স্থানীয়করণ স্পষ্টভাবে কিছু ভাষায় বহুবচন ফর্মের জটিলতা প্রদর্শন করে, যেখানে একাধিক বহুবচন বিভাগ (এক, কয়েক, অনেক, অন্যান্য) সঠিকভাবে বিভিন্ন সংখ্যার প্রসঙ্গ উপস্থাপন করার জন্য ব্যবহার করা প্রয়োজন।
দ্রুত বাস্তবায়ন:
NSLocalizedString
কল করার সময় ফাইলে সংজ্ঞায়িত কীগুলি উল্লেখ করে stringsdict
এন্ট্রিগুলি কোডে ব্যবহার করা যেতে পারে।
let count = getArticleCount() let formatString = NSLocalizedString("article_count", comment: "Count of articles read by a user") let message = String(format: formatString, count)
এই পদ্ধতির সাহায্যে আপনি সমর্থিত ভাষার ব্যাকরণের সাথে মেলে আউটপুট স্ট্রিংকে অভিযোজিতভাবে পরিবর্তন করতে পারবেন; এই সব শুধুমাত্র কোড একটি লাইন.
stringsdict
সুবিধা
Xcode 15-এর সাথে চালু করা নতুন বৈশিষ্ট্যগুলির মধ্যে একটি হল স্ট্রিং ক্যাটালগ যা ডেভেলপারদের iOS এবং macOS অ্যাপ্লিকেশনগুলিকে আগের চেয়ে আরও সহজে স্থানীয়করণ করতে সাহায্য করবে বলে মনে করা হয়। যদিও Localizable.strings
এবং stringsdict
স্ট্রিংগুলি সংরক্ষণ এবং সংগঠিত করার জন্য সহায়ক সংস্থান হয়েছে, স্ট্রিং ক্যাটালগগুলি স্থানীয়কৃত স্ট্রিংগুলি পরিচালনা করার জন্য অনেক বেশি সমন্বিত এবং আরও UI বন্ধুত্বপূর্ণ।
এইগুলি হল প্রধান দিক যা স্ট্রিং ক্যাটালগগুলিতে হাইলাইট করা উচিত:
stringsdict
কিছু ত্রুটিগুলিও কাটিয়ে ওঠে।
দ্রুত বাস্তবায়ন:
ধরা যাক, একটি মেসেজিং অ্যাপ্লিকেশনে, আপনাকে ব্যবহারকারীদের তাদের অপঠিত বার্তার সংখ্যা সম্পর্কে জানাতে হবে। বিজ্ঞপ্তিটি প্রাপ্ত বার্তার সংখ্যা দেখিয়ে গতিশীল হতে হবে এবং বিষয়বস্তুর প্রকার অনুসারে সামঞ্জস্য করা উচিত।
ধাপে ধাপে সেটআপ:
একটি স্ট্রিং ক্যাটালগ তৈরি করুন: আপনার প্রকল্পে একটি নতুন স্ট্রিং ক্যাটালগ যোগ করুন। এটি একটি .stringcatalog
ফাইল তৈরি করবে।
এন্ট্রি যোগ করুন: প্রতিটি স্ট্রিংয়ের জন্য এন্ট্রি যোগ করতে এডিটর ব্যবহার করুন যা স্থানীয়করণ করা দরকার। তারপর প্রতিটি এন্ট্রির জন্য কী, ডিফল্ট মান এবং যেকোনো বহুবচন নিয়ম বা অভিযোজিত পরামিতি নির্দিষ্ট করুন।
বিষয়বস্তু স্থানীয়করণ করুন: প্রতিটি সমর্থিত ভাষার জন্য অনুবাদ প্রদান করুন, বহুবচনের জন্য বিভিন্ন ফর্ম নির্দিষ্ট করে, ডিভাইসের প্রকারের জন্য অভিযোজন ইত্যাদি।
কোডে প্রয়োগ করুন: আপনার সুইফট কোডে স্থানীয়কৃত শনাক্তকারী ব্যবহার করে এই স্ট্রিংগুলি উল্লেখ করুন।
<!-- String Catalog Entry --> <key>unread_messages_count</key> <dict> <key>NSStringLocalizedFormatKey</key> <string>%#@messages@</string> <key>messages</key> <dict> <key>NSStringFormatSpecTypeKey</key> <string>NSStringPluralRuleType</string> <key>one</key> <string>You have one unread message.</string> <key>other</key> <string>You have %d unread messages.</string> </dict> </dict>
আপনি এই স্ট্রিংটি এভাবে অ্যাক্সেস করতে পারেন:
let unreadCount = fetchUnreadMessagesCount() let message = NSLocalizedString("unread_messages_count", value: "You have \(unreadCount) unread messages.", comment: "Notify about unread messages") print(message)
যদিও স্ট্রিং ক্যাটালগগুলি উল্লেখযোগ্য উন্নতির প্রস্তাব দেয়, তারাও চ্যালেঞ্জ নিয়ে আসে। প্রথমত, এটি একটি শেখার বক্ররেখা; একটি নতুন সিস্টেম বা কিছু তৈরি করার উপায়ে অভ্যস্ত হতে সময় লাগে। আরেকটি সম্ভাব্য চ্যালেঞ্জ যা ডেভেলপারদের মুখোমুখি হতে পারে তা হল বিদ্যমান প্রকল্পগুলিতে স্ট্রিং ক্যাটালগগুলিকে একীভূত করার জন্য প্রয়োজনীয় সময় এবং সামঞ্জস্যের সাথে যুক্ত যেখানে ঐতিহ্যগত স্থানীয়করণ ফাইলগুলি ইতিমধ্যে তৈরি এবং ব্যবহার করা হয়েছে।
সুইফটে স্ট্রিং ক্যাটালগগুলি হল স্থানীয়করণ প্রযুক্তির সাম্প্রতিক আরও উন্নতি যা শুধুমাত্র শক্তিশালী নয়, নমনীয় এবং ব্যবহারকারী-বান্ধবও। বিকাশের জীবনচক্রের একটি অংশ হিসাবে প্রযুক্তি যুক্ত করার মাধ্যমে, দলগুলি স্থানীয়করণ প্রক্রিয়ায় দক্ষতা এবং গুণমান ব্যাপকভাবে উন্নত করবে; সুতরাং, উন্নত বিশ্ব পণ্য তৈরি করা হবে।
আমি ক্রমাগত এই নিবন্ধটি সুইফ্ট স্থানীয়করণ সরঞ্জামগুলির সর্বশেষ বিকাশের সাথে আপডেট করব। আপনি যদি মনে করেন যে আমি কিছু ছেড়ে দিয়েছি বা আমি যা বলেছি সে সম্পর্কে আপনার চিন্তাভাবনা আছে, আপনি নীচের মন্তব্য বাক্সে সেগুলি ভাগ করতে পারেন৷ আরো আকর্ষণীয় তথ্য এবং সর্বশেষ খবরের জন্য আমাকে অনুসরণ করতে ভুলবেন না!