init project

This commit is contained in:
root
2026-06-25 19:06:59 -04:00
parent c5dfee6efb
commit 5d017f533a
349 changed files with 31330 additions and 0 deletions
+373
View File
@@ -0,0 +1,373 @@
import type { Locale } from '@/lib/localization/config';
export interface ComponentLabCopy {
developmentLabel: string;
title: string;
body: string;
actions: { primary: string; conversion: string; loading: string; disabled: string };
form: {
label: string;
supporting: string;
placeholder: string;
error: string;
checkbox: string;
switch: string;
};
tabs: { label: string; items: Array<{ id: string; label: string; content: string }> };
accordion: { items: Array<{ id: string; title: string; content: string }> };
alert: { title: string; body: string };
workflow: Array<{ id: string; ordinal: string; title: string; description: string }>;
comparison: { beforeTitle: string; afterTitle: string; before: string[]; after: string[] };
preview: {
title: string;
caption: string;
illustrative: string;
rows: Array<{ id: string; primary: string; secondary: string; status: string }>;
};
metric: { value: string; label: string; qualification: string; status: string };
cta: { title: string; body: string; primary: string; unavailable: string };
dialog: { open: string; title: string; description: string; close: string; content: string };
menu: { label: string; first: string; second: string };
}
const copy = {
en: {
developmentLabel: 'Development fixture, not production content',
title: 'Core component system',
body: 'A deterministic test surface for accessible, localized, theme-aware, and RTL-native components.',
actions: {
primary: 'Primary action',
conversion: 'Book a demonstration',
loading: 'Submitting',
disabled: 'Unavailable action',
},
form: {
label: 'Work email',
supporting: 'Use a fictional address in this development fixture.',
placeholder: 'name@fictional.invalid',
error: 'Enter an address in the required format.',
checkbox: 'Send a fictional confirmation',
switch: 'Enable compact preview',
},
tabs: {
label: 'Operations views',
items: [
{ id: 'reservations', label: 'Reservations', content: 'Reservation fixture content.' },
{
id: 'fleet',
label: 'Fleet availability',
content: 'Fleet fixture content with intentionally expanded wording.',
},
{ id: 'returns', label: 'Returns', content: 'Return inspection fixture content.' },
],
},
accordion: {
items: [
{
id: 'a1',
title: 'How does the component system handle localization?',
content:
'Copy is passed as complete localized values rather than concatenated fragments.',
},
{
id: 'a2',
title: 'Does this submit data?',
content: 'No. External submission remains blocked pending CRM and legal approval.',
},
],
},
alert: {
title: 'Development-only fixture',
body: 'This surface demonstrates behavior without publishing customer evidence or operational claims.',
},
workflow: [
{
id: 'reserve',
ordinal: '1',
title: 'Reservation',
description: 'Capture an illustrative reservation request.',
},
{
id: 'prepare',
ordinal: '2',
title: 'Preparation',
description: 'Review a fictional vehicle readiness state.',
},
{
id: 'handover',
ordinal: '3',
title: 'Handover',
description: 'Present a controlled pickup checklist.',
},
{
id: 'return',
ordinal: '4',
title: 'Return',
description: 'Record an illustrative inspection outcome.',
},
],
comparison: {
beforeTitle: 'Fragmented operations',
afterTitle: 'Connected workflow',
before: ['Repeated manual entry', 'Scattered status checks', 'Unclear ownership'],
after: ['One shared workflow', 'Visible state changes', 'Explicit responsibility'],
},
preview: {
title: 'Fleet availability preview',
caption: 'Illustrative interface fixture. It is not live operational data.',
illustrative: 'Illustrative data',
rows: [
{ id: 'RDG-1042', primary: 'Compact vehicle', secondary: 'RDG-1042', status: 'Available' },
{ id: 'RDG-2088', primary: 'Utility vehicle', secondary: 'RDG-2088', status: 'Preparing' },
],
},
metric: {
value: '24',
label: 'Illustrative workflow checkpoints',
qualification: 'Development fixture only. Not a public performance claim.',
status: 'Research only',
},
cta: {
title: 'CTA destination remains governed',
body: 'The conversion treatment is reusable, while unresolved destinations stay disabled.',
primary: 'Book a demonstration',
unavailable: 'Destination pending approval',
},
dialog: {
open: 'Open dialog',
title: 'Accessible dialog fixture',
description: 'Focus moves into this native modal and returns to the trigger.',
close: 'Close dialog',
content: 'No data is submitted from this component fixture.',
},
menu: { label: 'More actions', first: 'Review fixture', second: 'Archive fixture' },
},
fr: {
developmentLabel: 'Exemple de développement, contenu non destiné à la production',
title: 'Système de composants principal',
body: 'Une surface de test déterministe pour des composants accessibles, localisés, adaptés aux thèmes et natifs en RTL.',
actions: {
primary: 'Action principale',
conversion: 'Réserver une démonstration',
loading: 'Envoi en cours',
disabled: 'Action indisponible',
},
form: {
label: 'Adresse e-mail professionnelle',
supporting: 'Utilisez une adresse fictive dans cet exemple de développement.',
placeholder: 'nom@fictif.invalid',
error: 'Saisissez une adresse au format requis.',
checkbox: 'Envoyer une confirmation fictive',
switch: 'Activer laperçu compact',
},
tabs: {
label: 'Vues des opérations',
items: [
{ id: 'reservations', label: 'Réservations', content: 'Contenu fictif des réservations.' },
{
id: 'fleet',
label: 'Disponibilité du parc automobile',
content: 'Contenu fictif du parc avec un libellé volontairement plus long.',
},
{ id: 'returns', label: 'Retours', content: 'Contenu fictif de linspection au retour.' },
],
},
accordion: {
items: [
{
id: 'a1',
title: 'Comment le système gère-t-il la localisation ?',
content:
'Le texte est transmis sous forme de valeurs localisées complètes, sans concaténation de fragments.',
},
{
id: 'a2',
title: 'Ces composants transmettent-ils des données ?',
content:
'Non. La transmission externe reste bloquée jusqu’à lapprobation du CRM et du contenu juridique.',
},
],
},
alert: {
title: 'Exemple réservé au développement',
body: 'Cette surface démontre les comportements sans publier de preuves client ni dallégations opérationnelles.',
},
workflow: [
{
id: 'reserve',
ordinal: '1',
title: 'Réservation',
description: 'Saisir une demande de réservation illustrative.',
},
{
id: 'prepare',
ordinal: '2',
title: 'Préparation',
description: 'Examiner un état fictif de préparation du véhicule.',
},
{
id: 'handover',
ordinal: '3',
title: 'Remise du véhicule',
description: 'Présenter une liste de contrôle maîtrisée.',
},
{
id: 'return',
ordinal: '4',
title: 'Retour',
description: 'Consigner un résultat dinspection illustratif.',
},
],
comparison: {
beforeTitle: 'Opérations fragmentées',
afterTitle: 'Flux de travail connecté',
before: ['Saisie manuelle répétée', 'Vérifications dispersées', 'Responsabilités imprécises'],
after: ['Un flux partagé', 'Des changements d’état visibles', 'Une responsabilité explicite'],
},
preview: {
title: 'Aperçu de la disponibilité du parc',
caption:
'Exemple dinterface illustratif. Il ne sagit pas de données opérationnelles en direct.',
illustrative: 'Données illustratives',
rows: [
{
id: 'RDG-1042',
primary: 'Véhicule compact',
secondary: 'RDG-1042',
status: 'Disponible',
},
{
id: 'RDG-2088',
primary: 'Véhicule utilitaire',
secondary: 'RDG-2088',
status: 'En préparation',
},
],
},
metric: {
value: '24',
label: 'Points de contrôle illustratifs',
qualification: 'Exemple de développement uniquement. Ce nest pas une allégation publique.',
status: 'Recherche uniquement',
},
cta: {
title: 'La destination du CTA reste contrôlée',
body: 'Le traitement de conversion est réutilisable, tandis que les destinations non résolues restent désactivées.',
primary: 'Réserver une démonstration',
unavailable: 'Destination en attente dapprobation',
},
dialog: {
open: 'Ouvrir la boîte de dialogue',
title: 'Exemple de boîte de dialogue accessible',
description: 'Le focus entre dans la fenêtre modale native puis revient au déclencheur.',
close: 'Fermer la boîte de dialogue',
content: 'Aucune donnée nest transmise depuis cet exemple.',
},
menu: { label: 'Autres actions', first: 'Examiner lexemple', second: 'Archiver lexemple' },
},
ar: {
developmentLabel: 'نموذج للتطوير وليس محتوى للإنتاج',
title: 'نظام المكوّنات الأساسي',
body: 'سطح اختبار ثابت لمكوّنات قابلة للوصول ومترجمة ومتوافقة مع السمات وداعمة لاتجاه الكتابة من اليمين إلى اليسار.',
actions: {
primary: 'إجراء أساسي',
conversion: 'حجز عرض توضيحي',
loading: 'جارٍ الإرسال',
disabled: 'إجراء غير متاح',
},
form: {
label: 'البريد الإلكتروني للعمل',
supporting: 'استخدم عنواناً افتراضياً في نموذج التطوير هذا.',
placeholder: 'name@fictional.invalid',
error: 'أدخل عنواناً بالتنسيق المطلوب.',
checkbox: 'إرسال تأكيد افتراضي',
switch: 'تفعيل المعاينة المدمجة',
},
tabs: {
label: 'عروض العمليات',
items: [
{ id: 'reservations', label: 'الحجوزات', content: 'محتوى افتراضي للحجوزات.' },
{
id: 'fleet',
label: 'توفر أسطول المركبات',
content: 'محتوى افتراضي للأسطول مع نص موسّع عمداً.',
},
{ id: 'returns', label: 'عمليات الإرجاع', content: 'محتوى افتراضي لفحص الإرجاع.' },
],
},
accordion: {
items: [
{
id: 'a1',
title: 'كيف يتعامل نظام المكوّنات مع الترجمة؟',
content: 'يُمرر النص كقيم مترجمة كاملة بدلاً من تجميع أجزاء الجمل.',
},
{
id: 'a2',
title: 'هل ترسل هذه المكوّنات بيانات؟',
content:
'لا. يظل الإرسال الخارجي محظوراً إلى حين اعتماد نظام إدارة علاقات العملاء والمحتوى القانوني.',
},
],
},
alert: {
title: 'نموذج مخصص للتطوير',
body: 'يوضح هذا السطح السلوك من دون نشر أدلة عملاء أو ادعاءات تشغيلية.',
},
workflow: [
{ id: 'reserve', ordinal: '١', title: 'الحجز', description: 'تسجيل طلب حجز توضيحي.' },
{
id: 'prepare',
ordinal: '٢',
title: 'تجهيز المركبة',
description: 'مراجعة حالة افتراضية لجاهزية المركبة.',
},
{
id: 'handover',
ordinal: '٣',
title: 'التسليم',
description: 'عرض قائمة تحقق مضبوطة للاستلام.',
},
{ id: 'return', ordinal: '٤', title: 'الإرجاع', description: 'تسجيل نتيجة فحص توضيحية.' },
],
comparison: {
beforeTitle: 'عمليات مجزأة',
afterTitle: 'سير عمل مترابط',
before: ['إدخال يدوي متكرر', 'فحوصات حالة متفرقة', 'مسؤولية غير واضحة'],
after: ['سير عمل مشترك', 'تغييرات حالة مرئية', 'مسؤولية محددة'],
},
preview: {
title: 'معاينة توفر الأسطول',
caption: 'نموذج واجهة توضيحي وليس بيانات تشغيلية مباشرة.',
illustrative: 'بيانات توضيحية',
rows: [
{ id: 'RDG-1042', primary: 'مركبة مدمجة', secondary: 'RDG-1042', status: 'متاحة' },
{ id: 'RDG-2088', primary: 'مركبة خدمية', secondary: 'RDG-2088', status: 'قيد التجهيز' },
],
},
metric: {
value: '٢٤',
label: 'نقاط تحقق توضيحية لسير العمل',
qualification: 'نموذج تطوير فقط وليس ادعاءً عاماً عن الأداء.',
status: 'للبحث فقط',
},
cta: {
title: 'تظل وجهة الدعوة إلى الإجراء خاضعة للحوكمة',
body: 'يمكن إعادة استخدام نمط التحويل، بينما تبقى الوجهات غير المحسومة معطلة.',
primary: 'حجز عرض توضيحي',
unavailable: 'الوجهة بانتظار الاعتماد',
},
dialog: {
open: 'فتح مربع الحوار',
title: 'نموذج مربع حوار قابل للوصول',
description: 'ينتقل التركيز إلى النافذة الأصلية ثم يعود إلى زر الفتح.',
close: 'إغلاق مربع الحوار',
content: 'لا تُرسل أي بيانات من نموذج المكوّن هذا.',
},
menu: { label: 'إجراءات إضافية', first: 'مراجعة النموذج', second: 'أرشفة النموذج' },
},
} satisfies Record<Locale, ComponentLabCopy>;
export function getComponentLabCopy(locale: Locale): ComponentLabCopy {
return copy[locale];
}
+273
View File
@@ -0,0 +1,273 @@
import type { ApprovedIconName } from '@/components/foundation/Icon';
import type { PreviewRow } from '@/components/marketing/ProductPreview';
import type { HomepageMessages, ShellMessages } from '@/lib/localization/messages';
export interface HomepageAction {
label: string;
disabledReason: string;
}
export interface TitledDescription {
id: string;
title: string;
description: string;
icon?: ApprovedIconName;
}
export interface HomepageWorkflowStep extends TitledDescription {
ordinal: string;
}
export interface HomepageFaqItem {
id: string;
title: string;
body: string;
}
export interface HomepageContent {
hero: {
eyebrow: string;
title: string;
body: string;
primary: HomepageAction;
secondary: HomepageAction;
preview: {
title: string;
caption: string;
illustrativeLabel: string;
rows: PreviewRow[];
};
};
trust: {
eyebrow: string;
title: string;
body: string;
items: TitledDescription[];
};
comparison: {
eyebrow: string;
title: string;
body: string;
beforeTitle: string;
beforeItems: string[];
afterTitle: string;
afterItems: string[];
};
workflow: {
eyebrow: string;
title: string;
body: string;
steps: HomepageWorkflowStep[];
};
roles: {
eyebrow: string;
title: string;
items: TitledDescription[];
};
modules: {
eyebrow: string;
title: string;
body: string;
items: TitledDescription[];
};
results: {
eyebrow: string;
title: string;
body: string;
metrics: TitledDescription[];
methodTitle: string;
method: string[];
};
integrations: {
eyebrow: string;
title: string;
body: string;
items: string[];
};
security: {
eyebrow: string;
title: string;
body: string;
checks: TitledDescription[];
};
pricing: {
eyebrow: string;
title: string;
body: string;
factors: string[];
action: HomepageAction;
note: string;
};
faq: {
eyebrow: string;
title: string;
items: HomepageFaqItem[];
};
final: {
eyebrow: string;
title: string;
body: string;
primary: HomepageAction;
secondary: HomepageAction;
};
}
const trustIcons: ApprovedIconName[] = ['calendar', 'car', 'check', 'settings'];
const roleIcons: ApprovedIconName[] = ['settings', 'calendar', 'car', 'check'];
const moduleIcons: ApprovedIconName[] = ['calendar', 'car', 'check', 'search', 'globe', 'settings'];
const resultIcons: ApprovedIconName[] = ['calendar', 'settings', 'car', 'warning'];
const securityIcons: ApprovedIconName[] = ['settings', 'search', 'globe', 'warning'];
function pair(value: readonly string[], context: string): { title: string; description: string } {
const title = value[0];
const description = value[1];
if (title === undefined || description === undefined) {
throw new Error(`${context} must contain a title and description.`);
}
return { title, description };
}
function triple(
value: readonly string[],
context: string,
): { ordinal: string; title: string; description: string } {
const ordinal = value[0];
const title = value[1];
const description = value[2];
if (ordinal === undefined || title === undefined || description === undefined) {
throw new Error(`${context} must contain an ordinal, title, and description.`);
}
return { ordinal, title, description };
}
function mapPairs(
values: readonly (readonly string[])[],
prefix: string,
icons: readonly ApprovedIconName[] = [],
): TitledDescription[] {
return values.map((value, index) => {
const item = pair(value, `${prefix}[${index}]`);
const icon = icons[index];
return {
id: `${prefix}-${index + 1}`,
...item,
...(icon ? { icon } : {}),
};
});
}
export function buildHomepageContent(
homepage: HomepageMessages,
shell: ShellMessages,
): HomepageContent {
const pendingReason = shell.states.pendingBody;
return {
hero: {
eyebrow: homepage.hero.eyebrow,
title: homepage.hero.title,
body: homepage.hero.body,
primary: { label: homepage.hero.primary, disabledReason: shell.header.demoUnavailable },
secondary: { label: homepage.hero.secondary, disabledReason: pendingReason },
preview: {
title: homepage.preview.title,
caption: homepage.hero.caption,
illustrativeLabel: `${homepage.preview.today} · ${homepage.preview.branch}`,
rows: [
{
id: 'preview-reservation-1',
primary: `${homepage.preview.r1} · ${homepage.preview.taskAssign}`,
secondary: homepage.preview.plate1,
status: homepage.preview.statusReady,
statusTone: 'success',
},
{
id: 'preview-reservation-2',
primary: `${homepage.preview.r2} · ${homepage.preview.taskInspect}`,
secondary: homepage.preview.plate2,
status: homepage.preview.statusDue,
statusTone: 'warning',
},
],
},
},
trust: {
eyebrow: homepage.trust.eyebrow,
title: homepage.trust.title,
body: homepage.trust.body,
items: mapPairs(homepage.trust.items, 'lifecycle', trustIcons),
},
comparison: {
eyebrow: homepage.comparison.eyebrow,
title: homepage.comparison.title,
body: homepage.comparison.body,
beforeTitle: homepage.comparison.beforeTitle,
beforeItems: homepage.comparison.beforeItems,
afterTitle: homepage.comparison.afterTitle,
afterItems: homepage.comparison.afterItems,
},
workflow: {
eyebrow: homepage.workflow.eyebrow,
title: homepage.workflow.title,
body: homepage.workflow.body,
steps: homepage.workflow.steps.map((value, index) => ({
id: `workflow-${index + 1}`,
...triple(value, `workflow.steps[${index}]`),
})),
},
roles: {
eyebrow: homepage.roles.eyebrow,
title: homepage.roles.title,
items: mapPairs(homepage.roles.roles, 'role', roleIcons),
},
modules: {
eyebrow: homepage.modules.eyebrow,
title: homepage.modules.title,
body: homepage.modules.body,
items: mapPairs(homepage.modules.items, 'module', moduleIcons),
},
results: {
eyebrow: homepage.results.eyebrow,
title: homepage.results.title,
body: homepage.results.body,
metrics: mapPairs(homepage.results.metrics, 'measurement', resultIcons),
methodTitle: homepage.results.methodTitle,
method: homepage.results.method,
},
integrations: {
eyebrow: homepage.integrations.eyebrow,
title: homepage.integrations.title,
body: homepage.integrations.body,
items: homepage.integrations.items,
},
security: {
eyebrow: homepage.security.eyebrow,
title: homepage.security.title,
body: homepage.security.body,
checks: mapPairs(homepage.security.checks, 'security', securityIcons),
},
pricing: {
eyebrow: homepage.pricing.eyebrow,
title: homepage.pricing.title,
body: homepage.pricing.body,
factors: homepage.pricing.factors,
action: { label: homepage.pricing.primary, disabledReason: pendingReason },
note: homepage.pricing.note,
},
faq: {
eyebrow: homepage.faq.eyebrow,
title: homepage.faq.title,
items: homepage.faq.items.map((value, index) => {
const item = pair(value, `faq.items[${index}]`);
return { id: `faq-${index + 1}`, title: item.title, body: item.description };
}),
},
final: {
eyebrow: homepage.final.eyebrow,
title: homepage.final.title,
body: homepage.final.body,
primary: { label: homepage.final.primary, disabledReason: shell.header.demoUnavailable },
secondary: { label: homepage.final.secondary, disabledReason: pendingReason },
},
};
}
+296
View File
@@ -0,0 +1,296 @@
{
"meta": {
"langName": "العربية",
"dir": "rtl",
"title": "RentalDriveGo | تشغيل مترابط لتأجير السيارات",
"description": "أدِر الحجوزات والمركبات والعقود والتسليم والإرجاع ضمن منصة تشغيل مترابطة."
},
"header": {
"nav": [
["product", "المنتج"],
["workflow", "سير العمل"],
["modules", "الوحدات"],
["pricing", "التسعير"],
["faq", "الأسئلة الشائعة"]
],
"login": "تسجيل الدخول",
"demo": "احجز عرضًا توضيحيًا",
"menu": "فتح القائمة",
"language": "اللغة",
"theme": "المظهر",
"light": "فاتح",
"dark": "داكن",
"system": "النظام"
},
"hero": {
"eyebrow": "تشغيل تأجير السيارات ضمن نظام مترابط",
"title": "أدِر كل عملية تأجير من الحجز حتى إعادة المركبة في نظام واحد.",
"body": "اجمع الحجوزات والمركبات والعقود والتسليم والإرجاع في سجل تشغيلي واحد، كي يرى كل فريق ما يتطلب المتابعة بعد ذلك.",
"primary": "احجز عرضًا توضيحيًا للمنتج",
"secondary": "شاهد جولة المنتج",
"caption": "واجهة توضيحية للمنتج. يجب أن تستخدم الشاشات النهائية بيانات ولقطات معتمدة."
},
"trust": {
"eyebrow": "تغطية تشغيلية",
"title": "سير عمل واحد يغطي دورة التأجير كاملة.",
"body": "حافظ على ترابط سياق العميل والمركبة والعقد والمهام مع تقدم عملية التأجير.",
"items": [
["الحجز", "سجّل الطلب والبيانات المطلوبة."],
["المركبة", "تابع التوافر والجاهزية."],
["العقد", "اجمع مهام التسليم والسجلات في موضع واحد."],
["الإرجاع", "سجّل الحالة وأغلق أعمال المتابعة."]
]
},
"comparison": {
"eyebrow": "لماذا التغيير",
"title": "استبدل عمليات التسليم المجزأة بسير تشغيلي مشترك.",
"body": "تكلفة الأدوات المنفصلة لا تظهر دائمًا في عطل كبير، بل تتراكم يوميًا عبر تكرار الإدخال وضياع السياق وتأخر المتابعة.",
"beforeTitle": "تشغيل مجزأ",
"beforeItems": [
"نسخ بيانات الحجز بين أدوات متعددة",
"تأكيد حالة المركبة عبر الرسائل",
"متابعة مهام العقد بالاعتماد على الذاكرة",
"اكتشاف مشكلات الإرجاع بعد مغادرة العميل"
],
"afterTitle": "تشغيل مترابط",
"afterItems": [
"حالة حجز واحدة يراها الفريق",
"ربط جاهزية المركبة بعملية التأجير",
"إظهار متطلبات التسليم قبل تسليم المركبة",
"إنشاء متابعة الإرجاع بينما لا يزال السياق واضحًا"
]
},
"workflow": {
"eyebrow": "سير عمل متكامل",
"title": "حرّك عملية التأجير إلى الأمام من دون فقدان السياق.",
"body": "توضح كل خطوة القرار والمسؤول والإجراء التالي بدل دفن التشغيل داخل قائمة عامة من الميزات.",
"steps": [
["01", "تسجيل الحجز", "سجّل التواريخ وبيانات السائق والمتطلبات والمصدر."],
["02", "تخصيص مركبة جاهزة", "طابق التوافر مع الفئة والموقع وحالة الجاهزية."],
["03", "إكمال التسليم", "تحقق من المستندات والفحص والعقد ومهام تسليم المركبة."],
["04", "معالجة الإرجاع", "سجّل الحالة وأغلق الأعمال المفتوحة وأعد المركبة إلى التوافر."]
]
},
"roles": {
"eyebrow": "مصمم لفريق التشغيل",
"title": "امنح كل دور السياق الذي يحتاجه من دون إنشاء نسخ متعددة من الحقيقة.",
"roles": [
["المالك أو المدير", "اطّلع على عبء العمل والاستثناءات والمؤشرات التشغيلية عبر النشاط."],
["فريق الحجوزات", "حوّل الطلبات إلى حجوزات مؤكدة مع عدد أقل من عمليات التسليم."],
["الأسطول والتشغيل", "اعرف المركبات المتاحة أو المحجوبة أو المستحقة أو التي تنتظر إجراءً."],
["مكتب الاستقبال", "حضّر مهام التسليم والإرجاع قبل انتظار العميل."]
]
},
"modules": {
"eyebrow": "وحدات المنتج",
"title": "نواة مترابطة منظّمة حول أعمال التأجير الفعلية.",
"body": "توضح حدود الوحدات المسؤوليات، بينما تمنع السجلات المشتركة فوضى النسخ واللصق المعتادة.",
"items": [
["الحجوزات", "التوافر والتواريخ ومتطلبات العميل والحالة ضمن سير واحد."],
["جاهزية الأسطول", "توافر المركبات والحجوزات التشغيلية وحالة الخدمة وسياق الموقع."],
["عقود الإيجار", "متطلبات التسليم وحالة العقد والسجلات التشغيلية."],
["فحص المركبة", "فحوص منظمة عند التسليم والإرجاع مع مهام متابعة."],
["سجلات العملاء", "سجل التأجير وبيانات الاتصال المرتبطة بالعمل الجاري."],
["التقارير التشغيلية", "تعريفات وعروض تشغيلية يمكن التحقق منها مقابل النشاط المصدر."]
]
},
"results": {
"eyebrow": "نتائج قابلة للقياس",
"title": "قِس التغيير، لا الخطاب التسويقي.",
"body": "لا ينبغي نشر أي نتيجة قبل اعتماد خط أساس حقيقي لعميل وفترة مقارنة وتعريف واضح للبيانات. لذلك تعرض هذه النسخة منهجية القياس بدل نسب مئوية مختلقة.",
"metrics": [
["زمن معالجة الحجز", "من استلام طلب صالح للعمل حتى تأكيد الحجز."],
["زمن إعادة المركبة إلى الجاهزية", "من تسجيل الإرجاع حتى حالة جاهز للتأجير."],
["معدل استخدام الأسطول", "مقارنة أيام التوافر بأيام التأجير وفق تعريف واحد معتمد."],
["متابعة حالات التأخير", "عمليات التأجير المتأخرة المفتوحة مع مسؤول وإجراء تالٍ."]
],
"methodTitle": "المنهجية المطلوبة قبل نشر أي نتيجة",
"method": [
"سجّل خط أساس قبل الإطلاق باستخدام تعريفات المؤشرات نفسها.",
"قارن مواقع وفئات أسطول وفترات تشغيل متكافئة.",
"انشر حجم العينة والاستثناءات وفترة القياس.",
"اربط كل نتيجة منشورة بسجل دليل معتمد."
]
},
"integrations": {
"eyebrow": "التكاملات",
"title": "اربط الأنظمة التي يعتمد عليها تشغيلك حاليًا.",
"body": "يُعتمد نطاق التكامل خلال مرحلة الاستكشاف ليتوافق مع سوقك وبنيتك الحالية وملكية البيانات. لا تُعرض أسماء شركاء قبل التحقق من توافر الموصل.",
"items": [
"المحاسبة والمالية",
"المدفوعات ومبالغ الضمان",
"الاتصال بالمركبات وبياناتها",
"خدمات الهوية والمستندات",
"البريد الإلكتروني والرسائل والإشعارات",
"الموقع الإلكتروني وقنوات الحجز"
]
},
"security": {
"eyebrow": "الأمن والموثوقية",
"title": "قيّم المنصة بالأدلة، لا بالشعارات.",
"body": "لا تُنشر شهادات أو وعود بمستوى الخدمة قبل وجود وثائق معتمدة. أثناء التقييم، اطلب إجابات محددة حول الضوابط المهمة لنشاطك.",
"checks": [
["التحكم في الوصول", "الأدوار والصلاحيات وإجراءات المسؤول وإنهاء وصول المستخدم."],
["قابلية التدقيق", "التغييرات المسجلة والقابلة للبحث والتصدير."],
["معالجة البيانات", "الملكية والاحتفاظ والتصدير والحذف والجهات الفرعية."],
["استمرارية العمل", "النسخ الاحتياطي والاستعادة والتواصل عند الحوادث والدعم."]
]
},
"pricing": {
"eyebrow": "معاينة التسعير",
"title": "يجب أن يعكس التسعير طبيعة التشغيل الفعلية.",
"body": "لا يُعرض سعر عام قبل اعتماد النموذج التجاري والحدود المشمولة. يبدأ التقييم بالعوامل التي تؤثر فعلًا في النطاق.",
"factors": [
"حجم الأسطول وعدد المواقع النشطة",
"الوحدات المطلوبة وأدوار المستخدمين",
"نطاق ترحيل البيانات والتهيئة",
"متطلبات التكامل والدعم"
],
"primary": "اطلب عرض سعر",
"note": "لا تنشر هذه النسخة أسعار بطاقات أو خصومات أو حدود باقات."
},
"faq": {
"eyebrow": "الأسئلة الشائعة",
"title": "أسئلة ينبغي للمشتري طرحها قبل حجز العرض التوضيحي.",
"items": [
[
"هل RentalDriveGo مخصص فقط لشركات التأجير الكبيرة؟",
"لا يزال السوق المستهدف وهيكل الباقات قيد الاعتماد. يجب أن يحدد العرض حجم الأسطول والمواقع وسير العمل والوحدات المطلوبة بدل افتراض أن إعدادًا واحدًا يناسب الجميع."
],
[
"هل يمكننا الاحتفاظ بأنظمتنا الحالية؟",
"تُراجع التكاملات المحتملة خلال الاستكشاف. يجب تأكيد توافر الموصل وملكية البيانات وجهد الترحيل والمزامنة المستمرة قبل تقديم أي وعد."
],
[
"هل تدعم المنصة لغات متعددة؟",
"يدعم الموقع ونظام التصميم المعتمد الإنجليزية والفرنسية والعربية. تستخدم العربية اتجاهًا حقيقيًا للمستند من اليمين إلى اليسار، لا مجرد محاذاة شكلية."
],
[
"كيف يُحسب السعر؟",
"النموذج التجاري قيد الاعتماد. حتى ذلك الحين، يجب أن يوضح كل عرض النطاق والوحدات والحدود والتهيئة والتكاملات والدعم."
],
[
"ما الشهادات الأمنية المتوفرة؟",
"لا تدّعي هذه النسخة وجود أي شهادة. يجب تقديم الأدلة الأمنية عبر وثائق معتمدة أثناء التقييم وعدم نشرها إلا بعد التحقق."
],
[
"ماذا يحدث أثناء العرض التوضيحي؟",
"ينبغي أن ترسم الجلسة سير عملك من الحجز حتى الإرجاع، وتعرض المسار المناسب في المنتج، وتحدد احتياجات التكامل، وتوثق أسئلة الملاءمة غير المحسومة."
]
]
},
"final": {
"eyebrow": "شاهد سير العمل كاملًا",
"title": "أحضر عملية تأجير حقيقية إلى العرض التوضيحي.",
"body": "سنتتبع عمليات التسليم والاستثناءات والمعلومات التي يحتاجها فريقك من الحجز حتى إعادة المركبة.",
"primary": "احجز عرضًا توضيحيًا للمنتج",
"secondary": "تواصل مع المبيعات"
},
"footer": {
"tagline": "تشغيل مترابط لتأجير السيارات من الحجز حتى الإرجاع.",
"groups": [
[
"المنتج",
[
["سير العمل", "#workflow"],
["الوحدات", "#modules"],
["التسعير", "#pricing"]
]
],
[
"الشركة",
[
["تواصل مع المبيعات", "#contact"],
["احجز عرضًا توضيحيًا", "#demo"]
]
],
[
"الحساب",
[
["تسجيل الدخول", "#login"],
["اللغة", "#language"],
["المظهر", "#theme"]
]
],
[
"قانوني",
[
["الخصوصية", "#!"],
["الشروط", "#!"],
["إمكانية الوصول", "#!"]
]
]
],
"copyright": "© 2026 RentalDriveGo. تظل الأدلة والادعاءات التجارية خاضعة للاعتماد."
},
"form": {
"title": "احجز عرضًا توضيحيًا للمنتج",
"body": "أخبرنا كيف يعمل نشاط تأجير السيارات لديك. الحقول المطلوبة مميزة.",
"name": "الاسم الكامل",
"email": "البريد الإلكتروني للعمل",
"company": "الشركة",
"fleet": "الحجم التقريبي للأسطول",
"market": "الدولة أو سوق التشغيل",
"language": "لغة العرض المفضلة",
"message": "ما الموضوع الذي ينبغي أن يركز عليه العرض؟",
"submit": "إرسال طلب العرض",
"privacy": "بإرسال النموذج، فإنك توافق على التواصل معك بخصوص هذا الطلب. يحتاج نص إشعار الخصوصية إلى اعتماد قانوني.",
"close": "إغلاق",
"required": "مطلوب",
"emailError": "أدخل عنوان بريد إلكتروني صالحًا للعمل.",
"requiredError": "هذا الحقل مطلوب.",
"fleetOptions": [
"اختر خيارًا",
"من 1 إلى 25 مركبة",
"من 26 إلى 100 مركبة",
"من 101 إلى 500 مركبة",
"أكثر من 500 مركبة",
"غير متأكد بعد"
],
"langOptions": ["English", "Français", "العربية"],
"successTitle": "تم تسجيل طلب العرض",
"successBody": "اكتمل مسار الحجز في هذا النموذج الأولي. لم يُرسل أي طلب إلى نظام مبيعات فعلي.",
"submitAnother": "إرسال طلب آخر",
"submissionError": "تعذر على النموذج الأولي إكمال الطلب. ما زالت بياناتك متاحة. حاول مرة أخرى.",
"errorSummary": "راجع الحقول المميزة ثم حاول مرة أخرى."
},
"preview": {
"today": "اليوم",
"branch": "الفرع المركزي",
"title": "نظرة عامة على التشغيل",
"reservations": "الحجوزات",
"ready": "مركبات جاهزة",
"attention": "تحتاج متابعة",
"active": "عمليات تأجير نشطة",
"r1": "تسليم الساعة 10:30",
"r2": "إرجاع مستحق الساعة 14:00",
"r3": "الفحص مطلوب",
"vehicle": "المركبة",
"customer": "العميل",
"status": "الحالة",
"task": "الإجراء التالي",
"plate1": "ABC-2048",
"plate2": "RNT-7712",
"statusReady": "جاهزة",
"statusDue": "مستحقة اليوم",
"taskAssign": "تأكيد مستندات السائق",
"taskInspect": "إكمال فحص الإرجاع"
},
"tour": {
"title": "جولة في المنتج",
"intro": "تابع عملية تأجير واحدة من الحجز حتى الإرجاع.",
"back": "السابق",
"next": "التالي",
"finish": "إنهاء الجولة",
"close": "إغلاق جولة المنتج",
"step": "الخطوة",
"of": "من"
},
"research": {
"title": "وضع البحث",
"events": "أحداث",
"export": "تصدير الأحداث",
"clear": "مسح",
"close": "إغلاق"
}
}
+94
View File
@@ -0,0 +1,94 @@
{
"skipToContent": "الانتقال إلى المحتوى الرئيسي",
"brandLabel": "الصفحة الرئيسية لـ RentalDriveGo",
"foundationLabel": "أساس التطبيق",
"header": {
"navigationLabel": "التنقل الرئيسي",
"controlsLabel": "عناصر التحكم في العرض واللغة",
"menuOpen": "فتح قائمة التنقل",
"menuClose": "إغلاق قائمة التنقل",
"nav": {
"product": "المنتج",
"workflow": "سير العمل",
"modules": "الوحدات",
"pricing": "التسعير",
"faq": "الأسئلة الشائعة"
},
"login": "تسجيل الدخول",
"loginUnavailable": "وجهة تسجيل الدخول في انتظار الاعتماد",
"demo": "احجز عرضًا توضيحيًا",
"demoUnavailable": "حجز العرض التوضيحي في انتظار اعتماد التكامل"
},
"controls": {
"language": "اللغة",
"theme": "المظهر",
"themeStatus": "تفضيل المظهر الحالي: {value}",
"localeNames": {
"en": "الإنجليزية",
"fr": "الفرنسية",
"ar": "العربية"
},
"themes": {
"light": "فاتح",
"dark": "داكن",
"system": "النظام"
}
},
"footer": {
"landmarkLabel": "تذييل الموقع",
"tagline": "تشغيل مترابط لتأجير السيارات من الحجز حتى الإرجاع.",
"groups": {
"product": "المنتج",
"company": "الشركة",
"account": "الحساب",
"legal": "قانوني"
},
"links": {
"workflow": "سير العمل",
"modules": "الوحدات",
"pricing": "التسعير",
"faq": "الأسئلة الشائعة",
"contact": "تواصل مع المبيعات",
"demo": "احجز عرضًا توضيحيًا",
"login": "تسجيل الدخول",
"privacy": "الخصوصية",
"terms": "الشروط",
"accessibility": "إمكانية الوصول"
},
"pending": "في انتظار الاعتماد",
"copyrightPrefix": "©",
"releaseNotice": "يظل النشر العام متوقفًا حتى معالجة العوائق الموثقة."
},
"states": {
"loadingTitle": "جارٍ التحميل",
"loadingBody": "جارٍ تجهيز هيكل التطبيق.",
"errorTitle": "حدث خطأ",
"errorBody": "تعذر عرض الصفحة، ولم تُكشف أي تفاصيل تقنية.",
"retry": "إعادة المحاولة",
"notFoundTitle": "الصفحة غير موجودة",
"notFoundBody": "لا يطابق هذا العنوان مسارًا محليًا معتمدًا.",
"backHome": "العودة إلى الصفحة الرئيسية",
"pendingTitle": "الوجهة غير متاحة",
"pendingBody": "هذا المسار معرّف، لكن محتواه أو وجهته الإنتاجية ما زالت في انتظار الاعتماد."
},
"foundation": {
"eyebrow": "أساس المرحلة 11",
"title": "هيكل تطبيق محلي ومتوافق مع المظاهر",
"body": "تثبت هذه النسخة الأسس المرئية وأسس التوجيه والاتجاه وإمكانية الوصول والبيانات الوصفية من دون الادعاء بأن الصفحة التسويقية الكاملة أصبحت جاهزة.",
"readinessLabel": "مجالات الأساس المنفذة",
"items": [
["الرموز الدلالية", "تستهلك أنماط المكونات طبقة دلالية موثقة."],
["سلوك المظهر", "تُحل تفضيلات المظهر الفاتح والداكن والنظام وتُحفظ."],
["التوطين", "تُعرض الإنجليزية والفرنسية والعربية من مسارات مسبوقة باللغة."],
["اتجاه المستند", "تُعرض العربية باتجاه حقيقي من اليمين إلى اليسار على مستوى المستند."],
["إمكانية الوصول", "رابط التخطي والتركيز المرئي والمعالم وتقليل الحركة مدمجة."],
["هيكل التطبيق", "يتوفر رأس متجاوب وتنقل للجوال وتذييل وحالات عامة."]
],
"deferredLabel": "وجهات الصفحة الرئيسية المؤجلة",
"deferredBody": "ترتبط وجهة التنقل المعتمدة هذه ببيان المسارات، بينما يظل قسمها الإنتاجي خارج نطاق المرحلة 11."
},
"metadata": {
"pendingTitle": "وجهة غير متاحة | RentalDriveGo",
"pendingDescription": "وجهة RentalDriveGo المحلية هذه معرّفة، لكن نشرها في بيئة الإنتاج غير معتمد."
}
}
+308
View File
@@ -0,0 +1,308 @@
{
"meta": {
"langName": "English",
"dir": "ltr",
"title": "RentalDriveGo | Connected rental-car operations",
"description": "Run reservations, vehicles, agreements, handovers, and returns in one connected rental operations platform."
},
"header": {
"nav": [
["product", "Product"],
["workflow", "Workflow"],
["modules", "Modules"],
["pricing", "Pricing"],
["faq", "FAQ"]
],
"login": "Log in",
"demo": "Book a demo",
"menu": "Open menu",
"language": "Language",
"theme": "Theme",
"light": "Light",
"dark": "Dark",
"system": "System"
},
"hero": {
"eyebrow": "Rental operations, connected",
"title": "Run every rental from reservation to return in one system.",
"body": "Give reservations, fleet, agreements, handovers, and returns one operational record, so each team sees what needs attention next.",
"primary": "Book a product demo",
"secondary": "Watch product tour",
"caption": "Illustrative product interface. Final screens must use approved product data and captures."
},
"trust": {
"eyebrow": "Operational coverage",
"title": "One workflow across the rental lifecycle.",
"body": "Keep the customer, vehicle, agreement, and task context connected as the rental moves forward.",
"items": [
["Reservation", "Capture the request and required details."],
["Vehicle", "Track availability and readiness."],
["Agreement", "Keep pickup tasks and records together."],
["Return", "Record condition and close follow-up work."]
]
},
"comparison": {
"eyebrow": "Why change",
"title": "Replace fragmented handoffs with a shared operating flow.",
"body": "The cost of disconnected tools is rarely one dramatic failure. It is the daily accumulation of duplicate entry, missing context, and delayed follow-up.",
"beforeTitle": "Fragmented operation",
"beforeItems": [
"Reservation details copied between tools",
"Vehicle status confirmed through messages",
"Agreement tasks tracked from memory",
"Return issues discovered after the customer leaves"
],
"afterTitle": "Connected operation",
"afterItems": [
"One reservation status visible to the team",
"Vehicle readiness attached to the rental",
"Pickup requirements shown before handover",
"Return follow-up created while context is fresh"
]
},
"workflow": {
"eyebrow": "End-to-end workflow",
"title": "Move the rental forward without losing the thread.",
"body": "Each step exposes the decision, owner, and next action instead of burying operations inside a generic feature list.",
"steps": [
["01", "Capture the reservation", "Record dates, driver details, requirements, and source."],
["02", "Assign a ready vehicle", "Match availability with class, location, and readiness."],
["03", "Complete pickup", "Confirm documents, inspection, agreement, and handover tasks."],
["04", "Process the return", "Record condition, close open work, and release the vehicle."]
]
},
"roles": {
"eyebrow": "Built for the operating team",
"title": "Give each role the context it needs, without creating separate versions of the truth.",
"roles": [
["Owner or manager", "See workload, exceptions, and operating signals across the business."],
["Reservations team", "Move requests from inquiry to confirmed rental with fewer handoffs."],
[
"Fleet and operations",
"Know which vehicles are available, blocked, due, or awaiting action."
],
["Front desk", "Prepare pickup and return tasks before the customer is waiting."]
]
},
"modules": {
"eyebrow": "Product modules",
"title": "A connected core, organized around real rental work.",
"body": "Module boundaries clarify responsibility while shared records prevent the usual copy-and-paste archaeology.",
"items": [
["Reservations", "Availability, dates, customer requirements, and status in one flow."],
["Fleet readiness", "Vehicle availability, blocks, service state, and location context."],
["Rental agreements", "Pickup requirements, agreement status, and operational records."],
[
"Vehicle inspections",
"Structured pickup and return condition checks with follow-up tasks."
],
["Customer records", "Rental history and contact context attached to active work."],
[
"Operations reporting",
"Definitions and operational views that can be validated against source activity."
]
]
},
"results": {
"eyebrow": "Measured results",
"title": "Measure the change, not the marketing.",
"body": "No outcome claim should appear until a real customer baseline, comparison period, and data definition are approved. The production page therefore shows the measurement plan instead of fictional percentages.",
"metrics": [
["Reservation handling time", "From usable request to confirmed reservation."],
["Vehicle turnaround time", "From return recorded to ready-for-rental status."],
[
"Fleet utilization",
"Available rental days compared with rented days, using one approved definition."
],
["Overdue follow-up", "Open overdue rentals with an assigned owner and next action."]
],
"methodTitle": "Methodology required before publishing results",
"method": [
"Capture a pre-launch baseline using the same KPI definitions.",
"Compare equivalent locations, fleet classes, and operating periods.",
"Report sample size, exclusions, and measurement window.",
"Link every public result to an approved evidence record."
]
},
"integrations": {
"eyebrow": "Integrations",
"title": "Connect the systems your operation already depends on.",
"body": "Integration scope is confirmed during discovery so the proposal reflects your market, current stack, and data ownership. Named partners are not shown until connector availability is verified.",
"items": [
"Accounting and finance",
"Payments and deposits",
"Telematics and vehicle data",
"Identity and document services",
"Email, SMS, and notifications",
"Website and booking channels"
]
},
"security": {
"eyebrow": "Security and reliability",
"title": "Evaluate the platform with evidence, not badges.",
"body": "Certifications and service-level claims remain unpublished until approved documentation exists. During evaluation, request concrete answers for the controls that matter to your operation.",
"checks": [
["Access control", "Roles, permissions, administrator actions, and offboarding."],
["Auditability", "Which changes are recorded, searchable, and exportable."],
["Data handling", "Ownership, retention, export, deletion, and subprocessors."],
["Continuity", "Backup, recovery, incident communication, and support process."]
]
},
"pricing": {
"eyebrow": "Pricing preview",
"title": "Pricing should match the operation you actually run.",
"body": "A public price is not shown until the commercial model and included limits are approved. The evaluation starts with the factors that materially affect scope.",
"factors": [
"Fleet size and active locations",
"Required modules and user roles",
"Migration and onboarding scope",
"Integration and support requirements"
],
"primary": "Request pricing",
"note": "No card prices, discounts, or package limits are published in this baseline."
},
"faq": {
"eyebrow": "FAQ",
"title": "Questions buyers should ask before booking a demo.",
"items": [
[
"Is RentalDriveGo only for large rental companies?",
"The final market and packaging are still being defined. The demo should qualify fleet size, locations, workflows, and required modules rather than pretend one setup fits everyone."
],
[
"Can we keep our existing systems?",
"Potential integrations are reviewed during discovery. Connector availability, data ownership, migration effort, and ongoing synchronization must be confirmed before they are promised."
],
[
"Does the platform support multiple languages?",
"The website and approved design system support English, French, and Arabic. Arabic uses true document-level right-to-left behavior rather than a mirrored-looking patch."
],
[
"How is pricing calculated?",
"The commercial model is pending approval. Until then, proposals should state the scope, included modules, limits, onboarding, integrations, and support explicitly."
],
[
"What security certifications do you have?",
"No certification is claimed in this baseline. Security evidence should be supplied through approved documentation during evaluation and published only after verification."
],
[
"What happens during the demo?",
"The session should map your current reservation-to-return flow, show the relevant product path, identify integration needs, and document unresolved fit questions."
]
]
},
"final": {
"eyebrow": "See the full workflow",
"title": "Bring one real rental process to the demo.",
"body": "We will trace the handoffs, exceptions, and information your team needs from reservation through vehicle return.",
"primary": "Book a product demo",
"secondary": "Contact sales"
},
"footer": {
"tagline": "Connected rental-car operations from reservation to return.",
"groups": [
[
"Product",
[
["Workflow", "#workflow"],
["Modules", "#modules"],
["Pricing", "#pricing"]
]
],
[
"Company",
[
["Contact sales", "#contact"],
["Book a demo", "#demo"]
]
],
[
"Account",
[
["Log in", "#login"],
["Language", "#language"],
["Theme", "#theme"]
]
],
[
"Legal",
[
["Privacy", "#!"],
["Terms", "#!"],
["Accessibility", "#!"]
]
]
],
"copyright": "© 2026 RentalDriveGo. Evidence and commercial claims remain subject to approval."
},
"form": {
"title": "Book a product demo",
"body": "Tell us how your rental operation works. Required fields are marked.",
"name": "Full name",
"email": "Work email",
"company": "Company",
"fleet": "Approximate fleet size",
"market": "Country or operating market",
"language": "Preferred demo language",
"message": "What should the demo focus on?",
"submit": "Request my demo",
"privacy": "By submitting, you agree to be contacted about this request. Privacy notice text requires legal approval.",
"close": "Close",
"required": "Required",
"emailError": "Enter a valid work email address.",
"requiredError": "This field is required.",
"fleetOptions": [
"Select an option",
"125 vehicles",
"26100 vehicles",
"101500 vehicles",
"More than 500 vehicles",
"Not sure yet"
],
"langOptions": ["English", "Français", "العربية"],
"successTitle": "Demo request recorded",
"successBody": "This prototype has completed the booking flow. No request was sent to a real sales system.",
"submitAnother": "Submit another request",
"submissionError": "The prototype could not complete the request. Your entries are still available. Try again.",
"errorSummary": "Review the highlighted fields and try again."
},
"preview": {
"today": "Today",
"branch": "Central branch",
"title": "Operations overview",
"reservations": "Reservations",
"ready": "Vehicles ready",
"attention": "Needs attention",
"active": "Active rentals",
"r1": "Pickup at 10:30",
"r2": "Return due at 14:00",
"r3": "Inspection required",
"vehicle": "Vehicle",
"customer": "Customer",
"status": "Status",
"task": "Next action",
"plate1": "ABC-2048",
"plate2": "RNT-7712",
"statusReady": "Ready",
"statusDue": "Due today",
"taskAssign": "Confirm driver documents",
"taskInspect": "Complete return inspection"
},
"tour": {
"title": "Product tour",
"intro": "Follow one rental from reservation through return.",
"back": "Previous",
"next": "Next",
"finish": "Finish tour",
"close": "Close product tour",
"step": "Step",
"of": "of"
},
"research": {
"title": "Research mode",
"events": "events",
"export": "Export events",
"clear": "Clear",
"close": "Close"
}
}
+100
View File
@@ -0,0 +1,100 @@
{
"skipToContent": "Skip to main content",
"brandLabel": "RentalDriveGo home",
"foundationLabel": "Application foundation",
"header": {
"navigationLabel": "Primary navigation",
"controlsLabel": "Display and language controls",
"menuOpen": "Open navigation menu",
"menuClose": "Close navigation menu",
"nav": {
"product": "Product",
"workflow": "Workflow",
"modules": "Modules",
"pricing": "Pricing",
"faq": "FAQ"
},
"login": "Log in",
"loginUnavailable": "Login destination pending approval",
"demo": "Book a demo",
"demoUnavailable": "Demo booking pending integration approval"
},
"controls": {
"language": "Language",
"theme": "Theme",
"themeStatus": "Current theme preference: {value}",
"localeNames": {
"en": "English",
"fr": "French",
"ar": "Arabic"
},
"themes": {
"light": "Light",
"dark": "Dark",
"system": "System"
}
},
"footer": {
"landmarkLabel": "Site footer",
"tagline": "Connected rental-car operations from reservation to return.",
"groups": {
"product": "Product",
"company": "Company",
"account": "Account",
"legal": "Legal"
},
"links": {
"workflow": "Workflow",
"modules": "Modules",
"pricing": "Pricing",
"faq": "FAQ",
"contact": "Contact sales",
"demo": "Book a demo",
"login": "Log in",
"privacy": "Privacy",
"terms": "Terms",
"accessibility": "Accessibility"
},
"pending": "Pending approval",
"copyrightPrefix": "©",
"releaseNotice": "Public release remains gated until documented blockers are resolved."
},
"states": {
"loadingTitle": "Loading",
"loadingBody": "Preparing the application shell.",
"errorTitle": "Something went wrong",
"errorBody": "The page could not be displayed. Technical details were not exposed.",
"retry": "Try again",
"notFoundTitle": "Page not found",
"notFoundBody": "This address does not match an approved localized route.",
"backHome": "Return home",
"pendingTitle": "Destination not available",
"pendingBody": "This route is defined, but its production content or destination is still awaiting approval."
},
"foundation": {
"eyebrow": "Phase 11 foundation",
"title": "A localized, theme-aware application shell",
"body": "This implementation proves the shared visual, routing, direction, accessibility, and metadata foundations without pretending the full marketing homepage already exists.",
"readinessLabel": "Implemented foundation areas",
"items": [
["Semantic tokens", "Component styles consume a documented semantic layer."],
["Theme behavior", "Light, dark, and system preferences resolve and persist."],
["Localization", "English, French, and Arabic render from locale-prefixed routes."],
["Directionality", "Arabic renders with document-level right-to-left direction."],
[
"Accessibility",
"Skip navigation, focus treatment, landmarks, and reduced motion are built in."
],
[
"Application shell",
"Responsive header, mobile navigation, footer, and global states are available."
]
],
"deferredLabel": "Deferred homepage destinations",
"deferredBody": "This approved navigation destination is wired to the route manifest, while its production section remains outside Phase 11."
},
"metadata": {
"pendingTitle": "Unavailable destination | RentalDriveGo",
"pendingDescription": "This localized RentalDriveGo destination is defined but not approved for production publication."
}
}
+327
View File
@@ -0,0 +1,327 @@
{
"meta": {
"langName": "Français",
"dir": "ltr",
"title": "RentalDriveGo | Opérations de location connectées",
"description": "Pilotez les réservations, véhicules, contrats, remises et retours dans une plateforme connectée."
},
"header": {
"nav": [
["product", "Produit"],
["workflow", "Parcours"],
["modules", "Modules"],
["pricing", "Tarifs"],
["faq", "FAQ"]
],
"login": "Se connecter",
"demo": "Réserver une démo",
"menu": "Ouvrir le menu",
"language": "Langue",
"theme": "Thème",
"light": "Clair",
"dark": "Sombre",
"system": "Système"
},
"hero": {
"eyebrow": "Opérations de location connectées",
"title": "Pilotez chaque location, de la réservation au retour du véhicule, dans un seul système.",
"body": "Reliez les réservations, le parc, les contrats, les remises et les retours dans un même dossier opérationnel, afin que chaque équipe sache quelle action vient ensuite.",
"primary": "Réserver une démonstration",
"secondary": "Voir la visite du produit",
"caption": "Interface produit illustrative. Les écrans définitifs doivent utiliser des données et captures approuvées."
},
"trust": {
"eyebrow": "Couverture opérationnelle",
"title": "Un même parcours pour tout le cycle de location.",
"body": "Conservez le contexte du client, du véhicule, du contrat et des tâches au fil de la location.",
"items": [
["Réservation", "Saisir la demande et les informations nécessaires."],
["Véhicule", "Suivre la disponibilité et l’état de préparation."],
["Contrat", "Regrouper les tâches de départ et les documents."],
["Retour", "Enregistrer l’état et clôturer les actions de suivi."]
]
},
"comparison": {
"eyebrow": "Pourquoi changer",
"title": "Remplacez les transmissions fragmentées par un flux opérationnel partagé.",
"body": "Le coût des outils déconnectés nest pas toujours une panne spectaculaire. Il saccumule dans les doubles saisies, le contexte perdu et les suivis tardifs.",
"beforeTitle": "Fonctionnement fragmenté",
"beforeItems": [
"Informations de réservation recopiées entre plusieurs outils",
"État du véhicule confirmé par messages",
"Tâches contractuelles suivies de mémoire",
"Problèmes de retour découverts après le départ du client"
],
"afterTitle": "Fonctionnement connecté",
"afterItems": [
"Un statut de réservation visible par l’équipe",
"Préparation du véhicule rattachée à la location",
"Exigences de départ affichées avant la remise",
"Suivi du retour créé pendant que le contexte est encore précis"
]
},
"workflow": {
"eyebrow": "Parcours de bout en bout",
"title": "Faites avancer la location sans perdre le fil.",
"body": "Chaque étape met en évidence la décision, le responsable et laction suivante, au lieu denfouir le travail dans une liste générique de fonctionnalités.",
"steps": [
[
"01",
"Saisir la réservation",
"Enregistrer les dates, le conducteur, les exigences et la source."
],
[
"02",
"Affecter un véhicule prêt",
"Faire correspondre disponibilité, catégorie, agence et état de préparation."
],
[
"03",
"Finaliser le départ",
"Confirmer documents, inspection, contrat et tâches de remise."
],
[
"04",
"Traiter le retour",
"Enregistrer l’état, clôturer les actions et libérer le véhicule."
]
]
},
"roles": {
"eyebrow": "Conçu pour l’équipe opérationnelle",
"title": "Donnez à chaque rôle le contexte utile, sans multiplier les versions de la vérité.",
"roles": [
["Direction ou responsable", "Voir la charge, les exceptions et les signaux dexploitation."],
[
"Équipe réservations",
"Faire passer les demandes vers une location confirmée avec moins de transmissions."
],
[
"Parc et opérations",
"Savoir quels véhicules sont disponibles, bloqués, attendus ou en attente daction."
],
["Comptoir", "Préparer les tâches de départ et de retour avant que le client nattende."]
]
},
"modules": {
"eyebrow": "Modules produit",
"title": "Un socle connecté, organisé autour du travail réel de location.",
"body": "Les modules clarifient les responsabilités, tandis que les dossiers partagés évitent larchéologie du copier-coller.",
"items": [
["Réservations", "Disponibilités, dates, besoins du client et statut dans un même flux."],
["Préparation du parc", "Disponibilité, blocages, état de service et contexte dagence."],
["Contrats de location", "Exigences de départ, état du contrat et dossiers opérationnels."],
[
"Inspections des véhicules",
"Contrôles structurés au départ et au retour avec actions de suivi."
],
["Dossiers clients", "Historique de location et coordonnées rattachés au travail en cours."],
["Rapports opérationnels", "Définitions et vues vérifiables par rapport à lactivité source."]
]
},
"results": {
"eyebrow": "Résultats mesurés",
"title": "Mesurez le changement, pas le discours commercial.",
"body": "Aucun résultat ne doit être publié sans référence client, période de comparaison et définition de données approuvées. Cette version présente donc la méthode plutôt que des pourcentages fictifs.",
"metrics": [
[
"Temps de traitement des réservations",
"De la demande exploitable à la réservation confirmée."
],
["Temps de remise en service", "Du retour enregistré au statut prêt à louer."],
[
"Taux dutilisation du parc",
"Jours louables comparés aux jours loués, selon une définition approuvée."
],
["Suivi des retards", "Locations en retard avec responsable et prochaine action."]
],
"methodTitle": "Méthode requise avant toute publication",
"method": [
"Établir une référence avant lancement avec les mêmes définitions de KPI.",
"Comparer des agences, catégories de parc et périodes équivalentes.",
"Publier la taille de l’échantillon, les exclusions et la fenêtre de mesure.",
"Relier chaque résultat public à une preuve approuvée."
]
},
"integrations": {
"eyebrow": "Intégrations",
"title": "Reliez les systèmes dont votre exploitation dépend déjà.",
"body": "Le périmètre dintégration est confirmé pendant la découverte afin de refléter votre marché, votre environnement actuel et la propriété des données. Aucun partenaire nest nommé avant vérification du connecteur.",
"items": [
"Comptabilité et finance",
"Paiements et dépôts",
"Télématique et données véhicules",
"Identité et documents",
"E-mail, SMS et notifications",
"Site web et canaux de réservation"
]
},
"security": {
"eyebrow": "Sécurité et fiabilité",
"title": "Évaluez la plateforme avec des preuves, pas avec des badges.",
"body": "Aucune certification ni promesse de niveau de service nest publiée sans documentation approuvée. Pendant l’évaluation, demandez des réponses concrètes sur les contrôles utiles à votre activité.",
"checks": [
["Contrôle des accès", "Rôles, autorisations, actions administrateur et départs."],
["Traçabilité", "Modifications enregistrées, recherchables et exportables."],
["Gestion des données", "Propriété, conservation, export, suppression et sous-traitants."],
["Continuité", "Sauvegarde, reprise, communication dincident et support."]
]
},
"pricing": {
"eyebrow": "Aperçu des tarifs",
"title": "Le tarif doit correspondre à lexploitation que vous gérez réellement.",
"body": "Aucun prix public nest affiché tant que le modèle commercial et les limites incluses ne sont pas approuvés. L’évaluation commence par les facteurs qui influencent réellement le périmètre.",
"factors": [
"Taille du parc et agences actives",
"Modules requis et rôles utilisateurs",
"Migration et accompagnement au démarrage",
"Intégrations et niveau de support"
],
"primary": "Demander un tarif",
"note": "Aucun prix, remise ou plafond de forfait nest publié dans cette version."
},
"faq": {
"eyebrow": "FAQ",
"title": "Les questions à poser avant de réserver une démonstration.",
"items": [
[
"RentalDriveGo est-il réservé aux grands loueurs ?",
"Le marché cible et les offres finales restent à définir. La démonstration doit qualifier la taille du parc, les agences, les flux et les modules nécessaires au lieu de prétendre quune configuration convient à tous."
],
[
"Pouvons-nous conserver nos systèmes actuels ?",
"Les intégrations possibles sont examinées pendant la découverte. La disponibilité du connecteur, la propriété des données, leffort de migration et la synchronisation doivent être confirmés avant toute promesse."
],
[
"La plateforme prend-elle en charge plusieurs langues ?",
"Le site et le système de design approuvé prennent en charge langlais, le français et larabe. Larabe utilise une vraie direction de document de droite à gauche."
],
[
"Comment les tarifs sont-ils calculés ?",
"Le modèle commercial est en attente dapprobation. En attendant, toute proposition doit préciser le périmètre, les modules, les limites, laccompagnement, les intégrations et le support."
],
[
"Quelles certifications de sécurité possédez-vous ?",
"Aucune certification nest revendiquée dans cette version. Les preuves de sécurité doivent être fournies pendant l’évaluation puis publiées uniquement après vérification."
],
[
"Que se passe-t-il pendant la démonstration ?",
"La session doit cartographier votre flux de la réservation au retour, montrer le parcours produit pertinent, identifier les intégrations et consigner les questions de compatibilité non résolues."
]
]
},
"final": {
"eyebrow": "Voir le parcours complet",
"title": "Apportez un processus de location réel à la démonstration.",
"body": "Nous suivrons les transmissions, les exceptions et les informations dont votre équipe a besoin de la réservation au retour du véhicule.",
"primary": "Réserver une démonstration",
"secondary": "Contacter le service commercial"
},
"footer": {
"tagline": "Des opérations de location connectées, de la réservation au retour.",
"groups": [
[
"Produit",
[
["Parcours", "#workflow"],
["Modules", "#modules"],
["Tarifs", "#pricing"]
]
],
[
"Entreprise",
[
["Contacter le service commercial", "#contact"],
["Réserver une démo", "#demo"]
]
],
[
"Compte",
[
["Se connecter", "#login"],
["Langue", "#language"],
["Thème", "#theme"]
]
],
[
"Mentions légales",
[
["Confidentialité", "#!"],
["Conditions", "#!"],
["Accessibilité", "#!"]
]
]
],
"copyright": "© 2026 RentalDriveGo. Les preuves et conditions commerciales restent soumises à approbation."
},
"form": {
"title": "Réserver une démonstration du produit",
"body": "Décrivez-nous le fonctionnement de votre activité de location. Les champs obligatoires sont signalés.",
"name": "Nom complet",
"email": "Adresse e-mail professionnelle",
"company": "Entreprise",
"fleet": "Taille approximative du parc",
"market": "Pays ou marché dexploitation",
"language": "Langue souhaitée pour la démonstration",
"message": "Sur quoi la démonstration doit-elle se concentrer ?",
"submit": "Demander ma démonstration",
"privacy": "En envoyant ce formulaire, vous acceptez d’être contacté au sujet de cette demande. Le texte de confidentialité nécessite une validation juridique.",
"close": "Fermer",
"required": "Obligatoire",
"emailError": "Saisissez une adresse e-mail professionnelle valide.",
"requiredError": "Ce champ est obligatoire.",
"fleetOptions": [
"Sélectionnez une option",
"1 à 25 véhicules",
"26 à 100 véhicules",
"101 à 500 véhicules",
"Plus de 500 véhicules",
"Je ne sais pas encore"
],
"langOptions": ["English", "Français", "العربية"],
"successTitle": "Demande de démonstration enregistrée",
"successBody": "Ce prototype a terminé le parcours de réservation. Aucune demande na été envoyée à un véritable système commercial.",
"submitAnother": "Envoyer une autre demande",
"submissionError": "Le prototype na pas pu terminer la demande. Vos informations sont conservées. Réessayez.",
"errorSummary": "Vérifiez les champs signalés, puis réessayez."
},
"preview": {
"today": "Aujourdhui",
"branch": "Agence centrale",
"title": "Vue des opérations",
"reservations": "Réservations",
"ready": "Véhicules prêts",
"attention": "À traiter",
"active": "Locations actives",
"r1": "Départ à 10 h 30",
"r2": "Retour prévu à 14 h 00",
"r3": "Inspection requise",
"vehicle": "Véhicule",
"customer": "Client",
"status": "Statut",
"task": "Prochaine action",
"plate1": "ABC-2048",
"plate2": "RNT-7712",
"statusReady": "Prêt",
"statusDue": "Prévu aujourdhui",
"taskAssign": "Confirmer les documents du conducteur",
"taskInspect": "Finaliser linspection de retour"
},
"tour": {
"title": "Visite du produit",
"intro": "Suivez une location de la réservation au retour.",
"back": "Précédent",
"next": "Suivant",
"finish": "Terminer la visite",
"close": "Fermer la visite du produit",
"step": "Étape",
"of": "sur"
},
"research": {
"title": "Mode recherche",
"events": "événements",
"export": "Exporter les événements",
"clear": "Effacer",
"close": "Fermer"
}
}
+109
View File
@@ -0,0 +1,109 @@
{
"skipToContent": "Aller au contenu principal",
"brandLabel": "Accueil RentalDriveGo",
"foundationLabel": "Fondation de lapplication",
"header": {
"navigationLabel": "Navigation principale",
"controlsLabel": "Commandes daffichage et de langue",
"menuOpen": "Ouvrir le menu de navigation",
"menuClose": "Fermer le menu de navigation",
"nav": {
"product": "Produit",
"workflow": "Parcours",
"modules": "Modules",
"pricing": "Tarifs",
"faq": "FAQ"
},
"login": "Se connecter",
"loginUnavailable": "Destination de connexion en attente dapprobation",
"demo": "Réserver une démo",
"demoUnavailable": "Réservation de démo en attente dapprobation de lintégration"
},
"controls": {
"language": "Langue",
"theme": "Thème",
"themeStatus": "Préférence de thème actuelle : {value}",
"localeNames": {
"en": "Anglais",
"fr": "Français",
"ar": "Arabe"
},
"themes": {
"light": "Clair",
"dark": "Sombre",
"system": "Système"
}
},
"footer": {
"landmarkLabel": "Pied de page du site",
"tagline": "Des opérations de location connectées, de la réservation au retour.",
"groups": {
"product": "Produit",
"company": "Entreprise",
"account": "Compte",
"legal": "Mentions légales"
},
"links": {
"workflow": "Parcours",
"modules": "Modules",
"pricing": "Tarifs",
"faq": "FAQ",
"contact": "Contacter le service commercial",
"demo": "Réserver une démo",
"login": "Se connecter",
"privacy": "Confidentialité",
"terms": "Conditions",
"accessibility": "Accessibilité"
},
"pending": "En attente dapprobation",
"copyrightPrefix": "©",
"releaseNotice": "La publication reste bloquée jusqu’à la résolution des obstacles documentés."
},
"states": {
"loadingTitle": "Chargement",
"loadingBody": "Préparation de la structure de lapplication.",
"errorTitle": "Une erreur sest produite",
"errorBody": "La page na pas pu être affichée. Aucun détail technique na été exposé.",
"retry": "Réessayer",
"notFoundTitle": "Page introuvable",
"notFoundBody": "Cette adresse ne correspond à aucune route localisée approuvée.",
"backHome": "Retour à laccueil",
"pendingTitle": "Destination indisponible",
"pendingBody": "Cette route est définie, mais son contenu ou sa destination de production attend encore une approbation."
},
"foundation": {
"eyebrow": "Fondation de la phase 11",
"title": "Une structure localisée compatible avec les thèmes",
"body": "Cette implémentation valide les fondations visuelles, de routage, de direction, daccessibilité et de métadonnées sans prétendre que la page marketing complète existe déjà.",
"readinessLabel": "Fondations implémentées",
"items": [
[
"Jetons sémantiques",
"Les styles des composants consomment une couche sémantique documentée."
],
[
"Gestion des thèmes",
"Les préférences claire, sombre et système sont résolues et conservées."
],
[
"Localisation",
"Langlais, le français et larabe utilisent des routes préfixées par la langue."
],
["Direction", "Larabe utilise une direction droite-à-gauche au niveau du document."],
[
"Accessibilité",
"Le lien d’évitement, le focus visible, les repères et le mouvement réduit sont intégrés."
],
[
"Structure de lapplication",
"Len-tête adaptatif, la navigation mobile, le pied de page et les états globaux sont disponibles."
]
],
"deferredLabel": "Destinations de la page daccueil différées",
"deferredBody": "Cette destination de navigation approuvée est reliée au manifeste de routes, tandis que sa section de production reste hors du périmètre de la phase 11."
},
"metadata": {
"pendingTitle": "Destination indisponible | RentalDriveGo",
"pendingDescription": "Cette destination localisée de RentalDriveGo est définie, mais sa publication en production nest pas approuvée."
}
}