Locale — یہ کیا ہے، Foundation کلاس اور لوکلائزیشن

مصنف: IT Sectr اشاعت: 2026-07-12 مطالعے کا وقت: 9 منٹ

Locale iOS اور macOS میں ایک Foundation کلاس ہے جو صارف کے لسانی اور ثقافتی کنونشنز کو سمیٹتی ہے: تاریخ کی شکل، نمبر کی شکل، کرنسی اور پیمائش کی اکائیاں۔ Apple Developer Documentation, 2024 کے مطابق، Locale یہ طے کرتا ہے کہ DateFormatter ایک مہینہ کیسے دکھاتا ہے (جنوری یا January)، ایک نمبر میں اعشاریہ جداکنندہ (کوما یا نقطہ) اور کرنسی کی علامت (روبل، ڈالر یا یورو)۔ ہر Locale مثال ru_RU یا en_US جیسے شناخت کنندہ سے منسلک ہوتی ہے، جہاں پہلا حصہ زبان کا کوڈ (ISO 639-1) اور دوسرا علاقے کا کوڈ (ISO 3166-1) ہے۔ TimeZone کے برعکس، Locale وقت کی مطلق قدر کو متاثر نہیں کرتا، صرف اس کی سٹرنگ نمائندگی کو متاثر کرتا ہے۔

اہم نکات

  • Locale — iOS اور macOS میں ثقافتی اور لسانی فارمیٹنگ کی ترتیبات کے لیے Foundation کلاس
  • شناخت کنندہ ru_RU — زبان کا کوڈ (ISO 639-1) اور علاقے کے کوڈ (ISO 3166-1) کا مجموعہ
  • DateFormatter اور NumberFormatter آؤٹ پٹ کو لوکلائز کرنے کے لیے خودکار طور پر Locale استعمال کرتے ہیں
  • Locale.current — صارف کا نظام لوکیل، مخصوص کارروائیوں کے لیے اوور رائیڈ کیا جا سکتا ہے
  • مقررہ بمقابلہ خودکار اپ ڈیٹ — Locale(identifier:) ایک مقررہ لوکیل بناتا ہے، Locale.current ترتیبات میں تبدیلیوں کو ٹریک کرتا ہے

Foundation میں Locale کیا ہے؟

Locale Swift میں ایک ویلیو ٹائپ ہے (Objective-C میں NSLocale) جو کسی مخصوص زبان اور علاقے کے لیے مخصوص فارمیٹنگ کے اصولوں کے ایک سیٹ کی نمائندگی کرتا ہے۔ TimeZone کے برعکس، جو وقت کا مطلق آفسیٹ طے کرتا ہے، Locale طے کرتا ہے کہ وقت، نمبر اور کرنسی سٹرنگ نمائندگی میں کیسے نظر آتے ہیں۔ وہی تاریخ 2024-07-21 ru_RU کے لیے “21 جولائی 2024” اور en_US کے لیے “July 21, 2024” کے طور پر دکھائی جائے گی۔

ہر Locale مثال دو اجزاء پر مشتمل ہوتی ہے: زبان (مہینوں کے نام، ہفتے کے دن، لفظوں کی ترتیب طے کرتی ہے) اور علاقہ (نمبر کی شکل، کرنسی، کیلنڈر طے کرتا ہے)۔ ان اجزاء کا مجموعہ BCP 47 معیار کے مطابق ایک شناخت کنندہ میں انکوڈ کیا جاتا ہے: ru_RU (روسی زبان، روس)، en_US (انگریزی، امریکہ)، de_DE (جرمن، جرمنی)۔

Unicode CLDR (2024) کے مطابق، iOS میں معاون لوکیل کی تعداد 700 سے زیادہ زبان-علاقے کے مجموعوں سے تجاوز کرتی ہے۔ Foundation CLDR (Common Locale Data Repository) سے ڈیٹا استعمال کرتا ہے — یونیکوڈ کنسورشیم کے زیر انتظام لوکلائزیشن ڈیٹا کا سب سے جامع ذخیرہ۔ یہ تمام Apple آلات پر یکساں فارمیٹنگ کو یقینی بناتا ہے۔

