UNPKG

@agametis/create-app-for-fm

Version:

Tool for selecting a starter project for FileMaker applications

421 lines (403 loc) 14 kB
// Language translations for the CLI tool import os from "os"; // Detect the user's system language // Returns 'de' for German, 'en' for all other languages export function detectLanguage() { try { // Get the system locale from environment variables const locale = process.env.LANG || process.env.LC_ALL || process.env.LC_MESSAGES || process.env.LANGUAGE || os.locale || "en"; // Check if the locale starts with 'de' (German) return locale.toLowerCase().startsWith("de") ? "de" : "en"; } catch (error) { // Default to English if there's any error return "en"; } } // Get the current language const currentLanguage = detectLanguage(); // Translation strings const translations = { common: { availableScripts: { de: "Verfügbare Skripte:", en: "Available scripts:", }, checkReadme: { de: "\n📖 Überprüfe die README.md-Datei für weitere Informationen.", en: "\n📖 Check the README.md file for more information.", }, directoryNotEmpty: { de: "🚨 Aktuelles Verzeichnis ist nicht leer. Dateien könnten überschrieben werden. Fortfahren?", en: "🚨 Current directory is not empty. Files might be overwritten. Continue?", }, error: { de: "\n❌ Error: ", en: "\n❌ Error: ", }, initializationError: { de: "\n❌ Fehler bei der Initialisierung: {error}", en: "\n❌ Error during initialization: {error}", }, installDependencies: { de: ". Installiere Abhängigkeiten: ", en: ". Install dependencies: ", }, nextSteps: { de: "🔸 Nächste Schritte:", en: "🔸 Next steps:", }, operationCancelled: { de: "\n🛑 Vorgang abgebrochen.", en: "\n🛑 Operation cancelled.", }, preparingTemplate: { de: "\n💾 Vorlage wird vorbereitet...", en: "\n💾 Preparing template...", }, selectTemplate: { de: "📋 Wähle eine Vorlage aus GitHub Repositories:", en: "📋 Choose a template from GitHub repositories:", }, selectedPackageManager: { de: "\n📦 Ausgewählter Paketmanager: ", en: "\n📦 Selected package manager: ", }, startDevServer: { de: "Starte den Entwicklungsserver", en: "Start the development server", }, templateCopied: { de: "\n💾 Vorlagendateien wurden erfolgreich kopiert.", en: "\n💾 Template files were successfully copied.", }, userCancelled: { de: "\n🛑 Vorgang vom Benutzer abgebrochen.", en: "\n🛑 Operation cancelled by user.", }, }, // Create command translations create: { changeToDirectory: { de: " 1. Wechsle in das Projektverzeichnis: cd ", en: " 1. Change to the project directory: cd ", }, checkReadmeInDirectory: { de: "\n📚 Prüfe die README-Datei im Projektverzeichnis für weitere Anweisungen.", en: "\n📚 Check the README file in the project directory for further instructions.", }, chooseAnotherName: { de: "Bitte wähle einen anderen Projektnamen oder lösche das vorhandene Verzeichnis.", en: "Please choose another project name or delete the existing directory.", }, currentDirectory: { de: "Im aktuellen Verzeichnis", en: "In the current directory", }, directoryExists: { de: "\n❌ Fehler: Verzeichnis existiert bereits und ist nicht leer.", en: "\n❌ Error: Directory already exists and is not empty.", }, downloadError: { de: "\n❌ Fehler beim Herunterladen der Vorlage: ", en: "\n❌ Error downloading template: ", }, initialProjectName: { de: "meine-fm-vorlage", en: "my-fm-template", }, locationChoice: { de: "📂 Wo möchtest du dein Projekt erstellen?", en: "📂 Where would you like to create your project?", }, newDirectory: { de: "In einem neuen Verzeichnis", en: "In a new directory", }, packageJsonFound: { de: "\n📚 Vorlage enthält package.json - Initialisierung übersprungen.", en: "\n📚 Template contains package.json - Initialization skipped.", }, packageManager: { de: "📦 Wähle einen Paketmanager:", en: "📦 Choose a package manager:", }, projectName: { de: "📝 Projektname:", en: "📝 Project name:", }, selectedTemplate: { de: "\n📋 Ausgewählte Vorlage: ", en: "\n📋 Selected template: ", }, setupComplete: { de: "\n✅ Projekt-Setup abgeschlossen!\n", en: "\n✅ Project setup completed!\n", }, setupInCurrentDir: { de: "\n✨ Projekt wird im aktuellen Verzeichnis eingerichtet: ", en: "\n✨ Setting up project in current directory: ", }, setupInNewDir: { de: "\n✨ Projekt wird in neuem Verzeichnis eingerichtet: ", en: "\n✨ Setting up project in new directory: ", }, successMessage: { de: "👍 Viel Erfolg mit deinem neuen Projekt!\n", en: "👍 Good luck with your new project!\n", }, title: { de: "\n📦 Erstelle dein Startprojekt für FileMaker\n", en: "\n📦 Create your starter project for FileMaker\n", }, }, // List command translations list: { availableTemplates: { de: "\n📋 Verfügbare Vorlagen:\n", en: "\n📋 Available templates:\n", }, infoCommand: { de: "Verwende 'create-app-for-fm info <template>' für mehr Informationen zu einer Vorlage.", en: "Use 'create-app-for-fm info <template>' for more information about a template.", }, useInfoCommand: { de: "Verwende 'create-app-for-fm info <template>' für mehr Informationen zu einer Vorlage.", en: "Use 'create-app-for-fm info <template>' for more information about a template.", }, }, // Info command translations info: { dependencies: { de: "\n🔸 Abhängigkeiten:", en: "\n🔸 Dependencies:", }, description: { de: "🔸 Beschreibung\n", en: "🔸 Description\n", }, errorFetchingInfo: { de: "\n❌ Konnte keine zusätzlichen Informationen abrufen: ", en: "\n❌ Could not retrieve additional information: ", }, githubUrl: { de: "\n🔸 GitHub URL\n", en: "\n🔸 GitHub URL\n", }, loadingMoreInfo: { de: "\nLade weitere Informationen...", en: "\nLoading more info...", }, noTemplateName: { de: "\n❌ Fehler: Kein Vorlagenname angegeben.", en: "\n❌ Error: No template name provided.", }, packageJsonInfo: { de: "\n🔸 package.json Informationen:", en: "\n🔸 package.json information:", }, readmeFound: { de: "\n🔸 README gefunden:\n", en: "\n🔸 README found:\n", }, readmeTruncated: { de: "...", en: "...", }, scripts: { de: "\n🔸 Skripte:", en: "\n🔸 Scripts:", }, templateInfo: { de: "\n📋 Informationen zur Vorlage: ", en: "\n📋 Information about template: ", }, templateNotFound: { de: "\n❌ Fehler: Vorlage nicht gefunden.", en: "\n❌ Error: Template not found.", }, visitGithub: { de: "\n🔸 Besuche GitHub für mehr Details", en: "\n🔸 Visit GitHub for more details", }, }, // Init command translations init: { downloadingTemplateFiles: { de: "\n💾 Lade Vorlagendateien herunter...", en: "\n💾 Downloading template files...", }, goodLuck: { de: "\n🚀 Viel Erfolg mit deinem Projekt!", en: "\n🚀 Good luck with your project!", }, initializationCancelled: { de: "\n🛑 Initialisierung abgebrochen.", en: "\n🛑 Initialization cancelled.", }, initializingCurrentDirectory: { de: "\n🚀 Initialisiere das aktuelle Verzeichnis als Projekt\n", en: "\n🚀 Initializing the current directory as a project\n", }, installDependenciesStep: { de: " 1. Installiere Abhängigkeiten: {packageManager} install", en: " 1. Install dependencies: {packageManager} install", }, noPackageJsonFound: { de: "\n💾 Keine package.json gefunden. Initialisiere neue package.json...", en: "\n💾 No package.json found. Initializing new package.json...", }, projectInitialized: { de: "\n✅ Projekt erfolgreich initialisiert!", en: "\n✅ Project successfully initialized!", }, selectPackageManager: { de: "📦 Wähle einen Paketmanager:", en: "📦 Choose a package manager:", }, templateFilesCopied: { de: "\n✅ Vorlagendateien kopiert!", en: "\n✅ Template files copied!", }, }, // Utils translations utils: { cloneError: { de: "\n❌ Fehler beim Klonen des Repositories: {error}", en: "\n❌ Error cloning repository: {error}", }, gitNotInstalledError: { de: "\nDieser Fehler kann auftreten, weil Git nicht auf Ihrem System installiert ist. Bitte installieren Sie Git von https://git-scm.com/downloads und versuchen Sie es erneut.", en: "\nThis error may occur because Git is not installed on your system. Please install Git from https://git-scm.com/downloads and try again.", }, dependenciesInstalled: { de: "\n✅ Abhängigkeiten erfolgreich installiert!", en: "\n✅ Dependencies successfully installed!", }, dependencyInstallError: { de: "\n❌ Fehler bei der Installation der Abhängigkeiten: {error}", en: "\n❌ Error installing dependencies: {error}", }, initializationError: { de: "\n❌ Fehler bei der Initialisierung mit {packageManager}: {error}", en: "\n❌ Error initializing with {packageManager}: {error}", }, initializingPackageManager: { de: "\n📦 Initialisiere Paketmanager...", en: "\n📦 Initializing package manager...", }, installingDependencies: { de: "\n📦 Installiere Abhängigkeiten...", en: "\n📦 Installing dependencies...", }, manualInstallInstructions: { de: "Bitte installiere die Abhängigkeiten manuell mit dem Befehl 'npm install', 'yarn install' oder 'pnpm install'.", en: "Please install the dependencies manually using the command 'npm install', 'yarn install', or 'pnpm install'.", }, packageManagerCheckError: { de: "\n❌ Fehler bei der Prüfung von {packageManager}: {error}", en: "\n❌ Error checking {packageManager}: {error}", }, packageManagerInitialized: { de: "\n✅ Paketmanager initialisiert.", en: "\n✅ Package manager initialized.", }, packageManagerNotAvailable: { de: "\n❌ {packageManager} ist nicht verfügbar: {error}", en: "\n❌ {packageManager} is not available: {error}", }, skippingPackageManagerInit: { de: "\n📝 Dieses Projekt benötigt keine package.json - Initialisierung übersprungen.", en: "\n📝 This project doesn't require package.json - Initialization skipped.", }, }, // Config translations config: { fmStarterViteDesc: { de: "Eine allgemeine Vorlage für FileMaker-Projekte", en: "A general template for FileMaker projects", }, fmStarterReactDesc: { de: "Eine React-Vorlage für FileMaker-Projekte", en: "A React template for FileMaker projects", }, fmStarterGoogleMapsDesc: { de: "Vorlage mit einer Google Maps Integration für FileMaker-Projekte", en: "A template with Google Maps integration for FileMaker projects", }, fmReactDemoDesc: { de: "Eine Demo-React-Anwendung für eine FileMaker-Integration", en: "A demo React application for FileMaker integration", }, fmk2022DemosDesc: { de: "Präsentationen und Demo-Dateien von der FMK 2022", en: "Presentations and demo files from the FMK 2022", }, fmk2023DemosDesc: { de: "Präsentationen und Demo-Dateien von der FMK 2023", en: "Presentations and demo files from the FMK 2023", }, fmk2024DemosDesc: { de: "Präsentationen und Demo-Dateien von der FMK 2024", en: "Presentations and demo files from the FMK 2024", }, }, // CLI translations cli: { createDescription: { de: "Erstelle ein neues Projekt", en: "Create a new project", }, infoDescription: { de: "Zeigt Informationen zu einer Vorlage", en: "Show information about a template", }, initDescription: { de: "Initialisiert das aktuelle Verzeichnis als Projekt", en: "Initialize the current directory as a project", }, listDescription: { de: "Zeigt verfügbare Vorlagen an", en: "Show available templates", }, mainDescription: { de: "Erstelle ein neues Projekt für FileMaker", en: "Create a new project for FileMaker", }, }, }; // Helper function to get translation string export function t(key, params = {}) { // Split the key by dots to navigate the translations object const keys = key.split("."); // Navigate through the translations object let result = translations; for (const k of keys) { if (result[k] === undefined) { console.error(`Translation key not found: ${key}`); return key; // Return the key itself as fallback } result = result[k]; } // Get the translation for the current language, fallback to English const translation = result[currentLanguage] || result["en"]; if (!translation) { console.error( `Translation not found for key: ${key} in language: ${currentLanguage}`, ); return key; // Return the key itself as fallback } // Replace parameters in the translation string if any let translatedText = translation; for (const [param, value] of Object.entries(params)) { translatedText = translatedText.replace(`{${param}}`, value); } return translatedText; } // Export the current language for reference export const language = currentLanguage;