كيفية عرض معلومات العملة في Next.js (موجه الصفحات) الإصدار 16
عرض رموز العملات وأسمائها ورموزها
المشكلة
غالبًا ما تحتاج التطبيقات إلى عرض معلومات العملة دون إظهار سعر فعلي. قد تعرض أداة اختيار العملة قائمة بالعملات المتاحة، وقد تشير الوثائق إلى أسعار الصرف، أو قد يُظهر نموذج الدفع العملات المقبولة. إن عرض "USD" فقط يعتبر غامضًا للمستخدمين غير التقنيين، بينما يتطلب ترميز "الدولار الأمريكي" ترجمة وصيانة يدوية. رموز العملات مثل "$" غير واضحة—فنفس الرمز يمثل الدولار الأمريكي والكندي والأسترالي. يعتمد التمثيل المناسب على السياق ولغة المستخدم.
الحل
استخدم قدرات التنسيق في react-intl لعرض معلومات العملة بالتنسيق الذي يتناسب مع سياقك. للأسماء الكاملة للعملات، استخدم formatDisplayName مع نوع العملة، والذي يقوم تلقائيًا بتوطين أسماء مثل "الدولار الأمريكي" إلى لغة المستخدم. للرموز، استخدم Intl.NumberFormat مع formatToParts لاستخراج الرمز المحلي لرمز عملة معين. لرموز ISO، اعرض الرمز مباشرة. يضمن هذا النهج أن تكون مراجع العملة واضحة ومحلية بشكل صحيح دون عمل ترجمة يدوي.
الخطوات
1. إنشاء مساعد لاستخراج رموز العملات
استخدم Intl.NumberFormat مع formatToParts لاستخراج رمز العملة من رقم منسق.
export function getCurrencySymbol(
currencyCode: string,
locale: string,
): string {
const parts = new Intl.NumberFormat(locale, {
style: "currency",
currency: currencyCode,
currencyDisplay: "narrowSymbol",
}).formatToParts(0);
const currencyPart = parts.find((part) => part.type === "currency");
return currencyPart ? currencyPart.value : currencyCode;
}
خيار currencyDisplay يتحكم في الشكل: "symbol"، "narrowSymbol"، "code"، أو "name". يعيد هذا المساعد الرمز المحلي لأي رمز عملة.
2. إنشاء مكون عرض العملة
بناء مكون يعرض معلومات العملة بتنسيقات مختلفة بناءً على وضع العرض.
import { useIntl } from "react-intl";
import { useRouter } from "next/router";
import { getCurrencySymbol } from "../utils/getCurrencySymbol";
interface CurrencyDisplayProps {
currencyCode: string;
display: "symbol" | "name" | "code";
}
export default function CurrencyDisplay({
currencyCode,
display,
}: CurrencyDisplayProps) {
const intl = useIntl();
const router = useRouter();
const locale = router.locale || "en";
if (display === "symbol") {
const symbol = getCurrencySymbol(currencyCode, locale);
return <span>{symbol}</span>;
}
if (display === "name") {
const name = intl.formatDisplayName(currencyCode, { type: "currency" });
return <span>{name}</span>;
}
return <span>{currencyCode}</span>;
}
طريقة formatDisplayName مع type: 'currency' تعيد اسم العملة المحلي. يكيف المكون مخرجاته بناءً على خاصية العرض.
3. استخدام المكون في سياقات مختلفة
قم بتطبيق مكون عرض العملة حيث تحتاج إلى إظهار معلومات العملة بدون الأسعار.
import CurrencyDisplay from "../components/CurrencyDisplay";
export default function PaymentOptions() {
const acceptedCurrencies = ["USD", "EUR", "GBP", "JPY"];
return (
<div>
<h2>Accepted Currencies</h2>
<ul>
{acceptedCurrencies.map((code) => (
<li key={code}>
<CurrencyDisplay currencyCode={code} display="name" />
{" ("}
<CurrencyDisplay currencyCode={code} display="symbol" />
{")"}
</li>
))}
</ul>
</div>
);
}
هذا يعرض أسماء العملات المحلية مع رموزها، مثل "دولار أمريكي ($)" باللغة الإنجليزية أو "Dollar américain ($)" باللغة الفرنسية، ويتكيف تلقائيًا مع اللغة المحلية للمستخدم.