Locale تاریخ اور نمبر کی فارمیٹنگ کو کیسے متاثر کرتا ہے؟

DateFormatter درست مہینے اور دن کے نام منتخب کرنے، تاریخ کے اجزاء کی ترتیب (دن/مہینہ/سال یا مہینہ/دن/سال) اور جداکنندگان طے کرنے کے لیے Locale استعمال کرتا ہے۔ Locale کو واضح طور پر متعین کیے بغیر، DateFormatter ڈیوائس لوکیل استعمال کرتا ہے — یہ یوزر انٹرفیس کے لیے درست ہے لیکن سرور ڈیٹا کے لیے خطرناک ہے جہاں فارمیٹ مقررہ ہونا چاہیے۔

جزوru_RUen_USde_DE
تاریخ (medium)21 جولائی 2024Jul 21, 202421.07.2024
نمبر (1000.5)1 000,51,000.51.000,5
کرنسی (100)100,00 ₽$100.00100,00 €
کیلنڈرگریگورینگریگورینگریگورین
فہرست جداکنندہ;,;

NumberFormatter اعشاریہ جداکنندہ (کوما یا نقطہ)، گروپ بندی جداکنندہ (خلا، کوما، نقطہ) اور کرنسی کی علامت طے کرنے کے لیے Locale استعمال کرتا ہے۔ نمبر پارس کرتے وقت Locale کو نظر انداز کرنا بین الاقوامی ایپلیکیشنز میں بگز کی عام وجوہات میں سے ایک ہے: نمبر “1,5” کا مطلب ru_RU کے لیے “ایک اور نصف” ہے، لیکن en_US کے لیے ڈیجیٹل پارسر اسے کوما کے بعد “پانچ” کے طور پر پڑھے گا۔

اہم: Calendar.current کے ذریعے بنایا گیا Calendar ڈیوائس لوکیل کو وراثت میں لیتا ہے۔ واضح طور پر متعین لوکیل کے ساتھ Calendar(identifier: .gregorian) پیش قیاسی فارمیٹنگ کے لیے تجویز کردہ طریقہ ہے۔ ISO 8601 تاریخوں کے ساتھ کام کرتے وقت، ہمیشہ Locale(identifier: “en_US_POSIX”) استعمال کریں — تکنیکی فارمیٹنگ کے لیے ایک خصوصی لوکیل جو علاقائی ترتیبات سے متاثر نہیں ہوتا۔

Locale شناخت کنندگان: بنیادی فارمیٹ

Locale شناخت کنندہ ایک زبان کے کوڈ (ISO 639-1، دو حروف) اور ایک علاقے کے کوڈ (ISO 3166-1، دو حروف) پر مشتمل ہوتا ہے، جو انڈر اسکور سے الگ ہوتے ہیں۔ مثالیں: ru_RU، en_US، fr_FR، zh_Hans_CN (چینی، آسان تحریر، چین)۔ Foundation BCP 47 فارمیٹ میں شناخت کنندگان کو بھی سپورٹ کرتا ہے: ru-RU، en-US، جو ویب معیارات میں استعمال ہوتے ہیں۔

مکمل شناخت کنندگان کے علاوہ، Locale صرف زبان سے بھی بنایا جا سکتا ہے: Locale(identifier: “ru”) روسی زبان اور اس زبان کے لیے ڈیفالٹ علاقہ (عام طور پر روس) کے ساتھ لوکیل لوٹاتا ہے۔ اسی طرح انگریزی کے لیے: Locale(identifier: “en”) امریکی علاقہ استعمال کرتا ہے۔ یہ طریقہ کسی مخصوص علاقے سے منسلک ہوئے بغیر فارمیٹنگ زبان مقرر کرنے کے لیے مفید ہے۔

