From f1b037ce2679423e71c16311180a192ffc5447fb Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Mon, 26 Jun 2023 10:43:45 +0200 Subject: [PATCH 01/34] =?UTF-8?q?=F0=9F=8C=90=20Localization?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Dutch WIP by me (project now runs debug with Dutch localization) - Vietnamese provided by @xuandung38 - Added `phpman.services` status to TL --- PHP Monitor.xcodeproj/project.pbxproj | 40 +- .../xcschemes/PHP Monitor EAP.xcscheme | 1 + .../Domain/App/Services/ServicesManager.swift | 10 +- phpmon/{ => en.lproj}/Localizable.strings | 14 +- phpmon/nl.lproj/Localizable.strings | 770 ++++++++++++++++++ phpmon/vi.lproj/Localizable.strings | 768 +++++++++++++++++ 6 files changed, 1580 insertions(+), 23 deletions(-) rename phpmon/{ => en.lproj}/Localizable.strings (99%) create mode 100644 phpmon/nl.lproj/Localizable.strings create mode 100644 phpmon/vi.lproj/Localizable.strings diff --git a/PHP Monitor.xcodeproj/project.pbxproj b/PHP Monitor.xcodeproj/project.pbxproj index 974d1497..7b06a282 100644 --- a/PHP Monitor.xcodeproj/project.pbxproj +++ b/PHP Monitor.xcodeproj/project.pbxproj @@ -196,9 +196,6 @@ C4551657297AED18009B8466 /* ValetRcTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4551656297AED18009B8466 /* ValetRcTest.swift */; }; C4551659297AED7D009B8466 /* valetrc.valid in Resources */ = {isa = PBXBuildFile; fileRef = C4551658297AED7D009B8466 /* valetrc.valid */; }; C455165B297AEDB5009B8466 /* valetrc.broken in Resources */ = {isa = PBXBuildFile; fileRef = C455165A297AEDB5009B8466 /* valetrc.broken */; }; - C4570C3A28FC355300D18420 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = C473319E2470923A009A0597 /* Localizable.strings */; }; - C4570C3B28FC355300D18420 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = C473319E2470923A009A0597 /* Localizable.strings */; }; - C4570C3C28FC355400D18420 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = C473319E2470923A009A0597 /* Localizable.strings */; }; C459B4BD27F6093700E9B4B4 /* nginx-proxy.test in Resources */ = {isa = PBXBuildFile; fileRef = C459B4BC27F6093700E9B4B4 /* nginx-proxy.test */; }; C45B9149295607F400F4EC78 /* Service.swift in Sources */ = {isa = PBXBuildFile; fileRef = C45B9148295607F400F4EC78 /* Service.swift */; }; C45B914A295607F400F4EC78 /* Service.swift in Sources */ = {isa = PBXBuildFile; fileRef = C45B9148295607F400F4EC78 /* Service.swift */; }; @@ -523,7 +520,6 @@ C471E8F028F9BB8F0021E251 /* Key.swift in Sources */ = {isa = PBXBuildFile; fileRef = 54D9E0AD27E4F51E003B9AD9 /* Key.swift */; }; C471E8F128F9BB8F0021E251 /* KeyCombo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 54D9E0AF27E4F51E003B9AD9 /* KeyCombo.swift */; }; C471E8F228F9BB8F0021E251 /* ModifierFlagsExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 54D9E0B027E4F51E003B9AD9 /* ModifierFlagsExtension.swift */; }; - C473319F2470923A009A0597 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = C473319E2470923A009A0597 /* Localizable.strings */; }; C47331A2247093B7009A0597 /* StatusMenu.swift in Sources */ = {isa = PBXBuildFile; fileRef = C47331A1247093B7009A0597 /* StatusMenu.swift */; }; C474B00624C0E98C00066A22 /* LocalNotification.swift in Sources */ = {isa = PBXBuildFile; fileRef = C474B00524C0E98C00066A22 /* LocalNotification.swift */; }; C47699EF28A2F2A30060FEB8 /* WarningManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = C47699EE28A2F2A30060FEB8 /* WarningManager.swift */; }; @@ -807,6 +803,10 @@ C4FACE83288F1F9700FC478F /* OnboardingWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4FACE82288F1F9700FC478F /* OnboardingWindowController.swift */; }; C4FBFC532616485F00CDB8E1 /* PhpVersionDetectionTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4FBFC512616485F00CDB8E1 /* PhpVersionDetectionTest.swift */; }; C4FC21B128391F8E00D368BB /* MainMenu+Actions.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4F361602836BFD9003598CC /* MainMenu+Actions.swift */; }; + C4FC8D3D2A49816300FBBD16 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = C4FC8D422A49816300FBBD16 /* Localizable.strings */; }; + C4FC8D3E2A49816300FBBD16 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = C4FC8D422A49816300FBBD16 /* Localizable.strings */; }; + C4FC8D3F2A49816300FBBD16 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = C4FC8D422A49816300FBBD16 /* Localizable.strings */; }; + C4FC8D402A49816300FBBD16 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = C4FC8D422A49816300FBBD16 /* Localizable.strings */; }; C4FD87A829AB9ABD0002D701 /* PhpConfigChecker.swift in Sources */ = {isa = PBXBuildFile; fileRef = C43FDBE829A932B0003D85EC /* PhpConfigChecker.swift */; }; C4FD87A929AB9ABD0002D701 /* PhpConfigChecker.swift in Sources */ = {isa = PBXBuildFile; fileRef = C43FDBE829A932B0003D85EC /* PhpConfigChecker.swift */; }; C4FD87AA29AB9ABD0002D701 /* PhpConfigChecker.swift in Sources */ = {isa = PBXBuildFile; fileRef = C43FDBE829A932B0003D85EC /* PhpConfigChecker.swift */; }; @@ -975,7 +975,6 @@ C471E7AF28F9B4940021E251 /* InternalSwitcherTest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InternalSwitcherTest.swift; sourceTree = ""; }; C471E7BC28F9B90F0021E251 /* UI Tests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "UI Tests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; C471E7BE28F9B90F0021E251 /* StartupTest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StartupTest.swift; sourceTree = ""; }; - C473319E2470923A009A0597 /* Localizable.strings */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; path = Localizable.strings; sourceTree = ""; }; C47331A1247093B7009A0597 /* StatusMenu.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StatusMenu.swift; sourceTree = ""; }; C474B00524C0E98C00066A22 /* LocalNotification.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LocalNotification.swift; sourceTree = ""; }; C47699EE28A2F2A30060FEB8 /* WarningManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WarningManager.swift; sourceTree = ""; }; @@ -1095,6 +1094,9 @@ C4FACE7F288F1C0D00FC478F /* PreferencesWindowController+Hotkey.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "PreferencesWindowController+Hotkey.swift"; sourceTree = ""; }; C4FACE82288F1F9700FC478F /* OnboardingWindowController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OnboardingWindowController.swift; sourceTree = ""; }; C4FBFC512616485F00CDB8E1 /* PhpVersionDetectionTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PhpVersionDetectionTest.swift; sourceTree = ""; }; + C4FC8D412A49816300FBBD16 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = ""; }; + C4FC8D432A49816C00FBBD16 /* vi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = vi; path = vi.lproj/Localizable.strings; sourceTree = ""; }; + C4FC8D442A4981BC00FBBD16 /* nl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nl; path = nl.lproj/Localizable.strings; sourceTree = ""; }; C4FE011028084FC200D1DE6D /* SelectionVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SelectionVC.swift; sourceTree = ""; }; /* End PBXFileReference section */ @@ -1339,7 +1341,7 @@ C4232EE42612526500158FC6 /* Credits.html */, C41C1B4022B0098000E7CF16 /* phpmon.entitlements */, C41C1B3A22B0098000E7CF16 /* Assets.xcassets */, - C473319E2470923A009A0597 /* Localizable.strings */, + C4FC8D422A49816300FBBD16 /* Localizable.strings */, C405A4CD24B9B9070062FAFA /* IAP */, ); path = phpmon; @@ -2148,6 +2150,8 @@ knownRegions = ( en, Base, + vi, + nl, ); mainGroup = C41C1B2A22B0097F00E7CF16; packageReferences = ( @@ -2185,7 +2189,7 @@ C44C1991276E44CB0072762D /* ProgressWindow.storyboard in Resources */, C4232EE52612526500158FC6 /* Credits.html in Resources */, 54FCFD26276C883F004CE748 /* SelectPreferenceView.xib in Resources */, - C473319F2470923A009A0597 /* Localizable.strings in Resources */, + C4FC8D3D2A49816300FBBD16 /* Localizable.strings in Resources */, C4068CA427B0780A00544CD5 /* CheckboxPreferenceView.xib in Resources */, 54FCFD2D276C8D67004CE748 /* HotkeyPreferenceView.xib in Resources */, C405A4D024B9B9140062FAFA /* InternetAccessPolicy.strings in Resources */, @@ -2196,7 +2200,7 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - C4570C3B28FC355300D18420 /* Localizable.strings in Resources */, + C4FC8D3F2A49816300FBBD16 /* Localizable.strings in Resources */, C4E2E85528FC256B003B070C /* brew-services-sudo.json in Resources */, C4E2E85928FC256B003B070C /* brew-services-normal.json in Resources */, C40934A8298EEB8700D25014 /* phpmon-dev.rb in Resources */, @@ -2209,7 +2213,7 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - C4570C3A28FC355300D18420 /* Localizable.strings in Resources */, + C4FC8D402A49816300FBBD16 /* Localizable.strings in Resources */, C4E2E85628FC256B003B070C /* brew-services-sudo.json in Resources */, C4E2E85A28FC256B003B070C /* brew-services-normal.json in Resources */, C40934A9298EEB8700D25014 /* phpmon-dev.rb in Resources */, @@ -2223,7 +2227,7 @@ buildActionMask = 2147483647; files = ( C4551659297AED7D009B8466 /* valetrc.valid in Resources */, - C4570C3C28FC355400D18420 /* Localizable.strings in Resources */, + C4FC8D3E2A49816300FBBD16 /* Localizable.strings in Resources */, 54FCFD27276C883F004CE748 /* SelectPreferenceView.xib in Resources */, 54FCFD2E276C8D67004CE748 /* HotkeyPreferenceView.xib in Resources */, C42CFB1827DFDFDC00862737 /* nginx-site-isolated.test in Resources */, @@ -3095,6 +3099,16 @@ name = Main.storyboard; sourceTree = ""; }; + C4FC8D422A49816300FBBD16 /* Localizable.strings */ = { + isa = PBXVariantGroup; + children = ( + C4FC8D412A49816300FBBD16 /* en */, + C4FC8D432A49816C00FBBD16 /* vi */, + C4FC8D442A4981BC00FBBD16 /* nl */, + ); + name = Localizable.strings; + sourceTree = ""; + }; /* End PBXVariantGroup section */ /* Begin XCBuildConfiguration section */ @@ -3238,6 +3252,7 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_ANALYZER_NONNULL = YES; CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; @@ -3301,6 +3316,7 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_ANALYZER_NONNULL = YES; CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; @@ -3569,6 +3585,7 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_ANALYZER_NONNULL = YES; CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; @@ -3676,6 +3693,7 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_ANALYZER_NONNULL = YES; CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; @@ -3790,6 +3808,7 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_ANALYZER_NONNULL = YES; CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; @@ -3976,6 +3995,7 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_ANALYZER_NONNULL = YES; CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; diff --git a/PHP Monitor.xcodeproj/xcshareddata/xcschemes/PHP Monitor EAP.xcscheme b/PHP Monitor.xcodeproj/xcshareddata/xcschemes/PHP Monitor EAP.xcscheme index 4aa04cf5..6706025e 100644 --- a/PHP Monitor.xcodeproj/xcshareddata/xcschemes/PHP Monitor EAP.xcscheme +++ b/PHP Monitor.xcodeproj/xcshareddata/xcschemes/PHP Monitor EAP.xcscheme @@ -67,6 +67,7 @@ buildConfiguration = "Debug.EA" selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" + language = "nl" launchStyle = "0" useCustomWorkingDirectory = "NO" ignoresPersistentStateOnLaunch = "NO" diff --git a/phpmon/Domain/App/Services/ServicesManager.swift b/phpmon/Domain/App/Services/ServicesManager.swift index fb8017fc..49d454cc 100644 --- a/phpmon/Domain/App/Services/ServicesManager.swift +++ b/phpmon/Domain/App/Services/ServicesManager.swift @@ -46,22 +46,22 @@ class ServicesManager: ObservableObject { public var statusMessage: String { if self.services.isEmpty || !self.firstRunComplete { - return "Loading..." + return "phpman.services.loading".localized } let statuses = self.services[0...2].map { $0.status } if statuses.contains(.missing) { - return "A key service is not installed." + return "phpman.services.not_installed".localized } if statuses.contains(.error) { - return "A key service is reporting an error state." + return "phpman.services.error".localized } if statuses.contains(.inactive) { - return "A key service is not running." + return "phpman.services.inactive".localized } - return "All Valet services are OK." + return "phpman.services.all_ok".localized } public var statusColor: Color { diff --git a/phpmon/Localizable.strings b/phpmon/en.lproj/Localizable.strings similarity index 99% rename from phpmon/Localizable.strings rename to phpmon/en.lproj/Localizable.strings index 45b5d2c9..31dc3b02 100644 --- a/phpmon/Localizable.strings +++ b/phpmon/en.lproj/Localizable.strings @@ -1,11 +1,3 @@ -/* - Strings.strings - PHP Monitor - - Created by Nico Verbruggen on 16/05/2020. - Copyright © 2023 Nico Verbruggen. All rights reserved. -*/ - // MENU ITEMS (MI) "mi_busy" = "PHP Monitor is busy..."; @@ -151,6 +143,12 @@ You may be asked for your password during the uninstallation process if file per "phpman.steps.pouring" = "Pouring... This can take a while..."; "phpman.steps.summary" = "Some package has finished installing..."; +"phpman.services.loading" = "Loading..."; +"phpman.services.not_installed" = "A key service is not installed."; +"phpman.services.error" = "A key service is reporting an error state."; +"phpman.services.inactive" = "A key service is not running."; +"phpman.services.all_ok" = "All Valet services are OK."; + // LITE MODE "lite_mode_explanation.title" = "You are currently running PHP Monitor in Standalone Mode."; diff --git a/phpmon/nl.lproj/Localizable.strings b/phpmon/nl.lproj/Localizable.strings new file mode 100644 index 00000000..33524479 --- /dev/null +++ b/phpmon/nl.lproj/Localizable.strings @@ -0,0 +1,770 @@ +// MENU ITEMS (MI) + +"mi_busy" = "PHP Monitor is bezig..."; + +"mi_unsure" = "We zijn niet zeker welke versie van PHP er actief is."; +"mi_php_version" = "Globale versie: PHP"; +"mi_php_switch" = "Switch naar PHP"; +"mi_php_unsupported" = "Sommige PHP versies die geïnstalleerd zijn, worden niet getoond."; +"mi_php_broken_1" = "Het lijkt alsof er problemen zijn met jouw PHP installatie..."; +"mi_php_broken_2" = "Probeer eens `php -v` in de terminal uit te voeren."; +"mi_php_broken_3" = "Je kan ook tussen PHP versies switchen."; +"mi_php_broken_4" = "`brew reinstall php` uitvoeren kan misschien helpen."; +"mi_no_php_linked" = "Geen PHP versie gelinkt!"; +"mi_fix_php_link" = "Automatisch oplossen..."; +"mi_no_php_linked_explain" = "What is dit?"; +"mi_php_version_manager" = "PHP versies beheren..."; + +"mi_diagnostics" = "Diagnostische informatie"; +"mi_active_services" = "Actieve services"; +"mi_restart_php_fpm" = "Herstart service: php"; +"mi_restart_nginx" = "Herstart service: nginx"; +"mi_restart_dnsmasq" = "Herstart service: dnsmasq"; +"mi_manage_services" = "Beheer services"; +"mi_restart_valet_services" = "Herstart Valet services"; +"mi_stop_valet_services" = "Stop Valet services"; + +"mi_fix_my_valet" = "Fix My Valet..."; +"mi_fix_my_valet_tooltip" = "Iets mis met jouw installatie van Valet? Gebruik de automatische fixes van PHP Monitor en hopelijk zijn jouw problemen snel opgelost!"; +"mi_fix_brew_permissions" = "Herstel Homebrew Permissions..."; +"mi_fix_brew_permissions_tooltip" = "Heb je problemen met permissions wanneer je `brew upgrade` gebruikt? PHP Monitor kan je helpen!"; + +"mi_php_refresh" = "Vernieuwen"; + +"mi_configuration" = "PHP configuratie"; +"mi_limits" = "Configureer limieten"; +"mi_memory_limit" = "Geheugen limiet"; +"mi_post_max_size" = "Max POST"; +"mi_upload_max_filesize" = "Max Upload"; +"mi_manual_actions" = "Manuele Acties"; +"mi_services" = "Services"; +"mi_other" = "First Aid & Services"; +"mi_first_aid" = "First Aid"; + +"mi_xdebug_mode" = "Beheer Xdebug"; + +"mi_composer" = "Composer"; +"mi_valet_config" = "Vind Valet folder (.config/valet)"; +"mi_php_config" = "Vind PHP configuratiebestand (php.ini)"; +"mi_phpmon_config" = "Vind PHP Monitor folder (.config/phpmon)"; +"mi_global_composer" = "Vind globale Composer folder (.composer)"; +"mi_phpinfo" = "Toon huidige configuratie (phpinfo)"; +"mi_update_global_composer" = "Update globale Composer packages..."; +"mi_detected_extensions" = "Gedetecteerde extensies"; +"mi_no_extensions_detected" = "Geen extra extensies gedetecteerd."; + +"mi_php_doctor" = "PHP Doctor"; +"mi_fa_php_doctor" = "Open PHP Doctor..."; +"mi_recommendations_count" = "%i issues gedetecteerd!"; +"mi_view_recommendations" = "Bekijk aanbevelingen..."; + +"mi_valet" = "Laravel Valet"; +"mi_domain_list" = "Open lijst met domeinen..."; + +"mi_preferences" = "Voorkeuren..."; +"mi_donate" = "Doneer..."; +"mi_check_for_updates" = "Zoek naar updates..."; +"mi_lite_mode" = "Over Standalone Mode..."; +"mi_quit" = "PHP Monitor afsluiten"; +"mi_about" = "Over PHP Monitor"; + +"mi_presets_title" = "Configuratie Presets"; +"mi_apply_presets_title" = "Apply Configuratie Presets"; +"mi_revert_to_prev_config" = "Terug naar vorige configuratie..."; +"mi_profiles_loaded" = "%i profielen ingeladen via configuratiebestand"; + +"mi_no_presets" = "Geen presets beschikbaar."; +"mi_set_up_presets" = "Meer te weten komen over presets..."; + +"mi_view_onboarding" = "Open welkomvenster..."; + +"mi_xdebug_available_modes" = "Beschikbare modes"; +"mi_xdebug_actions" = "Acties"; +"mi_xdebug_disable_all" = "Alle modes uitschakelen"; + +// PHPMAN + +"phpman.busy.title" = "Bezig met zoeken naar updates!"; +"phpman.busy.description.outdated" = "Aan het controleren of er een PHP versie is die outdated is..."; + +"phpman.version.broken" = "Deze versie lijkt kapot te zijn, je kunt proberen te herstellen."; +"phpman.version.has_update" = "Versie %@ geïnstalleerd, %@ beschikbaar."; +"phpman.version.installed" = "Versie %@ is momenteel geïnstalleerd."; +"phpman.version.available_for_installation" = "Deze versie kan worden geïnstalleerd."; +"phpman.buttons.uninstall" = "Deïnstalleren"; +"phpman.buttons.install" = "Installeren"; +"phpman.buttons.update" = "Bijwerken"; +"phpman.buttons.repair" = "Herstellen"; + +"phpman.title" = "PHP Versiebeheerder"; +"phpman.description" = "**PHP Versiebeheerder** stelt je in staat om verschillende PHP-versies te installeren, upgraden en verwijderen via Homebrew, zonder dat je de commando's zelf in de terminal hoeft uit te voeren."; +"phpman.disclaimer" = "Houd er rekening mee dat het installeren of upgraden van PHP-versies mogelijk andere Homebrew-pakketten kan upgraden. De meeste installatiestappen duren meestal enige tijd, dus even geduld terwijl Homebrew zijn werk doet."; +"phpman.refresh.button" = "Zoek naar updates"; +"phpman.refresh.button.description" = "Je kunt op de vernieuwen-knop drukken om te controleren of er updates beschikbaar zijn voor geïnstalleerde PHP-versies."; + +"phpman.has_updates.description" = "Er zijn één of meer updates beschikbaar. (Houd er rekening mee dat PHP Monitor altijd PHP-versies in bulk installeert of bijwerkt, dus je zult altijd alle installaties tegelijk upgraden.)"; +"phpman.has_updates.button" = "Alles bijwerken"; + +"phpman.warnings.unsupported.title" = "Je versie van Homebrew kan problemen veroorzaken"; +"phpman.warnings.unsupported.desc" = "Geen functionaliteit is uitgeschakeld, maar sommige opdrachten werken mogelijk niet zoals verwacht. Je gebruikt momenteel Homebrew %@. + +Op dit ogenblik is Homebrew 4 de enige ondersteunde versie voor de PHP Version Manager. Als je een nieuwere versie van Homebrew gebruikt, kun je controleren of er een nieuwere versie van PHP Monitor beschikbaar is."; + +"phpman.warnings.removal.title" = "Weet je zeker dat je %@ wilt verwijderen?"; +"phpman.warnings.removal.desc" = "Hou er rekening mee dat configuratiebestanden niet worden verwijderd, dus het zou eenvoudig moeten zijn om later opnieuw te installeren als dat nodig is. + +Tijdens het verwijderingsproces kan je worden gevraagd om je wachtwoord indien de bestandsmachtigingen een eenvoudige verwijdering niet toestaan."; +"phpman.warnings.removal.button" = "Verwijderen"; + +"phpman.failures.install.title" = "Installatie mislukt!"; +"phpman.failures.install.desc" = "Helaas heeft de operatie om onbekende redenen een foutcode teruggegeven. Het is mogelijk dat de formules correct zijn geïnstalleerd of bijgewerkt. Helaas kan ik hier niet veel aan doen. Controleer de laatste paar berichten van Homebrew hier voor meer informatie over wat er is gebeurd: + +%@"; + +"phpman.action_prevented_busy.title" = "PHP Monitor is momenteel bezig."; +"phpman.action_prevented_busy.desc" = "PHP Monitor is momenteel bezig met bijvoorbeeld het wisselen tussen PHP-versies. Om ervoor te zorgen dat je systeem niet vastloopt, moet je wachten totdat PHP Monitor klaar is voordat je dit opnieuw probeert."; + +"phpman.uninstall_prevented.title" = "Je kunt de momenteel actieve versie van PHP niet verwijderen via PHP Monitor."; +"phpman.uninstall_prevented.desc" = "Om problemen met PHP Monitor en verdere crashes te voorkomen, is het niet mogelijk om de momenteel gekoppelde versie van PHP te verwijderen via deze gebruikersinterface. Je kunt versies wisselen en het opnieuw proberen, of deze versie handmatig verwijderen via de terminal.\n\nHoud er rekening mee dat PHP Monitor kan crashen als je de momenteel gekoppelde PHP-versie verwijdert."; + +"phpman.failures.uninstall.title" = "Verwijderen mislukt!"; +"phpman.failures.uninstall.desc" = "Helaas is de automatische verwijdering mislukt. Je kunt proberen deze opdracht handmatig uit te voeren: `%@` en erachter komen wat er misgaat. Vergeet niet om PHP Monitor opnieuw te starten (of op de vernieuwingsknop te drukken) wanneer dit is voltooid."; + +"phpman.unlinked.title" = "Geen van de geïnstalleerde PHP-versies op je systeem is momenteel gelinkt."; +"phpman.unlinked.desc" = "Waarschijnlijk heb je nog steeds een versie van PHP geïnstalleerd, maar momenteel is er geen versie van PHP gelinkt."; +"phpman.unlinked.detail" = "Zonder enige gekoppelde PHP-versie is het `php`-binairbestand niet toegankelijk op je systeem en kun je geen PHP-scripts uitvoeren zonder expliciet onderdeel te zijn van het PATH. Je kunt PHP Monitor automatisch dit probleem laten oplossen (kies 'Automatisch herstellen' in het hoofdmenu) of het zelf oplossen door `brew link php --force` uit te voeren."; + +"phpman.operations.repairing" = "Herstel installaties..."; +"phpman.operations.updating" = "Updates installeren..."; +"phpman.operations.installing" = "%@ installeren..."; + +"phpman.steps.fetching" = "Ophalen..."; +"phpman.steps.downloading" = "Downloaden van pakketgegevens..."; +"phpman.steps.installing" = "Installeren van enkele pakketgegevens..."; +"phpman.steps.pouring" = "Gieten... Dit kan even duren..."; +"phpman.steps.summary" = "Het installeren van een pakket is voltooid…"; + +"phpman.services.loading" = "Bezig met laden..."; +"phpman.services.not_installed" = "Een belangrijke service is niet geïnstalleerd."; +"phpman.services.error" = "Een belangrijke service geeft een error status door."; +"phpman.services.inactive" = "Een belangrijke service is niet actief."; +"phpman.services.all_ok" = "Alle Valet services zijn OK."; + +// LITE MODE + +"lite_mode_explanation.title" = "You are currently running PHP Monitor in Standalone Mode."; +"lite_mode_explanation.subtitle" = "PHP Monitor has additional features that are available for use if you happen to be a user of Laravel Valet. Right now, PHP Monitor could not detect an active installation of Valet on your system, so those features are unavailable."; +"lite_mode_explanation.description" = "For more information, I'd recommend checking out the README (accessible on GitHub) which will explain what steps you need to take to install Valet and make PHP Monitor run correctly with it installed. You will need to restart PHP Monitor after installing Laravel Valet before it will leave Standalone Mode."; + +// GENERIC + +"generic.ok" = "OK"; +"generic.cancel" = "Cancel"; +"generic.retry" = "Retry"; +"generic.notice" = "Notice"; + +// PRESET LOADING + +"preset_help_title" = "Working with Configuration Presets"; +"preset_help_info" = "You can set up configuration presets in the config.json file, located in ~/.config/phpmon/config.json. These presets can apply a selection of configuration values all at once. This is a powerful feature, but currently needs to be set up manually."; +"preset_help_desc" = "After restarting PHP Monitor, all presets found in the file will be loaded. If no presets appear, the file probably could not be parsed correctly.\n\nYou can click the question mark in this alert to go to the FAQ on GitHub, where you can find more information about this feature, including a sample file."; + +// MENU ITEMS (if window is open) + +"mm_add_folder_as_link" = "Add Folder as Link..."; +"mm_reload_domain_list" = "Reload Domains List"; +"mm_find_in_domain_list" = "Search in Domains List"; + +// SITE LIST + +"domain_list.title" = "Domains"; +"domain_list.subtitle" = ""; + +"domain_list.no_domains" = "You have not set up any domains or proxies yet."; +"domain_list.no_domains_for_search_query" = "There are no results for your search query."; + +"domain_list.tooltips.isolated" = "This domain is isolated and using PHP %@ instead of the globally linked PHP."; +"domain_list.tooltips.checkmark" = "This domain is being served with a version of PHP that is compatible with this requirement (PHP %@). Click on the PHP version next to this checkmark to find out more information about how this requirement was determined."; + +"domain_list.alerts_isolation_failed.title" = "Oops! Site Isolation Not Applied"; +"domain_list.alerts_isolation_failed.subtitle" = "Something went wrong trying to change the isolation status for this site. If this is your default site but it is not linked, I recommend manually linking the site prior to setting up isolation."; +"domain_list.alerts_isolation_failed.desc" = "To find out what goes wrong, you can try running the command in your terminal manually: %@"; + +"domain_list.alerts_status_not_changed.title" = "Oops! SSL Status Not Changed"; +"domain_list.alerts_status_not_changed.desc" = "Something went wrong. Try running the command in your terminal manually: %@"; + +"domain_list.alerts_status_changed.title" = "SSL Status Changed"; +"domain_list.alerts_status_changed.desc" = "The domain '%@' is now %@."; +"domain_list.alerts_status_secure" = "secure"; +"domain_list.alerts_status_unsecure" = "unsecured"; + +"domain_list.confirm_unlink" = "Are you sure you want to unlink '%@'?"; +"domain_list.confirm_unlink_desc" = "No files will be removed. You can always link the folder again by clicking on the + button and selecting the original folder."; +"site_link.close" = "Close"; +"site_link.switch_to_php" = "Switch to PHP %@"; + +"domain_list.confirm_unproxy" = "Are you sure you want to remove the proxy '%@'?"; +"domain_list.confirm_unproxy_desc" = "You can always recreate proxy the again by clicking on the + button."; + +// CHOOSE WHAT TO ADD + +"selection.title" = "What kind of domain would you like to set up?"; +"selection.description" = "Links are used to directly serve projects. If you have a Laravel, Symfony, WordPress, etc. folder with code, you'll want to create a link and choose the folder where your code lives.\n\nIf you are in need of a proxy, you can proxy e.g. a container to a particular domain name. This can be useful in combination with Docker, for example."; +"selection.create_link" = "Create a Link"; +"selection.create_proxy" = "Create a Proxy"; +"selection.cancel" = "Cancel"; + +// ADD PROXY TO DOMAINS LIST + +"domain_list.add.set_up_proxy" = "Set up a Proxy"; +"domain_list.add.proxy_subject" = "Proxy subject (must include protocol and port)"; +"domain_list.add.domain_name" = "Domain name"; +"domain_list.add.create_proxy" = "Create Proxy"; +"domain_list.add.proxy_available" = "%@ will be proxied and will be available via: %@://%@.%@"; +"domain_list.add.proxy_https_warning" = "%@ will be proxied and will be available via: %@://%@.%@. + +(!) IMPORTANT: This proxy may not work until you manually add `proxy_ssl_verify off;` to the nginx configuration file for this domain. It is recommended that you use an unsecured domain as the proxy subject."; + +// ADD SITE TO DOMAINS LIST + +"domain_list.add.link_folder" = "Link a Folder"; +"domain_list.add.domain_name_placeholder" = "Enter a domain name here"; +"domain_list.add.secure_after_creation" = "Secure %@.%@ after creation"; +"domain_list.add.secure_description" = "Securing a domain requires administrative privileges.\nYou may be prompted for your password or Touch ID."; +"domain_list.add.create_link" = "Create Link"; +"domain_list.add.cancel" = "Cancel"; +"domain_list.add.folder_available" = "This site will be available via the following URL: %@://%@.%@"; + +"domain_list.add.empty_fields" = "One or more fields are empty. Please fill all required fields."; +"domain_list.add.errors.empty" = "You must enter a domain name."; +"domain_list.add.errors.empty_proxy" = "You must enter what will be proxied."; +"domain_list.add.errors.subject_invalid" = "The subject you've entered is not valid.\nYou must include the protocol and port."; +"domain_list.add.errors.already_exists" = "A link with that name already exists."; + +// ADD SITE ERROR: FOLDER MISSING SINCE SELECTION + +"domain_list.alert.folder_missing.desc" = "The folder you chose no longer seems to exist. Do you want to cancel adding this folder? If you moved the folder, you could always put it back and try again."; +"domain_list.alert.folder_missing.title" = "Folder missing!"; +"domain_list.alert.folder_missing.cancel" = "Cancel Link"; +"domain_list.alert.folder_missing.return" = "OK"; + +"domain_list.add.modal_description" = "First, select which folder you would like to link."; + +// SITE LIST ACTIONS + +"domain_list.isolate" = "Switch PHP Version"; +"domain_list.site_isolation" = "Site Isolation"; +"domain_list.remove_isolation" = "Remove Isolation"; +"domain_list.always_use_php" = "Always use PHP %@"; +"domain_list.isolation_unavailable" = "Isolation Not Supported (in Valet 2)"; + +"domain_list.actions" = "Actions"; +"domain_list.unlink" = "Unlink Directory"; +"domain_list.secure" = "Secure Domain"; +"domain_list.unsecure" = "Unsecure Domain"; +"domain_list.open_in_finder" = "Open in Finder"; +"domain_list.open_in_browser" = "Open in Browser"; +"domain_list.open_in_terminal" = "Open in Terminal"; +"domain_list.detected_apps" = "Detected Applications"; +"domain_list.system_apps" = "System Applications"; +"domain_list.unproxy" = "Remove Proxy"; +"domain_list.use_in_terminal" = "Open PHP %@ in Terminal"; + +"domain_list.alerts_isolated_php_terminal.title" = "You can use PHP %@ in a specific terminal!"; +"domain_list.alerts_isolated_php_terminal.subtitle" = "Sadly, PHP Monitor cannot open a terminal for you (and type in the appropriate commands). You'll have to manually source the helper script in order to use this specific version of PHP. To do this, you can type the following in a terminal of choice: + +. pm%@ + +This will source the helper script as generated by PHP Monitor and enable the use of PHP %@ for that specific terminal. + +This has no effect on other terminals, only for the particular terminal session that you are using it on. (i.e. if you have multiple tabs in your terminal app, other tabs & windows are unaffected.)"; +"domain_list.alerts_isolated_php_terminal.desc" = "If this doesn't work, you may wish to check PHP Doctor via the First Aid menu here in PHP Monitor. More information about this feature can also be found on GitHub (on the wiki on PHP Monitor's repository). This alert is included to improve visibility of this feature."; + + +"domain_list.warning.spaces" = "Warning! This site has a space in its folder.\nThe site will not be reachable via the browser."; + +"domain_list.alert.invalid_folder_name" = "Invalid folder name"; +"domain_list.alert.invalid_folder_name_desc" = "This folder could not be resolved to a valid URL. This is usually because there’s a space in the folder name. Please rename the folder, reload the list of sites, and try again."; + +"domain_list.columns.tls" = "TLS"; +"domain_list.columns.domain" = "Domain"; +"domain_list.columns.php" = "PHP"; +"domain_list.columns.type" = "Type"; +"domain_list.columns.kind" = "Kind"; + +// DRIVERS + +"driver.not_detected" = "Other"; + +// PRESET + +"preset.extension" = "%i extension"; +"preset.extensions" = "%i extensions"; +"preset.preference" = "%i preference"; +"preset.preferences" = "%i preferences"; + +// EDITORS + +"editors.alert.try_again" = "Try Again"; +"editors.alert.cancel" = "Cancel"; + +// PREFERENCES + +"prefs.title" = "PHP Monitor"; +"prefs.subtitle" = "Preferences"; +"prefs.close" = "Close"; + +"prefs.global_shortcut" = "Global Shortcut:"; +"prefs.dynamic_icon" = "Dynamic Icon:"; +"prefs.dynamic_icon" = "Icon Type:"; +"prefs.info_density" = "Info Density:"; +"prefs.services" = "Services:"; +"prefs.switcher" = "Switcher:"; +"prefs.php_doctor" = "PHP Doctor:"; +"prefs.integrations" = "Integrations:"; +"prefs.updates" = "Updates:"; +"prefs.notifications" = "Notifications:"; +"prefs.warnings" = "Warnings:"; +"prefs.menu_contents" = "Features in Menu:"; +"prefs.startup" = "Startup:"; + +"prefs.auto_start_desc" = "Automatically starts PHP Monitor when you log into your Mac."; +"prefs.auto_start_title" = "Start PHP Monitor at login"; + +"prefs.icon_options.php" = "Display PHP Icon"; +"prefs.icon_options.elephant" = "Display Elephant Icon"; +"prefs.icon_options.none" = "Do Not Display Icon"; + +"prefs.icon_options_desc" = "This option decides which icon will be displayed next to the version number of the currently linked PHP version. If the Dynamic Icon option has been disabled, this will have no effect."; + +"prefs.auto_restart_services_title" = "Auto-restart PHP-FPM"; +"prefs.auto_restart_services_desc" = "When checked, will automatically restart PHP-FPM when you check or uncheck an extension. Slightly slower when enabled, but this applies the extension change immediately for all sites you're serving, no need to restart PHP-FPM manually."; + +"prefs.dynamic_icon_title" = "Display dynamic icon in menu bar"; +"prefs.dynamic_icon_desc" = "If you uncheck this box, the truck icon will always be visible. If checked, it will display the major version number of the currently linked PHP version."; + +"prefs.display_full_php_version" = "Display full PHP version everywhere"; +"prefs.display_full_php_version_desc" = "Display the full version instead of the major version displayed in the menu bar and the dropdown menu. (This may be undesirable on smaller displays, so this is disabled by default.)"; + +"prefs.auto_composer_update_title" = "Automatically update global dependencies"; +"prefs.auto_composer_update_desc" = "When checked, will automatically ask Composer to run `composer global update` whenever you switch between different PHP versions. You will be able to see what changes are being made, or should this fail."; + +"prefs.open_protocol_title" = "Allow third-party integrations"; +"prefs.open_protocol_desc" = "When checked, this will allow the interaction with third party utilities to work (e.g. Alfred, Raycast). If you disable this, PHP Monitor will still receive the commands, but will not act upon them."; + +"prefs.automatic_update_check_title" = "Automatically check for updates"; +"prefs.automatic_update_check_desc" = "When checked, PHP Monitor will automatically check if there is a newer version available, and notify you if that is the case."; + +"prefs.php_doctor_suggestions_title" = "Always show suggestions"; +"prefs.php_doctor_suggestions_desc" = "If you uncheck this item, no PHP Doctor suggestions will appear in PHP Monitor's menu. Keep in mind that PHP Doctor will not appear if there are no recommendations."; + +"prefs.shortcut_set" = "Set global shortcut"; +"prefs.shortcut_listening" = ""; +"prefs.shortcut_clear" = "Clear"; +"prefs.shortcut_desc" = "If a shortcut combination is set up, you can toggle PHP Monitor wherever you are by pressing the key combination you chose. (Cancel choosing a shortcut by pressing the spacebar.)"; + +"prefs.notify_about_version_change_desc" = "Displays a notification whenever the active PHP version changes."; +"prefs.notify_about_version_change" = "Notify about PHP version switch"; + +"prefs.notify_about_php_fpm_change_desc" = "Displays a notification whenever the active PHP-FPM process has restarted due to a configuration change."; +"prefs.notify_about_php_fpm_change" = "Notify about PHP-FPM restart"; + +"prefs.notify_about_services_desc" = "Displays a notification whenever any of the Homebrew services (installed and configured by Valet) have been restarted or stopped."; +"prefs.notify_about_services" = "Notify about services status"; + +"prefs.notify_about_presets_desc" = "Displays a notification whenever a preset has been successfully applied or reverted."; +"prefs.notify_about_presets" = "Notify about applied presets"; + +"prefs.notify_about_secure_status_desc" = "Displays a notification when a domain has been secured or unsecured."; +"prefs.notify_about_secure_status" = "Notify about secure/unsecure status"; + +"prefs.notify_about_composer_success_desc" = "Displays a notification when the global Composer configuration was successfully updated."; +"prefs.notify_about_composer_success" = "Notify about global composer update"; + +"prefs.warn_about_non_standard_tld_desc" = "If you use a non-standard TLD, you may not wish to get repeated notifications about this."; +"prefs.warn_about_non_standard_tld" = "Warn about non-standard TLD"; + +"prefs.display_global_version_switcher_desc" = "If disabled, you will not be able to change the globally linked PHP version via the main menu."; +"prefs.display_global_version_switcher" = "PHP Switcher"; + +"prefs.display_services_manager_desc" = "If disabled, you will not be able to see, start or stop individual services. (If any services are disabled, you will not be easily able to see that this is the case.)"; +"prefs.display_services_manager" = "Services Manager"; + +"prefs.display_valet_integration_desc" = "If disabled, you will not be able to locate the main Valet folder or open the list of domains."; +"prefs.display_valet_integration" = "Valet Integration"; + +"prefs.display_php_config_finder_desc" = "If disabled, you will not be able to easily locate your PHP configuration files and/or generate a phpinfo() dump."; +"prefs.display_php_config_finder" = "PHP Config Finder"; + +"prefs.display_composer_toolkit_desc" = "If disabled, you will not be able to invoke Composer via the main menu. The automatic Composer update after switching preference is unaffected by this change."; +"prefs.display_composer_toolkit" = "Composer Toolkit"; + +"prefs.display_limits_widget_desc" = "If disabled, you will not be able to see the limits widget (memory, POST, upload) in the main menu."; +"prefs.display_limits_widget" = "Limits Widget"; + +"prefs.display_extensions_desc" = "If disabled, you will not be able to easily toggle extensions via the main menu."; +"prefs.display_extensions" = "Extensions"; + +"prefs.display_presets_desc" = "If disabled, you will not be able to apply or revert PHP configuration presets."; +"prefs.display_presets" = "Presets"; + +"prefs.display_misc_desc" = "If disabled, you will not be able to access the First Aid & Services menu."; +"prefs.display_misc" = "First Aid & Services Menu"; + +// NOTIFICATIONS + +"notification.version_changed_title" = "PHP %@ now active"; +"notification.version_changed_desc" = "PHP Monitor has switched to PHP %@."; + +"notification.php_fpm_restarted" = "PHP-FPM automatically restarted"; +"notification.php_fpm_restarted_desc" = "You toggled an extension, so PHP-FPM was automatically restarted."; + +"notification.services_stopped" = "Valet services stopped"; +"notification.services_stopped_desc" = "All services have been successfully stopped."; + +"notification.services_restarted" = "Valet services restarted"; +"notification.services_restarted_desc" = "All services have been successfully restarted."; + +"notification.preset_applied_title" = "Preset applied"; +"notification.preset_applied_desc" = "The preset '%@' has been successfully applied."; + +"notification.preset_reverted_title" = "Preset reverted"; +"notification.preset_reverted_desc" = "The last preset you applied has been undone. Your previous configuration is now active."; + +"notification.phpmon_updated.title" = "PHP Monitor has been updated!"; +"notification.phpmon_updated.desc" = "You are now running PHP Monitor v%@. Thanks for staying up-to-date!"; +"notification.phpmon_updated_dev.desc" = "PHP Monitor v%@ (build %@) is now installed and active."; + +// Composer Update +"alert.composer_missing.title" = "Composer not found!"; +"alert.composer_missing.subtitle" = "PHP Monitor could not find Composer. Make sure that Composer is installed and try again."; +"alert.composer_missing.desc" = "PHP Monitor assumes that Composer is located in either: + +• `/usr/local/bin/composer` +• `/opt/homebrew/bin/composer` + +Make sure you have it installed in one of these locations, or make a symlink if you have Composer installed somewhere else."; + +"alert.composer_progress.title" = "Updating global dependencies..."; +"alert.composer_progress.info" = "You can see the progress in the terminal output below."; + +"alert.composer_failure.title" = "Something went wrong!"; +"alert.composer_failure.info" = "Your global Composer dependencies could not be updated. +You can find more information in the terminal output below. You’ll have to fix this +problem manually, using your own Terminal app (this just shows you the output)."; + +"alert.composer_success.title" = "Composer’s done updating!"; +"alert.composer_success.info" = "Your global Composer dependencies have been successfully updated."; + +// Composer Version + +"alert.composer_php_isolated.desc" = "This site has been isolated, which means that Valet serves PHP %@ for this site specifically. The global version is currently PHP %@."; +"alert.composer_php_requirement.title" = "'%@' requires PHP %@."; +"alert.composer_php_requirement.unable_to_determine" = "Unable to determine PHP requirement"; +"alert.composer_php_requirement.type.unknown" = "PHP Monitor was unable to determine which version of PHP is required for this domain. The constraint may be determined if you have a `composer.json` or a `.valetphprc` file in your project's directory."; +"alert.composer_php_requirement.type.require" = "This required PHP version was determined by checking the `require` field in the `composer.json` file when the site list was last refreshed."; +"alert.composer_php_requirement.type.platform" = "This required PHP version was determined by checking the `platform` field in the `composer.json` file when the site list was last refreshed."; +"alert.composer_php_requirement.type.valetphprc" = "This required PHP version was determined by checking the .valetphprc file in your project's directory."; +"alert.composer_php_requirement.type.valetrc" = "This required PHP version was determined by checking the .valetrc file in your project's directory."; +"alert.unable_to_determine_is_fine" = "If you have a simple project, there may not be a specified PHP version set as a requirement. In that case, you are free to ignore this warning."; +"alert.php_version_ideal" = "The currently active PHP version is ideal for this site."; +"alert.php_version_incorrect" = "The currently active PHP version does not match the required constraint set for this site."; +"alert.php_suggestions" = "There may be a different PHP version which is closer to the constraint."; + +// Suggest Fix My Valet +"alert.php_switch_failed.title" = "Switching to PHP %@ seems to have failed."; +"alert.php_switch_failed.info" = "PHP Monitor has detected that PHP %@ is not active after completing its switching procedure. You can try to run \"Fix My Valet\" and switch again after that. Do you want to try this fix?"; +"alert.php_switch_failed.desc" = "First off, you should try \"Fix My Valet\" if you haven't tried it yet. If PHP Monitor remains unable to change the active PHP version even after that, you may need to upgrade Valet and the Homebrew packages on your system. You can do this by running `brew update && brew upgrade` as well as upgrading Valet by running `composer global update && valet install`."; +"alert.php_switch_failed.confirm" = "Yes, run \"Fix My Valet\""; +"alert.php_switch_failed.cancel" = "Do Not Run"; + +// PHP Formula Missing +"alert.php_formula_missing.title" = "Oops! The `php` formula must be installed for Fix My Valet..."; +"alert.php_formula_missing.info" = "It seems that you do not have the `php` formula installed, which prevents PHP Monitor from running Fix My Valet. Please install it using `brew install php`, restart PHP Monitor and try again."; + +// Fix My Valet Started +"alert.fix_my_valet.title" = "Having issues? Fix My Valet is ready to commence!"; +"alert.fix_my_valet.info" = "This can take a while. Please be patient.\n\nWhen this is done, all other services will be halted and PHP %@ will be linked. You will be able to switch to your desired version of PHP once this operation has completed.\n\n(You'll get another alert once Fix My Valet is done.)"; +"alert.fix_my_valet.ok" = "Continue"; +"alert.fix_my_valet.cancel" = "Abort"; + +// Fix My Valet Done +"alert.fix_my_valet_done.title" = "Fix My Valet has completed its operations."; +"alert.fix_my_valet_done.subtitle" = "All appropriate services have been stopped and the correct ones restarted, and the latest version of PHP should now be active. You can now try switching to another version of PHP."; +"alert.fix_my_valet_done.stay" = "Stay on PHP %@"; +"alert.fix_my_valet_done.switch_back" = "Switch back to PHP %@"; +"alert.fix_my_valet_done.desc" = "If visiting sites still does not work, you may try running `valet install` again, this can fix a 502 issue (Bad Gateway).\n\nIf Valet is broken and you cannot run `valet install`, you may need to run `composer global update`. Please consult the FAQ on GitHub if you have further issues."; + +// Restore Homebrew Permissions +"alert.fix_homebrew_permissions.title" = "About \"Restore Homebrew Permissions\""; +"alert.fix_homebrew_permissions.subtitle" = "This feature was created so you can run `brew upgrade` or `brew cleanup` without permission issues.\n\n(You will be notified when this fix has been applied.)"; +"alert.fix_homebrew_permissions.desc" = "This will require administrative privileges, because PHP Monitor will restore your ownership of the files and folders that are currently owned by the `root` user, due to Valet services running as root."; +"alert.fix_homebrew_permissions.ok" = "Restore Permissions"; +"alert.fix_homebrew_permissions.cancel" = "Cancel"; + +"alert.fix_homebrew_permissions_done.title" = "All file and folder permissions for Valet's dependencies have been restored."; +"alert.fix_homebrew_permissions_done.subtitle" = "Because of this, all of Valet's services are currently no longer running. You can now interact with Homebrew, but your Valet sites will be unavailable as all services are disabled."; +"alert.fix_homebrew_permissions_done.desc" = "When you are done with Homebrew (after running `brew upgrade`, for example) you should restart PHP Monitor and select \"Restart Valet Services\" if you want Valet to work again. It is always recommended to restart PHP Monitor whenever you upgrade PHP versions with `brew upgrade`, or things might break."; + +// PHP FPM Broken +"alert.php_fpm_broken.title" = "Your PHP-FPM configuration is not pointing at the Valet socket!"; +"alert.php_fpm_broken.info" = "PHP Monitor has determined that there are issues with your PHP-FPM config. This will result in '502 Bad Gateway' responses if you visit websites linked via Valet."; +"alert.php_fpm_broken.description" = "If it's been a while, you can usually fix this by running `valet install`, which updates your PHP-FPM configuration.\n\nIf you are seeing this message and you are trying to run a pre-release version of PHP, it is possible that Valet does not support this pre-release version of PHP yet.\n\nYou may need to upgrade your installation of Laravel Valet to at least v3.1.11, after that you should run `valet install`. More information here: https://phpmon.app/prerelease-php"; + +// PHP Monitor Cannot Start +"alert.cannot_start.title" = "PHP Monitor cannot start due to a problem with your system configuration"; +"alert.cannot_start.subtitle" = "The issue you were just notified about is keeping PHP Monitor from functioning correctly."; +"alert.cannot_start.description" = "You might not need to quit PHP Monitor and restart it. If you have fixed the issue (or don't remember what the exact issue is) you can click on Retry, which will have PHP Monitor retry the startup checks."; +"alert.cannot_start.close" = "Quit"; +"alert.cannot_start.retry" = "Retry"; + +// PHP alias issue +"alert.php_alias_conflict.title" = "Homebrew `php` formula alias conflict detected"; +"alert.php_alias_conflict.info" = "PHP Monitor has detected conflicting `php` aliases in your Homebrew setup, both of which have been detected as installed.\n\nThis will likely result in failed linking when switching PHP versions, and will break PHP Monitor functionality.\n\nFor more information, please visit: https://github.com/nicoverbruggen/phpmon/issues/54"; + +"alert.min_valet_version.title" = "The installed version of Valet does not meet the minimum version requirement. PHP Monitor may not function as expected!"; +"alert.min_valet_version.info" = "You are currently running Valet %@. + +For optimal support of the latest versions of PHP and proper version switching, it is recommended that you update to version %@, which is the minimum requirement for this version of PHP Monitor. + +You can do this by running `composer global update` in your terminal. After that, run `valet install` again. For best results, restart PHP Monitor after that. Until this is resolved, PHP Monitor may not behave as expected."; + +// Preset text description +"alert.preset_description.switcher_version" = "Switches to PHP %@.\n\n"; +"alert.preset_description.applying_extensions" = "Applies the following extensions:\n"; +"alert.preset_description.applying_config" = "Applies the following configuration values:\n"; +"alert.preset_description.enabled" = "enabled"; +"alert.preset_description.disabled" = "disabled"; +"alert.preset_description.empty" = "(empty)"; + +// PHP version unavailable +"alert.php_switch_unavailable.title" = "Unsupported PHP version"; +"alert.php_switch_unavailable.subtitle" = "PHP Monitor can't switch to PHP %@, as it may not be installed or available. Applying this preset has been cancelled."; +"alert.php_switch_unavailable.info" = "Please make sure PHP %@ is installed and you can switch to it in the dropdown. Currently supported versions include PHP: %@."; +"alert.php_switch_unavailable.ok" = "OK"; + +// Service error +"alert.service_error.title" = "The service '%@' is reporting an error!"; +"alert.service_error.subtitle.error_log" = "This means that the service '%@' isn't running. This may prevent Valet from working correctly. This service has an associated log file that you might want to check, however."; +"alert.service_error.subtitle.no_error_log" = "This means that the service '%@' isn't running. This may prevent Valet from working correctly. Unfortunately, there is no associated log file for this service."; +"alert.service_error.extra" = "You may also wish to follow common troubleshooting steps. To learn more, press the '?' button in the services section in PHP Monitor."; + +"alert.service_error.button.show_log" = "View Error Log"; +"alert.service_error.button.close" = "Close"; + +// Composer issues +"alert.global_composer_platform_issues.title" = "Composer detected issues in your platform"; +"alert.global_composer_platform_issues.subtitle" = "The version of PHP you switched to is too old for the global Composer dependencies you have installed. These dependencies will need to be updated."; +"alert.global_composer_platform_issues.desc" = "The easiest way to prevent this issue from occurring in the future is to switch to the oldest PHP version you have installed and to run `composer global update` again. \n\nAlternatively, you can choose the 'Automatically update global dependencies' option in Preferences to avoid this issue as well.\n\nIf you keep seeing this message even after attempting to update those global dependencies, you may wish to look at your global composer configuration file, located in `~/.composer/composer.json`."; +"alert.global_composer_platform_issues.buttons.update" = "Update Global Dependencies"; +"alert.global_composer_platform_issues.buttons.quit" = "Quit PHP Monitor"; + +// Revert +"alert.revert_description.title" = "Revert Configuration?"; +"alert.revert_description.subtitle" = "PHP Monitor can revert to the previous configuration that was active. Here's what will be applied: \n\n%@"; +"alert.revert_description.ok" = "Revert"; +"alert.revert_description.cancel" = "Cancel"; + +// STARTUP + +/// 0. Architecture mismatch + +"alert.homebrew_missing.title" = "PHP Monitor cannot start!"; +"alert.homebrew_missing.subtitle" = "A working Homebrew binary could not be found in the usual location. Please restart the app after fixing this issue."; +"alert.homebrew_missing.info" = "You are running PHP Monitor with the following architecture: %@. As a result, a working Homebrew binary is expected in `%@`, but was not found. This is why PHP Monitor cannot work.\n\nIf you have not installed Homebrew yet, please do so. If you are on Apple Silicon, make sure your Homebrew and PHP Monitor use the same architecture, by enabling or disabling Rosetta where needed."; + +"alert.homebrew_missing.quit" = "Quit"; + +/// PHP binary not found +"startup.errors.php_binary.title" = "PHP is not correctly installed"; +"startup.errors.php_binary.subtitle" = "You must install PHP via Homebrew. The app will not work correctly until you resolve this issue."; +"startup.errors.php_binary.desc" = "Usually running `brew link php` in your Terminal will resolve this issue.\n\nTo diagnose what is wrong, you can try running `which php` in your Terminal, it should return `%@`."; + +/// PHP not found in /usr/local/opt or /opt/homebrew/opt +"startup.errors.php_opt.title" = "PHP is not correctly installed"; +"startup.errors.php_opt.subtitle" = "The PHP alias was not found in `%@`. The app will not work correctly until you resolve this issue."; +"startup.errors.php_opt.desc" = "If you already have the `php` formula installed, you may need to run `brew install php` in order for PHP Monitor to detect this installation."; + +/// PHP binary is broken +"startup.errors.dyld_library.title" = "PHP is installed, but appears to be broken"; +"startup.errors.dyld_library.subtitle" = "When PHP Monitor is attempting to run commands, it is failing to do so correctly. This is usually an indicator of a broken PHP installation."; +"startup.errors.dyld_library.desc" = "Running `brew reinstall php && brew link php` in your Terminal may resolve this issue, so please give that a try."; + +/// Valet is not installed +"startup.errors.valet_executable.title" = "Laravel Valet is not correctly installed"; +"startup.errors.valet_executable.subtitle" = "You must install Valet with Composer. The app will not work correctly until you resolve this issue."; +"startup.errors.valet_executable.desc" = "If you haven't installed Laravel Valet yet, please do so first. If you have it installed but are seeing this message anyway, then try running `which valet` in Terminal, it should return: `%@`."; + +/// Valet configuration file missing or broken +"startup.errors.valet_json_invalid.title" = "Laravel Valet configuration file invalid or missing"; +"startup.errors.valet_json_invalid.subtitle" = "PHP Monitor needs to be able to read the configuration file. It appears the file is malformed or missing. Please check that it exists and is formatted correctly."; +"startup.errors.valet_json_invalid.desc" = "You can find the file at `~/.config/valet/config.json`. If Laravel Valet cannot parse the configuration file, running any `valet` command will usually automatically fix the JSON file. Try running `valet --version` to automatically fix the file."; + +/// Valet version not readable +"startup.errors.valet_version_unknown.title" = "Your Valet version could not be read"; +"startup.errors.valet_version_unknown.subtitle" = "Parsing the output of `valet --version` failed. Make sure your Valet installation works and is up-to-date."; +"startup.errors.valet_version_unknown.desc" = "Try running `valet --version` in a terminal to find out what's going on."; + +"startup.errors.valet_not_installed.title" = "Your Valet configuration directory is missing"; +"startup.errors.valet_not_installed.subtitle" = "The required directory `~/.config/valet` is missing. This usually means that you forgot to run `valet install`."; +"startup.errors.valet_not_installed.desc" = "Assuming you already installed Valet via Composer, please run `valet install` to finish setting up Laravel Valet. + +If you are seeing this message but are confused why this folder has gone missing, then you may want to investigate why it is gone—it shouldn't just disappear and it means your Valet installation is broken."; + +// Valet version too new or old +"startup.errors.valet_version_not_supported.title" = "This version of Valet is not supported"; +"startup.errors.valet_version_not_supported.subtitle" = "You are running a version of Valet that is currently not supported. PHP Monitor currently works with Valet v2, v3 and v4. In order to avoid causing issues on your system, PHP Monitor cannot start."; +"startup.errors.valet_version_not_supported.desc" = "You must install a version of Valet that is compatible with PHP Monitor, or you may need to upgrade to a newer version of PHP Monitor which may include compatibility for this version of Valet (consult the latest release notes for more info)."; + +/// Brew & sudoers +"startup.errors.sudoers_brew.title" = "Brew has not been added to sudoers.d"; +"startup.errors.sudoers_brew.subtitle" = "You must run `sudo valet trust` to ensure Valet can start and stop services without having to use sudo every time. The app will not work correctly until you resolve this issue."; +"startup.errors.sudoers_brew.desc" = "If you keep seeing this error, it is possible that there is a permission issue where PHP Monitor cannot validate the file, which can usually be resolved by running: `sudo chmod +r /private/etc/sudoers.d/brew`"; + +/// Valet & sudoers +"startup.errors.sudoers_valet.title" = "Valet has not been added to sudoers.d"; +"startup.errors.sudoers_valet.subtitle" = "You must run `sudo valet trust` to ensure Valet can start and stop services without having to use sudo every time. The app will not work correctly until you resolve this issue. If you did this before, please run `sudo valet trust` again."; +"startup.errors.sudoers_valet.desc" = "If you keep seeing this error, it is possible that there is a permission issue where PHP Monitor cannot validate the file, which can usually be resolved by running: `sudo chmod +r /private/etc/sudoers.d/valet`"; + +/// Platform issue detected +"startup.errors.global_composer_platform_issues.title" = "PHP Monitor and Valet cannot work correctly: Composer is reporting an issue with your platform"; +"startup.errors.global_composer_platform_issues.subtitle" = "Please follow these recommended steps to avoid seeing this issue in the future:\n\n1. Run `composer global update`.\n2. Restart PHP Monitor. (It should work again.)\n3. Switch to the oldest PHP version you have installed.\n4. Run `composer global update` again."; +"startup.errors.global_composer_platform_issues.desc" = "You can go to Preferences and check the 'Automatically update global dependencies' option. This will update your global Composer dependencies whenever you change PHP versions, so this may not be ideal if you may not have constant access to the internet.\n\nTo find out exactly what's going wrong, try running `valet --version`. Valet is currently not functional with the installed dependencies. Usually this is caused by a version mismatch: i.e. installed dependencies for a newer version of PHP than the version that is currently active."; + +/// Cannot retrieve services +"startup.errors.services_json_error.title" = "Cannot determine services status"; +"startup.errors.services_json_error.subtitle" = "PHP Monitor usually queries `brew` using the following command to test if the services can be retrieved: `sudo brew services info nginx --json`.\n\nPHP Monitor could not interpret this response."; +"startup.errors.services_json_error.desc" = "This can happen if your Homebrew installation is out of date, in which case Homebrew won't return JSON yet. You can usually fix this by running `brew update` or `brew tap homebrew/services`. You can also try running `sudo brew services info nginx --json` in your terminal of choice."; + +/// Issue with `which` alias +"startup.errors.which_alias_issue.title" = "A configuration issue was detected"; +"startup.errors.which_alias_issue.subtitle" = "It appears that there's a file in `/usr/local/bin/which`. This is usually set up by NodeJS, but `node` isn't in the PATH in `/usr/local/bin`. To fix this, keep reading."; +"startup.errors.which_alias_issue.desc" = "You will need to symlink `node` into the `/usr/local/bin` directory to make sure PHP Monitor can start successfully. For more info, see: https://github.com/nicoverbruggen/phpmon/issues/174"; + +// Warning about a different PHP version linked than last time +"startup.version_mismatch.title" = "Your active PHP version has changed."; +"startup.version_mismatch.subtitle" = "Since PHP Monitor was last active, your linked PHP version has been changed to PHP %@. Would you like to switch back to PHP %@, or do you want to keep using the current version?"; +"startup.version_mismatch.desc" = "PHP Monitor keeps track of which version of PHP is globally linked. The global version may have been changed due to some other program or Homebrew may have linked a different formula after upgrades."; +"startup.version_mismatch.button_switch_back" = "Switch back to PHP %@"; +"startup.version_mismatch.button_stay" = "Keep using PHP %@"; + +// Warning about unsupported PHP versions +"startup.unsupported_versions_explanation.title" = "PHP installation(s) not supported by Valet detected!"; +"startup.unsupported_versions_explanation.subtitle" = "The following PHP versions are installed on your system but are not supported by this version of Valet. + +%@ + +Valet might break if you link these PHP versions so PHP Monitor won't let you switch to them."; +"startup.unsupported_versions_explanation.desc" = "If you need support for older versions of PHP, you may need to downgrade to an older versions of Valet. Otherwise, it might be a good idea to uninstall any outdated versions that are not in use. It can also be that this version of Valet is too old. This message will only be removed after restarting PHP Monitor."; + +// Sponsor encouragement +"startup.sponsor_encouragement.title" = "If PHP Monitor has been useful to you or your company, please consider leaving a tip."; +"startup.sponsor_encouragement.subtitle" = "To be 100% transparent: I plan to keep PHP Monitor open source and free. Your support makes this decision very easy.\n\n(You will only see this prompt once.)"; +"startup.sponsor_encouragement.desc" = "If you have already donated, then YOU are the reason why the app was able to get all these updates. In that case, this is a THANK YOU message to you. I appreciate the support."; + +"startup.sponsor_encouragement.accept" = "Sponsor Now"; +"startup.sponsor_encouragement.learn_more" = "Learn More"; +"startup.sponsor_encouragement.skip" = "No Thanks"; + +// ERROR MESSAGES (based on AlertableError) + +"alert.errors.homebrew_permissions.applescript_returned_nil.title" = "Restore Homebrew Permissions has been cancelled."; +"alert.errors.homebrew_permissions.applescript_returned_nil.description" = "The outcome of the script that is executed to adjust the permissions returned nil, which usually means that you did not grant administrative permissions to PHP Monitor.\n\nIf you clicked on Cancel during the authentication prompt, this is normal. If you did actually authenticate and you are still seeing this message, something probably went wrong."; + +"alert.key_service_not_running.title" = "Due to issues with the Homebrew services required, Valet is currently not working correctly"; +"alert.key_service_not_running.subtitle" = "For Valet to work properly, at least three key services need to be running correctly. + +PHP Monitor is reporting that this isn't the case. You can try to fix this by pressing the button with the 'X' in the menu below the affected service to (re)start the service that is currently inactive."; +"alert.key_service_not_running.desc" = "If clicking on the button below the service doesn't work (i.e. the spinner appears but remains an 'X' after some time), you may need to run Fix My Valet. You can do this via the menu First Aid > Fix My Valet. + +Alternatively, you can use `valet stop` and `valet start` in the terminal, which may also fix the issue (as an alternative to Fix My Valet). + +For further debugging, you may wish to check the GitHub issue tracker, where others may have had similar issues. As the developer, I attempt to make sure every question gets answered :)"; + +"alert.key_service_has_error.title" = "Due to issues with the Homebrew services required, Valet is currently not working correctly"; +"alert.key_service_has_error.subtitle" = "For Valet to work properly, at least three key services need to be running correctly. + +PHP Monitor is reporting that this isn't the case. It appears that one of the affected services is reporting an error state, so I recommend clicking on the 'E'. + +PHP Monitor will attempt to restart the service, and should it fail (which is likely) it will offer to locate the log file if it exists, which may contain additional information that might help you debug the issue."; +"alert.key_service_has_error.desc" = "Unfortunately, if a service reports an error, this is often due to an invalid configuration state, which may be difficult to debug. + +COMMON TROUBLESHOOTING TIPS + +• Try restarting the service and checking the log file (if it exists) first. You can have PHP Monitor do this by clicking on the 'E' button. + +• PHP: If you are seeing an error status, there may be an issue with PHP's configuration. Make sure the .ini files in the Homebrew installation are OK, and there are no socket conflicts. + +• nginx: If you are seeing an error status, a site is likely misconfigured (usually noted in the error log). You will likely want to check Valet's nginx folder. + +• dnsmasq: If you are seeing an error status, the dnsmasq configuration file is likely broken (usually located at ~/.config/valet/dnsmasq.d)."; + +// CHECK FOR UPDATES + +"updater.alerts.newer_version_available.title" = "PHP Monitor v%@ is now available!"; +"updater.alerts.newer_version_available.subtitle" = "Keeping PHP Monitor up-to-date is highly recommended, since newer versions usually fix bugs and include fixes to support the latest versions of Valet and PHP."; +"updater.installation_source.brew" = "The recommended method of installing updates to PHP Monitor is to simply press “Install Update”.\n\nSince you used Homebrew to install the app, you can also upgrade via the terminal by running `%@`, but this is not recommended.\n\n(Please note that installing via this built-in updater will remove PHP Monitor from Homebrew's Caskroom directory, to prevent duplicate updates from being downloaded and causing potential issues later.)"; +"updater.installation_source.direct" = "The recommended method of installing updates to PHP Monitor is to simply press “Install Update”."; +"updater.alerts.buttons.release_notes" = "View Release Notes"; + +"updater.alerts.is_latest_version.title" = "PHP Monitor is up-to-date!"; +"updater.alerts.is_latest_version.subtitle" = "The currently installed version (v%@) is up-to-date.\nThere is no newer version available."; + +"updater.alerts.cannot_check_for_update.title" = "PHP Monitor could not determine if a newer version is available."; +"updater.alerts.cannot_check_for_update.subtitle" = "You might not be connected to the internet, are blocking traffic or GitHub is down and won't allow you to check for updates. If you keep seeing this message, you may want to manually check the releases page."; +"updater.alerts.cannot_check_for_update.description" = "The currently installed version is: %@. You can go to the list of the latest releases (on GitHub) by clicking on the button on the left."; +"updater.alerts.buttons.releases_on_github" = "View Releases"; +"updater.alerts.buttons.install" = "Install Update"; +"updater.alerts.buttons.dismiss" = "Dismiss"; + +// WARNINGS ABOUT NON-DEFAULT TLD + +"alert.warnings.tld_issue.title" = "You are not using `.test` as the TLD for Valet."; +"alert.warnings.tld_issue.subtitle" = "Using a non-default TLD may not work correctly and is not officially supported."; +"alert.warnings.tld_issue.description" = "PHP Monitor will remain functional, but there might be issues: the app might not correctly show which domains have been secured. For optimal results, go to your Valet configuration file (config.json in the Valet directory) and change the TLD back to `test`."; +"alert.do_not_tell_again" = "Don't Tell Me Again"; + +// WARNINGS + +"warnings.title" = "PHP Doctor"; +"warnings.description" = "**PHP Doctor** will suggest improvements to your active system configuration."; +"warnings.disclaimer" = "You may choose to hide all recommendations from the PHP Monitor menu in Preferences, but it is recommended that you deal with all actionable items."; +"warnings.refresh.button" = "Scan Again"; +"warnings.refresh.button.description" = "Press this button once you've fixed an issue. This will cause PHP Monitor to re-evaluate your environment. If it's really fixed, the recommendation should disappear."; + +"warnings.helper_permissions.title" = "PHP Monitor’s helpers are currently unavailable."; +"warnings.helper_permissions.description" = "PHP Monitor comes with various helper scripts. Using these scripts allows you to easily invoke a specific version of PHP without switching the linked PHP version."; +"warnings.helper_permissions.unavailable" = "However, these helpers are potentially *unavailable* because PHP Monitor cannot currently create or update the required symlinks."; +"warnings.helper_permissions.symlink" = "If you do not wish to make `/usr/local/bin` writable, you can add PHP Monitor's helper directory to your `PATH` variable to make this warning go away. (Click on ”Learn More” to find out how to fix this issue.)"; + +"warnings.arm_compatibility.title" = "You are running PHP Monitor using Rosetta on Apple Silicon, which means your PHP environment is also running via Rosetta."; +"warnings.arm_compatibility.description" = "You appear to be running an ARM-compatible version of macOS, but you are currently running PHP Monitor using Rosetta. While this will work correctly, it is recommended that you use the native version of Homebrew."; + +"warnings.files_missing.title" = "Your PHP installation is missing important required configuration files."; +"warnings.files_missing.description" = "The following key configuration files should exist after installing PHP: + +• %@ + +When files like these are missing, you should switch to the PHP version associated with those files: that may resolve the problem. If this doesn't fix the issue, it's recommended to reinstall the appropriate PHP version(s) via Homebrew again, which should restore the configuration files that are missing. Missing configuration files can be the reason why you get '502 Bad Gateway' errors, even after running Fix My Valet (if you are using Valet)."; + +"warnings.none" = "There are no recommendations available for you right now. You're all good!"; + +// ONBOARDING + +"onboarding.title" = "Welcome Tour"; +"onboarding.welcome" = "Welcome to PHP Monitor!"; +"onboarding.explore" = "You now have access to PHP Monitor's entire suite of functionality. You can learn more about some of the features that PHP Monitor has to offer on this screen."; +"onboarding.explore.lite" = "You now have access to PHP Monitor's most important features. +Please note that some features (greyed out below) are currently unavailable because Laravel Valet is not active."; +"onboarding.tour.menu_bar.title" = "Power In Your Menu Bar"; +"onboarding.tour.menu_bar" = "PHP Monitor lives in your menu bar. From this menu, you can access most of PHP Monitor's key functionality, including switching the globally linked PHP version, locating config files, installing different PHP versions, and more."; +"onboarding.tour.faq_hint" = "**Questions?** I recommend that you check out the [README](https://github.com/nicoverbruggen/phpmon/blob/main/README.md) on GitHub: it contains a comprehensive FAQ with various tips and common questions and answers."; +"onboarding.tour.services.title" = "Manage Homebrew Services"; +"onboarding.tour.services" = "Once you click on the menu bar item, you can see at a glance based on the checkmarks or crosses if all of the Homebrew services are up and running. You can also click on a service to quickly toggle it."; +"onboarding.tour.domains.title" = "Manage Domains"; +"onboarding.tour.domains" = "By opening the Domains window via the menu bar item, you can view which domains are linked and parked, as well as active nginx proxies."; +"onboarding.tour.isolation.title" = "Isolate Domains"; +"onboarding.tour.isolation" = "If you have Valet 3 or newer installed, you can even use domain isolation by right-clicking on a given domain in the Domains window. This allows you to pick a specific version of PHP to use for that domain, and that domain only."; +"onboarding.tour.feature_unavailable" = "This feature is currently unavailable and requires Laravel Valet to be installed."; +"onboarding.tour.once" = "You will only see the Welcome Tour once. You can re-open the Welcome Tour later via the menu bar icon (available in the menu, under First Aid & Services)."; +"onboarding.tour.close" = "Close Tour"; diff --git a/phpmon/vi.lproj/Localizable.strings b/phpmon/vi.lproj/Localizable.strings new file mode 100644 index 00000000..4c4d4e26 --- /dev/null +++ b/phpmon/vi.lproj/Localizable.strings @@ -0,0 +1,768 @@ +// MENU ITEMS (MI) + +"mi_busy" = "PHP Monitor đang bận..."; +"mi_unsure" = "Chúng tôi không chắc phiên bản PHP bạn đang chạy."; +"mi_php_version" = "Phiên bản toàn cầu: PHP"; +"mi_php_switch" = "Chuyển sang PHP"; +"mi_php_unsupported" = "Một số phiên bản PHP đã được cài đặt không được hiển thị."; +"mi_php_broken_1" = "Ồ! Có vẻ như cài đặt PHP của bạn bị lỗi..."; +"mi_php_broken_2" = "Hãy thử chạy `php -v` trong cửa sổ terminal."; +"mi_php_broken_3" = "Bạn cũng có thể thử chuyển sang một phiên bản khác."; +"mi_php_broken_4" = "Chạy `brew reinstall php` (hoặc phiên bản tương đương) có thể giúp ích được cho bạn."; +"mi_no_php_linked" = "Không có phiên bản PHP nào được liên kết!"; +"mi_fix_php_link" = "Sửa tự động..."; +"mi_no_php_linked_explain" = "Cái này là gì?"; +"mi_php_version_manager" = "Quản lý Phiên bản PHP..."; + +"mi_diagnostics" = "Chẩn đoán"; +"mi_active_services" = "Dịch vụ hoạt động"; +"mi_restart_php_fpm" = "Khởi động lại Dịch vụ: php"; +"mi_restart_nginx" = "Khởi động lại Dịch vụ: nginx"; +"mi_restart_dnsmasq" = "Khởi động lại Dịch vụ: dnsmasq"; +"mi_manage_services" = "Quản lý Dịch vụ"; +"mi_restart_valet_services" = "Khởi động lại Dịch vụ Valet"; +"mi_stop_valet_services" = "Dừng Dịch vụ Valet"; + +"mi_fix_my_valet" = "Sửa Lỗi Valet..."; +"mi_fix_my_valet_tooltip" = "Có vấn đề gì đó với cài đặt Valet của bạn? Hãy thử sửa chữa tự động của PHP Monitor để bạn có thể tiếp tục hoạt động trong thời gian ngắn nhất!"; +"mi_fix_brew_permissions" = "Khôi phục Quyền Homebrew..."; +"mi_fix_brew_permissions_tooltip" = "Có vấn đề quyền hạn khi chạy `brew upgrade`? PHP Monitor sẽ giúp bạn khắc phục vấn đề này!"; + +"mi_php_refresh" = "Làm mới thông tin"; + +"mi_configuration" = "Cấu hình PHP"; +"mi_limits" = "Cấu hình Giới hạn"; +"mi_memory_limit" = "Memory Limit"; +"mi_post_max_size" = "Max POST"; +"mi_upload_max_filesize" = "Max Upload"; +"mi_manual_actions" = "Hành động Thủ công"; +"mi_services" = "Các Dịch Vụ"; +"mi_other" = "Trợ giúp và Dịch vụ"; +"mi_first_aid" = "Cứu hộ"; + +"mi_xdebug_mode" = "Quản lý Xdebug"; + +"mi_composer" = "Composer"; +"mi_valet_config" = "Địa chỉ Thư mục Valet (.config/valet)"; +"mi_php_config" = "Địa chỉ Tệp Cấu hình PHP (php.ini)"; +"mi_phpmon_config" = "Địa chỉ Thư mục PHP Monitor (.config/phpmon)"; +"mi_global_composer" = "Địa chỉ Tệp Composer Global (.composer)"; +"mi_phpinfo" = "Hiển thị Cấu hình Hiện tại (phpinfo)"; +"mi_update_global_composer" = "Cập nhật các dependencies của Composer Global..."; +"mi_detected_extensions" = "Các Tiện Ích phát hiện được"; +"mi_no_extensions_detected" = "Không phát hiện được tiện ích bổ sung nào."; + +"mi_php_doctor" = "PHP Doctor"; +"mi_fa_php_doctor" = "Mở PHP Doctor..."; +"mi_recommendations_count" = "%i vấn đề được phát hiện!"; +"mi_view_recommendations" = "Xem Đề xuất..."; + +"mi_valet" = "Laravel Valet"; +"mi_domain_list" = "Xem Danh sách Tên miền..."; + +"mi_preferences" = "Tùy chọn..."; +"mi_donate" = "Ủng hộ..."; +"mi_check_for_updates" = "Kiểm tra Cập nhật..."; +"mi_lite_mode" = "Giới thiệu về Chế độ Độc lập..."; +"mi_quit" = "Thoát PHP Monitor"; +"mi_about" = "Thông tin về PHP Monitor"; + +"mi_presets_title" = "Cấu hình Preset"; +"mi_apply_presets_title" = "Áp dụng Cấu hình Preset"; +"mi_revert_to_prev_config" = "Quay lại Cấu hình Trước..."; +"mi_profiles_loaded" = "%i hồ sơ được tải từ tệp cấu hình"; + +"mi_no_presets" = "Không có cấu hình preset nào khả dụng."; +"mi_set_up_presets" = "Tìm hiểu thêm về các preset..."; + +"mi_view_onboarding" = "Mở Hướng dẫn chào mừng..."; + +"mi_xdebug_available_modes" = "Các Chế độ Khả dụng"; +"mi_xdebug_actions" = "Hành động"; +"mi_xdebug_disable_all" = "Tắt Tất cả Chế độ"; + +// PHPMAN + +"phpman.busy.title" = "Đang kiểm tra cập nhật!"; +"phpman.busy.description.outdated" = "Kiểm tra xem có phiên bản PHP nào đã lỗi thời chưa..."; + +"phpman.version.broken" = "Phiên bản này có vẻ đã bị hỏng, bạn có thể thử sửa chữa."; +"phpman.version.has_update" = "Phiên bản %@ được cài đặt, Phiên bản %@ có sẵn."; +"phpman.version.installed" = "Phiên bản %@ hiện đã được cài đặt."; +"phpman.version.available_for_installation" = "Phiên bản này có thể được cài đặt."; +"phpman.buttons.uninstall" = "Gỡ cài đặt"; +"phpman.buttons.install" = "Cài đặt"; +"phpman.buttons.update" = "Cập nhật"; +"phpman.buttons.repair" = "Sửa chữa"; + +"phpman.title" = "Quản lý Phiên bản PHP"; +"phpman.description" = "**Quản lý Phiên bản PHP** cho phép bạn cài đặt, nâng cấp và xóa các phiên bản PHP khác nhau thông qua Homebrew mà không cần phải chạy các lệnh trong terminal."; +"phpman.disclaimer" = "Vui lòng lưu ý rằng việc cài đặt hoặc nâng cấp các phiên bản PHP có thể làm cho các gói Homebrew khác được nâng cấp. Hầu hết các bước cài đặt thường mất một khoảng thời gian, vì vậy vui lòng kiên nhẫn trong khi Homebrew thực hiện nhiệm vụ của nó."; +"phpman.refresh.button" = "Tìm kiếm Cập nhật"; +"phpman.refresh.button.description" = "Bạn có thể nhấn nút làm mới để kiểm tra xem có sẵn các cập nhật cho các phiên bản PHP đã cài đặt."; + +"phpman.has_updates.description" = "Một hoặc nhiều cập nhật có sẵn. (Vui lòng lưu ý rằng PHP Monitor sẽ luôn cài đặt hoặc cập nhật các phiên bản PHP theo lô, vì vậy bạn sẽ luôn nâng cấp tất cả các cài đặt cùng một lúc.)"; +"phpman.has_updates.button" = "Nâng cấp Tất cả"; + +"phpman.warnings.unsupported.title" = "Phiên bản Homebrew của bạn có thể gây ra vấn đề"; +"phpman.warnings.unsupported.desc" = "Không có chức năng nào bị vô hiệu hóa, nhưng một số lệnh có thể không hoạt động như mong đợi. Hiện tại, bạn đang chạy Homebrew %@. + +Hiện nay, Homebrew 4 là phiên bản được hỗ trợ duy nhất cho Quản lý Phiên bản PHP. Nếu bạn đang chạy phiên bản Homebrew mới hơn, bạn có thể muốn kiểm tra xem có bản PHP Monitor mới hơn có sẵn không."; + +"phpman.warnings.removal.title" = "Bạn có chắc chắn muốn gỡ cài đặt %@ không?"; +"phpman.warnings.removal.desc" = "Vui lòng lưu ý rằng các tệp cấu hình sẽ không bị xóa, vì vậy việc cài đặt lại sau này nếu cần sẽ dễ dàng hơn. + +Bạn có thể được yêu cầu nhập mật khẩu của mình trong quá trình gỡ cài đặt nếu quyền truy cập vào tệp không cho phép việc gỡ bỏ đơn giản."; +"phpman.warnings.removal.button" = "Gỡ cài đặt"; + +"phpman.failures.install.title" = "Cài đặt thất bại!"; +"phpman.failures.install.desc" = "Rất tiếc, hoạt động đã trả về mã lỗi vì một số lý do. Bạn có thể thấy rằng các công thức đã được cài đặt hoặc nâng cấp đúng cách. Rất tiếc là tôi không thể làm gì nhiều về điều này. Vui lòng kiểm tra những thông điệp cuối cùng từ Homebrew ở đây để biết thêm thông tin về điều gì đã xảy ra: + +%@"; + +"phpman.action_prevented_busy.title" = "PHP Monitor hiện đang bận."; +"phpman.action_prevented_busy.desc" = "PHP Monitor hiện đang thực hiện một số thao tác như chuyển đổi giữa các phiên bản PHP. Để đảm bảo hệ thống của bạn không bị hỏng, bạn cần đợi cho đến khi PHP Monitor sẵn sàng trước khi thử lại."; + +"phpman.uninstall_prevented.title" = "Bạn không thể gỡ cài đặt phiên bản PHP hiện tại thông qua PHP Monitor."; +"phpman.uninstall_prevented.desc" = "Để tránh gây ra vấn đề với PHP Monitor và những lần sập tiếp theo, không thể gỡ cài đặt phiên bản PHP đã liên kết hiện tại thông qua giao diện người dùng này. Bạn có thể chuyển đổi phiên bản và thử lại hoặc gỡ cài đặt phiên bản này bằng tay thông qua terminal.\n\nVui lòng lưu ý rằng PHP Monitor có thể gặp sự cố nếu bạn gỡ bỏ phiên bản PHP đang được liên kết hiện tại."; + +"phpman.failures.uninstall.title" = "Gỡ cài đặt thất bại!"; +"phpman.failures.uninstall.desc" = "Rất tiếc, quá trình gỡ cài đặt tự động đã thất bại. Bạn có thể thử chạy lệnh này bằng tay: `%@` và tìm hiểu xem điều gì đã gây ra vấn đề. Hãy nhớ khởi động lại PHP Monitor (hoặc nhấn nút làm mới) khi hoàn thành."; + +"phpman.unlinked.title" = "Hiện không có phiên bản của PHP được cài đặt trên hệ thống của bạn được liên kết."; +"phpman.unlinked.desc" = "Có thể bạn vẫn có một phiên bản PHP nào đó đang được cài đặt, nhưng hiện tại không có phiên bản nào của PHP được liên kết."; +"phpman.unlinked.detail" = "Mà không có bất kỳ phiên bản PHP nào được liên kết, tệp nhị phân `php` sẽ không thể truy cập trên hệ thống của bạn và bạn không thể chạy bất kỳ kịch bản PHP nào mà không được bao gồm rõ ràng trong PATH. Bạn có thể cho PHP Monitor tự động giải quyết vấn đề này (chọn Sửa Chữa Tự Động trong menu chính), hoặc tự sửa nó bằng cách chạy `brew link php --force`."; + +"phpman.operations.repairing" = "Đang sửa chữa cài đặt..."; +"phpman.operations.updating" = "Đang cài đặt các cập nhật..."; +"phpman.operations.installing" = "Đang cài đặt %@..."; + +"phpman.steps.fetching" = "Đang tải về..."; +"phpman.steps.downloading" = "Đang tải dữ liệu gói..."; +"phpman.steps.installing" = "Đang cài đặt một số dữ liệu gói..."; +"phpman.steps.pouring" = "Đang giải nén... Việc này có thể mất một chút thời gian..."; +"phpman.steps.summary" = "Một số gói đã hoàn thành cài đặt..."; + +"phpman.services.loading" = "Đang tải..."; +"phpman.services.not_installed" = "Một dịch vụ chính không được cài đặt."; +"phpman.services.error" = "Một dịch vụ chính đang báo cáo trạng thái lỗi."; +"phpman.services.inactive" = "Một dịch vụ chính không hoạt động."; +"phpman.services.all_ok" = "Tất cả các dịch vụ Valet đều OK."; + +// LITE MODE + +"lite_mode_explanation.title" = "Bạn hiện đang chạy PHP Monitor trong Chế độ độc lập."; +"lite_mode_explanation.subtitle" = "PHP Monitor có các tính năng bổ sung chỉ có sẵn nếu bạn là người dùng của Laravel Valet. Hiện tại, PHP Monitor không phát hiện được bất kỳ phiên bản Valet hoạt động trên hệ thống của bạn, do đó các tính năng đó không khả dụng."; +"lite_mode_explanation.description" = "Để biết thêm thông tin, tôi khuyên bạn nên kiểm tra tệp README (có thể truy cập trên GitHub) sẽ giải thích những bước cần thiết để cài đặt Valet và khiến PHP Monitor chạy đúng với nó đã được cài đặt. Bạn cần khởi động lại PHP Monitor sau khi cài đặt Laravel Valet trước khi nó rời khỏi Chế độ độc lập."; + +// GENERIC + +"generic.ok" = "OK"; +"generic.cancel" = "Hủy"; +"generic.retry" = "Thử lại"; +"generic.notice" = "Thông báo"; + +// PRESET LOADING + +"preset_help_title" = "Làm việc với Cấu hình Presets"; +"preset_help_info" = "Bạn có thể thiết lập các preset cấu hình trong tệp config.json, nằm trong ~/.config/phpmon/config.json. Những bộ preset này có thể áp dụng một số giá trị cấu hình cùng một lúc. Đây là tính năng mạnh mẽ, nhưng hiện tại cần phải thiết lập thủ công."; +"preset_help_desc" = "Sau khi khởi động lại PHP Monitor, tất cả các preset được tìm thấy trong tệp sẽ được tải. Nếu không có preset nào xuất hiện, thì có thể tệp không được phân tích đúng cách.\n\nBạn có thể bấm vào dấu hỏi trong cảnh báo này để truy cập vào câu hỏi thường gặp (FAQ) trên GitHub, nơi bạn có thể tìm thấy thông tin chi tiết hơn về tính năng này, bao gồm mẫu tệp."; + +// MENU ITEMS (if window is open) + +"mm_add_folder_as_link" = "Thêm Thư mục như Liên kết..."; +"mm_reload_domain_list" = "Tải lại Danh sách Tên miền"; +"mm_find_in_domain_list" = "Tìm kiếm trong Danh sách Tên miền"; + +// SITE LIST + +"domain_list.title" = "Tên miền"; +"domain_list.subtitle" = ""; + +"domain_list.no_domains" = "Bạn chưa thiết lập bất kỳ tên miền hoặc proxy nào."; +"domain_list.no_domains_for_search_query" = "Không có kết quả cho truy vấn tìm kiếm của bạn."; + +"domain_list.tooltips.isolated" = "Tên miền này được cô lập và sử dụng PHP %@ thay vì PHP được liên kết toàn cầu."; +"domain_list.tooltips.checkmark" = "Tên miền này đang được phục vụ với một phiên bản PHP tương thích với yêu cầu này (PHP %@). Bấm vào phiên bản PHP bên cạnh dấu check để tìm hiểu thêm thông tin về cách xác định yêu cầu này."; + +"domain_list.alerts_isolation_failed.title" = "Rất tiếc! Không áp dụng Cô lập trang web"; +"domain_list.alerts_isolation_failed.subtitle" = "Có điều gì đó đã không đúng khi cố gắng thay đổi trạng thái cô lập cho trang web này. Nếu đây là trang web mặc định của bạn nhưng lại không được liên kết, tôi khuyên bạn nên liên kết trang web thủ công trước khi thiết lập cô lập."; +"domain_list.alerts_isolation_failed.desc" = "Để tìm hiểu điều gì đã sai, bạn có thể thử chạy lệnh trong terminal của mình thủ công: %@"; + +"domain_list.alerts_status_not_changed.title" = "Rất tiếc! Trạng thái SSL Không Thay Đổi"; +"domain_list.alerts_status_not_changed.desc" = "Có điều gì đó đã không đúng. Hãy thử chạy lệnh trong terminal của bạn thủ công: %@"; + +"domain_list.alerts_status_changed.title" = "Trạng thái SSL Đã Thay Đổi"; +"domain_list.alerts_status_changed.desc" = "Tên miền '%@' bây giờ là %@."; +"domain_list.alerts_status_secure" = "an toàn"; +"domain_list.alerts_status_unsecure" = "không được bảo mật"; + +"domain_list.confirm_unlink" = "Bạn có chắc chắn muốn hủy liên kết '%@'?"; +"domain_list.confirm_unlink_desc" = "Không có tệp nào sẽ bị xóa. Bạn luôn có thể liên kết lại thư mục bằng cách nhấp vào nút + và chọn thư mục gốc."; +"site_link.close" = "Đóng"; +"site_link.switch_to_php" = "Chuyển sang PHP %@"; + +"domain_list.confirm_unproxy" = "Bạn có chắc chắn muốn xóa proxy '%@'?"; +"domain_list.confirm_unproxy_desc" = "Bạn luôn có thể tạo lại proxy bằng cách nhấp vào nút +."; + +// CHOOSE WHAT TO ADD + +"selection.title" = "Bạn muốn thiết lập loại tên miền nào?"; +"selection.description" = "Liên kết được sử dụng để phục vụ trực tiếp các dự án. Nếu bạn có một thư mục Laravel, Symfony, WordPress, vv với mã nguồn, bạn sẽ muốn tạo một liên kết và chọn thư mục chứa mã nguồn của bạn.\n\nNếu bạn cần một proxy, bạn có thể proxy ví dụ như một container đến một tên miền cụ thể. Điều này có thể hữu ích khi kết hợp với Docker, ví dụ."; +"selection.create_link" = "Tạo Liên kết"; +"selection.create_proxy" = "Tạo Proxy"; +"selection.cancel" = "Hủy"; + +// ADD PROXY TO DOMAINS LIST + +"domain_list.add.set_up_proxy" = "Thiết lập một Proxy"; +"domain_list.add.proxy_subject" = "Chủ đề Proxy (phải bao gồm giao thức và cổng)"; +"domain_list.add.domain_name" = "Tên miền"; +"domain_list.add.create_proxy" = "Tạo Proxy"; +"domain_list.add.proxy_available" = "%@ sẽ được proxy và sẽ có sẵn qua: %@://%@.%@"; +"domain_list.add.proxy_https_warning" = "%@ sẽ được proxy và sẽ có sẵn qua: %@://%@.%@. + +(!) QUAN TRỌNG: Proxy này có thể không hoạt động cho đến khi bạn thêm `proxy_ssl_verify off;` vào tệp cấu hình nginx cho tên miền này. Đề nghị bạn sử dụng tên miền không được bảo mật như chủ đề proxy."; + +// ADD SITE TO DOMAINS LIST + +"domain_list.add.link_folder" = "Liên kết một Thư mục"; +"domain_list.add.domain_name_placeholder" = "Nhập tên miền vào đây"; +"domain_list.add.secure_after_creation" = "Bảo mật %@.%@ sau khi tạo"; +"domain_list.add.secure_description" = "Bảo mật tên miền yêu cầu các quyền quản trị.\nBạn có thể được yêu cầu nhập mật khẩu hoặc sử dụng Touch ID."; +"domain_list.add.create_link" = "Tạo Liên kết"; +"domain_list.add.cancel" = "Hủy"; +"domain_list.add.folder_available" = "Trang web này sẽ có sẵn qua URL sau: %@://%@.%@"; + +"domain_list.add.empty_fields" = "Một hoặc nhiều trường bị trống. Vui lòng điền đầy đủ các trường bắt buộc."; +"domain_list.add.errors.empty" = "Bạn phải nhập tên miền."; +"domain_list.add.errors.empty_proxy" = "Bạn phải nhập cái gì sẽ được proxy."; +"domain_list.add.errors.subject_invalid" = "Chủ đề bạn đã nhập không hợp lệ.\nBạn phải bao gồm giao thức và cổng."; +"domain_list.add.errors.already_exists" = "Một liên kết với tên đó đã tồn tại."; + +// ADD SITE ERROR: FOLDER MISSING SINCE SELECTION + +"domain_list.alert.folder_missing.desc" = "Thư mục bạn đã chọn có vẻ không còn tồn tại nữa. Bạn có muốn hủy liên kết thư mục này không? Nếu bạn di chuyển thư mục, bạn có thể đặt lại và thử lại."; +"domain_list.alert.folder_missing.title" = "Thư mục đã mất!"; +"domain_list.alert.folder_missing.cancel" = "Hủy Liên kết"; +"domain_list.alert.folder_missing.return" = "OK"; + +"domain_list.add.modal_description" = "Trước tiên, chọn thư mục bạn muốn liên kết."; + +// SITE LIST ACTIONS + +"domain_list.isolate" = "Chuyển đổi phiên bản PHP"; +"domain_list.site_isolation" = "Cô lập Site"; +"domain_list.remove_isolation" = "Xóa Cô lập"; +"domain_list.always_use_php" = "Luôn sử dụng PHP %@"; +"domain_list.isolation_unavailable" = "Không hỗ trợ cô lập (trong Valet 2)"; + +"domain_list.actions" = "Hành động"; +"domain_list.unlink" = "Hủy liên kết Thư mục"; +"domain_list.secure" = "Bảo mật Tên miền"; +"domain_list.unsecure" = "Không bảo mật Tên miền"; +"domain_list.open_in_finder" = "Mở trong Finder"; +"domain_list.open_in_browser" = "Mở trong Trình duyệt"; +"domain_list.open_in_terminal" = "Mở trong Terminal"; +"domain_list.detected_apps" = "Ứng dụng phát hiện"; +"domain_list.system_apps" = "Các ứng dụng hệ thống"; +"domain_list.unproxy" = "Xóa Proxy"; +"domain_list.use_in_terminal" = "Mở PHP %@ trong Terminal"; + +"domain_list.alerts_isolated_php_terminal.title" = "Bạn có thể sử dụng PHP %@ trong một terminal cụ thể!"; +"domain_list.alerts_isolated_php_terminal.subtitle" = "Rất tiếc, PHP Monitor không thể mở một terminal cho bạn (và nhập các lệnh phù hợp). Bạn sẽ phải thủ công kết nối tệp trợ giúp để sử dụng phiên bản PHP cụ thể này. Để làm điều này, bạn có thể nhập vào một trong các lệnh sau đây trong một terminal của bạn: + +. pm%@ + +Điều này sẽ kết nối tệp trợ giúp được tạo ra bởi PHP Monitor và bật chế độ sử dụng PHP %@ cho phiên bản terminal cụ thể đó. + +Điều này không ảnh hưởng đến các terminal khác, chỉ áp dụng cho phiên bản terminal cụ thể mà bạn đang sử dụng nó. (ví dụ: nếu bạn có nhiều tab trong ứng dụng terminal của bạn, các tab & cửa sổ khác sẽ không bị ảnh hưởng.)"; +"domain_list.alerts_isolated_php_terminal.desc" = "Nếu điều này không hoạt động, bạn có thể muốn kiểm tra PHP Doctor thông qua menu Cứu Hộ ở đây trong PHP Monitor. Thêm thông tin về tính năng này cũng có thể được tìm thấy trên GitHub (trong wiki trên kho lưu trữ PHP Monitor). Cảnh báo này được bao gồm để cải thiện khả năng nhìn thấy tính năng này."; + +"domain_list.warning.spaces" = "Cảnh báo! Trang web này có dấu cách trong tên thư mục.\nTrang web sẽ không thể truy cập được qua trình duyệt."; + +"domain_list.alert.invalid_folder_name" = "Tên thư mục không hợp lệ"; +"domain_list.alert.invalid_folder_name_desc" = "Thư mục này không thể giải quyết thành URL hợp lệ. Thông thường điều này xảy ra khi có một dấu cách trong tên thư mục. Vui lòng đổi tên thư mục, tải lại danh sách các trang web và thử lại."; + +"domain_list.columns.tls" = "TLS"; +"domain_list.columns.domain" = "Tên miền"; +"domain_list.columns.php" = "PHP"; +"domain_list.columns.type" = "Kiểu"; +"domain_list.columns.kind" = "Loại"; + +// DRIVERS + +"driver.not_detected" = "Khác"; + +// PRESET + +"preset.extension" = "%i extension"; +"preset.extensions" = "%i extensions"; +"preset.preference" = "%i preference"; +"preset.preferences" = "%i preferences"; + +// EDITORS + +"editors.alert.try_again" = "Thử lại"; +"editors.alert.cancel" = "Hủy bỏ"; + +// PREFERENCES + +"prefs.title" = "PHP Monitor"; +"prefs.subtitle" = "Tùy chọn"; +"prefs.close" = "Đóng"; + +"prefs.global_shortcut" = "Phím tắt toàn cục:"; +"prefs.dynamic_icon" = "Biểu tượng động:"; +"prefs.dynamic_icon" = "Loại biểu tượng:"; +"prefs.info_density" = "Mật độ thông tin:"; +"prefs.services" = "Dịch vụ:"; +"prefs.switcher" = "Chuyển đổi:"; +"prefs.php_doctor" = "PHP Doctor:"; +"prefs.integrations" = "Tích hợp:"; +"prefs.updates" = "Cập nhật:"; +"prefs.notifications" = "Thông báo:"; +"prefs.warnings" = "Cảnh báo:"; +"prefs.menu_contents" = "Tính năng trong Menu:"; +"prefs.startup" = "Khởi động:"; + +"prefs.auto_start_desc" = "Tự động bắt đầu PHP Monitor khi bạn đăng nhập vào Mac."; +"prefs.auto_start_title" = "Bắt đầu PHP Monitor khi đăng nhập"; + +"prefs.icon_options.php" = "Hiển thị biểu tượng PHP"; +"prefs.icon_options.elephant" = "Hiển thị biểu tượng Elephant"; +"prefs.icon_options.none" = "Không hiển thị biểu tượng"; + +"prefs.icon_options_desc" = "Tùy chọn này quyết định biểu tượng nào sẽ được hiển thị bên cạnh số phiên bản PHP hiện tại đang liên kết. Nếu tùy chọn Biểu tượng động đã bị vô hiệu hóa, điều này sẽ không có tác dụng."; + +"prefs.auto_restart_services_title" = "Tự động khởi động lại PHP-FPM"; +"prefs.auto_restart_services_desc" = "Khi được chọn, sẽ tự động khởi động lại PHP-FPM khi bạn kiểm tra hoặc bỏ kiểm tra một phần mở rộng. Chậm hơn khi được bật, nhưng điều này áp dụng thay đổi phần mở rộng ngay lập tức cho tất cả các trang web đang phục vụ của bạn, không cần khởi động lại PHP-FPM thủ công."; + +"prefs.dynamic_icon_title" = "Hiển thị biểu tượng động trong thanh menu"; +"prefs.dynamic_icon_desc" = "Nếu bạn bỏ chọn hộp này, biểu tượng xe tải sẽ luôn hiển thị. Nếu được chọn, nó sẽ hiển thị số phiên bản chính của phiên bản PHP đang được liên kết."; + +"prefs.display_full_php_version" = "Hiển thị phiên bản PHP đầy đủ ở mọi nơi"; +"prefs.display_full_php_version_desc" = "Hiển thị phiên bản đầy đủ thay vì phiên bản chính được hiển thị trong thanh menu và menu thả xuống. (Điều này có thể không mong muốn trên màn hình hiển thị nhỏ, do đó mặc định là tắt.)"; + +"prefs.auto_composer_update_title" = "Tự động cập nhật các phụ thuộc toàn cục"; +"prefs.auto_composer_update_desc" = "Khi được chọn, sẽ tự động yêu cầu Composer chạy `composer global update` mỗi khi bạn chuyển sang các phiên bản PHP khác nhau. Bạn sẽ có thể xem những thay đổi đang được thực hiện hoặc nếu việc này thất bại."; + +"prefs.open_protocol_title" = "Cho phép tích hợp của bên thứ ba"; +"prefs.open_protocol_desc" = "Khi được chọn, điều này sẽ cho phép tương tác với các tiện ích bên thứ ba hoạt động (vd: Alfred, Raycast). Nếu bạn tắt tính năng này, PHP Monitor vẫn nhận được các lệnh, nhưng sẽ không thực hiện chúng."; + +"prefs.automatic_update_check_title" = "Tự động kiểm tra cập nhật"; +"prefs.automatic_update_check_desc" = "Khi được chọn, PHP Monitor sẽ tự động kiểm tra xem có phiên bản mới hơn có sẵn hay không, và thông báo cho bạn nếu có."; + +"prefs.php_doctor_suggestions_title" = "Luôn hiển thị gợi ý"; +"prefs.php_doctor_suggestions_desc" = "Nếu bạn bỏ chọn mục này, không có đề xuất của PHP Doctor sẽ xuất hiện trong menu của PHP Monitor. Hãy lưu ý rằng PHP Doctor sẽ không xuất hiện nếu không có khuyến nghị nào."; + +"prefs.shortcut_set" = "Đặt phím tắt toàn cầu"; +"prefs.shortcut_listening" = "<đang lắng nghe phím>"; +"prefs.shortcut_clear" = "Xóa"; +"prefs.shortcut_desc" = "Nếu đã thiết lập một tổ hợp phím tắt, bạn có thể bật/tắt PHP Monitor bất cứ khi nào bằng cách nhấn tổ hợp phím bạn đã chọn. (Hủy bỏ việc chọn phím tắt bằng cách nhấn phím khoảng trắng.)"; + +"prefs.notify_about_version_change_desc" = "Hiển thị thông báo mỗi khi phiên bản PHP đang hoạt động thay đổi."; +"prefs.notify_about_version_change" = "Thông báo về sự thay đổi phiên bản PHP"; + +"prefs.notify_about_php_fpm_change_desc" = "Hiển thị thông báo mỗi khi quá trình PHP-FPM đang hoạt động được khởi động lại do một thay đổi cấu hình nào đó."; +"prefs.notify_about_php_fpm_change" = "Thông báo về việc khởi động lại PHP-FPM"; + +"prefs.notify_about_services_desc" = "Hiển thị thông báo mỗi khi bất kỳ dịch vụ Homebrew nào (được cài đặt và cấu hình bởi Valet) đã được khởi động lại hoặc dừng lại."; +"prefs.notify_about_services" = "Thông báo về trạng thái dịch vụ"; + +"prefs.notify_about_presets_desc" = "Hiển thị thông báo mỗi khi một bộ preset đã được áp dụng hoặc hoàn tác thành công."; +"prefs.notify_about_presets" = "Thông báo về các preset được áp dụng"; + +"prefs.notify_about_secure_status_desc" = "Hiển thị thông báo khi một tên miền đã được bảo mật hoặc hủy bảo mật."; +"prefs.notify_about_secure_status" = "Thông báo về trạng thái bảo mật/hủy bảo mật"; + +"prefs.notify_about_composer_success_desc" = "Hiển thị thông báo khi cấu hình Composer toàn cầu được cập nhật thành công."; +"prefs.notify_about_composer_success" = "Thông báo về cập nhật composer toàn cầu"; + +"prefs.warn_about_non_standard_tld_desc" = "Nếu bạn sử dụng một TLD không chuẩn, bạn có thể không muốn nhận thông báo lặp đi lặp lại về điều này."; +"prefs.warn_about_non_standard_tld" = "Cảnh báo về TLD không chuẩn"; + +"prefs.display_global_version_switcher_desc" = "Nếu tắt tính năng này, bạnsẽ không thể thay đổi phiên bản PHP liên kết toàn cầu thông qua menu chính."; +"prefs.display_global_version_switcher" = "Trình chuyển đổi PHP"; + +"prefs.display_services_manager_desc" = "Nếu tắt tính năng này, bạn sẽ không thể xem, bắt đầu hoặc dừng các dịch vụ riêng lẻ. (Nếu bất kỳ dịch vụ nào bị tắt, bạn sẽ không dễ dàng nhận ra điều này.)"; +"prefs.display_services_manager" = "Trình quản lý dịch vụ"; + +"prefs.display_valet_integration_desc" = "Nếu tắt tính năng này, bạn sẽ không thể định vị thư mục Valet chính hoặc mở danh sách các miền."; +"prefs.display_valet_integration" = "Tích hợp Valet"; + +"prefs.display_php_config_finder_desc" = "Nếu tắt tính năng này, bạn sẽ không thể định vị các tệp cấu hình PHP của mình dễ dàng và/hoặc tạo bản sao phpinfo()."; +"prefs.display_php_config_finder" = "Trình tìm kiếm cấu hình PHP"; + +"prefs.display_composer_toolkit_desc" = "Nếu tắt tính năng này, bạn sẽ không thể gọi Composer thông qua menu chính. Cập nhật Composer tự động sau khi chuyển đổi tùy chọn không bị ảnh hưởng bởi thay đổi này."; +"prefs.display_composer_toolkit" = "Composer Toolkit"; + +"prefs.display_limits_widget_desc" = "Nếu tắt tính năng này, bạn sẽ không thể xem tiện ích giới hạn (bộ nhớ, POST, tải lên) trong menu chính."; +"prefs.display_limits_widget" = "Tiện ích giới hạn"; + +"prefs.display_extensions_desc" = "Nếu tắt tính năng này, bạn sẽ không thể dễ dàng chuyển đổi các phần mở rộng thông qua menu chính."; +"prefs.display_extensions" = "Phần mở rộng"; + +"prefs.display_presets_desc" = "Nếu tắt tính năng này, bạn sẽ không thể áp dụng hoặc hoàn tác các bộ cấu hình PHP."; +"prefs.display_presets" = "Các preset"; + +"prefs.display_misc_desc" = "Nếu tắt tính năng này, bạn sẽ không thể truy cập menu Sửa chữa và Dịch vụ."; +"prefs.display_misc" = "Menu Sửa chữa và Dịch vụ đầu tiên"; + +// NOTIFICATIONS + +"notification.version_changed_title" = "PHP %@ hiện đã được kích hoạt"; +"notification.version_changed_desc" = "PHP Monitor đã chuyển sang PHP %@."; + +"notification.php_fpm_restarted" = "PHP-FPM đã được khởi động lại tự động"; +"notification.php_fpm_restarted_desc" = "Bạn đã bật/tắt một phần mở rộng, vì vậy PHP-FPM đã được khởi động lại tự động."; + +"notification.services_stopped" = "Dịch vụ Valet đã dừng lại"; +"notification.services_stopped_desc" = "Tất cả các dịch vụ đã được dừng thành công."; + +"notification.services_restarted" = "Dịch vụ Valet đã khởi động lại"; +"notification.services_restarted_desc" = "Tất cả các dịch vụ đã được khởi động lại thành công."; + +"notification.preset_applied_title" = "Cài đặt trước được áp dụng"; +"notification.preset_applied_desc" = "Cài đặt trước '%@' đã được áp dụng thành công."; + +"notification.preset_reverted_title" = "Cài đặt trước đã được khôi phục"; +"notification.preset_reverted_desc" = "Cài đặt trước bạn đã áp dụng gần đây đã được hoàn tác. Cấu hình trước của bạn hiện đang được sử dụng."; + +"notification.phpmon_updated.title" = "PHP Monitor đã được cập nhật!"; +"notification.phpmon_updated.desc" = "Bạn đang chạy PHP Monitor v%@. Cảm ơn bạn đã cập nhật mới nhất!"; +"notification.phpmon_updated_dev.desc" = "Phiên bản PHP Monitor v%@ (build %@) đã được cài đặt và kích hoạt."; + +// Composer Update + +"alert.composer_missing.title" = "Không tìm thấy Composer!"; +"alert.composer_missing.subtitle" = "PHP Monitor không tìm thấy Composer. Hãy chắc chắn rằng Composer đã được cài đặt và thử lại."; +"alert.composer_missing.desc" = "PHP Monitor cho rằng Composer sẽ nằm ở một trong những vị trí sau: + +• `/usr/local/bin/composer` +• `/opt/homebrew/bin/composer` + +Hãy chắc chắn rằng bạn đã cài đặt nó ở một trong các vị trí này, hoặc tạo liên kết tượng trưng nếu bạn đã cài đặt Composer ở một vị trí khác."; + +"alert.composer_progress.title" = "Đang cập nhật các gói phụ thuộc toàn cầu..."; +"alert.composer_progress.info" = "Bạn có thể xem tiến trình trong đầu ra terminal bên dưới."; + +"alert.composer_failure.title" = "Đã có lỗi xảy ra!"; +"alert.composer_failure.info" = "Không thể cập nhật các phụ thuộc Composer toàn cầu của bạn.\nBạn có thể tìm thấy thêm thông tin trong đầu ra terminal bên dưới. Bạn sẽ phải khắc phục vấn đề này thủ công, sử dụng ứng dụng Terminal riêng của mình (điều này chỉ hiển thị cho bạn đầu ra)."; + +"alert.composer_success.title" = "Cập nhật Composer hoàn tất!"; +"alert.composer_success.info" = "Các phụ thuộc Composer toàn cầu của bạn đã được cập nhật thành công."; + + +// Composer Version + +"alert.composer_php_isolated.desc" = "Trang web này đã được cô lập, điều này có nghĩa là Valet sử dụng PHP %@ cho trang web này cụ thể. Phiên bản toàn cầu hiện tại là PHP %@."; +"alert.composer_php_requirement.title" = "'%@' yêu cầu PHP %@."; +"alert.composer_php_requirement.unable_to_determine" = "Không thể xác định yêu cầu PHP"; +"alert.composer_php_requirement.type.unknown" = "PHP Monitor không thể xác định phiên bản PHP nào được yêu cầu cho tên miền này. Ràng buộc có thể được xác định nếu bạn có tệp `composer.json` hoặc `.valetphprc` trong thư mục dự án của mình."; +"alert.composer_php_requirement.type.require" = "Phiên bản PHP được yêu cầu này được xác định bằng cách kiểm tra trường `require` trong tệp `composer.json` khi danh sách trang web được làm mới lần cuối."; +"alert.composer_php_requirement.type.platform" = "Phiên bản PHP được yêu cầu này được xác định bằng cách kiểm tra trường `platform` trong tệp `composer.json` khi danh sách trang web được làm mới lần cuối."; +"alert.composer_php_requirement.type.valetphprc" = "Phiên bản PHP được yêu cầu này được xác định bằng cách kiểm tra tệp .valetphprc trong thư mục dự án của bạn."; +"alert.composer_php_requirement.type.valetrc" = "Phiên bản PHP được yêu cầu này được xác định bằng cách kiểm tra tệp .valetrc trong thư mục dự án của bạn."; +"alert.unable_to_determine_is_fine" = "Nếu bạn có một dự án đơn giản, có thể không có phiên bản PHP được xác định là yêu cầu. Trong trường hợp đó, bạn có thể bỏ qua cảnh báo này."; +"alert.php_version_ideal" = "Phiên bản PHP hiện tại hoàn hảo cho trang web này."; +"alert.php_version_incorrect" = "Phiên bản PHP hiện tại không phù hợp với ràng buộc yêu cầu được đặt cho trang web này."; +"alert.php_suggestions" = "Có thể có một phiên bản PHP khác gần giống với ràng buộc."; + +// Suggest Sửa Lỗi Valet +"alert.php_switch_failed.title" = "Chuyển sang PHP %@ có vẻ đã thất bại."; +"alert.php_switch_failed.info" = "PHP Monitor đã phát hiện rằng PHP %@ không hoạt động sau khi hoàn thành quy trình chuyển đổi của nó. Bạn có thể thử chạy \"Sửa Lỗi Valet\" và chuyển đổi lại sau đó. Bạn có muốn thử cách này?"; +"alert.php_switch_failed.desc" = "Trước tiên, bạn nên thử \"Sửa Lỗi Valet\" nếu bạn chưa thử. Nếu PHP Monitor vẫn không thể thay đổi phiên bản PHP hoạt động ngay cả sau đó, bạn có thể cần nâng cấp Valet và các gói Homebrew trên hệ thống của mình. Bạn có thể làm điều này bằng cách chạy `brew update && brew upgrade` cũng như nâng cấp Valet bằng cách chạy `composer global update && valet install`."; +"alert.php_switch_failed.confirm" = "Có, chạy \"Sửa Lỗi Valet\""; +"alert.php_switch_failed.cancel" = "Không Chạy"; + +// PHP Formula Missing +"alert.php_formula_missing.title" = "Oops! `php` formula phải được cài đặt để sửa lỗi cho Valet..."; +"alert.php_formula_missing.info" = "Có vẻ như bạn chưa cài đặt `php` formula, điều này ngăn PHP Monitor khỏi việc chạy Sửa Lỗi Valet. Vui lòng cài đặt nó bằng cách sử dụng `brew install php`, khởi động lại PHP Monitor và thử lại."; + +// Sửa Lỗi Valet Started +"alert.fix_my_valet.title" = "Gặp sự cố? Sửa Lỗi Valet đã sẵn sàng để tiến hành!"; +"alert.fix_my_valet.info" = "Điều này có thể mất một chút thời gian. Vui lòng kiên nhẫn.\n\nKhi việc này hoàn tất, tất cả các dịch vụ khác sẽ bị dừng lại và PHP %@ sẽ được liên kết. Bạn có thể chuyển sang phiên bản PHP mong muốn của mình sau khi hoạt động này hoàn tất.\n\n(Bạn sẽ nhận được thông báo khác sau khi Sửa Lỗi Valet hoàn tất.)"; +"alert.fix_my_valet.ok" = "Tiếp tục"; +"alert.fix_my_valet.cancel" = "Hủy bỏ"; + +// Sửa Lỗi Valet Done +"alert.fix_my_valet_done.title" = "Sửa Lỗi Valet đã hoàn tất các hoạt động của mình."; +"alert.fix_my_valet_done.subtitle" = "Tất cả các dịch vụ thích hợp đã bị dừng lại và khởi động lại đúng, phiên bản PHP mới nhất hiện đã được kích hoạt. Bây giờ bạn có thể thử chuyển sang một phiên bản PHP khác."; +"alert.fix_my_valet_done.stay" = "Ở lại trên PHP %@"; +"alert.fix_my_valet_done.switch_back" = "Chuyển trở lại PHP %@"; +"alert.fix_my_valet_done.desc" = "Nếu việc truy cập trang web vẫn không hoạt động, bạn có thể thử chạy `valet install` lại, điều này có thể sửa lỗi 502 (Bad Gateway).\n\nNếu Valet bị hỏng và bạn không thể chạy `valet install`, bạn có thể cần chạy `composer global update`. Vui lòng xem câu hỏi thường gặp trên GitHub nếu bạn gặp vấn đề khác."; + +// Restore Homebrew Permissions +"alert.fix_homebrew_permissions.title" = "Về tính năng \"Phục hồi Quyền Homebrew\""; +"alert.fix_homebrew_permissions.subtitle" = "Tính năng này được tạo ra để bạn có thể chạy `brew upgrade` hoặc `brew cleanup` mà không gặp vấn đề quyền hạn.\n\n(Bạn sẽ được thông báo khi việc sửa lỗi này được áp dụng.)"; +"alert.fix_homebrew_permissions.desc" = "Điều này sẽ yêu cầu các đặc quyền quản trị, bởi vì PHP Monitor sẽ khôi phục sở hữu của bạn đối với các tệp và thư mục hiện đang được sở hữu bởi người dùng `root`, do các dịch vụ Valet đang chạy dưới dạng root."; +"alert.fix_homebrew_permissions.ok" = "Phục Hồi Quyền"; +"alert.fix_homebrew_permissions.cancel" = "Hủy bỏ"; + +"alert.fix_homebrew_permissions_done.title" = "Tất cả quyền tệp và thư mục cho các phụ thuộc của Valet đã được khôi phục."; +"alert.fix_homebrew_permissions_done.subtitle" = "Do điều này, tất cả các dịch vụ của Valet hiện đang không hoạt động. Bây giờ bạn có thể tương tác với Homebrew, nhưng các trang web của Valet sẽ không khả dụng vì tất cả các dịch vụ đều bị vô hiệu hóa."; +"alert.fix_homebrew_permissions_done.desc" = "Khi bạn hoàn tất với Homebrew (sau khi chạy `brew upgrade`, ví dụ), bạn nên khởi động lại PHP Monitor và chọn \"Khởi động lại Dịch vụ Valet\" nếu bạn muốn Valet hoạt động lại. Luôn luôn khuyến khích khởi động lại PHP Monitor mỗi khi nâng cấp phiên bản PHP với `brew upgrade`, hoặc các vấn đề có thể xảy ra."; + +// PHP FPM Broken +"alert.php_fpm_broken.title" = "Cấu hình PHP-FPM của bạn không trỏ đến socket của Valet!"; +"alert.php_fpm_broken.info" = "PHP Monitor đã xác định rằng có vấn đề với cấu hình PHP-FPM của bạn. Điều này sẽ dẫn đến các phản hồi '502 Bad Gateway' nếu bạn truy cập các trang web được liên kết thông qua Valet."; +"alert.php_fpm_broken.description" = "Nếu đã một thời gian, bạn thường có thể sửa lỗi này bằng cách chạy `valet install`, điều này sẽ cập nhật cấu hình PHP-FPM của bạn.\n\nNếu bạn nhìn thấy thông báo này và bạn đang cố chạy phiên bản PHP tiền phát hành, có thể là Valet chưa hỗ trợ phiên bản PHP tiền phát hành này.\n\nBạn có thể cần nâng cấp phiên bản Laravel Valet của mình lên ít nhất là v3.1.11, sau đó bạn nên chạy `valet install`. Thêm thông tin tại đây: https://phpmon.app/prerelease-php"; + +// PHP Monitor Cannot Start +"alert.cannot_start.title" = "PHP Monitor không thể khởi động do vấn đề với cấu hình hệ thống của bạn"; +"alert.cannot_start.subtitle" = "Vấn đề mà bạn vừa được thông báo đang ngăn PHP Monitor hoạt động chính xác."; +"alert.cannot_start.description" = "Bạn có thể không cần thoát PHP Monitor và khởi động lại. Nếu bạn đã sửa chữa vấn đề (hoặc không nhớ chính xác là vấn đề gì), bạn có thể nhấp vào Thử lại, điều này sẽ khiến PHP Monitor thử lại kiểm tra khởi động."; +"alert.cannot_start.close" = "Thoát"; +"alert.cannot_start.retry" = "Thử lại"; + +// PHP alias issue +"alert.php_alias_conflict.title" = "Phát hiện xung đột bí danh `php` của công thức Homebrew"; +"alert.php_alias_conflict.info" = "PHP Monitor đã phát hiện ra các bí danh `php` xung đột trong cài đặt Homebrew của bạn, cả hai đều được xác định là đã được cài đặt.\n\nĐiều này sẽ dẫn đến việc liên kết không thành công khi chuyển đổi phiên bản PHP và sẽ làm hỏng chức năng của PHP Monitor.\n\nĐể biết thêm thông tin, vui lòng truy cập: https://github.com/nicoverbruggen/phpmon/issues/54"; + +"alert.min_valet_version.title" = "Phiên bản Valet đã cài đặt không đáp ứng yêu cầu phiên bản tối thiểu. PHP Monitor có thể không hoạt động như mong đợi!"; +"alert.min_valet_version.info" = "Bạn đang chạy Valet %@. + +Để hỗ trợ tốt nhất cho các phiên bản PHP mới nhất và chuyển đổi phiên bản đúng cách, đề nghị bạn cập nhật lên phiên bản %@, đây là yêu cầu tối thiểu cho phiên bản PHP Monitor này. + +Bạn có thể làm điều này bằng cách chạy `composer global update` trong terminal của bạn. Sau đó, chạy lại `valet install`. Để có kết quả tốt nhất, khởi động lại PHP Monitor sau đó. Cho đến khi điều này được giải quyết, PHP Monitor có thể không hoạt động như mong đợi."; + +// Preset text description +"alert.preset_description.switcher_version" = "Chuyển sang PHP %@.\n\n"; +"alert.preset_description.applying_extensions" = "Áp dụng các phần mở rộng sau đây:\n"; +"alert.preset_description.applying_config" = "Áp dụng các giá trị cấu hình sau đây:\n"; +"alert.preset_description.enabled" = "đã kích hoạt"; +"alert.preset_description.disabled" = "đã tắt"; +"alert.preset_description.empty" = "(trống)"; + +// PHP version unavailable +"alert.php_switch_unavailable.title" = "Phiên bản PHP không được hỗ trợ"; +"alert.php_switch_unavailable.subtitle" = "PHP Monitor không thể chuyển sang PHP %@, vì nó có thể chưa được cài đặt hoặc không khả dụng. Việc áp dụng thiết lập này đã bị hủy."; +"alert.php_switch_unavailable.info" = "Vui lòng đảm bảo rằng PHP %@ đã được cài đặt và bạn có thể chuyển đổi sang nó trong menu thả xuống. Các phiên bản được hỗ trợ hiện tại bao gồm PHP: %@."; +"alert.php_switch_unavailable.ok" = "OK"; + +// Service error +"alert.service_error.title" = "Dịch vụ '%@' báo cáo một lỗi!"; +"alert.service_error.subtitle.error_log" = "Điều này có nghĩa là dịch vụ '%@' không chạy. Điều này có thể làm cho Valet không hoạt động chính xác. Dịch vụ này có một tệp nhật ký liên quan mà bạn có thể muốn kiểm tra."; +"alert.service_error.subtitle.no_error_log" = "Điều này có nghĩa là dịch vụ '%@' không chạy. Điều này có thể làm cho Valet không hoạt động chính xác. Thật không may, không có tập tin nhật ký liên quan cho dịch vụ này."; +"alert.service_error.extra" = "Bạn cũng có thể muốn làm theo các bước sửa lỗi phổ biến. Để biết thêm thông tin, nhấn vào nút '?' trong phần dịch vụ trong PHP Monitor."; + +"alert.service_error.button.show_log" = "Xem Nhật ký Lỗi"; +"alert.service_error.button.close" = "Đóng"; + +// Composer issues +"alert.global_composer_platform_issues.title" = "Composer phát hiện vấn đề trên nền tảng của bạn"; +"alert.global_composer_platform_issues.subtitle" = "Phiên bản PHP mà bạn đã chuyển đổi sang quá cũ để có thể sử dụng các phụ thuộc Composer toàn cầu bạn đã cài đặt. Những phụ thuộc này sẽ cần được cập nhật."; +"alert.global_composer_platform_issues.desc" = "Cách dễ nhất để tránh vấn đề này xảy ra trong tương lai là chuyển đổi sang phiên bản PHP cũ nhất mà bạn đã cài đặt và chạy lại `composer global update`. \n\nHoặc, bạn có thể chọn tùy chọn 'Tự động cập nhật các phụ thuộc toàn cầu' trong Tùy chọn để tránh vấn đề này.\n\nNếu bạn vẫn nhìn thấy thông báo này ngay cả sau khi cố gắng cập nhật các phụ thuộc toàn cầu đó, bạn có thể muốn xem file cấu hình composer toàn cầu của bạn, nằm tại `~/.composer/composer.json`."; +"alert.global_composer_platform_issues.buttons.update" = "Cập nhật Phụ thuộc Toàn cầu"; +"alert.global_composer_platform_issues.buttons.quit" = "Thoát PHP Monitor"; + +// Revert +"alert.revert_description.title" = "Phục hồi Cấu hình?"; +"alert.revert_description.subtitle" = "PHP Monitor có thể phục hồi lại cấu hình trước đó đã hoạt động. Đây là những gì sẽ được áp dụng: \n\n%@"; +"alert.revert_description.ok" = "Phục hồi"; +"alert.revert_description.cancel" = "Hủy bỏ"; + +// STARTUP + +/// 0. Architecture mismatch + +"alert.homebrew_missing.title" = "PHP Monitor không thể khởi động!"; +"alert.homebrew_missing.subtitle" = "Không tìm thấy binary Homebrew hoạt động ở vị trí thông thường. Vui lòng khởi động lại ứng dụng sau khi khắc phục vấn đề này."; +"alert.homebrew_missing.info" = "Bạn đang chạy PHP Monitor với kiến trúc sau: %@. Do đó, một binary Homebrew hoạt động được mong đợi sẽ nằm ở `%@`, nhưng không được tìm thấy. Đây là lý do tại sao PHP Monitor không thể hoạt động.\n\nNếu bạn chưa cài đặt Homebrew, vui lòng cài đặt. Nếu bạn đang sử dụng Apple Silicon, hãy đảm bảo Homebrew và PHP Monitor của bạn sử dụng cùng kiến trúc, bằng cách kích hoạt hoặc tắt Rosetta nơi cần thiết."; + +"alert.homebrew_missing.quit" = "Thoát"; + +/// PHP binary not found +"startup.errors.php_binary.title" = "PHP chưa được cài đặt đúng cách"; +"startup.errors.php_binary.subtitle" = "Bạn phải cài đặt PHP qua Homebrew. Ứng dụng sẽ không hoạt động chính xác cho đến khi bạn giải quyết vấn đề này."; +"startup.errors.php_binary.desc" = "Thường thì chạy `brew link php` trong Terminal của bạn sẽ giải quyết vấn đề này.\n\nĐể chẩn đoán lỗi, bạn có thể thử chạy `which php` trong Terminal của bạn, nó sẽ trả về `%@`."; + +/// PHP not found in /usr/local/opt or /opt/homebrew/opt +"startup.errors.php_opt.title" = "PHP chưa được cài đặt đúng cách"; +"startup.errors.php_opt.subtitle" = "Bí danh PHP không được tìm thấy ở `%@`. Ứng dụng sẽ không hoạt động chính xác cho đến khi bạn giải quyết vấn đề này."; +"startup.errors.php_opt.desc" = "Nếu bạn đã cài đặt công thức `php`, bạn có thể cần chạy `brew install php` để PHP Monitor nhận ra cài đặt này."; + +/// PHP binary is broken +"startup.errors.dyld_library.title" = "PHP đã được cài đặt, nhưng có vẻ bị lỗi"; +"startup.errors.dyld_library.subtitle" = "Khi PHP Monitor cố gắng chạy các lệnh, nó không thể chạy chúng chính xác. Điều này thường là một dấu hiệu của một cài đặt PHP bị lỗi."; +"startup.errors.dyld_library.desc" = "Chạy `brew reinstall php && brew link php` trong Terminal của bạn có thể giải quyết vấn đề này, vì vậy hãy thử điều đó."; + +/// Valet is not installed +"startup.errors.valet_executable.title" = "Laravel Valet chưa được cài đặt đúng cách"; +"startup.errors.valet_executable.subtitle" = "Bạn phải cài đặt Valet với Composer. Ứng dụng sẽ không hoạt động chính xác cho đến khi bạn giải quyết vấn đề này."; +"startup.errors.valet_executable.desc" = "Nếu bạn chưa cài đặt Laravel Valet, hãy cài đặt trước. Nếu bạn đã cài đặt, nhưng vẫn nhìn thấy thông báo này, thì hãy thử chạy `which valet` trong Terminal, nó sẽ trả về: `%@`."; + +/// Valet configuration file missing or broken +"startup.errors.valet_json_invalid.title" = "Tệp cấu hình Laravel Valet không hợp lệ hoặc bị thiếu"; +"startup.errors.valet_json_invalid.subtitle" = "PHP Monitor cần có thể đọc tệp cấu hình. Dường như tệp đã bị lỗi hoặc bị thiếu. Vui lòng kiểm tra xem nó tồn tại và được định dạng đúng."; +"startup.errors.valet_json_invalid.desc" = "Bạn có thể tìm thấy tệp tại `~/.config/valet/config.json`. Nếu Laravel Valet không thể phân tích cú pháp tệp cấu hình, chạy bất kỳ lệnh `valet` nào thường sẽ tự động sửa tệp JSON. Thử chạy `valet -- version` để tự động sửa file."; + +/// Valet version not readable +"startup.errors.valet_version_unknown.title" = "Phiên bản Valet của bạn không thể đọc được"; +"startup.errors.valet_version_unknown.subtitle" = "Phân tích kết quả của `valet --version` đã thất bại. Hãy đảm bảo cài đặt Valet của bạn hoạt động và được cập nhật."; +"startup.errors.valet_version_unknown.desc" = "Thử chạy `valet --version` trong terminal để tìm hiểu điều gì đang xảy ra."; + +"startup.errors.valet_not_installed.title" = "Thư mục cấu hình Valet của bạn bị thiếu"; +"startup.errors.valet_not_installed.subtitle" = "Thư mục yêu cầu `~/.config/valet` bị thiếu. Điều này thường có nghĩa là bạn đã quên chạy `valet install`."; +"startup.errors.valet_not_installed.desc" = "Giả sử bạn đã cài đặt Valet qua Composer, vui lòng chạy `valet install` để hoàn tất thiết lập Laravel Valet. + +Nếu bạn nhìn thấy thông báo này nhưng bối rối vì thư mục này đã bị mất, thì bạn có thể muốn điều tra tại sao nó bị mất - nó không nên chỉ biến mất và nó có nghĩa là cài đặt của bạn Valet bị lỗi."; + +// Valet version too new or old +"startup.errors.valet_version_not_supported.title" = "Phiên bản Valet này không được hỗ trợ"; +"startup.errors.valet_version_not_supported.subtitle" = "Bạn đang chạy một phiên bản của Valet hiện không được hỗ trợ. PHP Monitor hiện tại hoạt động với Valet v2, v3 và v4. Để tránh gây ra sự cố trên hệ thống của bạn, PHP Monitor không thể khởi động."; +"startup.errors.valet_version_not_supported.desc" = "Bạn phải cài đặt một phiên bản của Valet tương thích với PHP Monitor, hoặc bạn có thể cần nâng cấp lên phiên bản mới hơn của PHP Monitor có thể bao gồm tính năng tương thích cho phiên bản này của Valet (xem thông tin chi tiết về các bản phát hành mới nhất để biết thêm thông tin)."; + +/// Brew & sudoers +"startup.errors.sudoers_brew.title" = "Brew chưa được thêm vào sudoers.d"; +"startup.errors.sudoers_brew.subtitle" = "Bạn phải chạy lệnh `sudo valet trust` để đảm bảo Valet có thể bắt đầu và dừng dịch vụ mà không cần phải sử dụng sudo mỗi lần. Ứng dụng sẽ không hoạt động chính xác cho đến khi bạn giải quyết vấn đề này."; +"startup.errors.sudoers_brew.desc" = "Nếu bạn tiếp tục nhìn thấy lỗi này, có thể có vấn đề về quyền truy cập mà PHP Monitor không thể xác minh tệp, điều này thường có thể giải quyết bằng cách chạy: `sudo chmod +r /private/etc/sudoers.d/brew`"; + +/// Valet & sudoers +"startup.errors.sudoers_valet.title" = "Valet chưa được thêm vào sudoers.d"; +"startup.errors.sudoers_valet.subtitle" = "Bạn phải chạy lệnh `sudo valet trust` để đảm bảo Valet có thể bắt đầu và dừng dịch vụ mà không cần phải sử dụng sudo mỗi lần. Ứng dụng sẽ không hoạt động chính xác cho đến khi bạn giải quyết vấn đề này. Nếu bạn đã làm điều này trước đó, hãy chạy lại lệnh `sudo valet trust`."; +"startup.errors.sudoers_valet.desc" = "Nếu bạn tiếp tục nhìn thấy lỗi này, có thể có vấn đề về quyền truy cập mà PHP Monitor không thể xác minh tệp, điều này thường có thể giải quyết bằng cách chạy: `sudo chmod +r /private/etc/sudoers.d/valet`"; + +/// Platform issue detected +"startup.errors.global_composer_platform_issues.title" = "PHP Monitor và Valet không thể hoạt động chính xác: Composer báo cáo vấn đề với nền tảng của bạn"; +"startup.errors.global_composer_platform_issues.subtitle" = "Vui lòng làm theo những bước khuyến nghị sau để tránh gặp vấn đề này trong tương lai:\n\n1. Chạy lệnh `composer global update`.\n2. Khởi động lại PHP Monitor. (Nó sẽ hoạt động lại).\n3. Chuyển sang phiên bản PHP cũ nhất mà bạn đã cài đặt.\n4. Chạy lại lệnh `composer global update`."; +"startup.errors.global_composer_platform_issues.desc" = "Bạn có thể vào Tùy chọn và kiểm tra tùy chọn 'Tự động cập nhật các phụ thuộc toàn cầu'. Điều này sẽ cập nhật các phụ thuộc Composer toàn cầu của bạn mỗi khi bạn thay đổi phiên bản PHP, vì vậy điều này có thể không lý tưởng nếu bạn không có quyền truy cập internet liên tục.\n\nĐể biết chính xác điều gì đang sai, hãy thử chạy `valet --version`. Hiện tại, Valet không hoạt động với các phụ thuộc đã cài đặt. Thông thường điều này được gây ra bởi sự không phù hợp của phiên bản: ví dụ như các phụ thuộc đã cài đặt cho một phiên bản PHP mới hơn phiên bản hiện tại đang hoạt động."; + +/// Cannot retrieve services +"startup.errors.services_json_error.title" = "Không thể xác định trạng thái dịch vụ"; +"startup.errors.services_json_error.subtitle" = "PHP Monitor thường sử dụng lệnh sau để kiểm tra liệu các dịch vụ có thể được truy xuất hay không: `sudo brew services info nginx --json`.\n\nPHP Monitor không thể giải thích được câu trả lời này."; +"startup.errors.services_json_error.desc" = "Điều này có thể xảy ra nếu cài đặt Homebrew của bạn đã lỗi thời, trong trường hợp đó Homebrew sẽ không trở lại JSON. Bạn có thể khắc phục điều này bằng cách chạy `brew update` hoặc `brew tap homebrew/services`. Bạn cũng có thể thử chạy `sudo brew services info nginx --json` trong bất kỳ terminal nào bạn muốn."; + +/// Issue with `which` alias +"startup.errors.which_alias_issue.title" = "Phát hiện vấn đề cấu hình"; +"startup.errors.which_alias_issue.subtitle" = "Dường như có một tệp trong `/usr/local/bin/which`. Điều này thường được thiết lập bởi NodeJS, nhưng `node` không có trong PATH trong `/usr/local/bin`. Để khắc phục điều này, hãy đọc tiếp."; +"startup.errors.which_alias_issue.desc" = "Bạn sẽ cần tạo liên kết tượng trưng cho `node` vào thư mục `/usr/local/bin` để đảm bảo PHP Monitor có thể khởi động thành công. Để biết thêm thông tin, xem: https://github.com/nicoverbruggen/phpmon/issues/174"; + +// Warning about a different PHP version linked than last time +"startup.version_mismatch.title" = "Phiên bản PHP đang hoạt động của bạn đã thay đổi."; +"startup.version_mismatch.subtitle" = "Kể từ khi PHP Monitor hoạt động lần cuối, phiên bản PHP được liên kết của bạn đã được thay đổi thành PHP %@. Bạn có muốn chuyển lại sang PHP %@ không, hay bạn muốn tiếp tục sử dụng phiên bản hiện tại?"; +"startup.version_mismatch.desc" = "PHP Monitor theo dõi phiên bản PHP toàn cầu được liên kết. Phiên bản toàn cầu có thể đã được thay đổi do một số chương trình khác hoặc Homebrew có thể đã liên kết một công thức khác sau khi nâng cấp."; +"startup.version_mismatch.button_switch_back" = "Chuyển lại sang PHP %@"; +"startup.version_mismatch.button_stay" = "Tiếp tục sử dụng PHP %@"; + +// Warning about unsupported PHP versions +"startup.unsupported_versions_explanation.title" = "Phát hiện cài đặt PHP không được hỗ trợ bởi Valet!"; +"startup.unsupported_versions_explanation.subtitle" = "Các phiên bản PHP sau đây đã được cài đặt trên hệ thống của bạn nhưng không được hỗ trợ bởi phiên bản Valet này. + +%@ + +Valet có thể bị hỏng nếu bạn liên kết các phiên bản PHP này, vì vậy PHP Monitor sẽ không cho phép bạn chuyển sang chúng."; +"startup.unsupported_versions_explanation.desc" = "Nếu bạn cần hỗ trợ cho các phiên bản PHP cũ hơn, bạn có thể cần giảm xuống phiên bản Valet cũ hơn. Nếu không, nó có thể là một ý tưởng tốt để gỡ cài đặt bất kỳ phiên bản đã lỗi thời nào không được sử dụng. Điều này cũng có thể là do phiên bản Valet này quá cũ. Thông báo này chỉ sẽ bị xóa sau khi khởi động lại PHP Monitor."; + +// Sponsor encouragement +"startup.sponsor_encouragement.title" = "Nếu PHP Monitor đã hữu ích cho bạn hoặc công ty của bạn, vui lòng xem xét để lại một khoản ủng hộ."; +"startup.sponsor_encouragement.subtitle" = "Để được trung thực 100%: Tôi dự định giữ PHP Monitor mã nguồn mở và miễn phí. Sự hỗ trợ của bạn làm cho quyết định này rất dễ dàng.\n\n(Bạn chỉ sẽ nhìn thấy lời nhắc này một lần.)"; +"startup.sponsor_encouragement.desc" = "Nếu bạn đã quyên góp, thì BẠN là nguyên nhân tại sao ứng dụng có thể nhận được tất cả các cập nhật này. Trong trường hợp đó, đây là một thông điệp CẢM ƠN đến bạn. Tôi rất đánh giá cao sự hỗ trợ."; + +"startup.sponsor_encouragement.accept" = "Ủng hộ Ngay"; +"startup.sponsor_encouragement.learn_more" = "Tìm hiểu Thêm"; +"startup.sponsor_encouragement.skip" = "Không, Cám ơn"; + +// ERROR MESSAGES (based on AlertableError) +"alert.errors.homebrew_permissions.applescript_returned_nil.title" = "Khôi phục Quyền Homebrew đã bị hủy."; +"alert.errors.homebrew_permissions.applescript_returned_nil.description" = "Kết quả của kịch bản được thực thi để điều chỉnh quyền truy cập đã trả về nil, điều này thường có nghĩa là bạn không cấp quyền quản trị cho PHP Monitor.\n\nNếu bạn nhấn vào Hủy trong lời nhắc xác thực, điều này hoàn toàn bình thường. Nếu bạn thực sự xác thực và vẫn thấy thông báo này, có thể đã xảy ra sự cố gì đó."; + +"alert.key_service_not_running.title" = "Do sự cố với yêu cầu của các dịch vụ Homebrew , Valet hiện không hoạt động đúng."; +"alert.key_service_not_running.subtitle" = "Để Valet hoạt động đúng, ít nhất ba dịch vụ chính phải hoạt động đúng. + +PHP Monitor báo cáo rằng điều này không phải là trường hợp. Bạn có thể thử khắc phục điều này bằng cách nhấn nút với 'X' ở menu dưới dịch vụ bị ảnh hưởng để (khởi) động lại dịch vụ hiện đang không hoạt động."; +"alert.key_service_not_running.desc" = "Nếu nhấn vào nút bên dưới dịch vụ không hoạt động (tức là biểu tượng spinner xuất hiện nhưng vẫn là 'X' sau một thời gian), bạn có thể cần chạy Sửa Lỗi Valet. Bạn có thể làm điều này qua menu Cứu Hộ` > Sửa Lỗi Valet. + +Ngoài ra, bạn có thể sử dụng `valet stop` và `valet start` trong terminal, có thể giải quyết vấn đề này (như một phương án thay thế cho Sửa Lỗi Valet). + +Để khắc phục lỗi, bạn có thể kiểm tra trình theo dõi vấn đề GitHub, nơi người khác có thể gặp phải các vấn đề tương tự. Là nhà phát triển, tôi cố gắng đảm bảo mọi câu hỏi đều được trả lời :)"; + +"alert.key_service_has_error.title" = "Do sự cố với yêu cầu của các dịch vụ Homebrew , Valet hiện không hoạt động đúng."; +"alert.key_service_has_error.subtitle" = "Để Valet hoạt động đúng, ít nhất ba dịch vụ chính phải hoạt động đúng. + +PHP Monitor báo cáo rằng điều này không phải là trường hợp. Có vẻ như một trong các dịch vụ bị ảnh hưởng đang báo cáo trạng thái lỗi, vì vậy tôi khuyên bạn nhấp vào 'E'. + +PHP Monitor sẽ cố gắng khởi động lại dịch vụ và nếu thất bại (khả năng cao) nó sẽ đề xuất để tìm tệp nhật ký nếu nó tồn tại, điều này có thể chứa thông tin bổ sung có thể giúp bạn khắc phục sự cố."; + +"alert.key_service_has_error.desc" = "Thật không may, nếu một dịch vụ báo cáo lỗi, điều này thường do trạng thái cấu hình không hợp lệ, điều này có thể khó để khắc phục. + +MỘT SỐ MẸO KHẮC PHỤC THƯỜNG GẶP + +• Thử khởi động lại dịch vụ và kiểm tra tệp nhật ký (nếu tồn tại) trước tiên. Bạn có thể làm cho PHP Monitor thực hiện điều này bằng cách nhấp vào nút 'E'. + +• PHP: Nếu bạn thấy trạng thái lỗi, có thể có vấn đề với cấu hình PHP. Hãy đảm bảo các tệp .ini trong cài đặt Homebrew ổn định và không có xung đột socket. + +• nginx: Nếu bạn thấy trạng thái lỗi, có thể có lỗi cấu hình trang web (thường được ghi chú trong nhật ký lỗi). Bạn sẽ muốn kiểm tra thư mục nginx của Valet. + +• dnsmasq: Nếu bạn thấy trạng thái lỗi, tệp cấu hình dnsmasq có thể bị hỏng (thường nằm tại ~/.config/valet/dnsmasq.d)."; + +// CHECK FOR UPDATES + +"updater.alerts.newer_version_available.title" = "PHP Monitor v%@ đã có sẵn!"; +"updater.alerts.newer_version_available.subtitle" = "Để giữ cho PHP Monitor luôn được cập nhật, việc nâng cấp lên phiên bản mới nhất được khuyến khích, vì các phiên bản mới thường sửa lỗi và bao gồm các bản vá để hỗ trợ cho các phiên bản mới nhất của Valet và PHP."; +"updater.installation_source.brew" = "Phương pháp được khuyến nghị để cài đặt cập nhật cho PHP Monitor là chỉ cần nhấn vào “Cài đặt cập nhật”.\n\nVì bạn đã sử dụng Homebrew để cài đặt ứng dụng, bạn cũng có thể nâng cấp thông qua terminal bằng cách chạy `%@`, nhưng điều này không được khuyến khích.\n\n(Vui lòng lưu ý rằng việc cài đặt thông qua công cụ cập nhật tích hợp này sẽ xóa PHP Monitor khỏi thư mục Caskroom của Homebrew, để ngăn không tải xuống các bản cập nhật trùng lặp và gây ra vấn đề tiềm tàng sau này.)"; +"updater.installation_source.direct" = "Phương pháp được khuyến nghị để cài đặt cập nhật cho PHP Monitor là chỉ cần nhấn vào “Cài đặt cập nhật”."; +"updater.alerts.buttons.release_notes" = "Xem các Ghi chú phát hành"; + +"updater.alerts.is_latest_version.title" = "PHP Monitor đã ở phiên bản mới nhất!"; +"updater.alerts.is_latest_version.subtitle" = "Phiên bản hiện tại đã được cài đặt (v%@) đã ở phiên bản mới nhất.\nKhông có phiên bản mới nhất nào khả dụng."; + +"updater.alerts.cannot_check_for_update.title" = "PHP Monitor không thể xác định có phiên bản mới nhất."; +"updater.alerts.cannot_check_for_update.subtitle" = "Bạn có thể không kết nối được với internet, đang chặn lưu lượng mạng hoặc GitHub bị sập và không cho phép bạn kiểm tra các bản cập nhật. Nếu bạn tiếp tục nhìn thấy thông báo này, bạn có thể muốn kiểm tra thủ công trên trang phát hành."; +"updater.alerts.cannot_check_for_update.description" = "Phiên bản hiện tại được cài đặt là: %@. Bạn có thể truy cập danh sách các phiên bản mới nhất (trên GitHub) bằng cách nhấp vào nút bên trái."; +"updater.alerts.buttons.releases_on_github" = "Xem các bản phát hành"; +"updater.alerts.buttons.install" = "Cài đặt cập nhật"; +"updater.alerts.buttons.dismiss" = "Đóng"; + +// WARNINGS ABOUT NON-DEFAULT TLD + +"alert.warnings.tld_issue.title" = "Bạn đang không sử dụng `.test` như TLD cho Valet."; +"alert.warnings.tld_issue.subtitle" = "Sử dụng một TLD không mặc định có thể không hoạt động đúng và không được hỗ trợ chính thức."; +"alert.warnings.tld_issue.description" = "PHP Monitor sẽ vẫn hoạt động, nhưng có thể gặp vấn đề: ứng dụng có thể không hiển thị chính xác các miền đã được bảo mật. Để đạt được kết quả tối ưu, hãy vào tệp cấu hình của Valet (config.json trong thư mục Valet) và thay đổi TLD trở lại thành `test`."; +"alert.do_not_tell_again" = "Không thông báo lại cho tôi"; + +// WARNINGS + +"warnings.title" = "PHP Doctor"; +"warnings.description" = "**PHP Doctor** sẽ đề xuất cải tiến cho cấu hình hệ thống hoạt động của bạn."; +"warnings.disclaimer" = "Bạn có thể ẩn tất cả các đề xuất từ menu PHP Monitor trong Tùy chọn, nhưng khuyến nghị là bạn nên xử lý tất cả các mục hành động được đề xuất."; +"warnings.refresh.button" = "Quét lại"; +"warnings.refresh.button.description" = "Nhấn vào nút này sau khi đã sửa một vấn đề. Điều này sẽ khiến PHP Monitor đánh giá lại môi trường của bạn. Nếu nó đã được sửa, khuyến nghị sẽ biến mất."; + +"warnings.helper_permissions.title" = "Các trợ lý của PHP Monitor hiện không khả dụng."; +"warnings.helper_permissions.description" = "PHP Monitor đi kèm với các tập lệnh trợ giúp khác nhau. Sử dụng các tập lệnh này cho phép bạn dễ dàng triệu hồi một phiên bản PHP cụ thể mà không cần chuyển đổi phiên bản PHP đã liên kết."; +"warnings.helper_permissions.unavailable" = "Tuy nhiên, các trợ lý này có thể *không khả dụng* vì PHP Monitor hiện không thể tạo hoặc cập nhật các liên kết tượng trưng cần thiết."; +"warnings.helper_permissions.symlink" = "Nếu bạn không muốn làm cho `/usr/local/bin` có thể ghi được, bạn có thể thêm thư mục trợ lý của PHP Monitor vào biến `PATH` để loại bỏ cảnh báo này. (Nhấp vào “Tìm hiểu thêm” để tìm hiểu cách khắc phục vấn đề này.)"; + +"warnings.arm_compatibility.title" = "Bạn đang sử dụng PHP Monitor bằng Rosetta trên Apple Silicon, điều này có nghĩa là môi trường PHP của bạn cũng đang chạy qua Rosetta."; +"warnings.arm_compatibility.description" = "Bạn có vẻ đang chạy một phiên bản tương thích với ARM của macOS, nhưng hiện tại bạn đang chạy PHP Monitor bằng Rosetta. Mặc dù điều này sẽ hoạt động đúng, nhưng khuyến nghị là bạn nên sử dụng phiên bản Homebrew native."; + +"warnings.files_missing.title" = "Cài đặt PHP của bạn thiếu các tệp cấu hình quan trọng yêu cầu."; +"warnings.files_missing.description" = "Sau khi cài đặt PHP, các tệp cấu hình quan trọng sau đây nên tồn tại: + +• %@ + +Khi thiếu các tệp như thế này, bạn nên chuyển sang phiên bản PHP liên quan đến các tệp đó: điều này có thể giải quyết vấn đề. Nếu điều này không khắc phục được sự cố, khuyến nghị là bạn nên cài đặt lại phiên bản PHP(s) thích hợp thông qua Homebrew một lần nữa, điều này sẽ phục hồi các tệp cấu hình đã thiếu. Thiếu các tệp cấu hình có thể là nguyên nhân khiến bạn nhận được lỗi '502 Bad Gateway', ngay cả sau khi chạy Sửa Lỗi Valet (nếu bạn đang sử dụng Valet)."; + +"warnings.none" = "Hiện tại không có khuyến nghị nào cho bạn. Mọi thứ của bạn đều ổn!"; + +// ONBOARDING + +"onboarding.title" = "Hướng dẫn"; +"onboarding.welcome" = "Chào mừng đến với PHP Monitor!"; +"onboarding.explore" = "Bây giờ bạn đã có truy cập vào toàn bộ các tính năng của PHP Monitor. Bạn có thể tìm hiểu thêm về một số tính năng mà PHP Monitor cung cấp trên màn hình này."; +"onboarding.explore.lite" = "Bây giờ bạn đã có truy cập vào các tính năng quan trọng nhất của PHP Monitor. +Vui lòng lưu ý rằng một số tính năng (xám bên dưới) hiện không khả dụng vì Laravel Valet không hoạt động."; +"onboarding.tour.menu_bar.title" = "Quyền Lực Trong Menu Bar"; +"onboarding.tour.menu_bar" = "PHP Monitor tồn tại trong thanh menu của bạn. Từ menu này, bạn có thể truy cập được hầu hết các chức năng chính của PHP Monitor, bao gồm chuyển đổi phiên bản PHP liên kết toàn cầu, xác định các tệp cấu hình, cài đặt các phiên bản PHP khác nhau và nhiều hơn thế nữa."; +"onboarding.tour.faq_hint" = "**Câu hỏi?** Tôi khuyến nghị rằng bạn nên xem [README](https://github.com/nicoverbruggen/phpmon/blob/main/README.md) trên GitHub: nó chứa một FAQ toàn diện với các mẹo và câu hỏi thường gặp và câu trả lời."; +"onboarding.tour.services.title" = "Quản Lý Dịch Vụ Homebrew"; +"onboarding.tour.services" = "Sau khi bạn nhấp vào mục thanh menu, bạn có thể xem tổng quan dựa trên các dấu check hoặc crosses nếu tất cả các dịch vụ Homebrew đang hoạt động. Bạn cũng có thể nhấp vào một dịch vụ để chuyển đổi nhanh chóng."; +"onboarding.tour.domains.title" = "Quản Lý Miền"; +"onboarding.tour.domains" = "Bằng cách mở cửa sổ Tên Miền thông qua mục thanh menu, bạn có thể xem các tên miền được liên kết và được đỗ xe, cũng như các proxy nginx hoạt động."; +"onboarding.tour.isolation.title" = "Cô lập Tên Miền"; +"onboarding.tour.isolation" = "Nếu bạn đã cài đặt Valet 3 hoặc mới hơn, bạn còn có thể sử dụng tính năng cô lập tên miền bằng cách nhấp chuột phải vào một tên miền cụ thể trong cửa sổ Tên Miền. Điều này cho phép bạn chọn một phiên bản cụ thể của PHP để sử dụng cho tên miền đó và chỉ tên miền đó."; +"onboarding.tour.feature_unavailable" = "Tính năng này hiện không khả dụng và yêu cầu Laravel Valet được cài đặt."; +"onboarding.tour.once" = "Bạn chỉ sẽ thấy Hướng Dẫn Chào Mừng một lần. Bạn có thể mở lại Hướng Dẫn Chào Mừng sau này qua biểu tượng thanh menu (có sẵn trong menu, ở dưới Cứu hộ và Các dịch vụ)."; +"onboarding.tour.close" = "Đóng Tour"; From 7da20b4f20c842420ce94750435137091cd2a881 Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Mon, 26 Jun 2023 14:14:37 +0200 Subject: [PATCH 02/34] =?UTF-8?q?=F0=9F=8C=90=20Updated=20localization?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- phpmon/en.lproj/Localizable.strings | 6 + phpmon/nl.lproj/Localizable.strings | 780 ++++++++++++++-------------- 2 files changed, 398 insertions(+), 388 deletions(-) diff --git a/phpmon/en.lproj/Localizable.strings b/phpmon/en.lproj/Localizable.strings index 31dc3b02..9a2fd818 100644 --- a/phpmon/en.lproj/Localizable.strings +++ b/phpmon/en.lproj/Localizable.strings @@ -205,6 +205,12 @@ You may be asked for your password during the uninstallation process if file per "domain_list.confirm_unproxy" = "Are you sure you want to remove the proxy '%@'?"; "domain_list.confirm_unproxy_desc" = "You can always recreate proxy the again by clicking on the + button."; +"domain_list.columns.tls" = "TLS"; +"domain_list.columns.domain" = "Domain"; +"domain_list.columns.active" = "Active"; +"domain_list.columns.kind" = "Kind"; +"domain_list.columns.project_type" = "Project Type"; + // CHOOSE WHAT TO ADD "selection.title" = "What kind of domain would you like to set up?"; diff --git a/phpmon/nl.lproj/Localizable.strings b/phpmon/nl.lproj/Localizable.strings index 33524479..3b57386a 100644 --- a/phpmon/nl.lproj/Localizable.strings +++ b/phpmon/nl.lproj/Localizable.strings @@ -152,619 +152,623 @@ Tijdens het verwijderingsproces kan je worden gevraagd om je wachtwoord indien d // LITE MODE -"lite_mode_explanation.title" = "You are currently running PHP Monitor in Standalone Mode."; -"lite_mode_explanation.subtitle" = "PHP Monitor has additional features that are available for use if you happen to be a user of Laravel Valet. Right now, PHP Monitor could not detect an active installation of Valet on your system, so those features are unavailable."; -"lite_mode_explanation.description" = "For more information, I'd recommend checking out the README (accessible on GitHub) which will explain what steps you need to take to install Valet and make PHP Monitor run correctly with it installed. You will need to restart PHP Monitor after installing Laravel Valet before it will leave Standalone Mode."; +"lite_mode_explanation.title" = "Je bent momenteel PHP Monitor in Standalone Mode aan het gebruiken."; +"lite_mode_explanation.subtitle" = "PHP Monitor heeft verschillende functies die beschikbaar zijn als je ook gebruik maakt van Laravel Valet. Momenteel kon PHP Monitor geen actieve installatie van Valet op jouw computer vinden, dus deze functionaliteit is momenteel niet beschikbaar."; +"lite_mode_explanation.description" = "Voor meer informatie raad ik aan om de README te bekijken (toegankelijk op GitHub), waarin wordt uitgelegd welke stappen je moet nemen om Valet te installeren en PHP Monitor correct te laten werken met de geïnstalleerde versie van Valet. Je moet PHP Monitor opnieuw starten nadat je Laravel Valet hebt geïnstalleerd voordat het de Standalone-modus verlaat."; // GENERIC "generic.ok" = "OK"; -"generic.cancel" = "Cancel"; -"generic.retry" = "Retry"; -"generic.notice" = "Notice"; +"generic.cancel" = "Annuleren"; +"generic.retry" = "Opnieuw"; +"generic.notice" = "Opmerking"; // PRESET LOADING -"preset_help_title" = "Working with Configuration Presets"; -"preset_help_info" = "You can set up configuration presets in the config.json file, located in ~/.config/phpmon/config.json. These presets can apply a selection of configuration values all at once. This is a powerful feature, but currently needs to be set up manually."; -"preset_help_desc" = "After restarting PHP Monitor, all presets found in the file will be loaded. If no presets appear, the file probably could not be parsed correctly.\n\nYou can click the question mark in this alert to go to the FAQ on GitHub, where you can find more information about this feature, including a sample file."; +"preset_help_title" = "Werken met presets"; +"preset_help_info" = "Je kunt presets instellen in het config.json-bestand, dat zich bevindt in `~/.config/phpmon/config.json`. Deze presets kunnen een selectie van configuratiewaarden in één keer toepassen. Dit is een krachtige functie, maar moet momenteel handmatig worden ingesteld."; +"preset_help_desc" = "Na het opnieuw opstarten van PHP Monitor worden alle gevonden presets ingeladen. Als er geen presets worden weergegeven, kon het bestand waarschijnlijk niet correct worden verwerkt.\n\nJe kunt op het vraagteken in deze melding klikken om naar de FAQ op GitHub te gaan, waar je meer informatie over deze functie kunt vinden, inclusief een voorbeeld."; // MENU ITEMS (if window is open) -"mm_add_folder_as_link" = "Add Folder as Link..."; -"mm_reload_domain_list" = "Reload Domains List"; -"mm_find_in_domain_list" = "Search in Domains List"; +"mm_add_folder_as_link" = "Map toevoegen als koppeling..."; +"mm_reload_domain_list" = "Domeinlijst herladen"; +"mm_find_in_domain_list" = "Zoeken in domeinlijst"; // SITE LIST -"domain_list.title" = "Domains"; +"domain_list.title" = "Domeinen"; "domain_list.subtitle" = ""; -"domain_list.no_domains" = "You have not set up any domains or proxies yet."; -"domain_list.no_domains_for_search_query" = "There are no results for your search query."; +"domain_list.no_domains" = "Je hebt nog geen domeinen of proxies ingesteld."; +"domain_list.no_domains_for_search_query" = "Er zijn geen resultaten voor je zoekopdracht."; -"domain_list.tooltips.isolated" = "This domain is isolated and using PHP %@ instead of the globally linked PHP."; -"domain_list.tooltips.checkmark" = "This domain is being served with a version of PHP that is compatible with this requirement (PHP %@). Click on the PHP version next to this checkmark to find out more information about how this requirement was determined."; +"domain_list.tooltips.isolated" = "Dit domein is geïsoleerd en gebruikt PHP %@ in plaats van de globaal gekoppelde PHP."; +"domain_list.tooltips.checkmark" = "Dit domein wordt geserveerd met een versie van PHP die compatibel is met deze vereiste (PHP %@). Klik op de PHP-versie naast dit vinkje om meer informatie te vinden over hoe deze vereiste is bepaald."; -"domain_list.alerts_isolation_failed.title" = "Oops! Site Isolation Not Applied"; -"domain_list.alerts_isolation_failed.subtitle" = "Something went wrong trying to change the isolation status for this site. If this is your default site but it is not linked, I recommend manually linking the site prior to setting up isolation."; -"domain_list.alerts_isolation_failed.desc" = "To find out what goes wrong, you can try running the command in your terminal manually: %@"; +"domain_list.alerts_isolation_failed.title" = "Oeps! Site-isolatie niet toegepast"; +"domain_list.alerts_isolation_failed.subtitle" = "Er is iets misgegaan bij het wijzigen van de isolatiestatus voor deze site. Als dit je standaardsite is maar niet is gekoppeld, raad ik aan om de site handmatig te koppelen voordat je isolatie instelt."; +"domain_list.alerts_isolation_failed.desc" = "Om erachter te komen wat er misgaat, kun je proberen dit commando handmatig in je terminal uit te voeren: %@"; -"domain_list.alerts_status_not_changed.title" = "Oops! SSL Status Not Changed"; -"domain_list.alerts_status_not_changed.desc" = "Something went wrong. Try running the command in your terminal manually: %@"; +"domain_list.alerts_status_not_changed.title" = "Oeps! SSL-status niet gewijzigd"; +"domain_list.alerts_status_not_changed.desc" = "Er is iets misgegaan. Probeer dit commando handmatig in je terminal uit te voeren: %@"; -"domain_list.alerts_status_changed.title" = "SSL Status Changed"; -"domain_list.alerts_status_changed.desc" = "The domain '%@' is now %@."; -"domain_list.alerts_status_secure" = "secure"; -"domain_list.alerts_status_unsecure" = "unsecured"; +"domain_list.alerts_status_changed.title" = "SSL-status gewijzigd"; +"domain_list.alerts_status_changed.desc" = "Het domein '%@' is nu %@."; +"domain_list.alerts_status_secure" = "veilig"; +"domain_list.alerts_status_unsecure" = "onveilig"; -"domain_list.confirm_unlink" = "Are you sure you want to unlink '%@'?"; -"domain_list.confirm_unlink_desc" = "No files will be removed. You can always link the folder again by clicking on the + button and selecting the original folder."; -"site_link.close" = "Close"; -"site_link.switch_to_php" = "Switch to PHP %@"; +"domain_list.confirm_unlink" = "Weet je zeker dat je '%@' wilt loskoppelen?"; +"domain_list.confirm_unlink_desc" = "Er worden geen bestanden verwijderd. Je kunt de map altijd opnieuw koppelen door op de + knop te klikken en de oorspronkelijke map te selecteren."; +"site_link.close" = "Sluiten"; +"site_link.switch_to_php" = "Overschakelen naar PHP %@"; -"domain_list.confirm_unproxy" = "Are you sure you want to remove the proxy '%@'?"; -"domain_list.confirm_unproxy_desc" = "You can always recreate proxy the again by clicking on the + button."; +"domain_list.confirm_unproxy" = "Weet je zeker dat je de proxy '%@' wilt verwijderen?"; +"domain_list.confirm_unproxy_desc" = "Je kunt de proxy altijd opnieuw maken door op de + knop te klikken."; + +"domain_list.columns.tls" = "TLS"; +"domain_list.columns.domain" = "Domein"; +"domain_list.columns.active" = "Actief"; +"domain_list.columns.kind" = "Type"; +"domain_list.columns.project_type" = "Projecttype"; // CHOOSE WHAT TO ADD -"selection.title" = "What kind of domain would you like to set up?"; -"selection.description" = "Links are used to directly serve projects. If you have a Laravel, Symfony, WordPress, etc. folder with code, you'll want to create a link and choose the folder where your code lives.\n\nIf you are in need of a proxy, you can proxy e.g. a container to a particular domain name. This can be useful in combination with Docker, for example."; -"selection.create_link" = "Create a Link"; -"selection.create_proxy" = "Create a Proxy"; -"selection.cancel" = "Cancel"; +"selection.title" = "Wat voor soort domein wil je instellen?"; +"selection.description" = "Koppelingen (links) worden gebruikt om projecten rechtstreeks te gebruiken. Als je een Laravel, Symfony, WordPress, etc. map met code hebt, wil je een koppeling maken en de map kiezen waar je code zich bevindt.\n\nAls je een proxy nodig hebt, kun je bijvoorbeeld een container doorsturen naar een bepaalde domeinnaam. Dit kan handig zijn in combinatie met Docker, bijvoorbeeld."; +"selection.create_link" = "Maak een link"; +"selection.create_proxy" = "Maak een proxy"; +"selection.cancel" = "Annuleren"; // ADD PROXY TO DOMAINS LIST -"domain_list.add.set_up_proxy" = "Set up a Proxy"; -"domain_list.add.proxy_subject" = "Proxy subject (must include protocol and port)"; -"domain_list.add.domain_name" = "Domain name"; -"domain_list.add.create_proxy" = "Create Proxy"; -"domain_list.add.proxy_available" = "%@ will be proxied and will be available via: %@://%@.%@"; -"domain_list.add.proxy_https_warning" = "%@ will be proxied and will be available via: %@://%@.%@. +"domain_list.add.set_up_proxy" = "Proxy instellen"; +"domain_list.add.proxy_subject" = "Proxy-onderwerp (moet protocol en poort bevatten)"; +"domain_list.add.domain_name" = "Domeinnaam"; +"domain_list.add.create_proxy" = "Proxy maken"; +"domain_list.add.proxy_available" = "%@ wordt geproxyd en is beschikbaar via: %@://%@.%@"; +"domain_list.add.proxy_https_warning" = "%@ wordt geproxyd en is beschikbaar via: %@://%@.%@. -(!) IMPORTANT: This proxy may not work until you manually add `proxy_ssl_verify off;` to the nginx configuration file for this domain. It is recommended that you use an unsecured domain as the proxy subject."; +(!) BELANGRIJK: Deze proxy werkt mogelijk niet totdat je handmatig `proxy_ssl_verify off;` toevoegt aan het nginx-configuratiebestand voor dit domein. Het wordt aanbevolen om een onbeveiligd domein als proxy-onderwerp te gebruiken."; // ADD SITE TO DOMAINS LIST -"domain_list.add.link_folder" = "Link a Folder"; -"domain_list.add.domain_name_placeholder" = "Enter a domain name here"; -"domain_list.add.secure_after_creation" = "Secure %@.%@ after creation"; -"domain_list.add.secure_description" = "Securing a domain requires administrative privileges.\nYou may be prompted for your password or Touch ID."; -"domain_list.add.create_link" = "Create Link"; -"domain_list.add.cancel" = "Cancel"; -"domain_list.add.folder_available" = "This site will be available via the following URL: %@://%@.%@"; +"domain_list.add.link_folder" = "Map linken"; +"domain_list.add.domain_name_placeholder" = "Voer hier een domeinnaam in"; +"domain_list.add.secure_after_creation" = "Beveilig %@.%@ na het maken"; +"domain_list.add.secure_description" = "Het beveiligen van een domein vereist beheerdersrechten.\nJe wordt mogelijk gevraagd om je wachtwoord of Touch ID."; +"domain_list.add.create_link" = "Link maken"; +"domain_list.add.cancel" = "Annuleren"; +"domain_list.add.folder_available" = "Deze site is beschikbaar via de volgende URL: %@://%@.%@"; -"domain_list.add.empty_fields" = "One or more fields are empty. Please fill all required fields."; -"domain_list.add.errors.empty" = "You must enter a domain name."; -"domain_list.add.errors.empty_proxy" = "You must enter what will be proxied."; -"domain_list.add.errors.subject_invalid" = "The subject you've entered is not valid.\nYou must include the protocol and port."; -"domain_list.add.errors.already_exists" = "A link with that name already exists."; +"domain_list.add.empty_fields" = "Een of meer velden zijn leeg. Vul alle vereiste velden in."; +"domain_list.add.errors.empty" = "Je moet een domeinnaam invoeren."; +"domain_list.add.errors.empty_proxy" = "Je moet invullen wat er geproxyd zal worden."; +"domain_list.add.errors.subject_invalid" = "Het ingevoerde onderwerp is ongeldig.\nJe moet het protocol en de poort opnemen."; +"domain_list.add.errors.already_exists" = "Er bestaat al een koppeling (link) met die naam."; // ADD SITE ERROR: FOLDER MISSING SINCE SELECTION -"domain_list.alert.folder_missing.desc" = "The folder you chose no longer seems to exist. Do you want to cancel adding this folder? If you moved the folder, you could always put it back and try again."; -"domain_list.alert.folder_missing.title" = "Folder missing!"; -"domain_list.alert.folder_missing.cancel" = "Cancel Link"; +"domain_list.alert.folder_missing.desc" = "De gekozen map lijkt niet meer te bestaan. Wil je het toevoegen van deze map annuleren? Als je de map hebt verplaatst, kun je deze altijd terugzetten en het opnieuw proberen."; +"domain_list.alert.folder_missing.title" = "Map ontbreekt!"; +"domain_list.alert.folder_missing.cancel" = "Link annuleren"; "domain_list.alert.folder_missing.return" = "OK"; -"domain_list.add.modal_description" = "First, select which folder you would like to link."; +"domain_list.add.modal_description" = "Selecteer eerst welke map je wilt koppelen."; // SITE LIST ACTIONS -"domain_list.isolate" = "Switch PHP Version"; -"domain_list.site_isolation" = "Site Isolation"; -"domain_list.remove_isolation" = "Remove Isolation"; -"domain_list.always_use_php" = "Always use PHP %@"; -"domain_list.isolation_unavailable" = "Isolation Not Supported (in Valet 2)"; - -"domain_list.actions" = "Actions"; -"domain_list.unlink" = "Unlink Directory"; -"domain_list.secure" = "Secure Domain"; -"domain_list.unsecure" = "Unsecure Domain"; -"domain_list.open_in_finder" = "Open in Finder"; -"domain_list.open_in_browser" = "Open in Browser"; -"domain_list.open_in_terminal" = "Open in Terminal"; -"domain_list.detected_apps" = "Detected Applications"; -"domain_list.system_apps" = "System Applications"; -"domain_list.unproxy" = "Remove Proxy"; -"domain_list.use_in_terminal" = "Open PHP %@ in Terminal"; - -"domain_list.alerts_isolated_php_terminal.title" = "You can use PHP %@ in a specific terminal!"; -"domain_list.alerts_isolated_php_terminal.subtitle" = "Sadly, PHP Monitor cannot open a terminal for you (and type in the appropriate commands). You'll have to manually source the helper script in order to use this specific version of PHP. To do this, you can type the following in a terminal of choice: +"domain_list.isolate" = "Omschakelen naar PHP-versie"; +"domain_list.site_isolation" = "Site-isolatie"; +"domain_list.remove_isolation" = "Isolatie verwijderen"; +"domain_list.always_use_php" = "Altijd PHP %@ gebruiken"; +"domain_list.isolation_unavailable" = "Isolatie wordt niet ondersteund (in Valet 2)"; + +"domain_list.actions" = "Acties"; +"domain_list.unlink" = "Link verwijderen"; +"domain_list.secure" = "Domein beveiligen"; +"domain_list.unsecure" = "Domein niet beveiligen"; +"domain_list.open_in_finder" = "Openen in Finder"; +"domain_list.open_in_browser" = "Openen in browser"; +"domain_list.open_in_terminal" = "Openen in Terminal"; +"domain_list.detected_apps" = "Gedetecteerde applicaties"; +"domain_list.system_apps" = "Systeemapplicaties"; +"domain_list.unproxy" = "Proxy verwijderen"; +"domain_list.use_in_terminal" = "PHP %@ openen in Terminal"; + +"domain_list.alerts_isolated_php_terminal.title" = "Je kunt PHP %@ gebruiken in een specifieke terminal!"; +"domain_list.alerts_isolated_php_terminal.subtitle" = "Helaas kan PHP Monitor geen terminal voor je openen (en de juiste commando's typen). Je moet handmatig het hulpscript laden om deze specifieke versie van PHP te gebruiken. Typ hiervoor het volgende in een terminal naar keuze: . pm%@ -This will source the helper script as generated by PHP Monitor and enable the use of PHP %@ for that specific terminal. +Dit zal het hulpscript laden zoals gegenereerd door PHP Monitor en het gebruik van PHP %@ mogelijk maken voor die specifieke terminal. -This has no effect on other terminals, only for the particular terminal session that you are using it on. (i.e. if you have multiple tabs in your terminal app, other tabs & windows are unaffected.)"; -"domain_list.alerts_isolated_php_terminal.desc" = "If this doesn't work, you may wish to check PHP Doctor via the First Aid menu here in PHP Monitor. More information about this feature can also be found on GitHub (on the wiki on PHP Monitor's repository). This alert is included to improve visibility of this feature."; +Dit heeft geen invloed op andere terminals, alleen op de huidige terminalsessie waarin je het gebruikt. (bijvoorbeeld als je meerdere tabbladen hebt in je terminal-app, worden andere tabbladen en vensters niet beïnvloed)."; +"domain_list.alerts_isolated_php_terminal.desc" = "Als dit niet werkt, kun je PHP Doctor controleren via het First Aid-menu hier in PHP Monitor. Meer informatie over deze functie is ook te vinden op GitHub (in de wiki van de PHP Monitor-repository). Deze waarschuwing is toegevoegd om de zichtbaarheid van deze functie te verbeteren."; +"domain_list.warning.spaces" = "Waarschuwing! Deze website heeft een spatie in de mapnaam.\nDe website is niet bereikbaar via de browser."; -"domain_list.warning.spaces" = "Warning! This site has a space in its folder.\nThe site will not be reachable via the browser."; - -"domain_list.alert.invalid_folder_name" = "Invalid folder name"; -"domain_list.alert.invalid_folder_name_desc" = "This folder could not be resolved to a valid URL. This is usually because there’s a space in the folder name. Please rename the folder, reload the list of sites, and try again."; +"domain_list.alert.invalid_folder_name" = "Ongeldige mapnaam"; +"domain_list.alert.invalid_folder_name_desc" = "Deze mapnaam kan niet worden omgezet naar een geldige URL. Dit komt meestal doordat er een spatie in de mapnaam staat. Hernoem de map alstublieft, vernieuw de lijst met websites en probeer het opnieuw."; "domain_list.columns.tls" = "TLS"; -"domain_list.columns.domain" = "Domain"; +"domain_list.columns.domain" = "Domein"; "domain_list.columns.php" = "PHP"; "domain_list.columns.type" = "Type"; -"domain_list.columns.kind" = "Kind"; +"domain_list.columns.kind" = "Soort"; // DRIVERS -"driver.not_detected" = "Other"; +"driver.not_detected" = "Andere"; // PRESET -"preset.extension" = "%i extension"; -"preset.extensions" = "%i extensions"; -"preset.preference" = "%i preference"; -"preset.preferences" = "%i preferences"; +"preset.extension" = "%i extensie"; +"preset.extensions" = "%i extensies"; +"preset.preference" = "%i voorkeur"; +"preset.preferences" = "%i voorkeuren"; // EDITORS -"editors.alert.try_again" = "Try Again"; -"editors.alert.cancel" = "Cancel"; +"editors.alert.try_again" = "Probeer opnieuw"; +"editors.alert.cancel" = "Annuleren"; // PREFERENCES "prefs.title" = "PHP Monitor"; -"prefs.subtitle" = "Preferences"; -"prefs.close" = "Close"; +"prefs.subtitle" = "Voorkeuren"; +"prefs.close" = "Sluiten"; -"prefs.global_shortcut" = "Global Shortcut:"; -"prefs.dynamic_icon" = "Dynamic Icon:"; -"prefs.dynamic_icon" = "Icon Type:"; -"prefs.info_density" = "Info Density:"; +"prefs.global_shortcut" = "Globale sneltoets:"; +"prefs.dynamic_icon" = "Dynamisch pictogram:"; +"prefs.icon_type" = "Pictogramtype:"; +"prefs.info_density" = "Hoeveelheid informatie:"; "prefs.services" = "Services:"; "prefs.switcher" = "Switcher:"; "prefs.php_doctor" = "PHP Doctor:"; -"prefs.integrations" = "Integrations:"; +"prefs.integrations" = "Integraties:"; "prefs.updates" = "Updates:"; -"prefs.notifications" = "Notifications:"; -"prefs.warnings" = "Warnings:"; -"prefs.menu_contents" = "Features in Menu:"; -"prefs.startup" = "Startup:"; +"prefs.notifications" = "Meldingen:"; +"prefs.warnings" = "Waarschuwingen:"; +"prefs.menu_contents" = "Functies in menu:"; +"prefs.startup" = "Opstarten:"; + +"prefs.auto_start_desc" = "Start PHP Monitor automatisch wanneer je inlogt op je Mac."; +"prefs.auto_start_title" = "PHP Monitor starten bij het inloggen"; -"prefs.auto_start_desc" = "Automatically starts PHP Monitor when you log into your Mac."; -"prefs.auto_start_title" = "Start PHP Monitor at login"; +"prefs.icon_options.php" = "PHP-pictogram weergeven"; +"prefs.icon_options.elephant" = "Olifant-pictogram weergeven"; +"prefs.icon_options.none" = "Geen pictogram weergeven"; -"prefs.icon_options.php" = "Display PHP Icon"; -"prefs.icon_options.elephant" = "Display Elephant Icon"; -"prefs.icon_options.none" = "Do Not Display Icon"; +"prefs.icon_options_desc" = "Met deze optie kun je bepalen welk pictogram naast het versienummer van de momenteel gekoppelde PHP-versie wordt weergegeven. Als de optie voor dynamisch pictogram is uitgeschakeld, heeft dit geen invloed."; -"prefs.icon_options_desc" = "This option decides which icon will be displayed next to the version number of the currently linked PHP version. If the Dynamic Icon option has been disabled, this will have no effect."; +"prefs.auto_restart_services_title" = "PHP-FPM automatisch herstarten"; +"prefs.auto_restart_services_desc" = "Als deze optie is ingeschakeld, wordt PHP-FPM automatisch herstart wanneer je een extensie in- of uitschakelt. Dit is iets langzamer wanneer het is ingeschakeld, maar de extensiewijziging wordt onmiddellijk toegepast voor alle sites die je bedient, zonder dat je PHP-FPM handmatig hoeft te herstarten."; -"prefs.auto_restart_services_title" = "Auto-restart PHP-FPM"; -"prefs.auto_restart_services_desc" = "When checked, will automatically restart PHP-FPM when you check or uncheck an extension. Slightly slower when enabled, but this applies the extension change immediately for all sites you're serving, no need to restart PHP-FPM manually."; +"prefs.dynamic_icon_title" = "Dynamisch pictogram weergeven in de menubalk"; +"prefs.dynamic_icon_desc" = "Als je dit vakje niet aanvinkt, is het truckpictogram altijd zichtbaar. Als je het aanvinkt, wordt het belangrijkste versienummer van de momenteel gekoppelde PHP-versie weergegeven."; -"prefs.dynamic_icon_title" = "Display dynamic icon in menu bar"; -"prefs.dynamic_icon_desc" = "If you uncheck this box, the truck icon will always be visible. If checked, it will display the major version number of the currently linked PHP version."; +"prefs.display_full_php_version" = "Overal de volledige PHP-versie weergeven"; +"prefs.display_full_php_version_desc" = "Toon de volledige versie in plaats van alleen het belangrijkste versienummer in de menubalk en het vervolgkeuzemenu. (Dit kan ongewenst zijn op kleinere schermen, daarom is dit standaard uitgeschakeld.)"; -"prefs.display_full_php_version" = "Display full PHP version everywhere"; -"prefs.display_full_php_version_desc" = "Display the full version instead of the major version displayed in the menu bar and the dropdown menu. (This may be undesirable on smaller displays, so this is disabled by default.)"; +"prefs.auto_composer_update_title" = "Automatisch Composer dependencies bijwerken"; +"prefs.auto_composer_update_desc" = "Als deze optie is ingeschakeld, wordt Composer automatisch gevraagd om `composer global update` uit te voeren wanneer je tussen verschillende PHP-versies schakelt. Je kunt zien welke wijzigingen worden aangebracht, of dit mislukt."; -"prefs.auto_composer_update_title" = "Automatically update global dependencies"; -"prefs.auto_composer_update_desc" = "When checked, will automatically ask Composer to run `composer global update` whenever you switch between different PHP versions. You will be able to see what changes are being made, or should this fail."; +"prefs.open_protocol_title" = "Toestaan van third-party integraties"; +"prefs.open_protocol_desc" = "Als deze optie is ingeschakeld, kan de interactie met externe hulpprogramma's werken (zoals Alfred, Raycast). Als je dit uitschakelt, ontvangt PHP Monitor nog steeds de opdrachten, maar voert deze niet uit."; -"prefs.open_protocol_title" = "Allow third-party integrations"; -"prefs.open_protocol_desc" = "When checked, this will allow the interaction with third party utilities to work (e.g. Alfred, Raycast). If you disable this, PHP Monitor will still receive the commands, but will not act upon them."; +"prefs.automatic_update_check_title" = "Automatisch controleren op updates"; +"prefs.automatic_update_check_desc" = "Als deze optie is ingeschakeld, controleert PHP Monitor automatisch of er een nieuwere versie beschikbaar is en geeft je een melding als dat het geval is."; -"prefs.automatic_update_check_title" = "Automatically check for updates"; -"prefs.automatic_update_check_desc" = "When checked, PHP Monitor will automatically check if there is a newer version available, and notify you if that is the case."; +"prefs.php_doctor_suggestions_title" = "Altijd suggesties tonen"; +"prefs.php_doctor_suggestions_desc" = "Als je dit item uitvinkt, worden er geen suggesties van PHP Doctor weergegeven in het menu van PHP Monitor. Houd er rekening mee dat PHP Doctor niet wordt weergegeven als er geen aanbevelingen zijn."; -"prefs.php_doctor_suggestions_title" = "Always show suggestions"; -"prefs.php_doctor_suggestions_desc" = "If you uncheck this item, no PHP Doctor suggestions will appear in PHP Monitor's menu. Keep in mind that PHP Doctor will not appear if there are no recommendations."; - -"prefs.shortcut_set" = "Set global shortcut"; -"prefs.shortcut_listening" = ""; -"prefs.shortcut_clear" = "Clear"; -"prefs.shortcut_desc" = "If a shortcut combination is set up, you can toggle PHP Monitor wherever you are by pressing the key combination you chose. (Cancel choosing a shortcut by pressing the spacebar.)"; +"prefs.shortcut_set" = "Stel een globale sneltoets in"; +"prefs.shortcut_listening" = ""; +"prefs.shortcut_clear" = "Wissen"; +"prefs.shortcut_desc" = "Als er een sneltoetscombinatie is ingesteld, kun je PHP Monitor overal in- of uitschakelen door de toetscombinatie in te drukken die je hebt gekozen. (Annuleer het kiezen van een sneltoets door op de spatiebalk te drukken.)"; -"prefs.notify_about_version_change_desc" = "Displays a notification whenever the active PHP version changes."; -"prefs.notify_about_version_change" = "Notify about PHP version switch"; +"prefs.notify_about_version_change_desc" = "Toont een melding telkens wanneer de actieve PHP-versie verandert."; +"prefs.notify_about_version_change" = "Melding bij overschakelen PHP-versie"; -"prefs.notify_about_php_fpm_change_desc" = "Displays a notification whenever the active PHP-FPM process has restarted due to a configuration change."; -"prefs.notify_about_php_fpm_change" = "Notify about PHP-FPM restart"; +"prefs.notify_about_php_fpm_change_desc" = "Toont een melding telkens wanneer het actieve PHP-FPM-proces opnieuw is gestart vanwege een configuratiewijziging."; +"prefs.notify_about_php_fpm_change" = "Melding bij herstart PHP-FPM"; -"prefs.notify_about_services_desc" = "Displays a notification whenever any of the Homebrew services (installed and configured by Valet) have been restarted or stopped."; -"prefs.notify_about_services" = "Notify about services status"; +"prefs.notify_about_services_desc" = "Toont een melding telkens wanneer een van de Homebrew-services (geïnstalleerd en geconfigureerd door Valet) opnieuw is gestart of gestopt."; +"prefs.notify_about_services" = "Melding over status van services"; -"prefs.notify_about_presets_desc" = "Displays a notification whenever a preset has been successfully applied or reverted."; -"prefs.notify_about_presets" = "Notify about applied presets"; +"prefs.notify_about_presets_desc" = "Toont een melding telkens wanneer een preset succesvol is toegepast of ongedaan gemaakt."; +"prefs.notify_about_presets" = "Melding over toegepaste presets"; -"prefs.notify_about_secure_status_desc" = "Displays a notification when a domain has been secured or unsecured."; -"prefs.notify_about_secure_status" = "Notify about secure/unsecure status"; +"prefs.notify_about_secure_status_desc" = "Toont een melding wanneer een domein is beveiligd of niet beveiligd."; +"prefs.notify_about_secure_status" = "Melding over beveiligingsstatus"; -"prefs.notify_about_composer_success_desc" = "Displays a notification when the global Composer configuration was successfully updated."; -"prefs.notify_about_composer_success" = "Notify about global composer update"; +"prefs.notify_about_composer_success_desc" = "Toont een melding wanneer de globale Composer-configuratie met succes is bijgewerkt."; +"prefs.notify_about_composer_success" = "Melding over update van Composer"; -"prefs.warn_about_non_standard_tld_desc" = "If you use a non-standard TLD, you may not wish to get repeated notifications about this."; -"prefs.warn_about_non_standard_tld" = "Warn about non-standard TLD"; +"prefs.warn_about_non_standard_tld_desc" = "Als je een niet-standaard TLD gebruikt, wil je mogelijk geen herhaalde meldingen hierover ontvangen."; +"prefs.warn_about_non_standard_tld" = "Waarschuwen bij niet-standaard TLD"; -"prefs.display_global_version_switcher_desc" = "If disabled, you will not be able to change the globally linked PHP version via the main menu."; -"prefs.display_global_version_switcher" = "PHP Switcher"; +"prefs.display_global_version_switcher_desc" = "Indien uitgeschakeld, kunt u de globaal gekoppelde PHP-versie niet wijzigen via het hoofdmenu."; +"prefs.display_global_version_switcher" = "PHP switcher"; -"prefs.display_services_manager_desc" = "If disabled, you will not be able to see, start or stop individual services. (If any services are disabled, you will not be easily able to see that this is the case.)"; +"prefs.display_services_manager_desc" = "Indien uitgeschakeld, kunt u geen individuele services zien, starten of stoppen. (Als er services zijn uitgeschakeld, zult u niet gemakkelijk kunnen zien dat dit het geval is.)"; "prefs.display_services_manager" = "Services Manager"; -"prefs.display_valet_integration_desc" = "If disabled, you will not be able to locate the main Valet folder or open the list of domains."; -"prefs.display_valet_integration" = "Valet Integration"; +"prefs.display_valet_integration_desc" = "Indien uitgeschakeld, kunt u de hoofdmap van Valet niet vinden of de lijst met domeinen openen."; +"prefs.display_valet_integration" = "Valet-integratie"; -"prefs.display_php_config_finder_desc" = "If disabled, you will not be able to easily locate your PHP configuration files and/or generate a phpinfo() dump."; +"prefs.display_php_config_finder_desc" = "Indien uitgeschakeld, kunt u uw PHP-configuratiebestanden niet gemakkelijk vinden en/of een phpinfo()-dump genereren."; "prefs.display_php_config_finder" = "PHP Config Finder"; -"prefs.display_composer_toolkit_desc" = "If disabled, you will not be able to invoke Composer via the main menu. The automatic Composer update after switching preference is unaffected by this change."; +"prefs.display_composer_toolkit_desc" = "Indien uitgeschakeld, kunt u Composer niet oproepen via het hoofdmenu. De automatische Composer-update na het wijzigen van de voorkeur wordt niet beïnvloed door deze wijziging."; "prefs.display_composer_toolkit" = "Composer Toolkit"; -"prefs.display_limits_widget_desc" = "If disabled, you will not be able to see the limits widget (memory, POST, upload) in the main menu."; -"prefs.display_limits_widget" = "Limits Widget"; +"prefs.display_limits_widget_desc" = "Indien uitgeschakeld, kunt u de limieten-widget (geheugen, POST, upload) niet zien in het hoofdmenu."; +"prefs.display_limits_widget" = "Limieten-widget"; -"prefs.display_extensions_desc" = "If disabled, you will not be able to easily toggle extensions via the main menu."; -"prefs.display_extensions" = "Extensions"; +"prefs.display_extensions_desc" = "Indien uitgeschakeld, kunt u extensies niet gemakkelijk in- of uitschakelen via het hoofdmenu."; +"prefs.display_extensions" = "Extensies"; -"prefs.display_presets_desc" = "If disabled, you will not be able to apply or revert PHP configuration presets."; +"prefs.display_presets_desc" = "Indien uitgeschakeld, kunt u geen PHP presets toepassen of ongedaan maken."; "prefs.display_presets" = "Presets"; -"prefs.display_misc_desc" = "If disabled, you will not be able to access the First Aid & Services menu."; -"prefs.display_misc" = "First Aid & Services Menu"; +"prefs.display_misc_desc" = "Indien uitgeschakeld, kunt u geen toegang krijgen tot het menu First Aid & Services."; +"prefs.display_misc" = "First & Services-menu"; + // NOTIFICATIONS -"notification.version_changed_title" = "PHP %@ now active"; -"notification.version_changed_desc" = "PHP Monitor has switched to PHP %@."; +"notification.version_changed_title" = "PHP %@ nu actief"; +"notification.version_changed_desc" = "PHP Monitor is overgeschakeld naar PHP %@."; -"notification.php_fpm_restarted" = "PHP-FPM automatically restarted"; -"notification.php_fpm_restarted_desc" = "You toggled an extension, so PHP-FPM was automatically restarted."; +"notification.php_fpm_restarted" = "PHP-FPM automatisch herstart"; +"notification.php_fpm_restarted_desc" = "U heeft een extensie omgeschakeld, dus PHP-FPM is automatisch herstart."; -"notification.services_stopped" = "Valet services stopped"; -"notification.services_stopped_desc" = "All services have been successfully stopped."; +"notification.services_stopped" = "Valet-services gestopt"; +"notification.services_stopped_desc" = "Alle services zijn succesvol gestopt."; -"notification.services_restarted" = "Valet services restarted"; -"notification.services_restarted_desc" = "All services have been successfully restarted."; +"notification.services_restarted" = "Valet-services herstart"; +"notification.services_restarted_desc" = "Alle services zijn succesvol herstart."; -"notification.preset_applied_title" = "Preset applied"; -"notification.preset_applied_desc" = "The preset '%@' has been successfully applied."; +"notification.preset_applied_title" = "Preset toegepast"; +"notification.preset_applied_desc" = "De preset '%@' is succesvol toegepast."; -"notification.preset_reverted_title" = "Preset reverted"; -"notification.preset_reverted_desc" = "The last preset you applied has been undone. Your previous configuration is now active."; +"notification.preset_reverted_title" = "Preset ongedaan gemaakt"; +"notification.preset_reverted_desc" = "De laatste presets die u heeft toegepast, is ongedaan gemaakt. Uw vorige configuratie is nu actief."; -"notification.phpmon_updated.title" = "PHP Monitor has been updated!"; -"notification.phpmon_updated.desc" = "You are now running PHP Monitor v%@. Thanks for staying up-to-date!"; -"notification.phpmon_updated_dev.desc" = "PHP Monitor v%@ (build %@) is now installed and active."; +"notification.phpmon_updated.title" = "PHP Monitor is bijgewerkt!"; +"notification.phpmon_updated.desc" = "U gebruikt nu PHP Monitor v%@. Bedankt dat u up-to-date blijft!"; +"notification.phpmon_updated_dev.desc" = "PHP Monitor v%@ (build %@) is nu geïnstalleerd en actief."; // Composer Update -"alert.composer_missing.title" = "Composer not found!"; -"alert.composer_missing.subtitle" = "PHP Monitor could not find Composer. Make sure that Composer is installed and try again."; -"alert.composer_missing.desc" = "PHP Monitor assumes that Composer is located in either: +"alert.composer_missing.title" = "Composer niet gevonden!"; +"alert.composer_missing.subtitle" = "PHP Monitor kon Composer niet vinden. Zorg ervoor dat Composer is geïnstalleerd en probeer het opnieuw."; +"alert.composer_missing.desc" = "PHP Monitor gaat ervan uit dat Composer zich bevindt in een van de volgende locaties: • `/usr/local/bin/composer` • `/opt/homebrew/bin/composer` -Make sure you have it installed in one of these locations, or make a symlink if you have Composer installed somewhere else."; +Zorg ervoor dat u Composer geïnstalleerd heeft op een van deze locaties, of maak een symbolische koppeling (symlink) als u Composer ergens anders heeft geïnstalleerd."; -"alert.composer_progress.title" = "Updating global dependencies..."; -"alert.composer_progress.info" = "You can see the progress in the terminal output below."; +"alert.composer_progress.title" = "Bezig met bijwerken van globale afhankelijkheden..."; +"alert.composer_progress.info" = "U kunt de voortgang zien in de uitvoer van de terminal hieronder."; -"alert.composer_failure.title" = "Something went wrong!"; -"alert.composer_failure.info" = "Your global Composer dependencies could not be updated. -You can find more information in the terminal output below. You’ll have to fix this -problem manually, using your own Terminal app (this just shows you the output)."; +"alert.composer_failure.title" = "Er is iets misgegaan!"; +"alert.composer_failure.info" = "Uw globale Composer-afhankelijkheden konden niet worden bijgewerkt. +U kunt meer informatie vinden in de uitvoer van de terminal hieronder. U zult dit +probleem handmatig moeten oplossen met behulp van uw eigen Terminal-app (dit toont alleen de uitvoer)."; -"alert.composer_success.title" = "Composer’s done updating!"; -"alert.composer_success.info" = "Your global Composer dependencies have been successfully updated."; +"alert.composer_success.title" = "Composer is klaar met bijwerken!"; +"alert.composer_success.info" = "Uw globale Composer-afhankelijkheden zijn succesvol bijgewerkt."; // Composer Version -"alert.composer_php_isolated.desc" = "This site has been isolated, which means that Valet serves PHP %@ for this site specifically. The global version is currently PHP %@."; -"alert.composer_php_requirement.title" = "'%@' requires PHP %@."; -"alert.composer_php_requirement.unable_to_determine" = "Unable to determine PHP requirement"; -"alert.composer_php_requirement.type.unknown" = "PHP Monitor was unable to determine which version of PHP is required for this domain. The constraint may be determined if you have a `composer.json` or a `.valetphprc` file in your project's directory."; -"alert.composer_php_requirement.type.require" = "This required PHP version was determined by checking the `require` field in the `composer.json` file when the site list was last refreshed."; -"alert.composer_php_requirement.type.platform" = "This required PHP version was determined by checking the `platform` field in the `composer.json` file when the site list was last refreshed."; -"alert.composer_php_requirement.type.valetphprc" = "This required PHP version was determined by checking the .valetphprc file in your project's directory."; -"alert.composer_php_requirement.type.valetrc" = "This required PHP version was determined by checking the .valetrc file in your project's directory."; -"alert.unable_to_determine_is_fine" = "If you have a simple project, there may not be a specified PHP version set as a requirement. In that case, you are free to ignore this warning."; -"alert.php_version_ideal" = "The currently active PHP version is ideal for this site."; -"alert.php_version_incorrect" = "The currently active PHP version does not match the required constraint set for this site."; -"alert.php_suggestions" = "There may be a different PHP version which is closer to the constraint."; +"alert.composer_php_isolated.desc" = "Deze site is geïsoleerd, wat betekent dat Valet specifiek PHP %@ gebruikt voor deze site. De huidige globale versie is momenteel PHP %@."; +"alert.composer_php_requirement.title" = "'%@' vereist PHP %@."; +"alert.composer_php_requirement.unable_to_determine" = "Kan PHP-vereiste niet bepalen"; +"alert.composer_php_requirement.type.unknown" = "PHP Monitor kon niet bepalen welke versie van PHP nodig is voor dit domein. De beperking kan worden bepaald als u een `composer.json` of een `.valetphprc`-bestand in de map van uw project heeft."; +"alert.composer_php_requirement.type.require" = "Deze vereiste PHP-versie is bepaald door het controleren van het `require`-veld in het `composer.json`-bestand toen de lijst met sites voor het laatst werd vernieuwd."; +"alert.composer_php_requirement.type.platform" = "Deze vereiste PHP-versie is bepaald door het controleren van het `platform`-veld in het `composer.json`-bestand toen de lijst met sites voor het laatst werd vernieuwd."; +"alert.composer_php_requirement.type.valetphprc" = "Deze vereiste PHP-versie is bepaald door het controleren van het `.valetphprc` bestand in de map van uw project."; +"alert.composer_php_requirement.type.valetrc" = "Deze vereiste PHP-versie is bepaald door het controleren van het `.valetrc` bestand in de map van uw project."; +"alert.unable_to_determine_is_fine" = "Als u een eenvoudig project heeft, is er mogelijk geen specifieke PHP-versie ingesteld als vereiste. In dat geval kunt u deze waarschuwing negeren."; +"alert.php_version_ideal" = "De momenteel actieve PHP-versie is ideaal voor deze site."; +"alert.php_version_incorrect" = "De momenteel actieve PHP-versie komt niet overeen met de gewenste versie voor deze site."; +"alert.php_suggestions" = "Er kan een andere PHP-versie zijn die dichter bij de gewenste versie ligt."; // Suggest Fix My Valet -"alert.php_switch_failed.title" = "Switching to PHP %@ seems to have failed."; -"alert.php_switch_failed.info" = "PHP Monitor has detected that PHP %@ is not active after completing its switching procedure. You can try to run \"Fix My Valet\" and switch again after that. Do you want to try this fix?"; -"alert.php_switch_failed.desc" = "First off, you should try \"Fix My Valet\" if you haven't tried it yet. If PHP Monitor remains unable to change the active PHP version even after that, you may need to upgrade Valet and the Homebrew packages on your system. You can do this by running `brew update && brew upgrade` as well as upgrading Valet by running `composer global update && valet install`."; -"alert.php_switch_failed.confirm" = "Yes, run \"Fix My Valet\""; -"alert.php_switch_failed.cancel" = "Do Not Run"; +"alert.php_switch_failed.title" = "Het lijkt erop dat het overschakelen naar PHP %@ is mislukt."; +"alert.php_switch_failed.info" = "PHP Monitor heeft gedetecteerd dat PHP %@ niet actief is na het voltooien van de overschakelprocedure. U kunt proberen \"Fix My Valet\" uit te voeren en daarna opnieuw overschakelen. Wilt u deze oplossing proberen?"; +"alert.php_switch_failed.desc" = "Allereerst moet u \"Fix My Valet\" proberen als u dat nog niet heeft gedaan. Als PHP Monitor nog steeds niet in staat is om de actieve PHP-versie te wijzigen, moet u mogelijk Valet en de Homebrew-pakketten op uw systeem upgraden. U kunt dit doen door `brew update && brew upgrade` uit te voeren en Valet te upgraden door `composer global update && valet install` uit te voeren."; +"alert.php_switch_failed.confirm" = "Ja, voer \"Fix My Valet\" uit"; +"alert.php_switch_failed.cancel" = "Niet uitvoeren"; // PHP Formula Missing -"alert.php_formula_missing.title" = "Oops! The `php` formula must be installed for Fix My Valet..."; -"alert.php_formula_missing.info" = "It seems that you do not have the `php` formula installed, which prevents PHP Monitor from running Fix My Valet. Please install it using `brew install php`, restart PHP Monitor and try again."; +"alert.php_formula_missing.title" = "Oeps! De `php`-formule moet geïnstalleerd zijn voor Fix My Valet..."; +"alert.php_formula_missing.info" = "Het lijkt erop dat u de `php`-formule niet geïnstalleerd heeft, waardoor PHP Monitor Fix My Valet niet kan uitvoeren. Installeer deze met behulp van `brew install php`, herstart PHP Monitor en probeer het opnieuw."; // Fix My Valet Started -"alert.fix_my_valet.title" = "Having issues? Fix My Valet is ready to commence!"; -"alert.fix_my_valet.info" = "This can take a while. Please be patient.\n\nWhen this is done, all other services will be halted and PHP %@ will be linked. You will be able to switch to your desired version of PHP once this operation has completed.\n\n(You'll get another alert once Fix My Valet is done.)"; -"alert.fix_my_valet.ok" = "Continue"; -"alert.fix_my_valet.cancel" = "Abort"; +"alert.fix_my_valet.title" = "Problemen? Fix My Valet is klaar om te starten!"; +"alert.fix_my_valet.info" = "Dit kan even duren. Wees geduldig.\n\nWanneer dit is voltooid, worden alle andere services gestopt en wordt PHP %@ gekoppeld. U kunt overschakelen naar uw gewenste versie van PHP zodra deze operatie is voltooid.\n\n(U ontvangt een andere melding zodra Fix My Valet klaar is.)"; +"alert.fix_my_valet.ok" = "Doorgaan"; +"alert.fix_my_valet.cancel" = "Afbreken"; // Fix My Valet Done -"alert.fix_my_valet_done.title" = "Fix My Valet has completed its operations."; -"alert.fix_my_valet_done.subtitle" = "All appropriate services have been stopped and the correct ones restarted, and the latest version of PHP should now be active. You can now try switching to another version of PHP."; -"alert.fix_my_valet_done.stay" = "Stay on PHP %@"; -"alert.fix_my_valet_done.switch_back" = "Switch back to PHP %@"; -"alert.fix_my_valet_done.desc" = "If visiting sites still does not work, you may try running `valet install` again, this can fix a 502 issue (Bad Gateway).\n\nIf Valet is broken and you cannot run `valet install`, you may need to run `composer global update`. Please consult the FAQ on GitHub if you have further issues."; +"alert.fix_my_valet_done.title" = "Fix My Valet heeft de operaties voltooid."; +"alert.fix_my_valet_done.subtitle" = "Alle relevante services zijn gestopt en opnieuw gestart, en de nieuwste versie van PHP zou nu actief moeten zijn. U kunt nu proberen over te schakelen naar een andere versie van PHP."; +"alert.fix_my_valet_done.stay" = "Blijf op PHP %@"; +"alert.fix_my_valet_done.switch_back" = "Schakel terug naar PHP %@"; +"alert.fix_my_valet_done.desc" = "Als het nog steeds niet werkt bij het bezoeken van sites, kunt u `valet install` opnieuw proberen uit te voeren. Dit kan een 502-fout (Bad Gateway) verhelpen.\n\nAls Valet defect is en u `valet install` niet kunt uitvoeren, moet u mogelijk `composer global update` uitvoeren. Raadpleeg de FAQ op GitHub als u nog andere problemen heeft."; // Restore Homebrew Permissions -"alert.fix_homebrew_permissions.title" = "About \"Restore Homebrew Permissions\""; -"alert.fix_homebrew_permissions.subtitle" = "This feature was created so you can run `brew upgrade` or `brew cleanup` without permission issues.\n\n(You will be notified when this fix has been applied.)"; -"alert.fix_homebrew_permissions.desc" = "This will require administrative privileges, because PHP Monitor will restore your ownership of the files and folders that are currently owned by the `root` user, due to Valet services running as root."; -"alert.fix_homebrew_permissions.ok" = "Restore Permissions"; -"alert.fix_homebrew_permissions.cancel" = "Cancel"; +"alert.fix_homebrew_permissions.title" = "Over \"Herstel Homebrew-machtigingen\""; +"alert.fix_homebrew_permissions.subtitle" = "Deze functie is gemaakt zodat u `brew upgrade` of `brew cleanup` kunt uitvoeren zonder machtigingsproblemen.\n\n(U wordt op de hoogte gesteld wanneer deze oplossing is toegepast.)"; +"alert.fix_homebrew_permissions.desc" = "Hiervoor zijn beheerdersrechten vereist, omdat PHP Monitor uw eigendom van de bestanden en mappen zal herstellen die momenteel eigendom zijn van de gebruiker 'root', vanwege Valet-services die als root worden uitgevoerd."; +"alert.fix_homebrew_permissions.ok" = "Machtigingen herstellen"; +"alert.fix_homebrew_permissions.cancel" = "Annuleren"; -"alert.fix_homebrew_permissions_done.title" = "All file and folder permissions for Valet's dependencies have been restored."; -"alert.fix_homebrew_permissions_done.subtitle" = "Because of this, all of Valet's services are currently no longer running. You can now interact with Homebrew, but your Valet sites will be unavailable as all services are disabled."; -"alert.fix_homebrew_permissions_done.desc" = "When you are done with Homebrew (after running `brew upgrade`, for example) you should restart PHP Monitor and select \"Restart Valet Services\" if you want Valet to work again. It is always recommended to restart PHP Monitor whenever you upgrade PHP versions with `brew upgrade`, or things might break."; +"alert.fix_homebrew_permissions_done.title" = "Alle bestands- en mapmachtigingen voor de afhankelijkheden van Valet zijn hersteld."; +"alert.fix_homebrew_permissions_done.subtitle" = "Hierdoor worden alle services van Valet momenteel niet uitgevoerd. U kunt nu met Homebrew werken, maar uw Valet-sites zijn niet beschikbaar omdat alle services zijn uitgeschakeld."; +"alert.fix_homebrew_permissions_done.desc" = "Wanneer u klaar bent met Homebrew (bijvoorbeeld na het uitvoeren van `brew upgrade`), moet u PHP Monitor opnieuw starten en \"Valet-services herstarten\" selecteren als u wilt dat Valet weer werkt. Het is altijd aanbevolen om PHP Monitor opnieuw te starten wanneer u PHP-versies upgrade met `brew upgrade`, anders kan er iets misgaan."; // PHP FPM Broken -"alert.php_fpm_broken.title" = "Your PHP-FPM configuration is not pointing at the Valet socket!"; -"alert.php_fpm_broken.info" = "PHP Monitor has determined that there are issues with your PHP-FPM config. This will result in '502 Bad Gateway' responses if you visit websites linked via Valet."; -"alert.php_fpm_broken.description" = "If it's been a while, you can usually fix this by running `valet install`, which updates your PHP-FPM configuration.\n\nIf you are seeing this message and you are trying to run a pre-release version of PHP, it is possible that Valet does not support this pre-release version of PHP yet.\n\nYou may need to upgrade your installation of Laravel Valet to at least v3.1.11, after that you should run `valet install`. More information here: https://phpmon.app/prerelease-php"; +"alert.php_fpm_broken.title" = "Uw PHP-FPM-configuratie verwijst niet naar de Valet-socket!"; +"alert.php_fpm_broken.info" = "PHP Monitor heeft vastgesteld dat er problemen zijn met uw PHP-FPM-configuratie. Dit zal resulteren in '502 Bad Gateway'-fouten als u websites bezoekt die via Valet zijn gekoppeld."; +"alert.php_fpm_broken.description" = "Als het al een tijdje geleden is, kunt u dit meestal oplossen door `valet install` uit te voeren, waarmee uw PHP-FPM-configuratie wordt bijgewerkt.\n\nAls u dit bericht ziet en u probeert een pre-release versie van PHP uit te voeren, is het mogelijk dat Valet deze pre-release versie van PHP nog niet ondersteunt.\n\nU moet mogelijk uw installatie van Laravel Valet upgraden naar minimaal v3.1.11 en daarna `valet install` uitvoeren. Meer informatie hier: https://phpmon.app/prerelease-php"; // PHP Monitor Cannot Start -"alert.cannot_start.title" = "PHP Monitor cannot start due to a problem with your system configuration"; -"alert.cannot_start.subtitle" = "The issue you were just notified about is keeping PHP Monitor from functioning correctly."; -"alert.cannot_start.description" = "You might not need to quit PHP Monitor and restart it. If you have fixed the issue (or don't remember what the exact issue is) you can click on Retry, which will have PHP Monitor retry the startup checks."; -"alert.cannot_start.close" = "Quit"; -"alert.cannot_start.retry" = "Retry"; +"alert.cannot_start.title" = "PHP Monitor kan niet starten vanwege een probleem met uw systeemconfiguratie"; +"alert.cannot_start.subtitle" = "Het probleem waarover u zojuist bent geïnformeerd, voorkomt dat PHP Monitor correct functioneert."; +"alert.cannot_start.description" = "Mogelijk hoeft u PHP Monitor niet te sluiten en opnieuw te starten. Als u het probleem hebt opgelost (of niet meer weet wat het exacte probleem is), kunt u op Opnieuw proberen klikken, waardoor PHP Monitor de opstartcontroles opnieuw zal uitvoeren."; +"alert.cannot_start.close" = "Afsluiten"; +"alert.cannot_start.retry" = "Opnieuw proberen"; // PHP alias issue -"alert.php_alias_conflict.title" = "Homebrew `php` formula alias conflict detected"; -"alert.php_alias_conflict.info" = "PHP Monitor has detected conflicting `php` aliases in your Homebrew setup, both of which have been detected as installed.\n\nThis will likely result in failed linking when switching PHP versions, and will break PHP Monitor functionality.\n\nFor more information, please visit: https://github.com/nicoverbruggen/phpmon/issues/54"; +"alert.php_alias_conflict.title" = "Conflict gedetecteerd met de alias voor Homebrew `php` formule"; +"alert.php_alias_conflict.info" = "PHP Monitor heeft conflicterende `php` aliassen gedetecteerd in uw Homebrew-configuratie, waarvan beide als geïnstalleerd zijn gedetecteerd.\n\nDit zal waarschijnlijk leiden tot mislukte koppelingen bij het overschakelen van PHP-versies en zal de functionaliteit van PHP Monitor verbreken.\n\nVoor meer informatie kunt u terecht op: https://github.com/nicoverbruggen/phpmon/issues/54"; -"alert.min_valet_version.title" = "The installed version of Valet does not meet the minimum version requirement. PHP Monitor may not function as expected!"; -"alert.min_valet_version.info" = "You are currently running Valet %@. +"alert.min_valet_version.title" = "De geïnstalleerde versie van Valet voldoet niet aan de minimale versievereiste. PHP Monitor functioneert mogelijk niet zoals verwacht!"; +"alert.min_valet_version.info" = "U gebruikt momenteel Valet %@. -For optimal support of the latest versions of PHP and proper version switching, it is recommended that you update to version %@, which is the minimum requirement for this version of PHP Monitor. +Voor optimale ondersteuning van de nieuwste versies van PHP en correcte versie-overschakeling wordt aanbevolen om te upgraden naar versie %@, wat de minimale vereiste is voor deze versie van PHP Monitor. -You can do this by running `composer global update` in your terminal. After that, run `valet install` again. For best results, restart PHP Monitor after that. Until this is resolved, PHP Monitor may not behave as expected."; +U kunt dit doen door `composer global update` uit te voeren in uw terminal. Voer daarna opnieuw `valet install` uit. Voor het beste resultaat, herstart u PHP Monitor daarna. Tot dit is opgelost, kan PHP Monitor mogelijk niet zoals verwacht functioneren."; // Preset text description -"alert.preset_description.switcher_version" = "Switches to PHP %@.\n\n"; -"alert.preset_description.applying_extensions" = "Applies the following extensions:\n"; -"alert.preset_description.applying_config" = "Applies the following configuration values:\n"; -"alert.preset_description.enabled" = "enabled"; -"alert.preset_description.disabled" = "disabled"; -"alert.preset_description.empty" = "(empty)"; +"alert.preset_description.switcher_version" = "Schakelt over naar PHP %@.\n\n"; +"alert.preset_description.applying_extensions" = "Past de volgende extensies toe:\n"; +"alert.preset_description.applying_config" = "Past de volgende configuratiewaarden toe:\n"; +"alert.preset_description.enabled" = "ingeschakeld"; +"alert.preset_description.disabled" = "uitgeschakeld"; +"alert.preset_description.empty" = "(leeg)"; // PHP version unavailable -"alert.php_switch_unavailable.title" = "Unsupported PHP version"; -"alert.php_switch_unavailable.subtitle" = "PHP Monitor can't switch to PHP %@, as it may not be installed or available. Applying this preset has been cancelled."; -"alert.php_switch_unavailable.info" = "Please make sure PHP %@ is installed and you can switch to it in the dropdown. Currently supported versions include PHP: %@."; +"alert.php_switch_unavailable.title" = "Niet-ondersteunde PHP-versie"; +"alert.php_switch_unavailable.subtitle" = "PHP Monitor kan niet overschakelen naar PHP %@, omdat het mogelijk niet is geïnstalleerd of beschikbaar is. Het toepassen van deze voorinstelling is geannuleerd."; +"alert.php_switch_unavailable.info" = "Zorg ervoor dat PHP %@ is geïnstalleerd en dat u kunt overschakelen naar deze versie in de vervolgkeuzelijst. Momenteel ondersteunde versies zijn onder andere PHP: %@."; "alert.php_switch_unavailable.ok" = "OK"; // Service error -"alert.service_error.title" = "The service '%@' is reporting an error!"; -"alert.service_error.subtitle.error_log" = "This means that the service '%@' isn't running. This may prevent Valet from working correctly. This service has an associated log file that you might want to check, however."; -"alert.service_error.subtitle.no_error_log" = "This means that the service '%@' isn't running. This may prevent Valet from working correctly. Unfortunately, there is no associated log file for this service."; -"alert.service_error.extra" = "You may also wish to follow common troubleshooting steps. To learn more, press the '?' button in the services section in PHP Monitor."; +"alert.service_error.title" = "De service '%@' rapporteert een fout!"; +"alert.service_error.subtitle.error_log" = "Dit betekent dat de service '%@' niet actief is. Dit kan ervoor zorgen dat Valet niet correct werkt. Deze service heeft een bijbehorend logbestand dat u mogelijk wilt controleren."; +"alert.service_error.subtitle.no_error_log" = "Dit betekent dat de service '%@' niet actief is. Dit kan ervoor zorgen dat Valet niet correct werkt. Helaas is er geen bijbehorend logbestand voor deze service."; +"alert.service_error.extra" = "U kunt ook de veelvoorkomende probleemoplossingsstappen volgen. Voor meer informatie drukt u op de '?' knop in het servicesgedeelte in PHP Monitor."; -"alert.service_error.button.show_log" = "View Error Log"; -"alert.service_error.button.close" = "Close"; +"alert.service_error.button.show_log" = "Bekijk foutenlogboek"; +"alert.service_error.button.close" = "Sluiten"; // Composer issues -"alert.global_composer_platform_issues.title" = "Composer detected issues in your platform"; -"alert.global_composer_platform_issues.subtitle" = "The version of PHP you switched to is too old for the global Composer dependencies you have installed. These dependencies will need to be updated."; -"alert.global_composer_platform_issues.desc" = "The easiest way to prevent this issue from occurring in the future is to switch to the oldest PHP version you have installed and to run `composer global update` again. \n\nAlternatively, you can choose the 'Automatically update global dependencies' option in Preferences to avoid this issue as well.\n\nIf you keep seeing this message even after attempting to update those global dependencies, you may wish to look at your global composer configuration file, located in `~/.composer/composer.json`."; -"alert.global_composer_platform_issues.buttons.update" = "Update Global Dependencies"; -"alert.global_composer_platform_issues.buttons.quit" = "Quit PHP Monitor"; +"alert.global_composer_platform_issues.title" = "Composer heeft problemen gedetecteerd in uw platform"; +"alert.global_composer_platform_issues.subtitle" = "De versie van PHP waar u naar hebt overgeschakeld is te oud voor de globale Composer dependencies die u hebt geïnstalleerd. Deze dependencies moeten worden bijgewerkt."; +"alert.global_composer_platform_issues.desc" = "De eenvoudigste manier om te voorkomen dat dit probleem zich in de toekomst voordoet, is door over te schakelen naar de oudste PHP-versie die u hebt geïnstalleerd en opnieuw `composer global update` uit te voeren. \n\nAls alternatief kunt u ook de optie 'Automatisch Composer dependencies bijwerken' kiezen bij voorkeuren om dit probleem te voorkomen.\n\nAls u dit bericht blijft zien, zelfs nadat u hebt geprobeerd die globale dependencies bij te werken, bekijkt u best uw configuratiebestand, dat zich bevindt in `~/.composer/composer.json`."; +"alert.global_composer_platform_issues.buttons.update" = "Globale dependencies bijwerken"; +"alert.global_composer_platform_issues.buttons.quit" = "PHP Monitor afsluiten"; // Revert -"alert.revert_description.title" = "Revert Configuration?"; -"alert.revert_description.subtitle" = "PHP Monitor can revert to the previous configuration that was active. Here's what will be applied: \n\n%@"; -"alert.revert_description.ok" = "Revert"; -"alert.revert_description.cancel" = "Cancel"; +"alert.revert_description.title" = "Configuratie herstellen?"; +"alert.revert_description.subtitle" = "PHP Monitor kan teruggaan naar de vorige actieve configuratie. Dit is wat zal worden toegepast: \n\n%@"; +"alert.revert_description.ok" = "Herstellen"; +"alert.revert_description.cancel" = "Annuleren"; // STARTUP -/// 0. Architecture mismatch - -"alert.homebrew_missing.title" = "PHP Monitor cannot start!"; -"alert.homebrew_missing.subtitle" = "A working Homebrew binary could not be found in the usual location. Please restart the app after fixing this issue."; -"alert.homebrew_missing.info" = "You are running PHP Monitor with the following architecture: %@. As a result, a working Homebrew binary is expected in `%@`, but was not found. This is why PHP Monitor cannot work.\n\nIf you have not installed Homebrew yet, please do so. If you are on Apple Silicon, make sure your Homebrew and PHP Monitor use the same architecture, by enabling or disabling Rosetta where needed."; - -"alert.homebrew_missing.quit" = "Quit"; +/// Architecture mismatch +"alert.homebrew_missing.title" = "PHP Monitor kan niet starten!"; +"alert.homebrew_missing.subtitle" = "Er kon geen werkende Homebrew-binair worden gevonden op de gebruikelijke locatie. Start de app opnieuw nadat u dit probleem hebt verholpen."; +"alert.homebrew_missing.info" = "U gebruikt PHP Monitor met de volgende architectuur: %@. Hierdoor wordt verwacht dat er een werkende Homebrew binary gevonden wordt in `%@`, maar deze is niet gevonden. Daarom kan PHP Monitor niet werken.\n\nAls u Homebrew nog niet hebt geïnstalleerd, doe dit dan nu. Als u gebruikmaakt van Apple Silicon, zorg er dan voor dat uw Homebrew en PHP Monitor dezelfde architectuur gebruiken door Rosetta in of uit te schakelen waar nodig."; +"alert.homebrew_missing.quit" = "Afsluiten"; /// PHP binary not found -"startup.errors.php_binary.title" = "PHP is not correctly installed"; -"startup.errors.php_binary.subtitle" = "You must install PHP via Homebrew. The app will not work correctly until you resolve this issue."; -"startup.errors.php_binary.desc" = "Usually running `brew link php` in your Terminal will resolve this issue.\n\nTo diagnose what is wrong, you can try running `which php` in your Terminal, it should return `%@`."; +"startup.errors.php_binary.title" = "PHP is niet correct geïnstalleerd"; +"startup.errors.php_binary.subtitle" = "U moet PHP installeren via Homebrew. De app werkt niet correct totdat u dit probleem oplost."; +"startup.errors.php_binary.desc" = "Meestal lost u dit probleem op door `brew link php` uit te voeren in uw Terminal.\n\nOm te achterhalen wat er mis is, kunt u proberen `which php` uit te voeren in uw Terminal. Het zou `%@` moeten retourneren."; /// PHP not found in /usr/local/opt or /opt/homebrew/opt -"startup.errors.php_opt.title" = "PHP is not correctly installed"; -"startup.errors.php_opt.subtitle" = "The PHP alias was not found in `%@`. The app will not work correctly until you resolve this issue."; -"startup.errors.php_opt.desc" = "If you already have the `php` formula installed, you may need to run `brew install php` in order for PHP Monitor to detect this installation."; +"startup.errors.php_opt.title" = "PHP is niet correct geïnstalleerd"; +"startup.errors.php_opt.subtitle" = "De PHP-alias is niet gevonden in `%@`. De app werkt niet correct totdat u dit probleem oplost."; +"startup.errors.php_opt.desc" = "Als u de `php` formule al hebt geïnstalleerd, moet u mogelijk `brew install php` uitvoeren zodat PHP Monitor deze installatie kan detecteren."; /// PHP binary is broken -"startup.errors.dyld_library.title" = "PHP is installed, but appears to be broken"; -"startup.errors.dyld_library.subtitle" = "When PHP Monitor is attempting to run commands, it is failing to do so correctly. This is usually an indicator of a broken PHP installation."; -"startup.errors.dyld_library.desc" = "Running `brew reinstall php && brew link php` in your Terminal may resolve this issue, so please give that a try."; +"startup.errors.dyld_library.title" = "PHP is geïnstalleerd, maar lijkt defect te zijn"; +"startup.errors.dyld_library.subtitle" = "Bij het uitvoeren van opdrachten slaagt PHP Monitor er niet in om dit correct te doen. Dit is meestal een indicatie van een defecte PHP-installatie."; +"startup.errors.dyld_library.desc" = "Het opnieuw installeren van PHP met `brew reinstall php && brew link php` in uw Terminal kan dit probleem verhelpen, dus probeer dat eens."; /// Valet is not installed -"startup.errors.valet_executable.title" = "Laravel Valet is not correctly installed"; -"startup.errors.valet_executable.subtitle" = "You must install Valet with Composer. The app will not work correctly until you resolve this issue."; -"startup.errors.valet_executable.desc" = "If you haven't installed Laravel Valet yet, please do so first. If you have it installed but are seeing this message anyway, then try running `which valet` in Terminal, it should return: `%@`."; +"startup.errors.valet_executable.title" = "Laravel Valet is niet correct geïnstalleerd"; +"startup.errors.valet_executable.subtitle" = "U moet Valet installeren met Composer. De app werkt niet correct totdat u dit probleem oplost."; +"startup.errors.valet_executable.desc" = "Als u Laravel Valet nog niet hebt geïnstalleerd, doe dit dan eerst. Als u het al hebt geïnstalleerd maar toch dit bericht ziet, probeer dan `which valet` uit te voeren in Terminal. Het zou `%@` moeten retourneren."; /// Valet configuration file missing or broken -"startup.errors.valet_json_invalid.title" = "Laravel Valet configuration file invalid or missing"; -"startup.errors.valet_json_invalid.subtitle" = "PHP Monitor needs to be able to read the configuration file. It appears the file is malformed or missing. Please check that it exists and is formatted correctly."; -"startup.errors.valet_json_invalid.desc" = "You can find the file at `~/.config/valet/config.json`. If Laravel Valet cannot parse the configuration file, running any `valet` command will usually automatically fix the JSON file. Try running `valet --version` to automatically fix the file."; +"startup.errors.valet_json_invalid.title" = "Laravel Valet configuratiebestand ongeldig of ontbreekt"; +"startup.errors.valet_json_invalid.subtitle" = "PHP Monitor moet in staat zijn om het configuratiebestand te lezen. Het lijkt erop dat het bestand onjuist is opgemaakt of ontbreekt. Controleer of het bestaat en correct is opgemaakt."; +"startup.errors.valet_json_invalid.desc" = "U kunt het bestand vinden op `~/.config/valet/config.json`. Als Laravel Valet het configuratiebestand niet kan parsen, zal het uitvoeren van een `valet`-opdracht meestal automatisch het JSON-bestand herstellen. Probeer `valet --version` uit te voeren om het bestand automatisch te herstellen."; /// Valet version not readable -"startup.errors.valet_version_unknown.title" = "Your Valet version could not be read"; -"startup.errors.valet_version_unknown.subtitle" = "Parsing the output of `valet --version` failed. Make sure your Valet installation works and is up-to-date."; -"startup.errors.valet_version_unknown.desc" = "Try running `valet --version` in a terminal to find out what's going on."; +"startup.errors.valet_version_unknown.title" = "Kan uw Valet-versie niet lezen"; +"startup.errors.valet_version_unknown.subtitle" = "Het parsen van de uitvoer van `valet --version` is mislukt. Zorg ervoor dat uw Valet-installatie werkt en up-to-date is."; +"startup.errors.valet_version_unknown.desc" = "Probeer `valet --version` uit te voeren in een terminal om erachter te komen wat er aan de hand is."; -"startup.errors.valet_not_installed.title" = "Your Valet configuration directory is missing"; -"startup.errors.valet_not_installed.subtitle" = "The required directory `~/.config/valet` is missing. This usually means that you forgot to run `valet install`."; -"startup.errors.valet_not_installed.desc" = "Assuming you already installed Valet via Composer, please run `valet install` to finish setting up Laravel Valet. +"startup.errors.valet_not_installed.title" = "Uw Valet-configuratiemap ontbreekt"; +"startup.errors.valet_not_installed.subtitle" = "De vereiste map `~/.config/valet` ontbreekt. Dit betekent meestal dat u `valet install` bent vergeten uit te voeren."; +"startup.errors.valet_not_installed.desc" = "Als u Valet al hebt geïnstalleerd via Composer, voer dan `valet install` uit om de installatie van Laravel Valet af te ronden. -If you are seeing this message but are confused why this folder has gone missing, then you may want to investigate why it is gone—it shouldn't just disappear and it means your Valet installation is broken."; +Als u dit bericht ziet, maar verward bent waarom deze map ontbreekt, wilt u mogelijk onderzoeken waarom deze is verdwenen - het zou niet zomaar moeten verdwijnen en dit betekent dat uw Valet-installatie defect is."; // Valet version too new or old -"startup.errors.valet_version_not_supported.title" = "This version of Valet is not supported"; -"startup.errors.valet_version_not_supported.subtitle" = "You are running a version of Valet that is currently not supported. PHP Monitor currently works with Valet v2, v3 and v4. In order to avoid causing issues on your system, PHP Monitor cannot start."; -"startup.errors.valet_version_not_supported.desc" = "You must install a version of Valet that is compatible with PHP Monitor, or you may need to upgrade to a newer version of PHP Monitor which may include compatibility for this version of Valet (consult the latest release notes for more info)."; +"startup.errors.valet_version_not_supported.title" = "Deze versie van Valet wordt niet ondersteund"; +"startup.errors.valet_version_not_supported.subtitle" = "U gebruikt een versie van Valet die momenteel niet wordt ondersteund. PHP Monitor werkt momenteel met Valet v2, v3 en v4. Om problemen op uw systeem te voorkomen, kan PHP Monitor niet starten."; +"startup.errors.valet_version_not_supported.desc" = "U moet een versie van Valet installeren die compatibel is met PHP Monitor, of u moet mogelijk upgraden naar een nieuwere versie van PHP Monitor die compatibiliteit biedt met deze versie van Valet (raadpleeg de nieuwste release-opmerkingen voor meer informatie)."; /// Brew & sudoers -"startup.errors.sudoers_brew.title" = "Brew has not been added to sudoers.d"; -"startup.errors.sudoers_brew.subtitle" = "You must run `sudo valet trust` to ensure Valet can start and stop services without having to use sudo every time. The app will not work correctly until you resolve this issue."; -"startup.errors.sudoers_brew.desc" = "If you keep seeing this error, it is possible that there is a permission issue where PHP Monitor cannot validate the file, which can usually be resolved by running: `sudo chmod +r /private/etc/sudoers.d/brew`"; +"startup.errors.sudoers_brew.title" = "Brew is niet toegevoegd aan sudoers.d"; +"startup.errors.sudoers_brew.subtitle" = "U moet `sudo valet trust` uitvoeren om ervoor te zorgen dat Valet services kan starten en stoppen zonder telkens sudo te hoeven gebruiken. De app werkt niet correct totdat u dit probleem oplost."; +"startup.errors.sudoers_brew.desc" = "Als u deze fout blijft zien, is het mogelijk dat er een machtigingsprobleem is waarbij PHP Monitor het bestand niet kan valideren. Dit kan meestal worden opgelost door `sudo chmod +r /private/etc/sudoers.d/brew` uit te voeren"; /// Valet & sudoers -"startup.errors.sudoers_valet.title" = "Valet has not been added to sudoers.d"; -"startup.errors.sudoers_valet.subtitle" = "You must run `sudo valet trust` to ensure Valet can start and stop services without having to use sudo every time. The app will not work correctly until you resolve this issue. If you did this before, please run `sudo valet trust` again."; -"startup.errors.sudoers_valet.desc" = "If you keep seeing this error, it is possible that there is a permission issue where PHP Monitor cannot validate the file, which can usually be resolved by running: `sudo chmod +r /private/etc/sudoers.d/valet`"; +"startup.errors.sudoers_valet.title" = "Valet is niet toegevoegd aan sudoers.d"; +"startup.errors.sudoers_valet.subtitle" = "U moet `sudo valet trust` uitvoeren om ervoor te zorgen dat Valet services kan starten en stoppen zonder telkens sudo te hoeven gebruiken. De app werkt niet correct totdat u dit probleem oplost. Als u dit al eerder hebt gedaan, voer dan `sudo valet trust` opnieuw uit."; +"startup.errors.sudoers_valet.desc" = "Als u deze fout blijft zien, is het mogelijk dat er een machtigingsprobleem is waarbij PHP Monitor het bestand niet kan valideren. Dit kan meestal worden opgelost door `sudo chmod +r /private/etc/sudoers.d/valet` uit te voeren"; /// Platform issue detected -"startup.errors.global_composer_platform_issues.title" = "PHP Monitor and Valet cannot work correctly: Composer is reporting an issue with your platform"; -"startup.errors.global_composer_platform_issues.subtitle" = "Please follow these recommended steps to avoid seeing this issue in the future:\n\n1. Run `composer global update`.\n2. Restart PHP Monitor. (It should work again.)\n3. Switch to the oldest PHP version you have installed.\n4. Run `composer global update` again."; -"startup.errors.global_composer_platform_issues.desc" = "You can go to Preferences and check the 'Automatically update global dependencies' option. This will update your global Composer dependencies whenever you change PHP versions, so this may not be ideal if you may not have constant access to the internet.\n\nTo find out exactly what's going wrong, try running `valet --version`. Valet is currently not functional with the installed dependencies. Usually this is caused by a version mismatch: i.e. installed dependencies for a newer version of PHP than the version that is currently active."; +"startup.errors.global_composer_platform_issues.title" = "PHP Monitor en Valet kunnen niet correct werken: Composer meldt een probleem met uw platform"; +"startup.errors.global_composer_platform_issues.subtitle" = "Volg deze aanbevolen stappen om dit probleem in de toekomst te voorkomen:\n\n1. Voer `composer global update` uit.\n2. Start PHP Monitor opnieuw op. (Het zou weer moeten werken.)\n3. Schakel over naar de oudste geïnstalleerde versie van PHP.\n4. Voer opnieuw `composer global update` uit."; +"startup.errors.global_composer_platform_issues.desc" = "U kunt naar Voorkeuren gaan en de optie 'Automatisch globale afhankelijkheden bijwerken' controleren. Hiermee worden uw globale Composer-afhankelijkheden bijgewerkt wanneer u PHP-versies wijzigt, dus dit is mogelijk niet ideaal als u mogelijk geen constante toegang tot internet heeft.\n\nOm erachter te komen wat er precies misgaat, probeer `valet --version` uit te voeren. Valet is momenteel niet functioneel met de geïnstalleerde afhankelijkheden. Dit wordt meestal veroorzaakt door een versieverschil: bijvoorbeeld geïnstalleerde afhankelijkheden voor een nieuwere versie van PHP dan de momenteel actieve versie."; /// Cannot retrieve services -"startup.errors.services_json_error.title" = "Cannot determine services status"; -"startup.errors.services_json_error.subtitle" = "PHP Monitor usually queries `brew` using the following command to test if the services can be retrieved: `sudo brew services info nginx --json`.\n\nPHP Monitor could not interpret this response."; -"startup.errors.services_json_error.desc" = "This can happen if your Homebrew installation is out of date, in which case Homebrew won't return JSON yet. You can usually fix this by running `brew update` or `brew tap homebrew/services`. You can also try running `sudo brew services info nginx --json` in your terminal of choice."; +"startup.errors.services_json_error.title" = "Kan de status van services niet bepalen"; +"startup.errors.services_json_error.subtitle" = "PHP Monitor maakt meestal gebruik van de volgende opdracht om `brew` te raadplegen en te controleren of de services kunnen worden opgehaald: `sudo brew services info nginx --json`.\n\nPHP Monitor kon deze reactie niet interpreteren."; +"startup.errors.services_json_error.desc" = "Dit kan gebeuren als uw Homebrew-installatie verouderd is, waardoor Homebrew nog geen JSON retourneert. U kunt dit meestal oplossen door `brew update` of `brew tap homebrew/services` uit te voeren. U kunt ook proberen `sudo brew services info nginx --json` uit te voeren in uw terminal naar keuze."; /// Issue with `which` alias -"startup.errors.which_alias_issue.title" = "A configuration issue was detected"; -"startup.errors.which_alias_issue.subtitle" = "It appears that there's a file in `/usr/local/bin/which`. This is usually set up by NodeJS, but `node` isn't in the PATH in `/usr/local/bin`. To fix this, keep reading."; -"startup.errors.which_alias_issue.desc" = "You will need to symlink `node` into the `/usr/local/bin` directory to make sure PHP Monitor can start successfully. For more info, see: https://github.com/nicoverbruggen/phpmon/issues/174"; +"startup.errors.which_alias_issue.title" = "Er is een configuratieprobleem gedetecteerd"; +"startup.errors.which_alias_issue.subtitle" = "Het lijkt erop dat er een bestand is in `/usr/local/bin/which`. Dit wordt meestal ingesteld door NodeJS, maar `node` staat niet in de PATH in `/usr/local/bin`. Om dit op te lossen, gaat u verder met lezen."; +"startup.errors.which_alias_issue.desc" = "U moet `node` symbolisch koppelen aan de `/usr/local/bin`-directory om ervoor te zorgen dat PHP Monitor succesvol kan starten. Voor meer informatie, zie: https://github.com/nicoverbruggen/phpmon/issues/174"; // Warning about a different PHP version linked than last time -"startup.version_mismatch.title" = "Your active PHP version has changed."; -"startup.version_mismatch.subtitle" = "Since PHP Monitor was last active, your linked PHP version has been changed to PHP %@. Would you like to switch back to PHP %@, or do you want to keep using the current version?"; -"startup.version_mismatch.desc" = "PHP Monitor keeps track of which version of PHP is globally linked. The global version may have been changed due to some other program or Homebrew may have linked a different formula after upgrades."; -"startup.version_mismatch.button_switch_back" = "Switch back to PHP %@"; -"startup.version_mismatch.button_stay" = "Keep using PHP %@"; +"startup.version_mismatch.title" = "Uw actieve PHP-versie is gewijzigd."; +"startup.version_mismatch.subtitle" = "Sinds PHP Monitor voor het laatst actief was, is uw gekoppelde PHP-versie gewijzigd naar PHP %@. Wilt u terugschakelen naar PHP %@, of wilt u de huidige versie blijven gebruiken?"; +"startup.version_mismatch.desc" = "PHP Monitor houdt bij welke versie van PHP globaal is gekoppeld. De globale versie kan zijn gewijzigd door een ander programma of Homebrew kan een andere formule hebben gekoppeld na upgrades."; +"startup.version_mismatch.button_switch_back" = "Terugschakelen naar PHP %@"; +"startup.version_mismatch.button_stay" = "Huidige versie blijven gebruiken van PHP %@"; // Warning about unsupported PHP versions -"startup.unsupported_versions_explanation.title" = "PHP installation(s) not supported by Valet detected!"; -"startup.unsupported_versions_explanation.subtitle" = "The following PHP versions are installed on your system but are not supported by this version of Valet. +"startup.unsupported_versions_explanation.title" = "Niet-ondersteunde PHP-installatie(s) gedetecteerd door Valet!"; +"startup.unsupported_versions_explanation.subtitle" = "De volgende PHP-versies zijn geïnstalleerd op uw systeem, maar worden niet ondersteund door deze versie van Valet. %@ -Valet might break if you link these PHP versions so PHP Monitor won't let you switch to them."; -"startup.unsupported_versions_explanation.desc" = "If you need support for older versions of PHP, you may need to downgrade to an older versions of Valet. Otherwise, it might be a good idea to uninstall any outdated versions that are not in use. It can also be that this version of Valet is too old. This message will only be removed after restarting PHP Monitor."; +Valet kan problemen veroorzaken als u deze PHP-versies koppelt, dus PHP Monitor staat u niet toe om naar deze versies over te schakelen."; +"startup.unsupported_versions_explanation.desc" = "Als u ondersteuning nodig hebt voor oudere versies van PHP, moet u mogelijk downgraden naar oudere versies van Valet. Anders is het misschien een goed idee om verouderde versies die niet worden gebruikt te verwijderen. Het kan ook zijn dat deze versie van Valet te oud is. Dit bericht wordt pas verwijderd na het opnieuw opstarten van PHP Monitor."; // Sponsor encouragement -"startup.sponsor_encouragement.title" = "If PHP Monitor has been useful to you or your company, please consider leaving a tip."; -"startup.sponsor_encouragement.subtitle" = "To be 100% transparent: I plan to keep PHP Monitor open source and free. Your support makes this decision very easy.\n\n(You will only see this prompt once.)"; -"startup.sponsor_encouragement.desc" = "If you have already donated, then YOU are the reason why the app was able to get all these updates. In that case, this is a THANK YOU message to you. I appreciate the support."; +"startup.sponsor_encouragement.title" = "Als PHP Monitor nuttig is geweest voor u of uw bedrijf, overweeg dan om een fooi achter te laten."; +"startup.sponsor_encouragement.subtitle" = "Om 100% transparant te zijn: ik ben van plan om PHP Monitor open source en gratis te houden. Uw steun maakt deze beslissing heel gemakkelijk.\n\n(U ziet deze prompt slechts één keer.)"; +"startup.sponsor_encouragement.desc" = "Als u al hebt gedoneerd, bent u de reden waarom de app al deze updates kon krijgen. In dat geval is dit een DANK U-bericht aan u. Ik waardeer de steun."; -"startup.sponsor_encouragement.accept" = "Sponsor Now"; -"startup.sponsor_encouragement.learn_more" = "Learn More"; -"startup.sponsor_encouragement.skip" = "No Thanks"; +"startup.sponsor_encouragement.accept" = "Nu sponsoren"; +"startup.sponsor_encouragement.learn_more" = "Meer informatie"; +"startup.sponsor_encouragement.skip" = "Nee bedankt"; // ERROR MESSAGES (based on AlertableError) -"alert.errors.homebrew_permissions.applescript_returned_nil.title" = "Restore Homebrew Permissions has been cancelled."; -"alert.errors.homebrew_permissions.applescript_returned_nil.description" = "The outcome of the script that is executed to adjust the permissions returned nil, which usually means that you did not grant administrative permissions to PHP Monitor.\n\nIf you clicked on Cancel during the authentication prompt, this is normal. If you did actually authenticate and you are still seeing this message, something probably went wrong."; +"alert.errors.homebrew_permissions.applescript_returned_nil.title" = "Het herstellen van Homebrew-machtigingen is geannuleerd."; +"alert.errors.homebrew_permissions.applescript_returned_nil.description" = "De uitkomst van het script dat wordt uitgevoerd om de machtigingen aan te passen, gaf nil terug, wat meestal betekent dat u PHP Monitor geen beheerdersmachtigingen hebt gegeven.\n\nAls u tijdens het authenticatieverzoek op Annuleren hebt geklikt, is dit normaal. Als u daadwerkelijk hebt geauthenticeerd en u nog steeds dit bericht ziet, is er waarschijnlijk iets misgegaan."; -"alert.key_service_not_running.title" = "Due to issues with the Homebrew services required, Valet is currently not working correctly"; -"alert.key_service_not_running.subtitle" = "For Valet to work properly, at least three key services need to be running correctly. +"alert.key_service_not_running.title" = "Vanwege problemen met de vereiste Homebrew-services werkt Valet momenteel niet correct"; +"alert.key_service_not_running.subtitle" = "Om Valet goed te laten werken, moeten ten minste drie belangrijke services correct worden uitgevoerd. -PHP Monitor is reporting that this isn't the case. You can try to fix this by pressing the button with the 'X' in the menu below the affected service to (re)start the service that is currently inactive."; -"alert.key_service_not_running.desc" = "If clicking on the button below the service doesn't work (i.e. the spinner appears but remains an 'X' after some time), you may need to run Fix My Valet. You can do this via the menu First Aid > Fix My Valet. +PHP Monitor meldt dat dit niet het geval is. U kunt proberen dit op te lossen door op de knop met de 'X' te klikken in het menu onder de betreffende service om de momenteel inactieve service (opnieuw) te starten."; +"alert.key_service_not_running.desc" = "Als het klikken op de knop onder de service niet werkt (dwz de spinner verschijnt maar blijft na enige tijd een 'X'), moet u mogelijk Fix My Valet uitvoeren. U kunt dit doen via het menu First Aid > Fix My Valet. -Alternatively, you can use `valet stop` and `valet start` in the terminal, which may also fix the issue (as an alternative to Fix My Valet). +Als alternatief kunt u `valet stop` en `valet start` in de terminal gebruiken, wat het probleem mogelijk ook oplost (als alternatief voor Fix My Valet). -For further debugging, you may wish to check the GitHub issue tracker, where others may have had similar issues. As the developer, I attempt to make sure every question gets answered :)"; +Voor verdere probleemoplossing kunt u de GitHub issue-tracker raadplegen, waar anderen mogelijk soortgelijke problemen hebben gehad. Als ontwikkelaar probeer ik ervoor te zorgen dat elke vraag wordt beantwoord :)"; -"alert.key_service_has_error.title" = "Due to issues with the Homebrew services required, Valet is currently not working correctly"; -"alert.key_service_has_error.subtitle" = "For Valet to work properly, at least three key services need to be running correctly. +"alert.key_service_has_error.title" = "Vanwege problemen met de vereiste Homebrew-services werkt Valet momenteel niet correct"; +"alert.key_service_has_error.subtitle" = "Om Valet goed te laten werken, moeten ten minste drie belangrijke services correct worden uitgevoerd. -PHP Monitor is reporting that this isn't the case. It appears that one of the affected services is reporting an error state, so I recommend clicking on the 'E'. +PHP Monitor meldt dat dit niet het geval is. Het lijkt erop dat een van de betreffende services een foutstatus rapporteert, dus ik raad aan op de 'E' te klikken. -PHP Monitor will attempt to restart the service, and should it fail (which is likely) it will offer to locate the log file if it exists, which may contain additional information that might help you debug the issue."; -"alert.key_service_has_error.desc" = "Unfortunately, if a service reports an error, this is often due to an invalid configuration state, which may be difficult to debug. +PHP Monitor zal proberen de service opnieuw op te starten en als dit mislukt (wat waarschijnlijk is), biedt het aan om het logbestand te lokaliseren als het bestaat. Dit logbestand kan aanvullende informatie bevatten die u kan helpen bij het oplossen van het probleem."; +"alert.key_service_has_error.desc" = "Helaas wordt een foutstatus van een service vaak veroorzaakt door een ongeldige configuratiestatus, wat moeilijk te debuggen kan zijn. -COMMON TROUBLESHOOTING TIPS +VEELVOORKOMENDE PROBLEEMOPLOSSINGSTIPS -• Try restarting the service and checking the log file (if it exists) first. You can have PHP Monitor do this by clicking on the 'E' button. +• Probeer eerst de service opnieuw op te starten en controleer het logbestand (indien aanwezig). U kunt PHP Monitor dit laten doen door op de 'E'-knop te klikken. -• PHP: If you are seeing an error status, there may be an issue with PHP's configuration. Make sure the .ini files in the Homebrew installation are OK, and there are no socket conflicts. +• PHP: Als u een foutstatus ziet, kan er een probleem zijn met de configuratie van PHP. Zorg ervoor dat de .ini-bestanden in de Homebrew-installatie in orde zijn en dat er geen conflicten zijn met sockets. -• nginx: If you are seeing an error status, a site is likely misconfigured (usually noted in the error log). You will likely want to check Valet's nginx folder. +• nginx: Als u een foutstatus ziet, is een site waarschijnlijk verkeerd geconfigureerd (meestal vermeld in het foutenlogboek). U wilt waarschijnlijk de nginx-map van Valet controleren. -• dnsmasq: If you are seeing an error status, the dnsmasq configuration file is likely broken (usually located at ~/.config/valet/dnsmasq.d)."; +• dnsmasq: Als u een foutstatus ziet, is het dnsmasq-configuratiebestand waarschijnlijk incorrect (meestal te vinden op ~/.config/valet/dnsmasq.d)."; // CHECK FOR UPDATES -"updater.alerts.newer_version_available.title" = "PHP Monitor v%@ is now available!"; -"updater.alerts.newer_version_available.subtitle" = "Keeping PHP Monitor up-to-date is highly recommended, since newer versions usually fix bugs and include fixes to support the latest versions of Valet and PHP."; -"updater.installation_source.brew" = "The recommended method of installing updates to PHP Monitor is to simply press “Install Update”.\n\nSince you used Homebrew to install the app, you can also upgrade via the terminal by running `%@`, but this is not recommended.\n\n(Please note that installing via this built-in updater will remove PHP Monitor from Homebrew's Caskroom directory, to prevent duplicate updates from being downloaded and causing potential issues later.)"; -"updater.installation_source.direct" = "The recommended method of installing updates to PHP Monitor is to simply press “Install Update”."; -"updater.alerts.buttons.release_notes" = "View Release Notes"; +"updater.alerts.newer_version_available.title" = "PHP Monitor v%@ is nu beschikbaar!"; +"updater.alerts.newer_version_available.subtitle" = "Het is sterk aanbevolen om PHP Monitor up-to-date te houden, omdat nieuwere versies meestal bugoplossingen en fixes bevatten om de nieuwste versies van Valet en PHP te ondersteunen."; +"updater.installation_source.brew" = "De aanbevolen methode om updates voor PHP Monitor te installeren, is gewoon op 'Install Update' te klikken.\n\nAangezien u Homebrew hebt gebruikt om de app te installeren, kunt u ook upgraden via de terminal door `%@` uit te voeren, maar dit wordt niet aanbevolen.\n\n(Houd er rekening mee dat installeren via deze ingebouwde updater PHP Monitor uit de Caskroom-map van Homebrew verwijdert, om te voorkomen dat duplicaatupdates worden gedownload en mogelijk later problemen veroorzaken.)"; +"updater.installation_source.direct" = "De aanbevolen methode om updates voor PHP Monitor te installeren, is gewoon op 'Install Update' te klikken."; +"updater.alerts.buttons.release_notes" = "Bekijk de versie-opmerkingen"; "updater.alerts.is_latest_version.title" = "PHP Monitor is up-to-date!"; -"updater.alerts.is_latest_version.subtitle" = "The currently installed version (v%@) is up-to-date.\nThere is no newer version available."; +"updater.alerts.is_latest_version.subtitle" = "De momenteel geïnstalleerde versie (v%@) is up-to-date.\nEr is geen nieuwere versie beschikbaar."; -"updater.alerts.cannot_check_for_update.title" = "PHP Monitor could not determine if a newer version is available."; -"updater.alerts.cannot_check_for_update.subtitle" = "You might not be connected to the internet, are blocking traffic or GitHub is down and won't allow you to check for updates. If you keep seeing this message, you may want to manually check the releases page."; -"updater.alerts.cannot_check_for_update.description" = "The currently installed version is: %@. You can go to the list of the latest releases (on GitHub) by clicking on the button on the left."; -"updater.alerts.buttons.releases_on_github" = "View Releases"; -"updater.alerts.buttons.install" = "Install Update"; -"updater.alerts.buttons.dismiss" = "Dismiss"; +"updater.alerts.cannot_check_for_update.title" = "PHP Monitor kon niet bepalen of er een nieuwere versie beschikbaar is."; +"updater.alerts.cannot_check_for_update.subtitle" = "U bent mogelijk niet verbonden met internet, blokkeert verkeer of GitHub is niet beschikbaar en staat u niet toe om updates te controleren. Als u dit bericht blijft zien, kunt u handmatig de releases-pagina controleren."; +"updater.alerts.cannot_check_for_update.description" = "De momenteel geïnstalleerde versie is: %@. U kunt naar de lijst met de nieuwste releases (op GitHub) gaan door op de knop links te klikken."; +"updater.alerts.buttons.releases_on_github" = "Bekijk releases"; +"updater.alerts.buttons.install" = "Update installeren"; +"updater.alerts.buttons.dismiss" = "Sluiten"; // WARNINGS ABOUT NON-DEFAULT TLD -"alert.warnings.tld_issue.title" = "You are not using `.test` as the TLD for Valet."; -"alert.warnings.tld_issue.subtitle" = "Using a non-default TLD may not work correctly and is not officially supported."; -"alert.warnings.tld_issue.description" = "PHP Monitor will remain functional, but there might be issues: the app might not correctly show which domains have been secured. For optimal results, go to your Valet configuration file (config.json in the Valet directory) and change the TLD back to `test`."; -"alert.do_not_tell_again" = "Don't Tell Me Again"; +"alert.warnings.tld_issue.title" = "U gebruikt geen `.test` als TLD voor Valet."; +"alert.warnings.tld_issue.subtitle" = "Het gebruik van een niet-standaard TLD werkt mogelijk niet correct en wordt niet officieel ondersteund."; +"alert.warnings.tld_issue.description" = "PHP Monitor blijft werken, maar er kunnen problemen zijn: de app kan mogelijk niet correct weergeven welke domeinen zijn beveiligd. Voor optimale resultaten gaat u naar uw Valet-configuratiebestand (config.json in de Valet-directory) en wijzigt u de TLD terug naar `test`."; +"alert.do_not_tell_again" = "Niet meer tonen"; // WARNINGS "warnings.title" = "PHP Doctor"; -"warnings.description" = "**PHP Doctor** will suggest improvements to your active system configuration."; -"warnings.disclaimer" = "You may choose to hide all recommendations from the PHP Monitor menu in Preferences, but it is recommended that you deal with all actionable items."; -"warnings.refresh.button" = "Scan Again"; -"warnings.refresh.button.description" = "Press this button once you've fixed an issue. This will cause PHP Monitor to re-evaluate your environment. If it's really fixed, the recommendation should disappear."; +"warnings.description" = "**PHP Doctor** geeft suggesties voor verbeteringen aan uw actieve systeemconfiguratie."; +"warnings.disclaimer" = "U kunt ervoor kiezen om alle aanbevelingen te verbergen in het PHP Monitor-menu in de Voorkeuren, maar het wordt aanbevolen om alle actiepunten aan te pakken."; +"warnings.refresh.button" = "Opnieuw scannen"; +"warnings.refresh.button.description" = "Druk op deze knop nadat u een probleem heeft opgelost. Hierdoor evalueert PHP Monitor uw omgeving opnieuw. Als het probleem echt is opgelost, moet de aanbeveling verdwijnen."; -"warnings.helper_permissions.title" = "PHP Monitor’s helpers are currently unavailable."; -"warnings.helper_permissions.description" = "PHP Monitor comes with various helper scripts. Using these scripts allows you to easily invoke a specific version of PHP without switching the linked PHP version."; -"warnings.helper_permissions.unavailable" = "However, these helpers are potentially *unavailable* because PHP Monitor cannot currently create or update the required symlinks."; -"warnings.helper_permissions.symlink" = "If you do not wish to make `/usr/local/bin` writable, you can add PHP Monitor's helper directory to your `PATH` variable to make this warning go away. (Click on ”Learn More” to find out how to fix this issue.)"; +"warnings.helper_permissions.title" = "De helpers van PHP Monitor zijn momenteel niet beschikbaar."; +"warnings.helper_permissions.description" = "PHP Monitor wordt geleverd met verschillende hulpscripts. Met behulp van deze scripts kunt u eenvoudig een specifieke versie van PHP oproepen zonder de gekoppelde PHP-versie te wijzigen."; +"warnings.helper_permissions.unavailable" = "Deze helpers zijn echter mogelijk *niet beschikbaar* omdat PHP Monitor momenteel de vereiste symbolische koppelingen niet kan maken of bijwerken."; +"warnings.helper_permissions.symlink" = "Als u `/usr/local/bin` niet beschrijfbaar wilt maken, kunt u de helperdirectory van PHP Monitor toevoegen aan uw `PATH`-variabele om deze waarschuwing te laten verdwijnen. (Klik op ”Meer informatie” om te zien hoe u dit probleem kunt oplossen.)"; -"warnings.arm_compatibility.title" = "You are running PHP Monitor using Rosetta on Apple Silicon, which means your PHP environment is also running via Rosetta."; -"warnings.arm_compatibility.description" = "You appear to be running an ARM-compatible version of macOS, but you are currently running PHP Monitor using Rosetta. While this will work correctly, it is recommended that you use the native version of Homebrew."; +"warnings.arm_compatibility.title" = "U gebruikt PHP Monitor via Rosetta op Apple Silicon, wat betekent dat uw PHP-omgeving ook via Rosetta wordt uitgevoerd."; +"warnings.arm_compatibility.description" = "U gebruikt blijkbaar een ARM-compatibele versie van macOS, maar u gebruikt momenteel PHP Monitor via Rosetta. Hoewel dit correct werkt, wordt aanbevolen om de native versie van Homebrew te gebruiken."; -"warnings.files_missing.title" = "Your PHP installation is missing important required configuration files."; -"warnings.files_missing.description" = "The following key configuration files should exist after installing PHP: +"warnings.files_missing.title" = "Uw PHP-installatie mist belangrijke vereiste configuratiebestanden."; +"warnings.files_missing.description" = "De volgende belangrijke configuratiebestanden zouden moeten bestaan na het installeren van PHP: • %@ -When files like these are missing, you should switch to the PHP version associated with those files: that may resolve the problem. If this doesn't fix the issue, it's recommended to reinstall the appropriate PHP version(s) via Homebrew again, which should restore the configuration files that are missing. Missing configuration files can be the reason why you get '502 Bad Gateway' errors, even after running Fix My Valet (if you are using Valet)."; +Wanneer dergelijke bestanden ontbreken, moet u overschakelen naar de PHP-versie die is gekoppeld aan die bestanden: dat kan het probleem oplossen. Als dit het probleem niet oplost, wordt aanbevolen om de juiste PHP-versie(s) opnieuw te installeren via Homebrew, waardoor de ontbrekende configuratiebestanden worden hersteld. Ontbrekende configuratiebestanden kunnen de reden zijn waarom u '502 Bad Gateway'-fouten krijgt, zelfs na het uitvoeren van Fix My Valet (als u Valet gebruikt)."; -"warnings.none" = "There are no recommendations available for you right now. You're all good!"; +"warnings.none" = "Er zijn momenteel geen aanbevelingen beschikbaar. Alles is in orde!"; // ONBOARDING -"onboarding.title" = "Welcome Tour"; -"onboarding.welcome" = "Welcome to PHP Monitor!"; -"onboarding.explore" = "You now have access to PHP Monitor's entire suite of functionality. You can learn more about some of the features that PHP Monitor has to offer on this screen."; -"onboarding.explore.lite" = "You now have access to PHP Monitor's most important features. -Please note that some features (greyed out below) are currently unavailable because Laravel Valet is not active."; -"onboarding.tour.menu_bar.title" = "Power In Your Menu Bar"; -"onboarding.tour.menu_bar" = "PHP Monitor lives in your menu bar. From this menu, you can access most of PHP Monitor's key functionality, including switching the globally linked PHP version, locating config files, installing different PHP versions, and more."; -"onboarding.tour.faq_hint" = "**Questions?** I recommend that you check out the [README](https://github.com/nicoverbruggen/phpmon/blob/main/README.md) on GitHub: it contains a comprehensive FAQ with various tips and common questions and answers."; -"onboarding.tour.services.title" = "Manage Homebrew Services"; -"onboarding.tour.services" = "Once you click on the menu bar item, you can see at a glance based on the checkmarks or crosses if all of the Homebrew services are up and running. You can also click on a service to quickly toggle it."; -"onboarding.tour.domains.title" = "Manage Domains"; -"onboarding.tour.domains" = "By opening the Domains window via the menu bar item, you can view which domains are linked and parked, as well as active nginx proxies."; -"onboarding.tour.isolation.title" = "Isolate Domains"; -"onboarding.tour.isolation" = "If you have Valet 3 or newer installed, you can even use domain isolation by right-clicking on a given domain in the Domains window. This allows you to pick a specific version of PHP to use for that domain, and that domain only."; -"onboarding.tour.feature_unavailable" = "This feature is currently unavailable and requires Laravel Valet to be installed."; -"onboarding.tour.once" = "You will only see the Welcome Tour once. You can re-open the Welcome Tour later via the menu bar icon (available in the menu, under First Aid & Services)."; -"onboarding.tour.close" = "Close Tour"; +"onboarding.title" = "Welkomsttour"; +"onboarding.welcome" = "Welkom bij PHP Monitor!"; +"onboarding.explore" = "U heeft nu toegang tot de volledige functionaliteit van PHP Monitor. Op dit scherm kunt u meer informatie krijgen over enkele van de functies die PHP Monitor te bieden heeft."; +"onboarding.explore.lite" = "U heeft nu toegang tot de belangrijkste functies van PHP Monitor. +Houd er rekening mee dat sommige functies (hieronder grijs weergegeven) momenteel niet beschikbaar zijn omdat Laravel Valet niet actief is."; +"onboarding.tour.menu_bar.title" = "Kracht in uw menubalk"; +"onboarding.tour.menu_bar" = "PHP Monitor bevindt zich in uw menubalk. Vanuit dit menu heeft u toegang tot de belangrijkste functionaliteit van PHP Monitor, zoals het schakelen tussen de wereldwijd gekoppelde PHP-versie, het lokaliseren van configuratiebestanden, het installeren van verschillende PHP-versies en meer."; +"onboarding.tour.faq_hint" = "**Vragen?** Ik raad u aan de [README](https://github.com/nicoverbruggen/phpmon/blob/main/README.md) op GitHub te raadplegen: hier vindt u een uitgebreide FAQ met verschillende tips en veelgestelde vragen en antwoorden."; +"onboarding.tour.services.title" = "Beheer Homebrew-services"; +"onboarding.tour.services" = "Zodra u op het pictogram in uw menubalk klikt, kunt u in één oogopslag zien aan de vinkjes of kruisjes of alle Homebrew-services actief zijn. U kunt ook op een service klikken om deze snel aan of uit te zetten."; +"onboarding.tour.domains.title" = "Beheer domeinen"; +"onboarding.tour.domains" = "Door het openen van het venster Domains via het menubalkitem kunt u zien welke domeinen zijn gekoppeld en geparkeerd, en welke actieve nginx-proxies er zijn."; +"onboarding.tour.isolation.title" = "Isoleer domeinen"; +"onboarding.tour.isolation" = "Als u Valet 3 of nieuwer hebt geïnstalleerd, kunt u zelfs domeinisolatie gebruiken door met de rechtermuisknop te klikken op een bepaald domein in het Domains-venster. Hiermee kunt u een specifieke versie van PHP kiezen om alleen voor dat domein te gebruiken."; +"onboarding.tour.feature_unavailable" = "Deze functie is momenteel niet beschikbaar en vereist de installatie van Laravel Valet."; +"onboarding.tour.once" = "U zult de Welkomsttour slechts één keer zien. U kunt de Welkomsttour later opnieuw openen via het menubalkpictogram (beschikbaar in het menu onder First Aid & Services)."; +"onboarding.tour.close" = "Tour sluiten"; From 5cfb0f452c662142030eb24a0300ede8910cb382 Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Mon, 26 Jun 2023 14:31:57 +0200 Subject: [PATCH 03/34] =?UTF-8?q?=F0=9F=8C=90=20Localized=20columns=20in?= =?UTF-8?q?=20domains=20list?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- phpmon/Domain/DomainList/DomainListVC.swift | 13 +++++++++++++ phpmon/en.lproj/Localizable.strings | 2 +- phpmon/nl.lproj/Localizable.strings | 4 ++-- phpmon/vi.lproj/Localizable.strings | 6 +++--- 4 files changed, 19 insertions(+), 6 deletions(-) diff --git a/phpmon/Domain/DomainList/DomainListVC.swift b/phpmon/Domain/DomainList/DomainListVC.swift index 82a35167..a119710d 100644 --- a/phpmon/Domain/DomainList/DomainListVC.swift +++ b/phpmon/Domain/DomainList/DomainListVC.swift @@ -92,6 +92,19 @@ class DomainListVC: NSViewController, NSTableViewDelegate, NSTableViewDataSource override func viewDidLoad() { tableView.doubleAction = #selector(self.doubleClicked(sender:)) + let mapping = [ + "SECURE": "domain_list.columns.secure", + "DOMAIN": "domain_list.columns.domain", + "ENVIRONMENT": "domain_list.columns.php", + "KIND": "domain_list.columns.kind", + "TYPE": "domain_list.columns.project_type" + ] + + for (id, key) in mapping { + let column = tableView.tableColumn(withIdentifier: NSUserInterfaceItemIdentifier(rawValue: id)) + column?.title = key.localized + } + if !Valet.shared.sites.isEmpty { // Preloaded list domains = Valet.getDomainListable() diff --git a/phpmon/en.lproj/Localizable.strings b/phpmon/en.lproj/Localizable.strings index 9a2fd818..dc3f19bb 100644 --- a/phpmon/en.lproj/Localizable.strings +++ b/phpmon/en.lproj/Localizable.strings @@ -205,7 +205,7 @@ You may be asked for your password during the uninstallation process if file per "domain_list.confirm_unproxy" = "Are you sure you want to remove the proxy '%@'?"; "domain_list.confirm_unproxy_desc" = "You can always recreate proxy the again by clicking on the + button."; -"domain_list.columns.tls" = "TLS"; +"domain_list.columns.secure" = "TLS"; "domain_list.columns.domain" = "Domain"; "domain_list.columns.active" = "Active"; "domain_list.columns.kind" = "Kind"; diff --git a/phpmon/nl.lproj/Localizable.strings b/phpmon/nl.lproj/Localizable.strings index 3b57386a..05e61cc5 100644 --- a/phpmon/nl.lproj/Localizable.strings +++ b/phpmon/nl.lproj/Localizable.strings @@ -206,7 +206,7 @@ Tijdens het verwijderingsproces kan je worden gevraagd om je wachtwoord indien d "domain_list.confirm_unproxy" = "Weet je zeker dat je de proxy '%@' wilt verwijderen?"; "domain_list.confirm_unproxy_desc" = "Je kunt de proxy altijd opnieuw maken door op de + knop te klikken."; -"domain_list.columns.tls" = "TLS"; +"domain_list.columns.secure" = "TLS"; "domain_list.columns.domain" = "Domein"; "domain_list.columns.active" = "Actief"; "domain_list.columns.kind" = "Type"; @@ -291,7 +291,7 @@ Dit heeft geen invloed op andere terminals, alleen op de huidige terminalsessie "domain_list.alert.invalid_folder_name" = "Ongeldige mapnaam"; "domain_list.alert.invalid_folder_name_desc" = "Deze mapnaam kan niet worden omgezet naar een geldige URL. Dit komt meestal doordat er een spatie in de mapnaam staat. Hernoem de map alstublieft, vernieuw de lijst met websites en probeer het opnieuw."; -"domain_list.columns.tls" = "TLS"; +"domain_list.columns.secure" = "TLS"; "domain_list.columns.domain" = "Domein"; "domain_list.columns.php" = "PHP"; "domain_list.columns.type" = "Type"; diff --git a/phpmon/vi.lproj/Localizable.strings b/phpmon/vi.lproj/Localizable.strings index 4c4d4e26..f70fa669 100644 --- a/phpmon/vi.lproj/Localizable.strings +++ b/phpmon/vi.lproj/Localizable.strings @@ -284,11 +284,11 @@ Bạn có thể được yêu cầu nhập mật khẩu của mình trong quá t "domain_list.alert.invalid_folder_name" = "Tên thư mục không hợp lệ"; "domain_list.alert.invalid_folder_name_desc" = "Thư mục này không thể giải quyết thành URL hợp lệ. Thông thường điều này xảy ra khi có một dấu cách trong tên thư mục. Vui lòng đổi tên thư mục, tải lại danh sách các trang web và thử lại."; -"domain_list.columns.tls" = "TLS"; +"domain_list.columns.secure" = "TLS"; "domain_list.columns.domain" = "Tên miền"; -"domain_list.columns.php" = "PHP"; -"domain_list.columns.type" = "Kiểu"; +"domain_list.columns.active" = "Hoạt động"; "domain_list.columns.kind" = "Loại"; +"domain_list.columns.project_type" = "Loại dự án"; // DRIVERS From 2302d5a5eefc90f06129e3c88473f161c58b3fa8 Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Mon, 26 Jun 2023 14:33:29 +0200 Subject: [PATCH 04/34] =?UTF-8?q?=F0=9F=8C=90=20Consistency=20in=20Dutch?= =?UTF-8?q?=20translations=20(WIP)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- phpmon/nl.lproj/Localizable.strings | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/phpmon/nl.lproj/Localizable.strings b/phpmon/nl.lproj/Localizable.strings index 05e61cc5..8aae52f8 100644 --- a/phpmon/nl.lproj/Localizable.strings +++ b/phpmon/nl.lproj/Localizable.strings @@ -59,7 +59,7 @@ "mi_view_recommendations" = "Bekijk aanbevelingen..."; "mi_valet" = "Laravel Valet"; -"mi_domain_list" = "Open lijst met domeinen..."; +"mi_domain_list" = "Open domeinenlijst..."; "mi_preferences" = "Voorkeuren..."; "mi_donate" = "Doneer..."; @@ -68,8 +68,8 @@ "mi_quit" = "PHP Monitor afsluiten"; "mi_about" = "Over PHP Monitor"; -"mi_presets_title" = "Configuratie Presets"; -"mi_apply_presets_title" = "Apply Configuratie Presets"; +"mi_presets_title" = "Configuratie presets"; +"mi_apply_presets_title" = "Apply Configuratie presets"; "mi_revert_to_prev_config" = "Terug naar vorige configuratie..."; "mi_profiles_loaded" = "%i profielen ingeladen via configuratiebestand"; From db101f5a6656760a9ad8e0c33386c28ee3a211c5 Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Mon, 26 Jun 2023 14:33:37 +0200 Subject: [PATCH 05/34] =?UTF-8?q?=F0=9F=94=A7=20Bump=20to=20version=206.1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- PHP Monitor.xcodeproj/project.pbxproj | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/PHP Monitor.xcodeproj/project.pbxproj b/PHP Monitor.xcodeproj/project.pbxproj index 7b06a282..342a9f45 100644 --- a/PHP Monitor.xcodeproj/project.pbxproj +++ b/PHP Monitor.xcodeproj/project.pbxproj @@ -3391,7 +3391,7 @@ "@executable_path/../Frameworks", ); MACOSX_DEPLOYMENT_TARGET = 12.4; - MARKETING_VERSION = 6.0.1; + MARKETING_VERSION = 6.1; PRODUCT_BUNDLE_IDENTIFIER = com.nicoverbruggen.phpmon; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; @@ -3421,7 +3421,7 @@ "@executable_path/../Frameworks", ); MACOSX_DEPLOYMENT_TARGET = 12.4; - MARKETING_VERSION = 6.0.1; + MARKETING_VERSION = 6.1; PRODUCT_BUNDLE_IDENTIFIER = com.nicoverbruggen.phpmon; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; @@ -3660,7 +3660,7 @@ "@executable_path/../Frameworks", ); MACOSX_DEPLOYMENT_TARGET = 12.4; - MARKETING_VERSION = 6.0.1; + MARKETING_VERSION = 6.1; PRODUCT_BUNDLE_IDENTIFIER = com.nicoverbruggen.phpmon.dev; PRODUCT_NAME = "$(TARGET_NAME) DEV"; PROVISIONING_PROFILE_SPECIFIER = ""; @@ -3775,7 +3775,7 @@ "@executable_path/../Frameworks", ); MACOSX_DEPLOYMENT_TARGET = 12.4; - MARKETING_VERSION = 6.0.1; + MARKETING_VERSION = 6.1; PRODUCT_BUNDLE_IDENTIFIER = com.nicoverbruggen.phpmon.dev; PRODUCT_NAME = "$(TARGET_NAME) DEV"; PROVISIONING_PROFILE_SPECIFIER = ""; @@ -3890,7 +3890,7 @@ "@executable_path/../Frameworks", ); MACOSX_DEPLOYMENT_TARGET = 12.4; - MARKETING_VERSION = 6.0.1; + MARKETING_VERSION = 6.1; PRODUCT_BUNDLE_IDENTIFIER = com.nicoverbruggen.phpmon.eap; PRODUCT_NAME = "$(TARGET_NAME) EAP"; PROVISIONING_PROFILE_SPECIFIER = ""; @@ -4070,7 +4070,7 @@ "@executable_path/../Frameworks", ); MACOSX_DEPLOYMENT_TARGET = 12.4; - MARKETING_VERSION = 6.0.1; + MARKETING_VERSION = 6.1; PRODUCT_BUNDLE_IDENTIFIER = com.nicoverbruggen.phpmon.eap; PRODUCT_NAME = "$(TARGET_NAME) EAP"; PROVISIONING_PROFILE_SPECIFIER = ""; From 6805855f037883b999bfdd6dd7f3399fe05248cf Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Mon, 26 Jun 2023 14:40:17 +0200 Subject: [PATCH 06/34] =?UTF-8?q?=F0=9F=8C=90=20Add=20translations=20for?= =?UTF-8?q?=20preferences=20tabs?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Domain/Preferences/PreferencesWindowController.swift | 8 ++++---- phpmon/en.lproj/Localizable.strings | 5 +++++ phpmon/nl.lproj/Localizable.strings | 7 ++++++- phpmon/vi.lproj/Localizable.strings | 5 +++++ 4 files changed, 20 insertions(+), 5 deletions(-) diff --git a/phpmon/Domain/Preferences/PreferencesWindowController.swift b/phpmon/Domain/Preferences/PreferencesWindowController.swift index 20f135d6..7c6fc75e 100644 --- a/phpmon/Domain/Preferences/PreferencesWindowController.swift +++ b/phpmon/Domain/Preferences/PreferencesWindowController.swift @@ -83,22 +83,22 @@ class PreferencesWindowController: PMWindowController { return [ PrefTabView( viewController: GeneralPreferencesVC.fromStoryboard(), - label: "General", + label: "prefs.tabs.general".localized, icon: "gearshape" ), PrefTabView( viewController: AppearancePreferencesVC.fromStoryboard(), - label: "Appearance", + label: "prefs.tabs.appearance".localized, icon: "paintbrush" ), PrefTabView( viewController: MenuStructurePreferencesVC.fromStoryboard(), - label: "Visibility", + label: "prefs.tabs.visibility".localized, icon: "eye" ), PrefTabView( viewController: NotificationPreferencesVC.fromStoryboard(), - label: "Notifications", + label: "prefs.tabs.notifications".localized, icon: "bell.badge" ) ] diff --git a/phpmon/en.lproj/Localizable.strings b/phpmon/en.lproj/Localizable.strings index dc3f19bb..b6e96b08 100644 --- a/phpmon/en.lproj/Localizable.strings +++ b/phpmon/en.lproj/Localizable.strings @@ -319,6 +319,11 @@ This has no effect on other terminals, only for the particular terminal session "prefs.subtitle" = "Preferences"; "prefs.close" = "Close"; +"prefs.tabs.general" = "General"; +"prefs.tabs.appearance" = "Appearance"; +"prefs.tabs.visibility" = "Visibility"; +"prefs.tabs.notifications" = "Notifications"; + "prefs.global_shortcut" = "Global Shortcut:"; "prefs.dynamic_icon" = "Dynamic Icon:"; "prefs.dynamic_icon" = "Icon Type:"; diff --git a/phpmon/nl.lproj/Localizable.strings b/phpmon/nl.lproj/Localizable.strings index 8aae52f8..d516dbd5 100644 --- a/phpmon/nl.lproj/Localizable.strings +++ b/phpmon/nl.lproj/Localizable.strings @@ -319,10 +319,15 @@ Dit heeft geen invloed op andere terminals, alleen op de huidige terminalsessie "prefs.subtitle" = "Voorkeuren"; "prefs.close" = "Sluiten"; +"prefs.tabs.general" = "Algemeen"; +"prefs.tabs.appearance" = "Weergave"; +"prefs.tabs.visibility" = "Zichtbaarheid"; +"prefs.tabs.notifications" = "Notificaties"; + "prefs.global_shortcut" = "Globale sneltoets:"; "prefs.dynamic_icon" = "Dynamisch pictogram:"; "prefs.icon_type" = "Pictogramtype:"; -"prefs.info_density" = "Hoeveelheid informatie:"; +"prefs.info_density" = "Informatie:"; "prefs.services" = "Services:"; "prefs.switcher" = "Switcher:"; "prefs.php_doctor" = "PHP Doctor:"; diff --git a/phpmon/vi.lproj/Localizable.strings b/phpmon/vi.lproj/Localizable.strings index f70fa669..3b918b13 100644 --- a/phpmon/vi.lproj/Localizable.strings +++ b/phpmon/vi.lproj/Localizable.strings @@ -312,6 +312,11 @@ Bạn có thể được yêu cầu nhập mật khẩu của mình trong quá t "prefs.subtitle" = "Tùy chọn"; "prefs.close" = "Đóng"; +"prefs.tabs.general" = "Chung"; +"prefs.tabs.appearance" = "Giao diện"; +"prefs.tabs.visibility" = "Hiển thị"; +"prefs.tabs.notifications" = "Thông báo"; + "prefs.global_shortcut" = "Phím tắt toàn cục:"; "prefs.dynamic_icon" = "Biểu tượng động:"; "prefs.dynamic_icon" = "Loại biểu tượng:"; From c8323a8c279131f3d3e0f540d8754dfd94e658ad Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Mon, 26 Jun 2023 14:45:06 +0200 Subject: [PATCH 07/34] =?UTF-8?q?=F0=9F=94=A7=20Bump=20build=20to=201300,?= =?UTF-8?q?=20remove=20launch=20language?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- PHP Monitor.xcodeproj/project.pbxproj | 12 ++++++------ .../xcshareddata/xcschemes/PHP Monitor EAP.xcscheme | 1 - 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/PHP Monitor.xcodeproj/project.pbxproj b/PHP Monitor.xcodeproj/project.pbxproj index 342a9f45..8adac907 100644 --- a/PHP Monitor.xcodeproj/project.pbxproj +++ b/PHP Monitor.xcodeproj/project.pbxproj @@ -3378,7 +3378,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 1252; + CURRENT_PROJECT_VERSION = 1300; DEAD_CODE_STRIPPING = YES; DEBUG = YES; DEVELOPMENT_TEAM = 8M54J5J787; @@ -3408,7 +3408,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 1252; + CURRENT_PROJECT_VERSION = 1300; DEAD_CODE_STRIPPING = YES; DEBUG = NO; DEVELOPMENT_TEAM = 8M54J5J787; @@ -3647,7 +3647,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 1252; + CURRENT_PROJECT_VERSION = 1300; DEAD_CODE_STRIPPING = YES; DEBUG = NO; DEVELOPMENT_TEAM = 8M54J5J787; @@ -3762,7 +3762,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 1252; + CURRENT_PROJECT_VERSION = 1300; DEAD_CODE_STRIPPING = YES; DEBUG = YES; DEVELOPMENT_TEAM = 8M54J5J787; @@ -3877,7 +3877,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 1252; + CURRENT_PROJECT_VERSION = 1300; DEAD_CODE_STRIPPING = YES; DEBUG = YES; DEVELOPMENT_TEAM = 8M54J5J787; @@ -4057,7 +4057,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 1252; + CURRENT_PROJECT_VERSION = 1300; DEAD_CODE_STRIPPING = YES; DEBUG = NO; DEVELOPMENT_TEAM = 8M54J5J787; diff --git a/PHP Monitor.xcodeproj/xcshareddata/xcschemes/PHP Monitor EAP.xcscheme b/PHP Monitor.xcodeproj/xcshareddata/xcschemes/PHP Monitor EAP.xcscheme index 6706025e..4aa04cf5 100644 --- a/PHP Monitor.xcodeproj/xcshareddata/xcschemes/PHP Monitor EAP.xcscheme +++ b/PHP Monitor.xcodeproj/xcshareddata/xcschemes/PHP Monitor EAP.xcscheme @@ -67,7 +67,6 @@ buildConfiguration = "Debug.EA" selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" - language = "nl" launchStyle = "0" useCustomWorkingDirectory = "NO" ignoresPersistentStateOnLaunch = "NO" From e7cc940f65a1cfc17648ff55d4c2df4f2587890b Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Mon, 26 Jun 2023 21:23:00 +0200 Subject: [PATCH 08/34] =?UTF-8?q?=F0=9F=8C=90=20Updated=20translations?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - German translations provided by @dsturm - Vietnamese update provided by @xuandung38 --- PHP Monitor.xcodeproj/project.pbxproj | 3 + phpmon/de.lproj/Localizable.strings | 780 ++++++++++++++++++++++++++ phpmon/vi.lproj/Localizable.strings | 10 +- 3 files changed, 788 insertions(+), 5 deletions(-) create mode 100644 phpmon/de.lproj/Localizable.strings diff --git a/PHP Monitor.xcodeproj/project.pbxproj b/PHP Monitor.xcodeproj/project.pbxproj index 8adac907..8830f54c 100644 --- a/PHP Monitor.xcodeproj/project.pbxproj +++ b/PHP Monitor.xcodeproj/project.pbxproj @@ -1058,6 +1058,7 @@ C4D9ADBE277610E1007277F4 /* PhpSwitcher.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhpSwitcher.swift; sourceTree = ""; }; C4D9ADC7277611A0007277F4 /* InternalSwitcher.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InternalSwitcher.swift; sourceTree = ""; }; C4D9F24A280B69E100DCD39A /* AddProxyVC.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AddProxyVC.swift; sourceTree = ""; }; + C4DD662A2A4A1B4E00D6A731 /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/Localizable.strings; sourceTree = ""; }; C4DEB7D327A5D60B00834718 /* Stats.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Stats.swift; sourceTree = ""; }; C4E0F7EC27BEBDA9007475F2 /* NSWindowExtension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NSWindowExtension.swift; sourceTree = ""; }; C4E2E84628FC1D8C003B070C /* TestableConfigurationTest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestableConfigurationTest.swift; sourceTree = ""; }; @@ -2152,6 +2153,7 @@ Base, vi, nl, + de, ); mainGroup = C41C1B2A22B0097F00E7CF16; packageReferences = ( @@ -3105,6 +3107,7 @@ C4FC8D412A49816300FBBD16 /* en */, C4FC8D432A49816C00FBBD16 /* vi */, C4FC8D442A4981BC00FBBD16 /* nl */, + C4DD662A2A4A1B4E00D6A731 /* de */, ); name = Localizable.strings; sourceTree = ""; diff --git a/phpmon/de.lproj/Localizable.strings b/phpmon/de.lproj/Localizable.strings new file mode 100644 index 00000000..a89b1efc --- /dev/null +++ b/phpmon/de.lproj/Localizable.strings @@ -0,0 +1,780 @@ +// MENU ITEMS (MI) + +"mi_busy" = "PHP Monitor ist beschäftigt..."; +"mi_unsure" = "Wir sind uns nicht sicher, welche PHP-Version Sie ausführen."; +"mi_php_version" = "Globale Version: PHP"; +"mi_php_switch" = "Zu PHP wechseln"; +"mi_php_unsupported" = "Einige installierte PHP-Versionen werden nicht angezeigt."; +"mi_php_broken_1" = "Oh! Es scheint, dass Ihre PHP-Installation beschädigt ist..."; +"mi_php_broken_2" = "Versuchen Sie `php -v` in Ihrem Terminal auszuführen."; +"mi_php_broken_3" = "Sie können auch versuchen zu einer anderen Version zu wechseln."; +"mi_php_broken_4" = "Eventuell hilft es, `brew reinstall php` (oder für die entsprechende Version) auszuführen."; +"mi_no_php_linked" = "Keine PHP-Version verknüpft!"; +"mi_fix_php_link" = "Automatisch beheben..."; +"mi_no_php_linked_explain" = "Was ist das?"; +"mi_php_version_manager" = "PHP Versionen Manager..."; + +"mi_diagnostics" = "Diagnosen"; +"mi_active_services" = "Aktive Dienste"; +"mi_restart_php_fpm" = "Dienst neu starten: php"; +"mi_restart_nginx" = "Dienst neu starten: nginx"; +"mi_restart_dnsmasq" = "Dienst neu starten: dnsmasq"; +"mi_manage_services" = "Dienste verwalten"; +"mi_restart_valet_services" = "Valet Dienste neu starten"; +"mi_stop_valet_services" = "Valet Dienste stoppen"; + +"mi_fix_my_valet" = "Fix My Valet..."; +"mi_fix_my_valet_tooltip" = "Stimmt etwas mit der Valet-Installation nicht? Jetzt die automatischen Korrekturen von PHP Monitor ausprobieren, die alles in kürzester Zeit wieder zum Laufen bringen!"; +"mi_fix_brew_permissions" = "Homebrew-Berechtigungen wiederherstellen..."; +"mi_fix_brew_permissions_tooltip" = "Gibt es Probleme mit Berechtigungen, wenn Sie `brew upgrade` ausführen? PHP Monitor ist die Rettung!"; + +"mi_php_refresh" = "Informationen aktualisieren"; + +"mi_configuration" = "PHP-Konfiguration"; +"mi_limits" = "Grenzwerte Konfiguration"; +"mi_memory_limit" = "Speichergrenze"; +"mi_post_max_size" = "Max POST"; +"mi_upload_max_filesize" = "Max Upload"; +"mi_manual_actions" = "Manuelle Aktionen"; +"mi_services" = "Dienste"; +"mi_other" = "Erste Hilfe & Dienste"; +"mi_first_aid" = "Erste Hilfe"; + +"mi_xdebug_mode" = "Xdebug verwalten"; + +"mi_composer" = "Composer"; +"mi_valet_config" = "Valet-Ordner suchen (.config/valet)"; +"mi_php_config" = "PHP-Konfigurationsdatei suchen (php.ini)"; +"mi_phpmon_config" = "PHP Monitor Ordner suchen (.config/phpmon)"; +"mi_global_composer" = "Globale Composer-Datei suchen (.composer)"; +"mi_phpinfo" = "Aktuelle Konfiguration anzeigen (phpinfo)"; +"mi_update_global_composer" = "Globale Composer-Abhängigkeiten aktualisieren..."; +"mi_detected_extensions" = "Erkannte Erweiterungen"; +"mi_no_extensions_detected" = "Es wurden keine zusätzlichen Erweiterungen entdeckt."; + +"mi_php_doctor" = "PHP Doktor"; +"mi_fa_php_doctor" = "PHP Doktor öffnen..."; +"mi_recommendations_count" = "%i Problem(e) erkannt!"; +"mi_view_recommendations" = "Empfehlungen ansehen..."; + +"mi_valet" = "Laravel Valet"; +"mi_domain_list" = "Domains Liste ansehen..."; + +"mi_preferences" = "Einstellungen..."; +"mi_donate" = "Spenden..."; +"mi_check_for_updates" = "Nach Updates suchen..."; +"mi_lite_mode" = "Über den Standalone-Modus..."; +"mi_quit" = "PHP Monitor beenden"; +"mi_about" = "Über PHP Monitor"; + +"mi_presets_title" = "Konfigurationsvoreinstellungen"; +"mi_apply_presets_title" = "Voreinstellung anwenden"; +"mi_revert_to_prev_config" = "Zur vorherigen Konfiguration zurückkehren..."; +"mi_profiles_loaded" = "%i Profile aus Konfigurationsdatei geladen"; + +"mi_no_presets" = "Keine Voreinstellungen verfügbar."; +"mi_set_up_presets" = "Erfahren Sie mehr über Voreinstellungen..."; + +"mi_view_onboarding" = "Willkommenstour starten..."; + +"mi_xdebug_available_modes" = "Verfügbare Modi"; +"mi_xdebug_actions" = "Aktionen"; +"mi_xdebug_disable_all" = "Alle Modi deaktivieren"; + +// PHPMAN + +"phpman.busy.title" = "Suche nach Aktualisierungen..."; +"phpman.busy.description.outdated" = "Prüfe, ob eine PHP-Version veraltet ist..."; + +"phpman.version.broken" = "Diese Version scheint defekt zu sein, Sie können versuchen, sie zu reparieren."; +"phpman.version.has_update" = "Version %@ installiert, %@ verfügbar."; +"phpman.version.installed" = "Version %@ ist derzeit installiert."; +"phpman.version.available_for_installation" = "Diese Version kann installiert werden."; +"phpman.buttons.uninstall" = "Deinstallieren"; +"phpman.buttons.install" = "Installieren"; +"phpman.buttons.update" = "Aktualisieren"; +"phpman.buttons.repair" = "Reparieren"; + +"phpman.title" = "PHP-Versionen Manager"; +"phpman.description" = "Mit dem **PHP-Versionen Manager** können Sie verschiedene PHP-Versionen über Homebrew installieren, aktualisieren und löschen, ohne die Befehle im Terminal selbst ausführen zu müssen."; +"phpman.disclaimer" = "Bitte beachten Sie, dass die Installation oder Aktualisierung von PHP-Versionen dazu führen kann, dass auch andere Homebrew-Pakete aktualisiert werden müssen. Die meisten Installationsschritte nehmen einige Zeit in Anspruch, daher haben Sie bitte etwas Geduld, während Homebrew seine Arbeit erledigt."; +"phpman.refresh.button" = "Aktualisierungen suchen"; +"phpman.refresh.button.description" = "Sie können auf die Schaltfläche Aktualisieren klicken, um zu prüfen, ob Aktualisierungen für die installierten PHP-Versionen verfügbar sind."; + +"phpman.has_updates.description" = "Ein oder mehrere Aktualisierungen sind verfügbar. (Bitte beachten Sie, dass PHP Monitor PHP-Versionen immer im Ganzen installiert oder aktualisiert, so dass Sie immer alle Installationen auf einmal aktualisieren)."; +"phpman.has_updates.button" = "Alle aktualisieren"; + +"phpman.warnings.unsupported.title" = "Ihre Version von Homebrew kann Probleme verursachen"; +"phpman.warnings.unsupported.desc" = "Keine Funktion ist deaktiviert, aber einige Befehle funktionieren möglicherweise nicht wie erwartet. Sie führen derzeit Homebrew %@ aus. + +Derzeit ist Homebrew 4 die einzige unterstützte Version für den PHP Version Manager. Wenn Sie eine neuere Version von Homebrew verwenden, sollten Sie prüfen, ob eine neuere Version von PHP Monitor verfügbar ist."; + +"phpman.warnings.removal.title" = "Sind Sie sicher, dass Sie %@ deinstallieren wollen?"; +"phpman.warnings.removal.desc" = "Bitte beachten Sie, dass die Konfigurationsdateien nicht entfernt werden, so dass eine spätere Neuinstallation problemlos möglich sein sollte. + +Möglicherweise werden Sie während des Deinstallationsvorgangs nach Ihrem Passwort gefragt, wenn die Dateiberechtigungen eine einfache Entfernung nicht zulassen."; +"phpman.warnings.removal.button" = "Deinstallieren"; + +"phpman.failures.install.title" = "Installation fehlgeschlagen!"; +"phpman.failures.install.desc" = "Leider hat der Vorgang aus irgendeinem Grund einen Fehlercode zurückgegeben. Möglicherweise wurden die Formeln korrekt installiert oder aktualisiert. Leider kann ich hier nicht viel tun. Bitte sehen Sie sich die letzten Meldungen von Homebrew hier an, um mehr über den Vorfall zu erfahren: + +%@"; + +"phpman.action_prevented_busy.title" = "PHP Monitor ist derzeit beschäftigt."; +"phpman.action_prevented_busy.desc" = "PHP Monitor führt derzeit eine Art Wechsel zwischen PHP-Versionen durch. Um sicherzustellen, dass Ihr System nicht zusammenbricht, müssen Sie warten, bis PHP Monitor wieder einsatzbereit ist, bevor Sie dies erneut versuchen."; + +"phpman.uninstall_prevented.title" = "Sie können die derzeit aktive Version von PHP nicht über PHP Monitor deinstallieren."; +"phpman.uninstall_prevented.desc" = "Um Probleme mit PHP Monitor und weitere Abstürze zu vermeiden, ist es nicht möglich, die aktuell verlinkte Version von PHP über diese Benutzeroberfläche zu deinstallieren. Sie können die Version wechseln und es erneut versuchen, oder diese Version manuell über das Terminal deinstallieren.\n\nBitte beachten Sie, dass PHP Monitor abstürzen kann, wenn Sie die aktuell verknüpfte PHP-Version deinstallieren."; + +"phpman.failures.uninstall.title" = "Deinstallation fehlgeschlagen!"; +"phpman.failures.uninstall.desc" = "Leider ist die automatische Deinstallation fehlgeschlagen. Sie können versuchen, diesen Befehl manuell auszuführen: `%@` und finden Sie heraus, was schief gelaufen ist. Denken Sie daran, PHP Monitor neu zu starten (oder drücken Sie die Schaltfläche \"Aktualisieren\"), wenn dies geschehen ist."; + +"phpman.unlinked.title" = "Keine der auf Ihrem System installierten PHP-Versionen ist derzeit verlinkt."; +"phpman.unlinked.desc" = "Wahrscheinlich haben Sie noch irgendeine Version von PHP installiert, aber derzeit ist keine Version von PHP verlinkt."; +"phpman.unlinked.detail" = "Wenn keine PHP-Version verlinkt ist, ist die `php`-Binärdatei auf Ihrem System nicht zugänglich und Sie können keine PHP-Skripte ausführen, ohne explizit Teil des PATH zu sein. Sie können dieses Problem automatisch von PHP Monitor beheben lassen (wählen Sie \"Automatisch beheben\" im Hauptmenü) oder es selbst beheben, indem Sie \"brew link php --force\" ausführen."; + +"phpman.operations.repairing" = "Installationen werden repariert..."; +"phpman.operations.updating" = "Aktualisierungen werden installiert..."; +"phpman.operations.installing" = "%@ wird installiert..."; + +"phpman.steps.fetching" = "Abrufen..."; +"phpman.steps.downloading" = "Herunterladen von Paketdaten..."; +"phpman.steps.installing" = "Installieren einiger Paketdaten..."; +"phpman.steps.pouring" = "Einschenken... Das kann eine Weile dauern..."; +"phpman.steps.summary" = "Die Installation eines Pakets ist abgeschlossen..."; + +"phpman.services.loading" = "Laden..."; +"phpman.services.not_installed" = "Ein wichtiger Dienst ist nicht installiert."; +"phpman.services.error" = "Ein wichtiger Dienst meldet einen Fehlerzustand."; +"phpman.services.inactive" = "Ein wichtiger Dienst wird nicht ausgeführt."; +"phpman.services.all_ok" = "Alle Valet-Dienste sind in Ordnung."; + +// LITE MODE + +"lite_mode_explanation.title" = "Sie führen PHP Monitor derzeit im Standalone-Modus aus."; +"lite_mode_explanation.subtitle" = "PHP Monitor verfügt über zusätzliche Funktionen, die Sie nutzen können, wenn Sie Laravel Valet verwenden. Im Moment konnte PHP Monitor keine aktive Installation von Valet auf Ihrem System erkennen, daher sind diese Funktionen nicht verfügbar."; +"lite_mode_explanation.description" = "Für weitere Informationen empfehle ich einen Blick in die README-Datei (auf GitHub verfügbar), in der erklärt wird, welche Schritte Sie unternehmen müssen, um Valet zu installieren und PHP Monitor korrekt laufen zu lassen. Sie müssen PHP Monitor nach der Installation von Laravel Valet neu starten, bevor es den Standalone-Modus verlässt."; + +// GENERIC + +"generic.ok" = "OK"; +"generic.cancel" = "Abbrechen"; +"generic.retry" = "Wiederholen"; +"generic.notice" = "Hinweis"; + +// PRESET LOADING + +"preset_help_title" = "Arbeiten mit Konfigurationsvoreinstellungen"; +"preset_help_info" = "Sie können in der Datei config.json, die sich in ~/.config/phpmon/config.json befindet, Konfigurationsvoreinstellungen festlegen. Diese Voreinstellungen können eine Auswahl von Konfigurationswerten auf einmal anwenden. Dies ist eine leistungsstarke Funktion, die derzeit jedoch manuell eingerichtet werden muss."; +"preset_help_desc" = "Nach einem Neustart von PHP Monitor werden alle in der Datei gefundenen Voreinstellungen geladen. Wenn keine Voreinstellungen angezeigt werden, konnte die Datei wahrscheinlich nicht korrekt geparst werden.\n\nSie können auf das Fragezeichen in dieser Meldung klicken, um zu den FAQ auf GitHub zu gelangen, wo Sie weitere Informationen über diese Funktion finden, einschließlich einer Beispieldatei."; + +// MENU ITEMS (if window is open) + +"mm_add_folder_as_link" = "Ordner als Link hinzufügen..."; +"mm_reload_domain_list" = "Domain-Liste neu laden"; +"mm_find_in_domain_list" = "In Domain-Liste suchen..."; + +// SITE LIST + +"domain_list.title" = "Domains"; +"domain_list.subtitle" = ""; + +"domain_list.no_domains" = "Sie haben noch keine Domain oder Proxy eingerichtet."; +"domain_list.no_domains_for_search_query" = "Es gibt keine Ergebnisse für Ihre Suchanfrage."; + +"domain_list.tooltips.isolated" = "Diese Domain ist isoliert und verwendet PHP %@ anstelle des global verlinkten PHP."; +"domain_list.tooltips.checkmark" = "Diese Domain verwendet eine PHP-Version, die mit dieser Anforderung kompatibel ist (PHP %@). Klicken Sie auf die PHP-Version neben diesem Häkchen, um weitere Informationen darüber zu erhalten, wie diese Anforderung ermittelt wurde."; + +"domain_list.alerts_isolation_failed.title" = "Ups! Seiten-Isolierung nicht angewendet"; +"domain_list.alerts_isolation_failed.subtitle" = "Beim Versuch, den Isolationsstatus für diese Website zu ändern, ist etwas schief gegangen. Wenn dies Ihre Standardsite ist, die nicht verlinkt ist, empfehle ich, die Site manuell zu verlinken, bevor Sie die Isolierung einrichten."; +"domain_list.alerts_isolation_failed.desc" = "Um herauszufinden, was schief läuft, können Sie versuchen, den Befehl manuell in Ihrem Terminal auszuführen: %@"; + +"domain_list.alerts_status_not_changed.title" = "Ups! SSL Status nicht geändert"; +"domain_list.alerts_status_not_changed.desc" = "Etwas ist schief gelaufen. Versuchen Sie, den Befehl manuell in Ihrem Terminal auszuführen: %@"; + +"domain_list.alerts_status_changed.title" = "SSL Status geändert"; +"domain_list.alerts_status_changed.desc" = "Die Domain '%@' ist jetzt %@."; +"domain_list.alerts_status_secure" = "sicher"; +"domain_list.alerts_status_unsecure" = "unsicher"; + +"domain_list.confirm_unlink" = "Sind Sie sicher, dass Sie den Link '%@' aufheben wollen?"; +"domain_list.confirm_unlink_desc" = "Es werden keine Dateien entfernt. Sie können den Ordner jederzeit erneut verknüpfen, indem Sie auf die Schaltfläche + klicken und den ursprünglichen Ordner auswählen."; +"site_link.close" = "Schließen"; +"site_link.switch_to_php" = "Zu PHP %@ wechseln"; + +"domain_list.confirm_unproxy" = "Sind Sie sicher, dass Sie den Proxy '%@' entfernen wollen?"; +"domain_list.confirm_unproxy_desc" = "Sie können den Proxy jederzeit neu erstellen, indem Sie auf die Schaltfläche + klicken."; + +"domain_list.columns.secure" = "TLS"; +"domain_list.columns.domain" = "Domain"; +"domain_list.columns.active" = "Aktiv"; +"domain_list.columns.kind" = "Art"; +"domain_list.columns.project_type" = "Projekttyp"; + +// CHOOSE WHAT TO ADD + +"selection.title" = "Welche Art von Domain möchten Sie einrichten?"; +"selection.description" = "Links werden verwendet, um Projekte direkt zu auszuspielen. Wenn Sie einen Laravel-, Symfony-, WordPress-Ordner usw. mit Code haben, sollten Sie einen Link erstellen und den Ordner auswählen, in dem sich Ihr Code befindet.\n\nWenn Sie einen Proxy benötigen, können Sie z. B. einen Container auf einen bestimmten Domainnamen projizieren. Dies kann z. B. in Kombination mit Docker nützlich sein."; +"selection.create_link" = "Einen Link erstellen"; +"selection.create_proxy" = "Einen Proxy erstellen"; +"selection.cancel" = "Abbrechen"; + +// ADD PROXY TO DOMAINS LIST + +"domain_list.add.set_up_proxy" = "Einrichten eines Proxys"; +"domain_list.add.proxy_subject" = "Proxy-Subjekt (muss Protokoll und Port enthalten)"; +"domain_list.add.domain_name" = "Domain"; +"domain_list.add.create_proxy" = "Proxy erstellen"; +"domain_list.add.proxy_available" = "%@ wird durch einen Proxy ersetzt und ist verfügbar über: %@://%@.%@"; +"domain_list.add.proxy_https_warning" = "%@ wird durch einen Proxy ersetzt und ist verfügbar über: %@://%@.%@. + +(!) WICHTIG: Dieser Proxy funktioniert möglicherweise erst, wenn Sie manuell `proxy_ssl_verify off;` in die nginx-Konfigurationsdatei für diese Domain eintragen. Es wird empfohlen, eine ungesicherte Domäne als Proxysubjekt zu verwenden."; + +// ADD SITE TO DOMAINS LIST + +"domain_list.add.link_folder" = "Verknüpfen eines Ordners"; +"domain_list.add.domain_name_placeholder" = "Geben Sie hier eine Domain ein"; +"domain_list.add.secure_after_creation" = "%@.%@ nach Erstellung absichern"; +"domain_list.add.secure_description" = "Das Sichern einer Domain erfordert Administratorrechte.\n Möglicherweise werden Sie zur Eingabe Ihres Passworts oder Ihrer Touch ID aufgefordert."; +"domain_list.add.create_link" = "Link erstellen"; +"domain_list.add.cancel" = "Abbrechen"; +"domain_list.add.folder_available" = "Diese Seite wird über die folgende URL erreichbar sein: %@://%@.%@"; + +"domain_list.add.empty_fields" = "Ein oder mehrere Felder sind leer. Bitte füllen Sie alle erforderlichen Felder aus."; +"domain_list.add.errors.empty" = "Sie müssen einen Domain angeben."; +"domain_list.add.errors.empty_proxy" = "Sie müssen angeben, welche Daten vermittelt werden sollen."; +"domain_list.add.errors.subject_invalid" = "Das von Ihnen eingegebene Subjekt ist ungültig.\nSie müssen das Protokoll und den Port angeben."; +"domain_list.add.errors.already_exists" = "Ein Link mit diesem Namen existiert bereits."; + +// ADD SITE ERROR: FOLDER MISSING SINCE SELECTION + +"domain_list.alert.folder_missing.desc" = "Der von Ihnen gewählte Ordner scheint nicht mehr zu existieren. Möchten Sie das Hinzufügen dieses Ordners abbrechen? Wenn Sie den Ordner verschoben haben, können Sie ihn jederzeit zurücklegen und es erneut versuchen."; +"domain_list.alert.folder_missing.title" = "Ordner fehlt!"; +"domain_list.alert.folder_missing.cancel" = "Link Erstellung abbrechen"; +"domain_list.alert.folder_missing.return" = "OK"; + +"domain_list.add.modal_description" = "Wählen Sie zunächst den Ordner aus, den Sie verknüpfen möchten."; + +// SITE LIST ACTIONS + +"domain_list.isolate" = "PHP-Version wechseln"; +"domain_list.site_isolation" = "Seiten Isolierung"; +"domain_list.remove_isolation" = "Isolierung entfernen"; +"domain_list.always_use_php" = "Immer PHP %@ verwenden"; +"domain_list.isolation_unavailable" = "Isolierung wird nicht unterstützt (in Valet 2)"; + +"domain_list.actions" = "Aktionen"; +"domain_list.unlink" = "Ordner-Link aufheben"; +"domain_list.secure" = "Domain sichern"; +"domain_list.unsecure" = "Domain nicht mehr sichern"; +"domain_list.open_in_finder" = "In Finder öffnen"; +"domain_list.open_in_browser" = "Im Browser öffnen"; +"domain_list.open_in_terminal" = "Im Terminal öffnen"; +"domain_list.detected_apps" = "Erkannte Anwendungen"; +"domain_list.system_apps" = "System-Anwendungen"; +"domain_list.unproxy" = "Proxy entfernen"; +"domain_list.use_in_terminal" = "PHP %@ in Terminal öffnen"; + +"domain_list.alerts_isolated_php_terminal.title" = "Sie können PHP %@ in einem gesonderten Terminal verwenden!"; +"domain_list.alerts_isolated_php_terminal.subtitle" = "Leider kann PHP Monitor kein Terminal für Sie öffnen (und die entsprechenden Befehle eintippen). Sie müssen das Hilfsskript manuell aufrufen, um diese spezielle Version von PHP zu verwenden. Dazu können Sie das Folgende in ein Terminal Ihrer Wahl eingeben: + +. pm%@ + +Dadurch wird das von PHP Monitor generierte Hilfsskript bezogen und die Verwendung von PHP %@ für dieses gesonderten Terminal aktiviert. + +Dies hat keine Auswirkung auf andere Terminals, sondern nur auf diese gesonderte Terminalsitzung, in der Sie es verwenden (d.h. wenn Sie mehrere Tabs in Ihrer Terminalanwendung haben, sind andere Tabs und Fenster davon nicht betroffen)."; +"domain_list.alerts_isolated_php_terminal.desc" = "Wenn dies nicht funktioniert, können Sie den PHP Doktor über das Erste-Hilfe-Menü hier in PHP Monitor aufrufen. Weitere Informationen zu dieser Funktion finden Sie auch auf GitHub (im Wiki des PHP Monitor-Repositorys). Diese Warnung wurde aufgenommen, um die Sichtbarkeit dieser Funktion zu verbessern."; + + +"domain_list.warning.spaces" = "Warnung! Diese Website hat ein Leerzeichen im Ordnernamen.\nDie Website ist über den Browser nicht zu erreichen."; + +"domain_list.alert.invalid_folder_name" = "Ungültiger Ordnername"; +"domain_list.alert.invalid_folder_name_desc" = "Dieser Ordner konnte nicht in eine gültige URL aufgelöst werden. Das liegt in der Regel daran, dass der Ordnername ein Leerzeichen enthält. Bitte benennen Sie den Ordner um, laden Sie die Liste der Sites neu und versuchen Sie es erneut."; + +"domain_list.columns.tls" = "TLS"; +"domain_list.columns.domain" = "Domain"; +"domain_list.columns.php" = "PHP"; +"domain_list.columns.type" = "Typ"; +"domain_list.columns.kind" = "Art"; + +// DRIVERS + +"driver.not_detected" = "Andere"; + +// PRESET + +"preset.extension" = "%i Erweiterung"; +"preset.extensions" = "%i Erweiterungen"; +"preset.preference" = "%i Einstellung"; +"preset.preferences" = "%i Einstellungen"; + +// EDITORS + +"editors.alert.try_again" = "Erneut versuchen"; +"editors.alert.cancel" = "Abbrechen"; + +// PREFERENCES + +"prefs.title" = "PHP Monitor"; +"prefs.subtitle" = "Einstellungen"; +"prefs.close" = "Schließen"; + +"prefs.tabs.general" = "Allgemein"; +"prefs.tabs.appearance" = "Darstellung"; +"prefs.tabs.visibility" = "Sichtbarkeit"; +"prefs.tabs.notifications" = "Benachrichtigungen"; + +"prefs.global_shortcut" = "Globaler Tastenkombination:"; +"prefs.dynamic_icon" = "Dynamisches Icon:"; +"prefs.dynamic_icon" = "Icon Typ:"; +"prefs.info_density" = "Info-Genauigkeit:"; +"prefs.services" = "Dienste:"; +"prefs.switcher" = "Wechseln:"; +"prefs.php_doctor" = "PHP Doktor:"; +"prefs.integrations" = "Integrationen:"; +"prefs.updates" = "Aktualisierungen:"; +"prefs.notifications" = "Benachrichtigungen:"; +"prefs.warnings" = "Warnungen:"; +"prefs.menu_contents" = "Funktionen im Menü:"; +"prefs.startup" = "Starten:"; + +"prefs.auto_start_desc" = "Startet PHP Monitor automatisch, wenn Sie sich bei Ihrem Mac anmelden."; +"prefs.auto_start_title" = "PHP Monitor bei der Anmeldung starten"; + +"prefs.icon_options.php" = "PHP-Icon anzeigen"; +"prefs.icon_options.elephant" = "Elefanten-Icon anzeigen"; +"prefs.icon_options.none" = "Kein Icon anzeigen"; + +"prefs.icon_options_desc" = "Diese Option bestimmt, welches Symbol neben der Versionsnummer der aktuell verlinkten PHP-Version angezeigt wird. Wenn die Option \"Dynamisches Icon\" deaktiviert wurde, hat dies keine Auswirkungen."; + +"prefs.auto_restart_services_title" = "PHP-FPM automatisch neu starten"; +"prefs.auto_restart_services_desc" = "Wenn diese Option aktiviert ist, wird PHP-FPM automatisch neu gestartet, wenn Sie eine Erweiterung aktivieren oder deaktivieren. Etwas langsamer, wenn aktiviert, aber die Änderung der Erweiterung wird sofort für alle von Ihnen bedienten Seiten übernommen, ohne dass PHP-FPM manuell neu gestartet werden muss."; + +"prefs.dynamic_icon_title" = "Dynamisches Icon in der Menüleiste anzeigen"; +"prefs.dynamic_icon_desc" = "Wenn Sie diese Option nicht ausgewählt ist, wird immer das LKW-Icon angezeigt. Andernfalls wird die Hauptversionsnummer der aktuell verknüpften PHP-Version angezeigt."; + +"prefs.display_full_php_version" = "Vollständige PHP-Version überall anzeigen"; +"prefs.display_full_php_version_desc" = "Anzeige der vollständigen Version anstelle der Hauptversion in der Menüleiste und im Dropdown-Menü. (Dies kann auf kleineren Bildschirmen unerwünscht sein, daher ist dies standardmäßig deaktiviert)."; + +"prefs.auto_composer_update_title" = "Globale Abhängigkeiten automatisch aktualisieren"; +"prefs.auto_composer_update_desc" = "Wenn diese Option aktiviert ist, wird Composer automatisch aufgefordert, `composer global update` auszuführen, wenn Sie zwischen verschiedenen PHP-Versionen wechseln. Es wird angezeigt welche Änderungen vorgenommen werden oder was fehlgeschlagen ist."; + +"prefs.open_protocol_title" = "Integration von Drittanbietern zulassen"; +"prefs.open_protocol_desc" = "Wenn diese Option aktiviert ist, funktioniert die Interaktion mit Dienstprogrammen von Drittanbietern (z. B. Alfred, Raycast). Wenn Sie diese Option deaktivieren, empfängt PHP Monitor zwar die Befehle, reagiert aber nicht auf sie."; + +"prefs.automatic_update_check_title" = "Automatisch nach Updates suchen"; +"prefs.automatic_update_check_desc" = "Wenn diese Option aktiviert ist, prüft PHP Monitor automatisch, ob eine neuere Version verfügbar ist, und benachrichtigt Sie, wenn dies der Fall ist."; + +"prefs.php_doctor_suggestions_title" = "Vorschläge immer anzeigen"; +"prefs.php_doctor_suggestions_desc" = "Wenn Sie dieses Kontrollkästchen deaktivieren, werden im Menü von PHP Monitor keine Vorschläge für PHP Doktor angezeigt. Denken Sie daran, dass PHP Doktor nicht angezeigt wird, wenn keine Empfehlungen vorhanden sind."; + +"prefs.shortcut_set" = "Globale Tastenkombination festlegen"; +"prefs.shortcut_listening" = ""; +"prefs.shortcut_clear" = "Leeren"; +"prefs.shortcut_desc" = "Wenn Sie eine Tastenkombination eingerichtet haben, können Sie PHP-Monitor von jedem beliebigen Ort aus durch Drücken der gewählten Tastenkombination umschalten. (Brechen Sie die Auswahl einer Tastenkombination ab, indem Sie die Leertaste drücken)."; + +"prefs.notify_about_version_change_desc" = "Zeigt eine Benachrichtigung an, wenn sich die aktive PHP-Version ändert."; +"prefs.notify_about_version_change" = "Benachrichtigung über PHP-Versionswechsel"; + +"prefs.notify_about_php_fpm_change_desc" = "Zeigt eine Benachrichtigung an, wenn der aktive PHP-FPM-Prozess aufgrund einer Konfigurationsänderung neu gestartet wurde."; +"prefs.notify_about_php_fpm_change" = "Benachrichtigung über PHP-FPM-Neustart"; + +"prefs.notify_about_services_desc" = "Zeigt eine Benachrichtigung an, wenn einer der (von Valet installierten und konfigurierten) Homebrew-Dienste neu gestartet oder beendet wurde."; +"prefs.notify_about_services" = "Benachrichtigung über den Status der Dienste"; + +"prefs.notify_about_presets_desc" = "Zeigt eine Benachrichtigung an, wenn eine Voreinstellung erfolgreich angewendet oder rückgängig gemacht wurde."; +"prefs.notify_about_presets" = "Benachrichtigung über angewandte Voreinstellungen"; + +"prefs.notify_about_secure_status_desc" = "Zeigt eine Benachrichtigung an, wenn eine Domain abgesichert wurde oder nicht mehr abgesichert ist."; +"prefs.notify_about_secure_status" = "Benachrichtigung über sicheren/unsicheren Status"; + +"prefs.notify_about_composer_success_desc" = "Zeigt eine Benachrichtigung an, wenn die globale Composer-Konfiguration erfolgreich aktualisiert wurde."; +"prefs.notify_about_composer_success" = "Benachrichtigung über globale Composer-Aktualisierung"; + +"prefs.warn_about_non_standard_tld_desc" = "Wenn Sie eine nicht standardisierte TLD verwenden, möchten Sie vielleicht keine wiederholten Benachrichtigungen darüber erhalten."; +"prefs.warn_about_non_standard_tld" = "Warnung vor Nicht-Standard-TLD"; + +"prefs.display_global_version_switcher_desc" = "Wenn diese Funktion deaktiviert ist, können Sie die global verknüpfte PHP-Version nicht über das Hauptmenü ändern."; +"prefs.display_global_version_switcher" = "PHP-Wechselschalter"; + +"prefs.display_services_manager_desc" = "Wenn diese Funktion deaktiviert ist, können Sie einzelne Dienste weder sehen noch starten oder stoppen. (Wenn ein Dienst deaktiviert ist, können Sie dies nicht ohne weiteres erkennen)."; +"prefs.display_services_manager" = "Dienste-Manager"; + +"prefs.display_valet_integration_desc" = "Wenn diese Funktion deaktiviert ist, können Sie den Hauptordner von Valet nicht finden und die Liste der Domains nicht öffnen."; +"prefs.display_valet_integration" = "Valet Integration"; + +"prefs.display_php_config_finder_desc" = "Wenn diese Funktion deaktiviert ist, können Sie Ihre PHP-Konfigurationsdateien nicht leicht finden und/oder keinen phpinfo()-Dump erzeugen."; +"prefs.display_php_config_finder" = "PHP Konfigurationsfinder"; + +"prefs.display_composer_toolkit_desc" = "Wenn diese Funktion deaktiviert ist, können Sie den Composer nicht über das Hauptmenü aufrufen. Die automatische Aktualisierung des Composers nach dem Wechsel der Präferenz ist von dieser Änderung nicht betroffen."; +"prefs.display_composer_toolkit" = "Composer Werkzeugkasten"; + +"prefs.display_limits_widget_desc" = "Wenn diese Funktion deaktiviert ist, wird das Grenzwert-Widget (Speicher, POST, Upload) im Hauptmenü nicht angezeigt."; +"prefs.display_limits_widget" = "Grenzwerte Widget"; + +"prefs.display_extensions_desc" = "Wenn diese Funktion deaktiviert ist, können Sie die Erweiterungen nicht einfach über das Hauptmenü umschalten."; +"prefs.display_extensions" = "Erweiterungen"; + +"prefs.display_presets_desc" = "Wenn diese Funktion deaktiviert ist, können Sie die Voreinstellungen der PHP-Konfiguration nicht anwenden oder rückgängig machen."; +"prefs.display_presets" = "Voreinstellungen"; + +"prefs.display_misc_desc" = "Wenn diese Funktion deaktiviert ist, können Sie nicht auf das Menü Erste Hilfe & Dienste zugreifen."; +"prefs.display_misc" = "Erste Hilfe & Dienstleistungen Menü"; + +// NOTIFICATIONS + +"notification.version_changed_title" = "PHP %@ ist jetzt aktiv"; +"notification.version_changed_desc" = "PHP Monitor hat auf PHP %@ umgeschaltet."; + +"notification.php_fpm_restarted" = "PHP-FPM automatisch neu gestartet"; +"notification.php_fpm_restarted_desc" = "Sie haben eine Erweiterung umgeschaltet, so dass PHP-FPM automatisch neu gestartet wurde."; + +"notification.services_stopped" = "Valet Dienste gestoppt"; +"notification.services_stopped_desc" = "Alle Dienste wurden erfolgreich gestoppt."; + +"notification.services_restarted" = "Valet-Dienste neu gestartet"; +"notification.services_restarted_desc" = "Alle Dienste wurden erfolgreich neu gestartet."; + +"notification.preset_applied_title" = "Voreinstellung angewendet"; +"notification.preset_applied_desc" = "Die Voreinstellung \"%@\" wurde erfolgreich angewendet."; + +"notification.preset_reverted_title" = "Voreinstellung rückgängig gemacht"; +"notification.preset_reverted_desc" = "Die letzte Voreinstellung, die Sie vorgenommen haben, wurde rückgängig gemacht. Ihre vorherige Konfiguration ist nun aktiv."; + +"notification.phpmon_updated.title" = "PHP Monitor wurde aktualisiert!"; +"notification.phpmon_updated.desc" = "Sie verwenden jetzt PHP Monitor v%@. Danke, dass Sie auf dem Laufenden bleiben!"; +"notification.phpmon_updated_dev.desc" = "PHP Monitor v%@ (Build %@) ist jetzt installiert und aktiv."; + +// Composer Update +"alert.composer_missing.title" = "Composer nicht gefunden!"; +"alert.composer_missing.subtitle" = "PHP Monitor konnte Composer nicht finden. Stellen Sie sicher, dass Composer installiert ist und versuchen Sie es erneut."; +"alert.composer_missing.desc" = "PHP Monitor geht davon aus, dass sich der Composer entweder in: + +- `/usr/local/bin/composer` +- `/opt/homebrew/bin/composer` + +Vergewissern Sie sich, dass er an einem dieser Orte installiert ist, oder erstellen Sie einen Symlink, wenn Sie Composer an einem anderen Ort installiert haben."; + +"alert.composer_progress.title" = "Globale Abhängigkeiten aktualisieren..."; +"alert.composer_progress.info" = "Sie können den Fortschritt in der Terminalausgabe unten sehen."; + +"alert.composer_failure.title" = "Etwas ist schief gelaufen!"; +"alert.composer_failure.info" = "Ihre globalen Composer-Abhängigkeiten konnten nicht aktualisiert werden. +Weitere Informationen finden Sie in der Terminalausgabe unten. Sie müssen dieses Problem +Problem manuell beheben, indem Sie Ihr eigenes Terminal-Programm verwenden (hier sehen Sie nur die Ausgabe)."; + +"alert.composer_success.title" = "Composer erfolgreich aktualisiert!"; +"alert.composer_success.info" = "Ihre globalen Composer-Abhängigkeiten wurden erfolgreich aktualisiert."; + +// Composer Version + +"alert.composer_php_isolated.desc" = "Diese Seite wurde isoliert, was bedeutet, dass Valet PHP %@ speziell für diese Website bereitstellt. Die globale Version ist derzeit PHP %@."; +"alert.composer_php_requirement.title" = "'%@' erfordert PHP %@."; +"alert.composer_php_requirement.unable_to_determine" = "PHP-Anforderung kann nicht ermittelt werden"; +"alert.composer_php_requirement.type.unknown" = "PHP Monitor konnte nicht feststellen, welche Version von PHP für diese Domain erforderlich ist. Die Einschränkung kann ermittelt werden, wenn Sie eine `composer.json` oder eine `.valetphprc` Datei in Ihrem Projektverzeichnis haben."; +"alert.composer_php_requirement.type.require" = "Die erforderliche PHP-Version wurde durch Überprüfung des Feldes `require` in der Datei `composer.json` ermittelt, als die Seiten-Liste zuletzt aktualisiert wurde."; +"alert.composer_php_requirement.type.platform" = "Die erforderliche PHP-Version wurde durch Überprüfung des Feldes `platform` in der Datei `composer.json` ermittelt, als die Seiten-Liste zuletzt aktualisiert wurde."; +"alert.composer_php_requirement.type.valetphprc" = "Die erforderliche PHP-Version wurde durch Überprüfung der .valetphprc-Datei im Verzeichnis des Projekts ermittelt."; +"alert.composer_php_requirement.type.valetrc" = "Die erforderliche PHP-Version wurde durch Überprüfung der .valetrc-Datei im Verzeichnis des Projekts ermittelt."; +"alert.unable_to_determine_is_fine" = "Wenn Sie ein einfaches Projekt haben, kann es sein, dass es keine bestimmte PHP-Version als Voraussetzung gibt. In diesem Fall können Sie diese Warnung ignorieren."; +"alert.php_version_ideal" = "Die derzeit aktive PHP-Version ist ideal für diese Website."; +"alert.php_version_incorrect" = "Die derzeit aktive PHP-Version stimmt nicht mit den für diese Website erforderlichen Einschränkungen überein."; +"alert.php_suggestions" = "Möglicherweise gibt es eine andere PHP-Version, die der Vorgabe näher kommt."; + +// Suggest Fix My Valet +"alert.php_switch_failed.title" = "Die Umstellung auf PHP %@ scheint fehlgeschlagen zu sein."; +"alert.php_switch_failed.info" = "PHP Monitor hat festgestellt, dass PHP %@ nach dem Wechsel nicht aktiv ist. Sie können versuchen, Fix My Valet auszuführen und danach erneut umzuschalten. Möchten Sie diese Lösung ausprobieren?"; +"alert.php_switch_failed.desc" = "Als erstes sollten Sie \"Fix My Valet\" ausprobieren, falls Sie es noch nicht getan haben. Wenn PHP Monitor auch danach nicht in der Lage ist, die aktive PHP-Version zu ändern, müssen Sie möglicherweise Valet und die Homebrew-Pakete auf Ihrem System aktualisieren. Sie können dies tun, indem Sie `brew update && brew upgrade` ausführen, sowie Valet aktualisieren, indem Sie `composer global update && valet install` ausführen."; +"alert.php_switch_failed.confirm" = "Ja, führen Sie \"Fix My Valet\" aus."; +"alert.php_switch_failed.cancel" = "Nicht ausführen."; + +// PHP Formula Missing +"alert.php_formula_missing.title" = "Ups! Die `php`-Formel muss für Fix My Valet installiert sein..."; +"alert.php_formula_missing.info" = "Es scheint, dass Sie die `php`-Formel nicht installiert haben, was PHP Monitor daran hindert, \"Fix My Valet\" auszuführen. Bitte installieren Sie es mit \"brew install php\", starten Sie PHP Monitor neu und versuchen Sie es erneut."; + +// Fix My Valet Started +"alert.fix_my_valet.title" = "Haben Sie Probleme? Fix My Valet ist bereit, zu helfen!"; +"alert.fix_my_valet.info" = "Dies kann eine Weile dauern. Bitte haben Sie etwas Geduld.\n\nWenn dieser Vorgang abgeschlossen ist, werden alle anderen Dienste angehalten und PHP %@ wird verknüpft. Sobald dieser Vorgang abgeschlossen ist, können Sie zu der von Ihnen gewünschten PHP-Version wechseln.\n\n(Sie erhalten eine weitere Benachrichtigung, sobald Fix My Valet fertig ist.)"; +"alert.fix_my_valet.ok" = "Weiter"; +"alert.fix_my_valet.cancel" = "Abbrechen"; + +// Fix My Valet Done +"alert.fix_my_valet_done.title" = "Fix My Valet hat seine Tätigkeit beendet."; +"alert.fix_my_valet_done.subtitle" = "Alle entsprechenden Dienste wurden gestoppt und die richtigen neu gestartet, und die neueste Version von PHP sollte jetzt aktiv sein. Sie können nun versuchen, zu einer anderen PHP-Version zu wechseln."; +"alert.fix_my_valet_done.stay" = "Bei PHP %@ bleiben"; +"alert.fix_my_valet_done.switch_back" = "Zurück zu PHP wechseln %@"; +"alert.fix_my_valet_done.desc" = "Wenn der Aufruf von Websites immer noch nicht funktioniert, können Sie versuchen, `valet install` erneut auszuführen. Dies kann ein 502-Problem (Bad Gateway) beheben.\n\nWenn Valet defekt ist und Sie `valet install` nicht ausführen können, müssen Sie möglicherweise `composer global update` ausführen. Bitte konsultieren Sie die FAQ auf GitHub, wenn Sie weitere Probleme haben."; + +// Restore Homebrew Permissions +"alert.fix_homebrew_permissions.title" = "Über \"Homebrew-Berechtigungen wiederherstellen\""; +"alert.fix_homebrew_permissions.subtitle" = "Diese Funktion wurde geschaffen, damit Sie `brew upgrade` oder `brew cleanup` ohne Probleme mit der Berechtigung ausführen können. (Sie werden benachrichtigt, wenn dieser Fix angewendet wurde.)"; +"alert.fix_homebrew_permissions.desc" = "Dazu sind administrative Rechte erforderlich, da PHP Monitor Ihren Besitz an den Dateien und Ordnern wiederherstellt, die derzeit dem Benutzer `root` gehören, da die Valet-Dienste als root laufen."; +"alert.fix_homebrew_permissions.ok" = "Berechtigungen wiederherstellen"; +"alert.fix_homebrew_permissions.cancel" = "Abbrechen"; + +"alert.fix_homebrew_permissions_done.title" = "Alle Datei- und Ordnerberechtigungen für die Abhängigkeiten von Valet wurden wiederhergestellt."; +"alert.fix_homebrew_permissions_done.subtitle" = "Aus diesem Grund laufen alle Valet-Dienste derzeit nicht mehr. Sie können nun mit Homebrew interagieren, aber Ihre Valet-Seiten werden nicht verfügbar sein, da alle Dienste deaktiviert sind."; +"alert.fix_homebrew_permissions_done.desc" = "Wenn Sie mit Homebrew fertig sind (z.B. nachdem Sie `brew upgrade` ausgeführt haben), sollten Sie PHP Monitor neu starten und \"Restart Valet Services\" wählen, wenn Sie wollen, dass Valet wieder funktioniert. Es wird immer empfohlen, PHP Monitor neu zu starten, wenn Sie PHP-Versionen mit `brew upgrade` aktualisieren, da sonst Dinge kaputt gehen könnten."; + +// PHP FPM Broken +"alert.php_fpm_broken.title" = "Ihre PHP-FPM-Konfiguration verweist nicht auf den Valet-Socket!"; +"alert.php_fpm_broken.info" = "PHP Monitor hat festgestellt, dass es Probleme mit Ihrer PHP-FPM-Konfiguration gibt. Dies führt zu \"502 Bad Gateway\"-Antworten, wenn Sie Websites besuchen, die über Valet verlinkt sind."; +"alert.php_fpm_broken.description" = "Wenn es schon eine Weile her ist, können Sie dies normalerweise beheben, indem Sie `valet install` ausführen, was Ihre PHP-FPM-Konfiguration aktualisiert.\n\nWenn Sie diese Meldung sehen und versuchen, eine Vorabversion von PHP auszuführen, ist es möglich, dass Valet diese Vorabversion von PHP noch nicht unterstützt.\n\nSie müssen Ihre Installation von Laravel Valet mindestens auf Version 3.1.11 aktualisieren, danach sollten Sie `valet install` ausführen. Weitere Informationen finden Sie hier: https://phpmon.app/prerelease-php"; + +// PHP Monitor Cannot Start +"alert.cannot_start.title" = "PHP Monitor kann aufgrund eines Problems mit Ihrer Systemkonfiguration nicht starten"; +"alert.cannot_start.subtitle" = "Das Problem, über das Sie gerade informiert wurden, führt dazu, dass PHP Monitor nicht richtig funktioniert."; +"alert.cannot_start.description" = "Möglicherweise müssen Sie PHP Monitor nicht beenden und neu starten. Wenn Sie das Problem behoben haben (oder sich nicht mehr an das genaue Problem erinnern können), können Sie auf Wiederholen klicken, damit PHP Monitor die Startprüfungen erneut durchführt."; +"alert.cannot_start.close" = "Beenden"; +"alert.cannot_start.retry" = "Erneut versuchen"; + +// PHP alias issue +"alert.php_alias_conflict.title" = "Homebrew `php` Formel-Alias-Konflikt entdeckt"; +"alert.php_alias_conflict.info" = "PHP Monitor hat in Ihrem Homebrew-Setup widersprüchliche `php`-Aliase entdeckt, die beide als installiert erkannt wurden.\n\nDies wird wahrscheinlich zu einem fehlgeschlagenen Linking führen, wenn Sie die PHP-Version wechseln, und die Funktionalität von PHP Monitor unterbrechen.\n\nFür weitere Informationen besuchen Sie bitte: https://github.com/nicoverbruggen/phpmon/issues/54"; + +"alert.min_valet_version.title" = "Die installierte Version von Valet erfüllt nicht die Mindestanforderungen. PHP Monitor funktioniert möglicherweise nicht wie erwartet!"; +"alert.min_valet_version.info" = "Sie führen gerade Valet %@ aus. + +Für eine optimale Unterstützung der neuesten PHP-Versionen und einen korrekten Versionswechsel wird empfohlen, auf die Version %@ zu aktualisieren, die die Mindestanforderung für diese Version von PHP Monitor ist. + +Sie können dies tun, indem Sie `composer global update` in Ihrem Terminal ausführen. Danach führen Sie erneut `valet install` aus. Die besten Ergebnisse erzielen Sie, wenn Sie PHP Monitor danach neu starten. Bis das Problem behoben ist, verhält sich PHP Monitor möglicherweise nicht wie erwartet."; + +// Preset text description +"alert.preset_description.switcher_version" = "Wechselt zu PHP %@.\n\n"; +"alert.preset_description.applying_extensions" = "Wendet die folgenden Erweiterungen an: \n"; +"alert.preset_description.applying_config" = "Wendet die folgenden Konfigurationswerte an: \n"; +"alert.preset_description.enabled" = "aktiviert"; +"alert.preset_description.disabled" = "deaktiviert"; +"alert.preset_description.empty" = "(leer)"; + +// PHP version unavailable +"alert.php_switch_unavailable.title" = "Nicht unterstützte PHP-Version"; +"alert.php_switch_unavailable.subtitle" = "PHP Monitor kann nicht auf PHP %@ umschalten, da es möglicherweise nicht installiert oder verfügbar ist. Das Anwenden dieser Voreinstellung wurde abgebrochen."; +"alert.php_switch_unavailable.info" = "Bitte vergewissern Sie sich, dass PHP %@ installiert ist und Sie es in der Dropdown-Liste auswählen können. Derzeit unterstützte Versionen sind PHP: %@."; +"alert.php_switch_unavailable.ok" = "OK"; + +// Service error +"alert.service_error.title" = "Der Dienst '%@' hat einen Fehler gemeldet!"; +"alert.service_error.subtitle.error_log" = "Dies bedeutet, dass der Dienst '%@' nicht ausgeführt wird. Dies kann dazu führen, dass Valet nicht richtig funktioniert. Dieser Dienst hat eine zugehörige Protokolldatei, die Sie überprüfen sollten."; +"alert.service_error.subtitle.no_error_log" = "Dies bedeutet, dass der Dienst '%@' nicht ausgeführt wird. Dies kann dazu führen, dass Valet nicht richtig funktioniert. Leider gibt es keine zugehörige Protokolldatei für diesen Dienst."; +"alert.service_error.extra" = "Vielleicht möchten Sie auch die üblichen Schritte zur Fehlerbehebung befolgen. Um mehr darüber zu erfahren, klicken Sie auf die Schaltfläche '?' im Bereich Dienste in PHP Monitor."; + +"alert.service_error.button.show_log" = "Fehlerprotokoll anzeigen"; +"alert.service_error.button.close" = "Schließen"; + +// Composer issues +"alert.global_composer_platform_issues.title" = "Composer hat Probleme in Ihrer Plattform entdeckt"; +"alert.global_composer_platform_issues.subtitle" = "Die PHP-Version, zu der Sie gewechselt haben, ist zu alt für die globalen Composer-Abhängigkeiten, die Sie installiert haben. Diese Abhängigkeiten müssen aktualisiert werden."; +"alert.global_composer_platform_issues.desc" = "Die einfachste Möglichkeit, dieses Problem in Zukunft zu vermeiden, ist, zur ältesten installierten PHP-Version zu wechseln und \"Composer Global Update\" erneut auszuführen. \n\nAlternativ können Sie die Option 'Globale Abhängigkeiten automatisch aktualisieren' in den Einstellungen wählen, um dieses Problem ebenfalls zu vermeiden.\n\nWenn Sie diese Meldung weiterhin sehen, nachdem Sie versucht haben, die globalen Abhängigkeiten zu aktualisieren, sollten Sie sich Ihre globale Composer-Konfigurationsdatei ansehen, die sich in `~/.composer/composer.json` befindet."; +"alert.global_composer_platform_issues.buttons.update" = "Globale Abhängigkeiten aktualisieren"; +"alert.global_composer_platform_issues.buttons.quit" = "PHP Monitor beenden"; + +// Revert +"alert.revert_description.title" = "Konfiguration rückgängig machen?"; +"alert.revert_description.subtitle" = "PHP Monitor kann zur vorherigen Konfiguration zurückkehren, die aktiv war. Die folgenden Einstellungen werden übernommen: \n\n%@"; +"alert.revert_description.ok" = "Rückgängig machen"; +"alert.revert_description.cancel" = "Abbrechen"; + +// STARTUP + +/// 0. Architecture mismatch + +"alert.homebrew_missing.title" = "PHP Monitor kann nicht starten!"; +"alert.homebrew_missing.subtitle" = "Eine funktionierende Homebrew-Binärdatei konnte nicht am üblichen Ort gefunden werden. Bitte starten Sie die Anwendung neu, nachdem Sie dieses Problem behoben haben."; +"alert.homebrew_missing.info" = "Sie verwenden PHP Monitor mit der folgenden Architektur: %@. Daher wird eine funktionierende Homebrew-Binärdatei in `%@` erwartet, die aber nicht gefunden wurde. Das ist der Grund, warum PHP Monitor nicht funktioniert.\n\nWenn Sie Homebrew noch nicht installiert haben, tun Sie dies bitte. Wenn Sie mit Apple Silicon arbeiten, stellen Sie sicher, dass Homebrew und PHP Monitor die gleiche Architektur verwenden, indem Sie Rosetta aktivieren oder deaktivieren, falls erforderlich."; + +"alert.homebrew_missing.quit" = "Schließen"; + +/// PHP binary not found +"startup.errors.php_binary.title" = "PHP ist nicht korrekt installiert"; +"startup.errors.php_binary.subtitle" = "Sie müssen PHP über Homebrew installieren. Die App wird nicht richtig funktionieren, bis Sie dieses Problem behoben haben."; +"startup.errors.php_binary.desc" = "Normalerweise wird dieses Problem durch das Ausführen von `brew link php` in Ihrem Terminal gelöst.\n\n Um herauszufinden, was falsch ist, können Sie versuchen, `which php` in Ihrem Terminal auszuführen, es sollte `%@` zurückgeben."; + +/// PHP not found in /usr/local/opt or /opt/homebrew/opt +"startup.errors.php_opt.title" = "PHP ist nicht korrekt installiert"; +"startup.errors.php_opt.subtitle" = "Der PHP-Alias wurde in `%@` nicht gefunden. Die Anwendung wird nicht korrekt funktionieren, bis Sie dieses Problem behoben haben."; +"startup.errors.php_opt.desc" = "Wenn Sie bereits die `php` Formel installiert haben, müssen Sie eventuell `brew install php` ausführen, damit PHP Monitor diese Installation erkennt."; + +/// PHP binary is broken +"startup.errors.dyld_library.title" = "PHP ist installiert, scheint aber defekt zu sein"; +"startup.errors.dyld_library.subtitle" = "Wenn PHP Monitor versucht, Befehle auszuführen, gelingt es ihm nicht richtig. Dies ist normalerweise ein Hinweis auf eine fehlerhafte PHP-Installation."; +"startup.errors.dyld_library.desc" = "Das Ausführen von `brew reinstall php && brew link php` in Ihrem Terminal kann dieses Problem lösen, also versuchen Sie es bitte."; + +/// Valet is not installed +"startup.errors.valet_executable.title" = "Laravel Valet ist nicht korrekt installiert"; +"startup.errors.valet_executable.subtitle" = "Sie müssen Valet mit Composer installieren. Die App wird nicht richtig funktionieren, bis Sie dieses Problem behoben haben."; +"startup.errors.valet_executable.desc" = "Wenn Sie Laravel Valet noch nicht installiert haben, tun Sie dies bitte zuerst. Wenn Sie es installiert haben, aber trotzdem diese Meldung sehen, dann versuchen Sie, `which valet` im Terminal auszuführen, es sollte zurückgegeben werden: `%@`."; + +/// Valet configuration file missing or broken +"startup.errors.valet_json_invalid.title" = "Laravel Valet-Konfigurationsdatei ungültig oder fehlt"; +"startup.errors.valet_json_invalid.subtitle" = "PHP Monitor muss in der Lage sein, die Konfigurationsdatei zu lesen. Es scheint, dass die Datei falsch formatiert ist oder fehlt. Bitte überprüfen Sie, ob sie existiert und korrekt formatiert ist."; +"startup.errors.valet_json_invalid.desc" = "Sie finden die Datei unter `~/.config/valet/config.json`. Wenn Laravel Valet die Konfigurationsdatei nicht parsen kann, wird die JSON-Datei durch die Ausführung eines beliebigen `valet`-Befehls normalerweise automatisch korrigiert. Versuchen Sie, `valet --version` auszuführen, um die Datei automatisch zu korrigieren."; + +/// Valet version not readable +"startup.errors.valet_version_unknown.title" = "Ihre Valet-Version konnte nicht gelesen werden"; +"startup.errors.valet_version_unknown.subtitle" = "Das Auslesen der Ausgabe von `valet --version` ist fehlgeschlagen. Stellen Sie sicher, dass Ihre Valet-Installation funktioniert und aktuell ist."; +"startup.errors.valet_version_unknown.desc" = "Versuchen Sie, `valet --version` in einem Terminal auszuführen, um herauszufinden, was los ist."; + +"startup.errors.valet_not_installed.title" = "Ihr Valet-Konfigurationsverzeichnis ist nicht vorhanden"; +"startup.errors.valet_not_installed.subtitle" = "Das erforderliche Verzeichnis `~/.config/valet` fehlt. Dies bedeutet normalerweise, dass Sie vergessen haben, `valet install` auszuführen."; +"startup.errors.valet_not_installed.desc" = "Wenn Sie Valet bereits über Composer installiert haben, führen Sie bitte `valet install` aus, um die Einrichtung von Laravel Valet abzuschließen. + +Wenn Sie diese Meldung sehen, aber nicht wissen, warum dieser Ordner verschwunden ist, sollten Sie untersuchen, warum er verschwunden ist - er sollte nicht einfach verschwinden und es bedeutet, dass Ihre Valet-Installation fehlerhaft ist."; + +// Valet version too new or old +"startup.errors.valet_version_not_supported.title" = "Diese Version von Valet wird nicht unterstützt"; +"startup.errors.valet_version_not_supported.subtitle" = "Sie verwenden eine Version von Valet, die derzeit nicht unterstützt wird. PHP Monitor funktioniert derzeit mit Valet v2, v3 und v4. Um Probleme auf Ihrem System zu vermeiden, kann PHP Monitor nicht gestartet werden."; +"startup.errors.valet_version_not_supported.desc" = "Sie müssen eine Version von Valet installieren, die mit PHP Monitor kompatibel ist, oder Sie müssen ein Upgrade auf eine neuere Version von PHP Monitor durchführen, die möglicherweise die Kompatibilität mit dieser Version von Valet beinhaltet (weitere Informationen finden Sie in den aktuellen Release Notes)."; + +/// Brew & sudoers +"startup.errors.sudoers_brew.title" = "Brew wurde nicht zu sudoers.d hinzugefügt"; +"startup.errors.sudoers_brew.subtitle" = "Sie müssen `sudo valet trust` ausführen, um sicherzustellen, dass Valet Dienste starten und stoppen kann, ohne jedes Mal sudo verwenden zu müssen. Die Anwendung wird nicht richtig funktionieren, bis Sie dieses Problem behoben haben."; +"startup.errors.sudoers_brew.desc" = "Wenn Sie diesen Fehler immer wieder sehen, kann es sein, dass PHP Monitor die Datei nicht validieren kann. Dies lässt sich in der Regel wie folgt beheben: `sudo chmod +r /private/etc/sudoers.d/brew`."; + +/// Valet & sudoers +"startup.errors.sudoers_valet.title" = "Valet wurde nicht zu sudoers.d hinzugefügt"; +"startup.errors.sudoers_valet.subtitle" = "Sie müssen `sudo valet trust` ausführen, um sicherzustellen, dass Valet Dienste starten und stoppen kann, ohne jedes Mal sudo verwenden zu müssen. Die Anwendung wird nicht richtig funktionieren, bis Sie dieses Problem behoben haben. Wenn Sie dies bereits getan haben, führen Sie bitte `sudo valet trust` erneut aus."; +"startup.errors.sudoers_valet.desc" = "Wenn Sie diesen Fehler immer wieder sehen, kann es sein, dass PHP Monitor die Datei nicht validieren kann. Dies lässt sich in der Regel wie folgt beheben: `sudo chmod +r /private/etc/sudoers.d/valet`."; + +/// Platform issue detected +"startup.errors.global_composer_platform_issues.title" = "PHP Monitor und Valet funktionieren nicht richtig: Composer meldet ein Problem mit Ihrer Plattform"; +"startup.errors.global_composer_platform_issues.subtitle" = "Bitte befolgen Sie die folgenden empfohlenen Schritte, um dieses Problem in Zukunft zu vermeiden:\n\n1. Führen Sie `composer global update` aus.\n2. Starten Sie PHP Monitor neu. (Es sollte wieder funktionieren.)\n3. Wechseln Sie zur ältesten PHP-Version, die Sie installiert haben.\n4. Führen Sie `composer global update` erneut aus."; +"startup.errors.global_composer_platform_issues.desc" = "Sie können in den Einstellungen die Option \"Globale Abhängigkeiten automatisch aktualisieren\" aktivieren. Dadurch werden Ihre globalen Composer-Abhängigkeiten bei jeder Änderung der PHP-Version aktualisiert, was nicht ideal ist, wenn Sie nicht ständig Zugang zum Internet haben. Valet funktioniert derzeit nicht mit den installierten Abhängigkeiten. Normalerweise wird dies durch eine Versionsabweichung verursacht: d.h. installierte Abhängigkeiten für eine neuere Version von PHP als die derzeit aktive Version."; + +/// Cannot retrieve services +"startup.errors.services_json_error.title" = "Status der Dienste kann nicht ermittelt werden"; +"startup.errors.services_json_error.subtitle" = "PHP Monitor fragt normalerweise `brew` mit dem folgenden Befehl ab, um zu testen, ob die Dienste abgerufen werden können: `sudo brew services info nginx --json`.\nPHP Monitor konnte diese Antwort nicht interpretieren."; +"startup.errors.services_json_error.desc" = "Dies kann passieren, wenn Ihre Homebrew-Installation veraltet ist. In diesem Fall gibt Homebrew noch kein JSON zurück. Sie können dies normalerweise beheben, indem Sie `brew update` oder `brew tap homebrew/services` ausführen. Sie können auch versuchen, `sudo brew services info nginx --json` in einem Terminal Ihrer Wahl auszuführen."; + +/// Issue with `which` alias +"startup.errors.which_alias_issue.title" = "Es wurde ein Konfigurationsproblem festgestellt"; +"startup.errors.which_alias_issue.subtitle" = "Es scheint, dass es eine Datei in `/usr/local/bin/which` gibt. Diese wird normalerweise von NodeJS eingerichtet, aber `node` ist nicht im PATH in `/usr/local/bin`. Um dies zu beheben, lesen Sie weiter."; +"startup.errors.which_alias_issue.desc" = "Sie müssen einen Symlink von `node` in das Verzeichnis `/usr/local/bin` setzen, um sicherzustellen, dass PHP Monitor erfolgreich starten kann. Für weitere Informationen siehe: https://github.com/nicoverbruggen/phpmon/issues/174"; + +// Warning about a different PHP version linked than last time +"startup.version_mismatch.title" = "Die aktive PHP-Version hat sich geändert."; +"startup.version_mismatch.subtitle" = "Seitdem PHP Monitor das letzte Mal aktiv war, wurde Ihre verlinkte PHP-Version auf PHP %@ geändert. Möchten Sie zurück zu PHP %@ wechseln oder möchten Sie die aktuelle Version weiter verwenden?"; +"startup.version_mismatch.desc" = "PHP Monitor überwacht, welche Version von PHP global verlinkt ist. Die globale Version kann durch ein anderes Programm geändert worden sein oder Homebrew kann nach Upgrades eine andere Formel verlinkt haben."; +"startup.version_mismatch.button_switch_back" = "Zurück zu PHP wechseln %@"; +"startup.version_mismatch.button_stay" = "Weiterhin PHP %@ verwenden"; + +// Warning about unsupported PHP versions +"startup.unsupported_versions_explanation.title" = "Von Valet nicht unterstützte PHP-Installation(en) entdeckt!"; +"startup.unsupported_versions_explanation.subtitle" = "Die folgenden PHP-Versionen sind auf Ihrem System installiert, werden aber von dieser Version von Valet nicht unterstützt. + +%@ + +Valet könnte kaputt gehen, wenn Sie diese PHP-Versionen verknüpfen, so dass PHP Monitor Sie nicht zu diesen Versionen wechseln lässt."; +"startup.unsupported_versions_explanation.desc" = "Wenn Sie Unterstützung für ältere PHP-Versionen benötigen, müssen Sie möglicherweise ein Downgrade auf eine ältere Version von Valet durchführen. Andernfalls wäre es eine gute Idee, alle veralteten Versionen zu deinstallieren, die nicht mehr verwendet werden. Es kann auch sein, dass diese Version von Valet zu alt ist. Diese Meldung wird erst nach einem Neustart von PHP Monitor entfernt."; + +// Sponsor encouragement +"startup.sponsor_encouragement.title" = "Wenn PHP Monitor für Sie oder Ihr Unternehmen nützlich war, hinterlassen Sie bitte eine Spende."; +"startup.sponsor_encouragement.subtitle" = "Um 100 % transparent zu sein: Ich habe vor, PHP Monitor quelloffen und frei zu halten. Ihre Unterstützung macht diese Entscheidung sehr einfach.\n\n(Sie werden diese Aufforderung nur einmal sehen.)"; +"startup.sponsor_encouragement.desc" = "Wenn Sie bereits gespendet haben, dann sind SIE der Grund, warum die App all diese Aktualisierungen erhalten konnte. In diesem Fall ist dies eine DANKE-Nachricht an Sie. Ich weiß die Unterstützung zu schätzen."; + +"startup.sponsor_encouragement.accept" = "Jetzt spenden"; +"startup.sponsor_encouragement.learn_more" = "Mehr erfahren"; +"startup.sponsor_encouragement.skip" = "Nein, danke"; + +// ERROR MESSAGES (based on AlertableError) + +"alert.errors.homebrew_permissions.applescript_returned_nil.title" = "Wiederherstellung der Homebrew-Berechtigungen fehlgeschlagen"; +"alert.errors.homebrew_permissions.applescript_returned_nil.description" = "Das Ergebnis des Skripts, das ausgeführt wird, um die Berechtigungen anzupassen, ist gleich Null, was normalerweise bedeutet, dass Sie PHP Monitor keine administrativen Berechtigungen erteilt haben.\n\n Wenn Sie während der Authentifizierungsaufforderung auf Abbrechen geklickt haben, ist das normal. Wenn Sie sich tatsächlich authentifiziert haben und diese Meldung immer noch angezeigt wird, ist wahrscheinlich etwas schief gelaufen."; + +"alert.key_service_not_running.title" = "Aufgrund von Problemen mit den erforderlichen Homebrew-Diensten funktioniert Valet derzeit nicht korrekt"; +"alert.key_service_not_running.subtitle" = "Damit Valet ordnungsgemäß funktioniert, müssen mindestens drei wichtige Dienste korrekt laufen. + +PHP Monitor meldet, dass dies nicht der Fall ist. Sie können versuchen, dies zu beheben, indem Sie auf die Schaltfläche mit dem \"X\" im Menü unter dem betroffenen Dienst drücken, um den derzeit inaktiven Dienst (wieder) zu starten."; +"alert.key_service_not_running.desc" = "Wenn das Anklicken der Schaltfläche unterhalb des Dienstes nicht funktioniert (d.h. es erscheint diee Ladeanimation, aber nach einiger Zeit bleibt ein 'X'), müssen Sie möglicherweise Fix My Valet ausführen. Sie können dies über das Menü Erste Hilfe > Fix My Valet tun. + +Alternativ können Sie auch `valet stop` und `valet start` im Terminal verwenden, was das Problem ebenfalls beheben kann (als Alternative zu Fix My Valet). + +Zur weiteren Fehlersuche können Sie den GitHub-Problem-Tracker einsehen, wo andere möglicherweise ähnliche Probleme hatten. Als Entwickler versuche ich, sicherzustellen, dass jede Frage beantwortet wird :)"; + +"alert.key_service_has_error.title" = "Aufgrund von Problemen mit den erforderlichen Homebrew-Diensten funktioniert Valet derzeit nicht korrekt"; +"alert.key_service_has_error.subtitle" = "Damit Valet ordnungsgemäß funktioniert, müssen mindestens drei wichtige Dienste korrekt laufen. + +PHP Monitor meldet, dass dies nicht der Fall ist. Es scheint, dass einer der betroffenen Dienste einen Fehlerstatus meldet, daher empfehle ich, auf das \"E\" zu klicken. + +PHP Monitor wird versuchen, den Dienst neu zu starten, und sollte dies nicht gelingen (was wahrscheinlich ist), wird es Ihnen anbieten, die Protokolldatei zu suchen, falls sie existiert, die möglicherweise zusätzliche Informationen enthält, die Ihnen bei der Fehlersuche helfen können."; +"alert.key_service_has_error.desc" = "Wenn ein Dienst einen Fehler meldet, ist dies leider oft auf einen ungültigen Konfigurationsstatus zurückzuführen, der schwer zu beheben sein kann. + +ALLGEMEINE TIPPS ZUR FEHLERSUCHE + +- Versuchen Sie zunächst, den Dienst neu zu starten und die Protokolldatei (falls vorhanden) zu überprüfen. Sie können dies von PHP Monitor durchführen lassen, indem Sie auf die Schaltfläche 'E' klicken. + +- PHP: Wenn Sie eine Fehlermeldung erhalten, liegt möglicherweise ein Problem mit der PHP-Konfiguration vor. Stellen Sie sicher, dass die .ini-Dateien in der Homebrew-Installation in Ordnung sind und keine Socket-Konflikte bestehen. + +- nginx: Wenn Sie einen Fehlerstatus sehen, ist eine Site wahrscheinlich falsch konfiguriert (normalerweise im Fehlerprotokoll vermerkt). Sie sollten den nginx-Ordner von Valet überprüfen. + +- dnsmasq: Wenn Sie einen Fehlerstatus sehen, ist die dnsmasq-Konfigurationsdatei wahrscheinlich fehlerhaft (normalerweise unter ~/.config/valet/dnsmasq.d)."; + +// CHECK FOR UPDATES + +"updater.alerts.newer_version_available.title" = "PHP Monitor v%@ ist jetzt verfügbar!"; +"updater.alerts.newer_version_available.subtitle" = "Es wird dringend empfohlen, PHP Monitor auf dem neuesten Stand zu halten, da neuere Versionen in der Regel Fehler beheben und Korrekturen zur Unterstützung der neuesten Versionen von Valet und PHP enthalten."; +"updater.installation_source.brew" = "Die empfohlene Methode, um Updates für PHP Monitor zu installieren, besteht darin, einfach auf \"Update installieren\" zu drücken.\n\nDa Sie Homebrew zur Installation der Anwendung verwendet haben, können Sie das Upgrade auch über das Terminal durchführen, indem Sie `%@` ausführen, was jedoch nicht empfohlen wird.\n\n(Bitte beachten Sie, dass bei der Installation über diesen eingebauten Updater PHP Monitor aus dem Caskroom-Verzeichnis von Homebrew entfernt wird, um zu verhindern, dass doppelte Updates heruntergeladen werden und später Probleme verursachen)."; +"updater.installation_source.direct" = "Die empfohlene Methode zur Installation von Updates für PHP Monitor ist, einfach auf \"Update installieren\" zu klicken."; +"updater.alerts.buttons.release_notes" = "Änderungsprotokoll anzeigen"; + +"updater.alerts.is_latest_version.title" = "PHP Monitor ist auf dem neuesten Stand!"; +"updater.alerts.is_latest_version.subtitle" = "Die derzeit installierte Version (v%@) ist aktuell.\nEs ist keine neuere Version verfügbar."; + +"updater.alerts.cannot_check_for_update.title" = "PHP Monitor konnte nicht feststellen, ob eine neuere Version verfügbar ist."; +"updater.alerts.cannot_check_for_update.subtitle" = "Möglicherweise sind Sie nicht mit dem Internet verbunden, blockieren den Datenverkehr oder GitHub ist nicht verfügbar und erlaubt es Ihnen nicht, nach Updates zu suchen. Wenn Sie diese Meldung immer wieder sehen, sollten Sie die Seite mit den Veröffentlichungen manuell überprüfen."; +"updater.alerts.cannot_check_for_update.description" = "Die aktuell installierte Version ist: %@. Sie können die Liste der neuesten Versionen (auf GitHub) aufrufen, indem Sie auf die Schaltfläche auf der linken Seite klicken."; +"updater.alerts.buttons.releases_on_github" = "Versionen anzeigen"; +"updater.alerts.buttons.install" = "Update installieren"; +"updater.alerts.buttons.dismiss" = "Ablehnen"; + +// WARNINGS ABOUT NON-DEFAULT TLD + +"alert.warnings.tld_issue.title" = "Sie verwenden nicht `.test` als TLD für Valet."; +"alert.warnings.tld_issue.subtitle" = "Die Verwendung einer nicht standardmäßigen TLD funktioniert möglicherweise nicht korrekt und wird offiziell nicht unterstützt."; +"alert.warnings.tld_issue.description" = "PHP Monitor bleibt funktionsfähig, aber es kann zu Problemen kommen: Die App zeigt möglicherweise nicht korrekt an, welche Domains gesichert wurden. Um optimale Ergebnisse zu erzielen, gehen Sie zu Ihrer Valet-Konfigurationsdatei (config.json im Valet-Verzeichnis) und ändern Sie die TLD zurück in \"test\"."; +"alert.do_not_tell_again" = "Sag's mir nicht noch einmal"; + +// WARNINGS + +"warnings.title" = "PHP Doktor"; +"warnings.description" = "Der **PHP Doktor** schlägt Verbesserungen an Ihrer aktiven Systemkonfiguration vor."; +"warnings.disclaimer" = "Sie können alle Empfehlungen aus dem PHP-Monitor-Menü in den Einstellungen ausblenden, aber es wird empfohlen, dass Sie sich mit allen umsetzbaren Punkten befassen."; +"warnings.refresh.button" = "Erneut auswerten"; +"warnings.refresh.button.description" = "Drücken Sie diesen Button, wenn Sie ein Problem behoben haben. Dies veranlasst PHP Monitor, Ihre Umgebung neu zu bewerten. Wenn das Problem wirklich behoben ist, sollte die Empfehlung verschwinden."; + +"warnings.helper_permissions.title" = "Die Helfer von PHP Monitor sind derzeit nicht verfügbar."; +"warnings.helper_permissions.description" = "PHP Monitor wird mit verschiedenen Hilfsskripten geliefert. Mit diesen Skripten können Sie ganz einfach eine bestimmte PHP-Version aufrufen, ohne die verknüpfte PHP-Version zu wechseln."; +"warnings.helper_permissions.unavailable" = "Diese Helfer sind jedoch potentiell *nicht verfügbar*, da PHP Monitor derzeit die erforderlichen Symlinks nicht erstellen oder aktualisieren kann."; +"warnings.helper_permissions.symlink" = "Wenn Sie `/usr/local/bin` nicht beschreibbar machen wollen, können Sie das Hilfsverzeichnis von PHP Monitor zu Ihrer `PATH`-Variablen hinzufügen, um diese Warnung zu beseitigen. (Klicken Sie auf \"Mehr erfahren\", um herauszufinden, wie Sie dieses Problem beheben können)."; + +"warnings.arm_compatibility.title" = "Sie führen PHP Monitor mit Rosetta auf Apple Silicon aus, was bedeutet, dass Ihre PHP-Umgebung ebenfalls über Rosetta läuft."; +"warnings.arm_compatibility.description" = "Sie scheinen eine ARM-kompatible Version von macOS zu verwenden, aber Sie führen derzeit PHP Monitor mit Rosetta aus. Obwohl dies korrekt funktioniert, wird empfohlen, dass Sie die native Version von Homebrew verwenden."; + +"warnings.files_missing.title" = "Ihrer PHP-Installation fehlen wichtige erforderliche Konfigurationsdateien."; +"warnings.files_missing.description" = "Die folgenden wichtigen Konfigurationsdateien sollten nach der Installation von PHP vorhanden sein: + +- %@ + +Wenn diese Dateien fehlen, sollten Sie zu der PHP-Version wechseln, die mit diesen Dateien verknüpft ist: Das kann das Problem beheben. Wenn dies das Problem nicht behebt, wird empfohlen, die entsprechende(n) PHP-Version(en) über Homebrew erneut zu installieren, wodurch die fehlenden Konfigurationsdateien wiederhergestellt werden sollten. Fehlende Konfigurationsdateien können der Grund dafür sein, dass Sie die Fehlermeldung '502 Bad Gateway' erhalten, auch wenn Sie Fix My Valet ausgeführt haben (wenn Sie Valet verwenden)."; + +"warnings.none" = "Im Moment sind keine Empfehlungen für Sie verfügbar. Es ist alles in Ordnung!"; + +// ONBOARDING + +"onboarding.title" = "Willkommenstour"; +"onboarding.welcome" = "Willkommen bei PHP Monitor!"; +"onboarding.explore" = "Sie haben nun Zugriff auf die gesamte Funktionspalette von PHP Monitor. Auf diesem Bildschirm erfahren Sie mehr über einige der Funktionen, die PHP Monitor zu bieten hat."; +"onboarding.explore.lite" = "Sie haben nun Zugriff auf die wichtigsten Funktionen von PHP Monitor. +Bitte beachten Sie, dass einige Funktionen (unten ausgegraut) derzeit nicht verfügbar sind, da Laravel Valet nicht aktiv ist."; +"onboarding.tour.menu_bar.title" = "Maximale Leistung direkt in Ihrer Menüleiste"; +"onboarding.tour.menu_bar" = "PHP Monitor lebt in Ihrer Menüleiste. Von diesem Menü aus können Sie auf die meisten wichtigen Funktionen von PHP Monitor zugreifen, einschließlich der Umschaltung der global verknüpften PHP-Version, dem Auffinden von Konfigurationsdateien, der Installation verschiedener PHP-Versionen und mehr."; +"onboarding.tour.faq_hint" = "**Fragen?** Ich empfehle, dass Sie sich die [README](https://github.com/nicoverbruggen/phpmon/blob/main/README.md) auf GitHub ansehen: Sie enthält eine umfassende FAQ mit verschiedenen Tipps und allgemeinen Fragen und Antworten."; +"onboarding.tour.services.title" = "Verwalten Sie Homebrew-Dienste"; +"onboarding.tour.services" = "Sobald Sie auf den Menüleisteneintrag klicken, können Sie anhand der Häkchen oder Kreuze auf einen Blick sehen, ob alle Homebrew-Dienste aktiv sind und laufen. Sie können auch auf einen Dienst klicken, um ihn schnell umzuschalten."; +"onboarding.tour.domains.title" = "Verwalten Sie Domains"; +"onboarding.tour.domains" = "Wenn Sie die Domain-Liste über den Menüleisteneintrag öffnen, können Sie sehen, welche Domains verlinkt und geparkt sind, sowie aktive nginx-Proxys einsehen."; +"onboarding.tour.isolation.title" = "Isolieren Sie Domains"; +"onboarding.tour.isolation" = "Wenn Sie Valet 3 oder eine neuere Version installiert haben, können Sie sogar die Domainnisolierung nutzen, indem Sie mit der rechten Maustaste auf eine bestimmte Domäne im Domänenfenster klicken. Dadurch können Sie eine bestimmte PHP-Version auswählen, die nur für diese Domain verwendet werden soll."; +"onboarding.tour.feature_unavailable" = "Diese Funktion ist derzeit nicht verfügbar und erfordert die Installation von Laravel Valet."; +"onboarding.tour.once" = "Sie sehen die Willkommenstour nur einmal. Sie können die Willkommenstour später über das Symbol in der Menüleiste (im Menü unter Erste Hilfe & Dienste) erneut öffnen."; +"onboarding.tour.close" = "Tour beenden"; diff --git a/phpmon/vi.lproj/Localizable.strings b/phpmon/vi.lproj/Localizable.strings index 3b918b13..8c96a4e1 100644 --- a/phpmon/vi.lproj/Localizable.strings +++ b/phpmon/vi.lproj/Localizable.strings @@ -144,10 +144,10 @@ Bạn có thể được yêu cầu nhập mật khẩu của mình trong quá t "phpman.steps.summary" = "Một số gói đã hoàn thành cài đặt..."; "phpman.services.loading" = "Đang tải..."; -"phpman.services.not_installed" = "Một dịch vụ chính không được cài đặt."; -"phpman.services.error" = "Một dịch vụ chính đang báo cáo trạng thái lỗi."; -"phpman.services.inactive" = "Một dịch vụ chính không hoạt động."; -"phpman.services.all_ok" = "Tất cả các dịch vụ Valet đều OK."; +"phpman.services.not_installed" = "Một dịch vụ chính chưa được cài đặt."; +"phpman.services.error" = "Một dịch vụ chính báo cáo trạng thái lỗi."; +"phpman.services.inactive" = "Một dịch vụ chính không chạy."; +"phpman.services.all_ok" = "Tất cả các dịch vụ Valet OK."; // LITE MODE @@ -286,7 +286,7 @@ Bạn có thể được yêu cầu nhập mật khẩu của mình trong quá t "domain_list.columns.secure" = "TLS"; "domain_list.columns.domain" = "Tên miền"; -"domain_list.columns.active" = "Hoạt động"; +"domain_list.columns.active" = "Kích hoạt"; "domain_list.columns.kind" = "Loại"; "domain_list.columns.project_type" = "Loại dự án"; From 72cbf6996d6889350466d9a8827843b2633d4e82 Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Mon, 26 Jun 2023 21:29:28 +0200 Subject: [PATCH 09/34] =?UTF-8?q?=F0=9F=94=A7=20Removed=20usage=20of=20Bas?= =?UTF-8?q?e=20Internationalization?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- PHP Monitor.xcodeproj/project.pbxproj | 5 ++--- phpmon/Domain/App/{Base.lproj => en.lproj}/Main.storyboard | 0 2 files changed, 2 insertions(+), 3 deletions(-) rename phpmon/Domain/App/{Base.lproj => en.lproj}/Main.storyboard (100%) diff --git a/PHP Monitor.xcodeproj/project.pbxproj b/PHP Monitor.xcodeproj/project.pbxproj index 8830f54c..baddca0f 100644 --- a/PHP Monitor.xcodeproj/project.pbxproj +++ b/PHP Monitor.xcodeproj/project.pbxproj @@ -898,7 +898,6 @@ C41C1B3322B0097F00E7CF16 /* PHP Monitor.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "PHP Monitor.app"; sourceTree = BUILT_PRODUCTS_DIR; }; C41C1B3622B0097F00E7CF16 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; C41C1B3A22B0098000E7CF16 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; - C41C1B3D22B0098000E7CF16 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; C41C1B3F22B0098000E7CF16 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; C41C1B4022B0098000E7CF16 /* phpmon.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = phpmon.entitlements; sourceTree = ""; }; C41C1B4822B00A9800E7CF16 /* MenuBarImageGenerator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MenuBarImageGenerator.swift; sourceTree = ""; }; @@ -1059,6 +1058,7 @@ C4D9ADC7277611A0007277F4 /* InternalSwitcher.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InternalSwitcher.swift; sourceTree = ""; }; C4D9F24A280B69E100DCD39A /* AddProxyVC.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AddProxyVC.swift; sourceTree = ""; }; C4DD662A2A4A1B4E00D6A731 /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/Localizable.strings; sourceTree = ""; }; + C4DD662B2A4A1E5B00D6A731 /* en */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = en; path = en.lproj/Main.storyboard; sourceTree = ""; }; C4DEB7D327A5D60B00834718 /* Stats.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Stats.swift; sourceTree = ""; }; C4E0F7EC27BEBDA9007475F2 /* NSWindowExtension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NSWindowExtension.swift; sourceTree = ""; }; C4E2E84628FC1D8C003B070C /* TestableConfigurationTest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestableConfigurationTest.swift; sourceTree = ""; }; @@ -2150,7 +2150,6 @@ hasScannedForEncodings = 0; knownRegions = ( en, - Base, vi, nl, de, @@ -3096,7 +3095,7 @@ C41C1B3C22B0098000E7CF16 /* Main.storyboard */ = { isa = PBXVariantGroup; children = ( - C41C1B3D22B0098000E7CF16 /* Base */, + C4DD662B2A4A1E5B00D6A731 /* en */, ); name = Main.storyboard; sourceTree = ""; diff --git a/phpmon/Domain/App/Base.lproj/Main.storyboard b/phpmon/Domain/App/en.lproj/Main.storyboard similarity index 100% rename from phpmon/Domain/App/Base.lproj/Main.storyboard rename to phpmon/Domain/App/en.lproj/Main.storyboard From 125b9bb198afeb2058a82f6938e910a80c21db2b Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Fri, 7 Jul 2023 20:10:41 +0200 Subject: [PATCH 10/34] =?UTF-8?q?=E2=9C=A8=20Add=20message=20about=20faili?= =?UTF-8?q?ng=20to=20load=20info=20(#258)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- phpmon/Domain/SwiftUI/Menu/StatsView.swift | 67 ++++++++++++++++------ phpmon/de.lproj/Localizable.strings | 3 + phpmon/en.lproj/Localizable.strings | 3 + phpmon/nl.lproj/Localizable.strings | 3 + phpmon/vi.lproj/Localizable.strings | 3 + 5 files changed, 61 insertions(+), 18 deletions(-) diff --git a/phpmon/Domain/SwiftUI/Menu/StatsView.swift b/phpmon/Domain/SwiftUI/Menu/StatsView.swift index fd6a00f3..1cd36381 100644 --- a/phpmon/Domain/SwiftUI/Menu/StatsView.swift +++ b/phpmon/Domain/SwiftUI/Menu/StatsView.swift @@ -29,29 +29,60 @@ struct StatsView: View { @State var maxPostSize: String @State var maxUploadSize: String + init(memoryLimit: String, maxPostSize: String, maxUploadSize: String) { + self.memoryLimit = memoryLimit + self.maxPostSize = maxPostSize + self.maxUploadSize = maxUploadSize + } + + public func hasErrorState() -> Bool { + return self.memoryLimit == "⚠️" + || self.maxPostSize == "⚠️" + || self.maxUploadSize == "⚠️" + } + var body: some View { - HStack(alignment: .firstTextBaseline, spacing: 30) { - VStack(alignment: .center, spacing: 3) { - SectionHeaderView(text: "mi_memory_limit".localized.uppercased()) - Text(memoryLimit) - .fontWeight(.medium) + if self.hasErrorState() { + HStack { + Text("⚠️") + .frame(maxWidth: 20, alignment: .center) .font(.system(size: 16)) + VStack { + Text("warnings.limits_error.title".localizedForSwiftUI) + .frame(maxWidth: .infinity, alignment: .center) + .font(.system(size: 11)) + Text("warnings.limits_error.steps".localizedForSwiftUI) + .frame(maxWidth: .infinity, alignment: .center) + .font(.system(size: 11)) + } } - VStack(alignment: .center, spacing: 3) { - SectionHeaderView(text: "mi_post_max_size".localized.uppercased()) - Text(maxPostSize) - .fontWeight(.medium) - .font(.system(size: 16)) - } - VStack(alignment: .center, spacing: 3) { - SectionHeaderView(text: "mi_upload_max_filesize".localized.uppercased()) - Text(maxUploadSize) - .fontWeight(.medium) - .font(.system(size: 16)) + .padding(10) + .padding(.leading, 30) + .padding(.trailing, 30) + } else { + HStack(alignment: .firstTextBaseline, spacing: 30) { + VStack(alignment: .center, spacing: 3) { + SectionHeaderView(text: "mi_memory_limit".localized.uppercased()) + Text(memoryLimit) + .fontWeight(.medium) + .font(.system(size: 16)) + } + VStack(alignment: .center, spacing: 3) { + SectionHeaderView(text: "mi_post_max_size".localized.uppercased()) + Text(maxPostSize) + .fontWeight(.medium) + .font(.system(size: 16)) + } + VStack(alignment: .center, spacing: 3) { + SectionHeaderView(text: "mi_upload_max_filesize".localized.uppercased()) + Text(maxUploadSize) + .fontWeight(.medium) + .font(.system(size: 16)) + } } + .padding(10) + .background(Color.debug) } - .padding(10) - .background(Color.debug) } } diff --git a/phpmon/de.lproj/Localizable.strings b/phpmon/de.lproj/Localizable.strings index a89b1efc..26699529 100644 --- a/phpmon/de.lproj/Localizable.strings +++ b/phpmon/de.lproj/Localizable.strings @@ -736,6 +736,9 @@ ALLGEMEINE TIPPS ZUR FEHLERSUCHE // WARNINGS +"warnings.limits_error.title" = "PHP Monitor konnte die Grenzwerte nicht abrufen."; +"warnings.limits_error.steps" = "Versuchen Sie, 'php -v' in Ihrem Terminal auszuführen."; + "warnings.title" = "PHP Doktor"; "warnings.description" = "Der **PHP Doktor** schlägt Verbesserungen an Ihrer aktiven Systemkonfiguration vor."; "warnings.disclaimer" = "Sie können alle Empfehlungen aus dem PHP-Monitor-Menü in den Einstellungen ausblenden, aber es wird empfohlen, dass Sie sich mit allen umsetzbaren Punkten befassen."; diff --git a/phpmon/en.lproj/Localizable.strings b/phpmon/en.lproj/Localizable.strings index b6e96b08..b4629682 100644 --- a/phpmon/en.lproj/Localizable.strings +++ b/phpmon/en.lproj/Localizable.strings @@ -736,6 +736,9 @@ COMMON TROUBLESHOOTING TIPS // WARNINGS +"warnings.limits_error.title" = "PHP Monitor could not retrieve limits."; +"warnings.limits_error.steps" = "Try running ‘php -v’ in your terminal."; + "warnings.title" = "PHP Doctor"; "warnings.description" = "**PHP Doctor** will suggest improvements to your active system configuration."; "warnings.disclaimer" = "You may choose to hide all recommendations from the PHP Monitor menu in Preferences, but it is recommended that you deal with all actionable items."; diff --git a/phpmon/nl.lproj/Localizable.strings b/phpmon/nl.lproj/Localizable.strings index d516dbd5..55a4ba06 100644 --- a/phpmon/nl.lproj/Localizable.strings +++ b/phpmon/nl.lproj/Localizable.strings @@ -735,6 +735,9 @@ VEELVOORKOMENDE PROBLEEMOPLOSSINGSTIPS // WARNINGS +"warnings.limits_error.title" = "PHP Monitor kon de limieten niet ophalen."; +"warnings.limits_error.steps" = "Run ‘php -v’ in jouw terminal om te testen."; + "warnings.title" = "PHP Doctor"; "warnings.description" = "**PHP Doctor** geeft suggesties voor verbeteringen aan uw actieve systeemconfiguratie."; "warnings.disclaimer" = "U kunt ervoor kiezen om alle aanbevelingen te verbergen in het PHP Monitor-menu in de Voorkeuren, maar het wordt aanbevolen om alle actiepunten aan te pakken."; diff --git a/phpmon/vi.lproj/Localizable.strings b/phpmon/vi.lproj/Localizable.strings index 8c96a4e1..f09ab7c0 100644 --- a/phpmon/vi.lproj/Localizable.strings +++ b/phpmon/vi.lproj/Localizable.strings @@ -729,6 +729,9 @@ MỘT SỐ MẸO KHẮC PHỤC THƯỜNG GẶP // WARNINGS +"warnings.limits_error.title" = "PHP Monitor không thể lấy giới hạn."; +"warnings.limits_error.steps" = "Thử chạy 'php -v' trong cửa sổ terminal của bạn."; + "warnings.title" = "PHP Doctor"; "warnings.description" = "**PHP Doctor** sẽ đề xuất cải tiến cho cấu hình hệ thống hoạt động của bạn."; "warnings.disclaimer" = "Bạn có thể ẩn tất cả các đề xuất từ menu PHP Monitor trong Tùy chọn, nhưng khuyến nghị là bạn nên xử lý tất cả các mục hành động được đề xuất."; From 4bf475bae28240948ff7c80dd3821fbb659e3425 Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Sun, 9 Jul 2023 15:22:47 +0200 Subject: [PATCH 11/34] =?UTF-8?q?=F0=9F=91=8C=20Remove=20`appcast`=20since?= =?UTF-8?q?=20it=20is=20no=20longer=20expected?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/Shared/TestableConfigurations.swift | 1 - tests/ui/UpdateCheckTest.swift | 2 -- tests/unit/Parsers/CaskFileParserTest.swift | 1 - tests/unit/Test Files/brew/phpmon-dev.rb | 1 - 4 files changed, 5 deletions(-) diff --git a/tests/Shared/TestableConfigurations.swift b/tests/Shared/TestableConfigurations.swift index ee3fdcba..4652f465 100644 --- a/tests/Shared/TestableConfigurations.swift +++ b/tests/Shared/TestableConfigurations.swift @@ -134,7 +134,6 @@ class TestableConfigurations { sha256 '1cb147bd1b1fbd52971d90dff577465b644aee7c878f15ede57f46e8f217067a' url 'https://github.com/nicoverbruggen/phpmon/releases/download/v6.0/phpmon-dev.zip' - appcast 'https://github.com/nicoverbruggen/phpmon/releases.atom' name 'PHP Monitor DEV' homepage 'https://phpmon.app' diff --git a/tests/ui/UpdateCheckTest.swift b/tests/ui/UpdateCheckTest.swift index aaa2c562..92baf962 100644 --- a/tests/ui/UpdateCheckTest.swift +++ b/tests/ui/UpdateCheckTest.swift @@ -41,7 +41,6 @@ final class UpdateCheckTest: UITestCase { sha256 '1cb147bd1b1fbd52971d90dff577465b644aee7c878f15ede57f46e8f217067a' url 'https://github.com/nicoverbruggen/phpmon/releases/download/v99.0/phpmon-dev.zip' - appcast 'https://github.com/nicoverbruggen/phpmon/releases.atom' name 'PHP Monitor DEV' homepage 'https://phpmon.app' @@ -74,7 +73,6 @@ final class UpdateCheckTest: UITestCase { sha256 '1cb147bd1b1fbd52971d90dff577465b644aee7c878f15ede57f46e8f217067a' url 'https://github.com/nicoverbruggen/phpmon/releases/download/v99.0/phpmon-dev.zip' - appcast 'https://github.com/nicoverbruggen/phpmon/releases.atom' name 'PHP Monitor DEV' homepage 'https://phpmon.app' diff --git a/tests/unit/Parsers/CaskFileParserTest.swift b/tests/unit/Parsers/CaskFileParserTest.swift index df065d36..8b74e806 100644 --- a/tests/unit/Parsers/CaskFileParserTest.swift +++ b/tests/unit/Parsers/CaskFileParserTest.swift @@ -47,6 +47,5 @@ class CaskFileParserTest: XCTestCase { XCTAssertTrue(caskFile.properties.keys.contains("version")) XCTAssertTrue(caskFile.properties.keys.contains("homepage")) XCTAssertTrue(caskFile.properties.keys.contains("url")) - XCTAssertTrue(caskFile.properties.keys.contains("appcast")) } } diff --git a/tests/unit/Test Files/brew/phpmon-dev.rb b/tests/unit/Test Files/brew/phpmon-dev.rb index 60badb91..f9b27ce8 100644 --- a/tests/unit/Test Files/brew/phpmon-dev.rb +++ b/tests/unit/Test Files/brew/phpmon-dev.rb @@ -5,7 +5,6 @@ sha256 '1cb147bd1b1fbd52971d90dff577465b644aee7c878f15ede57f46e8f217067a' url 'https://github.com/nicoverbruggen/phpmon/releases/download/v5.7.2/phpmon-dev.zip' - appcast 'https://github.com/nicoverbruggen/phpmon/releases.atom' name 'PHP Monitor DEV' homepage 'https://phpmon.app' From 943b5aa6afa5289bb6d780bb14081f2145c9959c Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Tue, 18 Jul 2023 19:51:31 +0200 Subject: [PATCH 12/34] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20Code=20reorganizatio?= =?UTF-8?q?n?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit It was necessary to do some summer cleaning. Here's what's changed: * First, I'm taking a new modular approach to Swift-based components that are part of PHP Monitor. * I've fixed the naming of various parts of the app. I plan on doing an even deeper check in the future. The following are affected: - "PHP Formulae Status" is now known as "PHP Version Manager". - "Warnings List" is now known as "PHP Doctor". - The associated window controllers have also been updated. (I've also added a new module: "PHP Config Editor". We'll see what that brings in the future... but the main purpose will be to edit key PHP configuration values without needing to go to the .ini files.) --- PHP Monitor.xcodeproj/project.pbxproj | 222 +++++++++++------- phpmon/Domain/App/App.swift | 4 +- phpmon/Domain/Menu/MainMenu.swift | 2 +- .../UI/ConfigManagerView.swift | 43 ++++ .../PHP Doctor/Data}/PhpConfigChecker.swift | 1 - .../Modules/PHP Doctor/Data}/Warning.swift | 0 .../PHP Doctor/Data}/WarningManager.swift | 0 .../PHP Doctor/UI}/NoWarningsView.swift | 0 .../PHP Doctor/UI/PhpDoctorView.swift} | 8 +- .../UI/PhpDoctorWindowController.swift} | 14 +- .../PHP Doctor/UI}/WarningView.swift | 0 .../Data/BrewFormula+UI.swift} | 2 +- .../Data/Fake}/FakeBrewFormulaeHandler.swift | 0 .../Data}/PhpFormulaeStatus.swift | 0 .../UI}/BlockingOverlayView.swift | 0 .../UI/PhpVersionManagerView.swift} | 12 +- .../PhpVersionManagerWindowController.swift} | 14 +- 17 files changed, 212 insertions(+), 110 deletions(-) create mode 100644 phpmon/Domain/SwiftUI/Modules/PHP Config Editor/UI/ConfigManagerView.swift rename phpmon/Domain/{Warnings/Services => SwiftUI/Modules/PHP Doctor/Data}/PhpConfigChecker.swift (99%) rename phpmon/Domain/{Warnings => SwiftUI/Modules/PHP Doctor/Data}/Warning.swift (100%) rename phpmon/Domain/{Warnings => SwiftUI/Modules/PHP Doctor/Data}/WarningManager.swift (100%) rename phpmon/Domain/SwiftUI/{Warning => Modules/PHP Doctor/UI}/NoWarningsView.swift (100%) rename phpmon/Domain/SwiftUI/{Warning/WarningListView.swift => Modules/PHP Doctor/UI/PhpDoctorView.swift} (94%) rename phpmon/Domain/{Warnings/WarningsWindowController.swift => SwiftUI/Modules/PHP Doctor/UI/PhpDoctorWindowController.swift} (68%) rename phpmon/Domain/SwiftUI/{Warning => Modules/PHP Doctor/UI}/WarningView.swift (100%) rename phpmon/Domain/SwiftUI/{PhpManager/BrewFormulaUI.swift => Modules/PHP Version Manager/Data/BrewFormula+UI.swift} (96%) rename phpmon/Domain/SwiftUI/{PhpManager => Modules/PHP Version Manager/Data/Fake}/FakeBrewFormulaeHandler.swift (100%) rename phpmon/Domain/SwiftUI/{PhpManager => Modules/PHP Version Manager/Data}/PhpFormulaeStatus.swift (100%) rename phpmon/Domain/SwiftUI/{PhpManager => Modules/PHP Version Manager/UI}/BlockingOverlayView.swift (100%) rename phpmon/Domain/SwiftUI/{PhpManager/PhpFormulaeView.swift => Modules/PHP Version Manager/UI/PhpVersionManagerView.swift} (97%) rename phpmon/Domain/SwiftUI/{PhpManager/PhpVersionManagerWC.swift => Modules/PHP Version Manager/UI/PhpVersionManagerWindowController.swift} (73%) diff --git a/PHP Monitor.xcodeproj/project.pbxproj b/PHP Monitor.xcodeproj/project.pbxproj index baddca0f..cf4d50a5 100644 --- a/PHP Monitor.xcodeproj/project.pbxproj +++ b/PHP Monitor.xcodeproj/project.pbxproj @@ -82,10 +82,10 @@ C40D725B2A018ACC0054A067 /* PhpFormulaeStatus.swift in Sources */ = {isa = PBXBuildFile; fileRef = C40D72592A018ACC0054A067 /* PhpFormulaeStatus.swift */; }; C40D725C2A018ACC0054A067 /* PhpFormulaeStatus.swift in Sources */ = {isa = PBXBuildFile; fileRef = C40D72592A018ACC0054A067 /* PhpFormulaeStatus.swift */; }; C40D725D2A018ACC0054A067 /* PhpFormulaeStatus.swift in Sources */ = {isa = PBXBuildFile; fileRef = C40D72592A018ACC0054A067 /* PhpFormulaeStatus.swift */; }; - C40D725F2A018AE30054A067 /* BrewFormulaUI.swift in Sources */ = {isa = PBXBuildFile; fileRef = C40D725E2A018AE30054A067 /* BrewFormulaUI.swift */; }; - C40D72602A018AE30054A067 /* BrewFormulaUI.swift in Sources */ = {isa = PBXBuildFile; fileRef = C40D725E2A018AE30054A067 /* BrewFormulaUI.swift */; }; - C40D72612A018AE30054A067 /* BrewFormulaUI.swift in Sources */ = {isa = PBXBuildFile; fileRef = C40D725E2A018AE30054A067 /* BrewFormulaUI.swift */; }; - C40D72622A018AE30054A067 /* BrewFormulaUI.swift in Sources */ = {isa = PBXBuildFile; fileRef = C40D725E2A018AE30054A067 /* BrewFormulaUI.swift */; }; + C40D725F2A018AE30054A067 /* BrewFormula+UI.swift in Sources */ = {isa = PBXBuildFile; fileRef = C40D725E2A018AE30054A067 /* BrewFormula+UI.swift */; }; + C40D72602A018AE30054A067 /* BrewFormula+UI.swift in Sources */ = {isa = PBXBuildFile; fileRef = C40D725E2A018AE30054A067 /* BrewFormula+UI.swift */; }; + C40D72612A018AE30054A067 /* BrewFormula+UI.swift in Sources */ = {isa = PBXBuildFile; fileRef = C40D725E2A018AE30054A067 /* BrewFormula+UI.swift */; }; + C40D72622A018AE30054A067 /* BrewFormula+UI.swift in Sources */ = {isa = PBXBuildFile; fileRef = C40D725E2A018AE30054A067 /* BrewFormula+UI.swift */; }; C40F505628ECA64E004AD45B /* TestableConfigurations.swift in Sources */ = {isa = PBXBuildFile; fileRef = C40F505428ECA64E004AD45B /* TestableConfigurations.swift */; }; C40FE737282ABA4F00A302C2 /* AppVersion.swift in Sources */ = {isa = PBXBuildFile; fileRef = C40FE736282ABA4F00A302C2 /* AppVersion.swift */; }; C40FE738282ABA4F00A302C2 /* AppVersion.swift in Sources */ = {isa = PBXBuildFile; fileRef = C40FE736282ABA4F00A302C2 /* AppVersion.swift */; }; @@ -122,7 +122,7 @@ C41F3D08298AED0D0042ACBF /* System.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4D3660A29113F20006BD146 /* System.swift */; }; C4205A7E27F4D21800191A39 /* ValetProxy.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4205A7D27F4D21800191A39 /* ValetProxy.swift */; }; C4205A7F27F4D21800191A39 /* ValetProxy.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4205A7D27F4D21800191A39 /* ValetProxy.swift */; }; - C422DDAA28A2C49900CEAC97 /* WarningListView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C422DDA928A2C49900CEAC97 /* WarningListView.swift */; }; + C422DDAA28A2C49900CEAC97 /* PhpDoctorView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C422DDA928A2C49900CEAC97 /* PhpDoctorView.swift */; }; C4232EE52612526500158FC6 /* Credits.html in Resources */ = {isa = PBXBuildFile; fileRef = C4232EE42612526500158FC6 /* Credits.html */; }; C42337A3281F19F000459A48 /* Xdebug.swift in Sources */ = {isa = PBXBuildFile; fileRef = C42337A2281F19F000459A48 /* Xdebug.swift */; }; C42759672627662800093CAE /* NSMenuExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = C42759662627662800093CAE /* NSMenuExtension.swift */; }; @@ -141,10 +141,10 @@ C436B39E29F3C42500B6A64E /* PreferencesTabs.swift in Sources */ = {isa = PBXBuildFile; fileRef = C436B39C29F3C42500B6A64E /* PreferencesTabs.swift */; }; C436B39F29F3C42500B6A64E /* PreferencesTabs.swift in Sources */ = {isa = PBXBuildFile; fileRef = C436B39C29F3C42500B6A64E /* PreferencesTabs.swift */; }; C436B3A029F3C42500B6A64E /* PreferencesTabs.swift in Sources */ = {isa = PBXBuildFile; fileRef = C436B39C29F3C42500B6A64E /* PreferencesTabs.swift */; }; - C43931C529C4BD610069165B /* PhpFormulaeView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C43931C429C4BD610069165B /* PhpFormulaeView.swift */; }; - C43931C629C4BD610069165B /* PhpFormulaeView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C43931C429C4BD610069165B /* PhpFormulaeView.swift */; }; - C43931C729C4BD610069165B /* PhpFormulaeView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C43931C429C4BD610069165B /* PhpFormulaeView.swift */; }; - C43931C829C4BD610069165B /* PhpFormulaeView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C43931C429C4BD610069165B /* PhpFormulaeView.swift */; }; + C43931C529C4BD610069165B /* PhpVersionManagerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C43931C429C4BD610069165B /* PhpVersionManagerView.swift */; }; + C43931C629C4BD610069165B /* PhpVersionManagerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C43931C429C4BD610069165B /* PhpVersionManagerView.swift */; }; + C43931C729C4BD610069165B /* PhpVersionManagerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C43931C429C4BD610069165B /* PhpVersionManagerView.swift */; }; + C43931C829C4BD610069165B /* PhpVersionManagerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C43931C429C4BD610069165B /* PhpVersionManagerView.swift */; }; C43931CA29C4C03F0069165B /* Brew.swift in Sources */ = {isa = PBXBuildFile; fileRef = C43931C929C4C03F0069165B /* Brew.swift */; }; C43931CB29C4C03F0069165B /* Brew.swift in Sources */ = {isa = PBXBuildFile; fileRef = C43931C929C4C03F0069165B /* Brew.swift */; }; C43931CC29C4C03F0069165B /* Brew.swift in Sources */ = {isa = PBXBuildFile; fileRef = C43931C929C4C03F0069165B /* Brew.swift */; }; @@ -185,6 +185,7 @@ C44CCD4127AFE2FC00CE40E5 /* AlertableError.swift in Sources */ = {isa = PBXBuildFile; fileRef = C44CCD3F27AFE2FC00CE40E5 /* AlertableError.swift */; }; C44CCD4927AFF3B700CE40E5 /* MainMenu+Async.swift in Sources */ = {isa = PBXBuildFile; fileRef = C44CCD4827AFF3B700CE40E5 /* MainMenu+Async.swift */; }; C44CCD4A27AFF3BC00CE40E5 /* MainMenu+Async.swift in Sources */ = {isa = PBXBuildFile; fileRef = C44CCD4827AFF3B700CE40E5 /* MainMenu+Async.swift */; }; + C44DFA7C2A67043000B98ED5 /* ConfigManagerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C44DFA7B2A67043000B98ED5 /* ConfigManagerView.swift */; }; C44E985F29B23EBF0059F773 /* UpdateCheckTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = C44E985E29B23EBF0059F773 /* UpdateCheckTest.swift */; }; C44F868E2835BD8D005C353A /* phpmon-config.json in Resources */ = {isa = PBXBuildFile; fileRef = C44F868D2835BD8D005C353A /* phpmon-config.json */; }; C450C8C628C919EC002A2B4B /* PreferenceName.swift in Sources */ = {isa = PBXBuildFile; fileRef = C450C8C528C919EC002A2B4B /* PreferenceName.swift */; }; @@ -395,7 +396,7 @@ C471E86328F9BB650021E251 /* PMTableView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4A81CA328C67101008DD9D1 /* PMTableView.swift */; }; C471E86428F9BB650021E251 /* Warning.swift in Sources */ = {isa = PBXBuildFile; fileRef = C47699F028A2F3150060FEB8 /* Warning.swift */; }; C471E86528F9BB650021E251 /* WarningManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = C47699EE28A2F2A30060FEB8 /* WarningManager.swift */; }; - C471E86628F9BB650021E251 /* WarningsWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C422DDAC28A2DAC600CEAC97 /* WarningsWindowController.swift */; }; + C471E86628F9BB650021E251 /* PhpDoctorWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C422DDAC28A2DAC600CEAC97 /* PhpDoctorWindowController.swift */; }; C471E86728F9BB650021E251 /* OnboardingWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4FACE82288F1F9700FC478F /* OnboardingWindowController.swift */; }; C471E86828F9BB650021E251 /* PreferencesWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4998F092617633900B2526E /* PreferencesWindowController.swift */; }; C471E86928F9BB650021E251 /* PreferencesWindowController+Hotkey.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4FACE7F288F1C0D00FC478F /* PreferencesWindowController+Hotkey.swift */; }; @@ -417,7 +418,7 @@ C471E87D28F9BB650021E251 /* Preset.swift in Sources */ = {isa = PBXBuildFile; fileRef = C40C5C9B2846A40600E28255 /* Preset.swift */; }; C471E87E28F9BB650021E251 /* PresetHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = C463E37F284930EE00422731 /* PresetHelper.swift */; }; C471E87F28F9BB650021E251 /* WarningView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4297F7928970D59004C4630 /* WarningView.swift */; }; - C471E88028F9BB650021E251 /* WarningListView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C422DDA928A2C49900CEAC97 /* WarningListView.swift */; }; + C471E88028F9BB650021E251 /* PhpDoctorView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C422DDA928A2C49900CEAC97 /* PhpDoctorView.swift */; }; C471E88128F9BB650021E251 /* NoWarningsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C41C708C28AA7F7900E8D498 /* NoWarningsView.swift */; }; C471E88228F9BB650021E251 /* OnboardingView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4E9D2BF2878B336008FFDAD /* OnboardingView.swift */; }; C471E88328F9BB650021E251 /* VersionPopoverView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C44264BF2850BD2A007400F1 /* VersionPopoverView.swift */; }; @@ -483,7 +484,7 @@ C471E8C628F9BB8F0021E251 /* PMTableView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4A81CA328C67101008DD9D1 /* PMTableView.swift */; }; C471E8C728F9BB8F0021E251 /* Warning.swift in Sources */ = {isa = PBXBuildFile; fileRef = C47699F028A2F3150060FEB8 /* Warning.swift */; }; C471E8C828F9BB8F0021E251 /* WarningManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = C47699EE28A2F2A30060FEB8 /* WarningManager.swift */; }; - C471E8C928F9BB8F0021E251 /* WarningsWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C422DDAC28A2DAC600CEAC97 /* WarningsWindowController.swift */; }; + C471E8C928F9BB8F0021E251 /* PhpDoctorWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C422DDAC28A2DAC600CEAC97 /* PhpDoctorWindowController.swift */; }; C471E8CA28F9BB8F0021E251 /* OnboardingWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4FACE82288F1F9700FC478F /* OnboardingWindowController.swift */; }; C471E8CB28F9BB8F0021E251 /* PreferencesWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4998F092617633900B2526E /* PreferencesWindowController.swift */; }; C471E8CC28F9BB8F0021E251 /* PreferencesWindowController+Hotkey.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4FACE7F288F1C0D00FC478F /* PreferencesWindowController+Hotkey.swift */; }; @@ -505,7 +506,7 @@ C471E8E028F9BB8F0021E251 /* Preset.swift in Sources */ = {isa = PBXBuildFile; fileRef = C40C5C9B2846A40600E28255 /* Preset.swift */; }; C471E8E128F9BB8F0021E251 /* PresetHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = C463E37F284930EE00422731 /* PresetHelper.swift */; }; C471E8E228F9BB8F0021E251 /* WarningView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4297F7928970D59004C4630 /* WarningView.swift */; }; - C471E8E328F9BB8F0021E251 /* WarningListView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C422DDA928A2C49900CEAC97 /* WarningListView.swift */; }; + C471E8E328F9BB8F0021E251 /* PhpDoctorView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C422DDA928A2C49900CEAC97 /* PhpDoctorView.swift */; }; C471E8E428F9BB8F0021E251 /* NoWarningsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C41C708C28AA7F7900E8D498 /* NoWarningsView.swift */; }; C471E8E528F9BB8F0021E251 /* OnboardingView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4E9D2BF2878B336008FFDAD /* OnboardingView.swift */; }; C471E8E628F9BB8F0021E251 /* VersionPopoverView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C44264BF2850BD2A007400F1 /* VersionPopoverView.swift */; }; @@ -535,8 +536,8 @@ C481F79A26164A7C004FBCFF /* Preferences.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5420395E2613607600FB00FA /* Preferences.swift */; }; C485706D28BF450900539B36 /* NSMenuItemExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = C40508B028ADAB44008FAC1F /* NSMenuItemExtension.swift */; }; C485706E28BF451C00539B36 /* OnboardingWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4FACE82288F1F9700FC478F /* OnboardingWindowController.swift */; }; - C485706F28BF452300539B36 /* WarningsWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C422DDAC28A2DAC600CEAC97 /* WarningsWindowController.swift */; }; - C485707028BF452300539B36 /* WarningsWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C422DDAC28A2DAC600CEAC97 /* WarningsWindowController.swift */; }; + C485706F28BF452300539B36 /* PhpDoctorWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C422DDAC28A2DAC600CEAC97 /* PhpDoctorWindowController.swift */; }; + C485707028BF452300539B36 /* PhpDoctorWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C422DDAC28A2DAC600CEAC97 /* PhpDoctorWindowController.swift */; }; C485707128BF452E00539B36 /* WarningManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = C47699EE28A2F2A30060FEB8 /* WarningManager.swift */; }; C485707228BF453800539B36 /* SwiftUIHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = C44264BD2850B86C007400F1 /* SwiftUIHelper.swift */; }; C485707328BF454300539B36 /* OnboardingView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4E9D2BF2878B336008FFDAD /* OnboardingView.swift */; }; @@ -546,7 +547,7 @@ C485707728BF455300539B36 /* HeaderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4EB53E428551F9B006F9937 /* HeaderView.swift */; }; C485707828BF456300539B36 /* Warning.swift in Sources */ = {isa = PBXBuildFile; fileRef = C47699F028A2F3150060FEB8 /* Warning.swift */; }; C485707928BF456C00539B36 /* ArrayExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4EB53E628553117006F9937 /* ArrayExtension.swift */; }; - C485707A28BF457800539B36 /* WarningListView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C422DDA928A2C49900CEAC97 /* WarningListView.swift */; }; + C485707A28BF457800539B36 /* PhpDoctorView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C422DDA928A2C49900CEAC97 /* PhpDoctorView.swift */; }; C485707B28BF458900539B36 /* VersionPopoverView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C44264BF2850BD2A007400F1 /* VersionPopoverView.swift */; }; C485707C28BF459500539B36 /* NoWarningsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C41C708C28AA7F7900E8D498 /* NoWarningsView.swift */; }; C485707D28BF45A200539B36 /* WarningView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4297F7928970D59004C4630 /* WarningView.swift */; }; @@ -707,10 +708,10 @@ C4D4CB3829C109CF00DB9F93 /* InternalSwitcher+Valet.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4D4CB3629C109CF00DB9F93 /* InternalSwitcher+Valet.swift */; }; C4D4CB3929C109CF00DB9F93 /* InternalSwitcher+Valet.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4D4CB3629C109CF00DB9F93 /* InternalSwitcher+Valet.swift */; }; C4D4CB3A29C109CF00DB9F93 /* InternalSwitcher+Valet.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4D4CB3629C109CF00DB9F93 /* InternalSwitcher+Valet.swift */; }; - C4D5576429C77CC5001A44CD /* PhpVersionManagerWC.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4D5576329C77CC5001A44CD /* PhpVersionManagerWC.swift */; }; - C4D5576529C77CC5001A44CD /* PhpVersionManagerWC.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4D5576329C77CC5001A44CD /* PhpVersionManagerWC.swift */; }; - C4D5576629C77CC5001A44CD /* PhpVersionManagerWC.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4D5576329C77CC5001A44CD /* PhpVersionManagerWC.swift */; }; - C4D5576729C77CC5001A44CD /* PhpVersionManagerWC.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4D5576329C77CC5001A44CD /* PhpVersionManagerWC.swift */; }; + C4D5576429C77CC5001A44CD /* PhpVersionManagerWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4D5576329C77CC5001A44CD /* PhpVersionManagerWindowController.swift */; }; + C4D5576529C77CC5001A44CD /* PhpVersionManagerWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4D5576329C77CC5001A44CD /* PhpVersionManagerWindowController.swift */; }; + C4D5576629C77CC5001A44CD /* PhpVersionManagerWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4D5576329C77CC5001A44CD /* PhpVersionManagerWindowController.swift */; }; + C4D5576729C77CC5001A44CD /* PhpVersionManagerWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4D5576329C77CC5001A44CD /* PhpVersionManagerWindowController.swift */; }; C4D5CFCA27E0F9CD00035329 /* NginxConfigurationFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4D5CFC927E0F9CD00035329 /* NginxConfigurationFile.swift */; }; C4D5CFCB27E0F9CD00035329 /* NginxConfigurationFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4D5CFC927E0F9CD00035329 /* NginxConfigurationFile.swift */; }; C4D8016622B1584700C6DA1B /* Startup.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4D8016522B1584700C6DA1B /* Startup.swift */; }; @@ -880,7 +881,7 @@ C40C7F2727721FF600DDDCDC /* Valet+Alerts.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Valet+Alerts.swift"; sourceTree = ""; }; C40C7F2F27722E8D00DDDCDC /* Logger.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Logger.swift; sourceTree = ""; }; C40D72592A018ACC0054A067 /* PhpFormulaeStatus.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhpFormulaeStatus.swift; sourceTree = ""; }; - C40D725E2A018AE30054A067 /* BrewFormulaUI.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BrewFormulaUI.swift; sourceTree = ""; }; + C40D725E2A018AE30054A067 /* BrewFormula+UI.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "BrewFormula+UI.swift"; sourceTree = ""; }; C40F505428ECA64E004AD45B /* TestableConfigurations.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestableConfigurations.swift; sourceTree = ""; }; C40FE736282ABA4F00A302C2 /* AppVersion.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppVersion.swift; sourceTree = ""; }; C40FE739282ABB2E00A302C2 /* AppVersionTest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppVersionTest.swift; sourceTree = ""; }; @@ -907,8 +908,8 @@ C41CD0282628D8EE0065BBED /* GlobalKeybindPreference.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GlobalKeybindPreference.swift; sourceTree = ""; }; C41E87192763D42300161EE0 /* DomainListVC+ContextMenu.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "DomainListVC+ContextMenu.swift"; sourceTree = ""; }; C4205A7D27F4D21800191A39 /* ValetProxy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ValetProxy.swift; sourceTree = ""; }; - C422DDA928A2C49900CEAC97 /* WarningListView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WarningListView.swift; sourceTree = ""; }; - C422DDAC28A2DAC600CEAC97 /* WarningsWindowController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WarningsWindowController.swift; sourceTree = ""; }; + C422DDA928A2C49900CEAC97 /* PhpDoctorView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhpDoctorView.swift; sourceTree = ""; }; + C422DDAC28A2DAC600CEAC97 /* PhpDoctorWindowController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhpDoctorWindowController.swift; sourceTree = ""; }; C4232EE42612526500158FC6 /* Credits.html */ = {isa = PBXFileReference; lastKnownFileType = text.html; path = Credits.html; sourceTree = ""; }; C42337A2281F19F000459A48 /* Xdebug.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Xdebug.swift; sourceTree = ""; }; C42759662627662800093CAE /* NSMenuExtension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NSMenuExtension.swift; sourceTree = ""; }; @@ -921,7 +922,7 @@ C42F26752805FEE200938AC7 /* nginx-secure-proxy.test */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "nginx-secure-proxy.test"; sourceTree = ""; }; C436039F275E67610028EFC6 /* AppDelegate+Notifications.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "AppDelegate+Notifications.swift"; sourceTree = ""; }; C436B39C29F3C42500B6A64E /* PreferencesTabs.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PreferencesTabs.swift; sourceTree = ""; }; - C43931C429C4BD610069165B /* PhpFormulaeView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhpFormulaeView.swift; sourceTree = ""; }; + C43931C429C4BD610069165B /* PhpVersionManagerView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhpVersionManagerView.swift; sourceTree = ""; }; C43931C929C4C03F0069165B /* Brew.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Brew.swift; sourceTree = ""; }; C43A8A1925D9CD1000591B77 /* Utility.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Utility.swift; sourceTree = ""; }; C43A8A1F25D9D1D700591B77 /* brew-formula.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = "brew-formula.json"; sourceTree = ""; }; @@ -942,6 +943,7 @@ C44C1990276E44CB0072762D /* ProgressWindow.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = ProgressWindow.storyboard; sourceTree = ""; }; C44CCD3F27AFE2FC00CE40E5 /* AlertableError.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AlertableError.swift; sourceTree = ""; }; C44CCD4827AFF3B700CE40E5 /* MainMenu+Async.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "MainMenu+Async.swift"; sourceTree = ""; }; + C44DFA7B2A67043000B98ED5 /* ConfigManagerView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ConfigManagerView.swift; sourceTree = ""; }; C44E985E29B23EBF0059F773 /* UpdateCheckTest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UpdateCheckTest.swift; sourceTree = ""; }; C44F868D2835BD8D005C353A /* phpmon-config.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "phpmon-config.json"; sourceTree = ""; }; C450C8C528C919EC002A2B4B /* PreferenceName.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PreferenceName.swift; sourceTree = ""; }; @@ -1049,7 +1051,7 @@ C4D36614291160A1006BD146 /* WIP.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WIP.swift; sourceTree = ""; }; C4D36619291173EA006BD146 /* DictionaryExtension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DictionaryExtension.swift; sourceTree = ""; }; C4D4CB3629C109CF00DB9F93 /* InternalSwitcher+Valet.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "InternalSwitcher+Valet.swift"; sourceTree = ""; }; - C4D5576329C77CC5001A44CD /* PhpVersionManagerWC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhpVersionManagerWC.swift; sourceTree = ""; }; + C4D5576329C77CC5001A44CD /* PhpVersionManagerWindowController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhpVersionManagerWindowController.swift; sourceTree = ""; }; C4D5CFC927E0F9CD00035329 /* NginxConfigurationFile.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NginxConfigurationFile.swift; sourceTree = ""; }; C4D8016522B1584700C6DA1B /* Startup.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Startup.swift; sourceTree = ""; }; C4D89BC52783C99400A02B68 /* ComposerJson.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ComposerJson.swift; sourceTree = ""; }; @@ -1365,7 +1367,6 @@ C4D9ADBD27761084007277F4 /* PHP */, C47331A0247093AC009A0597 /* Menu */, C464ADAA275A7A25003FCD53 /* DomainList */, - C422DDAB28A2DAA100CEAC97 /* Warnings */, C44A874628905B8500498BC4 /* Onboarding */, 5420395726135DB800FB00FA /* Preferences */, C44C198F276E3A380072762D /* Progress */, @@ -1376,17 +1377,6 @@ path = Domain; sourceTree = ""; }; - C422DDAB28A2DAA100CEAC97 /* Warnings */ = { - isa = PBXGroup; - children = ( - C43FDBE729A9329A003D85EC /* Services */, - C47699F028A2F3150060FEB8 /* Warning.swift */, - C47699EE28A2F2A30060FEB8 /* WarningManager.swift */, - C422DDAC28A2DAC600CEAC97 /* WarningsWindowController.swift */, - ); - path = Warnings; - sourceTree = ""; - }; C42337A1281F19DC00459A48 /* Extensions */ = { isa = PBXGroup; children = ( @@ -1395,35 +1385,22 @@ path = Extensions; sourceTree = ""; }; - C4297F7828970D4E004C4630 /* Warning */ = { + C4297F7828970D4E004C4630 /* PHP Doctor */ = { isa = PBXGroup; children = ( - C4297F7928970D59004C4630 /* WarningView.swift */, - C422DDA928A2C49900CEAC97 /* WarningListView.swift */, - C41C708C28AA7F7900E8D498 /* NoWarningsView.swift */, + C44DFA822A67066B00B98ED5 /* Data */, + C44DFA812A67063000B98ED5 /* UI */, ); - path = Warning; + path = "PHP Doctor"; sourceTree = ""; }; - C43931C329C4BD510069165B /* PhpManager */ = { + C43931C329C4BD510069165B /* PHP Version Manager */ = { isa = PBXGroup; children = ( - C4D5576329C77CC5001A44CD /* PhpVersionManagerWC.swift */, - C43931C429C4BD610069165B /* PhpFormulaeView.swift */, - C48DDD0C29C75C9E00D032D9 /* BlockingOverlayView.swift */, - C40D72592A018ACC0054A067 /* PhpFormulaeStatus.swift */, - C40D725E2A018AE30054A067 /* BrewFormulaUI.swift */, - C489E0BA2A220A4200323F5E /* FakeBrewFormulaeHandler.swift */, + C44DFA7F2A6705A100B98ED5 /* Data */, + C44DFA7D2A67058900B98ED5 /* UI */, ); - path = PhpManager; - sourceTree = ""; - }; - C43FDBE729A9329A003D85EC /* Services */ = { - isa = PBXGroup; - children = ( - C43FDBE829A932B0003D85EC /* PhpConfigChecker.swift */, - ); - path = Services; + path = "PHP Version Manager"; sourceTree = ""; }; C44067F327E256560045BD4E /* Cells */ = { @@ -1474,6 +1451,89 @@ path = Errors; sourceTree = ""; }; + C44DFA7A2A6703FD00B98ED5 /* PHP Config Editor */ = { + isa = PBXGroup; + children = ( + C44DFA842A6706C900B98ED5 /* Data */, + C44DFA802A6705BA00B98ED5 /* UI */, + ); + path = "PHP Config Editor"; + sourceTree = ""; + }; + C44DFA7D2A67058900B98ED5 /* UI */ = { + isa = PBXGroup; + children = ( + C4D5576329C77CC5001A44CD /* PhpVersionManagerWindowController.swift */, + C43931C429C4BD610069165B /* PhpVersionManagerView.swift */, + C48DDD0C29C75C9E00D032D9 /* BlockingOverlayView.swift */, + ); + path = UI; + sourceTree = ""; + }; + C44DFA7E2A67059700B98ED5 /* Fake */ = { + isa = PBXGroup; + children = ( + C489E0BA2A220A4200323F5E /* FakeBrewFormulaeHandler.swift */, + ); + path = Fake; + sourceTree = ""; + }; + C44DFA7F2A6705A100B98ED5 /* Data */ = { + isa = PBXGroup; + children = ( + C40D72592A018ACC0054A067 /* PhpFormulaeStatus.swift */, + C40D725E2A018AE30054A067 /* BrewFormula+UI.swift */, + C44DFA7E2A67059700B98ED5 /* Fake */, + ); + path = Data; + sourceTree = ""; + }; + C44DFA802A6705BA00B98ED5 /* UI */ = { + isa = PBXGroup; + children = ( + C44DFA7B2A67043000B98ED5 /* ConfigManagerView.swift */, + ); + path = UI; + sourceTree = ""; + }; + C44DFA812A67063000B98ED5 /* UI */ = { + isa = PBXGroup; + children = ( + C422DDAC28A2DAC600CEAC97 /* PhpDoctorWindowController.swift */, + C422DDA928A2C49900CEAC97 /* PhpDoctorView.swift */, + C4297F7928970D59004C4630 /* WarningView.swift */, + C41C708C28AA7F7900E8D498 /* NoWarningsView.swift */, + ); + path = UI; + sourceTree = ""; + }; + C44DFA822A67066B00B98ED5 /* Data */ = { + isa = PBXGroup; + children = ( + C47699EE28A2F2A30060FEB8 /* WarningManager.swift */, + C47699F028A2F3150060FEB8 /* Warning.swift */, + C43FDBE829A932B0003D85EC /* PhpConfigChecker.swift */, + ); + path = Data; + sourceTree = ""; + }; + C44DFA832A6706A200B98ED5 /* Modules */ = { + isa = PBXGroup; + children = ( + C44DFA7A2A6703FD00B98ED5 /* PHP Config Editor */, + C4297F7828970D4E004C4630 /* PHP Doctor */, + C43931C329C4BD510069165B /* PHP Version Manager */, + ); + path = Modules; + sourceTree = ""; + }; + C44DFA842A6706C900B98ED5 /* Data */ = { + isa = PBXGroup; + children = ( + ); + path = Data; + sourceTree = ""; + }; C44F868C2835BD60005C353A /* phpmon */ = { isa = PBXGroup; children = ( @@ -1938,12 +1998,11 @@ C4EE55B027708BB2001DF387 /* SwiftUI */ = { isa = PBXGroup; children = ( - C43931C329C4BD510069165B /* PhpManager */, - C490E3A329BC92E6006D2DE6 /* Progress */, - C4297F7828970D4E004C4630 /* Warning */, + C44DFA832A6706A200B98ED5 /* Modules */, C4E9D2BE2878B32D008FFDAD /* Onboarding */, C4B609182853AAA700C95265 /* Domains */, C4B609172853AA9E00C95265 /* Menu */, + C490E3A329BC92E6006D2DE6 /* Progress */, C4B609162853AA9A00C95265 /* Common */, ); path = SwiftUI; @@ -2333,7 +2392,7 @@ C4F2E43A2752F7D00020E974 /* PhpInstallation.swift in Sources */, C4D9F24B280B69E100DCD39A /* AddProxyVC.swift in Sources */, C45B914E295608E300F4EC78 /* ValetServicesManager.swift in Sources */, - C4D5576429C77CC5001A44CD /* PhpVersionManagerWC.swift in Sources */, + C4D5576429C77CC5001A44CD /* PhpVersionManagerWindowController.swift in Sources */, C4E49DED28F764A00026AC4E /* TestableCommand.swift in Sources */, C41E871A2763D42300161EE0 /* DomainListVC+ContextMenu.swift in Sources */, C40C7F2827721FF600DDDCDC /* Valet+Alerts.swift in Sources */, @@ -2365,7 +2424,7 @@ C4C3643928AE4FCE00C0770E /* StatusMenu+Items.swift in Sources */, C4AC51FC27E27F47008528CA /* DomainListKindCell.swift in Sources */, C4CDA893288F1A71007CE25F /* Keys.swift in Sources */, - C43931C529C4BD610069165B /* PhpFormulaeView.swift in Sources */, + C43931C529C4BD610069165B /* PhpVersionManagerView.swift in Sources */, C40175B82903108900763A68 /* ValetInteractor.swift in Sources */, C4ACE9E129F84EDD00110766 /* PhpGuard.swift in Sources */, C4F361612836BFD9003598CC /* MainMenu+Actions.swift in Sources */, @@ -2379,6 +2438,7 @@ C4CE3BB827B31F2E0086CA49 /* MainMenu+Switcher.swift in Sources */, C415937F27A1B54F00D2E1B7 /* PhpFrameworks.swift in Sources */, C4811D2422D70A4700B5F6B3 /* App.swift in Sources */, + C44DFA7C2A67043000B98ED5 /* ConfigManagerView.swift in Sources */, C40934A2298EEB2C00D25014 /* CaskFile.swift in Sources */, C495F5AF28A42E080087F70A /* EnvironmentCheck.swift in Sources */, C46EBC4428DB95F0007ACC74 /* ShellProtocol.swift in Sources */, @@ -2409,7 +2469,7 @@ C415D3E82770F692005EF286 /* AppDelegate+InterApp.swift in Sources */, C41C1B3722B0097F00E7CF16 /* AppDelegate.swift in Sources */, C42759672627662800093CAE /* NSMenuExtension.swift in Sources */, - C422DDAA28A2C49900CEAC97 /* WarningListView.swift in Sources */, + C422DDAA28A2C49900CEAC97 /* PhpDoctorView.swift in Sources */, C469E6FE294CF7B200A82AB2 /* FakeValetProxy.swift in Sources */, C490E3B629BCA367006D2DE6 /* App+BrewWatch.swift in Sources */, C464ADAF275A7A69003FCD53 /* DomainListVC.swift in Sources */, @@ -2439,7 +2499,7 @@ C474B00624C0E98C00066A22 /* LocalNotification.swift in Sources */, C4D5CFCA27E0F9CD00035329 /* NginxConfigurationFile.swift in Sources */, C4D36615291160A1006BD146 /* WIP.swift in Sources */, - C485707028BF452300539B36 /* WarningsWindowController.swift in Sources */, + C485707028BF452300539B36 /* PhpDoctorWindowController.swift in Sources */, C4CE3BBA27B31F670086CA49 /* ComposerWindow.swift in Sources */, C40D725A2A018ACC0054A067 /* PhpFormulaeStatus.swift in Sources */, C4D9ADC8277611A0007277F4 /* InternalSwitcher.swift in Sources */, @@ -2459,7 +2519,7 @@ C4C3ED412783497000AB15D8 /* MainMenu+Startup.swift in Sources */, C40508AF28ADA23D008FAC1F /* NoDomainResultsView.swift in Sources */, C4B79ECB29CA475900A483EE /* RemovePhpVersionCommand.swift in Sources */, - C40D725F2A018AE30054A067 /* BrewFormulaUI.swift in Sources */, + C40D725F2A018AE30054A067 /* BrewFormula+UI.swift in Sources */, C4D89BC62783C99400A02B68 /* ComposerJson.swift in Sources */, C43BCD4429FBEF40001547BC /* InstallAndUpgradeCommand.swift in Sources */, C4E2E84A28FC1E70003B070C /* DataExtension.swift in Sources */, @@ -2541,7 +2601,7 @@ C4E2E86628FC2F1B003B070C /* XCPMApplication.swift in Sources */, C471E85F28F9BB650021E251 /* DomainListVC+Actions.swift in Sources */, C490E3B429BC9FEA006D2DE6 /* ProgressWindowView.swift in Sources */, - C4D5576629C77CC5001A44CD /* PhpVersionManagerWC.swift in Sources */, + C4D5576629C77CC5001A44CD /* PhpVersionManagerWindowController.swift in Sources */, C4ACE9E329F84EDD00110766 /* PhpGuard.swift in Sources */, C471E86028F9BB650021E251 /* SelectionVC.swift in Sources */, C471E86128F9BB650021E251 /* AddSiteVC.swift in Sources */, @@ -2549,11 +2609,11 @@ C471E86328F9BB650021E251 /* PMTableView.swift in Sources */, C471E86428F9BB650021E251 /* Warning.swift in Sources */, C40175BA2903108900763A68 /* ValetInteractor.swift in Sources */, - C43931C729C4BD610069165B /* PhpFormulaeView.swift in Sources */, + C43931C729C4BD610069165B /* PhpVersionManagerView.swift in Sources */, C4463FCE29804BCB007B93D5 /* RCFile.swift in Sources */, C45B9150295608E300F4EC78 /* ValetServicesManager.swift in Sources */, C471E86528F9BB650021E251 /* WarningManager.swift in Sources */, - C471E86628F9BB650021E251 /* WarningsWindowController.swift in Sources */, + C471E86628F9BB650021E251 /* PhpDoctorWindowController.swift in Sources */, C471E86728F9BB650021E251 /* OnboardingWindowController.swift in Sources */, C471E86828F9BB650021E251 /* PreferencesWindowController.swift in Sources */, C471E86928F9BB650021E251 /* PreferencesWindowController+Hotkey.swift in Sources */, @@ -2582,7 +2642,7 @@ C471E87D28F9BB650021E251 /* Preset.swift in Sources */, C471E87E28F9BB650021E251 /* PresetHelper.swift in Sources */, C471E87F28F9BB650021E251 /* WarningView.swift in Sources */, - C471E88028F9BB650021E251 /* WarningListView.swift in Sources */, + C471E88028F9BB650021E251 /* PhpDoctorView.swift in Sources */, C471E88128F9BB650021E251 /* NoWarningsView.swift in Sources */, C471E88228F9BB650021E251 /* OnboardingView.swift in Sources */, C471E88328F9BB650021E251 /* VersionPopoverView.swift in Sources */, @@ -2620,7 +2680,7 @@ C471E82628F9BB2E0021E251 /* ComposerJson.swift in Sources */, C471E82428F9BB2E0021E251 /* PhpFrameworks.swift in Sources */, C471E7E828F9BAC20021E251 /* Actions.swift in Sources */, - C40D72612A018AE30054A067 /* BrewFormulaUI.swift in Sources */, + C40D72612A018AE30054A067 /* BrewFormula+UI.swift in Sources */, C471E82528F9BB2E0021E251 /* ComposerWindow.swift in Sources */, C471E80828F9BAD40021E251 /* PhpExtension.swift in Sources */, C471E7F928F9BACB0021E251 /* PhpSwitcher.swift in Sources */, @@ -2730,7 +2790,7 @@ C4E2E86A28FC3002003B070C /* Utility.swift in Sources */, C471E8BF28F9BB8F0021E251 /* DomainListWindowController.swift in Sources */, C471E8C028F9BB8F0021E251 /* DomainListVC.swift in Sources */, - C4D5576729C77CC5001A44CD /* PhpVersionManagerWC.swift in Sources */, + C4D5576729C77CC5001A44CD /* PhpVersionManagerWindowController.swift in Sources */, C471E8C128F9BB8F0021E251 /* DomainListVC+ContextMenu.swift in Sources */, C4BF56AE2949381100379603 /* FakeValetInteractor.swift in Sources */, C471E8C228F9BB8F0021E251 /* DomainListVC+Actions.swift in Sources */, @@ -2742,7 +2802,7 @@ C471E8C628F9BB8F0021E251 /* PMTableView.swift in Sources */, C471E8C728F9BB8F0021E251 /* Warning.swift in Sources */, C471E8C828F9BB8F0021E251 /* WarningManager.swift in Sources */, - C471E8C928F9BB8F0021E251 /* WarningsWindowController.swift in Sources */, + C471E8C928F9BB8F0021E251 /* PhpDoctorWindowController.swift in Sources */, C41ADCEB2970CCC700120423 /* FSNotifier.swift in Sources */, C471E8CA28F9BB8F0021E251 /* OnboardingWindowController.swift in Sources */, C4D4CB3A29C109CF00DB9F93 /* InternalSwitcher+Valet.swift in Sources */, @@ -2766,12 +2826,12 @@ C471E8DE28F9BB8F0021E251 /* App+ConfigWatch.swift in Sources */, C471E8DF28F9BB8F0021E251 /* PhpConfigWatcher.swift in Sources */, C4CB250529B28BB800CA4492 /* MainMenuTest.swift in Sources */, - C40D72622A018AE30054A067 /* BrewFormulaUI.swift in Sources */, + C40D72622A018AE30054A067 /* BrewFormula+UI.swift in Sources */, C4B79ECE29CA475900A483EE /* RemovePhpVersionCommand.swift in Sources */, C471E8E028F9BB8F0021E251 /* Preset.swift in Sources */, C471E8E128F9BB8F0021E251 /* PresetHelper.swift in Sources */, C471E8E228F9BB8F0021E251 /* WarningView.swift in Sources */, - C471E8E328F9BB8F0021E251 /* WarningListView.swift in Sources */, + C471E8E328F9BB8F0021E251 /* PhpDoctorView.swift in Sources */, C471E8E428F9BB8F0021E251 /* NoWarningsView.swift in Sources */, C471E8E528F9BB8F0021E251 /* OnboardingView.swift in Sources */, C4B79EBF29CA38DB00A483EE /* BrewCommand.swift in Sources */, @@ -2820,7 +2880,7 @@ C471E82228F9BB2E0021E251 /* ComposerWindow.swift in Sources */, C4D3660E29113F20006BD146 /* System.swift in Sources */, C471E80428F9BAD40021E251 /* PhpExtension.swift in Sources */, - C43931C829C4BD610069165B /* PhpFormulaeView.swift in Sources */, + C43931C829C4BD610069165B /* PhpVersionManagerView.swift in Sources */, C471E7F728F9BACB0021E251 /* PhpSwitcher.swift in Sources */, C4463FCF29804BCB007B93D5 /* RCFile.swift in Sources */, C471E82C28F9BB340021E251 /* ValetListable.swift in Sources */, @@ -2903,7 +2963,7 @@ C4F780CE25D80B75000DBC97 /* LocalNotification.swift in Sources */, C41ADCE92970CCC700120423 /* FSNotifier.swift in Sources */, C40C7F2927721FF600DDDCDC /* Valet+Alerts.swift in Sources */, - C485707A28BF457800539B36 /* WarningListView.swift in Sources */, + C485707A28BF457800539B36 /* PhpDoctorView.swift in Sources */, C4C0E8E827F88B41002D32A9 /* DomainScanner.swift in Sources */, C449B4F027EE7FB800C47E8A /* DomainListTLSCell.swift in Sources */, C4FBFC532616485F00CDB8E1 /* PhpVersionDetectionTest.swift in Sources */, @@ -2921,13 +2981,13 @@ C47DF1B0299D5A3B0007055D /* LoginItemManager.swift in Sources */, C4F780C025D80B6E000DBC97 /* Startup.swift in Sources */, C45B914A295607F400F4EC78 /* Service.swift in Sources */, - C43931C629C4BD610069165B /* PhpFormulaeView.swift in Sources */, + C43931C629C4BD610069165B /* PhpVersionManagerView.swift in Sources */, C4C0E8E327F88B13002D32A9 /* ValetDomainScanner.swift in Sources */, C4CCBA6D275C567B008C7055 /* PMWindowController.swift in Sources */, C4B5635F276AB09000F12CCB /* VersionExtractor.swift in Sources */, C463E381284930EE00422731 /* PresetHelper.swift in Sources */, C46FA98C2822F08F00D78807 /* PhpConfigurationTest.swift in Sources */, - C4D5576529C77CC5001A44CD /* PhpVersionManagerWC.swift in Sources */, + C4D5576529C77CC5001A44CD /* PhpVersionManagerWindowController.swift in Sources */, C4BF90C127C57C220054E78C /* MainMenu+FixMyValet.swift in Sources */, C4E49DEB28F7643D0026AC4E /* CommandProtocol.swift in Sources */, C4F2E4382752F08D0020E974 /* BrewDiagnostics.swift in Sources */, @@ -2942,7 +3002,7 @@ C450C8C728C919EC002A2B4B /* PreferenceName.swift in Sources */, C40D725B2A018ACC0054A067 /* PhpFormulaeStatus.swift in Sources */, C48D6C75279CD3E400F26D7E /* PhpVersionNumberTest.swift in Sources */, - C40D72602A018AE30054A067 /* BrewFormulaUI.swift in Sources */, + C40D72602A018AE30054A067 /* BrewFormula+UI.swift in Sources */, C485707B28BF458900539B36 /* VersionPopoverView.swift in Sources */, C4E2E85D28FC282B003B070C /* TestableConfiguration.swift in Sources */, C485706E28BF451C00539B36 /* OnboardingWindowController.swift in Sources */, @@ -3042,7 +3102,7 @@ C44CCD4A27AFF3BC00CE40E5 /* MainMenu+Async.swift in Sources */, C449B4F327EE7FC600C47E8A /* DomainListTypeCell.swift in Sources */, C48D6C71279CD2AC00F26D7E /* VersionNumber.swift in Sources */, - C485706F28BF452300539B36 /* WarningsWindowController.swift in Sources */, + C485706F28BF452300539B36 /* PhpDoctorWindowController.swift in Sources */, C46FA9892822EFDC00D78807 /* PhpConfigurationFile.swift in Sources */, C43931CB29C4C03F0069165B /* Brew.swift in Sources */, C41C02AB27E61CB3009F26CB /* FakeValetSite.swift in Sources */, diff --git a/phpmon/Domain/App/App.swift b/phpmon/Domain/App/App.swift index a73922ab..f9915913 100644 --- a/phpmon/Domain/App/App.swift +++ b/phpmon/Domain/App/App.swift @@ -75,10 +75,10 @@ class App { var onboardingWindowController: OnboardingWindowController? /** The window controller of the warnings window. */ - var warningsWindowController: WarningsWindowController? + var phpDoctorWindowController: PhpDoctorWindowController? /** The window controller of the warnings window. */ - var versionManagerWindowController: PhpVersionManagerWindowController? + var phpVersionManagerWindowController: PhpVersionManagerWindowController? /** List of detected (installed) applications that PHP Monitor can work with. */ var detectedApplications: [Application] = [] diff --git a/phpmon/Domain/Menu/MainMenu.swift b/phpmon/Domain/Menu/MainMenu.swift index 91d536c4..dcc0c09f 100644 --- a/phpmon/Domain/Menu/MainMenu.swift +++ b/phpmon/Domain/Menu/MainMenu.swift @@ -203,7 +203,7 @@ class MainMenu: NSObject, NSWindowDelegate, NSMenuDelegate, PhpSwitcherDelegate } @objc func openWarnings() { - WarningsWindowController.show() + PhpDoctorWindowController.show() } @objc func openDomainList() { diff --git a/phpmon/Domain/SwiftUI/Modules/PHP Config Editor/UI/ConfigManagerView.swift b/phpmon/Domain/SwiftUI/Modules/PHP Config Editor/UI/ConfigManagerView.swift new file mode 100644 index 00000000..015bc33a --- /dev/null +++ b/phpmon/Domain/SwiftUI/Modules/PHP Config Editor/UI/ConfigManagerView.swift @@ -0,0 +1,43 @@ +// +// LimitManager.swift +// PHP Monitor +// +// Created by Nico Verbruggen on 18/07/2023. +// Copyright © 2023 Nico Verbruggen. All rights reserved. +// + +import Foundation +import SwiftUI + +struct ConfigManagerView: View { + var body: some View { + VStack { + HStack(alignment: .center, spacing: 15) { + Image(systemName: "square.and.pencil.circle.fill") + .resizable() + .frame(width: 40, height: 40) + .foregroundColor(Color.blue) + .padding(12) + VStack(alignment: .leading, spacing: 5) { + Text("config_manager.description".localizedForSwiftUI) + .font(.system(size: 12)) + .frame(maxWidth: .infinity, alignment: .leading) + Text("config_manager.disclaimer".localizedForSwiftUI) + .font(.system(size: 12)) + .frame(maxWidth: .infinity, alignment: .leading) + } + } + .padding(10) + + Divider() + } + } +} + +struct ConfigManagerView_Previews: PreviewProvider { + static var previews: some View { + ConfigManagerView() + .frame(width: 600, height: 480) + .previewDisplayName("Config Manager") + } +} diff --git a/phpmon/Domain/Warnings/Services/PhpConfigChecker.swift b/phpmon/Domain/SwiftUI/Modules/PHP Doctor/Data/PhpConfigChecker.swift similarity index 99% rename from phpmon/Domain/Warnings/Services/PhpConfigChecker.swift rename to phpmon/Domain/SwiftUI/Modules/PHP Doctor/Data/PhpConfigChecker.swift index 6ba9e7f4..23acdf08 100644 --- a/phpmon/Domain/Warnings/Services/PhpConfigChecker.swift +++ b/phpmon/Domain/SwiftUI/Modules/PHP Doctor/Data/PhpConfigChecker.swift @@ -14,7 +14,6 @@ struct FileExistenceCheck { } class PhpConfigChecker { - public static var shared = PhpConfigChecker() var missing: [String] = [] diff --git a/phpmon/Domain/Warnings/Warning.swift b/phpmon/Domain/SwiftUI/Modules/PHP Doctor/Data/Warning.swift similarity index 100% rename from phpmon/Domain/Warnings/Warning.swift rename to phpmon/Domain/SwiftUI/Modules/PHP Doctor/Data/Warning.swift diff --git a/phpmon/Domain/Warnings/WarningManager.swift b/phpmon/Domain/SwiftUI/Modules/PHP Doctor/Data/WarningManager.swift similarity index 100% rename from phpmon/Domain/Warnings/WarningManager.swift rename to phpmon/Domain/SwiftUI/Modules/PHP Doctor/Data/WarningManager.swift diff --git a/phpmon/Domain/SwiftUI/Warning/NoWarningsView.swift b/phpmon/Domain/SwiftUI/Modules/PHP Doctor/UI/NoWarningsView.swift similarity index 100% rename from phpmon/Domain/SwiftUI/Warning/NoWarningsView.swift rename to phpmon/Domain/SwiftUI/Modules/PHP Doctor/UI/NoWarningsView.swift diff --git a/phpmon/Domain/SwiftUI/Warning/WarningListView.swift b/phpmon/Domain/SwiftUI/Modules/PHP Doctor/UI/PhpDoctorView.swift similarity index 94% rename from phpmon/Domain/SwiftUI/Warning/WarningListView.swift rename to phpmon/Domain/SwiftUI/Modules/PHP Doctor/UI/PhpDoctorView.swift index b664d8c7..fff18b38 100644 --- a/phpmon/Domain/SwiftUI/Warning/WarningListView.swift +++ b/phpmon/Domain/SwiftUI/Modules/PHP Doctor/UI/PhpDoctorView.swift @@ -1,5 +1,5 @@ // -// WarningListView.swift +// PhpDoctorView.swift // PHP Monitor // // Created by Nico Verbruggen on 09/08/2022. @@ -8,7 +8,7 @@ import SwiftUI -struct WarningListView: View { +struct PhpDoctorView: View { @ObservedObject var warningManager: WarningManager init(empty: Bool = false, fake: Bool = false, manager: WarningManager? = nil) { @@ -96,11 +96,11 @@ struct WarningListView: View { struct WarningListView_Previews: PreviewProvider { static var previews: some View { - WarningListView(empty: true, fake: true, manager: WarningManager()) + PhpDoctorView(empty: true, fake: true, manager: WarningManager()) .frame(width: 600, height: 480) .previewDisplayName("Empty List") - WarningListView(empty: false, fake: true, manager: WarningManager()) + PhpDoctorView(empty: false, fake: true, manager: WarningManager()) .frame(width: 600, height: 480) .previewDisplayName("List With All Warnings") } diff --git a/phpmon/Domain/Warnings/WarningsWindowController.swift b/phpmon/Domain/SwiftUI/Modules/PHP Doctor/UI/PhpDoctorWindowController.swift similarity index 68% rename from phpmon/Domain/Warnings/WarningsWindowController.swift rename to phpmon/Domain/SwiftUI/Modules/PHP Doctor/UI/PhpDoctorWindowController.swift index 4cc87e4f..f7b128d6 100644 --- a/phpmon/Domain/Warnings/WarningsWindowController.swift +++ b/phpmon/Domain/SwiftUI/Modules/PHP Doctor/UI/PhpDoctorWindowController.swift @@ -1,5 +1,5 @@ // -// WarningsWindowController.swift +// PhpDoctorWindowController.swift // PHP Monitor // // Created by Nico Verbruggen on 09/08/2022. @@ -9,7 +9,7 @@ import Cocoa import SwiftUI -class WarningsWindowController: PMWindowController { +class PhpDoctorWindowController: PMWindowController { // MARK: - Window Identifier @@ -26,19 +26,19 @@ class WarningsWindowController: PMWindowController { window.styleMask = [.titled, .closable, .miniaturizable] window.titlebarAppearsTransparent = true window.delegate = delegate ?? windowController - window.contentView = NSHostingView(rootView: WarningListView()) + window.contentView = NSHostingView(rootView: PhpDoctorView()) window.setContentSize(NSSize(width: 600, height: 480)) - App.shared.warningsWindowController = windowController + App.shared.phpDoctorWindowController = windowController } public static func show(delegate: NSWindowDelegate? = nil) { - if App.shared.warningsWindowController == nil { + if App.shared.phpDoctorWindowController == nil { Self.create(delegate: delegate) } - App.shared.warningsWindowController?.showWindow(self) - App.shared.warningsWindowController?.window?.setCenterPosition(offsetY: 70) + App.shared.phpDoctorWindowController?.showWindow(self) + App.shared.phpDoctorWindowController?.window?.setCenterPosition(offsetY: 70) NSApp.activate(ignoringOtherApps: true) } diff --git a/phpmon/Domain/SwiftUI/Warning/WarningView.swift b/phpmon/Domain/SwiftUI/Modules/PHP Doctor/UI/WarningView.swift similarity index 100% rename from phpmon/Domain/SwiftUI/Warning/WarningView.swift rename to phpmon/Domain/SwiftUI/Modules/PHP Doctor/UI/WarningView.swift diff --git a/phpmon/Domain/SwiftUI/PhpManager/BrewFormulaUI.swift b/phpmon/Domain/SwiftUI/Modules/PHP Version Manager/Data/BrewFormula+UI.swift similarity index 96% rename from phpmon/Domain/SwiftUI/PhpManager/BrewFormulaUI.swift rename to phpmon/Domain/SwiftUI/Modules/PHP Version Manager/Data/BrewFormula+UI.swift index 907ad864..80d8a34a 100644 --- a/phpmon/Domain/SwiftUI/PhpManager/BrewFormulaUI.swift +++ b/phpmon/Domain/SwiftUI/Modules/PHP Version Manager/Data/BrewFormula+UI.swift @@ -1,5 +1,5 @@ // -// BrewFormulaUI.swift +// BrewFormula+UI.swift // PHP Monitor // // Created by Nico Verbruggen on 02/05/2023. diff --git a/phpmon/Domain/SwiftUI/PhpManager/FakeBrewFormulaeHandler.swift b/phpmon/Domain/SwiftUI/Modules/PHP Version Manager/Data/Fake/FakeBrewFormulaeHandler.swift similarity index 100% rename from phpmon/Domain/SwiftUI/PhpManager/FakeBrewFormulaeHandler.swift rename to phpmon/Domain/SwiftUI/Modules/PHP Version Manager/Data/Fake/FakeBrewFormulaeHandler.swift diff --git a/phpmon/Domain/SwiftUI/PhpManager/PhpFormulaeStatus.swift b/phpmon/Domain/SwiftUI/Modules/PHP Version Manager/Data/PhpFormulaeStatus.swift similarity index 100% rename from phpmon/Domain/SwiftUI/PhpManager/PhpFormulaeStatus.swift rename to phpmon/Domain/SwiftUI/Modules/PHP Version Manager/Data/PhpFormulaeStatus.swift diff --git a/phpmon/Domain/SwiftUI/PhpManager/BlockingOverlayView.swift b/phpmon/Domain/SwiftUI/Modules/PHP Version Manager/UI/BlockingOverlayView.swift similarity index 100% rename from phpmon/Domain/SwiftUI/PhpManager/BlockingOverlayView.swift rename to phpmon/Domain/SwiftUI/Modules/PHP Version Manager/UI/BlockingOverlayView.swift diff --git a/phpmon/Domain/SwiftUI/PhpManager/PhpFormulaeView.swift b/phpmon/Domain/SwiftUI/Modules/PHP Version Manager/UI/PhpVersionManagerView.swift similarity index 97% rename from phpmon/Domain/SwiftUI/PhpManager/PhpFormulaeView.swift rename to phpmon/Domain/SwiftUI/Modules/PHP Version Manager/UI/PhpVersionManagerView.swift index 83c8ffcf..94a190ae 100644 --- a/phpmon/Domain/SwiftUI/PhpManager/PhpFormulaeView.swift +++ b/phpmon/Domain/SwiftUI/Modules/PHP Version Manager/UI/PhpVersionManagerView.swift @@ -1,5 +1,5 @@ // -// PhpFormulaeView.swift +// PhpVersionManagerView.swift // PHP Monitor // // Created by Nico Verbruggen on 17/03/2023. @@ -10,7 +10,7 @@ import Foundation import SwiftUI // swiftlint:disable type_body_length -struct PhpFormulaeView: View { +struct PhpVersionManagerView: View { @ObservedObject var formulae: BrewFormulaeObservable @ObservedObject var status: PhpFormulaeStatus var handler: HandlesBrewFormulae @@ -267,7 +267,7 @@ struct PhpFormulaeView: View { } Alert.confirm( - onWindow: App.shared.versionManagerWindowController!.window!, + onWindow: App.shared.phpVersionManagerWindowController!.window!, messageText: "phpman.warnings.removal.title".localized(formula.displayName), informativeText: "phpman.warnings.removal.desc".localized(formula.displayName), buttonTitle: "phpman.warnings.removal.button".localized, @@ -332,7 +332,7 @@ struct PhpFormulaeView: View { style: NSAlert.Style = .critical ) { Alert.confirm( - onWindow: App.shared.versionManagerWindowController!.window!, + onWindow: App.shared.phpVersionManagerWindowController!.window!, messageText: title, informativeText: description, buttonTitle: button, @@ -350,9 +350,9 @@ struct PhpFormulaeView: View { } // swiftlint:enable type_body_length -struct PhpFormulaeView_Previews: PreviewProvider { +struct PhpVersionManagerView_Previews: PreviewProvider { static var previews: some View { - PhpFormulaeView( + PhpVersionManagerView( formulae: Brew.shared.formulae, handler: FakeBrewFormulaeHandler() ).frame(width: 600, height: 600) diff --git a/phpmon/Domain/SwiftUI/PhpManager/PhpVersionManagerWC.swift b/phpmon/Domain/SwiftUI/Modules/PHP Version Manager/UI/PhpVersionManagerWindowController.swift similarity index 73% rename from phpmon/Domain/SwiftUI/PhpManager/PhpVersionManagerWC.swift rename to phpmon/Domain/SwiftUI/Modules/PHP Version Manager/UI/PhpVersionManagerWindowController.swift index e786a301..57f45c9a 100644 --- a/phpmon/Domain/SwiftUI/PhpManager/PhpVersionManagerWC.swift +++ b/phpmon/Domain/SwiftUI/Modules/PHP Version Manager/UI/PhpVersionManagerWindowController.swift @@ -14,16 +14,16 @@ class PhpVersionManagerWindowController: PMWindowController { // MARK: - Window Identifier - var view: PhpFormulaeView! + var view: PhpVersionManagerView! override var windowName: String { - return "PhpFormulaeView" + return "PhpVersionManager" } public static func create(delegate: NSWindowDelegate?) { let windowController = Self() windowController.window = NSWindow() - windowController.view = PhpFormulaeView( + windowController.view = PhpVersionManagerView( formulae: Brew.shared.formulae, handler: BrewFormulaeHandler() ) @@ -36,16 +36,16 @@ class PhpVersionManagerWindowController: PMWindowController { window.contentView = NSHostingView(rootView: windowController.view) window.setContentSize(NSSize(width: 600, height: 800)) - App.shared.versionManagerWindowController = windowController + App.shared.phpVersionManagerWindowController = windowController } public static func show(delegate: NSWindowDelegate? = nil) { - if App.shared.versionManagerWindowController == nil { + if App.shared.phpVersionManagerWindowController == nil { Self.create(delegate: delegate) } - App.shared.versionManagerWindowController?.showWindow(self) - App.shared.versionManagerWindowController?.positionWindowInTopLeftCorner() + App.shared.phpVersionManagerWindowController?.showWindow(self) + App.shared.phpVersionManagerWindowController?.positionWindowInTopLeftCorner() NSApp.activate(ignoringOtherApps: true) } From 90b068d200a0b093149a63fefb12fb3e35faa3e7 Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Tue, 18 Jul 2023 19:56:09 +0200 Subject: [PATCH 13/34] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20Modular=20approach?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- PHP Monitor.xcodeproj/project.pbxproj | 64 +++++++++++-------- .../ProgressVC.swift | 0 .../ProgressWindow.storyboard | 5 +- .../TerminalProgressWindowController.swift | 0 .../Domain List/UI}/AddProxyVC.swift | 0 .../Domain List/UI}/AddSiteVC.swift | 0 .../UI}/Cells/DomainListCellProtocol.swift | 0 .../UI}/Cells/DomainListKindCell.swift | 0 .../UI}/Cells/DomainListNameCell.swift | 0 .../UI}/Cells/DomainListPhpCell.swift | 0 .../UI}/Cells/DomainListTLSCell.swift | 0 .../UI}/Cells/DomainListTypeCell.swift | 0 .../UI}/DomainListVC+Actions.swift | 0 .../UI}/DomainListVC+ContextMenu.swift | 0 .../Domain List/UI}/DomainListVC.swift | 0 .../UI}/DomainListWindowController.swift | 0 .../Domain List/UI}/SelectionVC.swift | 0 .../UI/Subclass}/PMTableView.swift | 0 .../Onboarding/OnboardingView.swift | 0 .../OnboardingWindowController.swift | 0 .../UI/ConfigManagerView.swift | 0 .../PHP Doctor/Data/PhpConfigChecker.swift | 0 .../Modules/PHP Doctor/Data/Warning.swift | 0 .../PHP Doctor/Data/WarningManager.swift | 0 .../PHP Doctor/UI/NoWarningsView.swift | 0 .../Modules/PHP Doctor/UI/PhpDoctorView.swift | 0 .../UI/PhpDoctorWindowController.swift | 0 .../Modules/PHP Doctor/UI/WarningView.swift | 0 .../Data/BrewFormula+UI.swift | 0 .../Data/Fake/FakeBrewFormulaeHandler.swift | 0 .../Data/PhpFormulaeStatus.swift | 0 .../UI/BlockingOverlayView.swift | 0 .../UI/PhpVersionManagerView.swift | 0 .../PhpVersionManagerWindowController.swift | 0 34 files changed, 39 insertions(+), 30 deletions(-) rename phpmon/Domain/{Progress => Terminal Alert}/ProgressVC.swift (100%) rename phpmon/Domain/{Progress => Terminal Alert}/ProgressWindow.storyboard (98%) rename phpmon/Domain/{Progress => Terminal Alert}/TerminalProgressWindowController.swift (100%) rename phpmon/{Domain/DomainList => Modules/Domain List/UI}/AddProxyVC.swift (100%) rename phpmon/{Domain/DomainList => Modules/Domain List/UI}/AddSiteVC.swift (100%) rename phpmon/{Domain/DomainList => Modules/Domain List/UI}/Cells/DomainListCellProtocol.swift (100%) rename phpmon/{Domain/DomainList => Modules/Domain List/UI}/Cells/DomainListKindCell.swift (100%) rename phpmon/{Domain/DomainList => Modules/Domain List/UI}/Cells/DomainListNameCell.swift (100%) rename phpmon/{Domain/DomainList => Modules/Domain List/UI}/Cells/DomainListPhpCell.swift (100%) rename phpmon/{Domain/DomainList => Modules/Domain List/UI}/Cells/DomainListTLSCell.swift (100%) rename phpmon/{Domain/DomainList => Modules/Domain List/UI}/Cells/DomainListTypeCell.swift (100%) rename phpmon/{Domain/DomainList => Modules/Domain List/UI}/DomainListVC+Actions.swift (100%) rename phpmon/{Domain/DomainList => Modules/Domain List/UI}/DomainListVC+ContextMenu.swift (100%) rename phpmon/{Domain/DomainList => Modules/Domain List/UI}/DomainListVC.swift (100%) rename phpmon/{Domain/DomainList => Modules/Domain List/UI}/DomainListWindowController.swift (100%) rename phpmon/{Domain/DomainList => Modules/Domain List/UI}/SelectionVC.swift (100%) rename phpmon/{Domain/DomainList => Modules/Domain List/UI/Subclass}/PMTableView.swift (100%) rename phpmon/{Domain/SwiftUI => Modules}/Onboarding/OnboardingView.swift (100%) rename phpmon/{Domain => Modules}/Onboarding/OnboardingWindowController.swift (100%) rename phpmon/{Domain/SwiftUI => }/Modules/PHP Config Editor/UI/ConfigManagerView.swift (100%) rename phpmon/{Domain/SwiftUI => }/Modules/PHP Doctor/Data/PhpConfigChecker.swift (100%) rename phpmon/{Domain/SwiftUI => }/Modules/PHP Doctor/Data/Warning.swift (100%) rename phpmon/{Domain/SwiftUI => }/Modules/PHP Doctor/Data/WarningManager.swift (100%) rename phpmon/{Domain/SwiftUI => }/Modules/PHP Doctor/UI/NoWarningsView.swift (100%) rename phpmon/{Domain/SwiftUI => }/Modules/PHP Doctor/UI/PhpDoctorView.swift (100%) rename phpmon/{Domain/SwiftUI => }/Modules/PHP Doctor/UI/PhpDoctorWindowController.swift (100%) rename phpmon/{Domain/SwiftUI => }/Modules/PHP Doctor/UI/WarningView.swift (100%) rename phpmon/{Domain/SwiftUI => }/Modules/PHP Version Manager/Data/BrewFormula+UI.swift (100%) rename phpmon/{Domain/SwiftUI => }/Modules/PHP Version Manager/Data/Fake/FakeBrewFormulaeHandler.swift (100%) rename phpmon/{Domain/SwiftUI => }/Modules/PHP Version Manager/Data/PhpFormulaeStatus.swift (100%) rename phpmon/{Domain/SwiftUI => }/Modules/PHP Version Manager/UI/BlockingOverlayView.swift (100%) rename phpmon/{Domain/SwiftUI => }/Modules/PHP Version Manager/UI/PhpVersionManagerView.swift (100%) rename phpmon/{Domain/SwiftUI => }/Modules/PHP Version Manager/UI/PhpVersionManagerWindowController.swift (100%) diff --git a/PHP Monitor.xcodeproj/project.pbxproj b/PHP Monitor.xcodeproj/project.pbxproj index cf4d50a5..beac171d 100644 --- a/PHP Monitor.xcodeproj/project.pbxproj +++ b/PHP Monitor.xcodeproj/project.pbxproj @@ -1340,6 +1340,7 @@ C4B5853A2770FE2500DA4FBE /* Common */, C41E181722CB61EB0072CF09 /* Domain */, 54D9E0BE27E4F5C0003B9AD9 /* Vendor */, + C44DFA832A6706A200B98ED5 /* Modules */, C41C1B3F22B0098000E7CF16 /* Info.plist */, C4232EE42612526500158FC6 /* Credits.html */, C41C1B4022B0098000E7CF16 /* phpmon.entitlements */, @@ -1366,10 +1367,8 @@ C4B13B1D25C4915000548C3A /* App */, C4D9ADBD27761084007277F4 /* PHP */, C47331A0247093AC009A0597 /* Menu */, - C464ADAA275A7A25003FCD53 /* DomainList */, - C44A874628905B8500498BC4 /* Onboarding */, 5420395726135DB800FB00FA /* Preferences */, - C44C198F276E3A380072762D /* Progress */, + C44C198F276E3A380072762D /* Terminal Alert */, C4C8E81D276F5686003AC782 /* Watcher */, C40C5C9E2846A42D00E28255 /* Presets */, C4EE55B027708BB2001DF387 /* SwiftUI */, @@ -1424,22 +1423,14 @@ path = Common; sourceTree = ""; }; - C44A874628905B8500498BC4 /* Onboarding */ = { - isa = PBXGroup; - children = ( - C4FACE82288F1F9700FC478F /* OnboardingWindowController.swift */, - ); - path = Onboarding; - sourceTree = ""; - }; - C44C198F276E3A380072762D /* Progress */ = { + C44C198F276E3A380072762D /* Terminal Alert */ = { isa = PBXGroup; children = ( C44C198C276E3A1C0072762D /* TerminalProgressWindowController.swift */, C44A874728905BB000498BC4 /* ProgressVC.swift */, C44C1990276E44CB0072762D /* ProgressWindow.storyboard */, ); - path = Progress; + path = "Terminal Alert"; sourceTree = ""; }; C44CCD4327AFE93300CE40E5 /* Errors */ = { @@ -1520,6 +1511,8 @@ C44DFA832A6706A200B98ED5 /* Modules */ = { isa = PBXGroup; children = ( + C4E9D2BE2878B32D008FFDAD /* Onboarding */, + C464ADAA275A7A25003FCD53 /* Domain List */, C44DFA7A2A6703FD00B98ED5 /* PHP Config Editor */, C4297F7828970D4E004C4630 /* PHP Doctor */, C43931C329C4BD510069165B /* PHP Version Manager */, @@ -1534,6 +1527,30 @@ path = Data; sourceTree = ""; }; + C44DFA852A67090A00B98ED5 /* UI */ = { + isa = PBXGroup; + children = ( + C464ADAB275A7A3F003FCD53 /* DomainListWindowController.swift */, + C464ADAE275A7A69003FCD53 /* DomainListVC.swift */, + C41E87192763D42300161EE0 /* DomainListVC+ContextMenu.swift */, + C41CA5EC2774F8EE00A2C80E /* DomainListVC+Actions.swift */, + C4FE011028084FC200D1DE6D /* SelectionVC.swift */, + C4930849279F331F009C240B /* AddSiteVC.swift */, + C4D9F24A280B69E100DCD39A /* AddProxyVC.swift */, + C44067F327E256560045BD4E /* Cells */, + C44DFA872A67092300B98ED5 /* Subclass */, + ); + path = UI; + sourceTree = ""; + }; + C44DFA872A67092300B98ED5 /* Subclass */ = { + isa = PBXGroup; + children = ( + C4A81CA328C67101008DD9D1 /* PMTableView.swift */, + ); + path = Subclass; + sourceTree = ""; + }; C44F868C2835BD60005C353A /* phpmon */ = { isa = PBXGroup; children = ( @@ -1612,20 +1629,12 @@ path = Behaviors; sourceTree = ""; }; - C464ADAA275A7A25003FCD53 /* DomainList */ = { + C464ADAA275A7A25003FCD53 /* Domain List */ = { isa = PBXGroup; children = ( - C44067F327E256560045BD4E /* Cells */, - C464ADAB275A7A3F003FCD53 /* DomainListWindowController.swift */, - C464ADAE275A7A69003FCD53 /* DomainListVC.swift */, - C41E87192763D42300161EE0 /* DomainListVC+ContextMenu.swift */, - C41CA5EC2774F8EE00A2C80E /* DomainListVC+Actions.swift */, - C4FE011028084FC200D1DE6D /* SelectionVC.swift */, - C4930849279F331F009C240B /* AddSiteVC.swift */, - C4D9F24A280B69E100DCD39A /* AddProxyVC.swift */, - C4A81CA328C67101008DD9D1 /* PMTableView.swift */, + C44DFA852A67090A00B98ED5 /* UI */, ); - path = DomainList; + path = "Domain List"; sourceTree = ""; }; C471E6D928F9AFC20021E251 /* Testables */ = { @@ -1823,10 +1832,10 @@ C4B609172853AA9E00C95265 /* Menu */ = { isa = PBXGroup; children = ( + C4EB53E428551F9B006F9937 /* HeaderView.swift */, + C4B609192853AAD300C95265 /* SectionHeaderView.swift */, C4B6091C2853AB9700C95265 /* ServicesView.swift */, C4709CA128524B3400088BB8 /* StatsView.swift */, - C4B609192853AAD300C95265 /* SectionHeaderView.swift */, - C4EB53E428551F9B006F9937 /* HeaderView.swift */, ); path = Menu; sourceTree = ""; @@ -1990,6 +1999,7 @@ C4E9D2BE2878B32D008FFDAD /* Onboarding */ = { isa = PBXGroup; children = ( + C4FACE82288F1F9700FC478F /* OnboardingWindowController.swift */, C4E9D2BF2878B336008FFDAD /* OnboardingView.swift */, ); path = Onboarding; @@ -1998,8 +2008,6 @@ C4EE55B027708BB2001DF387 /* SwiftUI */ = { isa = PBXGroup; children = ( - C44DFA832A6706A200B98ED5 /* Modules */, - C4E9D2BE2878B32D008FFDAD /* Onboarding */, C4B609182853AAA700C95265 /* Domains */, C4B609172853AA9E00C95265 /* Menu */, C490E3A329BC92E6006D2DE6 /* Progress */, diff --git a/phpmon/Domain/Progress/ProgressVC.swift b/phpmon/Domain/Terminal Alert/ProgressVC.swift similarity index 100% rename from phpmon/Domain/Progress/ProgressVC.swift rename to phpmon/Domain/Terminal Alert/ProgressVC.swift diff --git a/phpmon/Domain/Progress/ProgressWindow.storyboard b/phpmon/Domain/Terminal Alert/ProgressWindow.storyboard similarity index 98% rename from phpmon/Domain/Progress/ProgressWindow.storyboard rename to phpmon/Domain/Terminal Alert/ProgressWindow.storyboard index 67ff33fc..56a7c3c6 100644 --- a/phpmon/Domain/Progress/ProgressWindow.storyboard +++ b/phpmon/Domain/Terminal Alert/ProgressWindow.storyboard @@ -1,7 +1,8 @@ - + - + + diff --git a/phpmon/Domain/Progress/TerminalProgressWindowController.swift b/phpmon/Domain/Terminal Alert/TerminalProgressWindowController.swift similarity index 100% rename from phpmon/Domain/Progress/TerminalProgressWindowController.swift rename to phpmon/Domain/Terminal Alert/TerminalProgressWindowController.swift diff --git a/phpmon/Domain/DomainList/AddProxyVC.swift b/phpmon/Modules/Domain List/UI/AddProxyVC.swift similarity index 100% rename from phpmon/Domain/DomainList/AddProxyVC.swift rename to phpmon/Modules/Domain List/UI/AddProxyVC.swift diff --git a/phpmon/Domain/DomainList/AddSiteVC.swift b/phpmon/Modules/Domain List/UI/AddSiteVC.swift similarity index 100% rename from phpmon/Domain/DomainList/AddSiteVC.swift rename to phpmon/Modules/Domain List/UI/AddSiteVC.swift diff --git a/phpmon/Domain/DomainList/Cells/DomainListCellProtocol.swift b/phpmon/Modules/Domain List/UI/Cells/DomainListCellProtocol.swift similarity index 100% rename from phpmon/Domain/DomainList/Cells/DomainListCellProtocol.swift rename to phpmon/Modules/Domain List/UI/Cells/DomainListCellProtocol.swift diff --git a/phpmon/Domain/DomainList/Cells/DomainListKindCell.swift b/phpmon/Modules/Domain List/UI/Cells/DomainListKindCell.swift similarity index 100% rename from phpmon/Domain/DomainList/Cells/DomainListKindCell.swift rename to phpmon/Modules/Domain List/UI/Cells/DomainListKindCell.swift diff --git a/phpmon/Domain/DomainList/Cells/DomainListNameCell.swift b/phpmon/Modules/Domain List/UI/Cells/DomainListNameCell.swift similarity index 100% rename from phpmon/Domain/DomainList/Cells/DomainListNameCell.swift rename to phpmon/Modules/Domain List/UI/Cells/DomainListNameCell.swift diff --git a/phpmon/Domain/DomainList/Cells/DomainListPhpCell.swift b/phpmon/Modules/Domain List/UI/Cells/DomainListPhpCell.swift similarity index 100% rename from phpmon/Domain/DomainList/Cells/DomainListPhpCell.swift rename to phpmon/Modules/Domain List/UI/Cells/DomainListPhpCell.swift diff --git a/phpmon/Domain/DomainList/Cells/DomainListTLSCell.swift b/phpmon/Modules/Domain List/UI/Cells/DomainListTLSCell.swift similarity index 100% rename from phpmon/Domain/DomainList/Cells/DomainListTLSCell.swift rename to phpmon/Modules/Domain List/UI/Cells/DomainListTLSCell.swift diff --git a/phpmon/Domain/DomainList/Cells/DomainListTypeCell.swift b/phpmon/Modules/Domain List/UI/Cells/DomainListTypeCell.swift similarity index 100% rename from phpmon/Domain/DomainList/Cells/DomainListTypeCell.swift rename to phpmon/Modules/Domain List/UI/Cells/DomainListTypeCell.swift diff --git a/phpmon/Domain/DomainList/DomainListVC+Actions.swift b/phpmon/Modules/Domain List/UI/DomainListVC+Actions.swift similarity index 100% rename from phpmon/Domain/DomainList/DomainListVC+Actions.swift rename to phpmon/Modules/Domain List/UI/DomainListVC+Actions.swift diff --git a/phpmon/Domain/DomainList/DomainListVC+ContextMenu.swift b/phpmon/Modules/Domain List/UI/DomainListVC+ContextMenu.swift similarity index 100% rename from phpmon/Domain/DomainList/DomainListVC+ContextMenu.swift rename to phpmon/Modules/Domain List/UI/DomainListVC+ContextMenu.swift diff --git a/phpmon/Domain/DomainList/DomainListVC.swift b/phpmon/Modules/Domain List/UI/DomainListVC.swift similarity index 100% rename from phpmon/Domain/DomainList/DomainListVC.swift rename to phpmon/Modules/Domain List/UI/DomainListVC.swift diff --git a/phpmon/Domain/DomainList/DomainListWindowController.swift b/phpmon/Modules/Domain List/UI/DomainListWindowController.swift similarity index 100% rename from phpmon/Domain/DomainList/DomainListWindowController.swift rename to phpmon/Modules/Domain List/UI/DomainListWindowController.swift diff --git a/phpmon/Domain/DomainList/SelectionVC.swift b/phpmon/Modules/Domain List/UI/SelectionVC.swift similarity index 100% rename from phpmon/Domain/DomainList/SelectionVC.swift rename to phpmon/Modules/Domain List/UI/SelectionVC.swift diff --git a/phpmon/Domain/DomainList/PMTableView.swift b/phpmon/Modules/Domain List/UI/Subclass/PMTableView.swift similarity index 100% rename from phpmon/Domain/DomainList/PMTableView.swift rename to phpmon/Modules/Domain List/UI/Subclass/PMTableView.swift diff --git a/phpmon/Domain/SwiftUI/Onboarding/OnboardingView.swift b/phpmon/Modules/Onboarding/OnboardingView.swift similarity index 100% rename from phpmon/Domain/SwiftUI/Onboarding/OnboardingView.swift rename to phpmon/Modules/Onboarding/OnboardingView.swift diff --git a/phpmon/Domain/Onboarding/OnboardingWindowController.swift b/phpmon/Modules/Onboarding/OnboardingWindowController.swift similarity index 100% rename from phpmon/Domain/Onboarding/OnboardingWindowController.swift rename to phpmon/Modules/Onboarding/OnboardingWindowController.swift diff --git a/phpmon/Domain/SwiftUI/Modules/PHP Config Editor/UI/ConfigManagerView.swift b/phpmon/Modules/PHP Config Editor/UI/ConfigManagerView.swift similarity index 100% rename from phpmon/Domain/SwiftUI/Modules/PHP Config Editor/UI/ConfigManagerView.swift rename to phpmon/Modules/PHP Config Editor/UI/ConfigManagerView.swift diff --git a/phpmon/Domain/SwiftUI/Modules/PHP Doctor/Data/PhpConfigChecker.swift b/phpmon/Modules/PHP Doctor/Data/PhpConfigChecker.swift similarity index 100% rename from phpmon/Domain/SwiftUI/Modules/PHP Doctor/Data/PhpConfigChecker.swift rename to phpmon/Modules/PHP Doctor/Data/PhpConfigChecker.swift diff --git a/phpmon/Domain/SwiftUI/Modules/PHP Doctor/Data/Warning.swift b/phpmon/Modules/PHP Doctor/Data/Warning.swift similarity index 100% rename from phpmon/Domain/SwiftUI/Modules/PHP Doctor/Data/Warning.swift rename to phpmon/Modules/PHP Doctor/Data/Warning.swift diff --git a/phpmon/Domain/SwiftUI/Modules/PHP Doctor/Data/WarningManager.swift b/phpmon/Modules/PHP Doctor/Data/WarningManager.swift similarity index 100% rename from phpmon/Domain/SwiftUI/Modules/PHP Doctor/Data/WarningManager.swift rename to phpmon/Modules/PHP Doctor/Data/WarningManager.swift diff --git a/phpmon/Domain/SwiftUI/Modules/PHP Doctor/UI/NoWarningsView.swift b/phpmon/Modules/PHP Doctor/UI/NoWarningsView.swift similarity index 100% rename from phpmon/Domain/SwiftUI/Modules/PHP Doctor/UI/NoWarningsView.swift rename to phpmon/Modules/PHP Doctor/UI/NoWarningsView.swift diff --git a/phpmon/Domain/SwiftUI/Modules/PHP Doctor/UI/PhpDoctorView.swift b/phpmon/Modules/PHP Doctor/UI/PhpDoctorView.swift similarity index 100% rename from phpmon/Domain/SwiftUI/Modules/PHP Doctor/UI/PhpDoctorView.swift rename to phpmon/Modules/PHP Doctor/UI/PhpDoctorView.swift diff --git a/phpmon/Domain/SwiftUI/Modules/PHP Doctor/UI/PhpDoctorWindowController.swift b/phpmon/Modules/PHP Doctor/UI/PhpDoctorWindowController.swift similarity index 100% rename from phpmon/Domain/SwiftUI/Modules/PHP Doctor/UI/PhpDoctorWindowController.swift rename to phpmon/Modules/PHP Doctor/UI/PhpDoctorWindowController.swift diff --git a/phpmon/Domain/SwiftUI/Modules/PHP Doctor/UI/WarningView.swift b/phpmon/Modules/PHP Doctor/UI/WarningView.swift similarity index 100% rename from phpmon/Domain/SwiftUI/Modules/PHP Doctor/UI/WarningView.swift rename to phpmon/Modules/PHP Doctor/UI/WarningView.swift diff --git a/phpmon/Domain/SwiftUI/Modules/PHP Version Manager/Data/BrewFormula+UI.swift b/phpmon/Modules/PHP Version Manager/Data/BrewFormula+UI.swift similarity index 100% rename from phpmon/Domain/SwiftUI/Modules/PHP Version Manager/Data/BrewFormula+UI.swift rename to phpmon/Modules/PHP Version Manager/Data/BrewFormula+UI.swift diff --git a/phpmon/Domain/SwiftUI/Modules/PHP Version Manager/Data/Fake/FakeBrewFormulaeHandler.swift b/phpmon/Modules/PHP Version Manager/Data/Fake/FakeBrewFormulaeHandler.swift similarity index 100% rename from phpmon/Domain/SwiftUI/Modules/PHP Version Manager/Data/Fake/FakeBrewFormulaeHandler.swift rename to phpmon/Modules/PHP Version Manager/Data/Fake/FakeBrewFormulaeHandler.swift diff --git a/phpmon/Domain/SwiftUI/Modules/PHP Version Manager/Data/PhpFormulaeStatus.swift b/phpmon/Modules/PHP Version Manager/Data/PhpFormulaeStatus.swift similarity index 100% rename from phpmon/Domain/SwiftUI/Modules/PHP Version Manager/Data/PhpFormulaeStatus.swift rename to phpmon/Modules/PHP Version Manager/Data/PhpFormulaeStatus.swift diff --git a/phpmon/Domain/SwiftUI/Modules/PHP Version Manager/UI/BlockingOverlayView.swift b/phpmon/Modules/PHP Version Manager/UI/BlockingOverlayView.swift similarity index 100% rename from phpmon/Domain/SwiftUI/Modules/PHP Version Manager/UI/BlockingOverlayView.swift rename to phpmon/Modules/PHP Version Manager/UI/BlockingOverlayView.swift diff --git a/phpmon/Domain/SwiftUI/Modules/PHP Version Manager/UI/PhpVersionManagerView.swift b/phpmon/Modules/PHP Version Manager/UI/PhpVersionManagerView.swift similarity index 100% rename from phpmon/Domain/SwiftUI/Modules/PHP Version Manager/UI/PhpVersionManagerView.swift rename to phpmon/Modules/PHP Version Manager/UI/PhpVersionManagerView.swift diff --git a/phpmon/Domain/SwiftUI/Modules/PHP Version Manager/UI/PhpVersionManagerWindowController.swift b/phpmon/Modules/PHP Version Manager/UI/PhpVersionManagerWindowController.swift similarity index 100% rename from phpmon/Domain/SwiftUI/Modules/PHP Version Manager/UI/PhpVersionManagerWindowController.swift rename to phpmon/Modules/PHP Version Manager/UI/PhpVersionManagerWindowController.swift From 20aad90ba942d060ef49ab315507a8d7e112a4cd Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Thu, 20 Jul 2023 18:14:05 +0200 Subject: [PATCH 14/34] =?UTF-8?q?=F0=9F=93=9D=20Update=20README?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index c4e02d63..08354f9c 100644 --- a/README.md +++ b/README.md @@ -82,6 +82,12 @@ I wanted to be able to **see at a glance** which version of PHP was linked, and Initially, I had an Alfred workflow for this — but it has now been replaced with this utility, which also does a good job at displaying additional information at a glance, like the current PHP version, memory limits, and more. +## 🐘 Why not use Laravel Herd? + +If you don't need to customize your local PHP setup and just want an easy and ready-to-go environment to start coding, [Laravel Herd](https://herd.laravel.com) is probably more than sufficient for many use cases. + +If you need more customization and flexibility I encourage you to consider PHP Monitor in combination with Laravel Valet or some other solution like Docker (with Laravel Sail, for example). + ## 🤬 The app won't start?! PHP Monitor performs some integrity checks to ensure a good experience when using the app. You'll get a message telling you that PHP Monitor won't work correctly in a variety of scenarios. @@ -104,7 +110,7 @@ All stable and supported PHP versions are also supported by PHP Monitor. However > **Note** > If you have versions of PHP installed that can be detected by PHP Monitor but is *not* supported by the currently active version of Valet, you will be alerted by an item in the menu with an exclamation mark emoji. (⚠️) -Backports that are installable via PHP Monitor's **PHP Manager** functionality are subject to availability via [this tap](https://github.com/shivammathur/homebrew-php). +Backports that are installable via PHP Monitor's **PHP Version Manager** functionality are subject to availability via [this tap](https://github.com/shivammathur/homebrew-php). For maximum compatibility with older PHP versions, you may wish to keep using Valet 2 or 3. For more information, please see [SECURITY.md](./SECURITY.md) to find out which versions of PHP are supported with different versions of Valet. @@ -114,9 +120,9 @@ For maximum compatibility with older PHP versions, you may wish to keep using Va Assuming you have installed the `php` formula, the latest stable version of PHP is installed. At the time of writing, this is PHP 8.2. -You can install other supported versions of PHP via PHP Monitor's **PHP Manager**. (You can manually install or upgrade PHP versions too, but this is not recommended.) +You can install other supported versions of PHP via PHP Monitor's **PHP Version Manager**. (You can manually install or upgrade PHP versions too, but this is not recommended.) -Please keep in mind that installing or updating PHP versions, even when done via PHP Monitor's **PHP Manager**, may cause other required formula dependencies (required software needed to keep those PHP versions functional) to be upgraded. It might not be very transparent when this happens, but this is likely the cause if installing a PHP version takes longer than expected: usually other dependencies are also being installed. +Please keep in mind that installing or updating PHP versions, even when done via PHP Monitor's **PHP Version Manager**, may cause other required formula dependencies (required software needed to keep those PHP versions functional) to be upgraded. It might not be very transparent when this happens, but this is likely the cause if installing a PHP version takes longer than expected: usually other dependencies are also being installed. Additionally, upgrading one specific version of PHP may also cause other installed versions of PHP to *also* be updated in one go, if the dependencies for that one version also apply to the other (newer) version(s) of PHP. It's a bit tricky to manage PHP versions via Homebrew, and even PHP Monitor may encounter some difficulties. From 5e7c7bc903bc77a6a15ba043577321a3746437d5 Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Tue, 25 Jul 2023 19:06:47 +0200 Subject: [PATCH 15/34] =?UTF-8?q?=F0=9F=94=A7=20Always=20use=20module=20na?= =?UTF-8?q?me=20`PHP=5FMonitor`?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- PHP Monitor.xcodeproj/project.pbxproj | 6 ++++++ phpmon/Modules/PHP Config Editor/UI/ConfigManagerView.swift | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/PHP Monitor.xcodeproj/project.pbxproj b/PHP Monitor.xcodeproj/project.pbxproj index beac171d..20c876df 100644 --- a/PHP Monitor.xcodeproj/project.pbxproj +++ b/PHP Monitor.xcodeproj/project.pbxproj @@ -3463,6 +3463,7 @@ MACOSX_DEPLOYMENT_TARGET = 12.4; MARKETING_VERSION = 6.1; PRODUCT_BUNDLE_IDENTIFIER = com.nicoverbruggen.phpmon; + PRODUCT_MODULE_NAME = PHP_Monitor; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; SWIFT_VERSION = 5.0; @@ -3493,6 +3494,7 @@ MACOSX_DEPLOYMENT_TARGET = 12.4; MARKETING_VERSION = 6.1; PRODUCT_BUNDLE_IDENTIFIER = com.nicoverbruggen.phpmon; + PRODUCT_MODULE_NAME = PHP_Monitor; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; SWIFT_VERSION = 5.0; @@ -3732,6 +3734,7 @@ MACOSX_DEPLOYMENT_TARGET = 12.4; MARKETING_VERSION = 6.1; PRODUCT_BUNDLE_IDENTIFIER = com.nicoverbruggen.phpmon.dev; + PRODUCT_MODULE_NAME = PHP_Monitor; PRODUCT_NAME = "$(TARGET_NAME) DEV"; PROVISIONING_PROFILE_SPECIFIER = ""; SWIFT_VERSION = 5.0; @@ -3847,6 +3850,7 @@ MACOSX_DEPLOYMENT_TARGET = 12.4; MARKETING_VERSION = 6.1; PRODUCT_BUNDLE_IDENTIFIER = com.nicoverbruggen.phpmon.dev; + PRODUCT_MODULE_NAME = PHP_Monitor; PRODUCT_NAME = "$(TARGET_NAME) DEV"; PROVISIONING_PROFILE_SPECIFIER = ""; SWIFT_VERSION = 5.0; @@ -3962,6 +3966,7 @@ MACOSX_DEPLOYMENT_TARGET = 12.4; MARKETING_VERSION = 6.1; PRODUCT_BUNDLE_IDENTIFIER = com.nicoverbruggen.phpmon.eap; + PRODUCT_MODULE_NAME = PHP_Monitor; PRODUCT_NAME = "$(TARGET_NAME) EAP"; PROVISIONING_PROFILE_SPECIFIER = ""; SWIFT_VERSION = 5.0; @@ -4142,6 +4147,7 @@ MACOSX_DEPLOYMENT_TARGET = 12.4; MARKETING_VERSION = 6.1; PRODUCT_BUNDLE_IDENTIFIER = com.nicoverbruggen.phpmon.eap; + PRODUCT_MODULE_NAME = PHP_Monitor; PRODUCT_NAME = "$(TARGET_NAME) EAP"; PROVISIONING_PROFILE_SPECIFIER = ""; SWIFT_VERSION = 5.0; diff --git a/phpmon/Modules/PHP Config Editor/UI/ConfigManagerView.swift b/phpmon/Modules/PHP Config Editor/UI/ConfigManagerView.swift index 015bc33a..299987bc 100644 --- a/phpmon/Modules/PHP Config Editor/UI/ConfigManagerView.swift +++ b/phpmon/Modules/PHP Config Editor/UI/ConfigManagerView.swift @@ -1,5 +1,5 @@ // -// LimitManager.swift +// ConfigManagerView.swift // PHP Monitor // // Created by Nico Verbruggen on 18/07/2023. From 3ef1a6e60d6d7f1819d9e2934794a7b1a5807bc5 Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Tue, 25 Jul 2023 19:24:04 +0200 Subject: [PATCH 16/34] =?UTF-8?q?=F0=9F=8F=97=EF=B8=8F=20Example=20of=20wh?= =?UTF-8?q?at=20a=20preference=20view=20might=20be?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- PHP Monitor.xcodeproj/project.pbxproj | 4 ++ .../PHP Config Editor/UI/ByteLimitView.swift | 57 +++++++++++++++++++ 2 files changed, 61 insertions(+) create mode 100644 phpmon/Modules/PHP Config Editor/UI/ByteLimitView.swift diff --git a/PHP Monitor.xcodeproj/project.pbxproj b/PHP Monitor.xcodeproj/project.pbxproj index 20c876df..0222a0ba 100644 --- a/PHP Monitor.xcodeproj/project.pbxproj +++ b/PHP Monitor.xcodeproj/project.pbxproj @@ -712,6 +712,7 @@ C4D5576529C77CC5001A44CD /* PhpVersionManagerWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4D5576329C77CC5001A44CD /* PhpVersionManagerWindowController.swift */; }; C4D5576629C77CC5001A44CD /* PhpVersionManagerWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4D5576329C77CC5001A44CD /* PhpVersionManagerWindowController.swift */; }; C4D5576729C77CC5001A44CD /* PhpVersionManagerWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4D5576329C77CC5001A44CD /* PhpVersionManagerWindowController.swift */; }; + C4D5857C2A7038DB00DDBB63 /* ByteLimitView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4D5857B2A7038DB00DDBB63 /* ByteLimitView.swift */; }; C4D5CFCA27E0F9CD00035329 /* NginxConfigurationFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4D5CFC927E0F9CD00035329 /* NginxConfigurationFile.swift */; }; C4D5CFCB27E0F9CD00035329 /* NginxConfigurationFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4D5CFC927E0F9CD00035329 /* NginxConfigurationFile.swift */; }; C4D8016622B1584700C6DA1B /* Startup.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4D8016522B1584700C6DA1B /* Startup.swift */; }; @@ -1052,6 +1053,7 @@ C4D36619291173EA006BD146 /* DictionaryExtension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DictionaryExtension.swift; sourceTree = ""; }; C4D4CB3629C109CF00DB9F93 /* InternalSwitcher+Valet.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "InternalSwitcher+Valet.swift"; sourceTree = ""; }; C4D5576329C77CC5001A44CD /* PhpVersionManagerWindowController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhpVersionManagerWindowController.swift; sourceTree = ""; }; + C4D5857B2A7038DB00DDBB63 /* ByteLimitView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ByteLimitView.swift; sourceTree = ""; }; C4D5CFC927E0F9CD00035329 /* NginxConfigurationFile.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NginxConfigurationFile.swift; sourceTree = ""; }; C4D8016522B1584700C6DA1B /* Startup.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Startup.swift; sourceTree = ""; }; C4D89BC52783C99400A02B68 /* ComposerJson.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ComposerJson.swift; sourceTree = ""; }; @@ -1483,6 +1485,7 @@ isa = PBXGroup; children = ( C44DFA7B2A67043000B98ED5 /* ConfigManagerView.swift */, + C4D5857B2A7038DB00DDBB63 /* ByteLimitView.swift */, ); path = UI; sourceTree = ""; @@ -2468,6 +2471,7 @@ 03E36FE728D9219000636F7F /* ActiveShell.swift in Sources */, C4D9ADBF277610E1007277F4 /* PhpSwitcher.swift in Sources */, C45E76142854A65300B4FE0C /* ServicesManager.swift in Sources */, + C4D5857C2A7038DB00DDBB63 /* ByteLimitView.swift in Sources */, C4D4CB3729C109CF00DB9F93 /* InternalSwitcher+Valet.swift in Sources */, C46EBC4728DB9644007ACC74 /* RealShell.swift in Sources */, C4068CAA27B0890D00544CD5 /* MenuBarIcons.swift in Sources */, diff --git a/phpmon/Modules/PHP Config Editor/UI/ByteLimitView.swift b/phpmon/Modules/PHP Config Editor/UI/ByteLimitView.swift new file mode 100644 index 00000000..042a325b --- /dev/null +++ b/phpmon/Modules/PHP Config Editor/UI/ByteLimitView.swift @@ -0,0 +1,57 @@ +// +// ByteLimitView.swift +// PHP Monitor +// +// Created by Nico Verbruggen on 25/07/2023. +// Copyright © 2023 Nico Verbruggen. All rights reserved. +// + +import SwiftUI + +struct PreferenceContainer: View { + private var name: String = "Memory Limit" + private var description: String = "This is the maximum memory a given PHP script may consume." + private var controlView: some View = ByteLimitView() + + var body: some View { + VStack(alignment: .leading, spacing: 10) { + HStack(spacing: 50) { + Text(self.name).bold() + controlView + } + .frame(width: 300) + Text(self.description).font(.subheadline) + } + .padding(10) + } +} + +struct ByteLimitView: View { + @State private var selection = "256 MB" + + let colors = [ + "128 MB", + "256 MB", + "512 MB", + "1 GB", + "2 GB", + "Unlimited", + "Other" + ] + + var body: some View { + Picker("Limit Name", selection: $selection) { + ForEach(colors, id: \.self) { + Text($0) + } + } + .labelsHidden() + .pickerStyle(.menu) + } +} + +struct ByteLimitView_Previews: PreviewProvider { + static var previews: some View { + PreferenceContainer() + } +} From ae6736102a0a852aefb1666f2eee30ce484654a3 Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Tue, 25 Jul 2023 19:53:37 +0200 Subject: [PATCH 17/34] =?UTF-8?q?=F0=9F=8F=97=EF=B8=8F=20Further=20experim?= =?UTF-8?q?ents=20with=20SwiftUI?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../PHP Config Editor/UI/ByteLimitView.swift | 9 ++--- .../UI/ConfigManagerView.swift | 33 ++++++++++++++++--- phpmon/en.lproj/Localizable.strings | 5 +++ 3 files changed, 39 insertions(+), 8 deletions(-) diff --git a/phpmon/Modules/PHP Config Editor/UI/ByteLimitView.swift b/phpmon/Modules/PHP Config Editor/UI/ByteLimitView.swift index 042a325b..520c682f 100644 --- a/phpmon/Modules/PHP Config Editor/UI/ByteLimitView.swift +++ b/phpmon/Modules/PHP Config Editor/UI/ByteLimitView.swift @@ -15,12 +15,13 @@ struct PreferenceContainer: View { var body: some View { VStack(alignment: .leading, spacing: 10) { - HStack(spacing: 50) { + HStack(alignment: .top, spacing: 50) { Text(self.name).bold() - controlView + VStack(alignment: .leading) { + controlView + Text(self.description).font(.subheadline) + } } - .frame(width: 300) - Text(self.description).font(.subheadline) } .padding(10) } diff --git a/phpmon/Modules/PHP Config Editor/UI/ConfigManagerView.swift b/phpmon/Modules/PHP Config Editor/UI/ConfigManagerView.swift index 299987bc..f39cd974 100644 --- a/phpmon/Modules/PHP Config Editor/UI/ConfigManagerView.swift +++ b/phpmon/Modules/PHP Config Editor/UI/ConfigManagerView.swift @@ -19,17 +19,42 @@ struct ConfigManagerView: View { .foregroundColor(Color.blue) .padding(12) VStack(alignment: .leading, spacing: 5) { - Text("config_manager.description".localizedForSwiftUI) + Text("confman.title".localizedForSwiftUI) + .bold() .font(.system(size: 12)) .frame(maxWidth: .infinity, alignment: .leading) - Text("config_manager.disclaimer".localizedForSwiftUI) + Text("confman.description".localizedForSwiftUI) .font(.system(size: 12)) - .frame(maxWidth: .infinity, alignment: .leading) + .fixedSize(horizontal: false, vertical: true) + .scaledToFit() + .lineLimit(4) } } .padding(10) Divider() + + VStack(spacing: 5) { + PreferenceContainer() + // PreferenceContainer() + // PreferenceContainer() + Divider() + HStack() { + Button("Close", action: { + + }) + Spacer() + Button("Restart PHP-FPM", action: { + + }) + } + .padding(10) + .frame( + minWidth: 0, + maxWidth: .infinity, + alignment: .topLeading + ) + } } } } @@ -37,7 +62,7 @@ struct ConfigManagerView: View { struct ConfigManagerView_Previews: PreviewProvider { static var previews: some View { ConfigManagerView() - .frame(width: 600, height: 480) + // .frame(width: 600, height: 480) .previewDisplayName("Config Manager") } } diff --git a/phpmon/en.lproj/Localizable.strings b/phpmon/en.lproj/Localizable.strings index b4629682..e5d7730c 100644 --- a/phpmon/en.lproj/Localizable.strings +++ b/phpmon/en.lproj/Localizable.strings @@ -81,6 +81,11 @@ "mi_xdebug_actions" = "Actions"; "mi_xdebug_disable_all" = "Disable All Modes"; +// CONFMAN + +"confman.title" = "PHP Config Editor"; +"confman.description" = "This utility lets you customize your PHP installation with ease. Changes are automatically applied as you change your configuration values."; + // PHPMAN "phpman.busy.title" = "Checking for updates!"; From fc68e3745893b19d8efce107bec67c3e7e5e7c85 Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Sat, 29 Jul 2023 20:40:55 +0200 Subject: [PATCH 18/34] =?UTF-8?q?=F0=9F=8C=90=20Updated=20translations?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Portuguese translations provided by @joseborges --- PHP Monitor.xcodeproj/project.pbxproj | 3 + .../xcschemes/PHP Monitor DEV.xcscheme | 1 + phpmon/pt-PT.lproj/Localizable.strings | 779 ++++++++++++++++++ 3 files changed, 783 insertions(+) create mode 100644 phpmon/pt-PT.lproj/Localizable.strings diff --git a/PHP Monitor.xcodeproj/project.pbxproj b/PHP Monitor.xcodeproj/project.pbxproj index 0222a0ba..0412732f 100644 --- a/PHP Monitor.xcodeproj/project.pbxproj +++ b/PHP Monitor.xcodeproj/project.pbxproj @@ -959,6 +959,7 @@ C45D654B29F52F74004C28F9 /* BrewPermissionFixer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BrewPermissionFixer.swift; sourceTree = ""; }; C45E2A76291992DA005C7CFD /* FeatureTestCase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FeatureTestCase.swift; sourceTree = ""; }; C45E76132854A65300B4FE0C /* ServicesManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ServicesManager.swift; sourceTree = ""; }; + C4622F572A7593CB0016F8FB /* pt-PT */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "pt-PT"; path = "pt-PT.lproj/Localizable.strings"; sourceTree = ""; }; C463E37F284930EE00422731 /* PresetHelper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PresetHelper.swift; sourceTree = ""; }; C464ADAB275A7A3F003FCD53 /* DomainListWindowController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DomainListWindowController.swift; sourceTree = ""; }; C464ADAE275A7A69003FCD53 /* DomainListVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DomainListVC.swift; sourceTree = ""; }; @@ -2223,6 +2224,7 @@ vi, nl, de, + "pt-PT", ); mainGroup = C41C1B2A22B0097F00E7CF16; packageReferences = ( @@ -3179,6 +3181,7 @@ C4FC8D432A49816C00FBBD16 /* vi */, C4FC8D442A4981BC00FBBD16 /* nl */, C4DD662A2A4A1B4E00D6A731 /* de */, + C4622F572A7593CB0016F8FB /* pt-PT */, ); name = Localizable.strings; sourceTree = ""; diff --git a/PHP Monitor.xcodeproj/xcshareddata/xcschemes/PHP Monitor DEV.xcscheme b/PHP Monitor.xcodeproj/xcshareddata/xcschemes/PHP Monitor DEV.xcscheme index 2e915faa..02e79b09 100644 --- a/PHP Monitor.xcodeproj/xcshareddata/xcschemes/PHP Monitor DEV.xcscheme +++ b/PHP Monitor.xcodeproj/xcshareddata/xcschemes/PHP Monitor DEV.xcscheme @@ -67,6 +67,7 @@ buildConfiguration = "Debug.Dev" selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" + language = "pt-PT" launchStyle = "0" useCustomWorkingDirectory = "NO" ignoresPersistentStateOnLaunch = "NO" diff --git a/phpmon/pt-PT.lproj/Localizable.strings b/phpmon/pt-PT.lproj/Localizable.strings new file mode 100644 index 00000000..4d92433b --- /dev/null +++ b/phpmon/pt-PT.lproj/Localizable.strings @@ -0,0 +1,779 @@ +// MENU ITEMS (MI) + +"mi_busy" = "O PHP Monitor está ocupado..."; +"mi_unsure" = "Não temos a certeza de que versão PHP está a executar."; +"mi_php_version" = "Versão global: PHP"; +"mi_php_switch" = "Mudar para PHP"; +"mi_php_unsupported" = "Algumas versões PHP instaladas não são exibidas."; +"mi_php_broken_1" = "Ups! Parece que a sua instalação PHP está danificada..."; +"mi_php_broken_2" = "Tente executar `php -v` no seu terminal."; +"mi_php_broken_3" = "Pode tentar mudar para outra versão."; +"mi_php_broken_4" = "Executar `brew reinstall php` (ou versão outra PHP equivalente) pode ajudar."; +"mi_no_php_linked" = "Nenhuma versão PHP associada!"; +"mi_fix_php_link" = "Corrigir automáticamente..."; +"mi_no_php_linked_explain" = "O que é isto?"; +"mi_php_version_manager" = "Gestor de versões PHP..."; + +"mi_diagnostics" = "Diagnóstico"; +"mi_active_services" = "Serviços ativos"; +"mi_restart_php_fpm" = "Reiniciar serviço: PHP"; +"mi_restart_nginx" = "Reiniciar serviço: nginx"; +"mi_restart_dnsmasq" = "Reiniciar serviço: dnsmasq"; +"mi_manage_services" = "Gerir serviços"; +"mi_restart_valet_services" = "Reiniciar serviços Laravel Valet"; +"mi_stop_valet_services" = "Parar serviços Laravel Valet"; + +"mi_fix_my_valet" = "Corrigir Laravel Valet..."; +"mi_fix_my_valet_tooltip" = "Tem problemas com a sua instalação Laravel Valet? Experimente as correções automáticas do PHP Monitor que o farão voltar a funcionar em pouco tempo!"; +"mi_fix_brew_permissions" = "Restaurar permissões Homebrew..."; +"mi_fix_brew_permissions_tooltip" = "Tem problemas de permissão ao executar 'brew upgrade'? PHP Monitor para o resgate!"; + +"mi_php_refresh" = "Atualizar informações"; + +"mi_configuration" = "Configuração PHP"; +"mi_limits" = "Configuração de limites"; +"mi_memory_limit" = "Limite de memória"; +"mi_post_max_size" = "POST máximo"; +"mi_upload_max_filesize" = "Upload máximo"; +"mi_manual_actions" = "Ações manuais"; +"mi_services" = "Serviços"; +"mi_other" = "Primeiros socorros e Serviços"; +"mi_first_aid" = "Primeiros socorros"; + +"mi_xdebug_mode" = "Gerir Xdebug"; + +"mi_composer" = "Composer"; +"mi_valet_config" = "Localizar diretoria do Laravel Valet (.config/valet)"; +"mi_php_config" = "Localizar o ficheiro de configuração do PHP (php.ini)"; +"mi_phpmon_config" = "Localizar diretoria do PHP Monitor (.config/phpmon)"; +"mi_global_composer" = "Localizar o ficheiro do Composer global (.composer)"; +"mi_phpinfo" = "Mostrar configuração atual (phpinfo)"; +"mi_update_global_composer" = "Atualizar dependências globais do Composer..."; +"mi_detected_extensions" = "Extensões detetadas"; +"mi_no_extensions_detected" = "Nenhuma extensão adicional detetada."; + +"mi_php_doctor" = "PHP Doctor"; +"mi_fa_php_doctor" = "Abrir PHP Doctor..."; +"mi_recommendations_count" = "%i problemas(s) detetados!"; +"mi_view_recommendations" = "Ver recomendações..."; + +"mi_valet" = "Laravel Valet"; +"mi_domain_list" = "Ver lista de domínios..."; + +"mi_preferences" = "Preferências..."; +"mi_donate" = "Doar..."; +"mi_check_for_updates" = "Verificar atualizações..."; +"mi_lite_mode" = "Sobre o modo autônomo..."; +"mi_quit" = "Sair do PHP Monitor"; +"mi_about" = "Sobre o PHP Monitor"; + +"mi_presets_title" = "Predefinições de configuração"; +"mi_apply_presets_title" = "Aplicar predefinições de configuração"; +"mi_revert_to_prev_config" = "Reverter para a configuração anterior..."; +"mi_profiles_loaded" = "%i perfis carregados do ficheiro de configuração"; + +"mi_no_presets" = "Sem predefinições disponíveis."; +"mi_set_up_presets" = "Saiba mais sobre predefinições..."; + +"mi_view_onboarding" = "Guia de boas-vindas..."; + +"mi_xdebug_available_modes" = "Modos disponíveis"; +"mi_xdebug_actions" = "Ações"; +"mi_xdebug_disable_all" = "Desativar todos os modos"; + +// PHPMAN + +"phpman.busy.title" = "Procurando atualizações!"; +"phpman.busy.description.outdated" = "Verificando se alguma versão do PHP está desatualizada..."; + +"phpman.version.broken" = "Esta versão parece estar danificada, você pode tentar repara-la."; +"phpman.version.has_update" = "Versão %@ instalada, %@ disponível."; +"phpman.version.installed" = "Versão %@ atualmente instalada."; +"phpman.version.available_for_installation" = "Esta versão pode ser instalada."; +"phpman.buttons.uninstall" = "Desinstalar"; +"phpman.buttons.install" = "Instalar"; +"phpman.buttons.update" = "Atualizar"; +"phpman.buttons.repair" = "Reparar"; + +"phpman.title" = "PHP Version Manager"; +"phpman.description" = "**PHP Version Manager** permite instalar, atualizar e excluir diferentes versões do PHP via Homebrew sem precisar executar manualmente os comandos no seu terminal."; +"phpman.disclaimer" = "Por favor, note que instalar ou atualizar versões do PHP pode fazer com que outros pacotes Homebrew também sejam atualizados. A maioria das fases da instalação geralmente levam algum tempo, por isso seja paciente enquanto o Homebrew faz o seu trabalho."; +"phpman.refresh.button" = "Procurar atualizações"; +"phpman.refresh.button.description" = "Você pode premir o botão de atualização para verificar se há atualizações disponíveis para as versões do PHP instaladas."; + +"phpman.has_updates.description" = "Estão disponiveis uma ou mais atualizações. (Por favor, tenha em conta que o PHP Monitor instalará ou atualizará as versões do PHP em bloco, ou seja, atualizará todas as instalações PHP de uma só vez.)"; +"phpman.has_updates.button" = "Atualizar tudo"; + +"phpman.warnings.unsupported.title" = "A versão instalada do Homebrew pode causar problemas"; +"phpman.warnings.unsupported.desc" = "Nenhuma funcionalidade está desativada, mas alguns comandos podem não funcionar como esperado. Tem instalada a versão %@ do Homebrew. + +Atualmente, a versão 4 do Homebrew é a única versão suportada pelo o PHP Version Manager. Se você tiver a executar uma versão mais recente do Homebrew, talvez queira verificar se está disponivel uma versão mais recente do PHP Monitor."; + +"phpman.warnings.removal.title" = "Tem a certeza que deseja desinstalar %@?"; +"phpman.warnings.removal.desc" = "Por favor, tenha em conta que os ficheiros de configuração não serão removidos, pelo que poderá reinstalar mais tarde, se necessário. + +Poderá ser-lhe solicitada a sua palavra-passe durante o processo de desinstalação caso as permissões do ficheiro não permitirem a remoção."; +"phpman.warnings.removal.button" = "Desinstalar"; + +"phpman.failures.install.title" = "Falha na instalação!"; +"phpman.failures.install.desc" = "Infelizmente, a operação devolveu um código de erro. Você pode pensar que as fórmulas Homebrew foram corretamente instaladas ou atualizadas. Infelizmente, não posso fazer grande coisa sobre o assunto. Por favor, verifique abaixo as últimas mensagens do Homebrew para mais informações sobre o que aconteceu: + +%@"; + +"phpman.action_prevented_busy.title" = "PHP Monitor está ocupado."; +"phpman.action_prevented_busy.desc" = "PHP Monitor está a processar algo, como alternar versões do PHP. Para garantir que o seu sistema não fica instável, tem que esperar até que o PHP Monitor esteja disponivel de novo para tentar novamente."; + +"phpman.uninstall_prevented.title" = "Não é possível desinstalar a versão atualmente vinculada do PHP via PHP Monitor."; +"phpman.uninstall_prevented.desc" = "Para evitar problemas com o PHP Monitor ou mais falhas, não é possível desinstalar a versão PHP atualmente vinculada através desta interface. Você pode alternar versões e tentar novamente, ou desinstalar esta versão manualmente através do seu terminal.\n\nTenha em conta que o PHP Monitor pode falhar se você desinstalar a versão PHP atualmente vinculada."; + +"phpman.failures.uninstall.title" = "Falha na desinstalação!"; +"phpman.failures.uninstall.desc" = "Infelizmente, a desinstalação automática falhou. Pode tentar executar manualmente este comando: '%@' e verificar o que correu mal. Lembre-se de reiniciar o PHP Monitor (ou pressione o botão de atualização) quando fizer isso."; + +"phpman.unlinked.title" = "Nenhuma das versões PHP instaladas no seu sistema está atualmente vinculada."; +"phpman.unlinked.desc" = "Provavelmente ainda tem alguma versão do PHP instalada mas nenhuma está vinculada."; +"phpman.unlinked.detail" = "Sem, pelo menos, uma versão PHP vinculada, o binário 'php' não está acessível no seu sistema e você não pode executar nenhum script PHP sem explicitamente fazer parte do PATH. Você pode tentar que o PHP Monitor resolva automaticamente este problema (escolha 'Corrigir automáticamente' no menu principal), ou tente corrigir você mesmo executando no seu terminal 'brew link php --force'."; + +"phpman.operations.repairing" = "Reparação de instalações..."; +"phpman.operations.updating" = "Instalando atualizações..."; +"phpman.operations.installing" = "Instalando %@..."; + +"phpman.steps.fetching" = "Transferindo..."; +"phpman.steps.downloading" = "Transferindo dados do pacote..."; +"phpman.steps.installing" = "Instalando dados do pacote..."; +"phpman.steps.pouring" = "Expandindo... Este processo pode demorar..."; +"phpman.steps.summary" = "Um pacote terminou de instalar..."; + +"phpman.services.loading" = "Carregando..."; +"phpman.services.not_installed" = "Um serviço necessário não está instalado."; +"phpman.services.error" = "Um serviço necessário está a devolver um estado de erro."; +"phpman.services.inative" = "Um serviço necessário não está em execução."; +"phpman.services.all_ok" = "Todos os serviços Laravel Valet estão OK."; + +// LITE MODE + +"lite_mode_explanation.title" = "Você está a executar o PHP Monitor no modo autônomo."; +"lite_mode_explanation.subtitle" = "O PHP Monitor tem funcionalidades adicionais que só são disponibilizadas quando tem instalado o Laravel Valet. Atualmente, o PHP Monitor, não conseguiu encontrar uma instalação vinculada do Laravel Valet no seu sistema, por esse motivo essas funcionalidades não se encontram disponíveis."; +"lite_mode_explanation.description" = "Para obter mais informações, recomendo verificar o README (acessível no GitHub), que explicará quais os passos necessários para instalar o Laravel Valet em conjunto com o PHP Monitor. Depois de instalar o Laravel Valet, e antes de sair do mono auntônomo tem que reiniciar o PHP Monitor."; + +// GENERIC + +"generic.ok" = "OK"; +"generic.cancel" = "Cancelar"; +"generic.retry" = "Tentar novamente"; +"generic.notice" = "Aviso"; + +// PRESET LOADING + +"preset_help_title" = "Trabalhando com predefinições de configuração"; +"preset_help_info" = "Você pode criar predefinições de configuração no ficheiro config.json, localizado na diretoria ~/.config/phpmon/config.json. Essas predefinições permitem aplicar um conjunto de valores de configuração num unico passo. É uma funcionalidade potente, mas que precisa ser configurada manualmente."; +"preset_help_desc" = "Após reiniciar o PHP Monitor, todas as predefinições encontradas no ficheiro serão carregadas. Se nenhuma predefinição for aplicada, o ficheiro provavelmente terá algum erro de parametrização.\n\nPode clicar no ponto de interrogação no alerta para visualizar o FAQ no GitHub, onde pode encontrar mais informações sobre esta funcionalidade, incluindo um exemplo de um ficheiro de configuração."; + +// MENU ITEMS (if window is open) + +"mm_add_folder_as_link" = "Adicionar diretoria como link..."; +"mm_reload_domain_list" = "Recarregar lista de domínios"; +"mm_find_in_domain_list" = "Pesquisar na lista de domínios"; + +// SITE LIST + +"domain_list.title" = "Domínios"; +"domain_list.subtitle" = ""; + +"domain_list.no_domains" = "Ainda não configurou nenhum domínio ou proxy."; +"domain_list.no_domains_for_search_query" = "Não há resultados para a sua pesquisa."; + +"domain_list.tooltips.isolated" = "Este domínio está isolado e usando PHP %@ em vez do PHP vinculado globalmente."; +"domain_list.tooltips.checkmark" = "Este domínio está sendo interpretado com uma versão do PHP compatível com este requisito (PHP %@). Clique na versão do PHP ao lado deste marcador para obter mais informações sobre como este requisito foi determinado."; + +"domain_list.alerts_isolation_failed.title" = "Ups! Isolamento de site não aplicado"; +"domain_list.alerts_isolation_failed.subtitle" = "Algo correu mal ao tentar alterar o estado de isolamento deste site. Se este for o seu site padrão, mas não estiver vinculado, recomendo vincular manualmente o site antes de configurar o isolamento."; +"domain_list.alerts_isolation_failed.desc" = "Para verificar o que está errado, pode tentar executar manualmente o seguinte comando no seu terminal: %@"; + +"domain_list.alerts_status_not_changed.title" = "Upps! Estado SSL não alterado"; +"domain_list.alerts_status_not_changed.desc" = "Algo correu mal. Tente executar manualmente o seguinte comando no seu terminal: %@"; + +"domain_list.alerts_status_changed.title" = "Estado SSL alterado"; +"domain_list.alerts_status_changed.desc" = "O domínio '%@' agora é %@."; +"domain_list.alerts_status_secure" = "seguro"; +"domain_list.alerts_status_unsecure" = "não seguro"; + +"domain_list.confirm_unlink" = "Tem certeza de que deseja desvincular '%@'?"; +"domain_list.confirm_unlink_desc" = "Nenhum ficheiro será removido. Pode voltar a vincular a diretoria, clicando no botão + e selecionar a diretoria original."; +"site_link.close" = "Fechar"; +"site_link.switch_to_php" = "Mudar para versão PHP %@"; + +"domain_list.confirm_unproxy" = "Tem a certeza de que deseja remover o proxy '%@'?"; +"domain_list.confirm_unproxy_desc" = "Pode voltar recriar o proxy clicando no botão +."; + +"domain_list.columns.secure" = "TLS"; +"domain_list.columns.domain" = "Domínio"; +"domain_list.columns.active" = "Ativo"; +"domain_list.columns.kind" = "Tipo"; +"domain_list.columns.project_type" = "Tipo de projeto"; + +// CHOOSE WHAT TO ADD + +"selection.title" = "Que tipo de domínio pretende configurar?"; +"selection.description" = "Links são usados para aceder a projetos diretamente. Se tiver uma diretoria Laravel, Symfony, WordPress, etc. com código, deverá criar um link e escolher a diretoria onde se encontra o seu código.\n \nSe precisar de um proxy para um container, pode, por exemplo, faze-lo para um nome de domínio específico. O que pode ser útil em combinação com Docker, por exemplo."; +"selection.create_link" = "Criar um link"; +"selection.create_proxy" = "Criar um proxy"; +"selection.cancel" = "Cancelar"; + +// ADD PROXY TO DOMAINS LIST + +"domain_list.add.set_up_proxy" = "Configurar um proxy"; +"domain_list.add.proxy_subject" = "Proxy (deve incluir protocolo e porta)"; +"domain_list.add.domain_name" = "Nome do domínio"; +"domain_list.add.create_proxy" = "Criar Proxy"; +"domain_list.add.proxy_available" = "%@ terá um proxy e estará disponível via: %@://%@.%@"; +"domain_list.add.proxy_https_warning" = "%@ terá um proxy e estará disponível via: %@://%@.%@. + +(!) IMPORTANTE: Este proxy pode não funcionar até adicionar manualmente `proxy_ssl_verify off;` ao ficheiro de configuração nginx para este domínio. É recomendável usar um domínio não seguro como proxy."; + +// ADD SITE TO DOMAINS LIST + +"domain_list.add.link_folder" = "Vincular uma diretoria"; +"domain_list.add.domain_name_placeholder" = "Digite um nome de domínio aqui"; +"domain_list.add.secure_after_creation" = "Proteger %@.%@ após a criação"; +"domain_list.add.secure_description" = "Proteger um domínio requer privilégios administrativos.\nPode ser solicitado que introduza a sua palavra-passe Touch ID."; +"domain_list.add.create_link" = "Criar link"; +"domain_list.add.cancel" = "Cancelar"; +"domain_list.add.folder_available" = "Este site estará disponível através do seguinte URL: %@://%@.%@"; + +"domain_list.add.empty_fields" = "Um ou mais campos estão vazios. Preencha todos os campos obrigatórios."; +"domain_list.add.errors.empty" = "Deve inserir um nome de domínio."; +"domain_list.add.errors.empty_proxy" = "Deve informar o proxy."; +"domain_list.add.errors.subject_invalid" = "O assunto que você escreveu não é válido.\nDeve incluir o protocolo e a porta."; +"domain_list.add.errors.already_exists" = "Já existe um link com esse nome."; + +// ADD SITE ERROR: FOLDER MISSING SINCE SELECTION + +"domain_list.alert.folder_missing.desc" = "A diretoria que selecionou parece já não existir. Deseja cancelar a adição desta diretoria? Se você moveu a diretoria, reponha-a e tente novamente."; +"domain_list.alert.folder_missing.title" = "Diretoria em falta!"; +"domain_list.alert.folder_missing.cancel" = "Cancelar link"; +"domain_list.alert.folder_missing.return" = "OK"; + +"domain_list.add.modal_description" = "Primeiro, selecione a diretoria a vincular."; + +// SITE LIST ACTIONS + +"domain_list.isolate" = "Alterar versão do PHP"; +"domain_list.site_isolation" = "Isolamento do site"; +"domain_list.remove_isolation" = "Remover isolamento"; +"domain_list.always_use_php" = "Usar sempre PHP %@"; +"domain_list.isolation_unavailable" = "Isolamento não suportado (no Laravel Valet 2)"; + +"domain_list.actions" = "Ações"; +"domain_list.unlink" = "Desvincular diretoria"; +"domain_list.secure" = "Domínio seguro"; +"domain_list.unsecure" = "Domínio não seguro"; +"domain_list.open_in_finder" = "Abrir no Finder"; +"domain_list.open_in_browser" = "Abrir no navegador"; +"domain_list.open_in_terminal" = "Abrir no terminal"; +"domain_list.detected_apps" = "Aplicações detectadas"; +"domain_list.system_apps" = "Aplicações de sistema"; +"domain_list.unproxy" = "Remover Proxy"; +"domain_list.use_in_terminal" = "Abrir PHP %@ no terminal"; + +"domain_list.alerts_isolated_php_terminal.title" = "Pode usar o PHP %@ mum terminal específico!"; +"domain_list.alerts_isolated_php_terminal.subtitle" = "Infelizmente, o PHP Monitor não consegue abrir um terminal (e digitar os comandos apropriados). Terá que editar manualmente o script para usar esta versão específica do PHP. Para isso, deve digitar o seguinte commando no terminal que preferir: + +. PM%@ + +Isso editará o script auxiliar gerado pelo PHP Monitor e permitirá usar o PHP %@ no terminal usado. + +Esta ação não tem efeito nos restantes terminais, apenas para a sessão do terminal específico que está a usar. (ou seja, se tiver várias guias no seu terminal, as outras guias ou janelas não serão afetadas por este commando.)"; +"domain_list.alerts_isolated_php_terminal.desc" = "Se não funcionar, tente o PHP Doctor através do menu Primeiros Socorros do PHP Monitor. Mais informações sobre esta funcionalidade podem ser encontradas no GitHub (na wiki do repositório do PHP Monitor). Este alerta foi incluído para melhorar a visibilidade desta funcionalidade."; + +"domain_list.warning.spaces" = "Aviso! Este site tem um espaço no nome da diretoria.\nO site não poderá ser acedido pelo navegador."; + +"domain_list.alert.invalid_folder_name" = "Nome de diretoria inválido"; +"domain_list.alert.invalid_folder_name_desc" = "Esta diretoria não pôde ser resolvida para um URL válido. Normalmente isso acontece quando há um espaço no nome da diretoria. Renomeie a diretoria, recarregue a lista de sites e tente novamente."; + +"domain_list.columns.tls" = "TLS"; +"domain_list.columns.domain" = "Domínio"; +"domain_list.columns.php" = "PHP"; +"domain_list.columns.type" = "Tipo"; +"domain_list.columns.kind" = "Tipo"; + +// DRIVERS + +"driver.not_detected" = "Outros"; + +// PRESET + +"preset.extension" = "%i extensão"; +"preset.extensions" = "%i extensões"; +"preset.preference" = "%i preferência"; +"preset.preferences" = "%i preferências"; + +// EDITORS + +"editors.alert.try_again" = "Tentar novamente"; +"editors.alert.cancel" = "Cancelar"; + +// PREFERENCES + +"prefs.title" = "PHP Monitor"; +"prefs.subtitle" = "Preferências"; +"prefs.close" = "Fechar"; + +"prefs.tabs.general" = "Geral"; +"prefs.tabs.appearance" = "Aparência"; +"prefs.tabs.visibility" = "Visibilidade"; +"prefs.tabs.notifications" = "Notificações"; + +"prefs.global_shortcut" = "Atalho global:"; +"prefs.dynamic_icon" = "Ícone Dinâmico:"; +"prefs.dynamic_icon" = "Tipo de ícone:"; +"prefs.info_density" = "Densidade da informação:"; +"prefs.services" = "Serviços:"; +"prefs.switcher" = "Alternador:"; +"prefs.php_doctor" = "PHP Doctor:"; +"prefs.integrations" = "Integrações:"; +"prefs.updates" = "Atualizações:"; +"prefs.notifications" = "Notificações:"; +"prefs.warnings" = "Avisos:"; +"prefs.menu_contents" = "Funcionalidades do Menu:"; +"prefs.startup" = "Arranque:"; + +"prefs.auto_start_desc" = "Iniciar automaticamente o PHP Monitor após autenticar-se no seu Mac."; +"prefs.auto_start_title" = "Iniciar o PHP Monitor no login"; + +"prefs.icon_options.php" = "Exibir ícone do PHP"; +"prefs.icon_options.elephant" = "Exibir o ícone do elefante"; +"prefs.icon_options.none" = "Não exibir ícone"; + +"prefs.icon_options_desc" = "Esta opção decide qual o ícone que será exibido ao lado do número da versão do PHP vinculada. Se a opção Ícone Dinâmico estiver desativada, este parametro não terá efeito."; + +"prefs.auto_restart_services_title" = "Reinicialização automática do PHP-FPM"; +"prefs.auto_restart_services_desc" = "Quando ativa esta opção, será reiniciado automaticamente o PHP-FPM quando ativar ou inativar uma extensão. Embora ligeiramente mais lento quando ativa, esta opção tem a vantagem de mudar o estado da extensão imediatamente para todos os sites configurados, sem necessidade de reiniciar o PHP-FPM manualmente."; + +"prefs.dynamic_icon_title" = "Exibir ícone dinâmico na barra de menus"; +"prefs.dynamic_icon_desc" = "Se inativar esta opção, o ícone do camião estará sempre visível. Se ativar, exibirá o número da versão principal do PHP vinculado."; + +"prefs.display_full_php_version" = "Exibir a versão completa do PHP em todos os sites"; +"prefs.display_full_php_version_desc" = "Exibir a versão completa, em vez da versão principal, exibida na barra de menus e no menu suspenso. (Pode não ser desejável em resoluções menores, pelo que, esta opção está inativa por padrão.)"; + +"prefs.auto_composer_update_title" = "Atualizar dependências globais automaticamente"; +"prefs.auto_composer_update_desc" = "Quando ativa, solicitará automaticamente ao Composer para executar `composer global update` sempre que alternar entre diferentes versões do PHP. Poderá ver as alterações efetuadas ou, caso existam, quais os erros."; + +"prefs.open_protocol_title" = "Permitir integrações de terceiros"; +"prefs.open_protocol_desc" = "Quando ativa, permitirá que a interação com aplicativos de terceiros funcione (por exemplo, Alfred, Raycast). Se inativa, o PHP Monitor irá continuar receber os comandos, mas ignora-os."; + +"prefs.automatic_update_check_title" = "Verificar atualizações automaticamente"; +"prefs.automatic_update_check_desc" = "Quando ativa, esta opção faz com que o PHP Monitor verifique automaticamente se há uma versão mais recente disponível notificando-o se for o caso."; + +"prefs.php_doctor_suggestions_title" = "Exibir sempre recomendações"; +"prefs.php_doctor_suggestions_desc" = "Se inativa, nenhuma sugestão do PHP Doctor será visível no menu do PHP Monitor. Lembre-se de que o só será visível se existirem recomendações."; + +"prefs.shortcut_set" = "Definir atalho global"; +"prefs.shortcut_listening" = ""; +"prefs.shortcut_clear" = "Limpar"; +"prefs.shortcut_desc" = "Se for configurada uma combinação de atalho global, pode alterar o PHP Monitor onde quer que esteja, pressionando a combinação de teclas definida. (Para cancelar a definição de tecla de atalho pressione a barra de espaço.)"; + +"prefs.notify_about_version_change_desc" = "Exibir uma notificação sempre que a versão vinculada do PHP for alterada."; +"prefs.notify_about_version_change" = "Será notificado sempre que existe uma troca de versão do PHP"; + +"prefs.notify_about_php_fpm_change_desc" = "Exibir uma notificação sempre que o processo PHP-FPM ativo for reiniciado devido a alteração de configuração."; +"prefs.notify_about_php_fpm_change" = "Será notificado sobre a reinicialização do PHP-FPM"; + +"prefs.notify_about_services_desc" = "Exibir uma notificação sempre que qualquer um dos serviços do Homebrew (instalado e configurado pelo Laravel Valet) for reiniciado ou interrompido."; +"prefs.notify_about_services" = "Será notificado sobre a alteração do estado dos serviços respectivos"; + +"prefs.notify_about_presets_desc" = "Exibir uma notificação sempre que uma predefinição foi aplicada ou revertida com sucesso."; +"prefs.notify_about_presets" = "Será notificado sobre predefinições aplicadas"; + +"prefs.notify_about_secure_status_desc" = "Exibir uma notificação quando um domínio é protegido ou não."; +"prefs.notify_about_secure_status" = "Será notificado sobre estado seguro/não seguro"; + +"prefs.notify_about_composer_success_desc" = "Exibir uma notificação quando a configuração global do Composer foi atualizada com sucesso."; +"prefs.notify_about_composer_success" = "Será notificado sobre qualquer atualização global do Composer"; + +"prefs.warn_about_non_standard_tld_desc" = "Se usar um TLD não padrão, talvez não queira receber notificações repetidas acerca disso."; +"prefs.warn_about_non_standard_tld" = "Avisar acerca de TLD fora do padrão"; + +"prefs.display_global_version_switcher_desc" = "Se inativo, não poderá alterar a versão do PHP vinculada globalmente através do menu principal."; +"prefs.display_global_version_switcher" = "Gestor de versões PHP"; + +"prefs.display_services_manager_desc" = "Se inativo, não poderá ver, iniciar ou parar serviços individuais. (Se algum serviço estiver inativo, não poderá facilmente validar essa situação.)"; +"prefs.display_services_manager" = "Gestor de Serviços"; + +"prefs.display_valet_integration_desc" = "Se inativo, não poderá localizar a diretoria principal do Laravel Valet ou abrir a lista de domínios."; +"prefs.display_valet_integration" = "Integração com Laravel Valet"; + +"prefs.display_php_config_finder_desc" = "Se inativo, não conseguirá localizar facilmente os seus ficheiros de configuração do PHP e/ou gerar um phpinfo()."; +"prefs.display_php_config_finder" = "Localizador de configuração do PHP"; + +"prefs.display_composer_toolkit_desc" = "Se inativo, não poderá invocar o Composer através do menu principal. A atualização automática do Composer após a troca de preferências não é afetada por esta alteração."; +"prefs.display_composer_toolkit" = "Composer Tool Kit"; + +"prefs.display_limits_widget_desc" = "Se inativo, não poderá ver o widget de limites (memória, POST, upload) no menu principal."; +"prefs.display_limits_widget" = "Widget de limites"; + +"prefs.display_extensions_desc" = "Se inativo, não poderá alternar facilmente entre extensões no menu principal."; +"prefs.display_extensions" = "Extensões"; + +"prefs.display_presets_desc" = "Se inativo, não poderá aplicar ou reverter as predefinições de configuração do PHP."; +"prefs.display_presets" = "Predefinições"; + +"prefs.display_misc_desc" = "Se inativo, não poderá aceder ao menu Primeiros Socorros e Serviços."; +"prefs.display_misc" = "Menu de primeiros socorros e serviços"; + +// NOTIFICATIONS + +"notification.version_changed_title" = "PHP %@ ativo"; +"notification.version_changed_desc" = "O PHP Monitor mudou para o PHP %@."; + +"notification.php_fpm_restarted" = "PHP-FPM reiniciado automaticamente"; +"notification.php_fpm_restarted_desc" = "Você alterou uma extensão, pelo que o PHP-FPM foi reiniciado automaticamente."; + +"notification.services_stopped" = "Serviços de Laravel Valet interrompidos"; +"notification.services_stopped_desc" = "Todos os serviços foram interrompidos com sucesso."; + +"notification.services_restarted" = "Serviços de Laravel Valet reiniciados"; +"notification.services_restarted_desc" = "Todos os serviços foram reiniciados com sucesso."; + +"notification.preset_applied_title" = "Predefinição aplicada"; +"notification.preset_applied_desc" = "A predefinição '%@' foi aplicada com sucesso."; + +"notification.preset_reverted_title" = "Predefinição revertida"; +"notification.preset_reverted_desc" = "A última predefinição que aplicou foi anulada. A sua predefinição anterior foi resposta."; + +"notification.phpmon_updated.title" = "O PHP Monitor foi atualizado!"; +"notification.phpmon_updated.desc" = "Agora está a usar o PHP Monitor v%@. Obrigado por se manter atualizado!"; +"notification.phpmon_updated_dev.desc" = "PHP Monitor v%@ (compilação %@) está instalado e ativo."; + +// Composer Update +"alert.composer_missing.title" = "Composer não encontrado!"; +"alert.composer_missing.subtitle" = "O PHP Monitor não encontrou o Composer. Verifique se o Composer está instalado e tente novamente."; +"alert.composer_missing.desc" = "O PHP Monitor assume que o Composer está localizado em: + +• `/usr/local/bin/composer` +• `/opt/homebrew/bin/composer` + +Certifique-se que está instalado numa destas diretorias ou crie um link simbólico se tiver o Composer instalado em outra diretoria."; + +"alert.composer_progress.title" = "Atualizando dependências globais..."; +"alert.composer_progress.info" = "Pode ver o progresso no terminal abaixo."; + +"alert.composer_failure.title" = "Algo correu mal!"; +"alert.composer_failure.info" = "As suas dependências globais do Composer não puderam ser atualizadas. +Pode encontrar mais informações no terminal abaixo. Vai ter que tentar resolver o +problema manualmente, utilizando o seu Terminal (o terminal abaixo é apenas de visualização)."; + +"alert.composer_success.title" = "A atualização do Composer foi concluída!"; +"alert.composer_success.info" = "As suas dependências globais do Composer foram atualizadas com sucesso."; + +// Composer Version + +"alert.composer_php_isolated.desc" = "Este site foi isolado, o que significa que o Laravel Valet disponibiliza o PHP %@ especificamente para este site. A versão global do PHP é %@."; +"alert.composer_php_requirement.title" = "'%@' requer o PHP %@."; +"alert.composer_php_requirement.unable_to_determine" = "Não foi possível determinar a versão PHP necessária"; +"alert.composer_php_requirement.type.unknown" = "O PHP Monitor não conseguiu determinar qual versão do PHP necessária para este domínio. A restrição pode ser determinada se você tiver um ficheiro `composer.json` ou `.valetphprc` na diretoria do projeto."; +"alert.composer_php_requirement.type.require" = "A versão necessária do PHP foi determinada pela verificação do campo `require` no ficheiro `composer.json` quando a lista de sites foi atualizada a última vez."; +"alert.composer_php_requirement.type.platform" = "A versão necessária do PHP foi determinada verificando o campo `platform` no ficheiro `composer.json` quando a lista de sites foi atualizada a última vez."; +"alert.composer_php_requirement.type.valetphprc" = "A versão necessária do PHP foi determinada pela verificação do ficheiro .valetphprc na diretoria do projeto."; +"alert.composer_php_requirement.type.valetrc" = "A versão necessária do PHP foi determinada verificando o ficheiro .valetrc na diretoria do projeto."; +"alert.unable_to_determine_is_fine" = "Se tem um projeto simples, pode não haver uma versão específica do PHP definida como requisito. Nesse caso, pode ignorar este aviso."; +"alert.php_version_ideal" = "A versão atualmente vinculada do PHP é a ideal para este site."; +"alert.php_version_incorrect" = "A versão atualmente vinculada do PHP não corresponde à restrição necessária definida para este site."; +"alert.php_suggestions" = "Pode haver uma versão diferente do PHP que esteja mais próxima da restrição."; + +// Suggest Fix My Valet +"alert.php_switch_failed.title" = "A mudança para o PHP %@ parece ter falhado."; +"alert.php_switch_failed.info" = "O PHP Monitor detectou que o PHP %@ não está ativo após concluir o procedimento de mudança de versão. Você pode tentar executar \"Corrigir Laravel Valet\" e tentar de novo. Deseja tentar?"; +"alert.php_switch_failed.desc" = "Em primeiro lugar, deve tentar \"Corrigir Laravel Valet\" caso ainda não tenha feito. atualize o Laravel Valet e os pacotes Homebrew no seu sistema. Pode fazer isso executando `brew update && brew upgrade`, bem como atualizando o Larevel Valet executando `composer global update && valet install`."; +"alert.php_switch_failed.confirm" = "Sim, execute \"Corrigir Laravel Valet\""; +"alert.php_switch_failed.cancel" = "Não executar"; + +// PHP Formula Missing +"alert.php_formula_missing.title" = "Ups! A fórmula `php` deve ser instalada para \"Corrigir Laravel Valet\"..."; +"alert.php_formula_missing.info" = "Parece que não tem a fórmula `php` instalada, o que impede que o PHP Monitor execute \"Corrigir Laravel Valet\". Instale-o usando `brew install php`, reinicie o PHP Monitor e tente novamente."; + +// Fix My Valet Started +"alert.fix_my_valet.title" = "Está com problemas? O \"Corrigir Laravel Valet\" está pronto para começar!"; +"alert.fix_my_valet.info" = "Este processo poderá demorar. Por favor, seja paciente.\n\nQuando estiver concluído, todos os outros serviços serão interrompidos e o PHP %@ será vinculado. Poderá mudar para outra versão do PHP assim que esta operação for concluída.\n\n(Você receberá outro alerta assim que \"Corrigir Laravel Valet\" for concluído.)"; +"alert.fix_my_valet.ok" = "Continuar"; +"alert.fix_my_valet.cancel" = "Cancelar"; + +// Fix My Valet Done +"alert.fix_my_valet_done.title" = "\"Corrigir Laravel Valet\" concluido."; +"alert.fix_my_valet_done.subtitle" = "Todos os serviços apropriados foram interrompidos e os corretos reiniciados, e a versão mais recente do PHP deve estar vinculada. Agora pode tentar mudar para outra versão do PHP."; +"alert.fix_my_valet_done.stay" = "Permanecer no PHP %@"; +"alert.fix_my_valet_done.switch_back" = "Voltar para o PHP %@"; +"alert.fix_my_valet_done.desc" = "Se visitar sites que ainda não funcionem, pode tentar executar `valet install` novamente, isso pode corrigir o problema 502 (Bad Gateway).\n\nSe o Laravel Valet estiver com erros e não conseguir executar `valet install`, pode ser necessário executar `composer global update`. Consulte o FAQ no GitHub se tiver outros problemas."; + +// Restore Homebrew Permissions +"alert.fix_homebrew_permissions.title" = "Sobre \"Restaurar permissões de homebrew\""; +"alert.fix_homebrew_permissions.subtitle" = "Esta funcionalidade foi criada para que possa executar `brew upgrade` ou `brew cleanup` sem problemas de permissão.\n\n(Será notificado quando esta correção for aplicada.)"; +"alert.fix_homebrew_permissions.desc" = "São necessários privilégios administrativos, uma vez que o PHP Monitor restaurará a sua propriedade dos ficheiros e diretorias atualmente atribuidas ao utilizador `root`, porque os serviços Laravel Valet foram executados como root."; +"alert.fix_homebrew_permissions.ok" = "Restaurar permissões"; +"alert.fix_homebrew_permissions.cancel" = "Cancelar"; + +"alert.fix_homebrew_permissions_done.title" = "Todas as permissões de ficheiros e diretorias para as dependências do Laravel Valet foram restauradas."; +"alert.fix_homebrew_permissions_done.subtitle" = "Por isso, todos os serviços do Laravel Valet não estão em execução. Agora pode interagir com o Homebrew, mas os seus sites que usam Laravel Valet ficarão indisponíveis porque todos os serviços estão desativados."; +"alert.fix_homebrew_permissions_done.desc" = "Ao terminar o Homebrew (depois de executar `brew upgrade`, por exemplo), reinicie o PHP Monitor e selecione \"Reiniciar serviços Laravel Valet\" se quiser que o Laravel Valet funcione novamente. É sempre recomendado reiniciar o PHP Monitor cada vez que atualizar as versões do PHP com `brew upgrade`, ou algo pode deixar de funcionar."; + +// PHP FPM Broken +"alert.php_fpm_broken.title" = "A sua configuração PHP-FPM não está apontando para o socket Laravel Valet!"; +"alert.php_fpm_broken.info" = "O PHP Monitor determinou que há problemas com sua configuração PHP-FPM. Isso irá resultar em respostas '502 Bad Gateway' se visitar sites vinculados via Laravel Valet."; +"alert.php_fpm_broken.description" = "Se já faz algum tempo, pode corrigir isso executando `valet install`, que atualiza a sua configuração do PHP-FPM.\n\nSe está a ver esta mensagem e está a tentar executar uma versão de pré-lançamento do PHP, é possível que o Laravel Valet ainda não suporte essa versão de pré-lançamento do PHP.\n\nPode precisar atualizar a sua instalação do Laravel Valet para pelo menos a versão 3.1.11, e depois executar `valet install`. Mais informações aqui: https://phpmon.app/prerelease-php"; + +// PHP Monitor Cannot Start +"alert.cannot_start.title" = "O PHP Monitor não pode iniciar devido a um problema com a configuração do sistema"; +"alert.cannot_start.subtitle" = "O problema sobre o qual acabou de ser notificado está a impedir o correto funcionamento do PHP Monitor."; +"alert.cannot_start.description" = "Talvez não precise sair do PHP Monitor e reiniciá-lo. Se corrigiu o problema (ou não lembra qual é o problema exato), clique em \"Tentar novamente\", e o PHP Monitor repitirá as verificações de inicialização."; +"alert.cannot_start.close" = "Sair"; +"alert.cannot_start.retry" = "Tentar novamente"; + +// PHP alias issue +"alert.php_alias_conflict.title" = "Detetado conflito de alias da fórmula `php` Homebrew"; +"alert.php_alias_conflict.info" = "O PHP Monitor detectou aliases `php` em conflito na configuração do seu Homebrew, ambos detectados como instalados.\n\nIsso provavelmente resultará numa falha na vinculação ao trocar de versão do PHP e interromperá o funcionamento do PHP Monitor.\n\nPara mais informações, visite: https://github.com/nicoverbruggen/phpmon/issues/54"; + +"alert.min_valet_version.title" = "A versão instalada do Laravel Valet não cumpre um requisito mínimo de versão. O PHP Monitor pode não funcionar como esperado!"; +"alert.min_valet_version.info" = "Está a executar o Laravel Valet %@ neste momento. + +Para suporte ideal das versões mais recentes do PHP e mudança de versão corretamente, é recomendado atualizar para a versão %@, que é o requisito mínimo para esta versão do PHP Monitor. + +Pode faze-lo executando `composer global update` no seu Terminal. Depois disso, execute novamente `valet install`. Para obter melhores resultados, reinicie o PHP Monitor depois. Até que isto seja resolvido, o PHP Monitor pode não funcionar como esperado."; + +// Preset text description +"alert.preset_description.switcher_version" = "Mudar para PHP %@.\n\n"; +"alert.preset_description.applying_extensions" = "Ativando as seguintes extensões:\n"; +"alert.preset_description.applying_config" = "Aplicando os seguintes valores de configuração:\n"; +"alert.preset_description.enabled" = "ativado"; +"alert.preset_description.disabled" = "inativado"; +"alert.preset_description.empty" = "(vazio)"; + +// PHP version unavailable +"alert.php_switch_unavailable.title" = "Versão do PHP não suportada"; +"alert.php_switch_unavailable.subtitle" = "O PHP Monitor não pode mudar para o PHP %@, que pode não estar instalado ou disponível. A aplicação desta predefinição foi cancelada."; +"alert.php_switch_unavailable.info" = "Certifique-se de que o PHP %@ está instalado e que você possa escolhe-lo no menu suspenso. As versões atualmente suportadas incluem o PHP: %@."; +"alert.php_switch_unavailable.ok" = "OK"; + +// Service error +"alert.service_error.title" = "O serviço '%@' está a reportar um erro!"; +"alert.service_error.subtitle.error_log" = "Isto significa que o serviço '%@' não está em execução. Isso pode impedir que o Laravel Valet funcione corretamente. Este serviço tem um ficheiro de log associado que você pode querer verificar." ; +"alert.service_error.subtitle.no_error_log" = "Isto significa que o serviço '%@' não está em execução. Isso pode impedir que o Laravel Valet funcione corretamente. Infelizmente, não há nenhum ficheiro de log associado a este serviço."; +"alert.service_error.extra" = "Também pode seguir os passos comuns de solução de problemas. Para saber mais, pressione '?' botão na seção de serviços do PHP Monitor."; + +"alert.service_error.button.show_log" = "Exibir log de erros"; +"alert.service_error.button.close" = "Fechar"; + +// Composer issues +"alert.global_composer_platform_issues.title" = "O Composer detectou problemas em sua plataforma"; +"alert.global_composer_platform_issues.subtitle" = "A versão do PHP para a qual mudou é muito antiga para as dependências globais do Composer que instalou. Essas dependências precisam ser atualizadas."; +"alert.global_composer_platform_issues.desc" = "A maneira mais fácil de evitar que este problema ocorra no futuro é mudar para a versão mais antiga do PHP instalada e executar a `atualização global do compositor` novamente. \n\nComo alternativa, você pode escolher a opção 'Atualizar dependências globais automaticamente' nasm Preferências para evitar este problema também.\n\nSe continuar a ver esta mensagem mesmo depois de tentar atualizar essas dependências globais, sugerimos analisar o ficheiro de configuração global do compositor, localizado em ` ~/.composer/composer.json`."; +"alert.global_composer_platform_issues.buttons.update" = "Atualizar dependências globais"; +"alert.global_composer_platform_issues.buttons.quit" = "Sair do PHP Monitor"; + +// Revert +"alert.revert_description.title" = "Reverter configuração?"; +"alert.revert_description.subtitle" = "O PHP Monitor pode reverter para a configuração anterior que estava ativa. Aqui está o que será aplicado: \n\n%@"; +"alert.revert_description.ok" = "Reverter"; +"alert.revert_description.cancel" = "Cancelar"; + +// STARTUP + +/// 0. Architecture mismatch + +"alert.homebrew_missing.title" = "PHP Monitor não pode iniciar!"; +"alert.homebrew_missing.subtitle" = "Não foi encontrado um executável do Homebrew da diretoria por defeito. Reinicie a aplicação depois de corrigir o problema."; +"alert.homebrew_missing.info" = "Você está a executar o PHP Monitor com a seguinte arquitetura: %@. Por isso, um executável do Homebrew deveria estar disponível em `%@`, mas não foi encontrado. É por isso que o PHP Monitor não funciona.\n\nSe ainda não instalou o Homebrew, faça-o agora. Se estiver a usar um processador Apple Silicon, certifique-se de que o seu Homebrew e o PHP Monitor usam a mesma arquitetura, ativando ou desativando o Rosetta se necessário."; + +"alert.homebrew_missing.quit" = "Sair"; + +/// PHP binary not found +"startup.errors.php_binary.title" = "O PHP não está instalado corretamente"; +"startup.errors.php_binary.subtitle" = "Deve instalar o PHP através do Homebrew. Esta aplicação não funcionará corretamente até que resolva este problema."; +"startup.errors.php_binary.desc" = "Normalmente, executar `brew link php` no seu Terminal resolve este problema.\n\nPara diagnosticar o que está errado, pode tentar executar `which php` no seu Terminal, que deverá mostrar `%@`."; + +/// PHP not found in /usr/local/opt or /opt/homebrew/opt +"startup.errors.php_opt.title" = "O PHP não está instalado corretamente"; +"startup.errors.php_opt.subtitle" = "O alias do PHP não foi encontrado em `%@`. Esta aplicação não funcionará corretamente até que resolva este problema."; +"startup.errors.php_opt.desc" = "Se já possui a fórmula `php` instalada, pode ser necessário executar `brew install php` para que o PHP Monitor detecte a instalação."; + +/// PHP binary is broken +"startup.errors.dyld_library.title" = "O PHP está instalado, mas parece estar incorretamente instalado"; +"startup.errors.dyld_library.subtitle" = "Quando o PHP Monitor tenta executar comandos, falha. Isto geralmente é um indicador de uma instalação do PHP incorretamente instalado."; +"startup.errors.dyld_library.desc" = "Executar `brew reinstall php && brew link php` no seu Terminal pode resolver este problema, pelo que deve tentar executar este comando."; + +/// Valet is not installed +"startup.errors.valet_executable.title" = "Laravel Valet não está instalado corretamente"; +"startup.errors.valet_executable.subtitle" = "Deve instalar o Laravel Valet com o Composer. Esta aplicação não funcionará corretamente até que resolva este problema."; +"startup.errors.valet_executable.desc" = "Se ainda não instalou o Laravel Valet, faça-o agora. Se já instalou, tente executar `which valet` no seu Terminal, que deverá mostrar: `%@`."; + +/// Valet configuration file missing or broken +"startup.errors.valet_json_invalid.title" = "ficheiro de configuração Laravel Valet inválido ou inexistente"; +"startup.errors.valet_json_invalid.subtitle" = "O PHP Monitor precisa de ler o ficheiro de configuração. Parece que o ficheiro está malformado ou inexistente. Por favor, verifique se o ficheiro existe e se está formatado corretamente."; +"startup.errors.valet_json_invalid.desc" = "Pode encontrar o ficheiro em `~/.config/valet/config.json`. Se o Laravel Valet não puder analisar o ficheiro de configuração, execute um comando `valet` qualquer que geralmente corrigirá automaticamente o ficheiro JSON. Tente executar `valet --version` para corrigir automaticamente o ficheiro."; + +/// Valet version not readable +"startup.errors.valet_version_unknown.title" = "A versão Laravel Valet não pôde ser obtida"; +"startup.errors.valet_version_unknown.subtitle" = "A análise do output de `valet --version` falhou. Certifique-se de que a instalação do Laravel Valet funciona e está atualizada."; +"startup.errors.valet_version_unknown.desc" = "Tente executar `valet --version` no seu Terminal para descobrir o motivo do problema."; + +"startup.errors.valet_not_installed.title" = "Diretoria de configuração do Valet inexistente"; +"startup.errors.valet_not_installed.subtitle" = "A diretoria obrigatória `~/.config/valet` não foi encontrada. Geralmente significa que se esqueceu de executar `valet install`."; +"startup.errors.valet_not_installed.desc" = "Assumindo que já instalou o Laravel Valet via Composer, execute `valet install` no seu Terminal para concluir a configuração do Laravel Valet. + +Se ainda vê esta mensagem, e não percebe porque a diretoria desapareceu, convém investigar por que ela desapareceu - ela não pode simplesmente desaparecer e significa que na instalação do Laravel Valet ocorreu algum erro."; + +// Valet version too new or old +"startup.errors.valet_version_not_supported.title" = "Esta versão do Laravel Valet não é suportada"; +"startup.errors.valet_version_not_supported.subtitle" = "Está a executar uma versão do Laravel Valet que não é compatível de momento. O PHP Monitor atualmente funciona apenas com Laravel Valet v2, v3 e v4. Para evitar problemas no seu sistema, o PHP Monitor não pode ser iniciado."; +"startup.errors.valet_version_not_supported.desc" = "Deve instalar uma versão do Laravel Valet que seja compatível com o PHP Monitor, ou pode ser necessário atualizar para uma versão mais recente do PHP Monitor que pode incluir compatibilidade para esta versão do Laravel Valet (consulte as notas de versão mais recentes para obter mais informações)."; + +/// Brew & sudoers +"startup.errors.sudoers_brew.title" = "Brew não foi adicionado a sudoers.d"; +"startup.errors.sudoers_brew.subtitle" = "Deve executar `sudo valet trust` no seu Terminal para garantir que o Laravel Valet pode iniciar e parar os serviços sem ter que usar sempre o sudo. Esta aplicação não funcionará corretamente até que resolva este problema."; +"startup.errors.sudoers_brew.desc" = "Se continuar a ver este erro, é possível que haja um problema de permissão em que o PHP Monitor não pode validar o ficheiro, o que normalmente pode ser resolvido executando no seu Terminal: `sudo chmod +r /private/etc/sudoers.d/brew`"; + +/// Valet & sudoers +"startup.errors.sudoers_valet.title" = "Laravel Valet não foi adicionado a sudoers.d"; +"startup.errors.sudoers_valet.subtitle" = "Você deve executar `sudo valet trust` para garantir que o Laravel Valet possa iniciar e parar os serviços sem ter que usar o sudo todas as vezes. Esta aplicação não funcionará corretamente até que você resolva este problema. Mesmo que já tenha feito isto antes, experimente executar novamente no seu Terminal `sudo valet trust`."; +"startup.errors.sudoers_valet.desc" = "Se continuar a ver este erro, é possível que haja um problema de permissão em que o PHP Monitor não pode validar o ficheiro, que normalmente pode ser resolvido executando no seu Terminal: `sudo chmod +r /private/etc/sudoers.d/valet`"; + +/// Platform issue detected +"startup.errors.global_composer_platform_issues.title" = "O PHP Monitor e o Laravel Valet não funcionam corretamente: o Composer reporta um problema com sua plataforma"; +"startup.errors.global_composer_platform_issues.subtitle" = "Siga estes passos recomendados para evitar este problema de futuro:\n\n1. Execute a `atualização global do compositor`.\n2. Reinicie o PHP Monitor. (Deve funcionar novamente.)\n3. Mude para a versão mais antiga do PHP que instalou.\n4. Execute a `atualização global do compositor` novamente."; +"startup.errors.global_composer_platform_issues.desc" = "Pode ir a Preferências e marcar a opção 'Atualizar dependências globais automaticamente'. Isto atualizará as suas dependências globais do Composer sempre que alterar versões do PHP, portanto, no entanto, pode não ser a solução ideal se não tiver acesso à Internet.\n\nPara descobrir exatamente o que está errado, tente executar no seu Terminal `valet --version`. O Laravel Valet não está a funcionar com as dependências instaladas. Normalmente, isso é provocado por uma incompatibilidade de versão: ou seja, dependências instaladas para uma versão mais recente do PHP do que a versão que está vinculada no momento."; + +/// Cannot retrieve services +"startup.errors.services_json_error.title" = "Não é possível determinar o status dos serviços"; +"startup.errors.services_json_error.subtitle" = "O PHP Monitor geralmente usar o `brew` usando o seguinte comando para testar se os serviços podem ser recuperados: `sudo brew services info nginx --json`.\n\nO PHP Monitor não pôde interpretar a resposta do `brew`."; +"startup.errors.services_json_error.desc" = "Isto pode acontecer se a instalação do Homebrew estiver desatualizada, e o Homebrew ainda não retornar JSON. Geralmente, pode corrigir isto executando no seu Terminal `brew update` ou `brew tap homebrew/services`. Também pode tentar executar no seu Terminal `sudo brew services info nginx --json`."; + +/// Issue with `which` alias +"startup.errors.which_alias_issue.title" = "Foi detectado um problema de configuração"; +"startup.errors.which_alias_issue.subtitle" = "Parece que há um ficheiro em `/usr/local/bin/which`. Isto geralmente é configurado pelo NodeJS, mas `node` não está no PATH em `/usr/local/bin`. Para corrigir isto, continue a ler."; +"startup.errors.which_alias_issue.desc" = "Precisará vincular `node` à diretoria `/usr/local/bin` para garantir que o PHP Monitor possa iniciar com sucesso. Para mais informações, consulte: https://github.com/nicoverbruggen/phpmon/issues/174"; + +// Warning about a different PHP version linked than last time +"startup.version_mismatch.title" = "A sua versão vinculada do PHP mudou."; +"startup.version_mismatch.subtitle" = "Desde que o PHP Monitor esteve ativo a última vez, a sua versão do PHP vinculada foi alterada para PHP %@. Gostaria de voltar para o PHP %@ ou deseja continuar a usar a versão atual?"; +"startup.version_mismatch.desc" = "O PHP Monitor monotoriza qual a versão do PHP que está globalmente vinculada. A versão global pode ter sido alterada devido a algum outro programa ou o Homebrew pode ter ativado uma fórmula diferente após atualizações."; +"startup.version_mismatch.button_switch_back" = "Mudar para PHP %@"; +"startup.version_mismatch.button_stay" = "Continuar com PHP %@"; + +// Warning about unsupported PHP versions +"startup.unsupported_versions_explanation.title" = "Detectada(s) instalação(ões) PHP não suportada(s) pelo Laravel Valet!"; +"startup.unsupported_versions_explanation.subtitle" = "As seguintes versões do PHP estão instaladas no seu sistema, mas não são suportadas por esta versão do Laravel Valet. + +%@ + +O Laravel Valet pode deixar de funcionar se você vincular estas versões do PHP, por esse motivo o PHP Monitor não permite que mude para elas."; +"startup.unsupported_versions_explanation.desc" = "Se precisar de suporte para versões mais antigas do PHP, pode ser necessário fazer o downgrade para versões mais antigas do Laravel Valet. Caso contrário, pode ser uma boa ideia desinstalar qualquer versão desatualizada que não esteja em uso. Também pode acontecer que esta versão do Laravel Valet seja muito antiga. Esta mensagem só será removida após reiniciar o PHP Monitor."; + +// Sponsor encouragement +"startup.sponsor_encouragement.title" = "Se o PHP Monitor foi útil para sí ou para a sua empresa, considere fazer uma doação."; +"startup.sponsor_encouragement.subtitle" = "Para ser 100% transparente: pretendo manter o PHP Monitor como código aberto e gratuito. O seu apoio torna essa decisão muito fácil.\n\n(Verá este pedido apenas uma vez.)"; +"startup.sponsor_encouragement.desc" = "Se já doou, é a razão pela qual esta aplicação conseguiu ter tantas atualizações. Nesse caso, esta é uma mensagem de OBRIGADO para sí. Eu aprecio o seu apoio."; + +"startup.sponsor_encouragement.accept" = "Patrocinar"; +"startup.sponsor_encouragement.learn_more" = "Saber mais"; +"startup.sponsor_encouragement.skip" = "Não, obrigado"; + +// ERROR MESSAGES (based on AlertableError) + +"alert.errors.homebrew_permissions.applescript_returned_nil.title" = "A restauração das permissões do Homebrew foi cancelada."; +"alert.errors.homebrew_permissions.applescript_returned_nil.description" = "O resultado do script executado para ajustar as permissões retornou nil, o que geralmente significa que não concedeu as permissões administrativas necessárias ao PHP Monitor.\n\nSe clicou em Cancelar durante o pedido de autenticação, é normal que assim seja. Se se autenticou e ainda está a ver esta mensagem, provavelmente algo deu erro."; + +"alert.key_service_not_running.title" = "Devido a problemas com os serviços necessários do Homebrew, o Laravel Valet não está a funcionar corretamente de momento"; +"alert.key_service_not_running.subtitle" = "Para que o Laravel Valet funcione corretamente, ppelo menos três serviços principais têm de estar a funcionar corretamente. + +O PHP Monitor está a reportar que tal não está a acontecer. Pode tentar corrigir este problema clicando no botão com o 'X' no menu abaixo do serviço afetado para (re)iniciar esse serviço que esteja inativo neste momento."; +"alert.key_service_not_running.desc" = "Se clicar no botão abaixo e o serviço não funcionar (ou seja, o icon giratório aparece, mas permanece um 'X' após algum tempo), pode ser necessário executar 'Corrigir Laravel Valet...'. Pode fazer isso no menu Primeiros socorros > Corrigir Laravel Valet. + +Em alternativa, pode executar no seu Terminal `valet stop` e `valet start`, o que também pode corrigir o problema (em alternativa ao 'Corrigir Laravel Valet...'). + +Como análise adicional, pode verificar o nosso GitHub, onde outras pessoas podem ter tido problemas semelhantes. Como desenvolvedor, tento garantir que todas as perguntas sejam respondidas :)"; + +"alert.key_service_has_error.title" = "Devido a problemas com os serviços necessários Homebrew, o Laravel Valet não está a funcionar corretamente de momento"; +"alert.key_service_has_error.subtitle" = "Para que o Laravel Valet funcione corretamente, pelo menos três serviços principais têm de estar a funcionar corretamente. + +O PHP Monitor está a reportar que tal não está a acontecer. Parece que um dos serviços afetados está a reportar um código de erro, neste caso recomendo clicar no 'E'. + +O PHP Monitor irá tentar reiniciar o serviço em questão, e, caso falhe novamente (o que é provável), oferecerá a localização do ficheiro de log, se existir, que pode conter informações adicionais que podem ajudá-lo a perceber o motivo do problema."; +"alert.key_service_has_error.desc" = "Infelizmente, se um serviço devolver um erro, isso geralmente ocorre devido a uma configuração inválida, que pode ser difícil de descobrir. + +SOLUÇÕES COMUNS PARA RESOLUÇÃO DE PROBLEMAS + +• Tente reiniciar o serviço e verificar primeiro o ficheiro de log (se existir). Pode fazer com que o PHP Monitor faça isso por si clicando no botão 'E'. + +• PHP: Se estiver a ver um status de erro, pode haver um problema com a configuração do PHP. Verifique se os ficheiros .ini na instalação do Homebrew estão corretos e se não há conflitos de socket. + +• nginx: se estiver a ver um status de erro, é provável que um site esteja configurado incorretamente (geralmente visivel no log de erros). Provavelmente deverá verificar a diretoria nginx do Laravel Valet. + +• dnsmasq: Se estiver a ver um status de erro, o ficheiro de configuração dnsmasq provavelmente está danificado (geralmente localizado em ~/.config/valet/dnsmasq.d)."; + +// CHECK FOR UPDATES + +"updater.alerts.newer_version_available.title" = "O PHP Monitor v%@ já está disponível!"; +"updater.alerts.newer_version_available.subtitle" = "Manter o PHP Monitor atualizado é altamente recomendado, uma vez que as versões mais recentes geralmente corrigem bugs e incluem correções para suportar as versões mais recentes do Laravel Valet e do PHP."; +"updater.installation_source.brew" = "O método recomendado para instalar atualizações do PHP Monitor é simplesmente pressionar “Instalar Atualização”.\n\nComo usou o Homebrew para instalar esta aplicação, também pode atualizar pelo seu Terminal executando o commando `%@`, mas não é recomendado. \n\n(Repare que a instalação por via deste atualizador integrado irá remover o PHP Monitor da diretoria Caskroom do Homebrew, para evitar que atualizações duplicadas sejam descarregadas e causem possíveis problemas posteriormente.)"; +"updater.installation_source.direct" = "O método recomendado para instalar atualizações no PHP Monitor é simplesmente pressionar “Instalar Atualização”."; +"updater.alerts.buttons.release_notes" = "Ver notas de lançamento"; + +"updater.alerts.is_latest_version.title" = "O PHP Monitor está atualizado!"; +"updater.alerts.is_latest_version.subtitle" = "A versão atualmente instalada (v%@) está atualizada.\Não há versão mais recente disponível."; + +"updater.alerts.cannot_check_for_update.title" = "O PHP Monitor não pôde determinar se uma versão mais recente está disponível."; +"updater.alerts.cannot_check_for_update.subtitle" = "Pode não estar ligado à Internet, estar a bloqueando tráfego ou o GitHub está offline e não permite que verifique se há atualizações. Se continuar a ver esta mensagem, convém verificar manualmente a página de versões."; +"updater.alerts.cannot_check_for_update.description" = "A versão atualmente instalada é: %@. Pode visualizar a lista das últimas versões (no GitHub) clicando no botão à esquerda."; +"updater.alerts.buttons.releases_on_github" = "Ver versões"; +"updater.alerts.buttons.install" = "Instalar Atualização"; +"updater.alerts.buttons.dismiss" = "Sair"; + +// WARNINGS ABOUT NON-DEFAULT TLD + +"alert.warnings.tld_issue.title" = "Não está usando `.test` como TLD para o Laravel Valet."; +"alert.warnings.tld_issue.subtitle" = "O uso de um TLD não padrão pode não funcionar corretamente e não é oficialmente suportado."; +"alert.warnings.tld_issue.description" = "O PHP Monitor permanecerá funcional, mas pode haver problemas: a aplicação pode não mostrar corretamente quais os domínios que foram protegidos. Para obter os melhores resultados, aceda ao ficheiro de configuração do Laravel Valet (config.json na diretoria do Laravel Valet) e altere o TLD para `test`."; +"alert.do_not_tell_again" = "Não me volte a dizer"; + +// WARNINGS + +"warnings.title" = "PHP Doctor"; +"warnings.description" = "**PHP Doctor** vai sugerir melhorias para a configuração atual do seu sistema."; +"warnings.disclaimer" = "Pode optar por ocultar todas as recomendações do menu PHP Monitor em Preferências, mas é recomendável que você valide todos os itens acionáveis."; +"warnings.refresh.button" = "Validar novamente"; +"warnings.refresh.button.description" = "Pressione este botão depois de corrigir um problema. Isso fará com que o PHP Monitor valide novamente o seu ambiente. Se for realmente corrigido, a recomendação deve desaparecer."; + +"warnings.helper_permissions.title" = "Os scripts auxiliares do PHP Monitor não estão disponíveis."; +"warnings.helper_permissions.description" = "O PHP Monitor vem com vários scripts auxiliares. O uso desses scripts permite invocar facilmente uma versão específica do PHP sem trocar a versão do PHP vinculada."; +"warnings.helper_permissions.unavailable" = "No entanto, estes auxiliares estão potencialmente *indisponíveis* porque o PHP Monitor não pode criar ou atualizar os links simbólicos (symlinks) necessários."; +"warnings.helper_permissions.symlink" = "Se não deseja tornar `/usr/local/bin` gravável, pode adicionar a diretoria auxiliar do PHP Monitor à sua variável `PATH` para fazer com que este aviso desapareça. (Clique em \"Saiba mais\" para descobrir como corrigir esse problema.)"; + +"warnings.arm_compatibility.title" = "Está a executar o PHP Monitor usando o Rosetta em Apple Silicon, o que significa que o seu ambiente PHP também está sendo executado via Rosetta."; +"warnings.arm_compatibility.description" = "Parece estar a executar uma versão do macOS compatível com ARM, mas atualmente está a executar o PHP Monitor usando Rosetta. Embora isso funcione corretamente, é recomendável usar a versão nativa do Homebrew."; + +"warnings.files_missing.title" = "A sua instalação do PHP tem ficheiros de configuração importantes em falta."; +"warnings.files_missing.description" = "Os seguintes ficheiros de configuração chave devem existir após uma instalação do PHP: + +• %@ + +Quando ficheiros como estes estiverem em falta, deve mudar para a versão do PHP associada a esses ficheiros: que pode resolver o problema. Se isso não corrigir o problema, é recomendável reinstalar a(s) versão(ões) apropriada(s) do PHP via Homebrew, o que deve restaurar os ficheiros de configuração que estão em falta. A falta de ficheiros de configuração pode ser a razão pela qual recebe erros '502 Bad Gateway', mesmo depois de executar o 'Corrigir Laravel Valet' (se estiver a usar o Laravel Valet)."; + +"warnings.none" = "Não há recomendações disponíveis neste momento. Está tudo operacional!"; + +// ONBOARDING + +"onboarding.title" = "Boas-vindas"; +"onboarding.welcome" = "Bem-vindo ao Monitor PHP!"; +"onboarding.explore" = "Agora tem acesso a todo um conjunto de funcionalidades do PHP Monitor. Pode aprender mais sobre algumas das funcionalidades que o PHP Monitor tem a oferecer nesta janela."; +"onboarding.explore.lite" = "Agora tem acesso às funcionalidades mais importantes do PHP Monitor. +Tenha em conta que algumas funcionalidades (esmaecidos abaixo) estão indisponíveis de momento porque o Laravel Valet ainda não está ativo."; +"onboarding.tour.menu_bar.title" = "Poder na sua barra de menu"; +"onboarding.tour.menu_bar" = "O PHP Monitor vive na sua barra de menu. A partir deste menu, pode aceder à maioria das principais funcionalidades do PHP Monitor, incluindo mudar a versão do PHP vinculada globalmente, localizar ficheiros de configuração, instalar diferentes versões do PHP e muito mais."; +"onboarding.tour.faq_hint" = "**Dúvidas?** Recomendo que verifique o [README](https://github.com/nicoverbruggen/phpmon/blob/main/README.md) no nosso GitHub: pois contém um FAQ abrangente com vários conselhos e esclarecimentos para perguntas frequentes."; +"onboarding.tour.services.title" = "Gerir serviços homebrew"; +"onboarding.tour.services" = "Depois de clicar no item da barra de menu, pode ver rapidamente com base nas marcas de seleção ou cruzes se todos os serviços do Homebrew estão a funcionar corretamente. Também pode clicar num serviço para alterná-lo rapidamente."; +"onboarding.tour.domains.title" = "Gerir domínios"; +"onboarding.tour.domains" = "Ao abrir a janela Domínios através da barra de menu, pode visualizar quais domínios que estão vinculados e estacionados, bem como os proxies nginx ativos."; +"onboarding.tour.isolation.title" = "Isolar domínios"; +"onboarding.tour.isolation" = "Se tiver o Laravel Valet V3 ou mais recente instalado, poderá até usar o isolamento de domínio clicando com o botão direito do rato num determinado domínio na janela Domínios. Isso permite-lhe escolher uma versão específica do PHP para usar nesse domínio, e apenas nesse domínio."; +"onboarding.tour.feature_unavailable" = "Esta funcionalidade não está disponível de momento e requer a instalação do Laravel Valet."; +"onboarding.tour.once" = "Apenas irá ver este 'Boas-vindas' uma vez. Pode visualiza-lo mais tarde através da barra de menum em 'Primeiros Socorros e Serviços'."; +"onboarding.tour.close" = "Fechar"; From cb28243181eeea64d32b5d3ab86399f3214f5c2c Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Sat, 29 Jul 2023 20:45:20 +0200 Subject: [PATCH 19/34] =?UTF-8?q?=F0=9F=94=A7=20Bump=20build,=20fix=20layo?= =?UTF-8?q?ut=20issue=20for=20prefs?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- PHP Monitor.xcodeproj/project.pbxproj | 12 ++++++------ .../xcshareddata/xcschemes/PHP Monitor DEV.xcscheme | 2 +- .../Preferences/Views/SelectPreferenceView.xib | 12 ++++++------ .../PHP Config Editor/UI/ConfigManagerView.swift | 2 +- phpmon/nl.lproj/Localizable.strings | 4 ++-- 5 files changed, 16 insertions(+), 16 deletions(-) diff --git a/PHP Monitor.xcodeproj/project.pbxproj b/PHP Monitor.xcodeproj/project.pbxproj index 0412732f..7bc490bc 100644 --- a/PHP Monitor.xcodeproj/project.pbxproj +++ b/PHP Monitor.xcodeproj/project.pbxproj @@ -3455,7 +3455,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 1300; + CURRENT_PROJECT_VERSION = 1305; DEAD_CODE_STRIPPING = YES; DEBUG = YES; DEVELOPMENT_TEAM = 8M54J5J787; @@ -3486,7 +3486,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 1300; + CURRENT_PROJECT_VERSION = 1305; DEAD_CODE_STRIPPING = YES; DEBUG = NO; DEVELOPMENT_TEAM = 8M54J5J787; @@ -3726,7 +3726,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 1300; + CURRENT_PROJECT_VERSION = 1305; DEAD_CODE_STRIPPING = YES; DEBUG = NO; DEVELOPMENT_TEAM = 8M54J5J787; @@ -3842,7 +3842,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 1300; + CURRENT_PROJECT_VERSION = 1305; DEAD_CODE_STRIPPING = YES; DEBUG = YES; DEVELOPMENT_TEAM = 8M54J5J787; @@ -3958,7 +3958,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 1300; + CURRENT_PROJECT_VERSION = 1305; DEAD_CODE_STRIPPING = YES; DEBUG = YES; DEVELOPMENT_TEAM = 8M54J5J787; @@ -4139,7 +4139,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 1300; + CURRENT_PROJECT_VERSION = 1305; DEAD_CODE_STRIPPING = YES; DEBUG = NO; DEVELOPMENT_TEAM = 8M54J5J787; diff --git a/PHP Monitor.xcodeproj/xcshareddata/xcschemes/PHP Monitor DEV.xcscheme b/PHP Monitor.xcodeproj/xcshareddata/xcschemes/PHP Monitor DEV.xcscheme index 02e79b09..f5a77628 100644 --- a/PHP Monitor.xcodeproj/xcshareddata/xcschemes/PHP Monitor DEV.xcscheme +++ b/PHP Monitor.xcodeproj/xcshareddata/xcschemes/PHP Monitor DEV.xcscheme @@ -67,7 +67,7 @@ buildConfiguration = "Debug.Dev" selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" - language = "pt-PT" + language = "nl" launchStyle = "0" useCustomWorkingDirectory = "NO" ignoresPersistentStateOnLaunch = "NO" diff --git a/phpmon/Domain/Preferences/Views/SelectPreferenceView.xib b/phpmon/Domain/Preferences/Views/SelectPreferenceView.xib index 0e5dbbc6..4871c5ff 100644 --- a/phpmon/Domain/Preferences/Views/SelectPreferenceView.xib +++ b/phpmon/Domain/Preferences/Views/SelectPreferenceView.xib @@ -1,8 +1,8 @@ - + - + @@ -14,7 +14,7 @@ - + @@ -22,7 +22,7 @@ - + @@ -33,7 +33,7 @@ - + @@ -58,7 +58,7 @@ - + diff --git a/phpmon/Modules/PHP Config Editor/UI/ConfigManagerView.swift b/phpmon/Modules/PHP Config Editor/UI/ConfigManagerView.swift index f39cd974..08ef2f9b 100644 --- a/phpmon/Modules/PHP Config Editor/UI/ConfigManagerView.swift +++ b/phpmon/Modules/PHP Config Editor/UI/ConfigManagerView.swift @@ -39,7 +39,7 @@ struct ConfigManagerView: View { // PreferenceContainer() // PreferenceContainer() Divider() - HStack() { + HStack { Button("Close", action: { }) diff --git a/phpmon/nl.lproj/Localizable.strings b/phpmon/nl.lproj/Localizable.strings index 55a4ba06..b60e500e 100644 --- a/phpmon/nl.lproj/Localizable.strings +++ b/phpmon/nl.lproj/Localizable.strings @@ -368,8 +368,8 @@ Dit heeft geen invloed op andere terminals, alleen op de huidige terminalsessie "prefs.php_doctor_suggestions_title" = "Altijd suggesties tonen"; "prefs.php_doctor_suggestions_desc" = "Als je dit item uitvinkt, worden er geen suggesties van PHP Doctor weergegeven in het menu van PHP Monitor. Houd er rekening mee dat PHP Doctor niet wordt weergegeven als er geen aanbevelingen zijn."; -"prefs.shortcut_set" = "Stel een globale sneltoets in"; -"prefs.shortcut_listening" = ""; +"prefs.shortcut_set" = "Globale sneltoets instellen"; +"prefs.shortcut_listening" = ""; "prefs.shortcut_clear" = "Wissen"; "prefs.shortcut_desc" = "Als er een sneltoetscombinatie is ingesteld, kun je PHP Monitor overal in- of uitschakelen door de toetscombinatie in te drukken die je hebt gekozen. (Annuleer het kiezen van een sneltoets door op de spatiebalk te drukken.)"; From 93e841735ead78b92830aeab359acd44f96f2897 Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Wed, 30 Aug 2023 19:59:21 +0200 Subject: [PATCH 20/34] =?UTF-8?q?=F0=9F=8F=97=EF=B8=8F=20SwiftUI=20and=20c?= =?UTF-8?q?onfig=20views?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../PHP Config Editor/UI/ByteLimitView.swift | 40 +++++++++++++++---- .../UI/ConfigManagerView.swift | 36 +++++++++++++++-- 2 files changed, 66 insertions(+), 10 deletions(-) diff --git a/phpmon/Modules/PHP Config Editor/UI/ByteLimitView.swift b/phpmon/Modules/PHP Config Editor/UI/ByteLimitView.swift index 520c682f..48d2122c 100644 --- a/phpmon/Modules/PHP Config Editor/UI/ByteLimitView.swift +++ b/phpmon/Modules/PHP Config Editor/UI/ByteLimitView.swift @@ -8,19 +8,35 @@ import SwiftUI -struct PreferenceContainer: View { - private var name: String = "Memory Limit" - private var description: String = "This is the maximum memory a given PHP script may consume." - private var controlView: some View = ByteLimitView() +struct PreferenceContainer: View { + private var name: String + private var description: String + private var controlView: ControlView + + init( + name: String, + description: String, + @ViewBuilder _ controlView: () -> ControlView + ) { + self.name = name + self.description = description + self.controlView = controlView() + } var body: some View { VStack(alignment: .leading, spacing: 10) { HStack(alignment: .top, spacing: 50) { - Text(self.name).bold() + VStack(alignment: .leading) { + Text(self.name) + .bold() + .multilineTextAlignment(.leading) + .frame(minWidth: 150, maxWidth: 150, alignment: .leading) + } + VStack(alignment: .leading) { controlView Text(self.description).font(.subheadline) - } + }.frame(maxWidth: .infinity, alignment: .leading) } } .padding(10) @@ -49,10 +65,20 @@ struct ByteLimitView: View { .labelsHidden() .pickerStyle(.menu) } + + func setValue(value: String) { + return + } + + func getValue() -> String { + return "ok" + } } struct ByteLimitView_Previews: PreviewProvider { static var previews: some View { - PreferenceContainer() + PreferenceContainer(name: "Something\nStupid", description: "Description") { + ByteLimitView() + } } } diff --git a/phpmon/Modules/PHP Config Editor/UI/ConfigManagerView.swift b/phpmon/Modules/PHP Config Editor/UI/ConfigManagerView.swift index 08ef2f9b..503c615c 100644 --- a/phpmon/Modules/PHP Config Editor/UI/ConfigManagerView.swift +++ b/phpmon/Modules/PHP Config Editor/UI/ConfigManagerView.swift @@ -9,7 +9,25 @@ import Foundation import SwiftUI +struct PhpPreference { + let key: String + let type: PhpPreferenceType +} + +enum PhpPreferenceType { + case byteLimit + case string + case boolean +} + struct ConfigManagerView: View { + var preferences: [PhpPreference] = [ + PhpPreference(key: "memory_limit", type: .byteLimit), + PhpPreference(key: "post_max_size", type: .byteLimit), + PhpPreference(key: "file_uploads", type: .boolean), + PhpPreference(key: "upload_max_filesize", type: .byteLimit) + ] + var body: some View { VStack { HStack(alignment: .center, spacing: 15) { @@ -35,9 +53,21 @@ struct ConfigManagerView: View { Divider() VStack(spacing: 5) { - PreferenceContainer() - // PreferenceContainer() - // PreferenceContainer() + ForEach(preferences, id: \.key) { preference in + PreferenceContainer( + name: "php_ini." + preference.key + ".title", + description: "php_ini." + preference.key + ".description" + ) { + if preference.type == .byteLimit { + ByteLimitView() + } + if preference.type == .boolean { + Text("Boolean value here") + // Toggle(isOn: preference.) + } + }.frame(maxWidth: .infinity) + } + Divider() HStack { Button("Close", action: { From f8e6aa988e18565a49a8412c4d51b09a8801ed5b Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Wed, 30 Aug 2023 20:20:08 +0200 Subject: [PATCH 21/34] =?UTF-8?q?=F0=9F=8F=97=EF=B8=8F=20Mapping=20more=20?= =?UTF-8?q?PHP=20configuration=20values?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../PHP Config Editor/UI/ByteLimitView.swift | 4 +- .../UI/ConfigManagerView.swift | 45 +++++++++++++------ phpmon/en.lproj/Localizable.strings | 10 +++++ 3 files changed, 43 insertions(+), 16 deletions(-) diff --git a/phpmon/Modules/PHP Config Editor/UI/ByteLimitView.swift b/phpmon/Modules/PHP Config Editor/UI/ByteLimitView.swift index 48d2122c..dd1d09ae 100644 --- a/phpmon/Modules/PHP Config Editor/UI/ByteLimitView.swift +++ b/phpmon/Modules/PHP Config Editor/UI/ByteLimitView.swift @@ -27,7 +27,7 @@ struct PreferenceContainer: View { VStack(alignment: .leading, spacing: 10) { HStack(alignment: .top, spacing: 50) { VStack(alignment: .leading) { - Text(self.name) + Text(self.name.localizedForSwiftUI) .bold() .multilineTextAlignment(.leading) .frame(minWidth: 150, maxWidth: 150, alignment: .leading) @@ -35,7 +35,7 @@ struct PreferenceContainer: View { VStack(alignment: .leading) { controlView - Text(self.description).font(.subheadline) + Text(self.description.localizedForSwiftUI).font(.subheadline) }.frame(maxWidth: .infinity, alignment: .leading) } } diff --git a/phpmon/Modules/PHP Config Editor/UI/ConfigManagerView.swift b/phpmon/Modules/PHP Config Editor/UI/ConfigManagerView.swift index 503c615c..ccd7827d 100644 --- a/phpmon/Modules/PHP Config Editor/UI/ConfigManagerView.swift +++ b/phpmon/Modules/PHP Config Editor/UI/ConfigManagerView.swift @@ -9,9 +9,24 @@ import Foundation import SwiftUI -struct PhpPreference { +class PhpPreference { let key: String - let type: PhpPreferenceType + + init(key: String) { + self.key = key + } +} + +class BoolPhpPreference: PhpPreference { + @State var value: Bool = false +} + +class StringPhpPreference: PhpPreference { + @State var value: String = "" +} + +class BytePhpPreference: PhpPreference { + @State var value: String = "" } enum PhpPreferenceType { @@ -22,10 +37,10 @@ enum PhpPreferenceType { struct ConfigManagerView: View { var preferences: [PhpPreference] = [ - PhpPreference(key: "memory_limit", type: .byteLimit), - PhpPreference(key: "post_max_size", type: .byteLimit), - PhpPreference(key: "file_uploads", type: .boolean), - PhpPreference(key: "upload_max_filesize", type: .byteLimit) + BytePhpPreference(key: "memory_limit"), + BytePhpPreference(key: "post_max_size"), + BoolPhpPreference(key: "file_uploads"), + BytePhpPreference(key: "upload_max_filesize") ] var body: some View { @@ -55,26 +70,28 @@ struct ConfigManagerView: View { VStack(spacing: 5) { ForEach(preferences, id: \.key) { preference in PreferenceContainer( - name: "php_ini." + preference.key + ".title", - description: "php_ini." + preference.key + ".description" + name: "php_ini.\(preference.key).title", + description: "php_ini.\(preference.key).description" ) { - if preference.type == .byteLimit { + if let preference = preference as? BytePhpPreference { ByteLimitView() } - if preference.type == .boolean { - Text("Boolean value here") - // Toggle(isOn: preference.) + if let preference = preference as? BoolPhpPreference { + Toggle("", isOn: preference.$value) + } + if let preference = preference as? StringPhpPreference { + TextField("Placeholder", text: preference.$value) } }.frame(maxWidth: .infinity) } Divider() HStack { - Button("Close", action: { + Button("Cancel", action: { }) Spacer() - Button("Restart PHP-FPM", action: { + Button("Apply", action: { }) } diff --git a/phpmon/en.lproj/Localizable.strings b/phpmon/en.lproj/Localizable.strings index e5d7730c..2c1f75de 100644 --- a/phpmon/en.lproj/Localizable.strings +++ b/phpmon/en.lproj/Localizable.strings @@ -786,3 +786,13 @@ Please note that some features (greyed out below) are currently unavailable beca "onboarding.tour.feature_unavailable" = "This feature is currently unavailable and requires Laravel Valet to be installed."; "onboarding.tour.once" = "You will only see the Welcome Tour once. You can re-open the Welcome Tour later via the menu bar icon (available in the menu, under First Aid & Services)."; "onboarding.tour.close" = "Close Tour"; + +// CONFIGURATION MANAGER + +"confman.title" = "Configuration Manager"; +"confman.description" = "You can update configuration values for the currently active PHP version."; + +"php_ini.memory_limit.title" = "Memory Limit"; +"php_ini.post_max_size.title" = "POST Max Size"; +"php_ini.file_uploads.title" = "File Uploads"; +"php_ini.upload_max_filesize.title" = "Upload Max Size"; From 528f213f1740e2547e92452856cd3d5a92d60d72 Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Wed, 30 Aug 2023 21:05:37 +0200 Subject: [PATCH 22/34] =?UTF-8?q?=E2=9C=A8=20Finalized=20initial=20config?= =?UTF-8?q?=20UI=20without=20bindings?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../xcschemes/PHP Monitor DEV.xcscheme | 1 - .../PHP Config Editor/UI/ByteLimitView.swift | 18 +++++-- .../UI/ConfigManagerView.swift | 54 ++++++++++--------- phpmon/en.lproj/Localizable.strings | 23 ++++---- 4 files changed, 52 insertions(+), 44 deletions(-) diff --git a/PHP Monitor.xcodeproj/xcshareddata/xcschemes/PHP Monitor DEV.xcscheme b/PHP Monitor.xcodeproj/xcshareddata/xcschemes/PHP Monitor DEV.xcscheme index f5a77628..2e915faa 100644 --- a/PHP Monitor.xcodeproj/xcshareddata/xcschemes/PHP Monitor DEV.xcscheme +++ b/PHP Monitor.xcodeproj/xcshareddata/xcschemes/PHP Monitor DEV.xcscheme @@ -67,7 +67,6 @@ buildConfiguration = "Debug.Dev" selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" - language = "nl" launchStyle = "0" useCustomWorkingDirectory = "NO" ignoresPersistentStateOnLaunch = "NO" diff --git a/phpmon/Modules/PHP Config Editor/UI/ByteLimitView.swift b/phpmon/Modules/PHP Config Editor/UI/ByteLimitView.swift index dd1d09ae..aeca6a2a 100644 --- a/phpmon/Modules/PHP Config Editor/UI/ByteLimitView.swift +++ b/phpmon/Modules/PHP Config Editor/UI/ByteLimitView.swift @@ -25,9 +25,9 @@ struct PreferenceContainer: View { var body: some View { VStack(alignment: .leading, spacing: 10) { - HStack(alignment: .top, spacing: 50) { + HStack(alignment: .top, spacing: 10) { VStack(alignment: .leading) { - Text(self.name.localizedForSwiftUI) + Text(LocalizedStringKey(self.name)) .bold() .multilineTextAlignment(.leading) .frame(minWidth: 150, maxWidth: 150, alignment: .leading) @@ -35,11 +35,15 @@ struct PreferenceContainer: View { VStack(alignment: .leading) { controlView - Text(self.description.localizedForSwiftUI).font(.subheadline) - }.frame(maxWidth: .infinity, alignment: .leading) + + Text(self.description.localizedForSwiftUI) + .font(.subheadline) + .fixedSize(horizontal: false, vertical: true) + } + .frame(maxWidth: .infinity, alignment: .topLeading) } } - .padding(10) + .padding(5) } } @@ -80,5 +84,9 @@ struct ByteLimitView_Previews: PreviewProvider { PreferenceContainer(name: "Something\nStupid", description: "Description") { ByteLimitView() } + + ConfigManagerView() + .frame(width: 600, height: .infinity) + .previewDisplayName("Config Manager") } } diff --git a/phpmon/Modules/PHP Config Editor/UI/ConfigManagerView.swift b/phpmon/Modules/PHP Config Editor/UI/ConfigManagerView.swift index ccd7827d..7e53d1a2 100644 --- a/phpmon/Modules/PHP Config Editor/UI/ConfigManagerView.swift +++ b/phpmon/Modules/PHP Config Editor/UI/ConfigManagerView.swift @@ -18,7 +18,7 @@ class PhpPreference { } class BoolPhpPreference: PhpPreference { - @State var value: Bool = false + @State var value: Bool = true } class StringPhpPreference: PhpPreference { @@ -68,38 +68,40 @@ struct ConfigManagerView: View { Divider() VStack(spacing: 5) { - ForEach(preferences, id: \.key) { preference in - PreferenceContainer( - name: "php_ini.\(preference.key).title", - description: "php_ini.\(preference.key).description" - ) { - if let preference = preference as? BytePhpPreference { - ByteLimitView() - } - if let preference = preference as? BoolPhpPreference { - Toggle("", isOn: preference.$value) - } - if let preference = preference as? StringPhpPreference { - TextField("Placeholder", text: preference.$value) - } - }.frame(maxWidth: .infinity) - } + VStack { + ForEach(preferences, id: \.key) { preference in + PreferenceContainer( + name: "php_ini.\(preference.key).title", + description: "php_ini.\(preference.key).description" + ) { + if let preference = preference as? BytePhpPreference { + ByteLimitView() + } + if let preference = preference as? BoolPhpPreference { + Toggle("", isOn: preference.$value) + .toggleStyle(.switch) + .padding(.leading, -10) + } + if let preference = preference as? StringPhpPreference { + TextField("Placeholder", text: preference.$value) + } + }.frame(maxWidth: .infinity) + } + }.padding(10) Divider() - HStack { - Button("Cancel", action: { - }) - Spacer() - Button("Apply", action: { + VStack(alignment: .trailing) { + Button("Close", action: { }) } - .padding(10) + .padding(.vertical, 10) + .padding(.horizontal, 15) .frame( minWidth: 0, maxWidth: .infinity, - alignment: .topLeading + alignment: .topTrailing ) } } @@ -109,7 +111,7 @@ struct ConfigManagerView: View { struct ConfigManagerView_Previews: PreviewProvider { static var previews: some View { ConfigManagerView() - // .frame(width: 600, height: 480) - .previewDisplayName("Config Manager") + .frame(width: 600) + .previewDisplayName("Live Preview") } } diff --git a/phpmon/en.lproj/Localizable.strings b/phpmon/en.lproj/Localizable.strings index 2c1f75de..3fedc243 100644 --- a/phpmon/en.lproj/Localizable.strings +++ b/phpmon/en.lproj/Localizable.strings @@ -83,8 +83,17 @@ // CONFMAN -"confman.title" = "PHP Config Editor"; -"confman.description" = "This utility lets you customize your PHP installation with ease. Changes are automatically applied as you change your configuration values."; +"confman.title" = "PHP Configuration Editor"; +"confman.description" = "This feature lets you customize your PHP installation with ease. Changes are automatically applied."; + +"php_ini.memory_limit.title" = "Memory Limit"; +"php_ini.memory_limit.description" = "This sets the maximum amount of memory in bytes that a script is allowed to allocate. This helps prevent poorly written scripts for eating up all available memory on a server."; +"php_ini.post_max_size.title" = "POST Max Size"; +"php_ini.post_max_size.description" = "Sets max size of post data allowed. This setting also affects file upload. To upload large files, this value must be larger than Upload Max Size. Generally speaking, Memory Limit should be larger than POST Max Size."; +"php_ini.file_uploads.title" = "File Uploads"; +"php_ini.file_uploads.description" = "Enable or disable file uploads entirely. It is recommended to keep this on."; +"php_ini.upload_max_filesize.title" = "Upload Max Size"; +"php_ini.upload_max_filesize.description" = "The maximum size of an uploaded file. POST Max Size must be larger than this value."; // PHPMAN @@ -786,13 +795,3 @@ Please note that some features (greyed out below) are currently unavailable beca "onboarding.tour.feature_unavailable" = "This feature is currently unavailable and requires Laravel Valet to be installed."; "onboarding.tour.once" = "You will only see the Welcome Tour once. You can re-open the Welcome Tour later via the menu bar icon (available in the menu, under First Aid & Services)."; "onboarding.tour.close" = "Close Tour"; - -// CONFIGURATION MANAGER - -"confman.title" = "Configuration Manager"; -"confman.description" = "You can update configuration values for the currently active PHP version."; - -"php_ini.memory_limit.title" = "Memory Limit"; -"php_ini.post_max_size.title" = "POST Max Size"; -"php_ini.file_uploads.title" = "File Uploads"; -"php_ini.upload_max_filesize.title" = "Upload Max Size"; From eb566bb52338ba212c8ab7949d8ddf477bcf042e Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Thu, 31 Aug 2023 19:05:40 +0200 Subject: [PATCH 23/34] =?UTF-8?q?=E2=9C=A8=20Allow=20pre-release=20builds?= =?UTF-8?q?=20to=20be=20installed?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- phpmon/Common/Core/Constants.swift | 15 ++++++++++++--- phpmon/Domain/Integrations/Homebrew/Brew.swift | 1 + .../Integrations/Homebrew/BrewFormula.swift | 17 +++++++++++++++++ .../Homebrew/BrewFormulaeHandler.swift | 3 ++- .../Data/Fake/FakeBrewFormulaeHandler.swift | 7 +++++++ .../UI/PhpVersionManagerView.swift | 16 +++++++++++++++- phpmon/en.lproj/Localizable.strings | 1 + 7 files changed, 55 insertions(+), 5 deletions(-) diff --git a/phpmon/Common/Core/Constants.swift b/phpmon/Common/Core/Constants.swift index 8fbef999..eeb9fd94 100644 --- a/phpmon/Common/Core/Constants.swift +++ b/phpmon/Common/Core/Constants.swift @@ -18,6 +18,13 @@ struct Constants { */ static let MinimumRecommendedValetVersion = "2.16.2" + /** + * The PHP versions that are considered pre-release versions. + */ + static let ExperimentalPhpVersions: Set = [ + "8.3", "8.4" + ] + /** * The PHP versions supported by this application. * Any other PHP versions are considered invalid. @@ -25,7 +32,9 @@ struct Constants { static let DetectedPhpVersions: Set = [ "5.6", "7.0", "7.1", "7.2", "7.3", "7.4", - "8.0", "8.1", "8.2", "8.3" + "8.0", "8.1", "8.2", + "8.3", + "8.4" ] /** @@ -42,13 +51,13 @@ struct Constants { [ "7.0", "7.1", "7.2", "7.3", "7.4", "8.0", "8.1", "8.2", - "8.3" // dev + "8.3", "8.4" // dev ], 4: // Valet v4 dropped support for v7.0 [ "7.1", "7.2", "7.3", "7.4", "8.0", "8.1", "8.2", - "8.3" // dev + "8.3", "8.4" // dev ] ] diff --git a/phpmon/Domain/Integrations/Homebrew/Brew.swift b/phpmon/Domain/Integrations/Homebrew/Brew.swift index 5d94ac8d..4ea90d36 100644 --- a/phpmon/Domain/Integrations/Homebrew/Brew.swift +++ b/phpmon/Domain/Integrations/Homebrew/Brew.swift @@ -45,6 +45,7 @@ class Brew { /// Each formula for each PHP version that can be installed. public static let phpVersionFormulae = [ + "8.3": "shivammathur/php/php@8.3", "8.2": "php@8.2", "8.1": "php@8.1", "8.0": "php@8.0", diff --git a/phpmon/Domain/Integrations/Homebrew/BrewFormula.swift b/phpmon/Domain/Integrations/Homebrew/BrewFormula.swift index 140cae04..32912127 100644 --- a/phpmon/Domain/Integrations/Homebrew/BrewFormula.swift +++ b/phpmon/Domain/Integrations/Homebrew/BrewFormula.swift @@ -21,11 +21,28 @@ struct BrewFormula { /// The upgrade that is currently available, if it exists. let upgradeVersion: String? + /// Whether this formula is a stable version of PHP. + let prerelease: Bool + /// Whether the formula is currently installed. var isInstalled: Bool { return installedVersion != nil } + init( + name: String, + displayName: String, + installedVersion: String?, + upgradeVersion: String?, + prerelease: Bool = false + ) { + self.name = name + self.displayName = displayName + self.installedVersion = installedVersion + self.upgradeVersion = upgradeVersion + self.prerelease = prerelease + } + /// Whether the formula can be upgraded. var hasUpgrade: Bool { return upgradeVersion != nil diff --git a/phpmon/Domain/Integrations/Homebrew/BrewFormulaeHandler.swift b/phpmon/Domain/Integrations/Homebrew/BrewFormulaeHandler.swift index 9fb0cd42..83cddc82 100644 --- a/phpmon/Domain/Integrations/Homebrew/BrewFormulaeHandler.swift +++ b/phpmon/Domain/Integrations/Homebrew/BrewFormulaeHandler.swift @@ -56,7 +56,8 @@ class BrewFormulaeHandler: HandlesBrewFormulae { name: formula, displayName: "PHP \(version)", installedVersion: fullVersion, - upgradeVersion: upgradeVersion + upgradeVersion: upgradeVersion, + prerelease: Constants.ExperimentalPhpVersions.contains(version) ) }.sorted { $0.displayName > $1.displayName } } diff --git a/phpmon/Modules/PHP Version Manager/Data/Fake/FakeBrewFormulaeHandler.swift b/phpmon/Modules/PHP Version Manager/Data/Fake/FakeBrewFormulaeHandler.swift index 759fdd1f..1565e85b 100644 --- a/phpmon/Modules/PHP Version Manager/Data/Fake/FakeBrewFormulaeHandler.swift +++ b/phpmon/Modules/PHP Version Manager/Data/Fake/FakeBrewFormulaeHandler.swift @@ -11,6 +11,13 @@ import Foundation class FakeBrewFormulaeHandler: HandlesBrewFormulae { public func loadPhpVersions(loadOutdated: Bool) async -> [BrewFormula] { return [ + BrewFormula( + name: "php", + displayName: "PHP 8.3", + installedVersion: nil, + upgradeVersion: "8.3.0", + prerelease: true + ), BrewFormula( name: "php", displayName: "PHP 8.2", diff --git a/phpmon/Modules/PHP Version Manager/UI/PhpVersionManagerView.swift b/phpmon/Modules/PHP Version Manager/UI/PhpVersionManagerView.swift index 94a190ae..bf0e3b69 100644 --- a/phpmon/Modules/PHP Version Manager/UI/PhpVersionManagerView.swift +++ b/phpmon/Modules/PHP Version Manager/UI/PhpVersionManagerView.swift @@ -135,7 +135,21 @@ struct PhpVersionManagerView: View { .foregroundColor(formula.iconColor) .padding(.horizontal, 5) VStack(alignment: .leading, spacing: 2) { - Text(formula.displayName).bold() + HStack { + Text(formula.displayName).bold() + + if formula.prerelease { + Text("phpman.version.prerelease".localized.uppercased()) + .font(.system(size: 9)) + .padding(.horizontal, 5) + .padding(.vertical, 1) + .background(Color.appPrimary) + .foregroundColor(Color.white) + .clipShape(Capsule()) + .fixedSize(horizontal: true, vertical: true) + .frame(maxHeight: 7) + } + } if formula.isInstalled && formula.hasUpgrade { Text("phpman.version.has_update".localized( diff --git a/phpmon/en.lproj/Localizable.strings b/phpmon/en.lproj/Localizable.strings index 3fedc243..5a3f415a 100644 --- a/phpmon/en.lproj/Localizable.strings +++ b/phpmon/en.lproj/Localizable.strings @@ -108,6 +108,7 @@ "phpman.buttons.install" = "Install"; "phpman.buttons.update" = "Update"; "phpman.buttons.repair" = "Repair"; +"phpman.version.prerelease" = "Pre-release"; "phpman.title" = "PHP Version Manager"; "phpman.description" = "**PHP Version Manager** lets you install, upgrade and delete different PHP versions via Homebrew without needing to run the commands in the terminal yourself."; From f9acbd34d067771fa7254d6b541f9ceedb2de226 Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Fri, 1 Sep 2023 01:00:43 +0200 Subject: [PATCH 24/34] =?UTF-8?q?=F0=9F=91=8C=20Various=20fixes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Fixed issue with Version Manager - Separate behaviour for previews for Version Manager - Remove verbose logging when previews are in use (Note: The latter change may break various other previews. Will need to investigate this particular issue.) --- phpmon/Common/Core/Paths.swift | 5 +++- phpmon/Domain/App/AppDelegate.swift | 15 ++++++++--- .../Data/Fake/FakeBrewFormulaeHandler.swift | 10 ++++++- .../UI/PhpVersionManagerView.swift | 26 ++++++++++++------- 4 files changed, 40 insertions(+), 16 deletions(-) diff --git a/phpmon/Common/Core/Paths.swift b/phpmon/Common/Core/Paths.swift index fffecb52..41bfda90 100644 --- a/phpmon/Common/Core/Paths.swift +++ b/phpmon/Common/Core/Paths.swift @@ -31,7 +31,10 @@ public class Paths { } userName = identity() - Log.info("The current username is `\(userName)`.") + + if !isRunningSwiftUIPreview { + Log.info("The current username is `\(userName)`.") + } } public func detectBinaryPaths() { diff --git a/phpmon/Domain/App/AppDelegate.swift b/phpmon/Domain/App/AppDelegate.swift index ca73addb..d7362518 100644 --- a/phpmon/Domain/App/AppDelegate.swift +++ b/phpmon/Domain/App/AppDelegate.swift @@ -88,10 +88,12 @@ class AppDelegate: NSObject, NSApplicationDelegate, UNUserNotificationCenterDele Log.info("Extra CLI mode is on (`~/.config/phpmon/verbose` exists).") } - Log.separator(as: .info) - Log.info("PHP MONITOR by Nico Verbruggen") - Log.info("Version \(App.version)") - Log.separator(as: .info) + if !isRunningSwiftUIPreview { + Log.separator(as: .info) + Log.info("PHP MONITOR by Nico Verbruggen") + Log.info("Version \(App.version)") + Log.separator(as: .info) + } self.state = App.shared self.menu = MainMenu.shared @@ -118,6 +120,11 @@ class AppDelegate: NSObject, NSApplicationDelegate, UNUserNotificationCenterDele startup procedure. */ func applicationDidFinishLaunching(_ aNotification: Notification) { + // Prevent previews from kicking off a costly boot + if isRunningSwiftUIPreview { + return + } + // Make sure notifications will work setupNotifications() diff --git a/phpmon/Modules/PHP Version Manager/Data/Fake/FakeBrewFormulaeHandler.swift b/phpmon/Modules/PHP Version Manager/Data/Fake/FakeBrewFormulaeHandler.swift index 1565e85b..0107f581 100644 --- a/phpmon/Modules/PHP Version Manager/Data/Fake/FakeBrewFormulaeHandler.swift +++ b/phpmon/Modules/PHP Version Manager/Data/Fake/FakeBrewFormulaeHandler.swift @@ -9,10 +9,18 @@ import Foundation class FakeBrewFormulaeHandler: HandlesBrewFormulae { + // swiftlint:disable function_body_length public func loadPhpVersions(loadOutdated: Bool) async -> [BrewFormula] { return [ BrewFormula( - name: "php", + name: "php@9.9", + displayName: "PHP 9.9", + installedVersion: nil, + upgradeVersion: "9.9.0", + prerelease: true + ), + BrewFormula( + name: "php@8.3", displayName: "PHP 8.3", installedVersion: nil, upgradeVersion: "8.3.0", diff --git a/phpmon/Modules/PHP Version Manager/UI/PhpVersionManagerView.swift b/phpmon/Modules/PHP Version Manager/UI/PhpVersionManagerView.swift index bf0e3b69..eb72ea2c 100644 --- a/phpmon/Modules/PHP Version Manager/UI/PhpVersionManagerView.swift +++ b/phpmon/Modules/PHP Version Manager/UI/PhpVersionManagerView.swift @@ -28,8 +28,15 @@ struct PhpVersionManagerView: View { description: "phpman.busy.description.outdated".localized ) - Task { [self] in - await self.initialLoad() + if handler is FakeBrewFormulaeHandler { + Task { [self] in + await self.handler.refreshPhpVersions(loadOutdated: false) + self.status.busy = false + } + } else { + Task { [self] in + await self.initialLoad() + } } } @@ -127,7 +134,7 @@ struct PhpVersionManagerView: View { BlockingOverlayView(busy: self.status.busy, title: self.status.title, text: self.status.description) { List(Array(formulae.phpVersions.enumerated()), id: \.1.name) { (index, formula) in - HStack { + HStack(alignment: .center, spacing: 7.0) { Image(systemName: formula.icon) .resizable() .aspectRatio(contentMode: .fit) @@ -143,11 +150,10 @@ struct PhpVersionManagerView: View { .font(.system(size: 9)) .padding(.horizontal, 5) .padding(.vertical, 1) - .background(Color.appPrimary) + .background(Color.orange) .foregroundColor(Color.white) .clipShape(Capsule()) .fixedSize(horizontal: true, vertical: true) - .frame(maxHeight: 7) } } @@ -192,12 +198,12 @@ struct PhpVersionManagerView: View { } } } - .listRowBackground(index % 2 == 0 - ? Color.gray.opacity(0) - : Color.gray.opacity(0.08) - ) - .padding(.vertical, 10) + .listRowBackground(index % 2 == 0 ? Color.gray.opacity(0): Color.gray.opacity(0.08)) + .padding(.vertical, 8) + .padding(.horizontal, 8) } + .edgesIgnoringSafeArea(.top) + .listStyle(PlainListStyle()) } }.frame(width: 600, height: 600) } From aebfc9dd098e3d6918de7054d3b88232fdddf320 Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Fri, 1 Sep 2023 01:09:59 +0200 Subject: [PATCH 25/34] =?UTF-8?q?=F0=9F=91=8C=20Domain=20column=20now=20so?= =?UTF-8?q?rts=20based=20on=20name=20(#259)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- phpmon/Modules/Domain List/UI/DomainListVC.swift | 2 +- .../Modules/PHP Version Manager/UI/PhpVersionManagerView.swift | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/phpmon/Modules/Domain List/UI/DomainListVC.swift b/phpmon/Modules/Domain List/UI/DomainListVC.swift index a119710d..ac9623cd 100644 --- a/phpmon/Modules/Domain List/UI/DomainListVC.swift +++ b/phpmon/Modules/Domain List/UI/DomainListVC.swift @@ -188,7 +188,7 @@ class DomainListVC: NSViewController, NSTableViewDelegate, NSTableViewDataSource switch descriptor.key { case "Secure": sorted = self.domains.sorted { $0.getListableSecured() && !$1.getListableSecured() } - case "Domain": sorted = self.domains.sorted { $0.getListableAbsolutePath() < $1.getListableAbsolutePath() } + case "Domain": sorted = self.domains.sorted { $0.getListableName() < $1.getListableName() } case "PHP": sorted = self.domains.sorted { $0.getListablePhpVersion() < $1.getListablePhpVersion() } case "Kind": sorted = self.domains.sorted { $0.getListableKind() < $1.getListableKind() } case "Type": sorted = self.domains.sorted { $0.getListableType() < $1.getListableType() } diff --git a/phpmon/Modules/PHP Version Manager/UI/PhpVersionManagerView.swift b/phpmon/Modules/PHP Version Manager/UI/PhpVersionManagerView.swift index eb72ea2c..eeef83b2 100644 --- a/phpmon/Modules/PHP Version Manager/UI/PhpVersionManagerView.swift +++ b/phpmon/Modules/PHP Version Manager/UI/PhpVersionManagerView.swift @@ -150,7 +150,7 @@ struct PhpVersionManagerView: View { .font(.system(size: 9)) .padding(.horizontal, 5) .padding(.vertical, 1) - .background(Color.orange) + .background(Color.appPrimary) .foregroundColor(Color.white) .clipShape(Capsule()) .fixedSize(horizontal: true, vertical: true) From 51c100f6fef7cce674c5a61a8efc5e52fdcf1f48 Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Fri, 1 Sep 2023 01:11:38 +0200 Subject: [PATCH 26/34] =?UTF-8?q?=F0=9F=91=8C=20Ensure=20all=20fields=20er?= =?UTF-8?q?ror=20out=20(#258)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- phpmon/Domain/SwiftUI/Menu/StatsView.swift | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/phpmon/Domain/SwiftUI/Menu/StatsView.swift b/phpmon/Domain/SwiftUI/Menu/StatsView.swift index 1cd36381..edf84560 100644 --- a/phpmon/Domain/SwiftUI/Menu/StatsView.swift +++ b/phpmon/Domain/SwiftUI/Menu/StatsView.swift @@ -37,8 +37,8 @@ struct StatsView: View { public func hasErrorState() -> Bool { return self.memoryLimit == "⚠️" - || self.maxPostSize == "⚠️" - || self.maxUploadSize == "⚠️" + && self.maxPostSize == "⚠️" + && self.maxUploadSize == "⚠️" } var body: some View { From 7977a4e1770959774ce74942365d89205682d04c Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Mon, 4 Sep 2023 18:39:32 +0200 Subject: [PATCH 27/34] =?UTF-8?q?=F0=9F=8F=97=EF=B8=8F=20WIP:=20Reading=20?= =?UTF-8?q?of=20bitsize=20config=20entries?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- PHP Monitor.xcodeproj/project.pbxproj | 45 +++++++++-- .../Common/Extensions/StringExtension.swift | 6 ++ .../{en.lproj => Base.lproj}/Main.storyboard | 0 .../Data/BytePhpPreference.swift | 75 +++++++++++++++++++ .../Data/PhpPreference.swift | 26 +++++++ .../PHP Config Editor/UI/ByteLimitView.swift | 59 +++++++++------ .../UI/ConfigManagerView.swift | 28 +------ .../Config/BytePhpPreferenceTest.swift | 42 +++++++++++ .../PhpConfigurationFileTest.swift} | 4 +- 9 files changed, 226 insertions(+), 59 deletions(-) rename phpmon/Domain/App/{en.lproj => Base.lproj}/Main.storyboard (100%) create mode 100644 phpmon/Modules/PHP Config Editor/Data/BytePhpPreference.swift create mode 100644 phpmon/Modules/PHP Config Editor/Data/PhpPreference.swift create mode 100644 tests/unit/Parsers/Config/BytePhpPreferenceTest.swift rename tests/unit/Parsers/{PhpConfigurationTest.swift => Config/PhpConfigurationFileTest.swift} (96%) diff --git a/PHP Monitor.xcodeproj/project.pbxproj b/PHP Monitor.xcodeproj/project.pbxproj index 7bc490bc..f0bb1aaa 100644 --- a/PHP Monitor.xcodeproj/project.pbxproj +++ b/PHP Monitor.xcodeproj/project.pbxproj @@ -197,6 +197,15 @@ C4551657297AED18009B8466 /* ValetRcTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4551656297AED18009B8466 /* ValetRcTest.swift */; }; C4551659297AED7D009B8466 /* valetrc.valid in Resources */ = {isa = PBXBuildFile; fileRef = C4551658297AED7D009B8466 /* valetrc.valid */; }; C455165B297AEDB5009B8466 /* valetrc.broken in Resources */ = {isa = PBXBuildFile; fileRef = C455165A297AEDB5009B8466 /* valetrc.broken */; }; + C456A0C62AA614BD0080144F /* PhpPreference.swift in Sources */ = {isa = PBXBuildFile; fileRef = C456A0C52AA614BD0080144F /* PhpPreference.swift */; }; + C456A0C72AA614BD0080144F /* PhpPreference.swift in Sources */ = {isa = PBXBuildFile; fileRef = C456A0C52AA614BD0080144F /* PhpPreference.swift */; }; + C456A0C82AA614BD0080144F /* PhpPreference.swift in Sources */ = {isa = PBXBuildFile; fileRef = C456A0C52AA614BD0080144F /* PhpPreference.swift */; }; + C456A0C92AA614BD0080144F /* PhpPreference.swift in Sources */ = {isa = PBXBuildFile; fileRef = C456A0C52AA614BD0080144F /* PhpPreference.swift */; }; + C456A0CB2AA6166F0080144F /* BytePhpPreference.swift in Sources */ = {isa = PBXBuildFile; fileRef = C456A0CA2AA6166F0080144F /* BytePhpPreference.swift */; }; + C456A0CC2AA6166F0080144F /* BytePhpPreference.swift in Sources */ = {isa = PBXBuildFile; fileRef = C456A0CA2AA6166F0080144F /* BytePhpPreference.swift */; }; + C456A0CD2AA6166F0080144F /* BytePhpPreference.swift in Sources */ = {isa = PBXBuildFile; fileRef = C456A0CA2AA6166F0080144F /* BytePhpPreference.swift */; }; + C456A0CE2AA6166F0080144F /* BytePhpPreference.swift in Sources */ = {isa = PBXBuildFile; fileRef = C456A0CA2AA6166F0080144F /* BytePhpPreference.swift */; }; + C456A0D22AA6179D0080144F /* BytePhpPreferenceTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = C456A0D12AA6179D0080144F /* BytePhpPreferenceTest.swift */; }; C459B4BD27F6093700E9B4B4 /* nginx-proxy.test in Resources */ = {isa = PBXBuildFile; fileRef = C459B4BC27F6093700E9B4B4 /* nginx-proxy.test */; }; C45B9149295607F400F4EC78 /* Service.swift in Sources */ = {isa = PBXBuildFile; fileRef = C45B9148295607F400F4EC78 /* Service.swift */; }; C45B914A295607F400F4EC78 /* Service.swift in Sources */ = {isa = PBXBuildFile; fileRef = C45B9148295607F400F4EC78 /* Service.swift */; }; @@ -239,7 +248,7 @@ C46FA23F246C358E00944F05 /* StringExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = C46FA23E246C358E00944F05 /* StringExtension.swift */; }; C46FA9882822EFDC00D78807 /* PhpConfigurationFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = C46FA9872822EFDC00D78807 /* PhpConfigurationFile.swift */; }; C46FA9892822EFDC00D78807 /* PhpConfigurationFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = C46FA9872822EFDC00D78807 /* PhpConfigurationFile.swift */; }; - C46FA98C2822F08F00D78807 /* PhpConfigurationTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = C46FA98A2822F08F00D78807 /* PhpConfigurationTest.swift */; }; + C46FA98C2822F08F00D78807 /* PhpConfigurationFileTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = C46FA98A2822F08F00D78807 /* PhpConfigurationFileTest.swift */; }; C4709CA228524B3400088BB8 /* StatsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4709CA128524B3400088BB8 /* StatsView.swift */; }; C471E79328F9B21F0021E251 /* ActiveFileSystem.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4C8900628F0E3EF00CE5E97 /* ActiveFileSystem.swift */; }; C471E79428F9B23B0021E251 /* FileSystemProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4C8900228F0E28800CE5E97 /* FileSystemProtocol.swift */; }; @@ -896,6 +905,7 @@ C417DC73277614690015E6EE /* Helpers.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Helpers.swift; sourceTree = ""; }; C4181F1028FAF9330042EA28 /* UITestCase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UITestCase.swift; sourceTree = ""; }; C41ADCE72970CCC700120423 /* FSNotifier.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FSNotifier.swift; sourceTree = ""; }; + C41B5AF02AA226CD00BB633C /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; C41C02A827E61A65009F26CB /* FakeValetSite.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FakeValetSite.swift; sourceTree = ""; }; C41C1B3322B0097F00E7CF16 /* PHP Monitor.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "PHP Monitor.app"; sourceTree = BUILT_PRODUCTS_DIR; }; C41C1B3622B0097F00E7CF16 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; @@ -952,6 +962,9 @@ C4551656297AED18009B8466 /* ValetRcTest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ValetRcTest.swift; sourceTree = ""; }; C4551658297AED7D009B8466 /* valetrc.valid */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = valetrc.valid; sourceTree = ""; }; C455165A297AEDB5009B8466 /* valetrc.broken */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = valetrc.broken; sourceTree = ""; }; + C456A0C52AA614BD0080144F /* PhpPreference.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhpPreference.swift; sourceTree = ""; }; + C456A0CA2AA6166F0080144F /* BytePhpPreference.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BytePhpPreference.swift; sourceTree = ""; }; + C456A0D12AA6179D0080144F /* BytePhpPreferenceTest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BytePhpPreferenceTest.swift; sourceTree = ""; }; C459B4BC27F6093700E9B4B4 /* nginx-proxy.test */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "nginx-proxy.test"; sourceTree = ""; }; C45B9148295607F400F4EC78 /* Service.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Service.swift; sourceTree = ""; }; C45B914D295608E300F4EC78 /* ValetServicesManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ValetServicesManager.swift; sourceTree = ""; }; @@ -971,7 +984,7 @@ C46EBC4928DB966A007ACC74 /* TestableShell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestableShell.swift; sourceTree = ""; }; C46FA23E246C358E00944F05 /* StringExtension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StringExtension.swift; sourceTree = ""; }; C46FA9872822EFDC00D78807 /* PhpConfigurationFile.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhpConfigurationFile.swift; sourceTree = ""; }; - C46FA98A2822F08F00D78807 /* PhpConfigurationTest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhpConfigurationTest.swift; sourceTree = ""; }; + C46FA98A2822F08F00D78807 /* PhpConfigurationFileTest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhpConfigurationFileTest.swift; sourceTree = ""; }; C4709CA128524B3400088BB8 /* StatsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StatsView.swift; sourceTree = ""; }; C471E79228F9B1D30021E251 /* PHP Monitor.xctestplan */ = {isa = PBXFileReference; lastKnownFileType = text; path = "PHP Monitor.xctestplan"; sourceTree = ""; }; C471E7AD28F9B4940021E251 /* Feature Tests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "Feature Tests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -1063,7 +1076,6 @@ C4D9ADC7277611A0007277F4 /* InternalSwitcher.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InternalSwitcher.swift; sourceTree = ""; }; C4D9F24A280B69E100DCD39A /* AddProxyVC.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AddProxyVC.swift; sourceTree = ""; }; C4DD662A2A4A1B4E00D6A731 /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/Localizable.strings; sourceTree = ""; }; - C4DD662B2A4A1E5B00D6A731 /* en */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = en; path = en.lproj/Main.storyboard; sourceTree = ""; }; C4DEB7D327A5D60B00834718 /* Stats.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Stats.swift; sourceTree = ""; }; C4E0F7EC27BEBDA9007475F2 /* NSWindowExtension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NSWindowExtension.swift; sourceTree = ""; }; C4E2E84628FC1D8C003B070C /* TestableConfigurationTest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestableConfigurationTest.swift; sourceTree = ""; }; @@ -1527,6 +1539,8 @@ C44DFA842A6706C900B98ED5 /* Data */ = { isa = PBXGroup; children = ( + C456A0C52AA614BD0080144F /* PhpPreference.swift */, + C456A0CA2AA6166F0080144F /* BytePhpPreference.swift */, ); path = Data; sourceTree = ""; @@ -1563,6 +1577,15 @@ path = phpmon; sourceTree = ""; }; + C456A0D02AA6175D0080144F /* Config */ = { + isa = PBXGroup; + children = ( + C46FA98A2822F08F00D78807 /* PhpConfigurationFileTest.swift */, + C456A0D12AA6179D0080144F /* BytePhpPreferenceTest.swift */, + ); + path = Config; + sourceTree = ""; + }; C459B4BE27F6093A00E9B4B4 /* nginx */ = { isa = PBXGroup; children = ( @@ -1893,9 +1916,9 @@ C4C1019727C65A11001FACC2 /* Parsers */ = { isa = PBXGroup; children = ( + C456A0D02AA6175D0080144F /* Config */, C4AF9F76275447F100D44ED0 /* ValetConfigurationTest.swift */, C4F780AD25D80B37000DBC97 /* PhpExtensionTest.swift */, - C46FA98A2822F08F00D78807 /* PhpConfigurationTest.swift */, C43A8A2325D9D20D00591B77 /* HomebrewPackageTest.swift */, C42CFB1927DFE8BD00862737 /* NginxConfigurationTest.swift */, C4551656297AED18009B8466 /* ValetRcTest.swift */, @@ -2225,6 +2248,7 @@ nl, de, "pt-PT", + Base, ); mainGroup = C41C1B2A22B0097F00E7CF16; packageReferences = ( @@ -2423,6 +2447,7 @@ C40FE737282ABA4F00A302C2 /* AppVersion.swift in Sources */, C44A874828905BB000498BC4 /* ProgressVC.swift in Sources */, C4CCBA6C275C567B008C7055 /* PMWindowController.swift in Sources */, + C456A0C62AA614BD0080144F /* PhpPreference.swift in Sources */, C4B585442770FE3900DA4FBE /* RealCommand.swift in Sources */, C44067F527E2582B0045BD4E /* DomainListNameCell.swift in Sources */, C40C5C9C2846A40600E28255 /* Preset.swift in Sources */, @@ -2449,6 +2474,7 @@ 54B48B5F275F66AE006D90C5 /* Application.swift in Sources */, C4B97B78275CF1B5003F3378 /* App+ActivationPolicy.swift in Sources */, C4CE3BB827B31F2E0086CA49 /* MainMenu+Switcher.swift in Sources */, + C456A0CB2AA6166F0080144F /* BytePhpPreference.swift in Sources */, C415937F27A1B54F00D2E1B7 /* PhpFrameworks.swift in Sources */, C4811D2422D70A4700B5F6B3 /* App.swift in Sources */, C44DFA7C2A67043000B98ED5 /* ConfigManagerView.swift in Sources */, @@ -2567,6 +2593,7 @@ C471E83428F9BB650021E251 /* VersionExtractor.swift in Sources */, C471E83528F9BB650021E251 /* ValetProxy.swift in Sources */, C471E83728F9BB650021E251 /* DomainScanner.swift in Sources */, + C456A0C82AA614BD0080144F /* PhpPreference.swift in Sources */, C490E3BE29BCA375006D2DE6 /* Measurements.swift in Sources */, C471E83928F9BB650021E251 /* ValetSite.swift in Sources */, C471E83A28F9BB650021E251 /* FakeValetSite.swift in Sources */, @@ -2674,6 +2701,7 @@ C471E88D28F9BB650021E251 /* Key.swift in Sources */, C471E88E28F9BB650021E251 /* KeyCombo.swift in Sources */, C471E88F28F9BB650021E251 /* ModifierFlagsExtension.swift in Sources */, + C456A0CD2AA6166F0080144F /* BytePhpPreference.swift in Sources */, C471E7E928F9BAC20021E251 /* Paths.swift in Sources */, C45B91552956123A00F4EC78 /* FakeServicesManager.swift in Sources */, C471E7FE28F9BACE0021E251 /* HomebrewDecodable.swift in Sources */, @@ -2819,6 +2847,7 @@ C471E8C928F9BB8F0021E251 /* PhpDoctorWindowController.swift in Sources */, C41ADCEB2970CCC700120423 /* FSNotifier.swift in Sources */, C471E8CA28F9BB8F0021E251 /* OnboardingWindowController.swift in Sources */, + C456A0C92AA614BD0080144F /* PhpPreference.swift in Sources */, C4D4CB3A29C109CF00DB9F93 /* InternalSwitcher+Valet.swift in Sources */, C471E8CB28F9BB8F0021E251 /* PreferencesWindowController.swift in Sources */, C471E8CC28F9BB8F0021E251 /* PreferencesWindowController+Hotkey.swift in Sources */, @@ -2858,6 +2887,7 @@ C471E8EA28F9BB8F0021E251 /* SectionHeaderView.swift in Sources */, C4D36604291132B7006BD146 /* ValetScanners.swift in Sources */, C471E8EB28F9BB8F0021E251 /* HeaderView.swift in Sources */, + C456A0CE2AA6166F0080144F /* BytePhpPreference.swift in Sources */, C4FD87A829AB9ABD0002D701 /* PhpConfigChecker.swift in Sources */, C45B9151295608E300F4EC78 /* ValetServicesManager.swift in Sources */, C471E8EC28F9BB8F0021E251 /* SwiftUIHelper.swift in Sources */, @@ -3000,7 +3030,7 @@ C4CCBA6D275C567B008C7055 /* PMWindowController.swift in Sources */, C4B5635F276AB09000F12CCB /* VersionExtractor.swift in Sources */, C463E381284930EE00422731 /* PresetHelper.swift in Sources */, - C46FA98C2822F08F00D78807 /* PhpConfigurationTest.swift in Sources */, + C46FA98C2822F08F00D78807 /* PhpConfigurationFileTest.swift in Sources */, C4D5576529C77CC5001A44CD /* PhpVersionManagerWindowController.swift in Sources */, C4BF90C127C57C220054E78C /* MainMenu+FixMyValet.swift in Sources */, C4E49DEB28F7643D0026AC4E /* CommandProtocol.swift in Sources */, @@ -3008,6 +3038,7 @@ C485707428BF454E00539B36 /* ServicesView.swift in Sources */, C4B79EC729CA474200A483EE /* FakeCommand.swift in Sources */, C4F780AE25D80B37000DBC97 /* PhpExtensionTest.swift in Sources */, + C456A0C72AA614BD0080144F /* PhpPreference.swift in Sources */, C4C8E819276F54D8003AC782 /* App+ConfigWatch.swift in Sources */, C4FC21B128391F8E00D368BB /* MainMenu+Actions.swift in Sources */, 54D9E0B927E4F51E003B9AD9 /* KeyCombo.swift in Sources */, @@ -3077,6 +3108,7 @@ C4E2E84B28FC1E70003B070C /* DataExtension.swift in Sources */, C449B4F127EE7FC200C47E8A /* DomainListNameCell.swift in Sources */, C4F780BA25D80B62000DBC97 /* AppDelegate.swift in Sources */, + C456A0D22AA6179D0080144F /* BytePhpPreferenceTest.swift in Sources */, 54FCFD31276C8DA4004CE748 /* HotkeyPreferenceView.swift in Sources */, C4998F0B2617633900B2526E /* PreferencesWindowController.swift in Sources */, C485707228BF453800539B36 /* SwiftUIHelper.swift in Sources */, @@ -3111,6 +3143,7 @@ C4927F0C27B2DFC200C55AFD /* Errors.swift in Sources */, C485707628BF455100539B36 /* SectionHeaderView.swift in Sources */, C46EBC4828DB9644007ACC74 /* RealShell.swift in Sources */, + C456A0CC2AA6166F0080144F /* BytePhpPreference.swift in Sources */, C48DDD0E29C75C9E00D032D9 /* BlockingOverlayView.swift in Sources */, C4E4404727C56F4700D225E1 /* ValetSite.swift in Sources */, C44CCD4A27AFF3BC00CE40E5 /* MainMenu+Async.swift in Sources */, @@ -3169,7 +3202,7 @@ C41C1B3C22B0098000E7CF16 /* Main.storyboard */ = { isa = PBXVariantGroup; children = ( - C4DD662B2A4A1E5B00D6A731 /* en */, + C41B5AF02AA226CD00BB633C /* Base */, ); name = Main.storyboard; sourceTree = ""; diff --git a/phpmon/Common/Extensions/StringExtension.swift b/phpmon/Common/Extensions/StringExtension.swift index d98ac582..cc7afb55 100644 --- a/phpmon/Common/Extensions/StringExtension.swift +++ b/phpmon/Common/Extensions/StringExtension.swift @@ -131,4 +131,10 @@ extension String { return "" } } + + var isNumber: Bool { + return self.range( + of: "^[0-9]*$", // 1 + options: .regularExpression) != nil + } } diff --git a/phpmon/Domain/App/en.lproj/Main.storyboard b/phpmon/Domain/App/Base.lproj/Main.storyboard similarity index 100% rename from phpmon/Domain/App/en.lproj/Main.storyboard rename to phpmon/Domain/App/Base.lproj/Main.storyboard diff --git a/phpmon/Modules/PHP Config Editor/Data/BytePhpPreference.swift b/phpmon/Modules/PHP Config Editor/Data/BytePhpPreference.swift new file mode 100644 index 00000000..5a4adc38 --- /dev/null +++ b/phpmon/Modules/PHP Config Editor/Data/BytePhpPreference.swift @@ -0,0 +1,75 @@ +// +// BytePhpPreference.swift +// PHP Monitor +// +// Created by Nico Verbruggen on 04/09/2023. +// Copyright © 2023 Nico Verbruggen. All rights reserved. +// + +import Foundation + +class BytePhpPreference: PhpPreference { + enum UnitOption: String, CaseIterable { + case kilobyte = "K" + case megabyte = "M" + case gigabyte = "G" + + public var displayValue: String { + switch self { + case .kilobyte: return "KB" + case .megabyte: return "MB" + case .gigabyte: return "GB" + } + } + } + + // MARK: Internal Values + + var internalValue: String + + var value: Int = 256 { + didSet { updatedFieldValue() } + } + + var unit: UnitOption = .megabyte { + didSet { updatedFieldValue() } + } + + override init(key: String) { + let value = Command.execute( + path: Paths.php, arguments: ["-r", "echo ini_get('\(key)');"], + trimNewlines: false + ) + + self.internalValue = value + if let (unit, value) = BytePhpPreference.readFrom(internalValue: self.internalValue) { + self.unit = unit + self.value = value + } + super.init(key: key) + } + + // MARK: Save Value + + private func updatedFieldValue() { + internalValue = "\(value)\(unit.rawValue)" + } + + public static func readFrom(internalValue: String) -> (UnitOption, Int)? { + let pattern = "(-?\\d+)([KMG]?)" + let regex = try! NSRegularExpression(pattern: pattern, options: .caseInsensitive) + let range = NSRange(location: 0, length: internalValue.utf16.count) + + if let match = regex.firstMatch(in: internalValue, options: [], range: range) { + let valueRange = match.range(at: 1) + let unitRange = match.range(at: 2) + + if let value = Int(internalValue[Range(valueRange, in: internalValue)!]) { + let unitString = internalValue[Range(unitRange, in: internalValue)!] as String + return (UnitOption(rawValue: unitString) ?? UnitOption.kilobyte, value) + } + } + + return nil + } +} diff --git a/phpmon/Modules/PHP Config Editor/Data/PhpPreference.swift b/phpmon/Modules/PHP Config Editor/Data/PhpPreference.swift new file mode 100644 index 00000000..b49dea09 --- /dev/null +++ b/phpmon/Modules/PHP Config Editor/Data/PhpPreference.swift @@ -0,0 +1,26 @@ +// +// PhpPreference.swift +// PHP Monitor +// +// Created by Nico Verbruggen on 04/09/2023. +// Copyright © 2023 Nico Verbruggen. All rights reserved. +// + +import Foundation +import SwiftUI + +class PhpPreference { + let key: String + + init(key: String) { + self.key = key + } +} + +class BoolPhpPreference: PhpPreference { + @State var value: Bool = true +} + +class StringPhpPreference: PhpPreference { + @State var value: String = "" +} diff --git a/phpmon/Modules/PHP Config Editor/UI/ByteLimitView.swift b/phpmon/Modules/PHP Config Editor/UI/ByteLimitView.swift index aeca6a2a..71cababf 100644 --- a/phpmon/Modules/PHP Config Editor/UI/ByteLimitView.swift +++ b/phpmon/Modules/PHP Config Editor/UI/ByteLimitView.swift @@ -48,41 +48,52 @@ struct PreferenceContainer: View { } struct ByteLimitView: View { - @State private var selection = "256 MB" + @State private var unit: BytePhpPreference.UnitOption + @State private var numberText: String + @State private var unlimited: Bool - let colors = [ - "128 MB", - "256 MB", - "512 MB", - "1 GB", - "2 GB", - "Unlimited", - "Other" - ] + private var preference: BytePhpPreference + + init(preference: BytePhpPreference) { + self.preference = preference + self.numberText = String(preference.value) + self.unit = preference.unit + self.unlimited = (preference.value == -1) + } var body: some View { - Picker("Limit Name", selection: $selection) { - ForEach(colors, id: \.self) { - Text($0) + if !unlimited { + HStack { + TextField("", text: $numberText) + .onChange(of: numberText) { newText in + self.preference.value = Int(newText) ?? 256 + print(self.preference.internalValue) + } + Picker("Limit Name", selection: $unit) { + ForEach(BytePhpPreference.UnitOption.allCases, id: \.self) { + Text($0.displayValue) + } + } + .frame(maxWidth: 100) + .labelsHidden() + .pickerStyle(.menu) + .onChange(of: unit) { newValue in + self.preference.unit = newValue + print(self.preference.internalValue) + } } } - .labelsHidden() - .pickerStyle(.menu) - } - - func setValue(value: String) { - return - } - func getValue() -> String { - return "ok" + Toggle(isOn: $unlimited) { + Label("Allow unlimited usage", systemImage: "heart").labelStyle(.titleOnly) + } } } struct ByteLimitView_Previews: PreviewProvider { static var previews: some View { - PreferenceContainer(name: "Something\nStupid", description: "Description") { - ByteLimitView() + PreferenceContainer(name: "Max Size", description: "Some maximum size") { + ByteLimitView(preference: BytePhpPreference(key: "max_memory")) } ConfigManagerView() diff --git a/phpmon/Modules/PHP Config Editor/UI/ConfigManagerView.swift b/phpmon/Modules/PHP Config Editor/UI/ConfigManagerView.swift index 7e53d1a2..dd9de190 100644 --- a/phpmon/Modules/PHP Config Editor/UI/ConfigManagerView.swift +++ b/phpmon/Modules/PHP Config Editor/UI/ConfigManagerView.swift @@ -9,32 +9,6 @@ import Foundation import SwiftUI -class PhpPreference { - let key: String - - init(key: String) { - self.key = key - } -} - -class BoolPhpPreference: PhpPreference { - @State var value: Bool = true -} - -class StringPhpPreference: PhpPreference { - @State var value: String = "" -} - -class BytePhpPreference: PhpPreference { - @State var value: String = "" -} - -enum PhpPreferenceType { - case byteLimit - case string - case boolean -} - struct ConfigManagerView: View { var preferences: [PhpPreference] = [ BytePhpPreference(key: "memory_limit"), @@ -75,7 +49,7 @@ struct ConfigManagerView: View { description: "php_ini.\(preference.key).description" ) { if let preference = preference as? BytePhpPreference { - ByteLimitView() + ByteLimitView(preference: preference) } if let preference = preference as? BoolPhpPreference { Toggle("", isOn: preference.$value) diff --git a/tests/unit/Parsers/Config/BytePhpPreferenceTest.swift b/tests/unit/Parsers/Config/BytePhpPreferenceTest.swift new file mode 100644 index 00000000..4e48c15c --- /dev/null +++ b/tests/unit/Parsers/Config/BytePhpPreferenceTest.swift @@ -0,0 +1,42 @@ +// +// BytePhpPreferenceTest.swift +// Unit Tests +// +// Created by Nico Verbruggen on 04/09/2023. +// Copyright © 2023 Nico Verbruggen. All rights reserved. +// + +import XCTest + +class BytePhpPreferenceTest: XCTestCase { + + func test_can_extract_memory_value() throws { + let pref = BytePhpPreference(key: "memory_limit") + + XCTAssertEqual(pref.internalValue, "512M") + XCTAssertEqual(pref.unit, .megabyte) + XCTAssertEqual(pref.value, 512) + } + + func test_can_parse_all_kinds_of_values() throws { + var (unit, value) = BytePhpPreference.readFrom(internalValue: "1G")! + XCTAssertEqual(unit, .gigabyte) + XCTAssertEqual(value, 1) + + (unit, value) = BytePhpPreference.readFrom(internalValue: "256M")! + XCTAssertEqual(unit, .megabyte) + XCTAssertEqual(value, 256) + + (unit, value) = BytePhpPreference.readFrom(internalValue: "512K")! + XCTAssertEqual(unit, .kilobyte) + XCTAssertEqual(value, 512) + + (unit, value) = BytePhpPreference.readFrom(internalValue: "1024")! + XCTAssertEqual(unit, .kilobyte) + XCTAssertEqual(value, 1024) + + (unit, value) = BytePhpPreference.readFrom(internalValue: "-1")! + XCTAssertEqual(unit, .kilobyte) + XCTAssertEqual(value, -1) + } +} diff --git a/tests/unit/Parsers/PhpConfigurationTest.swift b/tests/unit/Parsers/Config/PhpConfigurationFileTest.swift similarity index 96% rename from tests/unit/Parsers/PhpConfigurationTest.swift rename to tests/unit/Parsers/Config/PhpConfigurationFileTest.swift index 749c8ac3..036c5a95 100644 --- a/tests/unit/Parsers/PhpConfigurationTest.swift +++ b/tests/unit/Parsers/Config/PhpConfigurationFileTest.swift @@ -1,5 +1,5 @@ // -// PhpConfigurationTest.swift +// PhpConfigurationFileTest.swift // PHP Monitor // // Created by Nico Verbruggen on 04/05/2022. @@ -8,7 +8,7 @@ import XCTest -class PhpConfigurationTest: XCTestCase { +class PhpConfigurationFileTest: XCTestCase { static var phpIniFileUrl: URL { return Bundle(for: Self.self).url(forResource: "php", withExtension: "ini")! From aa8309dd9af7c35c2fc3e9bae57f5469eb0a34a9 Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Wed, 6 Sep 2023 18:53:26 +0200 Subject: [PATCH 28/34] =?UTF-8?q?=F0=9F=8C=90=20Localization=20fixes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Adds a fallback for missing keys - Make type column resizable on domains - Localized "Open with" text in context menu - Updated some Dutch translations --- phpmon/Common/Extensions/StringExtension.swift | 17 +++++++++++++---- phpmon/Domain/App/Base.lproj/Main.storyboard | 8 ++++---- .../UI/Cells/DomainListTypeCell.swift | 2 +- .../UI/DomainListVC+ContextMenu.swift | 2 +- phpmon/de.lproj/Localizable.strings | 2 ++ phpmon/en.lproj/Localizable.strings | 3 ++- phpmon/nl.lproj/Localizable.strings | 16 +++++++++------- phpmon/pt-PT.lproj/Localizable.strings | 2 ++ phpmon/vi.lproj/Localizable.strings | 2 ++ 9 files changed, 36 insertions(+), 18 deletions(-) diff --git a/phpmon/Common/Extensions/StringExtension.swift b/phpmon/Common/Extensions/StringExtension.swift index cc7afb55..1cf00616 100644 --- a/phpmon/Common/Extensions/StringExtension.swift +++ b/phpmon/Common/Extensions/StringExtension.swift @@ -32,13 +32,22 @@ struct Localization { extension String { var localized: String { + let string = NSLocalizedString(self, tableName: nil, bundle: Localization.bundle, value: "", comment: "") + + // Fallback to English translation if the localized value is equal to the key (should not happen) + if string == self { + guard let path = Localization.bundle.path(forResource: "en", ofType: "lproj"), + let bundle = Bundle(path: path) + else { return self } + return NSLocalizedString(self, bundle: bundle, comment: "") + } + + // Ensure that on more recent versions of macOS, "Preferences" is replaced with "Settings" if #available(macOS 13, *) { - return NSLocalizedString( - self, tableName: nil, bundle: Localization.bundle, value: "", comment: "" - ).replacingOccurrences(of: "Preferences", with: "Settings") + return string.replacingOccurrences(of: "Preferences", with: "Settings") } - return NSLocalizedString(self, tableName: nil, bundle: Localization.bundle, value: "", comment: "") + return string } var localizedForSwiftUI: LocalizedStringKey { diff --git a/phpmon/Domain/App/Base.lproj/Main.storyboard b/phpmon/Domain/App/Base.lproj/Main.storyboard index a2302bae..16495fd7 100644 --- a/phpmon/Domain/App/Base.lproj/Main.storyboard +++ b/phpmon/Domain/App/Base.lproj/Main.storyboard @@ -973,7 +973,7 @@ Gw - + @@ -987,11 +987,11 @@ Gw - + - + @@ -1024,7 +1024,7 @@ Gw - + diff --git a/phpmon/Modules/Domain List/UI/Cells/DomainListTypeCell.swift b/phpmon/Modules/Domain List/UI/Cells/DomainListTypeCell.swift index 1208b810..91ca2792 100644 --- a/phpmon/Modules/Domain List/UI/Cells/DomainListTypeCell.swift +++ b/phpmon/Modules/Domain List/UI/Cells/DomainListTypeCell.swift @@ -25,7 +25,7 @@ class DomainListTypeCell: NSTableCellView, DomainListCellProtocol { } // PHP version - labelPhpVersion.stringValue = site.preferredPhpVersion == "???" ? "Any PHP" : "PHP \(site.preferredPhpVersion)" + labelPhpVersion.stringValue = site.preferredPhpVersion == "???" ? "PHP" : "PHP \(site.preferredPhpVersion)" } func populateCell(with proxy: ValetProxy) { diff --git a/phpmon/Modules/Domain List/UI/DomainListVC+ContextMenu.swift b/phpmon/Modules/Domain List/UI/DomainListVC+ContextMenu.swift index f8068902..dbcccb20 100644 --- a/phpmon/Modules/Domain List/UI/DomainListVC+ContextMenu.swift +++ b/phpmon/Modules/Domain List/UI/DomainListVC+ContextMenu.swift @@ -75,7 +75,7 @@ extension DomainListVC { for editor in applications { let editorMenuItem = EditorMenuItem( - title: "Open with \(editor.name)", + title: "domain_list.open_in".localized(editor.name), action: #selector(self.openWithEditor(sender:)), keyEquivalent: "" ) diff --git a/phpmon/de.lproj/Localizable.strings b/phpmon/de.lproj/Localizable.strings index 26699529..1817b301 100644 --- a/phpmon/de.lproj/Localizable.strings +++ b/phpmon/de.lproj/Localizable.strings @@ -94,6 +94,7 @@ "phpman.buttons.install" = "Installieren"; "phpman.buttons.update" = "Aktualisieren"; "phpman.buttons.repair" = "Reparieren"; +"phpman.version.prerelease" = "Pre-release"; "phpman.title" = "PHP-Versionen Manager"; "phpman.description" = "Mit dem **PHP-Versionen Manager** können Sie verschiedene PHP-Versionen über Homebrew installieren, aktualisieren und löschen, ohne die Befehle im Terminal selbst ausführen zu müssen."; @@ -267,6 +268,7 @@ Möglicherweise werden Sie während des Deinstallationsvorgangs nach Ihrem Passw "domain_list.unlink" = "Ordner-Link aufheben"; "domain_list.secure" = "Domain sichern"; "domain_list.unsecure" = "Domain nicht mehr sichern"; +"domain_list.open_in" = "Mit %@ öffnen"; "domain_list.open_in_finder" = "In Finder öffnen"; "domain_list.open_in_browser" = "Im Browser öffnen"; "domain_list.open_in_terminal" = "Im Terminal öffnen"; diff --git a/phpmon/en.lproj/Localizable.strings b/phpmon/en.lproj/Localizable.strings index 5a3f415a..4c885ce4 100644 --- a/phpmon/en.lproj/Localizable.strings +++ b/phpmon/en.lproj/Localizable.strings @@ -282,6 +282,7 @@ You may be asked for your password during the uninstallation process if file per "domain_list.unlink" = "Unlink Directory"; "domain_list.secure" = "Secure Domain"; "domain_list.unsecure" = "Unsecure Domain"; +"domain_list.open_in" = "Open with %@"; "domain_list.open_in_finder" = "Open in Finder"; "domain_list.open_in_browser" = "Open in Browser"; "domain_list.open_in_terminal" = "Open in Terminal"; @@ -382,7 +383,7 @@ This has no effect on other terminals, only for the particular terminal session "prefs.php_doctor_suggestions_title" = "Always show suggestions"; "prefs.php_doctor_suggestions_desc" = "If you uncheck this item, no PHP Doctor suggestions will appear in PHP Monitor's menu. Keep in mind that PHP Doctor will not appear if there are no recommendations."; - + "prefs.shortcut_set" = "Set global shortcut"; "prefs.shortcut_listening" = ""; "prefs.shortcut_clear" = "Clear"; diff --git a/phpmon/nl.lproj/Localizable.strings b/phpmon/nl.lproj/Localizable.strings index b60e500e..a6f8c47f 100644 --- a/phpmon/nl.lproj/Localizable.strings +++ b/phpmon/nl.lproj/Localizable.strings @@ -1,6 +1,6 @@ // MENU ITEMS (MI) -"mi_busy" = "PHP Monitor is bezig..."; +"mi_busy" = "PHP Monitor is even bezig..."; "mi_unsure" = "We zijn niet zeker welke versie van PHP er actief is."; "mi_php_version" = "Globale versie: PHP"; @@ -33,7 +33,7 @@ "mi_configuration" = "PHP configuratie"; "mi_limits" = "Configureer limieten"; -"mi_memory_limit" = "Geheugen limiet"; +"mi_memory_limit" = "Geheugenlimiet"; "mi_post_max_size" = "Max POST"; "mi_upload_max_filesize" = "Max Upload"; "mi_manual_actions" = "Manuele Acties"; @@ -49,7 +49,7 @@ "mi_phpmon_config" = "Vind PHP Monitor folder (.config/phpmon)"; "mi_global_composer" = "Vind globale Composer folder (.composer)"; "mi_phpinfo" = "Toon huidige configuratie (phpinfo)"; -"mi_update_global_composer" = "Update globale Composer packages..."; +"mi_update_global_composer" = "Globale Composer update..."; "mi_detected_extensions" = "Gedetecteerde extensies"; "mi_no_extensions_detected" = "Geen extra extensies gedetecteerd."; @@ -59,7 +59,7 @@ "mi_view_recommendations" = "Bekijk aanbevelingen..."; "mi_valet" = "Laravel Valet"; -"mi_domain_list" = "Open domeinenlijst..."; +"mi_domain_list" = "Open Domeinen..."; "mi_preferences" = "Voorkeuren..."; "mi_donate" = "Doneer..."; @@ -91,10 +91,11 @@ "phpman.version.has_update" = "Versie %@ geïnstalleerd, %@ beschikbaar."; "phpman.version.installed" = "Versie %@ is momenteel geïnstalleerd."; "phpman.version.available_for_installation" = "Deze versie kan worden geïnstalleerd."; -"phpman.buttons.uninstall" = "Deïnstalleren"; +"phpman.buttons.uninstall" = "Verwijderen"; "phpman.buttons.install" = "Installeren"; "phpman.buttons.update" = "Bijwerken"; "phpman.buttons.repair" = "Herstellen"; +"phpman.version.prerelease" = "Pre-release"; "phpman.title" = "PHP Versiebeheerder"; "phpman.description" = "**PHP Versiebeheerder** stelt je in staat om verschillende PHP-versies te installeren, upgraden en verwijderen via Homebrew, zonder dat je de commando's zelf in de terminal hoeft uit te voeren."; @@ -216,8 +217,8 @@ Tijdens het verwijderingsproces kan je worden gevraagd om je wachtwoord indien d "selection.title" = "Wat voor soort domein wil je instellen?"; "selection.description" = "Koppelingen (links) worden gebruikt om projecten rechtstreeks te gebruiken. Als je een Laravel, Symfony, WordPress, etc. map met code hebt, wil je een koppeling maken en de map kiezen waar je code zich bevindt.\n\nAls je een proxy nodig hebt, kun je bijvoorbeeld een container doorsturen naar een bepaalde domeinnaam. Dit kan handig zijn in combinatie met Docker, bijvoorbeeld."; -"selection.create_link" = "Maak een link"; -"selection.create_proxy" = "Maak een proxy"; +"selection.create_link" = "Link aanmaken"; +"selection.create_proxy" = "Proxy aanmaken"; "selection.cancel" = "Annuleren"; // ADD PROXY TO DOMAINS LIST @@ -268,6 +269,7 @@ Tijdens het verwijderingsproces kan je worden gevraagd om je wachtwoord indien d "domain_list.unlink" = "Link verwijderen"; "domain_list.secure" = "Domein beveiligen"; "domain_list.unsecure" = "Domein niet beveiligen"; +"domain_list.open_in" = "Openen met %@"; "domain_list.open_in_finder" = "Openen in Finder"; "domain_list.open_in_browser" = "Openen in browser"; "domain_list.open_in_terminal" = "Openen in Terminal"; diff --git a/phpmon/pt-PT.lproj/Localizable.strings b/phpmon/pt-PT.lproj/Localizable.strings index 4d92433b..9005bbee 100644 --- a/phpmon/pt-PT.lproj/Localizable.strings +++ b/phpmon/pt-PT.lproj/Localizable.strings @@ -94,6 +94,7 @@ "phpman.buttons.install" = "Instalar"; "phpman.buttons.update" = "Atualizar"; "phpman.buttons.repair" = "Reparar"; +"phpman.version.prerelease" = "Pre-release"; "phpman.title" = "PHP Version Manager"; "phpman.description" = "**PHP Version Manager** permite instalar, atualizar e excluir diferentes versões do PHP via Homebrew sem precisar executar manualmente os comandos no seu terminal."; @@ -267,6 +268,7 @@ Poderá ser-lhe solicitada a sua palavra-passe durante o processo de desinstala "domain_list.unlink" = "Desvincular diretoria"; "domain_list.secure" = "Domínio seguro"; "domain_list.unsecure" = "Domínio não seguro"; +"domain_list.open_in" = "Abrir no %@"; "domain_list.open_in_finder" = "Abrir no Finder"; "domain_list.open_in_browser" = "Abrir no navegador"; "domain_list.open_in_terminal" = "Abrir no terminal"; diff --git a/phpmon/vi.lproj/Localizable.strings b/phpmon/vi.lproj/Localizable.strings index f09ab7c0..ab2daf93 100644 --- a/phpmon/vi.lproj/Localizable.strings +++ b/phpmon/vi.lproj/Localizable.strings @@ -94,6 +94,7 @@ "phpman.buttons.install" = "Cài đặt"; "phpman.buttons.update" = "Cập nhật"; "phpman.buttons.repair" = "Sửa chữa"; +"phpman.version.prerelease" = "Pre-release"; "phpman.title" = "Quản lý Phiên bản PHP"; "phpman.description" = "**Quản lý Phiên bản PHP** cho phép bạn cài đặt, nâng cấp và xóa các phiên bản PHP khác nhau thông qua Homebrew mà không cần phải chạy các lệnh trong terminal."; @@ -261,6 +262,7 @@ Bạn có thể được yêu cầu nhập mật khẩu của mình trong quá t "domain_list.unlink" = "Hủy liên kết Thư mục"; "domain_list.secure" = "Bảo mật Tên miền"; "domain_list.unsecure" = "Không bảo mật Tên miền"; +"domain_list.open_in" = "Mở trong %@"; "domain_list.open_in_finder" = "Mở trong Finder"; "domain_list.open_in_browser" = "Mở trong Trình duyệt"; "domain_list.open_in_terminal" = "Mở trong Terminal"; From 19f48194508b22361efa227d671199230aba02c5 Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Wed, 6 Sep 2023 19:07:16 +0200 Subject: [PATCH 29/34] =?UTF-8?q?=F0=9F=8C=90=20Formal=20Dutch,=20initial?= =?UTF-8?q?=20TL=20pass=20(je=20->=20u)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- phpmon/nl.lproj/Localizable.strings | 104 ++++++++++++++-------------- 1 file changed, 52 insertions(+), 52 deletions(-) diff --git a/phpmon/nl.lproj/Localizable.strings b/phpmon/nl.lproj/Localizable.strings index a6f8c47f..7af41e96 100644 --- a/phpmon/nl.lproj/Localizable.strings +++ b/phpmon/nl.lproj/Localizable.strings @@ -27,7 +27,7 @@ "mi_fix_my_valet" = "Fix My Valet..."; "mi_fix_my_valet_tooltip" = "Iets mis met jouw installatie van Valet? Gebruik de automatische fixes van PHP Monitor en hopelijk zijn jouw problemen snel opgelost!"; "mi_fix_brew_permissions" = "Herstel Homebrew Permissions..."; -"mi_fix_brew_permissions_tooltip" = "Heb je problemen met permissions wanneer je `brew upgrade` gebruikt? PHP Monitor kan je helpen!"; +"mi_fix_brew_permissions_tooltip" = "Heeft u problemen met permissions wanneer u `brew upgrade` gebruikt? PHP Monitor kan u helpen!"; "mi_php_refresh" = "Vernieuwen"; @@ -87,7 +87,7 @@ "phpman.busy.title" = "Bezig met zoeken naar updates!"; "phpman.busy.description.outdated" = "Aan het controleren of er een PHP versie is die outdated is..."; -"phpman.version.broken" = "Deze versie lijkt kapot te zijn, je kunt proberen te herstellen."; +"phpman.version.broken" = "Deze versie lijkt kapot te zijn, u kan proberen herstellen."; "phpman.version.has_update" = "Versie %@ geïnstalleerd, %@ beschikbaar."; "phpman.version.installed" = "Versie %@ is momenteel geïnstalleerd."; "phpman.version.available_for_installation" = "Deze versie kan worden geïnstalleerd."; @@ -98,23 +98,23 @@ "phpman.version.prerelease" = "Pre-release"; "phpman.title" = "PHP Versiebeheerder"; -"phpman.description" = "**PHP Versiebeheerder** stelt je in staat om verschillende PHP-versies te installeren, upgraden en verwijderen via Homebrew, zonder dat je de commando's zelf in de terminal hoeft uit te voeren."; +"phpman.description" = "**PHP Versiebeheerder** stelt u in staat om verschillende PHP-versies te installeren, upgraden en verwijderen via Homebrew, zonder dat u de commando's zelf in de terminal hoeft uit te voeren."; "phpman.disclaimer" = "Houd er rekening mee dat het installeren of upgraden van PHP-versies mogelijk andere Homebrew-pakketten kan upgraden. De meeste installatiestappen duren meestal enige tijd, dus even geduld terwijl Homebrew zijn werk doet."; "phpman.refresh.button" = "Zoek naar updates"; "phpman.refresh.button.description" = "Je kunt op de vernieuwen-knop drukken om te controleren of er updates beschikbaar zijn voor geïnstalleerde PHP-versies."; -"phpman.has_updates.description" = "Er zijn één of meer updates beschikbaar. (Houd er rekening mee dat PHP Monitor altijd PHP-versies in bulk installeert of bijwerkt, dus je zult altijd alle installaties tegelijk upgraden.)"; +"phpman.has_updates.description" = "Er zijn één of meer updates beschikbaar. (Houd er rekening mee dat PHP Monitor altijd PHP-versies in bulk installeert of bijwerkt, dus u zult altijd alle installaties tegelijk upgraden.)"; "phpman.has_updates.button" = "Alles bijwerken"; -"phpman.warnings.unsupported.title" = "Je versie van Homebrew kan problemen veroorzaken"; -"phpman.warnings.unsupported.desc" = "Geen functionaliteit is uitgeschakeld, maar sommige opdrachten werken mogelijk niet zoals verwacht. Je gebruikt momenteel Homebrew %@. +"phpman.warnings.unsupported.title" = "Uw versie van Homebrew kan problemen veroorzaken"; +"phpman.warnings.unsupported.desc" = "Geen functionaliteit is uitgeschakeld, maar sommige opdrachten werken mogelijk niet zoals verwacht. U gebruikt momenteel Homebrew %@. -Op dit ogenblik is Homebrew 4 de enige ondersteunde versie voor de PHP Version Manager. Als je een nieuwere versie van Homebrew gebruikt, kun je controleren of er een nieuwere versie van PHP Monitor beschikbaar is."; +Op dit ogenblik is Homebrew 4 de enige ondersteunde versie voor de PHP Version Manager. Als u een nieuwere versie van Homebrew gebruikt, kunt u controleren of er een nieuwere versie van PHP Monitor beschikbaar is."; -"phpman.warnings.removal.title" = "Weet je zeker dat je %@ wilt verwijderen?"; +"phpman.warnings.removal.title" = "Weet u zeker dat u %@ wilt verwijderen?"; "phpman.warnings.removal.desc" = "Hou er rekening mee dat configuratiebestanden niet worden verwijderd, dus het zou eenvoudig moeten zijn om later opnieuw te installeren als dat nodig is. -Tijdens het verwijderingsproces kan je worden gevraagd om je wachtwoord indien de bestandsmachtigingen een eenvoudige verwijdering niet toestaan."; +Tijdens het verwijderingsproces kan u worden gevraagd om uw wachtwoord indien de bestandsmachtigingen een eenvoudige verwijdering niet toestaan."; "phpman.warnings.removal.button" = "Verwijderen"; "phpman.failures.install.title" = "Installatie mislukt!"; @@ -123,17 +123,17 @@ Tijdens het verwijderingsproces kan je worden gevraagd om je wachtwoord indien d %@"; "phpman.action_prevented_busy.title" = "PHP Monitor is momenteel bezig."; -"phpman.action_prevented_busy.desc" = "PHP Monitor is momenteel bezig met bijvoorbeeld het wisselen tussen PHP-versies. Om ervoor te zorgen dat je systeem niet vastloopt, moet je wachten totdat PHP Monitor klaar is voordat je dit opnieuw probeert."; +"phpman.action_prevented_busy.desc" = "PHP Monitor is momenteel bezig met bijvoorbeeld het wisselen tussen PHP-versies. Om ervoor te zorgen dat uw computer niet vastloopt, moet u wachten totdat PHP Monitor klaar is voordat u dit opnieuw probeert."; "phpman.uninstall_prevented.title" = "Je kunt de momenteel actieve versie van PHP niet verwijderen via PHP Monitor."; -"phpman.uninstall_prevented.desc" = "Om problemen met PHP Monitor en verdere crashes te voorkomen, is het niet mogelijk om de momenteel gekoppelde versie van PHP te verwijderen via deze gebruikersinterface. Je kunt versies wisselen en het opnieuw proberen, of deze versie handmatig verwijderen via de terminal.\n\nHoud er rekening mee dat PHP Monitor kan crashen als je de momenteel gekoppelde PHP-versie verwijdert."; +"phpman.uninstall_prevented.desc" = "Om problemen met PHP Monitor en verdere crashes te voorkomen, is het niet mogelijk om de momenteel gekoppelde versie van PHP te verwijderen via deze gebruikersinterface. U kan versies wisselen en het opnieuw proberen, of deze versie handmatig verwijderen via de terminal.\n\nHoud er rekening mee dat PHP Monitor kan crashen als u de momenteel gekoppelde PHP-versie verwijdert."; "phpman.failures.uninstall.title" = "Verwijderen mislukt!"; -"phpman.failures.uninstall.desc" = "Helaas is de automatische verwijdering mislukt. Je kunt proberen deze opdracht handmatig uit te voeren: `%@` en erachter komen wat er misgaat. Vergeet niet om PHP Monitor opnieuw te starten (of op de vernieuwingsknop te drukken) wanneer dit is voltooid."; +"phpman.failures.uninstall.desc" = "Helaas is de automatische verwijdering mislukt. U kan proberen deze opdracht handmatig uit te voeren: `%@` en erachter komen wat er misgaat. Vergeet niet om PHP Monitor opnieuw te starten (of op de vernieuwingsknop te drukken) wanneer dit is voltooid."; -"phpman.unlinked.title" = "Geen van de geïnstalleerde PHP-versies op je systeem is momenteel gelinkt."; -"phpman.unlinked.desc" = "Waarschijnlijk heb je nog steeds een versie van PHP geïnstalleerd, maar momenteel is er geen versie van PHP gelinkt."; -"phpman.unlinked.detail" = "Zonder enige gekoppelde PHP-versie is het `php`-binairbestand niet toegankelijk op je systeem en kun je geen PHP-scripts uitvoeren zonder expliciet onderdeel te zijn van het PATH. Je kunt PHP Monitor automatisch dit probleem laten oplossen (kies 'Automatisch herstellen' in het hoofdmenu) of het zelf oplossen door `brew link php --force` uit te voeren."; +"phpman.unlinked.title" = "Geen van de geïnstalleerde PHP-versies op uw systeem is momenteel gelinkt."; +"phpman.unlinked.desc" = "Waarschijnlijk heeft u nog steeds een versie van PHP geïnstalleerd, maar momenteel is er geen versie van PHP gelinkt."; +"phpman.unlinked.detail" = "Zonder enige gekoppelde PHP-versie is het uitvoerbaar bestand van `php` niet toegankelijk op uw systeem en kunt u geen PHP-scripts uitvoeren zonder expliciet het PATH correct in te stellen. U kan PHP Monitor automatisch dit probleem laten oplossen (kies 'Automatisch herstellen' in het hoofdmenu) of het zelf oplossen door `brew link php --force` uit te voeren."; "phpman.operations.repairing" = "Herstel installaties..."; "phpman.operations.updating" = "Updates installeren..."; @@ -153,9 +153,9 @@ Tijdens het verwijderingsproces kan je worden gevraagd om je wachtwoord indien d // LITE MODE -"lite_mode_explanation.title" = "Je bent momenteel PHP Monitor in Standalone Mode aan het gebruiken."; -"lite_mode_explanation.subtitle" = "PHP Monitor heeft verschillende functies die beschikbaar zijn als je ook gebruik maakt van Laravel Valet. Momenteel kon PHP Monitor geen actieve installatie van Valet op jouw computer vinden, dus deze functionaliteit is momenteel niet beschikbaar."; -"lite_mode_explanation.description" = "Voor meer informatie raad ik aan om de README te bekijken (toegankelijk op GitHub), waarin wordt uitgelegd welke stappen je moet nemen om Valet te installeren en PHP Monitor correct te laten werken met de geïnstalleerde versie van Valet. Je moet PHP Monitor opnieuw starten nadat je Laravel Valet hebt geïnstalleerd voordat het de Standalone-modus verlaat."; +"lite_mode_explanation.title" = "U bent momenteel PHP Monitor in Standalone Mode aan het gebruiken."; +"lite_mode_explanation.subtitle" = "PHP Monitor heeft verschillende functies die beschikbaar zijn als u ook gebruik maakt van Laravel Valet. Momenteel kon PHP Monitor geen actieve installatie van Valet op jouw computer vinden, dus deze functionaliteit is momenteel niet beschikbaar."; +"lite_mode_explanation.description" = "Voor meer informatie raad ik aan om de README te bekijken (toegankelijk op GitHub), waarin wordt uitgelegd welke stappen u moet nemen om Valet te installeren en PHP Monitor correct te laten werken met de geïnstalleerde versie van Valet. U moet PHP Monitor opnieuw starten nadat u Laravel Valet heeft geïnstalleerd voordat de Standalone-modus verlaten wordt."; // GENERIC @@ -168,7 +168,7 @@ Tijdens het verwijderingsproces kan je worden gevraagd om je wachtwoord indien d "preset_help_title" = "Werken met presets"; "preset_help_info" = "Je kunt presets instellen in het config.json-bestand, dat zich bevindt in `~/.config/phpmon/config.json`. Deze presets kunnen een selectie van configuratiewaarden in één keer toepassen. Dit is een krachtige functie, maar moet momenteel handmatig worden ingesteld."; -"preset_help_desc" = "Na het opnieuw opstarten van PHP Monitor worden alle gevonden presets ingeladen. Als er geen presets worden weergegeven, kon het bestand waarschijnlijk niet correct worden verwerkt.\n\nJe kunt op het vraagteken in deze melding klikken om naar de FAQ op GitHub te gaan, waar je meer informatie over deze functie kunt vinden, inclusief een voorbeeld."; +"preset_help_desc" = "Na het opnieuw opstarten van PHP Monitor worden alle gevonden presets ingeladen. Als er geen presets worden weergegeven, kon het bestand waarschijnlijk niet correct worden verwerkt.\n\nJe kunt op het vraagteken in deze melding klikken om naar de FAQ op GitHub te gaan, waar u meer informatie over deze functie kunt vinden, inclusief een voorbeeld."; // MENU ITEMS (if window is open) @@ -182,30 +182,30 @@ Tijdens het verwijderingsproces kan je worden gevraagd om je wachtwoord indien d "domain_list.subtitle" = ""; "domain_list.no_domains" = "Je hebt nog geen domeinen of proxies ingesteld."; -"domain_list.no_domains_for_search_query" = "Er zijn geen resultaten voor je zoekopdracht."; +"domain_list.no_domains_for_search_query" = "Er zijn geen resultaten voor uw zoekopdracht."; "domain_list.tooltips.isolated" = "Dit domein is geïsoleerd en gebruikt PHP %@ in plaats van de globaal gekoppelde PHP."; "domain_list.tooltips.checkmark" = "Dit domein wordt geserveerd met een versie van PHP die compatibel is met deze vereiste (PHP %@). Klik op de PHP-versie naast dit vinkje om meer informatie te vinden over hoe deze vereiste is bepaald."; "domain_list.alerts_isolation_failed.title" = "Oeps! Site-isolatie niet toegepast"; -"domain_list.alerts_isolation_failed.subtitle" = "Er is iets misgegaan bij het wijzigen van de isolatiestatus voor deze site. Als dit je standaardsite is maar niet is gekoppeld, raad ik aan om de site handmatig te koppelen voordat je isolatie instelt."; -"domain_list.alerts_isolation_failed.desc" = "Om erachter te komen wat er misgaat, kun je proberen dit commando handmatig in je terminal uit te voeren: %@"; +"domain_list.alerts_isolation_failed.subtitle" = "Er is iets misgegaan bij het wijzigen van de isolatiestatus voor deze site. Als dit uw standaardsite is maar niet is gekoppeld, raad ik aan om de site handmatig te koppelen voordat u isolatie instelt."; +"domain_list.alerts_isolation_failed.desc" = "Om erachter te komen wat er misgaat, kan u proberen dit commando handmatig in uw terminal uit te voeren: %@"; "domain_list.alerts_status_not_changed.title" = "Oeps! SSL-status niet gewijzigd"; -"domain_list.alerts_status_not_changed.desc" = "Er is iets misgegaan. Probeer dit commando handmatig in je terminal uit te voeren: %@"; +"domain_list.alerts_status_not_changed.desc" = "Er is iets misgegaan. Probeer dit commando handmatig in uw terminal uit te voeren: %@"; "domain_list.alerts_status_changed.title" = "SSL-status gewijzigd"; "domain_list.alerts_status_changed.desc" = "Het domein '%@' is nu %@."; "domain_list.alerts_status_secure" = "veilig"; "domain_list.alerts_status_unsecure" = "onveilig"; -"domain_list.confirm_unlink" = "Weet je zeker dat je '%@' wilt loskoppelen?"; -"domain_list.confirm_unlink_desc" = "Er worden geen bestanden verwijderd. Je kunt de map altijd opnieuw koppelen door op de + knop te klikken en de oorspronkelijke map te selecteren."; +"domain_list.confirm_unlink" = "Weet u zeker dat u '%@' wilt loskoppelen?"; +"domain_list.confirm_unlink_desc" = "Er worden geen bestanden verwijderd. U kan de map altijd opnieuw koppelen door op de + knop te klikken en de oorspronkelijke map te selecteren."; "site_link.close" = "Sluiten"; "site_link.switch_to_php" = "Overschakelen naar PHP %@"; -"domain_list.confirm_unproxy" = "Weet je zeker dat je de proxy '%@' wilt verwijderen?"; -"domain_list.confirm_unproxy_desc" = "Je kunt de proxy altijd opnieuw maken door op de + knop te klikken."; +"domain_list.confirm_unproxy" = "Weet u zeker dat u de proxy '%@' wilt verwijderen?"; +"domain_list.confirm_unproxy_desc" = "U kan de proxy altijd opnieuw maken door op de + knop te klikken."; "domain_list.columns.secure" = "TLS"; "domain_list.columns.domain" = "Domein"; @@ -215,8 +215,8 @@ Tijdens het verwijderingsproces kan je worden gevraagd om je wachtwoord indien d // CHOOSE WHAT TO ADD -"selection.title" = "Wat voor soort domein wil je instellen?"; -"selection.description" = "Koppelingen (links) worden gebruikt om projecten rechtstreeks te gebruiken. Als je een Laravel, Symfony, WordPress, etc. map met code hebt, wil je een koppeling maken en de map kiezen waar je code zich bevindt.\n\nAls je een proxy nodig hebt, kun je bijvoorbeeld een container doorsturen naar een bepaalde domeinnaam. Dit kan handig zijn in combinatie met Docker, bijvoorbeeld."; +"selection.title" = "Wat voor soort domein wilt u instellen?"; +"selection.description" = "Koppelingen (links) worden gebruikt om projecten rechtstreeks te gebruiken. Als u een Laravel, Symfony, WordPress, etc. map met code heeft, wilt u wellicht een koppeling maken en de map kiezen waar uw code zich bevindt.\n\nAls u een proxy nodig heeft, kan u bijvoorbeeld een container doorsturen naar een bepaalde domeinnaam. Dit kan handig zijn in combinatie met Docker, bijvoorbeeld."; "selection.create_link" = "Link aanmaken"; "selection.create_proxy" = "Proxy aanmaken"; "selection.cancel" = "Annuleren"; @@ -230,14 +230,14 @@ Tijdens het verwijderingsproces kan je worden gevraagd om je wachtwoord indien d "domain_list.add.proxy_available" = "%@ wordt geproxyd en is beschikbaar via: %@://%@.%@"; "domain_list.add.proxy_https_warning" = "%@ wordt geproxyd en is beschikbaar via: %@://%@.%@. -(!) BELANGRIJK: Deze proxy werkt mogelijk niet totdat je handmatig `proxy_ssl_verify off;` toevoegt aan het nginx-configuratiebestand voor dit domein. Het wordt aanbevolen om een onbeveiligd domein als proxy-onderwerp te gebruiken."; +(!) BELANGRIJK: Deze proxy werkt mogelijk niet totdat u handmatig `proxy_ssl_verify off;` toevoegt aan het nginx-configuratiebestand voor dit domein. Het wordt aanbevolen om een onbeveiligd domein als proxy-onderwerp te gebruiken."; // ADD SITE TO DOMAINS LIST "domain_list.add.link_folder" = "Map linken"; "domain_list.add.domain_name_placeholder" = "Voer hier een domeinnaam in"; "domain_list.add.secure_after_creation" = "Beveilig %@.%@ na het maken"; -"domain_list.add.secure_description" = "Het beveiligen van een domein vereist beheerdersrechten.\nJe wordt mogelijk gevraagd om je wachtwoord of Touch ID."; +"domain_list.add.secure_description" = "Het beveiligen van een domein vereist beheerdersrechten.\nU wordt mogelijk gevraagd om uw wachtwoord (of Touch ID)."; "domain_list.add.create_link" = "Link maken"; "domain_list.add.cancel" = "Annuleren"; "domain_list.add.folder_available" = "Deze site is beschikbaar via de volgende URL: %@://%@.%@"; @@ -250,12 +250,12 @@ Tijdens het verwijderingsproces kan je worden gevraagd om je wachtwoord indien d // ADD SITE ERROR: FOLDER MISSING SINCE SELECTION -"domain_list.alert.folder_missing.desc" = "De gekozen map lijkt niet meer te bestaan. Wil je het toevoegen van deze map annuleren? Als je de map hebt verplaatst, kun je deze altijd terugzetten en het opnieuw proberen."; +"domain_list.alert.folder_missing.desc" = "De gekozen map lijkt niet meer te bestaan. Wilt u het toevoegen van deze map annuleren? Als u de map heeft verplaatst, kan u deze altijd terugzetten en het opnieuw proberen."; "domain_list.alert.folder_missing.title" = "Map ontbreekt!"; "domain_list.alert.folder_missing.cancel" = "Link annuleren"; "domain_list.alert.folder_missing.return" = "OK"; -"domain_list.add.modal_description" = "Selecteer eerst welke map je wilt koppelen."; +"domain_list.add.modal_description" = "Selecteer eerst welke map u wilt koppelen."; // SITE LIST ACTIONS @@ -279,14 +279,14 @@ Tijdens het verwijderingsproces kan je worden gevraagd om je wachtwoord indien d "domain_list.use_in_terminal" = "PHP %@ openen in Terminal"; "domain_list.alerts_isolated_php_terminal.title" = "Je kunt PHP %@ gebruiken in een specifieke terminal!"; -"domain_list.alerts_isolated_php_terminal.subtitle" = "Helaas kan PHP Monitor geen terminal voor je openen (en de juiste commando's typen). Je moet handmatig het hulpscript laden om deze specifieke versie van PHP te gebruiken. Typ hiervoor het volgende in een terminal naar keuze: +"domain_list.alerts_isolated_php_terminal.subtitle" = "Helaas kan PHP Monitor geen terminal voor u openen (en de juiste commando's typen). U moet handmatig het hulpscript laden om deze specifieke versie van PHP te gebruiken. Typ hiervoor het volgende in een terminal naar keuze: . pm%@ Dit zal het hulpscript laden zoals gegenereerd door PHP Monitor en het gebruik van PHP %@ mogelijk maken voor die specifieke terminal. -Dit heeft geen invloed op andere terminals, alleen op de huidige terminalsessie waarin je het gebruikt. (bijvoorbeeld als je meerdere tabbladen hebt in je terminal-app, worden andere tabbladen en vensters niet beïnvloed)."; -"domain_list.alerts_isolated_php_terminal.desc" = "Als dit niet werkt, kun je PHP Doctor controleren via het First Aid-menu hier in PHP Monitor. Meer informatie over deze functie is ook te vinden op GitHub (in de wiki van de PHP Monitor-repository). Deze waarschuwing is toegevoegd om de zichtbaarheid van deze functie te verbeteren."; +Dit heeft geen invloed op andere terminals, alleen op de huidige terminalsessie waarin u PHP gebruikt. (bijvoorbeeld als u meerdere tabbladen heeft in uw terminal-app, worden andere tabbladen en vensters niet beïnvloed)."; +"domain_list.alerts_isolated_php_terminal.desc" = "Als dit niet werkt, kan u PHP Doctor controleren via het First Aid-menu hier in PHP Monitor. Meer informatie over deze functie is ook te vinden op GitHub (in de wiki van de PHP Monitor-repository). Deze waarschuwing is toegevoegd om de zichtbaarheid van deze functie te verbeteren."; "domain_list.warning.spaces" = "Waarschuwing! Deze website heeft een spatie in de mapnaam.\nDe website is niet bereikbaar via de browser."; @@ -340,60 +340,60 @@ Dit heeft geen invloed op andere terminals, alleen op de huidige terminalsessie "prefs.menu_contents" = "Functies in menu:"; "prefs.startup" = "Opstarten:"; -"prefs.auto_start_desc" = "Start PHP Monitor automatisch wanneer je inlogt op je Mac."; +"prefs.auto_start_desc" = "Start PHP Monitor automatisch bij het aanmelden op uw Mac."; "prefs.auto_start_title" = "PHP Monitor starten bij het inloggen"; "prefs.icon_options.php" = "PHP-pictogram weergeven"; "prefs.icon_options.elephant" = "Olifant-pictogram weergeven"; "prefs.icon_options.none" = "Geen pictogram weergeven"; -"prefs.icon_options_desc" = "Met deze optie kun je bepalen welk pictogram naast het versienummer van de momenteel gekoppelde PHP-versie wordt weergegeven. Als de optie voor dynamisch pictogram is uitgeschakeld, heeft dit geen invloed."; +"prefs.icon_options_desc" = "Met deze optie kan u bepalen welk pictogram naast het versienummer van de momenteel gekoppelde PHP-versie wordt weergegeven. Als de optie voor dynamisch pictogram is uitgeschakeld, doet dit niets."; "prefs.auto_restart_services_title" = "PHP-FPM automatisch herstarten"; -"prefs.auto_restart_services_desc" = "Als deze optie is ingeschakeld, wordt PHP-FPM automatisch herstart wanneer je een extensie in- of uitschakelt. Dit is iets langzamer wanneer het is ingeschakeld, maar de extensiewijziging wordt onmiddellijk toegepast voor alle sites die je bedient, zonder dat je PHP-FPM handmatig hoeft te herstarten."; +"prefs.auto_restart_services_desc" = "Als deze optie is ingeschakeld, wordt PHP-FPM automatisch herstart wanneer u een extensie in- of uitschakelt. Dit is iets trager wanneer deze functie is ingeschakeld, maar de extensiewijziging wordt onmiddellijk toegepast voor alle sites die u bedient, zonder dat u PHP-FPM handmatig hoeft te herstarten."; "prefs.dynamic_icon_title" = "Dynamisch pictogram weergeven in de menubalk"; -"prefs.dynamic_icon_desc" = "Als je dit vakje niet aanvinkt, is het truckpictogram altijd zichtbaar. Als je het aanvinkt, wordt het belangrijkste versienummer van de momenteel gekoppelde PHP-versie weergegeven."; +"prefs.dynamic_icon_desc" = "Als u dit vakje niet aanvinkt, is het truckpictogram altijd zichtbaar. Als u het aanvinkt, wordt het belangrijkste versienummer van de momenteel gekoppelde PHP-versie weergegeven."; "prefs.display_full_php_version" = "Overal de volledige PHP-versie weergeven"; "prefs.display_full_php_version_desc" = "Toon de volledige versie in plaats van alleen het belangrijkste versienummer in de menubalk en het vervolgkeuzemenu. (Dit kan ongewenst zijn op kleinere schermen, daarom is dit standaard uitgeschakeld.)"; "prefs.auto_composer_update_title" = "Automatisch Composer dependencies bijwerken"; -"prefs.auto_composer_update_desc" = "Als deze optie is ingeschakeld, wordt Composer automatisch gevraagd om `composer global update` uit te voeren wanneer je tussen verschillende PHP-versies schakelt. Je kunt zien welke wijzigingen worden aangebracht, of dit mislukt."; +"prefs.auto_composer_update_desc" = "Als deze optie is ingeschakeld, wordt Composer automatisch gevraagd om `composer global update` uit te voeren wanneer u tussen verschillende PHP-versies schakelt. U kan zien welke wijzigingen worden aangebracht, of dit mislukt."; "prefs.open_protocol_title" = "Toestaan van third-party integraties"; -"prefs.open_protocol_desc" = "Als deze optie is ingeschakeld, kan de interactie met externe hulpprogramma's werken (zoals Alfred, Raycast). Als je dit uitschakelt, ontvangt PHP Monitor nog steeds de opdrachten, maar voert deze niet uit."; +"prefs.open_protocol_desc" = "Als deze optie is ingeschakeld, kan de interactie met externe hulpprogramma's werken (zoals Alfred, Raycast). Als u dit uitschakelt, ontvangt PHP Monitor nog steeds de opdrachten, maar voert deze niet uit."; "prefs.automatic_update_check_title" = "Automatisch controleren op updates"; -"prefs.automatic_update_check_desc" = "Als deze optie is ingeschakeld, controleert PHP Monitor automatisch of er een nieuwere versie beschikbaar is en geeft je een melding als dat het geval is."; +"prefs.automatic_update_check_desc" = "Als deze optie is ingeschakeld, controleert PHP Monitor automatisch of er een nieuwere versie beschikbaar is en geeft u een melding als dat het geval is."; "prefs.php_doctor_suggestions_title" = "Altijd suggesties tonen"; -"prefs.php_doctor_suggestions_desc" = "Als je dit item uitvinkt, worden er geen suggesties van PHP Doctor weergegeven in het menu van PHP Monitor. Houd er rekening mee dat PHP Doctor niet wordt weergegeven als er geen aanbevelingen zijn."; +"prefs.php_doctor_suggestions_desc" = "Als u dit item uitvinkt, worden er geen suggesties van PHP Doctor weergegeven in het menu van PHP Monitor. Hou er rekening mee dat PHP Doctor niet wordt weergegeven als er geen aanbevelingen zijn."; "prefs.shortcut_set" = "Globale sneltoets instellen"; "prefs.shortcut_listening" = ""; "prefs.shortcut_clear" = "Wissen"; -"prefs.shortcut_desc" = "Als er een sneltoetscombinatie is ingesteld, kun je PHP Monitor overal in- of uitschakelen door de toetscombinatie in te drukken die je hebt gekozen. (Annuleer het kiezen van een sneltoets door op de spatiebalk te drukken.)"; +"prefs.shortcut_desc" = "Als er een sneltoetscombinatie is ingesteld, kan u PHP Monitor overal in- of uitschakelen door de toetscombinatie in te drukken die u heeft gekozen. (Annuleer het kiezen van een sneltoets door op de spatiebalk te drukken.)"; -"prefs.notify_about_version_change_desc" = "Toont een melding telkens wanneer de actieve PHP-versie verandert."; +"prefs.notify_about_version_change_desc" = "Toon een melding telkens wanneer de actieve PHP-versie verandert."; "prefs.notify_about_version_change" = "Melding bij overschakelen PHP-versie"; -"prefs.notify_about_php_fpm_change_desc" = "Toont een melding telkens wanneer het actieve PHP-FPM-proces opnieuw is gestart vanwege een configuratiewijziging."; +"prefs.notify_about_php_fpm_change_desc" = "Toon een melding telkens wanneer het actieve PHP-FPM-proces opnieuw is gestart vanwege een configuratiewijziging."; "prefs.notify_about_php_fpm_change" = "Melding bij herstart PHP-FPM"; -"prefs.notify_about_services_desc" = "Toont een melding telkens wanneer een van de Homebrew-services (geïnstalleerd en geconfigureerd door Valet) opnieuw is gestart of gestopt."; +"prefs.notify_about_services_desc" = "Toon een melding telkens wanneer een van de Homebrew-services (geïnstalleerd en geconfigureerd door Valet) opnieuw is gestart of gestopt."; "prefs.notify_about_services" = "Melding over status van services"; -"prefs.notify_about_presets_desc" = "Toont een melding telkens wanneer een preset succesvol is toegepast of ongedaan gemaakt."; +"prefs.notify_about_presets_desc" = "Toon een melding telkens wanneer een preset succesvol is toegepast of ongedaan is gemaakt."; "prefs.notify_about_presets" = "Melding over toegepaste presets"; -"prefs.notify_about_secure_status_desc" = "Toont een melding wanneer een domein is beveiligd of niet beveiligd."; +"prefs.notify_about_secure_status_desc" = "Toon een melding wanneer een domein is beveiligd of niet beveiligd."; "prefs.notify_about_secure_status" = "Melding over beveiligingsstatus"; -"prefs.notify_about_composer_success_desc" = "Toont een melding wanneer de globale Composer-configuratie met succes is bijgewerkt."; +"prefs.notify_about_composer_success_desc" = "Toon een melding wanneer de globale Composer-configuratie met succes is bijgewerkt."; "prefs.notify_about_composer_success" = "Melding over update van Composer"; -"prefs.warn_about_non_standard_tld_desc" = "Als je een niet-standaard TLD gebruikt, wil je mogelijk geen herhaalde meldingen hierover ontvangen."; +"prefs.warn_about_non_standard_tld_desc" = "Als u een niet-standaard TLD gebruikt, wilt u mogelijk geen herhaalde meldingen hierover ontvangen."; "prefs.warn_about_non_standard_tld" = "Waarschuwen bij niet-standaard TLD"; "prefs.display_global_version_switcher_desc" = "Indien uitgeschakeld, kunt u de globaal gekoppelde PHP-versie niet wijzigen via het hoofdmenu."; From 8a5755707494e628c86f185ab6c333ae22148314 Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Thu, 7 Sep 2023 18:55:54 +0200 Subject: [PATCH 30/34] =?UTF-8?q?=F0=9F=90=9B=20Avoid=20duplicate=20site?= =?UTF-8?q?=20insertion=20(#261)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- phpmon/Domain/Integrations/Valet/Valet.swift | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/phpmon/Domain/Integrations/Valet/Valet.swift b/phpmon/Domain/Integrations/Valet/Valet.swift index f9ba9510..65fbc719 100644 --- a/phpmon/Domain/Integrations/Valet/Valet.swift +++ b/phpmon/Domain/Integrations/Valet/Valet.swift @@ -233,8 +233,14 @@ class Valet { ) if let defaultPath = Valet.shared.config.defaultSite, - let site = ValetScanner.active.resolveSite(path: defaultPath) { - sites.insert(site, at: 0) + let defaultSite = ValetScanner.active.resolveSite(path: defaultPath) { + // Only insert the default site if it isn't already included in the list + if !sites.contains(where: { site in + site.absolutePath == defaultSite.absolutePath + && site.name == defaultSite.name + }) { + sites.insert(defaultSite, at: 0) + } } Log.info("\(sites.count) sites & \(proxies.count) proxies have been scanned.") From 3d1806c0942046fb470ccc71a75877cad0e44473 Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Thu, 7 Sep 2023 19:16:07 +0200 Subject: [PATCH 31/34] =?UTF-8?q?=F0=9F=93=9D=20Update=20SECURITY.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- SECURITY.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/SECURITY.md b/SECURITY.md index 561b5aba..64f37b82 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -6,7 +6,7 @@ Generally speaking, only the latest version of **PHP Monitor** is supported, exc | Version | Apple Silicon | Supported | Supported macOS | Deployment Target | Detected PHP Versions | Recommended Valet Version | | ------- | ------------- | ------------------ | ----- | ----- | ----- | ---- -| 6.0 | ✅ Universal binary | ✅ Yes | Monterey (12.4+)
Ventura (13.0+) | macOS 12.4 | PHP 5.6—PHP 8.2 (w/ Valet 2.x)
PHP 7.0—PHP 8.2 (w/ Valet 3.x)
PHP 7.1-PHP 8.2 (w/ Valet 4.x) | 3.0 or higher recommended
2.16.2 minimum | +| 6.1 | ✅ Universal binary | ✅ Yes | Monterey (12.4+)
Ventura (13.0+)
Sonoma (14.0) | macOS 12.4 | PHP 5.6—PHP 8.2 (w/ Valet 2.x)
PHP 7.0—PHP 8.4 (w/ Valet 3.x)
PHP 7.1-PHP 8.4 (w/ Valet 4.x)| 3.0 or higher recommended
2.16.2 minimum | ## Legacy versions @@ -14,7 +14,8 @@ These versions of PHP Monitor are no longer supported, but if you’re using an | Version | Apple Silicon | Supported | Supported macOS | Deployment Target | Detected PHP Versions | Minimum Required Valet Version | | ------- | ------------- | ------------------ | ----- | ----- | ----- | ---- -| 5.8 | ✅ Universal binary | ✅ Yes | Monterey (12.4+)
Ventura (13.0+) | macOS 12.4 | PHP 5.6—PHP 8.2 (w/ Valet 2.x)
PHP 7.0—PHP 8.2 (w/ Valet 3.x)
PHP 7.1-PHP 8.2 (w/ Valet 4.x) | 3.0 or higher recommended
2.16.2 minimum | +| 6.0 | ✅ Universal binary | ❌ | Monterey (12.4+)
Ventura (13.0+) | macOS 12.4 | PHP 5.6—PHP 8.2 (w/ Valet 2.x)
PHP 7.0—PHP 8.2 (w/ Valet 3.x)
PHP 7.1-PHP 8.2 (w/ Valet 4.x) | 3.0 or higher recommended
2.16.2 minimum | +| 5.8 | ✅ Universal binary | ❌ | Monterey (12.4+)
Ventura (13.0+) | macOS 12.4 | PHP 5.6—PHP 8.2 (w/ Valet 2.x)
PHP 7.0—PHP 8.2 (w/ Valet 3.x)
PHP 7.1-PHP 8.2 (w/ Valet 4.x) | 3.0 or higher recommended
2.16.2 minimum | | 5.7 | ✅ Universal binary | ❌ | Big Sur (11.0)
Monterey (12.0)
Ventura (13.0) | macOS 11+ | PHP 5.6—PHP 8.2 (w/ Valet 2.x)
PHP 7.0—PHP 8.2 (w/ Valet 3.x)
PHP 7.1-PHP 8.2 (w/ Valet 4.x) | 3.0 or higher recommended
2.16.2 minimum | | 5.6 | ✅ Universal binary | ❌ | Big Sur (11.0)
Monterey (12.0)
Ventura (13.0) | macOS 11+ | PHP 5.6—PHP 8.2 (w/ Valet 2.x)
PHP 7.0—PHP 8.2 (w/ Valet 3.x) | 3.0 recommended
2.16.2 minimum | | 4.1 | ✅ Universal binary | ❌ | Big Sur (11.0)
Monterey (12.0) | macOS 11+ | PHP 5.6—PHP 8.2 | 2.16.2 | From 0615927f2f8c5a993f2a4a5a8a26072388170121 Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Thu, 7 Sep 2023 19:16:41 +0200 Subject: [PATCH 32/34] =?UTF-8?q?=F0=9F=93=9D=20Update=20README.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 08354f9c..8ca756e9 100644 --- a/README.md +++ b/README.md @@ -22,7 +22,7 @@ You can also add new domains as links, isolate sites, manage various services, a PHP Monitor is a universal application that runs natively on Apple Silicon **and** Intel-based Macs. * Your user account can administer your computer (required for some functionality, e.g. certificate generation) -* macOS 12.4 or later (Monterey and Ventura are supported) +* macOS 12.4 or later (Monterey, Ventura and Sonoma are supported) * Homebrew is installed in the default location (`/usr/local/homebrew` or `/opt/homebrew`) * Homebrew `php` formula is installed * Optional but recommended: Laravel Valet From f5d0ad20cd92468cb412c7c4ee6c2a871cf7a1b7 Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Thu, 7 Sep 2023 19:17:36 +0200 Subject: [PATCH 33/34] =?UTF-8?q?=F0=9F=94=A7=20New=20EAP=20build?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- PHP Monitor.xcodeproj/project.pbxproj | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/PHP Monitor.xcodeproj/project.pbxproj b/PHP Monitor.xcodeproj/project.pbxproj index f0bb1aaa..377d70d2 100644 --- a/PHP Monitor.xcodeproj/project.pbxproj +++ b/PHP Monitor.xcodeproj/project.pbxproj @@ -3488,7 +3488,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 1305; + CURRENT_PROJECT_VERSION = 1306; DEAD_CODE_STRIPPING = YES; DEBUG = YES; DEVELOPMENT_TEAM = 8M54J5J787; @@ -3519,7 +3519,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 1305; + CURRENT_PROJECT_VERSION = 1306; DEAD_CODE_STRIPPING = YES; DEBUG = NO; DEVELOPMENT_TEAM = 8M54J5J787; @@ -3759,7 +3759,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 1305; + CURRENT_PROJECT_VERSION = 1306; DEAD_CODE_STRIPPING = YES; DEBUG = NO; DEVELOPMENT_TEAM = 8M54J5J787; @@ -3875,7 +3875,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 1305; + CURRENT_PROJECT_VERSION = 1306; DEAD_CODE_STRIPPING = YES; DEBUG = YES; DEVELOPMENT_TEAM = 8M54J5J787; @@ -3991,7 +3991,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 1305; + CURRENT_PROJECT_VERSION = 1306; DEAD_CODE_STRIPPING = YES; DEBUG = YES; DEVELOPMENT_TEAM = 8M54J5J787; @@ -4172,7 +4172,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 1305; + CURRENT_PROJECT_VERSION = 1306; DEAD_CODE_STRIPPING = YES; DEBUG = NO; DEVELOPMENT_TEAM = 8M54J5J787; From e40b9fe45a75fe28a25e2241590c847e0aa55c63 Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Sun, 10 Sep 2023 11:14:38 +0200 Subject: [PATCH 34/34] =?UTF-8?q?=E2=9C=85=20Add=20UI=20test=20for=20PHP?= =?UTF-8?q?=20version=20manager?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Testables/TestableConfiguration.swift | 18 ++++++++----- .../Homebrew/BrewFormulaeHandler.swift | 1 + tests/Shared/TestableConfigurations.swift | 18 ++++++++++++- tests/ui/MainMenuTest.swift | 25 +++++++++++++++++++ 4 files changed, 55 insertions(+), 7 deletions(-) diff --git a/phpmon/Common/Testables/TestableConfiguration.swift b/phpmon/Common/Testables/TestableConfiguration.swift index bdcb206b..95e14235 100644 --- a/phpmon/Common/Testables/TestableConfiguration.swift +++ b/phpmon/Common/Testables/TestableConfiguration.swift @@ -56,6 +56,8 @@ public struct TestableConfiguration: Codable { self.filesystem = self.filesystem.merging([ "/opt/homebrew/opt/php@\(version.short)/bin/php" : .fake(.symlink, "/opt/homebrew/Cellar/php/\(version.long)/bin/php"), + "/opt/homebrew/opt/php@\(version.short)/bin/php-config" + : .fake(.symlink, "/opt/homebrew/Cellar/php/\(version.long)/bin/php-config"), "/opt/homebrew/Cellar/php/\(version.long)/bin/php" : .fake(.binary), "/opt/homebrew/Cellar/php/\(version.long)/bin/php-config" @@ -70,6 +72,9 @@ public struct TestableConfiguration: Codable { : .fake(.text) ]) { (_, new) in new } + self.commandOutput["/opt/homebrew/opt/php@\(version.short)/bin/php-config --version"] + = version.long + if primary { self.shellOutput["ls /opt/homebrew/opt | grep php"] = .instant("php") @@ -80,7 +85,7 @@ public struct TestableConfiguration: Codable { self.filesystem["/opt/homebrew/bin/php"] = .fake(.symlink, "/opt/homebrew/Cellar/php/\(version.long)/bin/php") self.filesystem["/opt/homebrew/bin/php-config"] - = .fake(.symlink, "/opt/homebrew/Cellar/php/\(version.long)/bin/php-config") + = .fake(.symlink, "/opt/homebrew/Cellar/php/\(version.short)/bin/php-config") self.commandOutput["/opt/homebrew/bin/php-config --version"] = version.long self.commandOutput["/opt/homebrew/bin/php -r echo php_ini_scanned_files();"] = @@ -88,12 +93,13 @@ public struct TestableConfiguration: Codable { /opt/homebrew/etc/php/\(version.short)/conf.d/php-memory-limits.ini, """ } else { + self.shellOutput["ls /opt/homebrew/opt | grep php@"] = - BatchFakeShellOutput.instant( - self.secondaryPhpVersions - .map { "php@\($0.short)" } - .joined(separator: "\n") - ) + BatchFakeShellOutput.instant( + self.secondaryPhpVersions + .map { "php@\($0.short)" } + .joined(separator: "\n") + ) } } diff --git a/phpmon/Domain/Integrations/Homebrew/BrewFormulaeHandler.swift b/phpmon/Domain/Integrations/Homebrew/BrewFormulaeHandler.swift index 83cddc82..c645ead0 100644 --- a/phpmon/Domain/Integrations/Homebrew/BrewFormulaeHandler.swift +++ b/phpmon/Domain/Integrations/Homebrew/BrewFormulaeHandler.swift @@ -44,6 +44,7 @@ class BrewFormulaeHandler: HandlesBrewFormulae { return Brew.phpVersionFormulae.map { (version, formula) in let fullVersion = PhpEnvironments.shared.cachedPhpInstallations[version]?.versionNumber.text + var upgradeVersion: String? if let version = fullVersion { diff --git a/tests/Shared/TestableConfigurations.swift b/tests/Shared/TestableConfigurations.swift index 4652f465..6a7eff1b 100644 --- a/tests/Shared/TestableConfigurations.swift +++ b/tests/Shared/TestableConfigurations.swift @@ -160,6 +160,22 @@ class TestableConfigurations { : .delayed(0.2, "OK"), "ln -sF ~/.config/valet/valet82.sock ~/.config/valet/valet.sock" : .instant("OK"), + "/opt/homebrew/bin/brew update >/dev/null && /opt/homebrew/bin/brew outdated --json --formulae": .delayed(2.0, """ + { + "formulae": [ + { + "name": "php", + "installed_versions": [ + "8.2.6" + ], + "current_version": "8.2.11", + "pinned": false, + "pinned_version": null + } + ], + "casks": [] + } + """) ], commandOutput: [ "/opt/homebrew/bin/php -r echo ini_get('memory_limit');": "512M", @@ -173,7 +189,7 @@ class TestableConfigurations { .automaticBackgroundUpdateCheck: false ], phpVersions: [ - VersionNumber(major: 8, minor: 2, patch: 0), + VersionNumber(major: 8, minor: 2, patch: 6), VersionNumber(major: 8, minor: 1, patch: 0), VersionNumber(major: 8, minor: 0, patch: 0) ] diff --git a/tests/ui/MainMenuTest.swift b/tests/ui/MainMenuTest.swift index 7589554a..2c459fca 100644 --- a/tests/ui/MainMenuTest.swift +++ b/tests/ui/MainMenuTest.swift @@ -71,6 +71,31 @@ final class MainMenuTest: UITestCase { click(app.buttons["Notifications"]) } + final func test_can_open_php_version_manager() throws { + let app = launch(openMenu: true) + app.mainMenuItem(withText: "mi_php_version_manager".localized).click() + + // Should display loader + assertExists(app.staticTexts["phpman.busy.title".localized], 1) + + // After loading, should display PHP 8.2 + assertExists(app.staticTexts["PHP 8.2"], 5) + + // Should also display pre-release version + assertExists(app.staticTexts["PHP 8.3"]) + assertExists(app.staticTexts["phpman.version.prerelease".localized.uppercased()]) + assertExists(app.staticTexts["phpman.version.available_for_installation".localized]) + + // But not PHP 8.4 (yet) + assertNotExists(app.staticTexts["PHP 8.4"]) + + // Also, PHP 8.2 should have an update available + assertExists(app.staticTexts["phpman.version.has_update".localized( + "8.2.6", + "8.2.11" + )], 5) + } + final func test_can_quit_app() throws { let app = launch(openMenu: true) app.mainMenuItem(withText: "mi_quit".localized).click()