اپنی ایپ یا ویب سائٹ میں کئی زبانیں کیسے شامل کریں
کسی ایپ میں کئی زبانیں شامل کرنے کے لیے، انٹرفیس کا ہر متن ترجمے کی فائلوں میں منتقل کریں (ہر زبان کے لیے ایک فائل)، انہیں کسی i18n لائبریری سے لوڈ کریں، اور ایک زبان بدلنے کا بٹن شامل کریں جو صارف کا انتخاب یاد رکھے۔ عوامی صفحات جو آپ سرچ میں لانا چاہتے ہیں، ان کے لیے ہر زبان کو اپنا URL دیں، جیسے /fr/، اور hreflang ٹیگز کے ذریعے ورژنز کو آپس میں جوڑیں۔ پھر وہ حصے بھی سنبھالیں جو اکثر بھول جاتے ہیں: تاریخیں، نمبر اور کرنسی، بعض زبانوں میں لمبا متن، دائیں سے بائیں رسم الخط، اور وہ مواد جو آپ کے ڈیٹا بیس میں محفوظ ہے۔
آپ کو جن اصطلاحات کا سامنا ہوگا
- بین الاقوامی بنانا (i18n): کوڈ کو کسی بھی زبان کے لیے تیار کرنا، یعنی بغیر ہارڈ کوڈڈ متن، مقامی انداز کی فارمیٹنگ اور لچکدار لے آؤٹ۔ "18" سے مراد i اور n کے درمیان کے حروف کی تعداد ہے۔
- مقامی بنانا (l10n): ایپ کو کسی خاص زبان یا مارکیٹ کے مطابق ڈھالنا، زیادہ تر ترجمہ، اور کبھی کبھار کرنسی، تصاویر اور قانونی متن بھی۔
- Locale: ایک زبان اور اختیاری طور پر ایک خطہ، جیسے
en-GBیاpt-BR۔
i18n ایک بار کر لیں تو ہر نئی زبان شامل کرنا زیادہ تر صرف ترجمے کا کام رہ جاتا ہے۔
اختیارات اور ان کے فائدے نقصان
| طریقہ | کیسے کام کرتا ہے | کس کے لیے بہتر | نقصان |
|---|---|---|---|
| i18n لائبریری + ترجمے کی فائلیں (مثلاً react-i18next، next-intl، vue-i18n) | متن ہر locale کی JSON فائل میں ہوتا ہے؛ کمپونینٹس کلیدوں سے متن تلاش کرتے ہیں | زیادہ تر ایپس | شروع میں کوڈ کی دوبارہ ترتیب؛ ترجموں کو برقرار رکھنا |
| ترجمہ مینجمنٹ سسٹم (مثلاً Crowdin، Lokalise، Phrase) | مترجمین کے لیے ہوسٹڈ ایڈیٹر، جو آپ کی فائلوں کے ساتھ ہم آہنگ رہتا ہے | بہت سی زبانیں، کئی مترجم | ادائیگی والا؛ ایک اور ٹول سیٹ اپ کرنا |
| بلڈ کے وقت مشین یا AI ترجمہ | API سے ترجمے کے مسودے بنائیں، پھر نظرِثانی کریں | جلدی بہت سی زبانوں تک پہنچنا | معیار کی جانچ ضروری؛ API کے اخراجات |
| براؤزر یا ویجٹ کا خودکار ترجمہ | وزیٹر کا براؤزر صفحے کو فوراً ترجمہ کر دیتا ہے | وہ چیز جس پر آپ کا کنٹرول نہ ہو | معیار پر کوئی کنٹرول نہیں؛ ترجمہ شدہ صفحات کو آپ کے اپنے نہیں سمجھا جاتا |
| ہر زبان کے لیے الگ سائٹ | ہر مارکیٹ کے لیے سائٹ کی نقل | بہت مختلف مارکیٹیں | سب کچھ دو بار دیکھنا اور برقرار رکھنا پڑتا ہے |
زیادہ تر ایپس کے لیے، ترجمے کی فائلوں کے ساتھ ایک معیاری i18n لائبریری مناسب بنیاد ہے۔ اگر آپ چاہیں تو مشین یا AI سے مسودہ ترجمہ کروائیں، پھر وہ متن جو صارفین سب سے زیادہ دیکھتے ہیں، کسی روانی سے بولنے والے سے چیک کروائیں۔
کثیر لسانی ایپ کے حصے
ترجمے کی فائلیں
<h1>Welcome back</h1> لکھنے کے بجائے کوڈ میں t('dashboard.welcome') لکھا جاتا ہے، اور ہر locale کی فائل میں متعلقہ متن ہوتا ہے:
{
"dashboard": {
"welcome": "Welcome back, {{name}}",
"items_one": "{{count}} item",
"items_other": "{{count}} items"
}
}
متغیرات کے لیے placeholders استعمال کریں، جملوں کے ٹکڑوں کو جوڑنے کے بجائے، کیونکہ الفاظ کی ترتیب زبانوں میں مختلف ہوتی ہے۔ اور لائبریری کے plural rules استعمال کریں: انگریزی میں دو شکلیں ہیں (1 item، 2 items)، لیکن کچھ زبانوں میں تین، چار یا اس سے زیادہ شکلیں ہوتی ہیں۔
تاریخیں، نمبر اور رقم کی فارمیٹنگ
ان کو ہاتھ سے فارمیٹ نہ کریں۔ براؤزر کا بلٹ اِن Intl API کسی بھی locale کے لیے فارمیٹنگ کرتا ہے: انگریزی میں 1,234.5 جرمن میں 1.234,5 بن جاتا ہے؛ تاریخیں دن پہلے یا مہینہ پہلے دکھائی جا سکتی ہیں؛ اور کرنسی کا نشان اپنی جگہ بدل لیتا ہے۔ تاریخیں UTC میں محفوظ کریں اور رقم کو کرنسی کوڈ کے ساتھ عدد کے طور پر رکھیں، اور صرف ڈسپلے کے وقت فارمیٹ کریں۔
پھیلنے والا لے آؤٹ
ترجمہ شدہ متن اکثر انگریزی سے لمبا ہوتا ہے، خاص طور پر جرمن اور فنش زبانوں کے الفاظ۔ مقررہ چوڑائی کے بٹنوں اور کٹے ہوئے لیبلز سے بچیں، اور اپنی سب سے لمبی زبان کے ساتھ جانچ کریں۔
دائیں سے بائیں زبانیں
عربی، عبرانی، فارسی اور اردو دائیں سے بائیں پڑھی جاتی ہیں۔ ان locales کے لیے صفحے پر dir="rtl" سیٹ کریں، اور CSS کی logical properties استعمال کریں (margin-left کے بجائے margin-inline-start؛ Tailwind میں ml-4 کے بجائے ms-4)، تاکہ لے آؤٹ خود بخود الٹ جائے۔ سمت کا اشارہ دینے والے آئیکنز، جیسے تیر، کو بھی الٹنا ہوگا۔
زبان بدلنے کا بٹن اور خودکار پہچان
ہر صفحے پر زبان بدلنے کا بٹن دکھائیں، جس پر ہر زبان کا اپنا نام لکھا ہو ("Deutsch"، "Français"، "العربية")، جھنڈوں کے بجائے۔ جھنڈے ملکوں کی نمائندگی کرتے ہیں، زبانوں کی نہیں۔ پہلی بار آنے پر براؤزر کی ترجیحی زبان کو پہچان کر ایک ورژن تجویز کریں، لیکن وزیٹر کا واضح انتخاب مقدم رکھیں اور اسے یاد رکھیں۔
URLs اور SEO
جو صفحات آپ سرچ نتائج میں لانا چاہتے ہیں، ان کے لیے ہر زبان کا اپنا URL ہونا چاہیے۔ ستمبر 2026 تک، کثیر لسانی سائٹس کے لیے Google کی رہنمائی یہ ہے:
- ہر زبان کے لیے الگ URLs — سب ڈائریکٹری (
example.com/fr/) سب سے سادہ ہے؛ سب ڈومینز اور ملکی ڈومینز بھی کام کرتے ہیں۔ URL پیرامیٹرز (?lang=fr) تجویز نہیں کیے جاتے۔ - صرف کوکی یا براؤزر کی ترتیب سے زبان نہ بدلیں؛ Google کا کرالر دوسرے ورژنز کو کبھی نہ دیکھ سکے۔
- زبان کی بنیاد پر خودکار ری ڈائریکٹ نہ کریں؛ اس کے بجائے ورژنز کے درمیان لنک دیں۔
- hreflang استعمال کریں تاکہ Google کو معلوم ہو کہ کون سے صفحات ایک دوسرے کے ترجمے ہیں۔ ہر ورژن کو خود اور باقی تمام ورژنز کو درج کرنا ہوگا، ورنہ یہ تشریحات نظر انداز ہو سکتی ہیں۔ فال بیک صفحے کے لیے
x-defaultشامل کریں۔ - Google کسی صفحے کی زبان اس کے نظر آنے والے مواد سے پہچانتا ہے،
langیا hreflang سے نہیں، اس لیے صرف مینو نہیں، پورا صفحہ ترجمہ کریں۔
پھر بھی ہر ورژن پر <html lang="fr"> سیٹ کریں: اسکرین ریڈرز اسی سے صحیح تلفظ چنتے ہیں، اور یہ رسائی (accessibility) کی ضرورت ہے۔
لاگ ان شدہ ایپ کی اسکرینز کو انڈیکس کروانے کی ضرورت نہیں، اس لیے ان کے لیے زبان صارف کی پروفائل میں محفوظ کرنا کافی ہے۔ عوامی صفحات کو کرال کروانے کے بارے میں جاننے کے لیے AI سے بنی ویب سائٹس کے لیے SEO دیکھیں۔
آپ کے ڈیٹا بیس میں مواد
انٹرفیس کا متن فائلوں میں ہوتا ہے، جبکہ پروڈکٹ کے نام، بلاگ پوسٹس اور زمرے جیسا مواد ڈیٹا بیس میں ہوتا ہے۔ دو عام طریقے:
- ترجموں کا ٹیبل:
product_translations (product_id, locale, name, description)۔ صاف ہے اور کئی زبانوں تک بڑھ سکتا ہے۔ - ہر فیلڈ کے لیے JSON کالم:
name: {"en": "...", "fr": "..."}۔ چند زبانوں کے لیے زیادہ سادہ۔
طے کریں کہ ترجمہ غائب ہو تو کیا ہوگا، عام طور پر خالی جگہ دکھانے کے بجائے ڈیفالٹ زبان دکھائیں۔
ای میلز اور نوٹیفکیشنز
ہر صارف کی زبان محفوظ کریں اور اسے ای میلز، نوٹیفکیشنز اور PDFs کے لیے بھی استعمال کریں۔ ایپ کا ترجمہ کرنا آسان ہے، لیکن یہ بھولنا آسان ہے کہ ویلکم ای میل اب بھی انگریزی میں آ رہی ہے۔
کام کرنے والے پرامپٹس
react-i18next کے ساتھ internationalisation شامل کریں۔ صارف کو نظر آنے والا ہر متن locales/en.json میں namespaced keys کے ساتھ منتقل کریں، stringوں کو جوڑنے کے بجائے interpolation اور plural rules استعمال کریں، اور تاریخیں، نمبر اور قیمتیں موجودہ locale کے مطابق Intl سے فارمیٹ کریں۔ ابھی کوئی الفاظ تبدیل نہ کریں۔
فرانسیسی اور جرمن شامل کریں۔ عوامی مارکیٹنگ صفحات کو /fr/ اور /de/ URL prefixes دیں، انگریزی root پر رہے، ہر صفحے پر hreflang لنکس دیں (خود کا حوالہ اور x-default سمیت)، اور ہر صفحے پر html lang سیٹ کریں۔ ایک زبان بدلنے کا بٹن شامل کریں جو ہر زبان کا اپنا نام دکھائے۔ لاگ ان شدہ صفحات کے لیے زبان صارف کی پروفائل میں محفوظ کریں۔
دائیں سے بائیں سپورٹ کے ساتھ عربی شامل کریں: عربی کے لیے dir="rtl" سیٹ کریں، بائیں اور دائیں کے margins اور paddings کو logical properties سے بدلیں، سمت بتانے والے آئیکنز الٹ دیں، اور جانچیں کہ فارمز اور ٹیبلز اب بھی درست پڑھے جاتے ہیں۔
مرحلہ وار طریقہ
- اپنی پہلی اضافی زبان چنیں، حقیقی طلب کی بنیاد پر، یعنی جہاں آپ کے وزیٹرز یا گاہک ہیں۔
- کوڈ کو internationalise کریں: متن فائلوں میں منتقل کریں، plurals اور
Intlفارمیٹنگ شامل کریں۔ اسے صرف انگریزی کے ساتھ شپ کریں اور جانچیں کہ کچھ بدلا تو نہیں۔ - عوامی صفحات کے لیے URL ڈھانچہ طے کریں اور hreflang شامل کریں۔
- ترجمہ کریں: مشین یا AI سے مسودہ بنائیں، پھر کسی روانی سے بولنے والے سے نظرِثانی کروائیں۔ مترجمین کو سیاق و سباق دیں، کیونکہ "Book" ایک اسکرین پر اسم ہو سکتا ہے اور دوسری پر فعل۔
- ڈیٹا بیس کا مواد ترجمہ کریں اور فال بیکs طے کریں۔
- باقی چیزیں مقامی بنائیں: ای میلز، ایرر پیغامات، قانونی صفحات، اور وہ تصاویر جن میں متن ہو۔
- ہر زبان کو فون کی چوڑائی پر جانچیں، اور اگر ضرورت ہو تو دائیں سے بائیں کے ساتھ بھی۔
- ایک عمل طے کریں تاکہ نئے فیچرز ترجمے کے ساتھ شپ ہوں، مہینوں بعد نہیں۔
عام غلطیاں
- جملوں کو جوڑنا (
"You have " + n + " messages")، جو دوسری زبانوں میں ٹوٹ جاتا ہے۔ - کمپونینٹس میں ہارڈ کوڈڈ متن چھوڑ دینا، جیسے ایرر پیغامات اور ویلیڈیشن کے جملے۔
- تاریخیں اور قیمتیں ہاتھ سے فارمیٹ کرنا۔
- زبانوں کے لیے جھنڈے استعمال کرنا، اور ایسے خودکار ری ڈائریکٹس جو لوگوں کو غلط ورژن میں پھنسا دیں۔
- تمام زبانوں کے لیے ایک ہی URL ان عوامی صفحات پر جنہیں انڈیکس ہونا ہے۔
- hreflang کے واپسی لنکس غائب ہونا، جس سے Google تشریحات کو نظر انداز کرتا ہے۔
- انٹرفیس کا ترجمہ کرنا لیکن مواد کا نہیں، یا اس کے برعکس۔
- بغیر نظرِثانی کے مشین ترجمہ قیمتوں، قانونی اور چیک آؤٹ صفحات پر۔
کثیر لسانی چیک لسٹ
- صارف کو نظر آنے والا کوئی ہارڈ کوڈڈ متن نہیں؛ plural rules اور placeholders استعمال ہوئے
- تاریخیں، نمبر اور کرنسی
Intlسے فارمیٹ ہوتے ہیں - ہر صفحے پر مقامی ناموں کے ساتھ زبان بدلنے کا بٹن؛ انتخاب یاد رکھا جاتا ہے
- عوامی صفحات کے لیے ہر زبان کا الگ URL؛ کوئی زبردستی ری ڈائریکٹ نہیں
- ہر ورژن پر hreflang، خود اور x-default سمیت
- ہر صفحے پر
html lang(اور ضرورت ہو توdir="rtl") سیٹ ہے - ڈیٹا بیس کا مواد ترجمہ ہوا اور مناسب فال بیکs ہیں
- ای میلز اور نوٹیفکیشنز صارف کی زبان میں جاتے ہیں
- صارفین کو دکھایا جانے والا متن کسی روانی سے بولنے والے نے چیک کیا ہے
Mythex پر کثیر لسانی ایپ
Mythex پر آپ چیٹ میں پوچھ کر زبانیں شامل کرتے ہیں؛ اس کے لیے کوئی الگ ترجمہ پینل نہیں ہے، اس لیے اوپر کے پرامپٹس جوں کے توں کام کرتے ہیں۔ پہلے internationalisation کا مرحلہ کریں اور زبانیں شامل کرنے سے پہلے Preview میں جانچیں؛ یہ ایک بڑی ری فیکٹرنگ ہے، اور چیٹ چیک پوائنٹ آپ کو واپس جانے کا مقام دیتا ہے اگر کچھ ٹوٹ جائے (چیٹ اور چیک پوائنٹس)۔ اگر آپ چاہتے ہیں کہ ایپ AI یا ترجمے کے API سے خودکار ترجمہ کرے، تو یہ آپ کی اپنی API key استعمال کرے گی جو پروجیکٹ کی سیٹنگز میں محفوظ ہوگی (ماحولیاتی متغیرات اور secrets)؛ LLM APIs کیسے استعمال کریں میں اخراجات کی وضاحت ہے۔ نئی زبانیں تیار ہونے کے بعد دوبارہ پبلش کریں۔
سوالات
i18n اور localisation میں کیا فرق ہے؟
بین الاقوامی بنانا (i18n) کا مطلب ہے کوڈ کو کئی زبانیں سپورٹ کرنے کے قابل بنانا: متن کو کوڈ میں براہ راست لکھے بغیر، مقامی انداز کی تاریخیں اور نمبر، اور ایسے لے آؤٹ جو لمبے الفاظ اور دائیں سے بائیں رسم الخط کو سنبھال سکیں۔ مقامی بنانا (l10n) اسے کسی ایک زبان یا مارکیٹ کے لیے ڈھالنے کا کام ہے، جس میں زیادہ تر ترجمہ شامل ہوتا ہے۔
کیا میں اپنی ایپ کے ترجمے کے لیے صرف مشین ٹرانسلیشن یا AI استعمال کر سکتا ہوں؟
پہلے مسودے کے لیے، جی ہاں۔ جدید مشین اور AI ترجمہ انٹرفیس کے متن کے لیے اچھا کام کرتا ہے۔ لیکن صارفین کو دکھائی جانے والی ہر چیز پر کسی روانی سے بولنے والے شخص سے نظرِثانی کروائیں، خاص طور پر قانونی متن، قیمتوں اور مارکیٹنگ کے جملوں پر، کیونکہ وہاں لہجہ اور چھوٹی غلطیاں اہم ہوتی ہیں۔
کیا ہر زبان کا اپنا URL ہونا چاہیے؟
وہ عوامی صفحات جنہیں آپ سرچ نتائج میں لانا چاہتے ہیں، ان کے لیے جی ہاں۔ Google ہر زبان کے لیے الگ URL تجویز کرتا ہے، جیسے /fr/ اور /de/، کوکی یا براؤزر کی ترتیب سے زبان بدلنے کے بجائے، کیونکہ اس کا کرالر ورنہ صرف ایک ہی ورژن دیکھ سکتا ہے۔
کیا مجھے وزیٹر کو اس کے براؤزر کی زبان کی بنیاد پر ری ڈائریکٹ کرنا چاہیے؟
تجویز دیں، زبردستی نہ کریں۔ Google خودکار زبان ری ڈائریکٹ کے خلاف مشورہ دیتا ہے، کیونکہ اس سے لوگ اور کرالر دوسرے ورژنز تک نہیں پہنچ پاتے۔ ایک چھوٹا سا پرامپٹ دکھائیں جو مناسب زبان کی پیشکش کرے، اور ہر صفحے پر نمایاں زبان بدلنے کا بٹن رکھیں۔