جب کوئی عربی، فارسی یا اردو عنوان اسٹور تک اس حال میں پہنچتا ہے کہ قوسین غلط طرف ہیں، "feat." کا کریڈٹ دور کے سرے پر دھکیل دیا گیا ہے، یا کیٹلاگ نمبر وہاں تیر رہا ہے جہاں اسے نہیں ہونا چاہیے — تو کچھ بھی خراب نہیں ہوا۔ جو بائٹس آپ نے ٹائپ کیے تھے، تقریباً ہمیشہ وہی بائٹس پہنچے ہیں۔ جو بدلا وہ اُس ڈبے کی بنیادی سمت ہے جس میں متن کھینچا جا رہا ہے، اور اس کا فیصلہ اسٹور کا صفحہ کرتا ہے، آپ کا عنوان نہیں۔ یہ مضمون اس عمل کو اتنی صراحت سے بیان کرتا ہے کہ آپ ڈیلیوری سے پہلے پیش گوئی کر سکیں کہ آپ کے کون سے عنوان بگڑیں گے۔
ایک بات شروع ہی میں کہہ دینی چاہیے، کیونکہ یہی ایمان دارانہ موقف ہے: پوری صنعت میں عربی رسم الخط کی میٹا ڈیٹا غلطیوں کی شرح کی کوئی شائع شدہ پیمائش ہمارے علم میں نہیں۔ مسئلہ ہر جگہ محسوس کیا جاتا ہے اور کہیں ناپا نہیں گیا۔ نیچے کوئی عدد نہیں آتا، کیونکہ دینے کو کوئی عدد ہے ہی نہیں۔
منطقی ترتیب اور نمائشی ترتیب دو الگ چیزیں ہیں
یونیکوڈ متن کو منطقی ترتیب میں محفوظ کرتا ہے — وہی ترتیب جس میں آپ اسے بولتے، ٹائپ کرتے اور بلند آواز میں پڑھتے ہیں۔ نمائشی ترتیب اسی سے رینڈر کے وقت شمار کی جاتی ہے، یونیکوڈ کے دو طرفہ الگورتھم سے، جو Unicode Standard Annex #9 (UAX #9) میں متعین ہے۔ ضمیمہ اس تقسیم پر دو ٹوک ہے: "The Unicode Standard prescribes a memory representation order known as logical order،" اور "When working with bidirectional text, the characters are still interpreted in logical order—only the display is affected."
یہی ایک جملہ اُس مظہر کی وضاحت کر دیتا ہے جو عربی رسم الخط والے فن کاروں کو یہ گمان دلاتا ہے کہ اُن کے میٹا ڈیٹا پر کوئی سایہ ہے: محفوظ لڑی بالکل درست ہو سکتی ہے جبکہ نمائش غلط ہو، اور نمائش بظاہر درست ہو سکتی ہے جبکہ محفوظ بائٹس غلط ہوں — اور اسکرین پر یہ دونوں ناکامیاں ایک جیسی دکھتی ہیں۔ آپ اسے دیکھ کر جانچ نہیں سکتے۔ آپ کے ڈسٹری بیوٹر کا سپورٹ ایجنٹ بھی نہیں۔
دائیں سے بائیں لڑی کے اندر لاطینی لفظ کیوں سرکتا ہے
UAX #9 ہر حرف کو ایک دو طرفہ قسم دیتا ہے۔ عربی، فارسی اور اردو کے حروف AL ہیں (دائیں سے بائیں عربی حروف)۔ لاطینی حروف L ہیں۔ ASCII ہندسے EN ہیں (European Number)، عربی ہندی ہندسے AN ہیں (Arabic Number)۔ خالی جگہیں اور بیشتر رموزِ اوقاف — بشمول قوسین، بریکٹ، ڈیش اور وقفہ — غیر جانب دار ہیں، یعنی اُن کی اپنی کوئی سمت نہیں اور وہ اپنے گرد و پیش سے سمت لیتے ہیں۔
نقصان دو قاعدہ گروہ پہنچاتے ہیں۔
پیراگراف کی سمت، قواعد P2–P3۔ الگورتھم پہلے مضبوط سمتی حرف کو تلاش کرتا ہے اور اُسی سے بنیادی سمت طے کرتا ہے۔ جو عنوان کسی لاطینی لفظ سے شروع ہوتا ہے، اُسے بائیں سے دائیں بنیادی سمت مل جاتی ہے، چاہے اُس کے بعد سب کچھ فارسی ہو۔
غیر جانب دار کا تصفیہ، قواعد N1–N2۔ قاعدہ N1: "A sequence of [neutrals] takes the direction of the surrounding strong text if the text on both sides has the same direction." قاعدہ N2: جن غیر جانب داروں پر اتفاق نہ ہو، وہ پیراگراف کی سمت لے لیتے ہیں۔ پھر قاعدہ L2 نمائش کے لیے ترتیب بدلتا ہے — "reverse any contiguous sequence of characters that are at that level or higher."
ان دونوں کو ملا دیں تو ناکامی بے ترتیب نہیں، طے شدہ ہے۔ ایک لاطینی لفظ — کسی ری مکسر کا نام، feat.، Vol. 2، کوئی کیٹلاگ نمبر، کوئی سن — اپنے گرد کی عربی سے مختلف سطح پر بیٹھتا ہے۔ اس کی حدود پر پڑے غیر جانب دار (خالی جگہ، کھلنے والا قوس) ایک طرف عربی اور دوسری طرف لاطینی پاتے ہیں، چنانچہ N1 کو اتفاق نہیں ملتا اور N2 انہیں پیراگراف کی سمت تھما دیتا ہے۔ جو قوس آپ کے دائیں سے بائیں ٹیکسٹ ایڈیٹر میں ایک طرح طے ہوا تھا، وہ بائیں سے دائیں اسٹور کے صفحے پر دوسری طرح طے ہوتا ہے، اور بریکٹ الگ ہو کر پلٹ جاتا ہے۔
تو نام آهنگ (Nima Remix) خراب نہیں ہے۔ یہ ایک ہی لڑی ہے جو دو سیاقوں میں طے ہو رہی ہے۔ بنیادی سمت سیاق ہے، مواد نہیں، اور اسٹور کا سیاق آپ کا سیاق نہیں۔
وہ ایک کام جو آپ کو ہرگز نہیں کرنا
نمائش کو "ٹھیک" کرنے کے لیے حروف کو الٹا ٹائپ نہ کریں یہاں تک کہ پیش نظارہ درست لگنے لگے۔
اس سے ایسی لڑی بنتی ہے جو منطقی ترتیب میں غلط ہے، ٹھیک ایک رینڈرنگ سیاق میں درست ہے، اور باقی ہر جگہ ٹوٹی ہوئی ہے — بشمول تلاش، ترتیب، فن کار کی مماثلت، اور ہر وہ اسٹور جس کے صفحے کی بنیادی سمت اُس ٹول سے مختلف ہے جس میں آپ نے یہ "درستی" کی۔ آپ نے نمائش کے مسئلے کو، جو قابلِ تلافی ہے، ڈیٹا کے مسئلے میں بدل دیا ہو گا، جو نہیں ہے۔
UAX #9 اسے صراحتاً قابو کرنے کے لیے حروف مقرر کرتا ہے: آئسولیٹ LRI, RLI, FSI اور PDI، اور نشانات LRM, RLM اور ALM۔ تکنیکی اعتبار سے درست حل یہی ہیں۔ یہ نظر نہ آنے والے فارمیٹنگ حروف بھی ہیں، اور بہت سی ڈیلیوری پائپ لائنیں نظر نہ آنے والے فارمیٹنگ حروف بغیر بتائے نکال دیتی ہیں۔ میٹا ڈیٹا فیلڈ میں انہیں ناقابلِ اعتماد سمجھیں۔
ساختی حل: لاطینی لفظ کو بیچ سے نکالیں
جو تدبیر ہر جگہ، ہر رینڈرر میں، بغیر نظر نہ آنے والے حروف کے کام کرتی ہے، وہ ساختی ہے۔ ترجیح کی ترتیب سے:
- جہاں ڈیٹا ماڈل الگ فیلڈ دیتا ہے، وہاں مخلوط سمت والی لڑیوں کے بجائے الگ فیلڈ استعمال کریں۔ فیچرڈ آرٹسٹ کی جگہ آرٹسٹ رول کی سطح ہے، عنوان نہیں۔ Music Biz کی Music Metadata Style Guide مشورہ دیتی ہے کہ فیچرڈ آرٹسٹ کو آرٹسٹ رول کی سطح پر کریڈٹ دیا جائے اور یہ ڈیٹا ٹریک یا البم ریلیز کے عنوان میں نہ ڈالا جائے؛ Spotify کی عوامی ہدایت ہے "You shouldn't include any artists' names in your track or release titles." ورژن کی جگہ ورژن فیلڈ ہے، جس کا سارا کام ہی ایک عنوان رکھنے والی دو ریکارڈنگز میں فرق کرنا ہے۔ ہر لاطینی لفظ جو آپ اپنی الگ فیلڈ میں منتقل کرتے ہیں، ایک دو طرفہ حد ہے جو وجود میں آنا بند ہو جاتی ہے۔
- جو لاطینی لفظ ناگزیر ہو، اسے پہلی جگہ سے ہٹا کر رکھیں۔ پہلی جگہ P2–P3 کے تحت پیراگراف کی سمت طے کرتی ہے۔ جو فارسی عنوان لاطینی لفظ سے کھلتا ہے، وہ فارسی پر مشتمل بائیں سے دائیں پیراگراف ہے، اور آپ کی مراد یہ نہیں تھی۔
- سمت کی حدود پر آرائشی رموز سے گریز کریں۔ ڈیش، سلیش، پائپ اور تہ بہ تہ بریکٹ ایسے غیر جانب دار ہیں جو ٹھیک وہیں بیٹھے ہیں جہاں الگورتھم کے پاس سب سے کم معلومات ہوتی ہیں۔
جہاں کوئی معاہدہ واقعی عنوان میں بلنگ کا تقاضا کرتا ہو، وہاں ضوابط طے شدہ ہیں اور من و عن پیروی کے لائق ہیں۔ Music Biz، "feat." اور "with" کے بارے میں: "when included in the title are generally lowercase and in English." Apple کی اسٹائل گائیڈ: "Formatting of 'feat.' and 'with' must be lowercase, in English, not localized, and in parentheses or brackets." وہ "not localized" کی ہدایت یہاں اصل کام کر رہی ہے — عنوان کی فیلڈ میں "feat." کا عربی، فارسی یا اردو ترجمہ نہ کریں۔ یہ مشین کے پڑھنے کا نشان ہے، لفظ نہیں۔
ہندسے، اور آپ کے ہندسے شاید وہ نہ ہوں جو آپ سمجھ رہے ہیں
تین ہندسی مجموعے زیرِ بحث ہیں:
| مجموعہ | کوڈ پوائنٹ | کہاں مستعمل | دو طرفہ درجہ |
|---|---|---|---|
| ASCII | 0–9 | ہر جگہ | EN |
| عربی ہندی | U+0660–U+0669 (٠١٢٣٤٥٦٧٨٩) | عربی | AN |
| توسیعی عربی ہندی | U+06F0–U+06F9 (۰۱۲۳۴۵۶۷۸۹) | فارسی، اردو | EN |
یہ اندازِ تحریر کے فرق نہیں ہیں۔ یہ الگ الگ کوڈ پوائنٹ ہیں، اور Unicode Character Database کے مطابق ان کا دو طرفہ درجہ تک مشترک نہیں۔ UAX #9 کا قاعدہ W2 یورپی عدد کو عربی عدد میں بدل دیتا ہے جب قریب ترین پچھلا مضبوط حرف عربی حرف ہو، چنانچہ فارسی متن کے اندر یہ دونوں نمائش کے وقت ایک سا برتاؤ کر سکتے ہیں — مگر ترتیب، تلاش یا لڑی کے تقابل میں کبھی نہیں، کیونکہ یہ مختلف حروف ہیں۔ توسیعی عربی ہندی ۲ سے ٹائپ کیا گیا "Vol. 2" اور ASCII 2 سے ٹائپ کیا گیا "Vol. 2" دو مختلف لڑیاں ہیں جو دیکھنے میں تقریباً یکساں ہیں۔
فی کیٹلاگ ایک ہندسی مجموعہ چنیں اور ایک ہی لڑی کے اندر مجموعے کبھی نہ ملائیں۔
جو آپ نے دراصل ٹائپ کیا، اسے کیسے جانچیں
نمائش پر بھروسہ نہیں کیا جا سکتا، لہٰذا بائٹس جانچیں۔ ہر ڈیلیوری سے پہلے تین کام کرنے کے لائق ہیں:
- لڑی کو گلفس کے بجائے کوڈ پوائنٹ کے طور پر پڑھیں۔ جو بھی ٹول آپ کو U+ اقدار دکھاتا ہے، وہ فوراً بتا دے گا کہ یہ فارسی ی (U+06CC) ہے یا عربی ي (U+064A)، فارسی ک (U+06A9) ہے یا عربی ك (U+0643) — ایسا فرق جسے بیشتر فونٹ ہموار کر دیتے ہیں اور کوئی پروف ریڈر نہیں دیکھ سکتا۔ یہی بات کسی بھٹکے ہوئے تطویل (U+0640) پر لاگو ہوتی ہے، جسے یونیکوڈ کی کوئی نارملائزیشن صورت نہیں ہٹاتی، اور اُس صفر چوڑائی غیر جوڑنے والے (U+200C) پر بھی جسے کوئی فارم فیلڈ خاموشی سے کھا گئی۔
- عنوان کو بائیں سے دائیں سیاق اور دائیں سے بائیں سیاق، دونوں میں چسپاں کر کے موازنہ کریں۔ اگر رموزِ اوقاف دونوں میں مختلف جگہ گرتے ہیں تو آپ کے پاس مخلوط سمت والی لڑی ہے اور ایک لاطینی لفظ ہے جسے اپنی الگ فیلڈ میں ہونا چاہیے۔
- اپنی پچھلی ریلیز سے حرف بہ حرف موازنہ کریں، نظر سے نہیں۔ عربی رسم الخط میں بٹے ہوئے کیٹلاگ کی وجہ تقریباً ہمیشہ ایسا فرق ہوتی ہے جو نظر نہیں آتا: ایک ریلیز فارسی کی بورڈ لے آؤٹ پر ٹائپ ہوئی، اگلی عربی پر۔
Mazufa کے ٹولز پورے کے پورے آپ کے براؤزر میں چلتے ہیں — نہ آڈیو اپ لوڈ ہوتا ہے نہ متن — اور جب عنوان دائیں سے بائیں ہو تو وہ خود بخود dir="rtl" مقرر کر دیتے ہیں، چنانچہ ٹائپ کرتے وقت آپ کو جو نظر آتا ہے وہ اُسی سیاق سے مطابقت رکھتا ہے جس کے لیے لڑی لکھی گئی تھی۔ mazufa.com پر ایک مفت میٹا ڈیٹا چیکر بھی ہے جو آپ ہی کے آلے پر چلتا ہے اور کئی نظر نہ آنے والی صورتیں نشان زد کرتا ہے: مخلوط ہندسی مجموعے، تطویل، بھٹکا ہوا یا غائب ZWNJ، عربی بمقابلہ فارسی یے اور کاف، اور غیر NFC لڑیاں۔
ڈیلیوری سے پہلے کیا کریں
اپنی اگلی ریلیز کا عنوان اور فن کار کا نام لیں اور چار کام کریں۔ ہر وہ لاطینی لفظ جو آپ منتقل کر سکتے ہیں، اپنی الگ فیلڈ میں لے جائیں — فیچرڈ آرٹسٹ آرٹسٹ رول میں، ورژن ورژن فیلڈ میں۔ یقینی بنائیں کہ کچھ بھی لاطینی لفظ سے شروع نہ ہو۔ اپنا ہندسی مجموعہ یکساں کریں اور کوئی بھی تطویل ہٹا دیں۔ پھر لڑی کو ایک بار کوڈ پوائنٹ کے طور پر پڑھیں، اور اُسی لڑی کو من و عن اُس معیاری املا کے طور پر محفوظ کر لیں جسے آپ ہر آئندہ ریلیز پر دوبارہ ٹائپ کیے بغیر استعمال کریں گے۔
اگر کسی عنوان کے بیچ میں لاطینی لفظ رکھنا پھر بھی ناگزیر ہو، تو اسے ڈیلیور کر دیں اور یہ مان لیں کہ وہ مختلف جگہوں پر مختلف طرح دکھے گا۔ یہ نمائش کا نتیجہ ہے، نقصان نہیں۔ لڑی درست ہے۔ ایک پیش نظارہ درست دکھانے کے لیے اسے الٹا ٹائپ کرنا ہی وہ واحد طریقہ ہے جس سے وہ حقیقتاً غلط ہو جائے گی۔
مآخذ
- Unicode Standard Annex #9, Unicode Bidirectional Algorithm (Revision 51, Unicode 17.0.0, 2025-08-13) — https://www.unicode.org/reports/tr9/
- Unicode Standard Annex #15, Unicode Normalization Forms (Version 57, Unicode 17.0.0, 2025-07-30) — https://www.unicode.org/reports/tr15/
- Unicode Character Database — حروف کی خصوصیات: دو طرفہ درجہ، تجزیاتی نقشے — https://www.unicode.org/ucd/
- Music Business Association, Music Metadata Style Guide v2.1 — https://www.musicbiz.org/wp-content/uploads/2016/04/MusicMetadataStyleGuide_V2.1.pdf
- Apple Music Style Guide — https://help.apple.com/itc/musicstyleguide/en.lproj/static.html
- Spotify for Artists, Music metadata guidelines — https://support.spotify.com/us/artists/article/metadata-formatting-guidelines/
ان دستاویزات کے ورژن اور نظرِ ثانی کی تاریخیں کارپس میں اوپر درج صورت میں دی گئی ہیں، اور اُن کے لیے پڑھنے کی کوئی الگ تاریخ ریکارڈ نہیں کی گئی۔