خصوصی لوکیل میں en_US_POSIX شامل ہے — تاریخوں اور نمبروں کی مشینی فارمیٹنگ کے لیے ایک تکنیکی لوکیل، جو صارف کی ترتیبات سے آزاد ایک مستحکم فارمیٹ کو یقینی بناتا ہے۔ یہ لوکیل سرور APIs سے تاریخیں پارس کرنے کے لیے لازمی ہے، خاص طور پر ISO 8601 فارمیٹ کے لیے۔ یہ گریگورین کیلنڈر، 24 گھنٹے کا وقت اور اعشاریہ جداکنندہ کے طور پر نقطہ استعمال کرتا ہے۔

swift
import Foundation

// دستیاب لوکیل شناخت کنندگان
let available: [String] = Locale.availableIdentifiers
print("کل لوکیل: \(available.count)")

// روسی لوکیل فلٹر کریں
let russianLocales = available.filter { $0.hasPrefix("ru") }
print("روسی لوکیل: \(russianLocales)")

// لوکیل اجزاء
let locale = Locale(identifier: "de_DE")
print("زبان: \(locale.languageCode ?? "nil")")
print("علاقہ: \(locale.regionCode ?? "nil")")
print("کرنسی: \(locale.currencyCode ?? "nil")")
print("کیلنڈر: \(locale.calendar.identifier)")

دستیاب لوکیل کی جانچ Locale.availableIdentifiers کے ذریعے موجودہ iOS ورژن کے ذریعے معاون تمام شناخت کنندگان کی ایک صف لوٹاتی ہے۔ علاقے کے مطابق فلٹر کرنے کے لیے، regionCode جانچ کے ساتھ Locale.availableIdentifiers.filter استعمال کریں۔ یہ ہارڈ کوڈ شدہ فہرست کے بغیر علاقہ انتخاب کا انٹرفیس بنانے کے لیے مفید ہے۔

Swift میں موجودہ صارف لوکیل کا تعین

Locale.current iOS کی ترتیبات (Settings > General > Language & Region) میں صارف کے متعین کردہ ڈیوائس کے موجودہ لوکیل کو حاصل کرنے کا بنیادی طریقہ ہے۔ یہ پراپرٹی ایپلیکیشن کو دوبارہ شروع کیے بغیر ترتیبات میں زبان یا علاقہ تبدیل کرنے پر خود بخود اپ ڈیٹ ہو جاتی ہے۔ تاہم، یہ مواد کی نمائش کے لیے ترجیحی لوکیل سے مطابقت نہیں رکھتی: صارف انٹرفیس کی زبان انگریزی مقرر کر سکتا ہے لیکن تاریخیں روسی فارمیٹ میں دیکھ سکتا ہے۔

صارف کی ترجیحات کے زیادہ درست تعین کے لیے، Locale.preferredLanguages استعمال کریں — صارف کی ترجیح کے مطابق ترتیب دی گئی زبانوں کی ایک صف۔ پہلا عنصر بنیادی انٹرفیس زبان ہے۔ یہ فہرست Language & Region کی ترتیبات سے مطابقت رکھتی ہے، جس میں ترجیحی ترتیب میں زبانوں کو گھسیٹنا شامل ہے۔ مواصلاتی ایپلیکیشنز (میسنجر، ای میل کلائنٹ) کو مواد کی نمائش کی زبان منتخب کرتے وقت اس ترتیب پر غور کرنا چاہیے۔

swift
import Foundation

// موجودہ نظام لوکیل
let current = Locale.current
print("موجودہ لوکیل: \(current.identifier)")
print("زبان: \(current.language?.disjointName ?? "nil")")

// صارف کی ترجیحی زبانیں
let preferred = Locale.preferredLanguages
print("ترجیحی زبانیں: \(preferred)")

