किसी SwiftUI ऐप का स्थानीयकरण कैसे करें

जब हम एक अंग्रेजी ऐप का उपयोग करते हैं, तो बहुत से लोग पहले जांच करेंगे कि क्या संबंधित चीनी संस्करण है (लेखक चीनी का उपयोग करता है, और यह लेख मूल रूप से चीनी डेवलपर्स के लिए लिखा गया है)। यह स्पष्ट है कि ऐप में सबसे परिचित भाषा का टेक्स्ट प्रदर्शित करना उपयोगकर्ताओं के लिए बहुत महत्वपूर्ण है। काफी संख्या में ऐप्स के लिए, यदि UI में प्रदर्शित टेक्स्ट को स्थानीयकृत किया जा सकता है, तो ऐप का स्थानीयकरण कार्य मूल रूप से पूरा हो गया है। इस लेख में, हम पता लगाएंगे कि आईओएस विकास में पाठ स्थानीयकरण कैसे प्राप्त किया जाए। इस लेख का डेमो SwiftUI में लिखा गया है।
पाठ स्थानीयकरण का सिद्धांत
एक प्रोग्रामर के रूप में, यदि आपको विभिन्न भाषाओं के लिए मूल पाठ को स्थानीयकृत करने के लिए एक तर्क तैयार करने के लिए कहा जाता है, तो अधिकांश लोग शब्दकोश (की-वैल्यू पेयर) समाधान का उपयोग करने पर विचार करेंगे। Apple भी अलग-अलग भाषाओं के लिए कई शब्दकोश बनाकर एक ही दृष्टिकोण अपनाता है, सिस्टम मूल पाठ (कुंजी) के अनुरूप स्थानीयकृत पाठ (मान) को आसानी से पा सकता है। उदाहरण के लिए:
//en
"hello" = "Hello";
//zh
"hello" = "你好";
कोड संकलन के दौरान, सिस्टम text that can be localized
. जब ऐप एक अलग भाषा के वातावरण (जैसे फ्रेंच) में चलता है, तो सिस्टम प्रतिस्थापन के लिए फ्रेंच टेक्स्ट की-वैल्यू फ़ाइल से संबंधित सामग्री खोजने की कोशिश करेगा। यदि यह इसे नहीं ढूँढ पाता है, तो यह भाषा वरीयता सूची के अनुसार खोज करना जारी रखेगा। कुछ प्रकारों के लिए, जैसे , उपरोक्त क्रिया स्वचालित रूप से पूरी हो जाएगी, लेकिन कोड में LocalizedStringKey
सबसे अधिक उपयोग किए जाने वाले कार्यों के लिए , इस क्रिया को कोड में स्पष्ट रूप से पूरा करने की आवश्यकता है।String
सौभाग्य से, SwiftUI के अधिकांश नियंत्रण (जिनमें से कुछ में वर्तमान में बग हैं) टेक्स्ट प्रकारों के लिए कंस्ट्रक्टर के उपयोग को प्राथमिकता देते हैं LocalizedStringKey
, जो डेवलपर्स के लिए मैन्युअल प्रोसेसिंग के वर्कलोड को बहुत कम कर देता है।
भाषा जोड़ना
समकालीन प्रोग्रामिंग भाषाओं और विकास परिवेशों के लिए, अंतर्राष्ट्रीयकरण विकास क्षमता एक आवश्यक कार्य है। जब हम एक्सकोड में एक प्रोजेक्ट बनाते हैं, तो डिफ़ॉल्ट रूप से, ऐप केवल इसके संबंधित विकास भाषा के लिए विकसित होता है।
इसलिए, हमें पहले परियोजना को बताना चाहिए कि हम परियोजना पर स्थानीयकरण संचालन करेंगे और संबंधित भाषा का चयन करेंगे।
में Project Navigation
, क्लिक करें PROJECT
, Info
भाषाएँ जोड़ने के लिए चुनें Localizations
।

+ आइकन पर क्लिक करें और वह भाषा चुनें जिसे हम जोड़ने जा रहे हैं।


