New design v0.2
Some checks failed
Build and Push Docker Image / build-and-push (push) Failing after 1m18s
Some checks failed
Build and Push Docker Image / build-and-push (push) Failing after 1m18s
New design and framework
This commit is contained in:
124
client/src/lib/i18n.ts
Normal file
124
client/src/lib/i18n.ts
Normal file
@@ -0,0 +1,124 @@
|
||||
export const translations = {
|
||||
en: {
|
||||
title: 'AI Stack Deployer',
|
||||
subtitle: 'Deploy your personal AI assistant in seconds',
|
||||
chooseStackName: 'Choose Your Stack Name',
|
||||
availableAt: 'Your AI assistant will be available at',
|
||||
stackName: 'Stack Name',
|
||||
placeholder: 'e.g., john-dev',
|
||||
inputHint: '3-20 characters, lowercase letters, numbers, and hyphens only',
|
||||
deployBtn: 'Deploy My AI Stack',
|
||||
deploying: 'Deploying Your Stack',
|
||||
stack: 'Stack',
|
||||
initializing: 'Initializing deployment...',
|
||||
successMessage: 'Your AI coding assistant is ready to use',
|
||||
stackNameLabel: 'Stack Name:',
|
||||
openStack: 'Open My AI Stack',
|
||||
deployAnother: 'Deploy Another Stack',
|
||||
tryAgain: 'Try Again',
|
||||
poweredBy: 'Powered by',
|
||||
deploymentComplete: 'Deployment Complete',
|
||||
deploymentFailed: 'Deployment Failed',
|
||||
nameRequired: 'Name is required',
|
||||
nameLengthError: 'Name must be between 3 and 20 characters',
|
||||
nameCharsError: 'Only lowercase letters, numbers, and hyphens allowed',
|
||||
nameHyphenError: 'Cannot start or end with a hyphen',
|
||||
nameReserved: 'This name is reserved',
|
||||
checkingAvailability: 'Checking availability...',
|
||||
nameAvailable: '✓ Name is available!',
|
||||
nameNotAvailable: 'Name is not available',
|
||||
checkFailed: 'Failed to check availability',
|
||||
connectionLost: 'Connection lost. Please refresh and try again.',
|
||||
deployingText: 'Deploying...',
|
||||
yournamePlaceholder: 'yourname'
|
||||
},
|
||||
nl: {
|
||||
title: 'AI Stack Deployer',
|
||||
subtitle: 'Implementeer je persoonlijke AI in seconden',
|
||||
chooseStackName: 'Kies Je Stack Naam',
|
||||
availableAt: 'Je zal AI-assistenten beschikbaar zijn op',
|
||||
stackName: 'Stack Naam',
|
||||
placeholder: 'bijv., Oussama',
|
||||
inputHint: '3-20 tekens, kleine letters, cijfers en koppeltekens',
|
||||
deployBtn: 'Implementeer Mijn AI Stack',
|
||||
deploying: 'Stack Wordt Geïmplementeerd',
|
||||
stack: 'Stack',
|
||||
initializing: 'Implementatie initialiseren...',
|
||||
successMessage: 'Je AI programmeerassistent is klaar voor gebruik',
|
||||
stackNameLabel: 'Stack Naam:',
|
||||
openStack: 'Open Mijn AI Stack',
|
||||
deployAnother: 'Implementeer Nog Een Stack',
|
||||
tryAgain: 'Probeer Opnieuw',
|
||||
poweredBy: 'Mogelijk gemaakt door',
|
||||
deploymentComplete: 'Implementatie Voltooid',
|
||||
deploymentFailed: 'Implementatie Mislukt',
|
||||
nameRequired: 'Naam is verplicht',
|
||||
nameLengthError: 'Naam moet tussen 3 en 20 tekens zijn',
|
||||
nameCharsError: 'Alleen kleine letters, cijfers en koppeltekens toegestaan',
|
||||
nameHyphenError: 'Kan niet beginnen of eindigen met een koppelteken',
|
||||
nameReserved: 'Deze naam is gereserveerd',
|
||||
checkingAvailability: 'Beschikbaarheid controleren...',
|
||||
nameAvailable: '✓ Naam is beschikbaar!',
|
||||
nameNotAvailable: 'Naam is niet beschikbaar',
|
||||
checkFailed: 'Controle mislukt',
|
||||
connectionLost: 'Verbinding verbroken. Ververs de pagina en probeer opnieuw.',
|
||||
deployingText: 'Implementeren...',
|
||||
yournamePlaceholder: 'jouwnaam'
|
||||
},
|
||||
ar: {
|
||||
title: 'AI Stack Deployer',
|
||||
subtitle: 'انشر مساعد البرمجة الذكي الخاص بك في ثوانٍ',
|
||||
chooseStackName: 'اختر اسم المشروع',
|
||||
availableAt: 'سيكون مساعدك الذكي متاحًا على',
|
||||
stackName: 'اسم المشروع',
|
||||
placeholder: 'مثال: أحمد-dev',
|
||||
inputHint: '3-20 حرف، أحرف صغيرة وأرقام وشرطات فقط',
|
||||
deployBtn: 'انشر مشروعي',
|
||||
deploying: 'جاري النشر',
|
||||
stack: 'المشروع',
|
||||
initializing: 'جاري التهيئة...',
|
||||
successMessage: 'مساعد البرمجة الذكي جاهز للاستخدام',
|
||||
stackNameLabel: 'اسم المشروع:',
|
||||
openStack: 'افتح مشروعي',
|
||||
deployAnother: 'انشر مشروع آخر',
|
||||
tryAgain: 'حاول مرة أخرى',
|
||||
poweredBy: 'مدعوم من',
|
||||
deploymentComplete: 'تم النشر بنجاح',
|
||||
deploymentFailed: 'فشل النشر',
|
||||
nameRequired: 'الاسم مطلوب',
|
||||
nameLengthError: 'يجب أن يكون الاسم بين 3 و 20 حرفًا',
|
||||
nameCharsError: 'يُسمح فقط بالأحرف الصغيرة والأرقام والشرطات',
|
||||
nameHyphenError: 'لا يمكن أن يبدأ أو ينتهي بشرطة',
|
||||
nameReserved: 'هذا الاسم محجوز',
|
||||
checkingAvailability: 'جاري التحقق...',
|
||||
nameAvailable: '✓ الاسم متاح!',
|
||||
nameNotAvailable: 'الاسم غير متاح',
|
||||
checkFailed: 'فشل التحقق',
|
||||
connectionLost: 'انقطع الاتصال. يرجى تحديث الصفحة والمحاولة مرة أخرى.',
|
||||
deployingText: 'جاري النشر...',
|
||||
yournamePlaceholder: 'اسمك'
|
||||
}
|
||||
} as const;
|
||||
|
||||
export type Language = keyof typeof translations;
|
||||
export type TranslationKey = keyof typeof translations.en;
|
||||
|
||||
export function detectLanguage(): Language {
|
||||
const browserLang = navigator.language?.split('-')[0].toLowerCase();
|
||||
if (browserLang && browserLang in translations) {
|
||||
return browserLang as Language;
|
||||
}
|
||||
return 'en';
|
||||
}
|
||||
|
||||
export function getStoredLanguage(): Language {
|
||||
const stored = localStorage.getItem('preferredLanguage');
|
||||
if (stored && stored in translations) {
|
||||
return stored as Language;
|
||||
}
|
||||
return detectLanguage();
|
||||
}
|
||||
|
||||
export function storeLanguage(lang: Language): void {
|
||||
localStorage.setItem('preferredLanguage', lang);
|
||||
}
|
||||
Reference in New Issue
Block a user