پیغام کی فارمیٹنگ

18ways بطورِ ڈیفالٹ waysParser استعمال کرتا ہے۔ یہی پارسر آپ کو سورس کا متن پڑھنے کے قابل رکھنے کے ساتھ ساتھ متغیرات اور لوکیل سے ہم آہنگ فارمیٹنگ کو بھی سنبھالنے دیتا ہے۔

متغیرات

متغیرات کے لیے بریسز استعمال کریں۔ <T> کے ساتھ، آپ ویلیو کو پیغام کے ساتھ اسی لائن میں رکھ سکتے ہیں۔

tsx
'use client';
 
import { T } from '@18ways/react';
 
export function WelcomeMessage() {
  return <T>Hello {{ name: 'Ada' }}</T>;
}

جمع بنانے کا عمل

ICU-style plural blocks استعمال کریں جب جملے کی ساخت واقعی بدلتی ہو۔

tsx
import { T } from '@18ways/react';
 
export function InboxCount({ count }: { count: number }) {
  return (
    <T>{{ count, format: 'plural, =0{No messages} =1{One message} other{{count} messages}' }}</T>
  );
}

تاریخیں اور رقم

اگر آپ ایک حقیقی Date یا amount اور currency والے منی جیسے آبجیکٹ کو پاس کریں، تو 18ways اسے خود بخود فارمیٹ کرے گا حتیٰ کہ {publishedAt} یا {renewalTotal} جیسے سادہ پلیس ہولڈر کے ساتھ بھی۔

explicit formatter صرف اُس وقت استعمال کریں جب آپ آؤٹ پُٹ کو کنٹرول کرنا چاہتے ہوں، جیسے dateStyle:long یا ایک custom money divisor.

tsx
'use client';
 
import { T } from '@18ways/react';
 
export function BillingSummary() {
  const publishedAt = new Date('2026-03-14T09:00:00Z');
  const renewalTotal = {
    amount: 1900,
    currency: 'USD',
  };
 
  return (
    <>
      <p>
        <T>Last updated {{ publishedAt }}</T>
      </p>
      <p>
        <T>Renewal total {{ renewalTotal }}</T>
      </p>
      <p>
        <T>Detailed date: {{ publishedAt, format: 'date, long' }}</T>
      </p>
    </>
  );
}

ڈیفالٹ طور پر، رقم کی مقداروں کو چھوٹی اکائیوں کے طور پر سمجھا جاتا ہے۔ اگر آپ کے پاس پہلے ہی بڑی اکائیاں ہیں، تو divisor: 1 کے ساتھ واضح money formatter استعمال کریں۔

بلاک منتخب کریں

جب کاپی چند الگ، محدود ویلیوز پر منحصر ہو تو select استعمال کریں۔

tsx
import { T } from '@18ways/react';
 
export function SignInState({ isSignedIn }: { isSignedIn: boolean }) {
  return (
    <T vars={{ name: 'Ada' }}>
      {{
        isSignedIn,
        format:
          'select, true{Welcome back, {name}} false{Sign in to continue} other{Sign in to continue}',
      }}
    </T>
  );
}

جزوی ترکیب

جملے کو JSX میں اکٹھا رکھیں اور 18ways عام صورتوں میں اصل UI اسٹرکچر کو برقرار رکھے گا جیسے <T><a href="#">مزید دیکھنے کے لیے یہاں کلک کریں</a></T>، بغیر اس کے کہ آپ کو فریگمنٹس کو خود ہاتھ سے جوڑنا پڑے۔

tsx
'use client';
 
import Link from 'next/link';
import { T } from '@18ways/react';
 
export function HeroCta() {
  return (
    <T>
      <Link href="/pricing">Click here</Link> to see more
    </T>
  );
}

پارسر کو بند کرنا

@18ways/react آپ کو روٹ پر messageFormatter="none" سیٹ کرنے یا ایک کسٹم formatter function فراہم کرنے کی اجازت دیتا ہے۔ یہ ایک ایڈوانسڈ escape hatch ہے، ڈیفالٹ راستہ نہیں۔

عملی اصول

اگر جملہ چند متغیروں کے ساتھ ایک مکمل فقرے کی صورت میں لکھا جا سکتا ہے، تو اسے ایک ہی پیغام میں رکھیں۔ اس سے ترجمے کا معیار کوڈ میں ٹکڑوں کو جوڑنے کے مقابلے میں بہت زیادہ بہتر ہو جاتا ہے۔

پیغام کی فارمیٹنگ