यहां हम केवल प्रोजेक्ट को सूचित कर रहे हैं कि हम सूचीबद्ध भाषाओं का स्थानीयकरण कर सकते हैं। हालाँकि, हमें अभी भी इसे स्थानीयकृत करने के तरीके और किन फ़ाइलों और संसाधनों का स्थानीयकरण करने के लिए इसे अलग से सेट करने की आवश्यकता है।
"बेस इंटरनेशनलाइजेशन का उपयोग करें" को सक्षम करने से एक्सकोड में आपकी प्रोजेक्ट फ़ोल्डर संरचना संशोधित हो जाएगी। Xib और स्टोरीबोर्ड फ़ाइलों को Base.lproj फ़ोल्डर में ले जाया जाएगा, जबकि स्ट्रिंग तत्वों को प्रोजेक्ट के स्थानीयकरण फ़ोल्डर में निकाला जाएगा। यह विकल्प स्टोरीबोर्ड के साथ विकसित करने के लिए है, और यदि आप SwiftUI को अपनाते हैं, तो आपको इसके बारे में चिंता करने की आवश्यकता नहीं है।
UIKit ढांचे के लिए, एक्सकोड आपको "स्टोरीबोर्ड" के लिए एसोसिएशन विधि चुनने देगा। चूंकि इस आलेख में प्रयुक्त " डेमो प्रोजेक्ट " स्विफ्टयूआई आर्किटेक्चर पर आधारित है, ऐसी कोई स्क्रीन नहीं होगी।

स्थानीयकृत स्ट्रिंग फ़ाइल बनाएँ
string file
Apple के विकास के माहौल में, हमारे पिछले लेख में उल्लिखित फ़ाइल प्रकार (टेक्स्ट की-वैल्यू पेयर फ़ाइल) है .strings
। हम एक ऐप में कई स्ट्रिंग फ़ाइलें बना सकते हैं, और उनमें से कुछ के नाम के साथ विशेष अर्थ होते हैं।
- स्थानीयकरण योग्य। तार
- InfoPlist.strings
एन Project Navigation
, हम चुनते हैं New File
।

फ़ाइल प्रकार चुनें Strings File
और इसे Localizable.strings नाम दें।


इस बिंदु पर, Localizable.strings
फ़ाइल अभी तक स्थानीयकृत नहीं की गई है। वर्तमान में, आपके प्रोजेक्ट में केवल एक फ़ाइल है जहाँ आप टेक्स्ट की-वैल्यू पेयर परिभाषित करते हैं, जो केवल प्रोजेक्ट की development language
. दाईं ओर दिए गए बटन पर क्लिक करके Localize...
, हम इसके लिए संबंधित भाषा फ़ाइलें उत्पन्न करना चुन सकते हैं Localizable.strings
(भाषा सूची प्रोजेक्ट सेटिंग्स में जोड़ी गई भाषाओं पर आधारित है)।

दाईं ओर दोनों भाषाओं की जाँच करने के बाद,

Localizable.strings बाएँ प्रोजेक्ट नेविगेशन में निम्न स्थिति में होगा:

वर्तमान में, English
और Chinese
फ़ाइलें खाली हैं। अब हम यहां संबंधित टेक्स्ट की-वैल्यू पेयर बना सकते हैं।
प्रयोग 1: बिल टेबल कॉलम नामों का स्थानीयकरण करें

इस खंड में, हम ITEM, QUANTITY, UNIT PRICE, और AMOUNT के लिए संबंधित चीनी स्थानीयकरण टेक्स्ट प्रदान करने का प्रयास करते हैं।
की-वैल्यू पेयर डिक्लेरेशन रूल्स का पालन करते हुए, हम Localizable.Strings (Chinese)
फाइल में निम्नलिखित कंटेंट जोड़ते हैं:
"ITEM" = "种类";
"QUANTITY" = "数量";
"UNIT PRICE" = "单价";
"AMOUNT" = "合计";
TableView()
.environmentObject(Order.sampleOrder)
.previewLayout(.sizeThatFits)
.environment(\.locale,Locale(identifier: "zh"))
कारण यह है कि key
हमने जो सेट किया है वह string file
गलत है। ऐप प्रेजेंटेशन में हम जो ITEM
देखते हैं वह निम्नलिखित कोड से मेल खाता है TableView
:
HStack{
Text("Item")
.frame(maxWidth:.infinity)
Text("Quantity")
.frame(maxWidth:.infinity)
Text("Unit Price")
.frame(maxWidth:.infinity)
Text("Amount")
.frame(maxWidth:.infinity)
}
.foregroundStyle(.primary)
.textCase(.uppercase) //转换成大写
chinese
फ़ाइल को निम्नानुसार संशोधित करें :
"Item" = "种类";
"Quantity" = "数量";
"Unit Price" = "单价";
"Amount" = "合计";

