Files
sharper.ly/apps/web/app/i18n/messages/ar.json
T
IllusionandClaude Opus 5 8464c24fb1 Match the home page to Figma frame 253:4799
The page resembled the design but had drifted in every band. Ported it
section by section against the measured frame.

Hero (253:4800)
- Add the SHARP wordmark above the headline. The frame paints "SHARP"
  only, not the full SHARP-ER lockup the navigation carries, so this is
  the SHARP mark on its own, as vector (extracted from the brand
  guideline artwork) at its true 273px rather than an upscaled PNG.
- Drop the leading project name from the headline in both locales: the
  wordmark above now carries it, as the frame composes it.
- Stop the lead paragraph rendering by default. The frame's subheading
  node is hidden, but the code fell back to the site description, so a
  paragraph always appeared.
- Fallback CTAs become "Discover SHARP-ER" / "Explore Our Work", 24px
  apart. Both the CMS and fallback paths now render through one HeroCta,
  so an editor-authored secondary CTA gets the designed white treatment
  instead of the dark-surface outline.
- The picture loses its radius and gains the frame's two flat washes and
  wide band.

Figures band
- 253:4835 is hidden="true" in the frame, so the band and its "figures
  still being confirmed" placeholder no longer render. It appears only
  once the CMS supplies real numbers.

Launch (361:10853)
- Heading renders at Display/Small instead of Heading/H2. SectionHeader
  gains `size` since display-sm was reachable only via titleAs="h1".
- The three-paragraph story becomes the frame's single centred lead with
  its four bold runs, which needed a ProseRun copy shape - a flat string
  cannot carry emphasis.
- The captions were Card.Content links with images and action labels;
  the frame draws plain centred Heading/H2 text.
- Add the three-up photo strip that bleeds past the page and clips.
- Remove the funding line, which the frame does not draw in this band.
  EU visibility still stands via the nav badge and footer statement.

Partners (393:14754)
- Heading moves from centred to start-aligned, up to Display/Small.
- Tiles move to the sunken surface (they were lighter than the page; the
  design has them darker), lose their border, 8px -> 4px radius, padding
  on the inline start only, logo 48 -> 70px, name to Body/Large Bold.

Footer
- Black ground via a new --surface-footer token, a top rule, links up to
  Body/Large Bold 18/28 at 24px spacing, and column headings to
  Body/Small Bold on --text-tertiary.
- Keeps the real IA from ROUTE_SLUGS rather than frame 140:7814's
  labels, which name six pages that do not exist.

Tokens
- New tier-1 steps for values the design uses and the ramps lacked
  (--color-black-a20, --color-green-200-a12, --opacity-50) and tier-2
  --overlay-picture-shade / --overlay-picture-tint for the hero wash.

copy.ts now names the Figma frame as the source for the home strings.
The Arabic launch lead is rebuilt from the approved Arabic column to
carry the English frame's meaning and is marked (ar-draft) pending
client sign-off - the file has no Arabic home frame to work from.

Verified: typecheck and build green, no raw hex or tier-1 token in
components/routes, no physical-direction utility, 141 i18n keys at
parity, both locales rendered and checked for RTL mirroring.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-14 12:38:05 +02:00