// موجودہ لوکیل سے علاقہ حاصل کریں
if let region = current.regionCode {
    let regionLocale = Locale(identifier: "en_\(region)")
    let countryName = regionLocale.localizedString(
        forRegionCode: region
    )
    print("ملک: \(countryName ?? region)")
}

// 24 گھنٹے فارمیٹ چیک کریں
let uses24h = current.uses24hClock(
    for: .dateAndTime
)
print("24 گھنٹے استعمال کرتا ہے: \(uses24h)")

یوزر انٹرفیس میں لوکلائزیشن: انٹرفیس کی زبان میں مہینوں اور دنوں کے نام دکھانے کے لیے، متعین لوکیل کے ساتھ Calendar استعمال کریں۔ Calendar.current.symbols(for: .month) موجودہ لوکیل کی زبان میں مہینوں کے نام لوٹاتا ہے۔ صارف کی زبان میں ممالک کے نام دکھانے کے لیے، Locale.current.localizedString(forRegionCode:) استعمال کریں۔

Swift میں Locale: استعمال کی مثالیں

تاریخ کی فارمیٹنگ لوکیل آگاہی کے ساتھ صارف کو تاریخیں دکھاتے وقت ایک اہم کام ہے۔ متعین لوکیل کے ساتھ DateFormatter خود بخود صارف کے علاقے کے لیے درست تاریخ اور وقت کا فارمیٹ منتخب کرتا ہے۔ .short، .medium، .long، .full کی قدروں کے ساتھ dateStyle اور timeStyle کے لیے، فارمیٹر تاریخ کے اجزاء کو ترتیب دینے کے لیے لوکیل کے اصول استعمال کرتا ہے۔

swift
import Foundation

let date = Date()

// مختلف لوکیل کے ساتھ فارمیٹ
let formatter = DateFormatter()
formatter.dateStyle = .medium

formatter.locale = Locale(identifier: "ru_RU")
print("روسی: \(formatter.string(from: date))")

formatter.locale = Locale(identifier: "en_US")
print("انگریزی: \(formatter.string(from: date))")

formatter.locale = Locale(identifier: "ja_JP")
print("جاپانی: \(formatter.string(from: date))")

// لوکیل کے ساتھ کرنسی فارمیٹنگ
let numFormatter = NumberFormatter()
numFormatter.numberStyle = .currency

numFormatter.locale = Locale(identifier: "de_DE")
print("جرمن کرنسی: \(numFormatter.string(from: 1234.56) ?? "nil")")

numFormatter.locale = Locale(identifier: "en_US")
print("امریکی کرنسی: \(numFormatter.string(from: 1234.56) ?? "nil")")

سرور APIs سے تاریخیں پارس کرنا مقررہ فارمیٹ کے لیے ہمیشہ Locale(identifier: “en_US_POSIX”) استعمال کرنا چاہیے۔ سرور عام طور پر انگریزی مہینوں کے ناموں کے ساتھ ISO 8601 فارمیٹ میں تاریخیں بھیجتے ہیں، اور موجودہ ڈیوائس لوکیل استعمال کرنے سے پارسنگ میں خرابی ہو سکتی ہے اگر صارف غیر انگریزی علاقے میں ہو۔ en_US_POSIX اس بات کو یقینی بناتا ہے کہ پارسنگ ڈیوائس کی ترتیبات پر منحصر نہ ہو۔

swift
import Foundation

// درست سرور تاریخ پارسنگ
let isoFormatter = DateFormatter()
isoFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZ"
isoFormatter.locale = Locale(identifier: "en_US_POSIX")
isoFormatter.timeZone = TimeZone(secondsFromGMT: 0)

let serverDate = "2024-07-21T14:30:00+0000"
if let parsed = isoFormatter.date(from: serverDate) {
    print("پارس شدہ تاریخ: \(parsed)")
}