बधाई हो, आपने पहले ही टेक्स्ट स्थानीयकरण की अधिकांश सामग्री में महारत हासिल कर ली है।
- मुझे नहीं पता कि क्या आपने देखा कि वर्तमान
English
फ़ाइल खाली है, और हमनेChinese
फ़ाइल में केवल चार सामग्रियों के लिए संबंधित स्थानीयकृत टेक्स्ट सेट किया है। इसलिए, ऐप उन सभी सामग्रियों के लिए कोड में सेट किए गए मूल पाठ को प्रदर्शित करेगा जिन्हें हमने सेट नहीं किया है।
अभ्यास 2: भुगतान बटन का स्थानीयकरण करें

इस खंड में, हम "4 पेय के लिए भुगतान करें" के पाठ का चीनी में अनुवाद करने का प्रयास करेंगे।
बटन को निम्नानुसार परिभाषित किया गया है ButtonGroupView
:
Button {
showPayResult.toggle()
} label: {
Text("Pay for \(order.totalQuantity) drinks")
}
स्थानीय स्ट्रिंग्स के लिए जो स्ट्रिंग इंटरपोलेशन का उपयोग करते हैं, हमें स्ट्रिंग फॉर्मेट स्पेसिफायर का उपयोग करने की आवश्यकता होती है। Apple का आधिकारिक दस्तावेज़ीकरण हमारे लिए उपयोग निर्देशों की विस्तृत तुलना प्रदान करता है।
कोड में, "order.totalQuantity" एक "Int" से मेल खाता है (64-बिट सिस्टम पर, "Int" स्विफ्ट में "Int64" से मेल खाता है), इसलिए हमें की-वैल्यू जोड़ी में "% lld" का उपयोग करने की आवश्यकता है इसे बदलने के लिए। इसे "चीनी" फ़ाइल में निम्नानुसार परिभाषित करें:
"Pay for %lld drinks" = "为%lld 杯饮品付款";
अपने इंटरपोलेशन के लिए सही प्रारूप विनिर्देशक चुनें, उदाहरण के लिए, यदि उपरोक्त उदाहरण सेट किया गया है %d
, तो सिस्टम इसे दूसरी कुंजी के रूप में पहचान लेगा और रूपांतरण पूरा नहीं कर पाएगा।
अभ्यास 3: ऐप के प्रोग्राम नाम का स्थानीयकरण
Xcode प्रोजेक्ट्स में, हम आमतौर पर फ़ाइल में कुछ विशिष्ट सिस्टम पैरामीटर्स को कॉन्फ़िगर करते हैं Info.plist
, जैसे Bundle identifier
, Bundle name
, आदि। यदि हमें इनमें से कुछ कॉन्फ़िगरेशन को स्थानीयकृत करने की आवश्यकता है, तो हम InfoPlist.strings
पहले बताई गई फ़ाइल का उपयोग कर सकते हैं।
फ़ाइल बनाने के समान चरणों का उपयोग करते हुए Localizable.strings
, हम नाम की एक स्ट्रिंग फ़ाइल बनाते हैं InfoPlist.strings
(बनाई गई फ़ाइल को स्थानीयकृत करना न भूलें और सुनिश्चित करें कि चीनी और अंग्रेजी दोनों का चयन किया गया है)।
निम्न सामग्री को क्रमशः Chinese
और फ़ाइलों में जोड़ें :English
InfoPlist.strings
//chinese
"CFBundleDisplayName" = "肥嘟嘟酒吧";
//english
"CFBundleDisplayName" = "FatbobBar";
Xcode के वर्तमान संस्करण में, आप Info.plist को सीधे सेट किए बिना लक्ष्य के जानकारी अनुभाग में मानों को संशोधित कर सकते हैं।