172 lines
7.4 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"site": {
"name": "SHARP-ER",
"fullName": "العمل المشترك لتعزيز سيادة القانون – مسار الخروج",
"tagline": "نحو تعزيز سيادة القانون، معًا",
"description": "مبادرة وطنية تدعم المجتمع المدني والمؤسسات المحلية والمجتمعات الليبية في تعزيز العدالة والمساءلة والحوكمة الرشيدة. يمتد المشروع من ديسمبر 2025 إلى ديسمبر 2027.",
"metaTitle": "SHARP-ER — العمل المشترك لتعزيز سيادة القانون – مسار الخروج",
"euStatement": "بتمويل من الاتحاد الأوروبي",
"euEmblemAlt": "شعار الاتحاد الأوروبي",
"implementedBy": "الجهات المنفّذة",
"followUs": "تابعوا SHARP-ER"
},
"nav": {
"primaryLabel": "التنقل الرئيسي",
"footerLabel": "أقسام الموقع",
"openMenu": "فتح القائمة",
"closeMenu": "إغلاق القائمة",
"homeLinkLabel": "الصفحة الرئيسية لمشروع SHARP-ER",
"skipToContent": "تخطَّ إلى المحتوى",
"sections": {
"home": "الرئيسية",
"aboutAndStrategy": "عن المشروع والاستراتيجية",
"about": "عن المشروع",
"whatWeDo": "ماذا نفعل",
"activities": "الأنشطة والمبادرات",
"engagementAndOpportunities": "المشاركة والفرص",
"events": "تقويم الفعاليات",
"applications": "طلبات وفرص المشاركة",
"news": "الأخبار والمستجدات",
"contact": "اتصل بنا",
"knowledgeAndImpact": "المعرفة والتأثير",
"resources": "الموارد والمنشورات",
"knowledgeHub": "مركز المعرفة"
}
},
"language": {
"label": "اللغة",
"switchTo": "التبديل إلى {language}",
"en": "English",
"ar": "العربية"
},
"actions": {
"readMore": "اقرأ المزيد",
"learnMore": "اعرف المزيد",
"discoverSharper": "اكتشف SHARP-ER",
"exploreOurWork": "اطّلع على عملنا",
"viewDetails": "عرض التفاصيل",
"viewAll": "عرض الكل",
"download": "تحميل",
"register": "سجّل الآن",
"apply": "قدّم طلبك",
"submit": "إرسال",
"cancel": "إلغاء",
"close": "إغلاق",
"share": "مشاركة",
"print": "طباعة",
"backToHome": "العودة إلى الصفحة الرئيسية",
"backToTop": "العودة إلى الأعلى",
"readRecap": "اقرأ الملخص",
"browseHub": "تصفّح المركز",
"seeActivities": "اطّلع على أنشطتنا",
"learnWhatWeDo": "تعرّف على عملنا",
"seeCurrentCalls": "اطّلع على الدعوات الحالية",
"applyToJoin": "قدّم طلب الانضمام",
"viewUpcomingSessions": "اطّلع على الجلسات القادمة",
"submitYourUpdate": "شاركونا مستجداتكم",
"addToCalendar": "أضف إلى التقويم",
"tryAgain": "حاول مرة أخرى"
},
"filters": {
"heading": "تصفية",
"all": "الكل",
"upcoming": "القادمة",
"ongoing": "جارية",
"completed": "منتهية",
"region": "المنطقة",
"topic": "الموضوع",
"date": "التاريخ",
"author": "الكاتب",
"partner": "المنظمة الشريكة",
"category": "التصنيف",
"year": "السنة",
"clear": "مسح عوامل التصفية",
"apply": "تطبيق عوامل التصفية",
"resultCount": "{count} نتيجة",
"noResults": "لا توجد نتائج.",
"noResultsHint": "جرّب إزالة أحد عوامل التصفية أو البحث عن شيء آخر.",
"sortBy": "الترتيب حسب",
"sortNewest": "الأحدث أولًا",
"sortOldest": "الأقدم أولًا"
},
"search": {
"label": "بحث",
"placeholder": "ابحث في موقع SHARP-ER",
"submit": "بحث",
"clear": "مسح البحث",
"resultsFor": "نتائج البحث عن ”{query}“"
},
"pagination": {
"label": "ترقيم الصفحات",
"previous": "السابق",
"next": "التالي",
"page": "صفحة {page} من {pageCount}",
"goToPage": "الانتقال إلى صفحة {page}",
"showing": "عرض {from}–{to} من {total}"
},
"events": {
"upcoming": "الفعاليات القادمة",
"past": "الفعاليات السابقة",
"dateTime": "التاريخ والوقت",
"location": "الصيغة/الموقع",
"online": "عبر الإنترنت",
"inPerson": "حضوري",
"registrationStatus": "حالة التسجيل",
"statusOpen": "مفتوح",
"statusClosed": "مغلق",
"statusFull": "مكتمل",
"register": "تسجيل",
"joinWaitlist": "الانضمام إلى قائمة الانتظار",
"confirmationTitle": "تم تسجيلك بنجاح",
"confirmationBody": "شكرًا لك — تم تأكيد مكانك في {event} بتاريخ {date}. سنرسل لك تذكيرًا وأي تفاصيل إضافية على البريد الإلكتروني الذي قدّمته.",
"noEvents": "لا توجد فعاليات لعرضها بعد."
},
"news": {
"tabProject": "أخبار SHARP-ER",
"tabNetwork": "من الشبكة",
"publishedOn": "نُشر بتاريخ {date}",
"postedBy": "نشرته {organisation}",
"partnerPrompt": "هل أنتم منظمة شريكة؟"
},
"resources": {
"fileMeta": "{type} · {size}",
"categoryResearch": "دراسات بحثية واستطلاعية",
"categoryPolicy": "مقالات سياساتية",
"categoryReports": "تقارير المشروع",
"categoryVisibility": "مواد الرؤية وأوراق الحقائق"
},
"opportunities": {
"statusOpen": "مفتوحة",
"statusClosed": "مغلقة",
"deadline": "الموعد النهائي: {date}",
"eligibility": "معايير الأهلية"
},
"form": {
"name": "الاسم",
"organisation": "المنظمة",
"email": "البريد الإلكتروني",
"subject": "الموضوع",
"message": "الرسالة",
"phone": "رقم الهاتف",
"optional": "اختياري",
"required": "مطلوب",
"send": "إرسال",
"sending": "جارٍ الإرسال…",
"sent": "تم إرسال الرسالة",
"errorRequired": "هذا الحقل مطلوب.",
"errorEmail": "أدخل بريدًا إلكترونيًا صالحًا.",
"errorConsent": "يرجى تأكيد الموافقة لإتمام التسجيل.",
"errorGeneric": "حدث خطأ ما. يرجى المحاولة مرة أخرى.",
"successTitle": "شكرًا لك",
"successBody": "تم إرسال رسالتك. سنعاود التواصل معك في أقرب وقت ممكن."
},
"errors": {
"statusLabel": "خطأ {status}",
"notFoundTitle": "الصفحة غير موجودة",
"notFoundBody": "الصفحة التي تبحث عنها غير موجودة أو تم نقلها.",
"genericTitle": "حدث خطأ ما",
"genericBody": "حدث خطأ غير متوقع. يرجى المحاولة مرة أخرى بعد قليل.",
"detailsLabel": "تفاصيل تقنية"
}
}