// لوکلائزڈ کرنسی کا نام
let usLocale = Locale(identifier: "en_US")
let currencyName = usLocale.localizedString(
    forCurrencyCode: "RUB"
)
print("امریکی لوکیل میں روسی روبل: \(currencyName ?? "nil")")

اضافی صلاحیتیں: Locale اپنے اجزاء کی لوکلائزڈ وضاحتیں methods localizedString(forRegionCode:)، localizedString(forLanguageCode:)، localizedString(forCurrencyCode:) اور localizedString(forCalendarIdentifier:) کے ذریعے فراہم کرتا ہے۔ یہ طریقے اس لوکیل کی زبان میں نام لوٹاتے ہیں جس پر انہیں کال کیا جاتا ہے۔ مثال کے طور پر، Locale(identifier: “ru_RU”).localizedString(forCountryCode: “DE”) “جرمنی” لوٹاتا ہے۔

Locale کے ساتھ کام کرتے وقت عام غلطیاں

نمبر پارس کرتے وقت Locale کو نظر انداز کرنا بین الاقوامی ایپلیکیشنز میں ایک سنگین غلطی ہے۔ واضح لوکیل کے بغیر NumberFormatter موجودہ ڈیوائس لوکیل استعمال کرتا ہے۔ اگر روس میں کوئی صارف “1,5” داخل کرتا ہے، NumberFormatter.number(from: “1,5”) درست طور پر 1.5 لوٹاتا ہے۔ لیکن اگر وہی کوڈ en_US لوکیل والے ڈیوائس پر چلتا ہے، تو پارسنگ nil لوٹاتی ہے کیونکہ en_US کے لیے اعشاریہ جداکنندہ نقطہ ہے۔

سرور کی تاریخوں کے لیے en_US_POSIX کی کمی لطیف بگز کا باعث بنتی ہے۔ dateFormat اور locale = Locale.current کے ساتھ DateFormatter ان علاقوں کے صارفین کے لیے ٹوٹ سکتا ہے جہاں تاریخ کا فارمیٹ امریکی سے مختلف ہے۔ مثال کے طور پر، جرمنی میں DateFormatter “21.07.2024” کی توقع کر سکتا ہے جبکہ سرور “07/21/2024” بھیجتا ہے۔ en_US_POSIX صارف کے علاقے سے آزاد مشینی پارسنگ کے لیے ایک مقررہ فارمیٹ کو یقینی بناتا ہے۔

Date استعمال کرنے کے بجائے تاریخ کی سٹرنگز کا موازنہ کرنا ایک اور عام غلطی ہے۔ ڈویلپر بعض اوقات مختلف لوکیل سے تاریخوں کی سٹرنگ نمائندگیوں کا موازنہ کرتے ہیں، غلط نتائج حاصل کرتے ہیں۔ Locale صرف ڈسپلے کو تبدیل کرتا ہے، تاریخ کی مطلق قدر کو نہیں۔ ہمیشہ Date آبجیکٹس کا موازنہ کریں، ان کی سٹرنگ نمائندگیوں کا نہیں۔ تاریخ کے اجزاء کا موازنہ کرنے کے لیے، واضح طور پر متعین لوکیل کے ساتھ Calendar استعمال کریں۔

WWDC 2023 کے مطابق، ایپلیکیشنز میں تقریباً 30% بین الاقوامی کاری کے مسائل غلط Locale کنفیگریشن سے متعلق ہیں۔ Apple سرور ڈیٹا کے ساتھ کام کرتے وقت ہمیشہ DateFormatter اور NumberFormatter کے لیے واضح طور پر لوکیل مقرر کرنے اور صرف یوزر انٹرفیس ڈسپلے کے لیے Locale.current استعمال کرنے کی سفارش کرتا ہے۔ یہ سادہ عمل علاقائی ترتیبات سے متعلق بیشتر بگز کو ختم کرتا ہے۔

اکثر پوچھے گئے سوالات

Foundation میں Locale کیا ہے؟