स्थानीयकृत कॉन्फ़िगरेशन को जानकारी या Info.plist में प्रकट होना आवश्यक नहीं है। जब तक हम InfoPlist.strings में स्थानीयकृत की-वैल्यू जोड़े सेट करते हैं, ऐप उस सेटिंग को प्राथमिकता देगा। आमतौर पर, ऐप नाम CFBundleDisplayName के अलावा, हम InfoPlist.strings में अन्य आइटम्स को स्थानीयकृत करते हैं, जैसे CFBundleName, CFBundleShortVersionString, NSHumanReadableCopyright, और विभिन्न सिस्टम अनुमति अनुरोध विवरण जैसे NSAppleMusicUsageDescription और NSCameraUsageDescription। Info.plist पैरामीटर के बारे में अधिक जानकारी के लिए, कृपया आधिकारिक दस्तावेज देखें ।
अभ्यास 4: पेय नामों का स्थानीयकरण
निम्न सामग्री को Localizable(Chinese)
स्ट्रिंग फ़ाइल में जोड़ें:
"Orange Juice" = "橙汁";
"Tea" = "茶";
"Coffee" = "咖啡";
"Coke" = "快乐水";
"Sprite" = "透心凉";
ऐप का पूर्वावलोकन करने के लिए, स्थानीय पर्यावरण चर सेट करें, सिम्युलेटर की भाषा को चीनी में बदलें, या योजना में ऐप की भाषा को चीनी में बदलें।
ऐप चलाने पर हमें उम्मीद के मुताबिक नतीजा नहीं मिला। पेय का नाम चीनी नहीं हो गया । जांच कर Drink.swift
, हम कारण ढूंढ सकते हैं: स्पष्ट रूप से परिभाषित String
प्रकार के लिए, टेक्स्ट इसे एक के रूप में नहीं मानता है LocalizedStringKey
।
पहले में ItemRowView
, हमने निम्नलिखित कोड का उपयोग करके पेय का नाम प्रदर्शित किया था:
Text(item.drink.name)
.padding(.leading,20)
.frame(maxWidth:.infinity,alignment: .leading)
struct Drink:Identifiable,Hashable,Comparable{
let id = UUID()
let name:String //String 类型
let price:Double
let calories:Double
Text(LocalizedStringKey(item.drink.name))
.padding(.leading,20)
.frame(maxWidth:.infinity,alignment: .leading)
फिर से चलाने के बाद, आप देखेंगे कि तालिका में पेय पदार्थों के नाम सही चीनी डिस्प्ले में बदल दिए गए हैं।

इसी तरह, कोड को इसमें संशोधित करें ItemListView
:
// Change
Button(drink.name)
// To
Button(LocalizedStringKey(drink.name))

संशोधन के बाद पेय पदार्थों के चीनी नामों को सही ढंग से प्रदर्शित किया जा सकता है।
उपरोक्त विधि ज्यादातर मामलों में एक अच्छा समाधान है, लेकिन यह स्थानीयकरण के लिए कुंजी-मूल्य जोड़े उत्पन्न करने के लिए उपयुक्त नहीं है जो पूरी तरह से निर्यात स्थानीयकरण पर निर्भर करता है।
स्थानीयकृत पाठ को अधिक सटीक रूप से क्रमबद्ध करने के लिए, हम इसके तुलना कार्य को और संशोधित कर सकते हैं Drink
:
//change
lhs.name < rhs.name
//to
NSLocalizedString(lhs.name,comment: "") < NSLocalizedString(rhs.name,comment: "")
पाठ का अनुवाद इसके भीतर करें InfoView
:
var list:String {
order.list.map(\.drink.name).joined(separator: " ")
}
order.list.map{NSLocalizedString($0.drink.name, comment: "")}.joined(separator: " ")
स्थानीयकृत प्लेसहोल्डर्स के लिए स्थिति अनुक्रमणिका जोड़ें
स्थानीयकृत स्ट्रिंग्स की घोषणा करते समय, एक ही प्रकार के प्लेसहोल्डर्स के पास अलग-अलग भाषाओं में अलग-अलग शब्द क्रम हो सकते हैं। उदाहरण के लिए, निम्नलिखित दिनांक और स्थान पर विचार करें:
// English
Go to the hospital on May 3
// Chinese
五月三日去医院
// Localizable.strings - en
"GO %1$@ ON %2$@" = "Go to %1$@ on %2$@";
"HOSPITAL" = "the hospital";
// Localizable.strings - zh
"GO %1$@ ON %2$@" = "%2$@去%1$@";
"HOSPITAL" = "医院";
var string:String{
let formatString = NSLocalizedString("GO %1$@ ON %2$@", comment: "")
let location = String(localized: "HOSPITAL", comment: "")
return String.localizedStringWithFormat(
formatString,
location,
Date.now.formatted(.dateTime.month().day())
)
}
Text(string)
if cups <= 1 {
cupstring = "cup"
}
else {
cupstring == "cups"
}
.strings
विभिन्न भाषाओं के लिए बहुवचन नियमों को परिभाषित करने के तरीके को संबोधित करने के लिए, Apple स्ट्रिंग .stringdict
डिक्शनरी फ़ाइल के बाहर एक अन्य समाधान प्रदान करता है।
यह विस्तार के साथ एक संपत्ति सूची फ़ाइल है .stringsdict
, और इसके संचालन और संपादन अन्य संपत्ति सूचियों (जैसे कि Info.plist) के समान हैं।
.stringsdict
मूल रूप से बहुवचन मुद्दों को संबोधित करने के लिए पेश किया गया था, लेकिन पिछले कुछ वर्षों में इसमें विभिन्न मूल्यों के लिए अलग-अलग पाठ प्रदर्शित करने (आमतौर पर स्क्रीन आकार में परिवर्तन के लिए उपयोग किया जाता है) और विशिष्ट प्लेटफार्मों (iPhone, iPad, Mac, tvOS) के लिए संबंधित पाठ प्रदर्शित करने जैसी सुविधाएँ जोड़ी गई हैं।

उपरोक्त चित्र में, हमने उपयोग करते हुए बहुवचन नियम NSStringLocalizedFormatKey
, उपयोग करते हुए चर चौड़ाई नियम NSStringVariableWidthRuleType
, और उपकरण-विशिष्ट सामग्री नियम उपयोग करते हुए स्थापित किए हैं NSStringDeviceSpecificRuleType
।
का रूट नोड .stringdict
है Strings Dictionary
, और इसके तहत हमारे सभी नियमों को स्थापित करने की आवश्यकता है। हमें Dictionary
प्रत्येक नियम के लिए एक बनाने की आवश्यकता है। उपरोक्त चित्र में, तीन नियम , , और keys
के अनुरूप हैं । जब प्रोग्राम को ऐसी टेक्स्ट सामग्री मिलती है जो इन तीनों को संतुष्ट करती है , तो यह सही स्थानीयकृत सामग्री उत्पन्न करने के लिए संबंधित नियम का उपयोग करेगा।device %lld
GDP
book %lld cups
keys
इसलिए, हालांकि यह से थोड़ा अलग दिखाई दे सकता है .strings
, अंतर्निहित तर्क संगत है।
- हम इसके भीतर कितने भी नियम स्थापित कर सकते हैं।
- संबंधित स्ट्रिंग डिक्शनरी फ़ाइल के लिए डिफ़ॉल्ट फ़ाइल नाम है
Localizable.stringsdict
। .stringdict
की तुलना में उच्च निष्पादन प्राथमिकता है.strings
। उदाहरण के लिए, यदि हमGDP
दोनों फाइलों में परिभाषित करते हैं, तो केवल संबंधित सामग्री का.stringdict
उपयोग किया जाएगा।

- मात्रा श्रेणियों का अर्थ भाषा पर निर्भर करता है, और सभी भाषाओं में समान श्रेणियां नहीं होती हैं।
- को छोड़कर
other
, सभी श्रेणियां वैकल्पिक हैं।
- , , , , , और प्रारूप स्ट्रिंग्स
NSStringFormatValueTypeKey
में प्रारूप विनिर्देशक का उपयोग करना वैकल्पिक है। उदाहरण के लिए, उपरोक्त परिभाषा में, जब संख्या 1 है, तो लौटाई गई स्ट्रिंग "एक कप" है, और संबंधित को शामिल करना आवश्यक नहीं है ।zero
one
two
few
many
other
%lld
उदाहरण के लिए, बहुवचन रूपों को इंगित करने के लिए अंग्रेजी केवल one
और श्रेणियों का उपयोग करती है। other
अरबी में श्रेणियों के लिए अलग-अलग बहुवचन रूप हैं zero
, one
, two
, few
, many
और other
। यद्यपि रूसी भी many
श्रेणी का उपयोग करती है, संख्या में श्रेणी के नियम many
अरबी नियमों से भिन्न हैं।
परिवर्तनीय चौड़ाई नियम

बहुवचन और उपकरण नियमों के विपरीत, सिस्टम स्वचालित रूप से वापसी मान को अनुकूलित नहीं करेगा। स्थानीयकृत पाठ को परिभाषित करते समय उपयोगकर्ताओं को स्पष्ट रूप से टिप्पणी करने की आवश्यकता होती है, उदाहरण के लिए:
let gdp = (NSLocalizedString("GDP",comment: "") as NSString).variantFittingPresentationWidth(25)
Text(gdp) //返回 GDP(Billon Dollor)
let gdp = (NSLocalizedString("GDP",comment: "") as NSString).variantFittingPresentationWidth(100)
Text(gdp) //返回 GDP(anything you want to talk about)
मुझे लगता है कि इसका उपयोग मामला अपूरणीय नहीं है। आखिरकार, कोड में उच्च स्तर की भागीदारी है।
विशिष्ट उपकरण नियम

वर्तमान में समर्थित डिवाइस प्रकारों में शामिल हैं: एप्लेट टीवी, ऐप्पल वॉच, आईपैड, आईफोन, आईपॉड, मैक।
उपयोगकर्ताओं को कोड में हस्तक्षेप करने की आवश्यकता नहीं है, क्योंकि सिस्टम उनके हार्डवेयर डिवाइस के आधार पर संबंधित सामग्री लौटाएगा।
प्रयोग 5: भुगतान बटन को पुनर्परिभाषित करना
भुगतान बटन को बेहतर बनाने के लिए बहुवचन नियमों का उपयोग करें।
भुगतान बटन के लिए कोड स्थित है ButtonView
:
Button {
showPayResult.toggle()
} label: {
Text("Pay for \(order.totalQuantity) drinks")
}
Localizable.stringsdict
सबसे पहले एक फाइल बनाएं ।


अंग्रेजी के लिए, हमें शून्य, एक और अन्य के लिए केस सेट करने की आवश्यकता है। अंग्रेजी में, हम उन्हें निम्नानुसार सेट करते हैं:

अंग्रेजी, केवल शून्य और अन्य सेट करने की जरूरत है

ऑर्डर की मात्रा समायोजित करें, और बटन अलग-अलग भाषाओं और ऑर्डर की मात्रा के अनुसार संबंधित स्थानीयकृत पाठ लौटाएगा।

प्रैक्टिकल 2 में, हम Localizable.strings में "%lld पेय के लिए भुगतान करें" के लिए की-वैल्यू जोड़ी सेट करते हैं, लेकिन क्योंकि .stringdict की उच्च प्राथमिकता है, सिस्टम NSStringPluralRuleType नियम का उपयोग करके प्राथमिकता देगा।
अभ्यास 6: मुझे टैप करें या मुझे क्लिक करें
डिवाइस के आधार पर ऐड ड्रिंक बटन पर विभिन्न सामग्री प्रदर्शित करें।
उदाहरण के लिए, हम tap
iPhone और iPad, select
Apple TV और click
Mac पर प्रदर्शित कर सकते हैं।
चीनी में निम्नलिखित जोड़ें:

जोड़ेंEnglish


फ़ॉर्मेटर
केवल प्रदर्शन लेबल का स्थानीयकरण करना ही पर्याप्त नहीं है। अनुप्रयोगों में, ऐसे कई पहलू हैं जिनके लिए स्थानीयकरण की आवश्यकता होती है, जैसे संख्याएँ, दिनांक, मुद्राएँ, माप की इकाइयाँ और नाम।
Apple ने डेवलपर्स को संपूर्ण समाधान - फ़ॉर्मेटर प्रदान करने के लिए भारी निवेश किया है।
2021 में, Apple ने फॉर्मेटर को और अपग्रेड किया, न केवल स्विफ्ट के तहत कॉलिंग की सुविधा में सुधार किया, बल्कि स्विफ्ट के तहत उपयोग के लिए उपयुक्त फॉर्मेटस्टाइल प्रोटोकॉल भी पेश किया।
FormatStyle के बारे में अधिक जानकारी के लिए, कृपया Apple का New Formatter API पढ़ें : पुराने और नए की तुलना और अनुकूलित कैसे करें ।
प्रयोग 7: तिथि, मुद्रा, प्रतिशत
तारीख

Text(order.date,style: .date) //displays year, month, day
Text(order.date.formatted(.dateTime.weekday())) //displays weekday
- पाठ स्वयं स्वरूपण तिथियों का समर्थन करता है, लेकिन इस तरह से अनुकूलन सीमित है।
- श्रृंखला में आउटपुट सामग्री को परिभाषित करने के लिए नए स्वरूप शैली का उपयोग करें:
मुद्रा

- नंबरफॉर्मेटर बनाना
private func currencyFormatter() -> NumberFormatter {
let formatter = NumberFormatter()
formatter.numberStyle = .currency
formatter.maximumFractionDigits = 2
if locale.identifier != "zh_CN" {
formatter.locale = Locale(identifier: "en-us")
}
return formatter
}
Text(NSNumber(value: item.amount),formatter:currencyFormatter() )
को PERCENTAGE

Text(order.tax.formatted(.percent))
कैलोरी
मापन का उपयोग ऊर्जा की इकाइयों को परिभाषित करने के लिए करें। एक मापन वस्तु एक मात्रा और माप की एक इकाई का प्रतिनिधित्व करती है। मापन प्रकार माप मानों को विभिन्न इकाइयों में परिवर्तित करने के लिए और दो माप मानों के बीच योग या अंतर की गणना करने के लिए एक प्रोग्रामिंग इंटरफ़ेस प्रदान करता है।

init(name: String, price: Double, calories: Double) {
self.name = String.localizedStringWithFormat(NSLocalizedString(name, comment: name))
self.price = price
self.calories = Measurement<UnitEnergy>(value:calories,unit: .calories) // set the original data as calorie
}
var totalCalories:Measurement<UnitEnergy>{
items.keys.map{ drink in
drink.calories * Double(items[drink] ?? 0)
}.reduce(Measurement<UnitEnergy>(value: 0, unit: .calories), +)
}
var measureFormatter:MeasurementFormatter{
let formatter = MeasurementFormatter()
formatter.unitStyle = .medium
return formatter
}
Text(order.totalCalories,formatter: measureFormatter)


विभिन्न भाषा सम्मेलनों (विराम चिह्न, और/या, आदि) के साथ संरेखित होने वाले हाइफ़नेशन नियम बनाना।
var list:String {
order.list.map{NSLocalizedString($0.drink.name, comment: "")}.formatted(.list(type: .and))
}
स्ट्रिंग फ़ाइलों के लिए एक विशिष्ट नाम निर्दिष्ट करने के लिए टैबनाम का उपयोग करें
आप एकाधिक स्ट्रिंग फ़ाइलें बना सकते हैं, और जब फ़ाइल नाम स्थानीयकरण योग्य नहीं होता है, तो आपको फ़ाइल नाम निर्दिष्ट करने की आवश्यकता होती है, जैसे Other.strings
.
Text("Item",tableName: "Other")
अन्य बंडलों से स्ट्रिंग फ़ाइलें निर्दिष्ट करें
यदि आपका ऐप किसी अन्य बंडल का उपयोग करता है जिसमें बहुभाषी संसाधन हैं, तो आप उस बंडल से स्ट्रिंग फ़ाइलों का उपयोग करने के लिए निर्दिष्ट कर सकते हैं।
import MultiLanguPackage // ML
Text("some text",bundle:ML.self)
Text("some text",bundle:Self.self)
Apple ने WWDC 2021 में घोषणा की कि कुछ मार्कडाउन सिंबल को सीधे टेक्स्ट में इस्तेमाल किया जा सकता है। उदाहरण के लिए:
Text("**Hello** *\(year)*")
"**Hello** *%lld*" = "**你好** *%lld*";
एट्रिब्यूटेड स्ट्रिंग के बारे में अधिक जानकारी के लिए, कृपया एट्रिब्यूटेड स्ट्रिंग - टेक्स्ट को पहले से कहीं अधिक सुंदर बनाना पढ़ें
निष्कर्ष
इसलिए, यदि आप अपने ऐप को अधिक उपयोगकर्ताओं द्वारा देखे जाने का प्रयास कर रहे हैं, तो इसे स्थानीयकृत करना निश्चित रूप से इसमें सहायता कर सकता है। और अच्छी खबर यह है कि SwiftUI में ऐसा करना इतना मुश्किल भी नहीं है। तो क्यों न अभी आगे बढ़ें और इसे अभी पूरा कर लें?

मुझे उम्मीद है कि यह लेख आपके लिए मददगार हो सकता है। ट्विटर , डिस्कॉर्ड चैनल , या मेरे ब्लॉग के संदेश बोर्ड के माध्यम से मुझसे संवाद करने के लिए भी आपका स्वागत है ।