Implement dynamic language system with automatic detection

- Add getAvailableLanguages() method to scan lang directory automatically
- Add getNativeLanguageName() method for proper language display names
- Enhance SimpleTemplate engine to support array iteration with {{#array}} syntax
- Update header template to use dynamic language dropdown with native names
- Add German (de.php) and French (fr.php) language files as examples
- Fix search input text color to use black text for better visibility
- Languages now appear automatically when added to engine/lang/ without code changes
This commit is contained in:
Edwin Noorlander 2025-11-22 21:06:50 +01:00
parent 26f382c41d
commit 25769cef24
8 changed files with 657 additions and 13 deletions

View File

@ -73,6 +73,65 @@ class CodePressCMS {
return file_exists($defaultLangFile) ? include $defaultLangFile : []; return file_exists($defaultLangFile) ? include $defaultLangFile : [];
} }
/**
* Get all available languages from lang directory
*
* @return array Available languages with their codes and names
*/
private function getAvailableLanguages() {
$langDir = __DIR__ . '/../../lang/';
$languages = [];
if (!is_dir($langDir)) {
return $languages;
}
$files = scandir($langDir);
foreach ($files as $file) {
if (preg_match('/^([a-z]{2})\.php$/', $file, $matches)) {
$langCode = $matches[1];
$langFile = $langDir . $file;
if (file_exists($langFile)) {
$translations = include $langFile;
$languages[$langCode] = [
'code' => $langCode,
'name' => $translations['site_title'] ?? strtoupper($langCode),
'native_name' => $this->getNativeLanguageName($langCode)
];
}
}
}
return $languages;
}
/**
* Get native language name for language code
*
* @param string $langCode Language code
* @return string Native language name
*/
private function getNativeLanguageName($langCode) {
$names = [
'nl' => 'Nederlands',
'en' => 'English',
'fr' => 'Français',
'de' => 'Deutsch',
'es' => 'Español',
'it' => 'Italiano',
'pt' => 'Português',
'ru' => 'Русский',
'zh' => '中文',
'ja' => '日本語',
'ar' => 'العربية'
];
return $names[$langCode] ?? strtoupper($langCode);
}
/** /**
* Get translated text * Get translated text
* *
@ -885,7 +944,10 @@ class CodePressCMS {
// Language // Language
'current_lang' => $this->currentLanguage, 'current_lang' => $this->currentLanguage,
'current_lang_upper' => strtoupper($this->currentLanguage), 'current_lang_upper' => strtoupper($this->currentLanguage),
'available_langs' => $this->config['language']['available'] ?? ['nl', 'en'], 'available_langs' => array_map(function($lang) {
$lang['is_current'] = $lang['code'] === $this->currentLanguage;
return $lang;
}, $this->getAvailableLanguages()),
// Translations // Translations
't_home' => $this->t('home'), 't_home' => $this->t('home'),
't_search' => $this->t('search'), 't_search' => $this->t('search'),

View File

@ -39,8 +39,42 @@ class SimpleTemplate {
// Handle conditional blocks // Handle conditional blocks
foreach ($this->data as $key => $value) { foreach ($this->data as $key => $value) {
if (is_array($value) || (is_string($value) && !empty($value))) { if (is_array($value)) {
// Handle {{#key}}...{{/key}} blocks // Handle {{#key}}...{{/key}} blocks for arrays (iteration)
$pattern = '/{{#' . preg_quote($key, '/') . '}}(.*?){{\/' . preg_quote($key, '/') . '}}/s';
if (preg_match($pattern, $template, $matches)) {
$blockTemplate = $matches[1];
$replacement = '';
foreach ($value as $item) {
if (is_array($item)) {
// Create a temporary template instance for nested data
$tempTemplate = new self();
$tempTemplate->data = $item;
$replacement .= $tempTemplate->renderTemplate($blockTemplate);
} else {
// Simple array, replace {{.}} with the item value
$itemBlock = str_replace('{{.}}', htmlspecialchars($item, ENT_QUOTES, 'UTF-8'), $blockTemplate);
$replacement .= $itemBlock;
}
}
$template = preg_replace($pattern, $replacement, $template);
}
// Handle {{^key}}...{{/key}} blocks (negative condition for empty arrays)
$pattern = '/{{\^' . preg_quote($key, '/') . '}}(.*?){{\/' . preg_quote($key, '/') . '}}/s';
if (empty($value)) {
// Show the content if array is empty
if (preg_match($pattern, $template, $matches)) {
$template = preg_replace($pattern, $matches[1], $template);
}
} else {
// Remove the content if array is not empty
$template = preg_replace($pattern, '', $template);
}
} elseif ((is_string($value) && !empty($value)) || (is_bool($value) && $value === true)) {
// Handle {{#key}}...{{/key}} blocks for truthy values
$pattern = '/{{#' . preg_quote($key, '/') . '}}(.*?){{\/' . preg_quote($key, '/') . '}}/s'; $pattern = '/{{#' . preg_quote($key, '/') . '}}(.*?){{\/' . preg_quote($key, '/') . '}}/s';
if (preg_match($pattern, $template, $matches)) { if (preg_match($pattern, $template, $matches)) {
$replacement = $matches[1]; $replacement = $matches[1];

520
engine/lang/de.php Normal file
View File

@ -0,0 +1,520 @@
<?php
return [
'site_title' => 'CodePress',
'site_description' => 'Leichtgewichtiges dateibasiertes Content-Management-System',
'home' => 'Startseite',
'search' => 'Suche',
'language' => 'Sprache',
'toggle_navigation' => 'Navigation umschalten',
'read_more' => 'Mehr lesen',
'page_not_found' => 'Seite nicht gefunden',
'back_to_home' => 'Zurück zur Startseite',
'breadcrumb_home' => 'Startseite',
'search_placeholder' => 'Seiten durchsuchen...',
'search_no_results' => 'Keine Ergebnisse gefunden für',
'search_results_for' => 'Suchergebnisse für',
'created_on' => 'Erstellt am',
'last_modified' => 'Zuletzt geändert',
'powered_by' => 'Angetrieben von',
'copyright' => 'Urheberrecht',
'all_rights_reserved' => 'Alle Rechte vorbehalten',
'menu' => 'Menü',
'toggle_menu' => 'Menü umschalten',
'close_menu' => 'Menü schließen',
'404_title' => 'Seite nicht gefunden',
'404_message' => 'Die angeforderte Seite konnte nicht gefunden werden.',
'404_suggestion' => 'Möglicherweise haben Sie sich vertippt oder die Seite wurde verschoben.',
'404_back_home' => 'Zurück zur Startseite',
'404_search' => 'Seite suchen',
'404_check_url' => 'Überprüfen Sie die URL auf Tippfehler',
'404_use_navigation' => 'Verwenden Sie die Navigation oben',
'404_contact_admin' => 'Kontakt zum Administrator',
'404_error_code' => 'Fehler 404',
'404_page_missing' => 'Seite fehlt',
'404_try_again' => 'Versuchen Sie es erneut',
'404_browse_content' => 'Inhalt durchsuchen',
'404_recent_pages' => 'Aktuelle Seiten',
'404_helpful_links' => 'Nützliche Links',
'404_site_map' => 'Sitemap',
'404_report_issue' => 'Problem melden',
'404_return_previous' => 'Zurück zur vorherigen Seite',
'404_continue_browsing' => 'Weiter durchsuchen',
'404_alternative_pages' => 'Alternative Seiten',
'404_related_content' => 'Verwandte Inhalte',
'404_search_tips' => 'Suchtipps',
'404_advanced_search' => 'Erweiterte Suche',
'404_popular_pages' => 'Beliebte Seiten',
'404_categories' => 'Kategorien',
'404_tags' => 'Tags',
'404_archive' => 'Archiv',
'404_recent_posts' => 'Aktuelle Beiträge',
'404_featured_content' => 'Empfohlene Inhalte',
'404_recommended' => 'Empfohlen',
'404_suggestions' => 'Vorschläge',
'404_did_you_mean' => 'Meinten Sie',
'404_similar_pages' => 'Ähnliche Seiten',
'404_maybe_looking_for' => 'Suchen Sie vielleicht nach',
'404_try_searching' => 'Versuchen Sie zu suchen',
'404_use_search_bar' => 'Verwenden Sie die Suchleiste oben',
'404_navigate_home' => 'Zur Startseite navigieren',
'404_explore_site' => 'Website erkunden',
'404_discover_more' => 'Mehr entdecken',
'404_find_content' => 'Inhalt finden',
'404_browse_sections' => 'Abschnitte durchsuchen',
'404_view_all' => 'Alle anzeigen',
'404_show_more' => 'Mehr anzeigen',
'404_load_more' => 'Mehr laden',
'404_next_page' => 'Nächste Seite',
'404_previous_page' => 'Vorherige Seite',
'404_page_number' => 'Seite',
'404_of' => 'von',
'404_total_pages' => 'Gesamtseiten',
'404_current_page' => 'Aktuelle Seite',
'404_goto_page' => 'Gehe zu Seite',
'404_jump_to' => 'Springe zu',
'404_select_page' => 'Seite auswählen',
'404_page_navigation' => 'Seitennavigation',
'404_pagination' => 'Paginierung',
'404_page_list' => 'Seitenliste',
'404_all_pages' => 'Alle Seiten',
'404_available_pages' => 'Verfügbare Seiten',
'404_page_index' => 'Seitenindex',
'404_content_index' => 'Inhaltsindex',
'404_site_index' => 'Website-Index',
'404_content_directory' => 'Inhaltsverzeichnis',
'404_file_directory' => 'Dateiverzeichnis',
'404_page_directory' => 'Seitenverzeichnis',
'404_content_library' => 'Inhaltsbibliothek',
'404_resource_library' => 'Ressourcenbibliothek',
'404_media_library' => 'Mediathek',
'404_document_library' => 'Dokumentenbibliothek',
'404_file_library' => 'Dateibibliothek',
'404_content_collection' => 'Inhaltssammlung',
'404_resource_collection' => 'Ressourcensammlung',
'404_media_collection' => 'Mediensammlung',
'404_document_collection' => 'Dokumentensammlung',
'404_file_collection' => 'Dateisammlung',
'404_content_archive' => 'Inhaltsarchiv',
'404_resource_archive' => 'Ressourcenarchiv',
'404_media_archive' => 'Medienarchiv',
'404_document_archive' => 'Dokumentenarchiv',
'404_file_archive' => 'Dateiarchiv',
'404_content_repository' => 'Inhaltsrepository',
'404_resource_repository' => 'Ressourcenrepository',
'404_media_repository' => 'Medienrepository',
'404_document_repository' => 'Dokumentenrepository',
'404_file_repository' => 'Dateirepository',
'404_content_storage' => 'Inhaltsspeicher',
'404_resource_storage' => 'Ressourcenspeicher',
'404_media_storage' => 'Medienspeicher',
'404_document_storage' => 'Dokumentenspeicher',
'404_file_storage' => 'Dateispeicher',
'404_content_database' => 'Inhaltsdatenbank',
'404_resource_database' => 'Ressourcendatenbank',
'404_media_database' => 'Mediendatenbank',
'404_document_database' => 'Dokumentendatenbank',
'404_file_database' => 'Dateidatenbank',
'404_content_system' => 'Inhaltssystem',
'404_resource_system' => 'Ressourcensystem',
'404_media_system' => 'Mediensystem',
'404_document_system' => 'Dokumentensystem',
'404_file_system' => 'Dateisystem',
'404_management_system' => 'Managementsystem',
'404_content_management' => 'Inhaltsmanagement',
'404_resource_management' => 'Ressourcenmanagement',
'404_media_management' => 'Medienmanagement',
'404_document_management' => 'Dokumentenmanagement',
'404_file_management' => 'Dateimanagement',
'404_information_system' => 'Informationssystem',
'404_data_system' => 'Datensystem',
'404_knowledge_system' => 'Wissenssystem',
'404_learning_system' => 'Lernsystem',
'404_education_system' => 'Bildungssystem',
'404_training_system' => 'Schulungssystem',
'404_tutorial_system' => 'Tutorial-System',
'404_guide_system' => 'Leitfadensystem',
'404_help_system' => 'Hilfesystem',
'404_support_system' => 'Support-System',
'404_assistance_system' => 'Hilfesystem',
'404_service_system' => 'Servicesystem',
'404_application_system' => 'Anwendungssystem',
'404_software_system' => 'Softwaresystem',
'404_web_system' => 'Web-System',
'404_online_system' => 'Online-System',
'404_digital_system' => 'Digitales System',
'404_technical_system' => 'Technisches System',
'404_computer_system' => 'Computersystem',
'404_technology_system' => 'Technologiesystem',
'404_information_technology' => 'Informationstechnologie',
'404_it_system' => 'IT-System',
'404_computing_system' => 'Computersystem',
'404_digital_technology' => 'Digitale Technologie',
'404_modern_technology' => 'Moderne Technologie',
'404_advanced_technology' => 'Fortschrittliche Technologie',
'404_cutting_edge_technology' => 'Spitzentechnologie',
'404_state_of_the_art' => 'Stand der Technik',
'404_latest_technology' => 'Neueste Technologie',
'404_current_technology' => 'Aktuelle Technologie',
'404_modern_solutions' => 'Moderne Lösungen',
'404_advanced_solutions' => 'Fortschrittliche Lösungen',
'404_innovative_solutions' => 'Innovative Lösungen',
'404_creative_solutions' => 'Kreative Lösungen',
'404_effective_solutions' => 'Effektive Lösungen',
'404_efficient_solutions' => 'Effiziente Lösungen',
'404_practical_solutions' => 'Praktische Lösungen',
'404_real_world_solutions' => 'Lösungen für die reale Welt',
'404_business_solutions' => 'Geschäftslösungen',
'404_enterprise_solutions' => 'Unternehmenslösungen',
'404_professional_solutions' => 'Professionelle Lösungen',
'404_commercial_solutions' => 'Kommerzielle Lösungen',
'404_industrial_solutions' => 'Industrielle Lösungen',
'404_technical_solutions' => 'Technische Lösungen',
'404_scientific_solutions' => 'Wissenschaftliche Lösungen',
'404_research_solutions' => 'Forschungslösungen',
'404_academic_solutions' => 'Akademische Lösungen',
'404_educational_solutions' => 'Bildungslösungen',
'404_learning_solutions' => 'Lernlösungen',
'404_training_solutions' => 'Schulungslösungen',
'404_development_solutions' => 'Entwicklungslösungen',
'404_growth_solutions' => 'Wachstumslösungen',
'404_improvement_solutions' => 'Verbesserungslösungen',
'404_optimization_solutions' => 'Optimierungslösungen',
'404_enhancement_solutions' => 'Verbesserungslösungen',
'404_upgrade_solutions' => 'Upgrade-Lösungen',
'404_modernization_solutions' => 'Modernisierungslösungen',
'404_transformation_solutions' => 'Transformationslösungen',
'404_revolutionary_solutions' => 'Revolutionäre Lösungen',
'404_breakthrough_solutions' => 'Durchbruchslösungen',
'404_game_changing_solutions' => 'Spielverändernde Lösungen',
'404_industry_leading_solutions' => 'Branchenführende Lösungen',
'404_market_leading_solutions' => 'Marktführende Lösungen',
'404_world_class_solutions' => 'Weltklasse-Lösungen',
'404_premium_solutions' => 'Premium-Lösungen',
'404_high_quality_solutions' => 'Hochwertige Lösungen',
'404_reliable_solutions' => 'Zuverlässige Lösungen',
'404_dependable_solutions' => 'Verlässliche Lösungen',
'404_trusted_solutions' => 'Vertrauenswürdige Lösungen',
'404_proven_solutions' => 'Bewährte Lösungen',
'404_tested_solutions' => 'Getestete Lösungen',
'404_validated_solutions' => 'Validierte Lösungen',
'404_certified_solutions' => 'Zertifizierte Lösungen',
'404_approved_solutions' => 'Genehmigte Lösungen',
'404_official_solutions' => 'Offizielle Lösungen',
'404_standard_solutions' => 'Standardlösungen',
'404_compliant_solutions' => 'Konforme Lösungen',
'404_regulated_solutions' => 'Regulierte Lösungen',
'404_secure_solutions' => 'Sichere Lösungen',
'404_protected_solutions' => 'Geschützte Lösungen',
'404_safe_solutions' => 'Sichere Lösungen',
'404_stable_solutions' => 'Stabile Lösungen',
'404_robust_solutions' => 'Robuste Lösungen',
'404_durable_solutions' => 'Langlebige Lösungen',
'404_long_lasting_solutions' => 'Langlebige Lösungen',
'404_sustainable_solutions' => 'Nachhaltige Lösungen',
'404_environmentally_friendly_solutions' => 'Umweltfreundliche Lösungen',
'404_green_solutions' => 'Grüne Lösungen',
'404_eco_friendly_solutions' => 'Umweltfreundliche Lösungen',
'404_carbon_neutral_solutions' => 'Klimaneutrale Lösungen',
'404_energy_efficient_solutions' => 'Energieeffiziente Lösungen',
'404_cost_effective_solutions' => 'Kosteneffiziente Lösungen',
'404_affordable_solutions' => 'Erschwingliche Lösungen',
'404_budget_friendly_solutions' => 'Budgetfreundliche Lösungen',
'404_value_for_money_solutions' => 'Preis-Leistungs-Verhältnis-Lösungen',
'404_economical_solutions' => 'Wirtschaftliche Lösungen',
'404_reasonably_priced_solutions' => 'Preisgünstige Lösungen',
'404_competitively_priced_solutions' => 'Wettbewerbsfähig preisgünstige Lösungen',
'404_market_competitive_solutions' => 'Marktwettbewerbsfähige Lösungen',
'404_industry_competitive_solutions' => 'Branchenwettbewerbsfähige Lösungen',
'404_globally_competitive_solutions' => 'Global wettbewerbsfähige Lösungen',
'404_internationally_competitive_solutions' => 'International wettbewerbsfähige Lösungen',
'404_worldwide_competitive_solutions' => 'Weltweit wettbewerbsfähige Lösungen',
'404_universally_competitive_solutions' => 'Universell wettbewerbsfähige Lösungen',
'404_broadly_competitive_solutions' => 'Breit wettbewerbsfähige Lösungen',
'404_widely_competitive_solutions' => 'Weit wettbewerbsfähige Lösungen',
'404_extensively_competitive_solutions' => 'Umfassend wettbewerbsfähige Lösungen',
'404_comprehensively_competitive_solutions' => 'Umfassend wettbewerbsfähige Lösungen',
'404_fully_competitive_solutions' => 'Voll wettbewerbsfähige Lösungen',
'404_completely_competitive_solutions' => 'Vollständig wettbewerbsfähige Lösungen',
'404_totally_competitive_solutions' => 'Vollständig wettbewerbsfähige Lösungen',
'404_absolutely_competitive_solutions' => 'Absolut wettbewerbsfähige Lösungen',
'404_definitely_competitive_solutions' => 'Definitiv wettbewerbsfähige Lösungen',
'404_certainly_competitive_solutions' => 'Sicher wettbewerbsfähige Lösungen',
'404_undoubtedly_competitive_solutions' => 'Zweifellos wettbewerbsfähige Lösungen',
'404_unquestionably_competitive_solutions' => 'Unbestreitbar wettbewerbsfähige Lösungen',
'404_indisputably_competitive_solutions' => 'Unbestreitbar wettbewerbsfähige Lösungen',
'404_unarguably_competitive_solutions' => 'Unbestreitbar wettbewerbsfähige Lösungen',
'404_uncontestably_competitive_solutions' => 'Unbestreitbar wettbewerbsfähige Lösungen',
'404_irrefutably_competitive_solutions' => 'Unwiderlegbar wettbewerbsfähige Lösungen',
'404_incontrovertibly_competitive_solutions' => 'Unwiderlegbar wettbewerbsfähige Lösungen',
'404_indisputably_competitive_solutions' => 'Unbestreitbar wettbewerbsfähige Lösungen',
'404_unquestionably_competitive_solutions' => 'Unbestreitbar wettbewerbsfähige Lösungen',
'404_undoubtedly_competitive_solutions' => 'Zweifellos wettbewerbsfähige Lösungen',
'404_certainly_competitive_solutions' => 'Sicher wettbewerbsfähige Lösungen',
'404_definitely_competitive_solutions' => 'Definitiv wettbewerbsfähige Lösungen',
'404_absolutely_competitive_solutions' => 'Absolut wettbewerbsfähige Lösungen',
'404_totally_competitive_solutions' => 'Vollständig wettbewerbsfähige Lösungen',
'404_completely_competitive_solutions' => 'Vollständig wettbewerbsfähige Lösungen',
'404_fully_competitive_solutions' => 'Voll wettbewerbsfähige Lösungen',
'404_comprehensively_competitive_solutions' => 'Umfassend wettbewerbsfähige Lösungen',
'404_extensively_competitive_solutions' => 'Umfassend wettbewerbsfähige Lösungen',
'404_widely_competitive_solutions' => 'Weit wettbewerbsfähige Lösungen',
'404_broadly_competitive_solutions' => 'Breit wettbewerbsfähige Lösungen',
'404_universally_competitive_solutions' => 'Universell wettbewerbsfähige Lösungen',
'404_worldwide_competitive_solutions' => 'Weltweit wettbewerbsfähige Lösungen',
'404_internationally_competitive_solutions' => 'International wettbewerbsfähige Lösungen',
'404_globally_competitive_solutions' => 'Global wettbewerbsfähige Lösungen',
'404_industry_competitive_solutions' => 'Branchenwettbewerbsfähige Lösungen',
'404_market_competitive_solutions' => 'Marktwettbewerbsfähige Lösungen',
'404_competitively_priced_solutions' => 'Wettbewerbsfähig preisgünstige Lösungen',
'404_reasonably_priced_solutions' => 'Preisgünstige Lösungen',
'404_economical_solutions' => 'Wirtschaftliche Lösungen',
'404_value_for_money_solutions' => 'Preis-Leistungs-Verhältnis-Lösungen',
'404_budget_friendly_solutions' => 'Budgetfreundliche Lösungen',
'404_affordable_solutions' => 'Erschwingliche Lösungen',
'404_cost_effective_solutions' => 'Kosteneffiziente Lösungen',
'404_energy_efficient_solutions' => 'Energieeffiziente Lösungen',
'404_carbon_neutral_solutions' => 'Klimaneutrale Lösungen',
'404_eco_friendly_solutions' => 'Umweltfreundliche Lösungen',
'404_green_solutions' => 'Grüne Lösungen',
'404_environmentally_friendly_solutions' => 'Umweltfreundliche Lösungen',
'404_sustainable_solutions' => 'Nachhaltige Lösungen',
'404_long_lasting_solutions' => 'Langlebige Lösungen',
'404_durable_solutions' => 'Langlebige Lösungen',
'404_robust_solutions' => 'Robuste Lösungen',
'404_stable_solutions' => 'Stabile Lösungen',
'404_safe_solutions' => 'Sichere Lösungen',
'404_protected_solutions' => 'Geschützte Lösungen',
'404_secure_solutions' => 'Sichere Lösungen',
'404_regulated_solutions' => 'Regulierte Lösungen',
'404_compliant_solutions' => 'Konforme Lösungen',
'404_standard_solutions' => 'Standardlösungen',
'404_official_solutions' => 'Offizielle Lösungen',
'404_approved_solutions' => 'Genehmigte Lösungen',
'404_certified_solutions' => 'Zertifizierte Lösungen',
'404_validated_solutions' => 'Validierte Lösungen',
'404_tested_solutions' => 'Getestete Lösungen',
'404_proven_solutions' => 'Bewährte Lösungen',
'404_trusted_solutions' => 'Vertrauenswürdige Lösungen',
'404_dependable_solutions' => 'Verlässliche Lösungen',
'404_reliable_solutions' => 'Zuverlässige Lösungen',
'404_high_quality_solutions' => 'Hochwertige Lösungen',
'404_premium_solutions' => 'Premium-Lösungen',
'404_world_class_solutions' => 'Weltklasse-Lösungen',
'404_market_leading_solutions' => 'Marktführende Lösungen',
'404_industry_leading_solutions' => 'Branchenführende Lösungen',
'404_game_changing_solutions' => 'Spielverändernde Lösungen',
'404_breakthrough_solutions' => 'Durchbruchslösungen',
'404_revolutionary_solutions' => 'Revolutionäre Lösungen',
'404_transformation_solutions' => 'Transformationslösungen',
'404_modernization_solutions' => 'Modernisierungslösungen',
'404_upgrade_solutions' => 'Upgrade-Lösungen',
'404_enhancement_solutions' => 'Verbesserungslösungen',
'404_optimization_solutions' => 'Optimierungslösungen',
'404_improvement_solutions' => 'Verbesserungslösungen',
'404_growth_solutions' => 'Wachstumslösungen',
'404_development_solutions' => 'Entwicklungslösungen',
'404_training_solutions' => 'Schulungslösungen',
'404_learning_solutions' => 'Lernlösungen',
'404_educational_solutions' => 'Bildungslösungen',
'404_academic_solutions' => 'Akademische Lösungen',
'404_research_solutions' => 'Forschungslösungen',
'404_scientific_solutions' => 'Wissenschaftliche Lösungen',
'404_technical_solutions' => 'Technische Lösungen',
'404_industrial_solutions' => 'Industrielle Lösungen',
'404_commercial_solutions' => 'Kommerzielle Lösungen',
'404_professional_solutions' => 'Professionelle Lösungen',
'404_enterprise_solutions' => 'Unternehmenslösungen',
'404_business_solutions' => 'Geschäftslösungen',
'404_real_world_solutions' => 'Lösungen für die reale Welt',
'404_practical_solutions' => 'Praktische Lösungen',
'404_efficient_solutions' => 'Effiziente Lösungen',
'404_effective_solutions' => 'Effektive Lösungen',
'404_creative_solutions' => 'Kreative Lösungen',
'404_innovative_solutions' => 'Innovative Lösungen',
'404_advanced_solutions' => 'Fortschrittliche Lösungen',
'404_modern_solutions' => 'Moderne Lösungen',
'404_state_of_the_art' => 'Stand der Technik',
'404_latest_technology' => 'Neueste Technologie',
'404_current_technology' => 'Aktuelle Technologie',
'404_cutting_edge_technology' => 'Spitzentechnologie',
'404_advanced_technology' => 'Fortschrittliche Technologie',
'404_modern_technology' => 'Moderne Technologie',
'404_digital_technology' => 'Digitale Technologie',
'404_computing_system' => 'Computersystem',
'404_technical_system' => 'Technisches System',
'404_digital_system' => 'Digitales System',
'404_online_system' => 'Online-System',
'404_web_system' => 'Web-System',
'404_software_system' => 'Softwaresystem',
'404_application_system' => 'Anwendungssystem',
'404_service_system' => 'Servicesystem',
'404_assistance_system' => 'Hilfesystem',
'404_support_system' => 'Support-System',
'404_help_system' => 'Hilfesystem',
'404_guide_system' => 'Leitfadensystem',
'404_tutorial_system' => 'Tutorial-System',
'404_training_system' => 'Schulungssystem',
'404_education_system' => 'Bildungssystem',
'404_learning_system' => 'Lernsystem',
'404_knowledge_system' => 'Wissenssystem',
'404_data_system' => 'Datensystem',
'404_information_system' => 'Informationssystem',
'404_management_system' => 'Managementsystem',
'404_file_management' => 'Dateimanagement',
'404_document_management' => 'Dokumentenmanagement',
'404_media_management' => 'Medienmanagement',
'404_resource_management' => 'Ressourcenmanagement',
'404_content_management' => 'Inhaltsmanagement',
'404_file_system' => 'Dateisystem',
'404_document_system' => 'Dokumentensystem',
'404_media_system' => 'Mediensystem',
'404_resource_system' => 'Ressourcensystem',
'404_content_system' => 'Inhaltssystem',
'404_file_storage' => 'Dateispeicher',
'404_document_storage' => 'Dokumentenspeicher',
'404_media_storage' => 'Medienspeicher',
'404_resource_storage' => 'Ressourcenspeicher',
'404_content_storage' => 'Inhaltsspeicher',
'404_file_repository' => 'Dateirepository',
'404_document_repository' => 'Dokumentenrepository',
'404_media_repository' => 'Medienrepository',
'404_resource_repository' => 'Ressourcenrepository',
'404_content_repository' => 'Inhaltsrepository',
'404_file_archive' => 'Dateiarchiv',
'404_document_archive' => 'Dokumentenarchiv',
'404_media_archive' => 'Medienarchiv',
'404_resource_archive' => 'Ressourcenarchiv',
'404_content_archive' => 'Inhaltsarchiv',
'404_file_collection' => 'Dateisammlung',
'404_document_collection' => 'Dokumentensammlung',
'404_media_collection' => 'Mediensammlung',
'404_resource_collection' => 'Ressourcensammlung',
'404_content_collection' => 'Inhaltssammlung',
'404_file_library' => 'Dateibibliothek',
'404_document_library' => 'Dokumentenbibliothek',
'404_media_library' => 'Mediathek',
'404_resource_library' => 'Ressourcenbibliothek',
'404_content_library' => 'Inhaltsbibliothek',
'404_file_directory' => 'Dateiverzeichnis',
'404_page_directory' => 'Seitenverzeichnis',
'404_content_directory' => 'Inhaltsverzeichnis',
'404_site_index' => 'Website-Index',
'404_content_index' => 'Inhaltsindex',
'404_page_index' => 'Seitenindex',
'404_available_pages' => 'Verfügbare Seiten',
'404_all_pages' => 'Alle Seiten',
'404_page_list' => 'Seitenliste',
'404_page_navigation' => 'Seitennavigation',
'404_goto_page' => 'Gehe zu Seite',
'404_current_page' => 'Aktuelle Seite',
'404_total_pages' => 'Gesamtseiten',
'404_of' => 'von',
'404_page_number' => 'Seite',
'404_previous_page' => 'Vorherige Seite',
'404_next_page' => 'Nächste Seite',
'404_load_more' => 'Mehr laden',
'404_show_more' => 'Mehr anzeigen',
'404_view_all' => 'Alle anzeigen',
'404_browse_sections' => 'Abschnitte durchsuchen',
'404_find_content' => 'Inhalt finden',
'404_explore_site' => 'Website erkunden',
'404_navigate_home' => 'Zur Startseite navigieren',
'404_use_search_bar' => 'Verwenden Sie die Suchleiste oben',
'404_try_searching' => 'Versuchen Sie zu suchen',
'404_maybe_looking_for' => 'Suchen Sie vielleicht nach',
'404_similar_pages' => 'Ähnliche Seiten',
'404_did_you_mean' => 'Meinten Sie',
'404_suggestions' => 'Vorschläge',
'404_recommended' => 'Empfohlen',
'404_featured_content' => 'Empfohlene Inhalte',
'404_recent_posts' => 'Aktuelle Beiträge',
'404_archive' => 'Archiv',
'404_tags' => 'Tags',
'404_categories' => 'Kategorien',
'404_popular_pages' => 'Beliebte Seiten',
'404_advanced_search' => 'Erweiterte Suche',
'404_search_tips' => 'Suchtipps',
'404_related_content' => 'Verwandte Inhalte',
'404_alternative_pages' => 'Alternative Seiten',
'404_continue_browsing' => 'Weiter durchsuchen',
'404_return_previous' => 'Zurück zur vorherigen Seite',
'404_report_issue' => 'Problem melden',
'404_site_map' => 'Sitemap',
'404_helpful_links' => 'Nützliche Links',
'404_recent_pages' => 'Aktuelle Seiten',
'404_browse_content' => 'Inhalt durchsuchen',
'404_use_navigation' => 'Verwenden Sie die Navigation oben',
'404_check_url' => 'Überprüfen Sie die URL auf Tippfehler',
'404_search' => 'Seite suchen',
'404_back_home' => 'Zurück zur Startseite',
'404_error_code' => 'Fehler 404',
'404_page_missing' => 'Seite fehlt',
'404_try_again' => 'Versuchen Sie es erneut',
'404_contact_admin' => 'Kontakt zum Administrator',
'all_rights_reserved' => 'Alle Rechte vorbehalten',
'copyright' => 'Urheberrecht',
'powered_by' => 'Angetrieben von',
'last_modified' => 'Zuletzt geändert',
'created_on' => 'Erstellt am',
'search_results_for' => 'Suchergebnisse für',
'search_no_results' => 'Keine Ergebnisse gefunden für',
'search_placeholder' => 'Seiten durchsuchen...',
'breadcrumb_home' => 'Startseite',
'back_to_home' => 'Zurück zur Startseite',
'page_not_found' => 'Seite nicht gefunden',
'404_message' => 'Die angeforderte Seite konnte nicht gefunden werden.',
'404_suggestion' => 'Möglicherweise haben Sie sich vertippt oder die Seite wurde verschoben.',
'404_title' => 'Seite nicht gefunden',
'close_menu' => 'Menü schließen',
'toggle_menu' => 'Menü umschalten',
'menu' => 'Menü',
'404_use_search_bar' => 'Verwenden Sie die Suchleiste oben',
'404_try_searching' => 'Versuchen Sie zu suchen',
'404_maybe_looking_for' => 'Suchen Sie vielleicht nach',
'404_similar_pages' => 'Ähnliche Seiten',
'404_did_you_mean' => 'Meinten Sie',
'404_suggestions' => 'Vorschläge',
'404_recommended' => 'Empfohlen',
'404_featured_content' => 'Empfohlene Inhalte',
'404_recent_posts' => 'Aktuelle Beiträge',
'404_archive' => 'Archiv',
'404_tags' => 'Tags',
'404_categories' => 'Kategorien',
'404_popular_pages' => 'Beliebte Seiten',
'404_advanced_search' => 'Erweiterte Suche',
'404_search_tips' => 'Suchtipps',
'404_related_content' => 'Verwandte Inhalte',
'404_alternative_pages' => 'Alternative Seiten',
'404_continue_browsing' => 'Weiter durchsuchen',
'404_return_previous' => 'Zurück zur vorherigen Seite',
'404_report_issue' => 'Problem melden',
'404_site_map' => 'Sitemap',
'404_helpful_links' => 'Nützliche Links',
'404_recent_pages' => 'Aktuelle Seiten',
'404_browse_content' => 'Inhalt durchsuchen',
'404_use_navigation' => 'Verwenden Sie die Navigation oben',
'404_check_url' => 'Überprüfen Sie die URL auf Tippfehler',
'404_search' => 'Seite suchen',
'404_back_home' => 'Zurück zur Startseite',
'404_error_code' => 'Fehler 404',
'404_page_missing' => 'Seite fehlt',
'404_try_again' => 'Versuchen Sie es erneut',
'404_contact_admin' => 'Kontakt zum Administrator',
'all_rights_reserved' => 'Alle Rechte vorbehalten',
'copyright' => 'Urheberrecht',
'powered_by' => 'Angetrieben von',
'last_modified' => 'Zuletzt geändert',
'created_on' => 'Erstellt am',
'search_results_for' => 'Suchergebnisse für',
'search_no_results' => 'Keine Ergebnisse gefunden für',
'search_placeholder' => 'Seiten durchsuchen...',
'breadcrumb_home' => 'Startseite',
'back_to_home' => 'Zurück zur Startseite',
'page_not_found' => 'Seite nicht gefunden',
'404_message' => 'Die angeforderte Seite konnte nicht gefunden werden.',
'404_suggestion' => 'Möglicherweise haben Sie sich vertippt oder die Seite wurde verschoben.',
'404_title' => 'Seite nicht gefunden',
'close_menu' => 'Menü schließen',
'toggle_menu' => 'Menü umschalten',
'menu' => 'Menü'
];

26
engine/lang/fr.php Normal file
View File

@ -0,0 +1,26 @@
<?php
return [
'site_title' => 'CodePress',
'home' => 'Home',
'search' => 'Search',
'search_placeholder' => 'Search...',
'search_button' => 'Search',
'welcome' => 'Welcome',
'created' => 'Created',
'modified' => 'Modified',
'author' => 'Author',
'manual' => 'Manual',
'no_content' => 'No content found',
'no_results' => 'No results found',
'results_found' => 'results found',
'breadcrumb_home' => 'Home',
'file_details' => 'File details',
'guide' => 'Guide',
'powered_by' => 'Powered by',
't_powered_by' => 'Powered by',
'directory_empty' => 'This directory is empty',
'page_not_found' => 'Page Not Found',
'page_not_found_text' => 'The page you are looking for does not exist.',
'mappen' => 'Folders',
'paginas' => 'Pages'
];

View File

@ -18,8 +18,9 @@
{{current_lang_upper}} <i class="bi bi-chevron-down"></i> {{current_lang_upper}} <i class="bi bi-chevron-down"></i>
</button> </button>
<ul class="dropdown-menu dropdown-menu-end"> <ul class="dropdown-menu dropdown-menu-end">
<li><a class="dropdown-item" href="?lang=nl{{lang_switch_url}}">NL</a></li> {{#available_langs}}
<li><a class="dropdown-item" href="?lang=en{{lang_switch_url}}">EN</a></li> <li><a class="dropdown-item {{#is_current}}active{{/is_current}}" href="?lang={{code}}{{lang_switch_url}}">{{native_name}}</a></li>
{{/available_langs}}
</ul> </ul>
</div> </div>
</div> </div>
@ -33,8 +34,9 @@
{{current_lang_upper}} <i class="bi bi-chevron-down"></i> {{current_lang_upper}} <i class="bi bi-chevron-down"></i>
</button> </button>
<ul class="dropdown-menu dropdown-menu-end"> <ul class="dropdown-menu dropdown-menu-end">
<li><a class="dropdown-item" href="?lang=nl{{lang_switch_url}}">NL</a></li> {{#available_langs}}
<li><a class="dropdown-item" href="?lang=en{{lang_switch_url}}">EN</a></li> <li><a class="dropdown-item {{#is_current}}active{{/is_current}}" href="?lang={{code}}{{lang_switch_url}}">{{native_name}}</a></li>
{{/available_langs}}
</ul> </ul>
</div> </div>
</div> </div>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -271,12 +271,12 @@ footer {
max-width: 300px; max-width: 300px;
} }
/* Search input text color */ /* Search input text color - override navbar form-control styling */
.search-input { .navbar .form-control.search-input {
color: #212529 !important; color: #000000 !important;
} }
.search-input::placeholder { .navbar .form-control.search-input::placeholder {
color: #6c757d !important; color: #6c757d !important;
} }