Locale ایک Foundation کلاس ہے جو ثقافتی اور لسانی فارمیٹنگ کے اصولوں (تاریخ کی شکل، نمبر کی شکل، کرنسی اور پیمائش کی اکائیاں) کی نمائندگی کرتی ہے۔ یہ لوکلائزڈ ڈیٹا ڈسپلے کے لیے DateFormatter، NumberFormatter اور Calendar کے ساتھ مل کر استعمال ہوتی ہے۔

Locale اور TimeZone میں کیا فرق ہے؟

Locale ڈسپلے فارمیٹ (زبان، علاقائی کنونشنز) طے کرتا ہے، جبکہ TimeZone UTC کے نسبت وقت کا مطلق آفسیٹ طے کرتا ہے۔ Locale سٹرنگ نمائندگی کو متاثر کرتا ہے، TimeZone وقت کی عددی قدر کو متاثر کرتا ہے۔ مکمل تاریخ فارمیٹنگ کے لیے دونوں ایک ساتھ استعمال ہوتے ہیں۔

en_US_POSIX کیا ہے اور اس کی ضرورت کیوں ہے؟

en_US_POSIX تکنیکی فارمیٹنگ کے لیے ایک خصوصی لوکیل ہے جو صارف کی ترتیبات سے آزاد ایک مستحکم فارمیٹ کو یقینی بناتا ہے۔ یہ سرور کی تاریخیں (ISO 8601) پارس کرنے اور APIs کے ساتھ کام کرنے کے لیے لازمی ہے جہاں فارمیٹ پیش قیاسی ہونا چاہیے۔

تمام دستیاب لوکیل کی فہرست کیسے حاصل کریں؟

Locale.availableIdentifiers تمام معاون لوکیل کے شناخت کنندگان کے ساتھ سٹرنگز کی ایک صف لوٹاتا ہے۔ زبان کے مطابق فلٹر کرنے کے لیے، hasPrefix کے ساتھ filter استعمال کریں؛ علاقہ حاصل کرنے کے لیے، Locale(identifier:).regionCode استعمال کریں۔

Locale NumberFormatter کو کیسے متاثر کرتا ہے؟

NumberFormatter اعشاریہ جداکنندہ (کوما یا نقطہ)، کرنسی کی علامت اور گروپ بندی جداکنندہ طے کرنے کے لیے Locale استعمال کرتا ہے۔ مقررہ فارمیٹ کے لیے، لوکیل کو en_US_POSIX پر سیٹ کریں یا فارمیٹر کی خصوصیات واضح طور پر متعین کریں۔

خلاصہ

  • Locale — iOS اور macOS میں تاریخ، نمبر اور کرنسی فارمیٹنگ کو لوکلائز کرنے کے لیے ایک بنیادی کلاس
  • شناخت کنندہ ru_RU درست فارمیٹنگ ترتیبات کے لیے زبان (ISO 639-1) اور علاقہ (ISO 3166-1) کو انکوڈ کرتا ہے
  • DateFormatter اور NumberFormatter لوکلائزڈ آؤٹ پٹ کے لیے خودکار طور پر Locale.current استعمال کرتے ہیں
  • en_US_POSIX — سرور کی تاریخیں پارس کرنے اور مقررہ مشینی فارمیٹنگ کے لیے لازمی لوکیل
  • Locale.current ترتیبات میں تبدیلیوں کو ٹریک کرتا ہے، Locale(identifier:) ایک مقررہ لوکیل بناتا ہے
  • نمبر پارسنگ کے لیے واضح لوکیل ترتیب کی ضرورت ہے — اعشاریہ جداکنندہ صارف کے علاقے پر منحصر ہے
  • Calendar.current ڈیوائس لوکیل کو وراثت میں لیتا ہے؛ پیش قیاسی حسابات کے لیے، لوکیل کو واضح طور پر سیٹ کریں

ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے

IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔

پروجیکٹ پر بحث کریں

مزید پڑھیں