-
Notifications
You must be signed in to change notification settings - Fork 0
Tutorial 5 Localization ur
🌎 زبان: اردو — تمام ۳۳ زبانیں دیکھیں
مقصد: سمجھنا کہ LockedIn CLI ۳۳ زبانیں کیسے بولتی ہے — اور کسی ایجنٹ کو ایک اور شامل کرنے کی ہدایت دینے کی مشق کرنا۔ لوکلائزیشن ایک شاندار ایجنٹ ٹاسک ہے: یہ سونپنے کے لیے کافی میکانکی ہے، مگر اس میں حقیقی پابندیاں ہیں (ایک ٹیسٹ گیٹ، لے آؤٹ اصول، گرامر کا جائزہ) جو آپ کو جائزہ لینا سکھاتی ہیں۔
← پچھلا: ٹیوٹوریل ۴ پرامپٹنگ اور جائزہ · صفحۂ اول پر واپس
CLI کو ہسپانوی، ہندی، جاپانی، آسان چینی، یا کسی بھی شپ شدہ زبان میں چلائیں اور سب کچھ بدل جاتا ہے — اسپلیش، ہیلپ ٹیبل، ہر کمانڈ کا آؤٹ پٹ، چیٹ سیشن، حتیٰ کہ قانونی باریک تحریر بھی۔ صرف مذاق نہیں: پوری دکھائی دینے والی سطح۔
lockedin --lang ur post
LOCKEDIN_LANG=hi lockedin
lockedin --lang zh auraزبان کا اسٹارٹ اپ پر خودکار پتا لگتا ہے، جو ترجیحی ترتیب میں حل ہوتی ہے:
-
--langفلیگ (--lang ur،--lang=fr،-l ja) -
LOCKEDIN_LANGماحولی متغیر - آپ کا لوکیل (
LC_ALL/LC_MESSAGES/LANG، پھر OS/رن ٹائم لوکیل) - انگریزی، بطورِ فال بیک
normalizeLang() عام طور پر لوکیل کا بنیادی سب ٹیگ استعمال کرتا ہے۔ اس کا مطلب ہے
de-DE de منتخب کرتا ہے، مگر tlh غلطی سے tl نہیں بن جاتا؛ اصل متبادل نام
fil اور tgl جان بوجھ کر ٹیگالوگ (tl) پر نقشہ بند ہوتے ہیں، نارویجن nb اور
nn no پر نقشہ بند ہوتے ہیں، لیگیسی انڈونیشین in id پر نقشہ بند ہوتا ہے، اور
لیگیسی عبرانی iw he پر نقشہ بند ہوتا ہے۔ دو علاقائی کوڈز کو ان کے بنیادی سب ٹیگ
میں سمیٹنے کے بجائے حرف بہ حرف محفوظ رکھا جاتا ہے: pt-BR/pt_BR معیاری علاقائی
کوڈ منتخب کرتے ہیں جبکہ عام pt پس-موافق برازیلی پرتگالی بنڈل ہی رہتا ہے (دونوں
برازیلی پرتگالی ہیں اور ایک ہی pools/UI شیئر کرتے ہیں)، اور en-SG/en_SG
سنگلش رکھتے ہیں (عام en انگریزی ہی رہتی ہے)۔ ہانگ کانگ روایتی چینی اسی قسم کی
استثنا ہے:
zh-HK، zh_HK.UTF-8، اور zh-Hant-HK zh-HK منتخب کرتے ہیں، جبکہ عام zh
اور مینلینڈ ٹیگز آسان چینی (zh) منتخب کرتے ہیں۔
دوران-پرواز بدلنا — /language پینل۔ CLI ہمیشہ کسی اور زبان میں شروع ہو سکتی
تھی (--lang، LOCKEDIN_LANG)؛ اب آپ سیشن کے وسط میں بدل سکتے ہیں۔ تمام ۳۳
زبانوں کو کوڈ کے لحاظ سے، ہر ایک کو اس کی اپنی اسکرپٹ میں، فہرست کرنے کے لیے
/language (متبادل نام /lang اور /languages) ٹائپ کریں؛ /language el باقی
سیشن کے لیے بدل دیتا ہے۔ نکتہ فرار کا راستہ ہے: بدلنے کے بعد یہ نئی زبان میں دوبارہ
ڈرا کرتا ہے اور پھر، اسی زبان میں جو آپ نے ابھی چھوڑی، واپسی کا بالکل درست
راستہ پرنٹ کرتا ہے — اب /language en، اگلی بار lockedin --lang en — تاکہ غلطی
سے 日本語 یا ಕನ್ನಡ میں پہنچنا آپ کو کبھی پھنسا نہ دے۔ (دو بار بدلیں اور وہ زبان
بھی پیش کی جاتی ہے جس کا آپ کا LOCKEDIN_LANG نام لیتا ہے۔) --lang اور
LOCKEDIN_LANG غیر تبدیل شدہ ہیں۔ /a11y کی طرح، یہ ایک مخلص افادیت ہے، طنز کا
حصہ نہیں۔
تمام قابلِ ترجمہ متن بنڈلز میں رہتا ہے، فی زبان ایک، ہر ایک اس شکل کا:
{ meta: { lang: 'ur', name: 'اردو', dir: 'rtl' },
pools: { HOOKS: [ /* ~25 */ ], LESSONS: [ /* ... */ ], /* ... */ },
ui: { buzzwordDensity: 'بز ورڈ کثافت: ', /* لیبل، سرخیاں */ } }-
poolsوہ مواد arrays ہیں (مذاق) جن سے آپ باب ۲ میں ملے تھے۔ -
uiکروم اسٹرنگز ہیں: لیبل، عنوانات، اور چھوٹے ٹیمپلیٹس۔
انگریزی src/lockedin.js کے اندر ریفرنس بنڈل ہے؛ باقی ۳۲ بنڈل ماڈیول
src/content/*.js میں رہتے ہیں: ar، bn، bo، de، el، en-SG، es،
eu، fa، fi، fr، he، hi، id، is، it، ja، kn، ms، nl،
no، pl، pt، pt-BR، ru، sv، tl، tr، uk، ur، zh، اور zh-HK
(pt-BR pt کے pools/UI کو دوبارہ استعمال کرتا ہے مگر الگ سے رجسٹرڈ ہے)۔ ہر ایک
BUNDLES میں رجسٹرڈ ہے؛ SUPPORTED_LANGS ان کیز سے بنتی ہے، اور renderHelp() وہ
بنی ہوئی کوڈ فہرست پرنٹ کرتا ہے۔ کوئی UI بنڈل فہرست کو ہارڈ کوڈ نہیں کرتا۔
setLang('fr'); // فعال زبان کو فرانسیسی بنڈل کی طرف کریں
// L = فعال پولز، U = فعال UI
pick(L.HOOKS) // فرانسیسی ابتدائی جملہ
U.buzzwordDensity // "Densité de jargon : "کیونکہ ہر رینڈرر L اور U پڑھتا ہے (کبھی کوئی ہارڈ کوڈڈ اسٹرنگ نہیں)، تنہا
setLang پورا تجربہ بدل دیتا ہے۔ یہی سارا کرتب ہے۔
یہ رہی وہ ناقابلِ تغیر شرط جو کوئی زبان شامل کرنا محفوظ بناتی ہے:
ہر بنڈل کو بالکل وہی
poolsاورuiکیز ظاہر کرنی چاہئیں جو انگریزی کرتی ہے۔
ایک ٹیسٹ اسے تمام ۳۳ بنڈلز پر نافذ کرتا ہے۔ اگر آپ انگریزی میں کوئی نئی UI اسٹرنگ
شامل کریں اور اسے یوکرینی میں ترجمہ کرنا بھول جائیں، تو npm test سرخ ہو جاتا ہے
اور بتاتا ہے کہ کون سی کی غائب ہے۔ آپ خاموشی سے کوئی آدھی-ترجمہ شدہ زبان شپ نہیں
کر سکتے۔
زبانیں ٹرمینل لے آؤٹ پر مختلف طریقوں سے دباؤ ڈالتی ہیں:
-
جاپانی، آسان چینی، اور ہانگ کانگ روایتی چینی مشرقی ایشیائی چوڑے / فُل وِڈتھ
حروف استعمال کرتی ہیں۔
vw()انہیں دو کالم گنتا ہے، اورwrap()لمبے بغیر-وقفہ ٹوکنز کو سختی سے توڑتا ہے تاکہ CJK متن کارڈز اور باکسز کے اندر رہے۔ -
ہندی اور کنڑ غیر-جگہ لینے والے/محیط کمبائننگ مارکس (
Mn/Me) استعمال کرتی ہیں، جیسے ماترائیں اور ویرام۔vw()انہیں صفر کالم گنتا ہے تاکہ وہ ماپی گئی چوڑائی کو نہ بڑھائیں۔ -
box()ہر باڈی لائن کو پیڈ کرنے سے پہلے لپیٹتا ہے، تاکہ کوئی لمبا ترجمہ شدہ بینر اب حاشیے سے باہر نہ نکل سکے۔ - ہر بنڈل
sentenceEndاورlistSepسیٹ کرتا ہے (مثلاً./。،,/、) تاکہ جنریٹر-مرتب جملے فطری طور پر پڑھے جائیں۔
جب آپ کوئی زبان شامل کرتے ہیں، تو کارڈ ہیڈر اسٹرنگز (cardSubtitle، cardMeta،
cardFooter) کو پھر بھی ≤ ۶۰ دکھائی دینے والے کالم میں فٹ ہونا چاہیے۔ عربی،
فارسی، عبرانی، اور اردو meta.dir: 'rtl' سیٹ کرتی ہیں۔ آؤٹ پٹ میں بطورِ ڈیفالٹ کوئی
bidi کنٹرول نہیں ہوتا، کیونکہ کچھ ٹرمینلز انہیں باکس شدہ لیبلز کے طور پر رینڈر کرتے
ہیں۔ LOCKEDIN_BIDI=on ان ٹرمینلز کے لیے جن کے بارے میں معلوم ہو کہ وہ سپورٹ کرتے
ہیں، لپیٹنے کے بعد متوازن آئسولیٹس واضح طور پر فعال کرتا ہے، ANSI، ASCII کمانڈز، اور
منطقی کاپی/پیسٹ ترتیب محفوظ رکھتے ہوئے۔ رسائی آؤٹ پٹ ہمیشہ ان کنٹرولز کو ہٹا دیتا ہے۔
opt-in کے بغیر، ملی جلی RTL/LTR ترتیب کم نفیس ہو سکتی ہے؛ کبھی سپورٹ کو پروب یا
اخذ نہ کریں۔
کچھ UI ٹیمپلیٹس خام صارف عبارتیں {cap} جیسے پلیس ہولڈرز کے ساتھ جوڑتے ہیں۔ انہیں
خانہ-بہ-خانہ ترجمہ مت کریں۔ جملہ گرامری طور پر درست رہنا چاہیے جب پلیس ہولڈر کوئی
ایسا جملہ ہو جو صارف نے ٹائپ کیا، نہ کہ کوئی صاف ستھرا اسم۔
ایک حقیقی احتیاطی بگ: جاپانی ٹیمپلیٹس جو は کو براہِ راست {cap} کے بعد رکھتے
ہیں، غلط لگ سکتے ہیں جب {cap} ایک مکمل عبارت ہو۔ حل "زیادہ زور سے ترجمہ کرنا" نہیں
ہے؛ یہ ٹیمپلیٹ کی ساخت دوبارہ ترتیب دینا ہے (مثلاً ایک اسم-ساز شامل کرنا یا پلیس
ہولڈر منتقل کرنا) تاکہ کوئی بھی صوابدیدی صارف ان پٹ پھر بھی فٹ ہو جائے۔
یہ مشق آج بھی بالکل اسی طرح کام کرتی ہے۔ ایک ایسی زبان منتخب کریں جسے آپ جانچ سکیں (یا ایجنٹ سے کہیں کہ وہ جانچے)، اور اسے مکمل طور پر چلائیں۔ پہلے اسپیک لکھیں:
ڈینش (
da) شامل کریں۔src/content/da.jsکو ایک{ meta, pools, ui }بنڈل کے طور پر بنائیں جس میں انگریزی جیسی وہی کیز ہوں، ہر اندراج کا ترجمہ کرتے ہوئے (مواد پولز ~۲۵ فی ایک، تمام UI اسٹرنگز)۔src/lockedin.jsمیںBUNDLESمیںdaرجسٹر کریں۔--lang daاور ایکda-*لوکیل کو اسے منتخب کرنا چاہیے۔ کارڈ ہیڈر اسٹرنگز کو چوڑائی کی حد کے اندر رکھیں۔npm testسبز رہنا چاہیے، اور موجودہ لوکلائزڈ ٹیسٹوں کی عکاسی کرتے ہوئے ڈینش ناقابلِ تغیر شرائط + پتا لگانے کے ٹیسٹ شامل کریں۔
پھر باب ۳–۴ سے لوپ چلائیں:
- پہلے منصوبہ۔ "کوڈ لکھنے سے پہلے، مجھے وہ فائلیں بتاؤ جو تم بدلو گے اور تم انگریزی کے ساتھ کی پیریٹی کیسے برقرار رکھو گے۔"
-
پہلے ٹیسٹ۔ "ناکام ہونے والے ٹیسٹ شامل کرو:
daپتا لگانا،daکے لیے کی پیریٹی، اور ایک ڈینش reflect/connect ناقابلِ تغیر شرط۔ بنڈل ابھی مت بناؤ۔" -
نافذ کریں۔ "اب
src/content/da.jsکو کسی موجودہ بنڈل کا کی بہ کی ترجمہ کر کے بناؤ، اسے رجسٹر کرو، اور ٹیسٹ پاس کراؤ۔ بے ترتیبی کے لیے صرفpick/shuffle۔" -
گیٹ + جائزہ۔
npm test، پھرlockedin --lang da post— اور diff پڑھو: کیا ہر کی کا ترجمہ ہوا؟ کیا کارڈ کے حاشیے اب بھی سیدھ میں ہیں؟ کیا{cap}والے ٹیمپلیٹس خام صارف عبارتوں میں بچ جاتے ہیں؟
اگر ایک پوری زبان بہت زیادہ ہو تو چھوٹی وارم-اپ مشقیں:
- "تمام ۳۳ زبان بنڈلز میں ایک اور
TAGLINEشامل کرو، گنتی برابر رکھتے ہوئے۔" - "چیک کرو کہ کنڑ
cardFooter≤ ۶۰ دکھائی دینے والے کالم ہے اور وضاحت کرو کہ کمبائننگ مارکس کیسے ماپے گئے۔" - "مجھے وہ ٹیسٹ دکھاؤ جو ناکام ہو جاتا اگر میں
ja.jsسے کوئیuiکی حذف کر دیتا۔"
-
src/content/es.jsپر سرسری نظر ڈالیں — یہ اب بھی کسی نئے بنڈل کے لیے ایک دوستانہ ٹیمپلیٹ ہے۔ -
docs/HANDOFF.md→ "Adding a language" دوبارہ پڑھیں۔ - کمانڈ ریفرنس میں کثیر اللسانی مذاق کا لطف اٹھائیں۔
یہ رہا مکمل ٹیوٹوریل۔ اب آپ ایک AI ایجنٹ کو ہدایت دے سکتے ہیں کہ وہ فیچرز بنائے اور انہیں ایک ٹیسٹ گیٹ کے پیچھے لوکلائز کرے — ۳۳ زبانوں میں اور مزید کے لیے تیار۔ متفق؟ 👇
Tutorial
- 1 · Orientation
- 2 · How the Code Works
- 3 · Your First Agent Task
- 4 · Prompting & Reviewing
- 5 · Localization
Reference
Satire · Sátira · 風刺. Not affiliated with LinkedIn. GPL-3.0-or-later.