mirror of
https://github.com/nicoverbruggen/phpmon.git
synced 2025-08-08 04:20:07 +02:00
Compare commits
85 Commits
Author | SHA1 | Date | |
---|---|---|---|
ff61d8c52e | |||
da41673855 | |||
5bda727981 | |||
d3053b8fe3 | |||
7159ca8612 | |||
141c06d14b | |||
d714d7ad4c | |||
07b17f3f84 | |||
7f0f7ff3e9 | |||
c7c143c760 | |||
8790b30706 | |||
c42188b717 | |||
cc251686f9 | |||
8a46b9d374 | |||
a62ebcff92 | |||
541378f3f9 | |||
e6f1d7e834 | |||
20d19f2f92 | |||
91bc347e57 | |||
e05300b25b | |||
1ae7a20870 | |||
5594130ccd | |||
b9c7cdb3cc | |||
00b4760b85 | |||
9a35014d2a | |||
7cba25b52e | |||
c6c3996c7b | |||
03c96a1d16 | |||
a6fa4b240f | |||
7e78026d06 | |||
d5888c1c7a | |||
e40b9fe45a | |||
f5d0ad20cd | |||
0615927f2f | |||
3d1806c094 | |||
8a57557074 | |||
19f4819450 | |||
aa8309dd9a | |||
7977a4e177 | |||
51c100f6fe | |||
aebfc9dd09 | |||
f9acbd34d0 | |||
eb566bb523 | |||
528f213f17 | |||
f8e6aa988e | |||
93e841735e | |||
cb28243181 | |||
fc68e37458 | |||
ae6736102a | |||
3ef1a6e60d | |||
5e7c7bc903 | |||
94f3c1c7c5 | |||
20aad90ba9 | |||
8bd85d8354 | |||
90b068d200 | |||
943b5aa6af | |||
4bf475bae2 | |||
125b9bb198 | |||
72cbf6996d | |||
e7cc940f65 | |||
c8323a8c27 | |||
6805855f03 | |||
db101f5a66 | |||
2302d5a5ee | |||
5cfb0f452c | |||
7da20b4f20 | |||
f1b037ce26 | |||
e59347ed7f | |||
206dff289f | |||
02f579fe81 | |||
2a74b11462 | |||
371f98b875 | |||
7955c777e7 | |||
5c9b06d83b | |||
3c7bed0a9b | |||
54f83a0aed | |||
b041ca37be | |||
2b2b027317 | |||
cdbd959159 | |||
0c3b68734c | |||
8b0aeef2e6 | |||
aa406434d0 | |||
d320c49092 | |||
966033e052 | |||
7c192730e1 |
File diff suppressed because it is too large
Load Diff
59
README.md
59
README.md
@ -3,7 +3,7 @@
|
||||
|
||||
<p align="center"><img src="./docs/logo.png" alt="PHP Monitor Logo" width="500px" /></p>
|
||||
|
||||
**PHP Monitor** (or *phpmon*) is a lightweight macOS utility app that runs on your Mac and displays the active PHP version in your status bar. It's tightly integrated with [Laravel Valet](https://github.com/laravel/valet), so <u>you need to have it set up before you can use this app</u> (consult the FAQ below with info about how to set up your environment).
|
||||
**PHP Monitor** (or *phpmon*) is a lightweight macOS utility app that runs on your Mac and displays the active PHP version in your status bar. It's tightly integrated with [Laravel Valet](https://github.com/laravel/valet), so <u>you need to have it set up if you want to use all of the functionality of the app</u> (consult the FAQ below with info about how to set up your environment).
|
||||
|
||||
<img src="./docs/screenshot.jpg" width="1280px" alt="phpmon screenshot (menu bar app)"/>
|
||||
|
||||
@ -22,9 +22,10 @@ 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)
|
||||
* Homebrew is installed in `/usr/local/homebrew` or `/opt/homebrew`
|
||||
* 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
|
||||
|
||||
_Starting with PHP Monitor 6.0, you do not need to have Laravel Valet installed for PHP Monitor to work. To get access to all features of PHP Monitor however, installing Valet is **recommended**._
|
||||
|
||||
@ -81,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.
|
||||
@ -103,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.
|
||||
</details>
|
||||
@ -113,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.
|
||||
|
||||
@ -134,6 +141,14 @@ If you are on an older version of macOS, you can do this by dragging *PHP Monito
|
||||
Super convenient!
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary><strong>What features are unavailable in Standalone Mode?</strong></summary>
|
||||
|
||||
The services manager is disabled, and all other obvious Laravel Valet integrations (configuration finder, domains list, Fix My Valet) are also disabled.
|
||||
|
||||
(Most other features remain available.)
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary><strong>I want to set up PHP Monitor from scratch! I don't have Homebrew installed either, where do I begin?</strong></summary>
|
||||
|
||||
@ -160,7 +175,7 @@ If you're on an Apple Silicon-based Mac, you'll need to add:
|
||||
and add the following to your `.zshrc` file, but add this BEFORE the homebrew PATH additions:
|
||||
|
||||
export PATH=$HOME/bin:~/.composer/vendor/bin:$PATH
|
||||
|
||||
|
||||
If you're adding `composer` and Homebrew binaries, ensure that Homebrew binaries are preferred by adding these to the path last. On my system, that looks like this:
|
||||
|
||||
export PATH=$HOME/bin:/usr/local/bin:$PATH
|
||||
@ -179,8 +194,12 @@ Make sure PHP is linked correctly:
|
||||
|
||||
should return: `/usr/local/bin/php` (or `/opt/homebrew/bin/php` if you are on Apple Silicon)
|
||||
|
||||
**If you don't need Laravel Valet, you can stop here. PHP Monitor will work like this in Standalone Mode.**
|
||||
|
||||
If you'd like to have Valet as well, continue and install Valet with Composer, like this.
|
||||
|
||||
composer global require laravel/valet
|
||||
|
||||
|
||||
For optimal results, you should lock your PHP platform for global dependencies to the oldest version of PHP you intend to run. If that version is PHP 7.0, your `~/.composer/composer.json` file could look like this (please adjust the version accordingly!):
|
||||
|
||||
```
|
||||
@ -199,18 +218,13 @@ For optimal results, you should lock your PHP platform for global dependencies t
|
||||
Run `composer global update` again. This ensures that when you switch to a different global PHP version, [Valet won't break](https://github.com/nicoverbruggen/phpmon/issues/178). If it does, PHP Monitor will let you know what you can do about this.
|
||||
|
||||
Then, install Valet:
|
||||
|
||||
|
||||
valet install
|
||||
|
||||
This should install `dnsmasq` and set up Valet. Great, almost there!
|
||||
|
||||
valet trust
|
||||
|
||||
You can now install PHP Monitor, if you haven't already:
|
||||
|
||||
brew tap nicoverbruggen/homebrew-cask
|
||||
brew install --cask phpmon
|
||||
|
||||
Finally, run PHP Monitor. Since the app is notarized and signed with a developer ID, it should work. You will need to approve the initial launch of the app, but you should be ready to go now.
|
||||
</details>
|
||||
|
||||
@ -219,13 +233,17 @@ Finally, run PHP Monitor. Since the app is notarized and signed with a developer
|
||||
|
||||
PHP Monitor will check if an update is available every time you start the app.
|
||||
|
||||
You can disable this behaviour by going to Preferences (via the PHP Monitor icon in the menu bar) and unchecking "Automatically check for updates". You can always check for updates manually.
|
||||
You can disable this behaviour by going to Preferences (via the PHP Monitor icon in the menu bar) and unchecking "Automatically check for updates". (You can always check for updates manually.)
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary><strong>I have PHP Monitor installed, and it works. I want to upgrade my PHP installations to the latest version, what's the best way to do this?</strong></summary>
|
||||
|
||||
The easiest way is to simply use the built-in **PHP Version Manager**, which will allow you to upgrade your PHP versions with one click.
|
||||
|
||||
If you want to do this manually, you can follow the instructions below.
|
||||
|
||||
It's easy to make a mistake here, and end up with an unlinked version of PHP or have versions missing from PHP Monitor.
|
||||
|
||||
Here's what I usually do:
|
||||
@ -255,7 +273,7 @@ This should resolve the issue! If that does not fix the issue, run `brew link ph
|
||||
|
||||
brew install php
|
||||
brew link php --force
|
||||
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
@ -310,12 +328,14 @@ Make sure you have at least **Valet 3.0** installed, since support for isolation
|
||||
<details>
|
||||
<summary><strong>One of the limits (memory limit, max POST size, max upload size) shows an exclamation mark!</strong></summary>
|
||||
|
||||
The value you provided in your INI file is invalid. If that is the case, PHP will attempt to parse your value as bytes, which is usually unintended. (`1GB` will resolve to merely a few bytes, and all of your applications will run out of memory!)
|
||||
The value you provided in your `.ini` file is invalid. If that is the case, PHP will attempt to parse your value as bytes, which is usually unintended. (`1GB` will resolve to merely a few bytes, and all of your applications will run out of memory!)
|
||||
|
||||
You must a provide a value like so: `1024K`, `256M`, `1G`. Alternatively, `-1` is also allowed, or just an integer (which will result in N amount of bytes being the limit).
|
||||
|
||||
**Example**: Trying to use `1GB` as the memory limit, for example, will result in this exclamation mark. The correct way to set a 1GB limit is by using `1G` as the value. (Note: The displayed value will append `B` for clarity, so if you set `1G`, the value reported by PHP Monitor will be 1 GB.)
|
||||
|
||||
(If you are using Valet, you can adjust these limits in the `.conf.d/php-memory-limits.ini` file. Otherwise, you may need to adjust `php.ini`.)
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
@ -404,6 +424,9 @@ You can omit the `php` key in the preset if you do not wish for the preset to sw
|
||||
<details>
|
||||
<summary><strong>How do I ensure additional Homebrew services are shown in the app?</strong></summary>
|
||||
|
||||
> **Info**
|
||||
> Homebrew services aren't displayed if you are using Valet in Standalone Mode.
|
||||
|
||||
You must set these services up in a JSON file, located in `~/.config/phpmon/config.json`.
|
||||
|
||||
You can specify custom services in the configuration file for Homebrew services that run as your own user (not root).
|
||||
@ -594,7 +617,7 @@ This utility will detect which PHP versions you have installed via Homebrew, and
|
||||
|
||||
The switcher will disable all PHP-FPM services not belonging to the version you wish to use, and link the desired version of PHP. Then, it'll restart your desired PHP version's FPM process. This all happens in parallel, so this should be a bit faster than Valet’s switcher.
|
||||
|
||||
If you're using Valet 3, versions of PHP-FPM required to keep isolated sites up and running will also be started or stopped as needed.
|
||||
If you're using Valet 3 or newer, versions of PHP-FPM required to keep isolated sites up and running will also be started or stopped as needed.
|
||||
|
||||
### Config change detection
|
||||
|
||||
|
@ -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+)<br/>Ventura (13.0+) | macOS 12.4 | PHP 5.6—PHP 8.2 (w/ Valet 2.x)<br/>PHP 7.0—PHP 8.2 (w/ Valet 3.x)<br/>PHP 7.1-PHP 8.2 (w/ Valet 4.x) | 3.0 or higher recommended<br/> 2.16.2 minimum |
|
||||
| 6.2 | ✅ Universal binary | ✅ Yes | Monterey (12.4+)<br/>Ventura (13.0+)<br/>Sonoma (14.0) | macOS 12.4 | PHP 5.6—PHP 8.2 (w/ Valet 2.x)<br/>PHP 7.0—PHP 8.4 (w/ Valet 3.x)<br/>PHP 7.1-PHP 8.4 (w/ Valet 4.x)| 3.0 or higher recommended<br/> 2.16.2 minimum |
|
||||
|
||||
## Legacy versions
|
||||
|
||||
@ -14,7 +14,9 @@ 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+)<br/>Ventura (13.0+) | macOS 12.4 | PHP 5.6—PHP 8.2 (w/ Valet 2.x)<br/>PHP 7.0—PHP 8.2 (w/ Valet 3.x)<br/>PHP 7.1-PHP 8.2 (w/ Valet 4.x) | 3.0 or higher recommended<br/> 2.16.2 minimum |
|
||||
| 6.1 | ✅ Universal binary | ❌ | Monterey (12.4+)<br/>Ventura (13.0+)<br/>Sonoma (14.0) | macOS 12.4 | PHP 5.6—PHP 8.2 (w/ Valet 2.x)<br/>PHP 7.0—PHP 8.4 (w/ Valet 3.x)<br/>PHP 7.1-PHP 8.4 (w/ Valet 4.x)| 3.0 or higher recommended<br/> 2.16.2 minimum |
|
||||
| 6.0 | ✅ Universal binary | ❌ | Monterey (12.4+)<br/>Ventura (13.0+) | macOS 12.4 | PHP 5.6—PHP 8.2 (w/ Valet 2.x)<br/>PHP 7.0—PHP 8.2 (w/ Valet 3.x)<br/>PHP 7.1-PHP 8.2 (w/ Valet 4.x) | 3.0 or higher recommended<br/> 2.16.2 minimum |
|
||||
| 5.8 | ✅ Universal binary | ❌ | Monterey (12.4+)<br/>Ventura (13.0+) | macOS 12.4 | PHP 5.6—PHP 8.2 (w/ Valet 2.x)<br/>PHP 7.0—PHP 8.2 (w/ Valet 3.x)<br/>PHP 7.1-PHP 8.2 (w/ Valet 4.x) | 3.0 or higher recommended<br/> 2.16.2 minimum |
|
||||
| 5.7 | ✅ Universal binary | ❌ | Big Sur (11.0)<br/>Monterey (12.0)<br/>Ventura (13.0) | macOS 11+ | PHP 5.6—PHP 8.2 (w/ Valet 2.x)<br/>PHP 7.0—PHP 8.2 (w/ Valet 3.x)<br/>PHP 7.1-PHP 8.2 (w/ Valet 4.x) | 3.0 or higher recommended<br/> 2.16.2 minimum |
|
||||
| 5.6 | ✅ Universal binary | ❌ | Big Sur (11.0)<br/>Monterey (12.0)<br/>Ventura (13.0) | macOS 11+ | PHP 5.6—PHP 8.2 (w/ Valet 2.x)<br/>PHP 7.0—PHP 8.2 (w/ Valet 3.x) | 3.0 recommended<br/> 2.16.2 minimum |
|
||||
| 4.1 | ✅ Universal binary | ❌ | Big Sur (11.0)<br/>Monterey (12.0) | macOS 11+ | PHP 5.6—PHP 8.2 | 2.16.2 |
|
||||
|
Binary file not shown.
Before Width: | Height: | Size: 627 KiB After Width: | Height: | Size: 674 KiB |
@ -18,6 +18,29 @@ struct Constants {
|
||||
*/
|
||||
static let MinimumRecommendedValetVersion = "2.16.2"
|
||||
|
||||
/**
|
||||
* The PHP versions that are considered pre-release versions.
|
||||
* Past a certain date, an experimental version "graduates"
|
||||
* to a release version and is no longer marked as experimental.
|
||||
*/
|
||||
static var ExperimentalPhpVersions: Set<String> {
|
||||
let releaseDates = [
|
||||
"8.4": Date.fromString("2024-12-01"), // PLACEHOLDER DATE
|
||||
"8.3": Date.fromString("2023-11-23") // OFFICIAL RELEASE
|
||||
]
|
||||
|
||||
return Set(releaseDates
|
||||
.filter { (_: String, date: Date?) in
|
||||
guard let date else {
|
||||
return false
|
||||
}
|
||||
|
||||
return date > Date.now
|
||||
}.map { (version: String, _: Date?) in
|
||||
return version
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* The PHP versions supported by this application.
|
||||
* Any other PHP versions are considered invalid.
|
||||
@ -25,7 +48,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 +67,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
|
||||
]
|
||||
]
|
||||
|
||||
@ -82,6 +107,8 @@ struct Constants {
|
||||
string: "https://raw.githubusercontent.com/nicoverbruggen/homebrew-cask/master/Casks/phpmon-dev.rb"
|
||||
)!
|
||||
|
||||
// EAP URLs
|
||||
|
||||
static let EarlyAccessCaskFile = URL(
|
||||
string: "https://phpmon.app/builds/early-access/sponsors/phpmon-eap.rb"
|
||||
)!
|
||||
|
@ -17,6 +17,7 @@ public class Paths {
|
||||
|
||||
internal var baseDir: Paths.HomebrewDir
|
||||
private var userName: String
|
||||
private var preferredShell: String
|
||||
|
||||
init() {
|
||||
// Assume the default directory is correct
|
||||
@ -31,7 +32,12 @@ public class Paths {
|
||||
}
|
||||
|
||||
userName = identity()
|
||||
Log.info("The current username is `\(userName)`.")
|
||||
preferredShell = preferred_shell()
|
||||
|
||||
if !isRunningSwiftUIPreview {
|
||||
Log.info("The current username is `\(userName)`.")
|
||||
Log.info("The user's shell is `\(preferredShell)`.")
|
||||
}
|
||||
}
|
||||
|
||||
public func detectBinaryPaths() {
|
||||
@ -101,6 +107,10 @@ public class Paths {
|
||||
+ (App.identifier.contains(".dev") ? "phpmon-dev" : "phpmon")
|
||||
}
|
||||
|
||||
public static var shell: String {
|
||||
return shared.preferredShell
|
||||
}
|
||||
|
||||
// MARK: - Flexible Binaries
|
||||
// (these can be in multiple locations, so we scan common places because)
|
||||
// (PHP Monitor will not use the user's own PATH)
|
||||
|
@ -15,4 +15,10 @@ extension Date {
|
||||
return dateFormatter.string(from: self)
|
||||
}
|
||||
|
||||
static func fromString(_ string: String) -> Date? {
|
||||
let dateFormatter = DateFormatter()
|
||||
dateFormatter.dateFormat = "yyyy-MM-dd"
|
||||
return dateFormatter.date(from: string)
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -32,13 +32,22 @@ struct Localization {
|
||||
|
||||
extension String {
|
||||
var localized: String {
|
||||
if #available(macOS 13, *) {
|
||||
return NSLocalizedString(
|
||||
self, tableName: nil, bundle: Localization.bundle, value: "", comment: ""
|
||||
).replacingOccurrences(of: "Preferences", with: "Settings")
|
||||
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: "")
|
||||
}
|
||||
|
||||
return NSLocalizedString(self, tableName: nil, bundle: Localization.bundle, value: "", comment: "")
|
||||
// Ensure that on more recent versions of macOS, "Preferences" is replaced with "Settings"
|
||||
if #available(macOS 13, *) {
|
||||
return string.replacingOccurrences(of: "Preferences", with: "Settings")
|
||||
}
|
||||
|
||||
return string
|
||||
}
|
||||
|
||||
var localizedForSwiftUI: LocalizedStringKey {
|
||||
@ -131,4 +140,10 @@ extension String {
|
||||
return ""
|
||||
}
|
||||
}
|
||||
|
||||
var isNumber: Bool {
|
||||
return self.range(
|
||||
of: "^[0-9]*$", // 1
|
||||
options: .regularExpression) != nil
|
||||
}
|
||||
}
|
||||
|
@ -37,7 +37,7 @@ class PMWindowController: NSWindowController, NSWindowDelegate {
|
||||
|
||||
extension NSWindowController {
|
||||
|
||||
public func positionWindowInTopLeftCorner(offsetY: CGFloat = 0, offsetX: CGFloat = 0) {
|
||||
public func positionWindowInTopRightCorner(offsetY: CGFloat = 0, offsetX: CGFloat = 0) {
|
||||
guard let frame = NSScreen.main?.frame else { return }
|
||||
guard let window = self.window else { return }
|
||||
|
||||
|
@ -65,3 +65,11 @@ public func identity() -> String {
|
||||
|
||||
return output.trimmingCharacters(in: .whitespacesAndNewlines)
|
||||
}
|
||||
|
||||
/**
|
||||
Retrieves the user's preferred shell.
|
||||
*/
|
||||
public func preferred_shell() -> String {
|
||||
return system("dscl . -read ~/ UserShell | sed 's/UserShell: //'")
|
||||
.trimmingCharacters(in: .whitespacesAndNewlines)
|
||||
}
|
||||
|
@ -13,7 +13,7 @@ class PhpEnvironments {
|
||||
// MARK: - Initializer
|
||||
|
||||
/**
|
||||
|
||||
Loads the currently active PHP installation upon startup. May be empty.
|
||||
*/
|
||||
init() {
|
||||
self.currentInstall = ActivePhpInstallation.load()
|
||||
@ -29,7 +29,7 @@ class PhpEnvironments {
|
||||
/**
|
||||
Determine which PHP version the `php` formula is aliased to.
|
||||
*/
|
||||
func determinePhpAlias() async {
|
||||
@MainActor func determinePhpAlias() async {
|
||||
let brewPhpAlias = await Shell.pipe("\(Paths.brew) info php --json").out
|
||||
|
||||
self.homebrewPackage = try! JSONDecoder().decode(
|
||||
@ -37,7 +37,28 @@ class PhpEnvironments {
|
||||
from: brewPhpAlias.data(using: .utf8)!
|
||||
).first!
|
||||
|
||||
Log.info("[BREW] On your system, the `php` formula means version \(homebrewPackage.version)!")
|
||||
PhpEnvironments.brewPhpAlias = self.homebrewPackage.version
|
||||
Log.info("[BREW] On your system, the `php` formula means version \(homebrewPackage.version).")
|
||||
|
||||
// Check if that version actually corresponds to an older version
|
||||
let phpConfigExecutablePath = "\(Paths.optPath)/php/bin/php-config"
|
||||
if FileSystem.fileExists(phpConfigExecutablePath) {
|
||||
let longVersionString = Command.execute(
|
||||
path: phpConfigExecutablePath,
|
||||
arguments: ["--version"],
|
||||
trimNewlines: false
|
||||
).trimmingCharacters(in: .whitespacesAndNewlines)
|
||||
|
||||
if let version = try? VersionNumber.parse(longVersionString) {
|
||||
PhpEnvironments.brewPhpAlias = version.short
|
||||
if version.short != homebrewPackage.version {
|
||||
Log.info("[BREW] An older version of `php` is actually installed (\(version.short)).")
|
||||
}
|
||||
} else {
|
||||
Log.warn("Could not determine the actual version of the php binary; assuming Homebrew is correct.")
|
||||
PhpEnvironments.brewPhpAlias = homebrewPackage.version
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: - Properties
|
||||
@ -49,12 +70,10 @@ class PhpEnvironments {
|
||||
static let shared = PhpEnvironments()
|
||||
|
||||
/** Whether the switcher is busy performing any actions. */
|
||||
var isBusy: Bool = false {
|
||||
@MainActor var isBusy: Bool = false {
|
||||
didSet {
|
||||
Task { @MainActor in
|
||||
MainMenu.shared.setBusyImage()
|
||||
MainMenu.shared.rebuild()
|
||||
}
|
||||
MainMenu.shared.refreshIcon()
|
||||
MainMenu.shared.rebuild()
|
||||
}
|
||||
}
|
||||
|
||||
@ -79,7 +98,12 @@ class PhpEnvironments {
|
||||
|
||||
As such, we take that information from Homebrew.
|
||||
*/
|
||||
static var brewPhpAlias: String {
|
||||
static var brewPhpAlias: String = ""
|
||||
|
||||
/**
|
||||
It's possible for the alias to be newer than the actual installed version of PHP.
|
||||
*/
|
||||
static var homebrewBrewPhpAlias: String {
|
||||
if PhpEnvironments.shared.homebrewPackage == nil { return "8.2" }
|
||||
|
||||
return PhpEnvironments.shared.homebrewPackage.version
|
||||
@ -146,7 +170,12 @@ class PhpEnvironments {
|
||||
|
||||
// Avoid inserting a duplicate
|
||||
if !supportedVersions.contains(phpAlias) && FileSystem.fileExists("\(Paths.optPath)/php/bin/php") {
|
||||
supportedVersions.insert(phpAlias)
|
||||
let phpAliasInstall = PhpInstallation(phpAlias)
|
||||
// Before inserting, ensure that the actual output matches the alias
|
||||
// if that isn't the case, our formula remains out-of-date
|
||||
if !phpAliasInstall.missingBinary {
|
||||
supportedVersions.insert(phpAlias)
|
||||
}
|
||||
}
|
||||
|
||||
availablePhpVersions = Array(supportedVersions)
|
||||
|
@ -49,8 +49,10 @@ class PhpHelper {
|
||||
let path = URL(fileURLWithPath: "\(Paths.optPath)/php@\(version)/bin")
|
||||
.resolvingSymlinksInPath().path
|
||||
|
||||
// The contents of the script!
|
||||
let script = script(path, keyPhrase, version, dotless)
|
||||
// Check if the user uses Fish
|
||||
let script = Paths.shell.contains("/fish")
|
||||
? fishScript(path, keyPhrase, version, dotless)
|
||||
: zshScript(path, keyPhrase, version, dotless)
|
||||
|
||||
Task { @MainActor in
|
||||
try FileSystem.writeAtomicallyToFile(destination, content: script)
|
||||
@ -78,7 +80,7 @@ class PhpHelper {
|
||||
}
|
||||
}
|
||||
|
||||
private static func script(
|
||||
private static func zshScript(
|
||||
_ path: String,
|
||||
_ keyPhrase: String,
|
||||
_ version: String,
|
||||
@ -96,6 +98,22 @@ class PhpHelper {
|
||||
"""
|
||||
}
|
||||
|
||||
private static func fishScript(
|
||||
_ path: String,
|
||||
_ keyPhrase: String,
|
||||
_ version: String,
|
||||
_ dotless: String
|
||||
) -> String {
|
||||
return """
|
||||
#!\(Paths.binPath)/fish
|
||||
# \(keyPhrase)
|
||||
# It reflects the location of PHP \(version)'s binaries on your system.
|
||||
# Usage: . pm\(dotless)
|
||||
echo "PHP Monitor has enabled this terminal to use PHP \(version)."; \\
|
||||
set -x PATH \(path) $PATH
|
||||
"""
|
||||
}
|
||||
|
||||
private static func createSymlink(_ dotless: String) async {
|
||||
let source = "\(Paths.homePath)/.config/phpmon/bin/pm\(dotless)"
|
||||
let destination = "/usr/local/bin/pm\(dotless)"
|
||||
|
@ -69,8 +69,9 @@ class PhpConfigurationFile: CreatedFromFile {
|
||||
return nil
|
||||
}
|
||||
|
||||
enum ReplacementErrors: Error {
|
||||
public enum ReplacementErrors: Error {
|
||||
case missingKey
|
||||
case missingFile
|
||||
}
|
||||
|
||||
/**
|
||||
@ -95,10 +96,16 @@ class PhpConfigurationFile: CreatedFromFile {
|
||||
// Replace the specific line
|
||||
self.lines[item.lineIndex] = components.joined(separator: "=")
|
||||
|
||||
// Ensure the watchers aren't tripped up by config changes
|
||||
ConfigWatchManager.ignoresModificationsToConfigValues = true
|
||||
|
||||
// Finally, join the string and save the file atomatically again
|
||||
try self.lines.joined(separator: "\n")
|
||||
.write(toFile: self.filePath, atomically: true, encoding: .utf8)
|
||||
|
||||
// Ensure watcher behaviour is reverted
|
||||
ConfigWatchManager.ignoresModificationsToConfigValues = false
|
||||
|
||||
// Reload the original file
|
||||
self.reload()
|
||||
}
|
||||
|
@ -67,7 +67,7 @@ class PhpExtension {
|
||||
|
||||
self.name = String(fullPath.split(separator: "/").last!) // take last segment
|
||||
|
||||
self.enabled = !line.contains(";")
|
||||
self.enabled = !line.starts(with: ";")
|
||||
self.file = file
|
||||
}
|
||||
|
||||
@ -76,7 +76,7 @@ class PhpExtension {
|
||||
You may need to restart the other services in order for this change to apply.
|
||||
*/
|
||||
func toggle() async {
|
||||
let newLine = enabled
|
||||
let newLine = !line.starts(with: ";")
|
||||
// DISABLED: Commented out line
|
||||
? "; \(line)"
|
||||
// ENABLED: Line where the comment delimiter (;) is removed
|
||||
@ -84,14 +84,14 @@ class PhpExtension {
|
||||
|
||||
await sed(file: file, original: line, replacement: newLine)
|
||||
|
||||
enabled.toggle()
|
||||
self.enabled = !newLine.starts(with: ";")
|
||||
self.line = newLine
|
||||
|
||||
if !isRunningTests {
|
||||
Task { @MainActor in
|
||||
MainMenu.shared.rebuild()
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// MARK: - Static Methods
|
||||
|
@ -12,6 +12,8 @@ class PhpInstallation {
|
||||
|
||||
var versionNumber: VersionNumber
|
||||
|
||||
var missingBinary: Bool = false
|
||||
|
||||
var isHealthy: Bool = true
|
||||
|
||||
/**
|
||||
@ -35,6 +37,10 @@ class PhpInstallation {
|
||||
// The parser should always work, or the string has to be very unusual.
|
||||
// If so, the app SHOULD crash, so that the users report what's up.
|
||||
self.versionNumber = try! VersionNumber.parse(longVersionString)
|
||||
} else {
|
||||
// Keep track that the `php-config` binary is missing; this often means there's a mismatch between
|
||||
// the `php` version alias and the actual installed version (e.g. you haven't upgraded `php`)
|
||||
missingBinary = true
|
||||
}
|
||||
|
||||
if FileSystem.fileExists(phpExecutablePath) {
|
||||
|
@ -43,6 +43,7 @@ public struct TestableConfiguration: Codable {
|
||||
private var primaryPhpVersion: VersionNumber?
|
||||
private var secondaryPhpVersions: [VersionNumber] = []
|
||||
|
||||
// swiftlint:disable function_body_length
|
||||
mutating func addPhpVersion(_ version: VersionNumber, primary: Bool) {
|
||||
if primary {
|
||||
if primaryPhpVersion != nil {
|
||||
@ -56,12 +57,14 @@ 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"
|
||||
: .fake(.binary),
|
||||
"/opt/homebrew/etc/php/\(version.short)/php-fpm.d/www.conf"
|
||||
: .fake(.text),
|
||||
// "/opt/homebrew/etc/php/\(version.short)/php-fpm.d/www.conf"
|
||||
// : .fake(.text),
|
||||
"/opt/homebrew/etc/php/\(version.short)/php-fpm.d/valet-fpm.conf"
|
||||
: .fake(.text),
|
||||
"/opt/homebrew/etc/php/\(version.short)/php.ini"
|
||||
@ -70,6 +73,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 +86,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 +94,13 @@ public struct TestableConfiguration: Codable {
|
||||
/opt/homebrew/etc/php/\(version.short)/conf.d/php-memory-limits.ini,
|
||||
"""
|
||||
} else {
|
||||
self.shellOutput["sudo /opt/homebrew/bin/brew services stop php@\(version.short)"] = .instant("")
|
||||
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")
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -17,7 +17,9 @@
|
||||
<p><b>Having issues?</b> Consult the <a href="https://phpmon.app/faq">FAQ</a> section, I did my best to ensure everything is documented.</p>
|
||||
<p><b>Want to support further development of PHP Monitor?</b> You can <a href="https://phpmon.app/sponsor">financially support</a> the continued development of this app.</p>
|
||||
<p><b>Get the latest on Twitter or Mastodon.</b> Give me a <a href="https://twitter.com/nicoverbruggen">follow on Twitter</a> or <a href="https://phpc.social/@nicoverbruggen">Mastodon</a> to learn about what's brewing and when new updates drop.</p>
|
||||
<br>
|
||||
<p><b>Special thanks</b> to all current and past <a href="https://github.com/sponsors/nicoverbruggen#sponsors"><b>sponsors</b></a> of PHP Monitor, who have helped to make further development of the app possible.</p>
|
||||
<p><b>Made possible by these GitHub Sponsors</b>: @abdusfauzi, @abicons, @adrolli, @andresayej, @andyunleashed, @anzacorp, @argirisp, @AshPowell, @aurawindsurfing, @awsmug, @barrycarton, @BertvanHoekelen, @calebporzio, @caseyalee, @cgreuling, @cjcox17, @Diewy, @drfraker, @driftingly, @duellsy, @edalzell, @EYOND, @faithfm, @frankmichel, @gwleuverink, @hopkins385, @intrepidws, @jacksleight, @JacobBennett, @jasonvarga, @jeromegamez, @jimmyaldape, @jimmysawczuk, @joetannenbaum, @jolora, @joshuablum, @jpeinelt, @jreviews, @JustSteveKing, @Kajvdh, @KFoobar, @Laravel-Backpack, @leganz, @martinleveille, @mathiasonea, @matthewmnewman, @mcastillo1030, @megabubbletea, @mennen-online, @mike-healy, @mostafakram, @mpociot, @MrMicky-FR, @MrMooky, @murdercode, @nckrtl, @nhedger, @ninjaparade, @ozanuzer, @pepatel, @philbraun, @pickuse2013, @pk-informatics, @Plytas, @rderimay, @rickyjohnston, @rico, @RobertBoes, @runofthemill, @SahinU88, @sdebacker, @sdevore, @shadracnicholas, @simonhamp, @SRWieZ, @stefanbauer, @StriveMedia, @swilla, @Tailcode-Studio, @theutz, @ThomasEnssner, @tillkruss, @timothyrowan, @ttnppedr, @vincent-tarrit, @WheresMarco, @xPand4B, @xuandung38, @yeslandi89, @zackkatz, @zacksmash, @zaherg.<br/>(Some names have been omitted due to their sponsorships being private. Thank you all!)
|
||||
<br/>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
|
@ -46,8 +46,10 @@ extension App {
|
||||
}
|
||||
|
||||
hotkey.keyDownHandler = {
|
||||
MainMenu.shared.statusItem.button?.performClick(nil)
|
||||
NSApplication.shared.activate(ignoringOtherApps: true)
|
||||
Task { @MainActor in
|
||||
MainMenu.shared.statusItem.button?.performClick(nil)
|
||||
NSApplication.shared.activate(ignoringOtherApps: true)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -74,11 +74,14 @@ class App {
|
||||
/** The window controller of the onboarding window. */
|
||||
var onboardingWindowController: OnboardingWindowController?
|
||||
|
||||
/** The window controller of the warnings window. */
|
||||
var warningsWindowController: WarningsWindowController?
|
||||
/** The window controller of the config manager window. */
|
||||
var phpConfigManagerWindowController: PhpConfigManagerWindowController?
|
||||
|
||||
/** The window controller of the warnings window. */
|
||||
var versionManagerWindowController: PhpVersionManagerWindowController?
|
||||
var phpDoctorWindowController: PhpDoctorWindowController?
|
||||
|
||||
/** The window controller of the PHP version manager window. */
|
||||
var phpVersionManagerWindowController: PhpVersionManagerWindowController?
|
||||
|
||||
/** List of detected (installed) applications that PHP Monitor can work with. */
|
||||
var detectedApplications: [Application] = []
|
||||
@ -86,9 +89,6 @@ class App {
|
||||
/** The warning manager, responsible for keeping track of warnings. */
|
||||
var warnings = WarningManager.shared
|
||||
|
||||
/** The filesystem watchers, responsible for keeping track of changes to the PHP installation. */
|
||||
var watchers: [FSNotifier.Kind: FSNotifier] = [:]
|
||||
|
||||
/** Timer that will periodically reload info about the user's PHP installation. */
|
||||
var timer: Timer?
|
||||
|
||||
@ -117,8 +117,12 @@ class App {
|
||||
|
||||
// MARK: - App Watchers
|
||||
|
||||
/**
|
||||
The `PhpConfigWatcher` is responsible for watching the `.ini` files and the `.conf.d` folder.
|
||||
/** Individual filesystem watchers, which are, i.e. responsible for watching the Homebrew folders. */
|
||||
var watchers: [String: FSNotifier] = [:]
|
||||
|
||||
/**
|
||||
The `ConfigWatchManager` is responsible for watching the `.ini` files and the `.conf.d` folder.
|
||||
This manager object can immediately start or stop all watchers (or pause them) all at once.
|
||||
*/
|
||||
var watcher: PhpConfigWatcher!
|
||||
var watchManager: ConfigWatchManager!
|
||||
}
|
||||
|
@ -11,6 +11,10 @@ import UserNotifications
|
||||
@NSApplicationMain
|
||||
class AppDelegate: NSObject, NSApplicationDelegate, UNUserNotificationCenterDelegate {
|
||||
|
||||
static var instance: AppDelegate {
|
||||
return NSApplication.shared.delegate as! AppDelegate
|
||||
}
|
||||
|
||||
// MARK: - Variables
|
||||
|
||||
/**
|
||||
@ -84,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
|
||||
@ -114,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()
|
||||
|
||||
@ -121,4 +132,18 @@ class AppDelegate: NSObject, NSApplicationDelegate, UNUserNotificationCenterDele
|
||||
await menu.startup()
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: - Menu Items
|
||||
|
||||
@IBOutlet weak var menuItemSites: NSMenuItem!
|
||||
|
||||
/**
|
||||
Ensure relevant menu items in the main menu bar (not the pop-up menu)
|
||||
are disabled or hidden when needed.
|
||||
*/
|
||||
public func configureMenuItems(standalone: Bool) {
|
||||
if standalone {
|
||||
menuItemSites.isHidden = true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,8 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<document type="com.apple.InterfaceBuilder3.Cocoa.Storyboard.XIB" version="3.0" toolsVersion="21507" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
|
||||
<document type="com.apple.InterfaceBuilder3.Cocoa.Storyboard.XIB" version="3.0" toolsVersion="22155" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
|
||||
<dependencies>
|
||||
<deployment identifier="macosx"/>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="21507"/>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="22155"/>
|
||||
<capability name="Image references" minToolsVersion="12.0"/>
|
||||
<capability name="Named colors" minToolsVersion="9.0"/>
|
||||
<capability name="Search Toolbar Item" minToolsVersion="12.0" minSystemVersion="11.0"/>
|
||||
@ -34,18 +34,6 @@
|
||||
</items>
|
||||
</menu>
|
||||
</menuItem>
|
||||
<menuItem title="File" id="XRy-v5-KNb">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<menu key="submenu" title="File" id="zA7-mh-f1x">
|
||||
<items>
|
||||
<menuItem title="Close" keyEquivalent="w" id="2FI-pQ-tuO">
|
||||
<connections>
|
||||
<action selector="performClose:" target="Ady-hI-5gd" id="ZHq-so-Sba"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
</items>
|
||||
</menu>
|
||||
</menuItem>
|
||||
<menuItem title="Sites" id="9gy-d3-Pos">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<menu key="submenu" title="Sites" id="YTZ-bb-TOG">
|
||||
@ -82,12 +70,12 @@
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<menu key="submenu" title="Edit" id="8Pm-83-BlM">
|
||||
<items>
|
||||
<menuItem title="Undo" keyEquivalent="z" id="jCt-Yf-FSE">
|
||||
<menuItem title="Undo" enabled="NO" keyEquivalent="z" id="jCt-Yf-FSE">
|
||||
<connections>
|
||||
<action selector="undo:" target="Ady-hI-5gd" id="O3z-27-Ug0"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Redo" keyEquivalent="Z" id="fCh-1M-Qyg">
|
||||
<menuItem title="Redo" enabled="NO" keyEquivalent="Z" id="fCh-1M-Qyg">
|
||||
<connections>
|
||||
<action selector="redo:" target="Ady-hI-5gd" id="utE-Bv-fdY"/>
|
||||
</connections>
|
||||
@ -297,6 +285,18 @@
|
||||
</items>
|
||||
</menu>
|
||||
</menuItem>
|
||||
<menuItem title="Window" id="XRy-v5-KNb">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<menu key="submenu" title="Window" id="zA7-mh-f1x">
|
||||
<items>
|
||||
<menuItem title="Close" keyEquivalent="w" id="2FI-pQ-tuO">
|
||||
<connections>
|
||||
<action selector="performClose:" target="Ady-hI-5gd" id="ZHq-so-Sba"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
</items>
|
||||
</menu>
|
||||
</menuItem>
|
||||
<menuItem title="Help" id="wpr-3q-Mcd">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<menu key="submenu" title="Help" systemMenu="help" id="F2S-fz-NVQ">
|
||||
@ -317,7 +317,11 @@
|
||||
</application>
|
||||
<customObject id="YLy-65-1bz" customClass="NSFontManager"/>
|
||||
<customObject id="Ady-hI-5gd" userLabel="First Responder" customClass="NSResponder" sceneMemberID="firstResponder"/>
|
||||
<customObject id="Voe-Tx-rLC" customClass="AppDelegate" customModule="PHP_Monitor" customModuleProvider="target"/>
|
||||
<customObject id="Voe-Tx-rLC" customClass="AppDelegate" customModule="PHP_Monitor" customModuleProvider="target">
|
||||
<connections>
|
||||
<outlet property="menuItemSites" destination="9gy-d3-Pos" id="nul-IL-YuR"/>
|
||||
</connections>
|
||||
</customObject>
|
||||
</objects>
|
||||
<point key="canvasLocation" x="-360" y="-94"/>
|
||||
</scene>
|
||||
@ -425,7 +429,7 @@
|
||||
</toolbarItem>
|
||||
<searchToolbarItem implicitItemIdentifier="7C834FBE-7118-4082-A09F-7CBECEC1356A" label="Search" paletteLabel="Search" visibilityPriority="1001" id="G2g-jS-RVc">
|
||||
<nil key="toolTip"/>
|
||||
<searchField key="view" verticalHuggingPriority="750" textCompletion="NO" id="0gE-Yr-MLy">
|
||||
<searchField key="view" focusRingType="none" verticalHuggingPriority="750" textCompletion="NO" id="0gE-Yr-MLy">
|
||||
<rect key="frame" x="0.0" y="0.0" width="100" height="21"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<searchFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" borderStyle="bezel" usesSingleLineMode="YES" bezelStyle="round" sendsSearchStringImmediately="YES" id="vp9-vH-goQ">
|
||||
@ -517,9 +521,6 @@
|
||||
<subviews>
|
||||
<button wantsLayer="YES" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="8zu-cF-KCX">
|
||||
<rect key="frame" x="383" y="13" width="104" height="32"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" relation="greaterThanOrEqual" constant="90" id="4Uf-fh-jWJ"/>
|
||||
</constraints>
|
||||
<buttonCell key="cell" type="push" title="Primary" bezelStyle="rounded" alignment="center" borderStyle="border" inset="2" id="F26-vf-hFH">
|
||||
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||
<font key="font" metaFont="system"/>
|
||||
@ -527,15 +528,15 @@
|
||||
DQ
|
||||
</string>
|
||||
</buttonCell>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" relation="greaterThanOrEqual" constant="90" id="4Uf-fh-jWJ"/>
|
||||
</constraints>
|
||||
<connections>
|
||||
<action selector="primaryButtonAction:" target="hkw-9V-NxP" id="W7d-3b-pZT"/>
|
||||
</connections>
|
||||
</button>
|
||||
<button wantsLayer="YES" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="TCp-nS-HN2">
|
||||
<rect key="frame" x="281" y="13" width="104" height="32"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" relation="greaterThanOrEqual" constant="90" id="QWZ-BA-0g9"/>
|
||||
</constraints>
|
||||
<buttonCell key="cell" type="push" title="Secondary" bezelStyle="rounded" alignment="center" borderStyle="border" inset="2" id="eCk-FC-9Zr">
|
||||
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||
<font key="font" metaFont="system"/>
|
||||
@ -543,6 +544,9 @@ DQ
|
||||
Gw
|
||||
</string>
|
||||
</buttonCell>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" relation="greaterThanOrEqual" constant="90" id="QWZ-BA-0g9"/>
|
||||
</constraints>
|
||||
<connections>
|
||||
<action selector="secondaryButtonAction:" target="hkw-9V-NxP" id="YJs-Hu-lFP"/>
|
||||
</connections>
|
||||
@ -571,7 +575,7 @@ Gw
|
||||
<constraint firstAttribute="bottom" secondItem="8zu-cF-KCX" secondAttribute="bottom" constant="20" symbolic="YES" id="wIl-uw-y3p"/>
|
||||
</constraints>
|
||||
</visualEffectView>
|
||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="U1c-qS-cIm">
|
||||
<textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="U1c-qS-cIm">
|
||||
<rect key="frame" x="98" y="153" width="384" height="19"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" relation="lessThanOrEqual" constant="380" id="WgB-hj-d4P"/>
|
||||
@ -582,7 +586,7 @@ Gw
|
||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
</textField>
|
||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="yI6-qf-htf">
|
||||
<textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="yI6-qf-htf">
|
||||
<rect key="frame" x="98" y="127" width="384" height="16"/>
|
||||
<textFieldCell key="cell" selectable="YES" title="This is a slightly more expanded explanation." id="rY3-Nd-Iit">
|
||||
<font key="font" metaFont="system"/>
|
||||
@ -606,7 +610,7 @@ Gw
|
||||
</constraints>
|
||||
<imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" id="7eT-Hw-EL9"/>
|
||||
</imageView>
|
||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="hml-dl-Cah">
|
||||
<textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="hml-dl-Cah">
|
||||
<rect key="frame" x="98" y="70" width="384" height="42"/>
|
||||
<textFieldCell key="cell" selectable="YES" id="7iW-Lc-DqO">
|
||||
<font key="font" metaFont="smallSystem"/>
|
||||
@ -681,9 +685,6 @@ DQ
|
||||
</button>
|
||||
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="SwS-o8-pbl">
|
||||
<rect key="frame" x="13" y="13" width="114" height="32"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" relation="greaterThanOrEqual" constant="80" id="qCP-Sp-gxm"/>
|
||||
</constraints>
|
||||
<buttonCell key="cell" type="push" title="[i18n] Cancel" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="WHE-HW-jwp">
|
||||
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||
<font key="font" metaFont="system"/>
|
||||
@ -691,11 +692,14 @@ DQ
|
||||
Gw
|
||||
</string>
|
||||
</buttonCell>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" relation="greaterThanOrEqual" constant="80" id="qCP-Sp-gxm"/>
|
||||
</constraints>
|
||||
<connections>
|
||||
<action selector="pressedCancel:" target="glS-wF-sEU" id="q0L-YZ-F3J"/>
|
||||
</connections>
|
||||
</button>
|
||||
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="ZX9-s1-23i">
|
||||
<textField focusRingType="none" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="ZX9-s1-23i">
|
||||
<rect key="frame" x="20" y="150" width="440" height="21"/>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" borderStyle="bezel" placeholderString="Enter a domain name here." drawsBackground="YES" id="NFa-1D-Bi4">
|
||||
<font key="font" metaFont="system"/>
|
||||
@ -706,7 +710,7 @@ Gw
|
||||
<outlet property="delegate" destination="glS-wF-sEU" id="Dyf-0M-Gwj"/>
|
||||
</connections>
|
||||
</textField>
|
||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="VzR-5a-cmT">
|
||||
<textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="VzR-5a-cmT">
|
||||
<rect key="frame" x="18" y="128" width="444" height="14"/>
|
||||
<textFieldCell key="cell" title="[i18n] Preview text here" id="bJr-s6-tdP">
|
||||
<font key="font" metaFont="smallSystem"/>
|
||||
@ -724,7 +728,7 @@ Gw
|
||||
<action selector="pressedSecure:" target="glS-wF-sEU" id="OIj-Pz-5Ea"/>
|
||||
</connections>
|
||||
</button>
|
||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="mmQ-7e-dlb">
|
||||
<textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="mmQ-7e-dlb">
|
||||
<rect key="frame" x="18" y="60" width="444" height="28"/>
|
||||
<textFieldCell key="cell" title="[i18n] Securing a domain requires administrative privileges.
You may be prompted for your password or Touch ID." id="4gd-KM-5Fu">
|
||||
<font key="font" metaFont="smallSystem"/>
|
||||
@ -739,7 +743,7 @@ Gw
|
||||
<url key="url" string="file:///Users/"/>
|
||||
</pathCell>
|
||||
</pathControl>
|
||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="P0B-Ht-R8n">
|
||||
<textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="P0B-Ht-R8n">
|
||||
<rect key="frame" x="18" y="209" width="128" height="16"/>
|
||||
<textFieldCell key="cell" lineBreakMode="clipping" title="[i18n] Link a Folder" id="S4j-ZC-ddT">
|
||||
<font key="font" textStyle="headline" name=".SFNS-Bold"/>
|
||||
@ -747,7 +751,7 @@ Gw
|
||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
</textField>
|
||||
<textField hidden="YES" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="900-Z2-tID">
|
||||
<textField hidden="YES" focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="900-Z2-tID">
|
||||
<rect key="frame" x="140" y="23" width="180" height="14"/>
|
||||
<textFieldCell key="cell" lineBreakMode="clipping" title="That domain name already exists." id="jOt-n6-TQf">
|
||||
<font key="font" metaFont="smallSystem"/>
|
||||
@ -882,7 +886,7 @@ Gw
|
||||
<rect key="frame" x="69" y="0.0" width="200" height="54"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="XJL-Uw-frD">
|
||||
<textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="XJL-Uw-frD">
|
||||
<rect key="frame" x="3" y="26" width="145" height="16"/>
|
||||
<textFieldCell key="cell" lineBreakMode="truncatingTail" sendsActionOnEndEditing="YES" title="my-domain-name.test" id="SGC-Gm-Mxd">
|
||||
<font key="font" metaFont="systemSemibold" size="13"/>
|
||||
@ -890,7 +894,7 @@ Gw
|
||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
</textField>
|
||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="CXK-Q9-CpO">
|
||||
<textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="CXK-Q9-CpO">
|
||||
<rect key="frame" x="3" y="12" width="75" height="14"/>
|
||||
<textFieldCell key="cell" lineBreakMode="truncatingTail" sendsActionOnEndEditing="YES" title="~/path/to/site" id="fe7-Ha-mR9">
|
||||
<font key="font" metaFont="smallSystem"/>
|
||||
@ -933,13 +937,13 @@ Gw
|
||||
<subviews>
|
||||
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="ZXQ-bg-Xba">
|
||||
<rect key="frame" x="27" y="18" width="70" height="18"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" relation="greaterThanOrEqual" constant="70" id="MBa-bB-DTB"/>
|
||||
</constraints>
|
||||
<buttonCell key="cell" type="inline" title="PHP X.X" bezelStyle="inline" alignment="center" borderStyle="border" inset="2" id="Tfk-YR-L4B">
|
||||
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||
<font key="font" metaFont="smallSystemBold"/>
|
||||
</buttonCell>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" relation="greaterThanOrEqual" constant="70" id="MBa-bB-DTB"/>
|
||||
</constraints>
|
||||
<connections>
|
||||
<action selector="pressedPhpVersion:" target="T49-0U-d58" id="jVO-TS-F6d"/>
|
||||
</connections>
|
||||
@ -969,7 +973,7 @@ Gw
|
||||
</tableCellView>
|
||||
</prototypeCellViews>
|
||||
</tableColumn>
|
||||
<tableColumn identifier="KIND" width="36" minWidth="36" maxWidth="36" id="7EV-ZL-92u">
|
||||
<tableColumn identifier="KIND" width="50" minWidth="50" maxWidth="120" id="7EV-ZL-92u">
|
||||
<tableHeaderCell key="headerCell" lineBreakMode="truncatingTail" borderStyle="border" title="Kind">
|
||||
<color key="textColor" name="headerTextColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||
@ -983,11 +987,11 @@ Gw
|
||||
<tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/>
|
||||
<prototypeCellViews>
|
||||
<tableCellView identifier="domainListKindCell" wantsLayer="YES" id="AhT-xR-16a" customClass="DomainListKindCell" customModule="PHP_Monitor" customModuleProvider="target">
|
||||
<rect key="frame" x="403" y="0.0" width="36" height="54"/>
|
||||
<rect key="frame" x="403" y="0.0" width="50" height="54"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="sYR-vb-OW1">
|
||||
<rect key="frame" x="9" y="18" width="18" height="18"/>
|
||||
<rect key="frame" x="16" y="18" width="18" height="18"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="18" id="XcB-uw-szU"/>
|
||||
<constraint firstAttribute="height" constant="18" id="bGN-Vh-Sh0"/>
|
||||
@ -1020,10 +1024,10 @@ Gw
|
||||
<tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/>
|
||||
<prototypeCellViews>
|
||||
<tableCellView identifier="domainListTypeCell" wantsLayer="YES" id="ntU-Rl-ciP" customClass="DomainListTypeCell" customModule="PHP_Monitor" customModuleProvider="target">
|
||||
<rect key="frame" x="456" y="0.0" width="97" height="54"/>
|
||||
<rect key="frame" x="470" y="0.0" width="97" height="54"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Ljl-8B-key">
|
||||
<textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Ljl-8B-key">
|
||||
<rect key="frame" x="6" y="26" width="93" height="14"/>
|
||||
<textFieldCell key="cell" alignment="left" title="Laravel" id="0lu-L6-oKr">
|
||||
<font key="font" metaFont="smallSystem"/>
|
||||
@ -1031,7 +1035,7 @@ Gw
|
||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
</textField>
|
||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="aPK-Xc-J4B">
|
||||
<textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="aPK-Xc-J4B">
|
||||
<rect key="frame" x="6" y="15" width="93" height="11"/>
|
||||
<textFieldCell key="cell" alignment="left" title="PHP 8.0" id="puf-Jh-ham">
|
||||
<font key="font" metaFont="miniSystem"/>
|
||||
@ -1121,7 +1125,7 @@ Gw
|
||||
<rect key="frame" x="0.0" y="0.0" width="540" height="286"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="QCK-Z9-w7g">
|
||||
<textField focusRingType="none" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="QCK-Z9-w7g">
|
||||
<rect key="frame" x="20" y="196" width="500" height="21"/>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" borderStyle="bezel" title="http://127.0.0.1:80" placeholderString="http://127.0.0.1:80" drawsBackground="YES" id="muS-8M-KSy">
|
||||
<font key="font" metaFont="system"/>
|
||||
@ -1132,7 +1136,7 @@ Gw
|
||||
<outlet property="delegate" destination="dwh-CF-6iv" id="lNE-OI-G93"/>
|
||||
</connections>
|
||||
</textField>
|
||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Uib-vA-HRc">
|
||||
<textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Uib-vA-HRc">
|
||||
<rect key="frame" x="18" y="221" width="325" height="14"/>
|
||||
<textFieldCell key="cell" lineBreakMode="clipping" title="[i18n] Proxy subject (usually: protocol, IP address and port)" id="G1Z-3f-BhL">
|
||||
<font key="font" metaFont="systemMedium" size="11"/>
|
||||
@ -1140,7 +1144,7 @@ Gw
|
||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
</textField>
|
||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="mlA-Zt-Hu8">
|
||||
<textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="mlA-Zt-Hu8">
|
||||
<rect key="frame" x="18" y="172" width="112" height="14"/>
|
||||
<textFieldCell key="cell" lineBreakMode="clipping" title="[i18n] Domain name" id="dQs-oZ-80e">
|
||||
<font key="font" metaFont="systemMedium" size="11"/>
|
||||
@ -1148,7 +1152,7 @@ Gw
|
||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
</textField>
|
||||
<textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="SNw-oQ-bnb">
|
||||
<textField focusRingType="none" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="SNw-oQ-bnb">
|
||||
<rect key="frame" x="20" y="147" width="500" height="21"/>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" borderStyle="bezel" placeholderString="Enter a domain name here." drawsBackground="YES" id="gTQ-Y2-Y9w">
|
||||
<font key="font" metaFont="system"/>
|
||||
@ -1190,9 +1194,6 @@ DQ
|
||||
</button>
|
||||
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="nC0-dk-QaF">
|
||||
<rect key="frame" x="13" y="13" width="114" height="32"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" relation="greaterThanOrEqual" constant="80" id="uCc-fF-wS2"/>
|
||||
</constraints>
|
||||
<buttonCell key="cell" type="push" title="[i18n] Cancel" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="D8g-GE-7TU">
|
||||
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||
<font key="font" metaFont="system"/>
|
||||
@ -1200,11 +1201,14 @@ DQ
|
||||
Gw
|
||||
</string>
|
||||
</buttonCell>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" relation="greaterThanOrEqual" constant="80" id="uCc-fF-wS2"/>
|
||||
</constraints>
|
||||
<connections>
|
||||
<action selector="pressedCancel:" target="dwh-CF-6iv" id="J2T-Zj-A0j"/>
|
||||
</connections>
|
||||
</button>
|
||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="JSZ-x8-Pqi">
|
||||
<textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="JSZ-x8-Pqi">
|
||||
<rect key="frame" x="18" y="128" width="504" height="14"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" relation="lessThanOrEqual" constant="500" id="sF1-RG-URI"/>
|
||||
@ -1225,7 +1229,7 @@ Gw
|
||||
<action selector="pressedSecure:" target="dwh-CF-6iv" id="b74-8T-AzO"/>
|
||||
</connections>
|
||||
</button>
|
||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="5x7-ll-2f7">
|
||||
<textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="5x7-ll-2f7">
|
||||
<rect key="frame" x="18" y="60" width="504" height="28"/>
|
||||
<textFieldCell key="cell" title="[i18n] Securing a domain requires administrative privileges.
You may be prompted for your password or Touch ID." id="IMB-O5-ZOy">
|
||||
<font key="font" metaFont="smallSystem"/>
|
||||
@ -1233,7 +1237,7 @@ Gw
|
||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
</textField>
|
||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="DAh-br-Dfx">
|
||||
<textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="DAh-br-Dfx">
|
||||
<rect key="frame" x="18" y="250" width="123" height="16"/>
|
||||
<textFieldCell key="cell" lineBreakMode="clipping" title="[i18n] Add a Proxy" id="AZ1-04-kUl">
|
||||
<font key="font" textStyle="headline" name=".SFNS-Bold"/>
|
||||
@ -1241,7 +1245,7 @@ Gw
|
||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
</textField>
|
||||
<textField hidden="YES" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="w0k-CK-0u4">
|
||||
<textField hidden="YES" focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="w0k-CK-0u4">
|
||||
<rect key="frame" x="191" y="23" width="180" height="14"/>
|
||||
<textFieldCell key="cell" lineBreakMode="clipping" title="That domain name already exists." id="4sH-94-UJl">
|
||||
<font key="font" metaFont="smallSystem"/>
|
||||
@ -1336,9 +1340,6 @@ Gw
|
||||
<subviews>
|
||||
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="FhN-AM-SkI">
|
||||
<rect key="frame" x="13" y="13" width="114" height="32"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" relation="greaterThanOrEqual" constant="80" id="Zhu-D8-cLK"/>
|
||||
</constraints>
|
||||
<buttonCell key="cell" type="push" title="[i18n] Cancel" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="LxP-t4-H2W">
|
||||
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||
<font key="font" metaFont="system"/>
|
||||
@ -1346,6 +1347,9 @@ Gw
|
||||
Gw
|
||||
</string>
|
||||
</buttonCell>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" relation="greaterThanOrEqual" constant="80" id="Zhu-D8-cLK"/>
|
||||
</constraints>
|
||||
<connections>
|
||||
<action selector="pressedCancel:" target="gOD-Gu-zDG" id="wMp-sM-0A4"/>
|
||||
</connections>
|
||||
@ -1385,7 +1389,7 @@ Gw
|
||||
<real value="3.4028234663852886e+38"/>
|
||||
</customSpacing>
|
||||
</stackView>
|
||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="fJK-Ke-IK3">
|
||||
<textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="fJK-Ke-IK3">
|
||||
<rect key="frame" x="18" y="138" width="504" height="19"/>
|
||||
<textFieldCell key="cell" selectable="YES" alignment="left" title="[i18n] What kind of domain would you like to set up?" id="agk-Nj-FLd">
|
||||
<font key="font" metaFont="systemBold" size="15"/>
|
||||
@ -1393,7 +1397,7 @@ Gw
|
||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
</textField>
|
||||
<textField wantsLayer="YES" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="urj-Xq-TrJ">
|
||||
<textField wantsLayer="YES" focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="urj-Xq-TrJ">
|
||||
<rect key="frame" x="18" y="60" width="504" height="70"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" relation="lessThanOrEqual" constant="500" id="tbl-AV-4qB"/>
|
||||
|
@ -23,13 +23,13 @@ class InterApp {
|
||||
|
||||
@MainActor static func getCommands() -> [InterApp.Action] { return [
|
||||
InterApp.Action(command: "list", action: { _ in
|
||||
DomainListVC.show()
|
||||
if Valet.installed { DomainListVC.show() }
|
||||
}),
|
||||
InterApp.Action(command: "services/stop", action: { _ in
|
||||
Task { MainMenu.shared.stopValetServices() }
|
||||
if Valet.installed { Task { MainMenu.shared.stopValetServices() } }
|
||||
}),
|
||||
InterApp.Action(command: "services/restart/all", action: { _ in
|
||||
Task { MainMenu.shared.restartValetServices() }
|
||||
if Valet.installed { Task { MainMenu.shared.restartValetServices() } }
|
||||
}),
|
||||
InterApp.Action(command: "services/restart/nginx", action: { _ in
|
||||
Task { MainMenu.shared.restartNginx() }
|
||||
@ -47,7 +47,7 @@ class InterApp {
|
||||
Task { MainMenu.shared.openGlobalComposerFolder() }
|
||||
}),
|
||||
InterApp.Action(command: "locate/valet", action: { _ in
|
||||
Task { MainMenu.shared.openValetConfigFolder() }
|
||||
if Valet.installed { Task { MainMenu.shared.openValetConfigFolder() } }
|
||||
}),
|
||||
InterApp.Action(command: "phpinfo", action: { _ in
|
||||
Task { MainMenu.shared.openPhpInfo() }
|
||||
|
@ -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 {
|
||||
|
@ -34,6 +34,10 @@ class ValetServicesManager: ServicesManager {
|
||||
these two commands are executed concurrently.
|
||||
*/
|
||||
override func reloadServicesStatus() async {
|
||||
if !Valet.installed {
|
||||
return Log.info("Not reloading services because running in Standalone Mode.")
|
||||
}
|
||||
|
||||
await withTaskGroup(of: [HomebrewService].self, body: { group in
|
||||
// First, retrieve the status of the formulae that run as root
|
||||
group.addTask {
|
||||
|
@ -241,6 +241,20 @@ class Startup {
|
||||
descriptionText: "startup.errors.which_alias_issue.desc".localized
|
||||
),
|
||||
// =================================================================================
|
||||
// Determine that Laravel Herd is not running (may cause conflicts)
|
||||
// =================================================================================
|
||||
EnvironmentCheck(
|
||||
command: {
|
||||
return NSWorkspace.shared.runningApplications.contains(where: { app in
|
||||
return app.bundleIdentifier == "de.beyondco.herd"
|
||||
})
|
||||
},
|
||||
name: "Herd is not running",
|
||||
titleText: "startup.errors.herd_running.title".localized,
|
||||
subtitleText: "startup.errors.herd_running.subtitle".localized,
|
||||
descriptionText: "startup.errors.herd_running.desc".localized
|
||||
),
|
||||
// =================================================================================
|
||||
// Determine that Valet works correctly (no issues in platform detected)
|
||||
// =================================================================================
|
||||
EnvironmentCheck(
|
||||
|
@ -62,12 +62,13 @@ struct ComposerJson: Decodable {
|
||||
public func getNotableDependencies() -> [String: String] {
|
||||
var notable: [String: String] = [:]
|
||||
|
||||
var scan = Array(PhpFrameworks.DependencyList.keys)
|
||||
scan.append("php")
|
||||
let scan = Array(ProjectTypeDetection.CommonDependencyList.keys) +
|
||||
Array(ProjectTypeDetection.SpecificDependencyList.keys) +
|
||||
["php"]
|
||||
|
||||
scan.forEach { dependency in
|
||||
if dependencies?[dependency] != nil {
|
||||
notable[dependency] = dependencies![dependency]
|
||||
if let resolvedDependency = dependencies?[dependency] {
|
||||
notable[dependency] = resolvedDependency
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -28,8 +28,6 @@ import Foundation
|
||||
}
|
||||
|
||||
PhpEnvironments.shared.isBusy = true
|
||||
MainMenu.shared.setBusyImage()
|
||||
MainMenu.shared.rebuild()
|
||||
|
||||
window = TerminalProgressWindowController.display(
|
||||
title: "alert.composer_progress.title".localized,
|
||||
@ -106,14 +104,11 @@ import Foundation
|
||||
|
||||
private func removeBusyStatus() {
|
||||
PhpEnvironments.shared.isBusy = false
|
||||
Task { @MainActor in
|
||||
MainMenu.shared.updatePhpVersionInStatusBar()
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: Alert
|
||||
|
||||
@MainActor private func presentMissingAlert() {
|
||||
private func presentMissingAlert() {
|
||||
BetterAlert()
|
||||
.withInformation(
|
||||
title: "alert.composer_missing.title".localized,
|
||||
|
@ -8,20 +8,20 @@
|
||||
|
||||
import Foundation
|
||||
|
||||
struct PhpFrameworks {
|
||||
|
||||
struct ProjectTypeDetection {
|
||||
/**
|
||||
This list should probably be reversed when checked, because some of these
|
||||
will also require either `laravel/framework` or `symfony/symfony`.
|
||||
This list is only checked if the specific dependency list doesn't report a match.
|
||||
*/
|
||||
public static let DependencyList = [
|
||||
|
||||
// COMMON FRAMEWORKS
|
||||
public static let CommonDependencyList = [
|
||||
"laravel/framework": "Laravel",
|
||||
"symfony/symfony": "Symfony",
|
||||
"laravel/lumen": "Lumen",
|
||||
"laravel/lumen": "Lumen"
|
||||
]
|
||||
|
||||
// VARIOUS CMS
|
||||
/**
|
||||
This list is checked first to see if a project dependency can be mapped to a certain project type.
|
||||
*/
|
||||
public static let SpecificDependencyList = [
|
||||
"roots/bedrock": "Bedrock",
|
||||
"cakephp/app": "CakePHP",
|
||||
"craftcms/craft": "Craft",
|
||||
@ -37,30 +37,8 @@ struct PhpFrameworks {
|
||||
"johnpbloch/wordpress-core": "WordPress",
|
||||
"zendframework/zendframework": "Zend",
|
||||
"zendframework/zend-mvc": "Zend",
|
||||
"typo3/cms-core": "Typo3"
|
||||
// "magento/*": "Magento",
|
||||
// "concrete5/*": "Concrete5",
|
||||
// "contao/*": "Contao",
|
||||
// "slim/*": "Slim",
|
||||
]
|
||||
|
||||
public static let FileMapping: [String: [String]] = [
|
||||
"Drupal": [
|
||||
// Legacy installations
|
||||
"/misc/drupal.js",
|
||||
"/core/lib/Drupal.php",
|
||||
// The default (new) installation w/ Composer puts the modules in /web
|
||||
"/web/misc/drupal.js",
|
||||
"/web/core/lib/Drupal.php"
|
||||
],
|
||||
"WordPress": [
|
||||
"/wp-config.php",
|
||||
"/wp-config-sample.php"
|
||||
],
|
||||
"Typo3": [
|
||||
"/typo3",
|
||||
"/public/typo3"
|
||||
]
|
||||
"typo3/cms-core": "Typo3",
|
||||
"slim/slim": "Slim"
|
||||
]
|
||||
|
||||
/**
|
||||
@ -82,4 +60,25 @@ struct PhpFrameworks {
|
||||
return nil
|
||||
}
|
||||
|
||||
/**
|
||||
File mapping is used as a fallback if neither specific nor framework matches could be done.
|
||||
*/
|
||||
public static let FileMapping: [String: [String]] = [
|
||||
"Drupal": [
|
||||
// Legacy installations
|
||||
"/misc/drupal.js",
|
||||
"/core/lib/Drupal.php",
|
||||
// The default (new) installation w/ Composer puts the modules in /web
|
||||
"/web/misc/drupal.js",
|
||||
"/web/core/lib/Drupal.php"
|
||||
],
|
||||
"WordPress": [
|
||||
"/wp-config.php",
|
||||
"/wp-config-sample.php"
|
||||
],
|
||||
"Typo3": [
|
||||
"/typo3",
|
||||
"/public/typo3"
|
||||
]
|
||||
]
|
||||
}
|
@ -45,9 +45,11 @@ class Brew {
|
||||
|
||||
/// Each formula for each PHP version that can be installed.
|
||||
public static let phpVersionFormulae = [
|
||||
"8.4": "shivammathur/php/php@8.4",
|
||||
"8.3": "php@8.3",
|
||||
"8.2": "php@8.2",
|
||||
"8.1": "php@8.1",
|
||||
"8.0": "php@8.0",
|
||||
"8.0": "shivammathur/php/php@8.0",
|
||||
"7.4": "shivammathur/php/php@7.4",
|
||||
"7.3": "shivammathur/php/php@7.3",
|
||||
"7.2": "shivammathur/php/php@7.2",
|
||||
|
@ -8,7 +8,7 @@
|
||||
|
||||
import Foundation
|
||||
|
||||
struct BrewFormula {
|
||||
struct BrewFormula: Equatable {
|
||||
/// Name of the formula.
|
||||
let name: String
|
||||
|
||||
@ -21,16 +21,52 @@ 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
|
||||
}
|
||||
|
||||
/// Whether this formula alias is different.
|
||||
var hasUpgradedFormulaAlias: Bool {
|
||||
return self.shortVersion == PhpEnvironments.homebrewBrewPhpAlias
|
||||
&& PhpEnvironments.homebrewBrewPhpAlias != PhpEnvironments.brewPhpAlias
|
||||
}
|
||||
|
||||
var unavailableAfterUpgrade: Bool {
|
||||
if installedVersion == nil || upgradeVersion == nil {
|
||||
return false
|
||||
}
|
||||
|
||||
if let installed = try? VersionNumber.parse(self.installedVersion!),
|
||||
let upgrade = try? VersionNumber.parse(self.upgradeVersion!) {
|
||||
return upgrade.short != installed.short
|
||||
}
|
||||
|
||||
return false
|
||||
}
|
||||
|
||||
/// The associated Homebrew folder with this PHP formula.
|
||||
var homebrewFolder: String {
|
||||
let resolved = name
|
||||
@ -43,7 +79,7 @@ struct BrewFormula {
|
||||
/// The short version associated with this formula, if installed.
|
||||
var shortVersion: String? {
|
||||
guard let version = self.installedVersion else {
|
||||
return nil
|
||||
return self.displayName.replacingOccurrences(of: "PHP ", with: "")
|
||||
}
|
||||
|
||||
return VersionNumber.make(from: version)?.short ?? nil
|
||||
|
@ -17,6 +17,7 @@ extension HandlesBrewFormulae {
|
||||
public func refreshPhpVersions(loadOutdated: Bool) async {
|
||||
let items = await loadPhpVersions(loadOutdated: loadOutdated)
|
||||
Task { @MainActor in
|
||||
await PhpEnvironments.shared.determinePhpAlias()
|
||||
Brew.shared.formulae.phpVersions = items
|
||||
}
|
||||
}
|
||||
@ -43,7 +44,9 @@ class BrewFormulaeHandler: HandlesBrewFormulae {
|
||||
}
|
||||
|
||||
return Brew.phpVersionFormulae.map { (version, formula) in
|
||||
let fullVersion = PhpEnvironments.shared.cachedPhpInstallations[version]?.versionNumber.text
|
||||
let fullVersion = PhpEnvironments.shared.cachedPhpInstallations[version]?
|
||||
.versionNumber.text
|
||||
|
||||
var upgradeVersion: String?
|
||||
|
||||
if let version = fullVersion {
|
||||
@ -52,12 +55,15 @@ class BrewFormulaeHandler: HandlesBrewFormulae {
|
||||
})?.current_version
|
||||
}
|
||||
|
||||
return BrewFormula(
|
||||
let formula = BrewFormula(
|
||||
name: formula,
|
||||
displayName: "PHP \(version)",
|
||||
installedVersion: fullVersion,
|
||||
upgradeVersion: upgradeVersion
|
||||
upgradeVersion: upgradeVersion,
|
||||
prerelease: Constants.ExperimentalPhpVersions.contains(version)
|
||||
)
|
||||
|
||||
return formula
|
||||
}.sorted { $0.displayName > $1.displayName }
|
||||
}
|
||||
}
|
||||
|
@ -41,9 +41,22 @@ class InstallAndUpgradeCommand: BrewCommand {
|
||||
description: "PHP Monitor is preparing Homebrew..."
|
||||
))
|
||||
|
||||
// Try to run all upgrade and installation operations
|
||||
try await self.upgradePackages(onProgress)
|
||||
try await self.installPackages(onProgress)
|
||||
let unavailable = upgrading.first(where: { formula in
|
||||
formula.unavailableAfterUpgrade
|
||||
})
|
||||
|
||||
// Make sure the tap is installed
|
||||
try await self.checkPhpTap(onProgress)
|
||||
|
||||
if unavailable == nil {
|
||||
// Try to run all upgrade and installation operations
|
||||
try await self.upgradePackages(onProgress)
|
||||
try await self.installPackages(onProgress)
|
||||
} else {
|
||||
// Simply upgrade `php` to the latest version
|
||||
try await self.upgradeMainPhpFormula(unavailable!, onProgress)
|
||||
await PhpEnvironments.shared.determinePhpAlias()
|
||||
}
|
||||
|
||||
// Re-check the installed versions
|
||||
await PhpEnvironments.detectPhpVersions()
|
||||
@ -55,6 +68,39 @@ class InstallAndUpgradeCommand: BrewCommand {
|
||||
await self.completedOperations(onProgress)
|
||||
}
|
||||
|
||||
private func upgradeMainPhpFormula(
|
||||
_ unavailable: BrewFormula,
|
||||
_ onProgress: @escaping (BrewCommandProgress) -> Void
|
||||
) async throws {
|
||||
// Determine which version was previously available (that will become unavailable)
|
||||
guard let short = try? VersionNumber
|
||||
.parse(unavailable.installedVersion!).short else {
|
||||
return
|
||||
}
|
||||
|
||||
// Upgrade the main formula
|
||||
let command = """
|
||||
export HOMEBREW_NO_INSTALL_CLEANUP=true; \
|
||||
\(Paths.brew) upgrade php;
|
||||
\(Paths.brew) install php@\(short);
|
||||
"""
|
||||
|
||||
// Run the upgrade command
|
||||
try await run(command, onProgress)
|
||||
}
|
||||
|
||||
private func checkPhpTap(_ onProgress: @escaping (BrewCommandProgress) -> Void) async throws {
|
||||
if !BrewDiagnostics.installedTaps.contains("shivammathur/php") {
|
||||
let command = "brew tap shivammathur/php"
|
||||
try await run(command, onProgress)
|
||||
}
|
||||
|
||||
if !BrewDiagnostics.installedTaps.contains("shivammathur/extensions") {
|
||||
let command = "brew tap shivammathur/extensions"
|
||||
try await run(command, onProgress)
|
||||
}
|
||||
}
|
||||
|
||||
private func upgradePackages(_ onProgress: @escaping (BrewCommandProgress) -> Void) async throws {
|
||||
// If no upgrades are needed, early exit
|
||||
if self.upgrading.isEmpty {
|
||||
|
@ -141,7 +141,7 @@ class ValetSite: ValetListable {
|
||||
self.determineDriverViaComposer()
|
||||
|
||||
if self.driver == nil {
|
||||
self.driver = PhpFrameworks.detectFallbackDependency(self.absolutePath)
|
||||
self.driver = ProjectTypeDetection.detectFallbackDependency(self.absolutePath)
|
||||
}
|
||||
}
|
||||
|
||||
@ -155,10 +155,16 @@ class ValetSite: ValetListable {
|
||||
private func determineDriverViaComposer() {
|
||||
self.driverDeterminedByComposer = true
|
||||
|
||||
PhpFrameworks.DependencyList.reversed().forEach { (key: String, value: String) in
|
||||
if self.notableComposerDependencies.keys.contains(key) {
|
||||
self.driver = value
|
||||
}
|
||||
for (key, value) in ProjectTypeDetection.SpecificDependencyList
|
||||
where notableComposerDependencies.keys.contains(key) {
|
||||
self.driver = value
|
||||
return
|
||||
}
|
||||
|
||||
for (key, value) in ProjectTypeDetection.CommonDependencyList
|
||||
where notableComposerDependencies.keys.contains(key) {
|
||||
self.driver = value
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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.")
|
||||
|
@ -283,7 +283,6 @@ extension MainMenu {
|
||||
return
|
||||
}
|
||||
|
||||
setBusyImage()
|
||||
PhpEnvironments.shared.isBusy = true
|
||||
PhpEnvironments.shared.delegate = self
|
||||
PhpEnvironments.shared.delegate?.switcherDidStartSwitching(to: version)
|
||||
@ -298,7 +297,6 @@ extension MainMenu {
|
||||
}
|
||||
|
||||
@objc func switchToPhpVersion(_ version: String) {
|
||||
setBusyImage()
|
||||
PhpEnvironments.shared.isBusy = true
|
||||
PhpEnvironments.shared.delegate = self
|
||||
PhpEnvironments.shared.delegate?.switcherDidStartSwitching(to: version)
|
||||
@ -325,7 +323,6 @@ extension MainMenu {
|
||||
*/
|
||||
func switchToPhp(_ version: String) async {
|
||||
Task { @MainActor [self] in
|
||||
setBusyImage()
|
||||
PhpEnvironments.shared.isBusy = true
|
||||
PhpEnvironments.shared.delegate = self
|
||||
PhpEnvironments.shared.delegate?.switcherDidStartSwitching(to: version)
|
||||
|
@ -45,21 +45,16 @@ extension MainMenu {
|
||||
.broadcastServicesUpdate
|
||||
]
|
||||
) {
|
||||
if behaviours.contains(.reloadsPhpInstallation) {
|
||||
if behaviours.contains(.reloadsPhpInstallation) || behaviours.contains(.setsBusyUI) {
|
||||
PhpEnvironments.shared.isBusy = true
|
||||
}
|
||||
|
||||
if behaviours.contains(.setsBusyUI) {
|
||||
setBusyImage()
|
||||
}
|
||||
|
||||
Task(priority: .userInitiated) { [unowned self] in
|
||||
var error: Error?
|
||||
|
||||
do { try execute() } catch let e { error = e }
|
||||
|
||||
if behaviours.contains(.setsBusyUI) {
|
||||
PhpEnvironments.shared.isBusy = false
|
||||
do { try execute() } catch let e {
|
||||
error = e
|
||||
Log.err(e)
|
||||
}
|
||||
|
||||
Task { @MainActor [self, error] in
|
||||
@ -69,14 +64,16 @@ extension MainMenu {
|
||||
|
||||
if behaviours.contains(.updatesMenuBarContents) {
|
||||
updatePhpVersionInStatusBar()
|
||||
} else if behaviours.contains(.setsBusyUI) {
|
||||
refreshIcon()
|
||||
}
|
||||
|
||||
if behaviours.contains(.broadcastServicesUpdate) {
|
||||
Task { await ServicesManager.shared.reloadServicesStatus() }
|
||||
}
|
||||
|
||||
if behaviours.contains(.setsBusyUI) {
|
||||
PhpEnvironments.shared.isBusy = false
|
||||
}
|
||||
|
||||
if error != nil {
|
||||
return failure(error!)
|
||||
}
|
||||
|
@ -88,6 +88,9 @@ extension MainMenu {
|
||||
// Load the global hotkey
|
||||
App.shared.loadGlobalHotkey()
|
||||
|
||||
// Set up menu items
|
||||
AppDelegate.instance.configureMenuItems(standalone: !Valet.installed)
|
||||
|
||||
if Valet.installed {
|
||||
// Preload all sites
|
||||
await Valet.shared.startPreloadingSites()
|
||||
@ -102,6 +105,9 @@ extension MainMenu {
|
||||
Valet.shared.notifyAboutUnsupportedTLD()
|
||||
}
|
||||
|
||||
// Keep track of which PHP versions are currently about to release
|
||||
Log.info("Experimental PHP versions: \(Constants.ExperimentalPhpVersions)")
|
||||
|
||||
// Find out which services are active
|
||||
Log.info("The services manager knows about \(ServicesManager.shared.services.count) services.")
|
||||
|
||||
|
@ -16,7 +16,9 @@ extension MainMenu {
|
||||
|
||||
nonisolated func switcherDidCompleteSwitch(to version: String) {
|
||||
// Mark as no longer busy
|
||||
PhpEnvironments.shared.isBusy = false
|
||||
Task { @MainActor in
|
||||
PhpEnvironments.shared.isBusy = false
|
||||
}
|
||||
|
||||
Task { // Things to do after reloading domain list data
|
||||
if Valet.installed {
|
||||
|
@ -87,6 +87,7 @@ class MainMenu: NSObject, NSWindowDelegate, NSMenuDelegate, PhpSwitcherDelegate
|
||||
}
|
||||
|
||||
/** Updates the icon (refresh icon) and rebuilds the menu. */
|
||||
@available(*, deprecated, message: "Use the busy status instead")
|
||||
@objc func updatePhpVersionInStatusBar() {
|
||||
refreshIcon()
|
||||
rebuild()
|
||||
@ -139,7 +140,7 @@ class MainMenu: NSObject, NSWindowDelegate, NSMenuDelegate, PhpSwitcherDelegate
|
||||
@objc func reloadPhpMonitorMenuInBackground() {
|
||||
asyncExecution({
|
||||
// This automatically reloads the menu
|
||||
Log.info("Reloading information about the PHP installation (in the background)...")
|
||||
Log.perf("Reloading information about the PHP installation (in the background)...")
|
||||
}, behaviours: [
|
||||
.setsBusyUI,
|
||||
.reloadsPhpInstallation,
|
||||
@ -150,10 +151,13 @@ class MainMenu: NSObject, NSWindowDelegate, NSMenuDelegate, PhpSwitcherDelegate
|
||||
|
||||
/** Refreshes the icon with the PHP version. */
|
||||
@objc func refreshIcon() {
|
||||
|
||||
Task { @MainActor [self] in
|
||||
if PhpEnvironments.shared.isBusy {
|
||||
Log.perf("Refreshing icon: currently busy")
|
||||
setStatusBar(image: NSImage(named: NSImage.Name("StatusBarIcon"))!)
|
||||
} else {
|
||||
Log.perf("Refreshing icon: no longer busy")
|
||||
if Preferences.preferences[.shouldDisplayDynamicIcon] as! Bool == false {
|
||||
// Static icon has been requested
|
||||
setStatusBar(image: NSImage(named: NSImage.Name("StatusBarIconStatic"))!)
|
||||
@ -172,13 +176,6 @@ class MainMenu: NSObject, NSWindowDelegate, NSMenuDelegate, PhpSwitcherDelegate
|
||||
}
|
||||
}
|
||||
|
||||
/** Updates the icon to be displayed as busy. */
|
||||
@objc func setBusyImage() {
|
||||
Task { @MainActor [self] in
|
||||
setStatusBar(image: NSImage(named: NSImage.Name("StatusBarIcon"))!)
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: - Menu Item Functionality
|
||||
|
||||
@objc func openAbout() {
|
||||
@ -203,7 +200,11 @@ class MainMenu: NSObject, NSWindowDelegate, NSMenuDelegate, PhpSwitcherDelegate
|
||||
}
|
||||
|
||||
@objc func openWarnings() {
|
||||
WarningsWindowController.show()
|
||||
PhpDoctorWindowController.show()
|
||||
}
|
||||
|
||||
@objc func openConfigGUI() {
|
||||
PhpConfigManagerWindowController.show()
|
||||
}
|
||||
|
||||
@objc func openDomainList() {
|
||||
@ -231,7 +232,13 @@ class MainMenu: NSObject, NSWindowDelegate, NSMenuDelegate, PhpSwitcherDelegate
|
||||
func menuWillOpen(_ menu: NSMenu) {
|
||||
// Make sure the shortcut key does not trigger this when the menu is open
|
||||
App.shared.shortcutHotkey?.isPaused = true
|
||||
Task { // Reload Homebrew services information asynchronously
|
||||
|
||||
// Exit early if Valet is not detected (i.e. standalone mode)
|
||||
if !Valet.installed {
|
||||
return
|
||||
}
|
||||
|
||||
Task { // Reload Homebrew services information asynchronously, but only if Valet is enabled
|
||||
await ServicesManager.shared.reloadServicesStatus()
|
||||
}
|
||||
}
|
||||
|
@ -12,7 +12,7 @@ import Cocoa
|
||||
|
||||
extension StatusMenu {
|
||||
|
||||
func addPhpVersionMenuItems() {
|
||||
@MainActor func addPhpVersionMenuItems() {
|
||||
if PhpEnvironments.phpInstall == nil {
|
||||
addItem(HeaderView.asMenuItem(text: "⚠️ " + "mi_no_php_linked".localized, minimumWidth: 280))
|
||||
addItems([
|
||||
@ -34,7 +34,7 @@ extension StatusMenu {
|
||||
))
|
||||
}
|
||||
|
||||
func addPhpActionMenuItems() {
|
||||
@MainActor func addPhpActionMenuItems() {
|
||||
if PhpEnvironments.shared.isBusy {
|
||||
addItem(NSMenuItem(title: "mi_busy".localized))
|
||||
return
|
||||
@ -54,7 +54,7 @@ extension StatusMenu {
|
||||
self.addItem(NSMenuItem.separator())
|
||||
}
|
||||
|
||||
func addServicesManagerMenuItem() {
|
||||
@MainActor func addServicesManagerMenuItem() {
|
||||
if PhpEnvironments.shared.isBusy {
|
||||
return
|
||||
}
|
||||
@ -65,7 +65,7 @@ extension StatusMenu {
|
||||
])
|
||||
}
|
||||
|
||||
func addSwitchToPhpMenuItems() {
|
||||
@MainActor func addSwitchToPhpMenuItems() {
|
||||
var shortcutKey = 1
|
||||
for index in (0..<PhpEnvironments.shared.availablePhpVersions.count) {
|
||||
// Get the short and long version
|
||||
@ -102,14 +102,14 @@ extension StatusMenu {
|
||||
}
|
||||
}
|
||||
|
||||
func addLiteModeMenuItem() {
|
||||
@MainActor func addLiteModeMenuItem() {
|
||||
addItems([
|
||||
NSMenuItem.separator(),
|
||||
NSMenuItem(title: "mi_lite_mode".localized, action: #selector(MainMenu.openLiteModeInfo))
|
||||
])
|
||||
}
|
||||
|
||||
func addPreferencesMenuItems() {
|
||||
@MainActor func addPreferencesMenuItems() {
|
||||
addItems([
|
||||
NSMenuItem.separator(),
|
||||
NSMenuItem(title: "mi_preferences".localized,
|
||||
@ -119,7 +119,7 @@ extension StatusMenu {
|
||||
])
|
||||
}
|
||||
|
||||
func addCoreMenuItems() {
|
||||
@MainActor func addCoreMenuItems() {
|
||||
addItems([
|
||||
NSMenuItem.separator(),
|
||||
NSMenuItem(title: "mi_about".localized,
|
||||
@ -131,7 +131,7 @@ extension StatusMenu {
|
||||
|
||||
// MARK: - Valet
|
||||
|
||||
func addValetMenuItems() {
|
||||
@MainActor func addValetMenuItems() {
|
||||
addItems([
|
||||
HeaderView.asMenuItem(text: "mi_valet".localized),
|
||||
NSMenuItem(title: "mi_valet_config".localized,
|
||||
@ -146,7 +146,7 @@ extension StatusMenu {
|
||||
|
||||
// MARK: - PHP Configuration
|
||||
|
||||
func addConfigurationMenuItems() {
|
||||
@MainActor func addConfigurationMenuItems() {
|
||||
addItems([
|
||||
HeaderView.asMenuItem(text: "mi_configuration".localized),
|
||||
NSMenuItem(title: "mi_php_version_manager".localized,
|
||||
@ -166,7 +166,7 @@ extension StatusMenu {
|
||||
|
||||
// MARK: - Composer
|
||||
|
||||
func addComposerMenuItems() {
|
||||
@MainActor func addComposerMenuItems() {
|
||||
addItems([
|
||||
HeaderView.asMenuItem(text: "mi_composer".localized),
|
||||
NSMenuItem(
|
||||
@ -187,7 +187,7 @@ extension StatusMenu {
|
||||
|
||||
// MARK: - Stats
|
||||
|
||||
func addStatsMenuItem() {
|
||||
@MainActor func addStatsMenuItem() {
|
||||
guard let install = PhpEnvironments.phpInstall else {
|
||||
Log.info("Not showing stats menu item if no PHP version is linked.")
|
||||
return
|
||||
@ -200,11 +200,21 @@ extension StatusMenu {
|
||||
post: stats.post_max_size,
|
||||
upload: stats.upload_max_filesize)
|
||||
)
|
||||
|
||||
// TODO: As soon as this does more than just edit memory limits, move this
|
||||
/*
|
||||
addItem(NSMenuItem.separator())
|
||||
addItem(NSMenuItem(
|
||||
title: "mi_manage_limits".localized,
|
||||
action: #selector(MainMenu.openConfigGUI),
|
||||
keyEquivalent: "l")
|
||||
)
|
||||
*/
|
||||
}
|
||||
|
||||
// MARK: - Extensions
|
||||
|
||||
func addExtensionsMenuItems() {
|
||||
@MainActor func addExtensionsMenuItems() {
|
||||
guard let install = PhpEnvironments.phpInstall else {
|
||||
Log.info("Not showing extensions menu items if no PHP version is linked.")
|
||||
return
|
||||
@ -225,7 +235,7 @@ extension StatusMenu {
|
||||
|
||||
// MARK: - Presets
|
||||
|
||||
func addPresetsMenuItem() {
|
||||
@MainActor func addPresetsMenuItem() {
|
||||
guard let presets = Preferences.custom.presets else {
|
||||
addEmptyPresetHelp()
|
||||
return
|
||||
|
@ -9,7 +9,7 @@ import Cocoa
|
||||
|
||||
class StatusMenu: NSMenu {
|
||||
// swiftlint:disable cyclomatic_complexity
|
||||
func addMenuItems() {
|
||||
@MainActor func addMenuItems() {
|
||||
addPhpVersionMenuItems()
|
||||
addItem(NSMenuItem.separator())
|
||||
|
||||
|
@ -91,6 +91,7 @@ class BetterAlert {
|
||||
}
|
||||
|
||||
NSApp.activate(ignoringOtherApps: true)
|
||||
|
||||
windowController.window?.makeKeyAndOrderFront(nil)
|
||||
windowController.window?.setCenterPosition(offsetY: 70)
|
||||
return NSApplication.shared.runModal(for: windowController.window!)
|
||||
|
@ -65,7 +65,7 @@ class PreferencesWindowController: PMWindowController {
|
||||
App.shared.preferencesWindowController?.showWindow(self)
|
||||
|
||||
if justCreated {
|
||||
App.shared.preferencesWindowController?.positionWindowInTopLeftCorner()
|
||||
App.shared.preferencesWindowController?.positionWindowInTopRightCorner()
|
||||
}
|
||||
|
||||
NSApp.activate(ignoringOtherApps: true)
|
||||
@ -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"
|
||||
)
|
||||
]
|
||||
|
@ -1,8 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="19529" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
|
||||
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="21701" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
|
||||
<dependencies>
|
||||
<deployment identifier="macosx"/>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="19529"/>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="21701"/>
|
||||
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
||||
</dependencies>
|
||||
<objects>
|
||||
@ -14,7 +14,7 @@
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<subviews>
|
||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Bcg-X1-qca">
|
||||
<rect key="frame" x="168" y="5" width="410" height="14"/>
|
||||
<rect key="frame" x="183" y="5" width="395" height="14"/>
|
||||
<textFieldCell key="cell" title="DESCRIPTION" id="9fH-up-Sob">
|
||||
<font key="font" metaFont="smallSystem"/>
|
||||
<color key="textColor" name="secondaryLabelColor" catalog="System" colorSpace="catalog"/>
|
||||
@ -22,7 +22,7 @@
|
||||
</textFieldCell>
|
||||
</textField>
|
||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="B8f-nb-Y0A">
|
||||
<rect key="frame" x="-2" y="29" width="154" height="16"/>
|
||||
<rect key="frame" x="13" y="29" width="154" height="16"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="150" id="euj-t0-xv4"/>
|
||||
</constraints>
|
||||
@ -33,7 +33,7 @@
|
||||
</textFieldCell>
|
||||
</textField>
|
||||
<popUpButton verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="YaB-Tg-Ir3">
|
||||
<rect key="frame" x="167" y="23" width="110" height="25"/>
|
||||
<rect key="frame" x="182" y="23" width="110" height="25"/>
|
||||
<popUpButtonCell key="cell" type="push" title="Icon Option" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" state="on" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" selectedItem="SaA-mm-HBo" id="Su6-C4-aGo">
|
||||
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
|
||||
<font key="font" metaFont="menu"/>
|
||||
@ -58,7 +58,7 @@
|
||||
<constraint firstItem="Bcg-X1-qca" firstAttribute="top" secondItem="YaB-Tg-Ir3" secondAttribute="bottom" constant="8" symbolic="YES" id="Mji-pe-CNl"/>
|
||||
<constraint firstAttribute="trailing" secondItem="Bcg-X1-qca" secondAttribute="trailing" constant="20" symbolic="YES" id="UPo-Il-l81"/>
|
||||
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="YaB-Tg-Ir3" secondAttribute="trailing" constant="20" symbolic="YES" id="Zlg-jj-uKY"/>
|
||||
<constraint firstItem="B8f-nb-Y0A" firstAttribute="leading" secondItem="c22-O7-iKe" secondAttribute="leading" id="Ztd-uk-4aw"/>
|
||||
<constraint firstItem="B8f-nb-Y0A" firstAttribute="leading" secondItem="c22-O7-iKe" secondAttribute="leading" constant="15" id="Ztd-uk-4aw"/>
|
||||
<constraint firstAttribute="bottom" secondItem="Bcg-X1-qca" secondAttribute="bottom" constant="5" id="hNE-mU-jcu"/>
|
||||
</constraints>
|
||||
<connections>
|
||||
|
@ -18,5 +18,6 @@ struct SectionHeaderView: View {
|
||||
.fontWeight(.medium)
|
||||
.foregroundColor(.appSecondary)
|
||||
.background(Color.debug)
|
||||
.minimumScaleFactor(0.8)
|
||||
}
|
||||
}
|
||||
|
@ -29,29 +29,72 @@ 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: .center, spacing: 10) {
|
||||
VStack(alignment: .center, spacing: 3) {
|
||||
SectionHeaderView(text: "mi_memory_limit".localized.uppercased())
|
||||
Text(memoryLimit)
|
||||
.fontWeight(.medium)
|
||||
.font(.system(size: 16))
|
||||
}
|
||||
Divider()
|
||||
VStack(alignment: .center, spacing: 3) {
|
||||
SectionHeaderView(text: "mi_post_max_size".localized.uppercased())
|
||||
Text(maxPostSize)
|
||||
.fontWeight(.medium)
|
||||
.font(.system(size: 16))
|
||||
}
|
||||
Divider()
|
||||
VStack(alignment: .center, spacing: 3) {
|
||||
SectionHeaderView(text: "mi_upload_max_filesize".localized.uppercased())
|
||||
Text(maxUploadSize)
|
||||
.fontWeight(.medium)
|
||||
.font(.system(size: 16))
|
||||
}
|
||||
Divider().hidden()
|
||||
Button {
|
||||
Task { @MainActor in
|
||||
MainMenu.shared.openConfigGUI()
|
||||
}
|
||||
} label: {
|
||||
Image(systemName: "gearshape.fill")
|
||||
}
|
||||
.focusable(false)
|
||||
.frame(minWidth: 30, alignment: .center)
|
||||
}
|
||||
.padding(5)
|
||||
.background(Color.debug)
|
||||
}
|
||||
.padding(10)
|
||||
.background(Color.debug)
|
||||
}
|
||||
}
|
||||
|
||||
@ -61,6 +104,6 @@ struct StatsView_Previews: PreviewProvider {
|
||||
memoryLimit: "1024 MB",
|
||||
maxPostSize: "1024 MB",
|
||||
maxUploadSize: "1024 MB"
|
||||
)
|
||||
).frame(height: 100)
|
||||
}
|
||||
}
|
||||
|
@ -46,7 +46,7 @@ struct ProgressWindowView: View {
|
||||
window.contentView = NSHostingView(rootView: view)
|
||||
let controller = NSWindowController(window: window)
|
||||
controller.showWindow(nil)
|
||||
controller.positionWindowInTopLeftCorner()
|
||||
controller.positionWindowInTopRightCorner()
|
||||
controller.window?.makeKeyAndOrderFront(self)
|
||||
// NSApp.activate(ignoringOtherApps: true)
|
||||
return controller
|
||||
|
@ -1,7 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<document type="com.apple.InterfaceBuilder3.Cocoa.Storyboard.XIB" version="3.0" toolsVersion="21507" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
|
||||
<document type="com.apple.InterfaceBuilder3.Cocoa.Storyboard.XIB" version="3.0" toolsVersion="21701" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
|
||||
<dependencies>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="21507"/>
|
||||
<deployment identifier="macosx"/>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="21701"/>
|
||||
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
||||
</dependencies>
|
||||
<scenes>
|
@ -20,7 +20,7 @@ class TerminalProgressWindowController: NSWindowController, NSWindowDelegate {
|
||||
|
||||
windowController.showWindow(windowController)
|
||||
windowController.window?.makeKeyAndOrderFront(nil)
|
||||
windowController.positionWindowInTopLeftCorner()
|
||||
windowController.positionWindowInTopRightCorner()
|
||||
|
||||
windowController.progressView?.labelTitle.stringValue = title
|
||||
windowController.progressView?.labelDescription.stringValue = description
|
@ -17,13 +17,13 @@ extension App {
|
||||
onChange: { Task { await self.onHomebrewPhpModification() } }
|
||||
)
|
||||
|
||||
App.shared.watchers[.homebrewBinaries] = notifier
|
||||
App.shared.watchers["homebrewBinaries"] = notifier
|
||||
}
|
||||
|
||||
public func destroyHomebrewWatchers() {
|
||||
// Removing requires termination and then removing reference
|
||||
self.watchers[.homebrewBinaries]?.terminate()
|
||||
self.watchers[.homebrewBinaries] = nil
|
||||
self.watchers["homebrewBinaries"]?.terminate()
|
||||
self.watchers["homebrewBinaries"] = nil
|
||||
}
|
||||
|
||||
public func onHomebrewPhpModification() async {
|
||||
@ -31,10 +31,13 @@ extension App {
|
||||
Log.info("Something changed in the Homebrew binary directory...")
|
||||
await PhpEnvironments.detectPhpVersions()
|
||||
await MainMenu.shared.refreshActiveInstallation()
|
||||
// let new = PhpEnvironments.shared.currentInstall?.version.text
|
||||
|
||||
// TODO:
|
||||
// Check if the new and previous version are different
|
||||
// if so, we can show a notification if needed
|
||||
//
|
||||
// TODO: PHP Guard 2.0
|
||||
// Check if the new and previous version of PHP are different
|
||||
// if so, we can show a notification if needed or alert the user
|
||||
//
|
||||
// let new = PhpEnvironments.shared.currentInstall?.version.text
|
||||
//
|
||||
}
|
||||
}
|
||||
|
@ -10,52 +10,52 @@ import Foundation
|
||||
|
||||
extension App {
|
||||
|
||||
func startWatcher(_ url: URL) {
|
||||
Log.perf("No watcher currently active...")
|
||||
self.watcher = PhpConfigWatcher(for: url)
|
||||
func startWatchManager(_ url: URL) {
|
||||
Log.perf("Starting config watch manager...")
|
||||
self.watchManager = ConfigWatchManager(for: url)
|
||||
|
||||
self.watcher.didChange = { url in
|
||||
self.watchManager.didChange = { url in
|
||||
Log.perf("Something has changed in: \(url)")
|
||||
|
||||
// Check if the watcher has last updated the menu less than 0.75s ago
|
||||
let distance = self.watcher.lastUpdate?.distance(to: Date().timeIntervalSince1970)
|
||||
let distance = self.watchManager.lastUpdate?.distance(to: Date().timeIntervalSince1970)
|
||||
if distance == nil || distance != nil && distance! > 0.75 {
|
||||
Log.perf("Refreshing menu...")
|
||||
Task { @MainActor in MainMenu.shared.reloadPhpMonitorMenuInBackground() }
|
||||
self.watcher.lastUpdate = Date().timeIntervalSince1970
|
||||
self.watchManager.lastUpdate = Date().timeIntervalSince1970
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func handlePhpConfigWatcher(forceReload: Bool = false) {
|
||||
if ActiveFileSystem.shared is TestableFileSystem {
|
||||
Log.warn("FS watcher is disabled when using testable filesystem.")
|
||||
Log.warn("Config watch manager is disabled when using testable filesystem.")
|
||||
return
|
||||
}
|
||||
|
||||
guard let install = PhpEnvironments.phpInstall else {
|
||||
Log.info("It appears as if no PHP installation is currently active.")
|
||||
Log.info("The FS watcher will be disabled until a PHP install is active.")
|
||||
Log.info("The config watch manager be disabled until a PHP install is active.")
|
||||
return
|
||||
}
|
||||
|
||||
let url = URL(fileURLWithPath: "\(Paths.etcPath)/php/\(install.version.short)")
|
||||
|
||||
// Check whether the watcher exists and schedule on the main thread
|
||||
// Check whether the manager exists and schedule on the main thread
|
||||
// if we don't consistently do this, the app will create duplicate watchers
|
||||
// due to timing issues, which creates retain cycles.
|
||||
// due to timing issues, which creates retain cycles
|
||||
Task { @MainActor in
|
||||
// Watcher needs to be created
|
||||
if self.watcher == nil {
|
||||
self.startWatcher(url)
|
||||
if self.watchManager == nil {
|
||||
self.startWatchManager(url)
|
||||
}
|
||||
|
||||
// Watcher needs to be updated
|
||||
if self.watcher.url != url || forceReload {
|
||||
self.watcher.disable()
|
||||
self.watcher = nil
|
||||
if self.watchManager.url != url || forceReload {
|
||||
self.watchManager.disable()
|
||||
self.watchManager = nil
|
||||
Log.perf("Watcher has stopped watching files. Starting new one...")
|
||||
self.startWatcher(url)
|
||||
self.startWatchManager(url)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
77
phpmon/Domain/Watcher/ConfigFSNotifier.swift
Normal file
77
phpmon/Domain/Watcher/ConfigFSNotifier.swift
Normal file
@ -0,0 +1,77 @@
|
||||
//
|
||||
// ConfigFSNotifier.swift
|
||||
// PHP Monitor
|
||||
//
|
||||
// Created by Nico Verbruggen on 24/10/2023.
|
||||
// Copyright © 2023 Nico Verbruggen. All rights reserved.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
|
||||
class ConfigFSNotifier {
|
||||
|
||||
enum Behaviour {
|
||||
case reloadsMenu
|
||||
case reloadsWatchers
|
||||
}
|
||||
|
||||
private var parent: ConfigWatchManager!
|
||||
|
||||
private var monitoredFolderFileDescriptor: CInt = -1
|
||||
|
||||
private var folderMonitorSource: DispatchSourceFileSystemObject?
|
||||
|
||||
let url: URL
|
||||
|
||||
init(
|
||||
for url: URL,
|
||||
eventMask: DispatchSource.FileSystemEvent,
|
||||
parent: ConfigWatchManager,
|
||||
behaviour: ConfigFSNotifier.Behaviour = .reloadsMenu
|
||||
) {
|
||||
self.url = url
|
||||
self.parent = parent
|
||||
self.startMonitoring(eventMask, behaviour: behaviour)
|
||||
}
|
||||
|
||||
func startMonitoring(
|
||||
_ eventMask: DispatchSource.FileSystemEvent,
|
||||
behaviour: ConfigFSNotifier.Behaviour
|
||||
) {
|
||||
guard folderMonitorSource == nil && monitoredFolderFileDescriptor == -1 else {
|
||||
return
|
||||
}
|
||||
|
||||
monitoredFolderFileDescriptor = open(url.path, O_EVTONLY)
|
||||
folderMonitorSource = DispatchSource.makeFileSystemObjectSource(
|
||||
fileDescriptor: monitoredFolderFileDescriptor,
|
||||
eventMask: eventMask,
|
||||
queue: parent.folderMonitorQueue
|
||||
)
|
||||
|
||||
folderMonitorSource?.setEventHandler { [weak self] in
|
||||
if behaviour == .reloadsWatchers
|
||||
&& !ConfigWatchManager.ignoresModificationsToConfigValues {
|
||||
// Reload all configuration watchers
|
||||
return App.shared.handlePhpConfigWatcher(forceReload: true)
|
||||
}
|
||||
|
||||
|
||||
self?.parent.didChange?(self!.url)
|
||||
}
|
||||
|
||||
folderMonitorSource?.setCancelHandler { [weak self] in
|
||||
guard let self = self else { return }
|
||||
close(self.monitoredFolderFileDescriptor)
|
||||
self.monitoredFolderFileDescriptor = -1
|
||||
self.folderMonitorSource = nil
|
||||
}
|
||||
|
||||
folderMonitorSource?.resume()
|
||||
}
|
||||
|
||||
func stopMonitoring() {
|
||||
folderMonitorSource?.cancel()
|
||||
self.parent = nil
|
||||
}
|
||||
}
|
82
phpmon/Domain/Watcher/ConfigWatchManager.swift
Normal file
82
phpmon/Domain/Watcher/ConfigWatchManager.swift
Normal file
@ -0,0 +1,82 @@
|
||||
//
|
||||
// ConfigWatchManager.swift
|
||||
// PHP Monitor
|
||||
//
|
||||
// Created by Nico Verbruggen on 30/03/2021.
|
||||
// Copyright © 2023 Nico Verbruggen. All rights reserved.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
|
||||
class ConfigWatchManager {
|
||||
|
||||
static var ignoresModificationsToConfigValues: Bool = false
|
||||
|
||||
let folderMonitorQueue = DispatchQueue(label: "FolderMonitorQueue", attributes: .concurrent)
|
||||
|
||||
let url: URL
|
||||
var didChange: ((URL) -> Void)?
|
||||
var lastUpdate: TimeInterval?
|
||||
|
||||
var watchers: [ConfigFSNotifier] = []
|
||||
|
||||
init(for url: URL) {
|
||||
if FileSystem is TestableFileSystem {
|
||||
fatalError("""
|
||||
ConfigWatchManager is currently incompatible with a testable filesystem!"
|
||||
You are not allowed to instantiate these while using a testable filesystem.
|
||||
""")
|
||||
}
|
||||
|
||||
self.url = url
|
||||
|
||||
// Add a watcher for php.ini
|
||||
self.addWatcher(for: self.url.appendingPathComponent("php.ini"), eventMask: .write)
|
||||
|
||||
// Add a watcher for conf.d (in case a new file is added or a file is deleted)
|
||||
// This watcher, when triggered, will restart all watchers
|
||||
self.addWatcher(for: self.url.appendingPathComponent("conf.d"), eventMask: .all, behaviour: .reloadsWatchers)
|
||||
|
||||
// Scan the conf.d folder for .ini files, and add a watcher for each file
|
||||
let filePaths = FileManager.default.enumerator(
|
||||
atPath: self.url.appendingPathComponent("conf.d").path
|
||||
)?.allObjects as! [String]
|
||||
|
||||
// Loop over the .ini files that we discovered
|
||||
filePaths.filter { $0.contains(".ini") }.forEach { (file) in
|
||||
// Add a watcher for each file we have discovered
|
||||
self.addWatcher(for: self.url.appendingPathComponent("conf.d/\(file)"), eventMask: .write)
|
||||
}
|
||||
|
||||
Log.perf("A watcher exists for the following config paths:")
|
||||
Log.perf(self.watchers.map({ watcher in
|
||||
return watcher.url.relativePath
|
||||
}))
|
||||
}
|
||||
|
||||
func addWatcher(
|
||||
for url: URL,
|
||||
eventMask: DispatchSource.FileSystemEvent,
|
||||
behaviour: ConfigFSNotifier.Behaviour = .reloadsMenu
|
||||
) {
|
||||
if !FileSystem.anyExists(url.path) {
|
||||
Log.warn("No watcher was created for \(url.path) because the requested file does not exist.")
|
||||
return
|
||||
}
|
||||
|
||||
let watcher = ConfigFSNotifier(for: url, eventMask: eventMask, parent: self, behaviour: behaviour)
|
||||
self.watchers.append(watcher)
|
||||
}
|
||||
|
||||
func disable() {
|
||||
Log.perf("Turning off all individual existing watchers...")
|
||||
self.watchers.forEach { (watcher) in
|
||||
watcher.stopMonitoring()
|
||||
}
|
||||
}
|
||||
|
||||
deinit {
|
||||
Log.perf("deinit: \(String(describing: self)).\(#function)")
|
||||
}
|
||||
|
||||
}
|
@ -6,12 +6,9 @@
|
||||
// Copyright © 2023 Nico Verbruggen. All rights reserved.
|
||||
//
|
||||
|
||||
import Cocoa
|
||||
import Foundation
|
||||
|
||||
class FSNotifier {
|
||||
enum Kind {
|
||||
case homebrewLocks, homebrewBinaries
|
||||
}
|
||||
|
||||
public static var shared: FSNotifier! = nil
|
||||
|
||||
@ -66,4 +63,5 @@ class FSNotifier {
|
||||
deinit {
|
||||
Log.perf("FSNotifier for \(self.url) will be deinitialized.")
|
||||
}
|
||||
|
||||
}
|
@ -1,154 +0,0 @@
|
||||
//
|
||||
// FolderWatcher.swift
|
||||
// PHP Monitor
|
||||
//
|
||||
// Created by Nico Verbruggen on 30/03/2021.
|
||||
// Copyright © 2023 Nico Verbruggen. All rights reserved.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
|
||||
class PhpConfigWatcher {
|
||||
|
||||
let folderMonitorQueue = DispatchQueue(label: "FolderMonitorQueue", attributes: .concurrent)
|
||||
|
||||
let url: URL
|
||||
|
||||
var didChange: ((URL) -> Void)?
|
||||
|
||||
var lastUpdate: TimeInterval?
|
||||
|
||||
var watchers: [FSWatcher] = []
|
||||
|
||||
init(for url: URL) {
|
||||
if FileSystem is TestableFileSystem {
|
||||
fatalError("""
|
||||
PhpConfigWatcher is not compatible with testable FS! "
|
||||
You are not allowed to instantiate these while using a testable FS.
|
||||
""")
|
||||
}
|
||||
|
||||
self.url = url
|
||||
|
||||
// Add a watcher for php.ini
|
||||
self.addWatcher(for: self.url.appendingPathComponent("php.ini"), eventMask: .write)
|
||||
|
||||
// Add a watcher for conf.d (in case a new file is added or a file is deleted)
|
||||
// This watcher, when triggered, will restart all watchers
|
||||
self.addWatcher(for: self.url.appendingPathComponent("conf.d"), eventMask: .all, behaviour: .reloadsWatchers)
|
||||
|
||||
// Scan the conf.d folder for .ini files, and add a watcher for each file
|
||||
let enumerator = FileManager.default.enumerator(atPath: self.url.appendingPathComponent("conf.d").path)
|
||||
let filePaths = enumerator?.allObjects as! [String]
|
||||
|
||||
// Loop over the .ini files that we discovered
|
||||
filePaths.filter { $0.contains(".ini") }.forEach { (file) in
|
||||
// Add a watcher for each file we have discovered
|
||||
self.addWatcher(for: self.url.appendingPathComponent("conf.d/\(file)"), eventMask: .write)
|
||||
}
|
||||
|
||||
Log.perf("A watcher exists for the following config paths:")
|
||||
Log.perf(self.watchers.map({ watcher in
|
||||
return watcher.url.relativePath
|
||||
}))
|
||||
}
|
||||
|
||||
func addWatcher(
|
||||
for url: URL,
|
||||
eventMask: DispatchSource.FileSystemEvent,
|
||||
behaviour: FSWatcherBehaviour = .reloadsMenu
|
||||
) {
|
||||
if !FileSystem.anyExists(url.path) {
|
||||
Log.warn("No watcher was created for \(url.path) because the requested file does not exist.")
|
||||
return
|
||||
}
|
||||
|
||||
let watcher = FSWatcher(for: url, eventMask: eventMask, parent: self, behaviour: behaviour)
|
||||
self.watchers.append(watcher)
|
||||
}
|
||||
|
||||
func disable() {
|
||||
Log.perf("Turning off all individual existing watchers...")
|
||||
self.watchers.forEach { (watcher) in
|
||||
watcher.stopMonitoring()
|
||||
}
|
||||
}
|
||||
|
||||
deinit {
|
||||
Log.perf("deinit: \(String(describing: self)).\(#function)")
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
enum FSWatcherBehaviour {
|
||||
case reloadsMenu
|
||||
case reloadsWatchers
|
||||
}
|
||||
|
||||
class FSWatcher {
|
||||
|
||||
private var parent: PhpConfigWatcher!
|
||||
|
||||
private var monitoredFolderFileDescriptor: CInt = -1
|
||||
|
||||
private var folderMonitorSource: DispatchSourceFileSystemObject?
|
||||
|
||||
let url: URL
|
||||
|
||||
init(
|
||||
for url: URL,
|
||||
eventMask: DispatchSource.FileSystemEvent,
|
||||
parent: PhpConfigWatcher,
|
||||
behaviour: FSWatcherBehaviour = .reloadsMenu
|
||||
) {
|
||||
self.url = url
|
||||
self.parent = parent
|
||||
self.startMonitoring(eventMask, behaviour: behaviour)
|
||||
}
|
||||
|
||||
func startMonitoring(
|
||||
_ eventMask: DispatchSource.FileSystemEvent,
|
||||
behaviour: FSWatcherBehaviour
|
||||
) {
|
||||
guard folderMonitorSource == nil && monitoredFolderFileDescriptor == -1 else {
|
||||
return
|
||||
}
|
||||
|
||||
// Open the file or folder referenced by URL for monitoring only.
|
||||
monitoredFolderFileDescriptor = open(url.path, O_EVTONLY)
|
||||
folderMonitorSource = DispatchSource.makeFileSystemObjectSource(
|
||||
fileDescriptor: monitoredFolderFileDescriptor,
|
||||
eventMask: eventMask,
|
||||
queue: parent.folderMonitorQueue
|
||||
)
|
||||
|
||||
// Define the block to call when a file change is detected.
|
||||
folderMonitorSource?.setEventHandler { [weak self] in
|
||||
// The default behaviour is to reload the menu
|
||||
switch behaviour {
|
||||
case .reloadsMenu:
|
||||
// Default behaviour: reload the menu items
|
||||
self?.parent.didChange?(self!.url)
|
||||
case .reloadsWatchers:
|
||||
// Alternative behaviour: reload all watchers
|
||||
App.shared.handlePhpConfigWatcher(forceReload: true)
|
||||
}
|
||||
}
|
||||
|
||||
// Define a cancel handler to ensure the directory is closed when the source is cancelled.
|
||||
folderMonitorSource?.setCancelHandler { [weak self] in
|
||||
guard let self = self else { return }
|
||||
close(self.monitoredFolderFileDescriptor)
|
||||
self.monitoredFolderFileDescriptor = -1
|
||||
self.folderMonitorSource = nil
|
||||
}
|
||||
|
||||
// Start monitoring the directory via the source.
|
||||
folderMonitorSource?.resume()
|
||||
}
|
||||
|
||||
func stopMonitoring() {
|
||||
folderMonitorSource?.cancel()
|
||||
self.parent = nil
|
||||
}
|
||||
}
|
@ -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) {
|
@ -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: ""
|
||||
)
|
@ -85,6 +85,7 @@ class DomainListVC: NSViewController, NSTableViewDelegate, NSTableViewDataSource
|
||||
|
||||
App.shared.domainListWindowController!.showWindow(self)
|
||||
NSApp.activate(ignoringOtherApps: true)
|
||||
App.shared.domainListWindowController?.window?.orderFrontRegardless()
|
||||
}
|
||||
|
||||
// MARK: - Lifecycle
|
||||
@ -92,6 +93,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()
|
||||
@ -175,7 +189,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() }
|
@ -31,7 +31,7 @@ struct OnboardingTextItem: View {
|
||||
.opacity(self.unavailable ? 0.5 : 1)
|
||||
Text(description.localizedForSwiftUI)
|
||||
.foregroundColor(Color.secondary)
|
||||
.font(.system(size: 13))
|
||||
.font(.system(size: 12))
|
||||
.lineLimit(4)
|
||||
.fixedSize(horizontal: false, vertical: true)
|
||||
.frame(minWidth: 0, maxWidth: 800, alignment: .leading)
|
||||
@ -51,7 +51,7 @@ struct OnboardingView: View {
|
||||
HStack {
|
||||
Image(nsImage: NSApp.applicationIconImage)
|
||||
.resizable()
|
||||
.frame(width: 80, height: 80)
|
||||
.frame(width: 100, height: 100)
|
||||
.padding(.bottom, 5)
|
||||
.padding(.trailing, 25)
|
||||
VStack(alignment: .leading, spacing: 0) {
|
||||
@ -126,13 +126,16 @@ struct OnboardingView: View {
|
||||
Button("onboarding.tour.close".localized) {
|
||||
App.shared.onboardingWindowController?.close()
|
||||
}
|
||||
.padding(.bottom, 5)
|
||||
.padding(.bottom, 15)
|
||||
.padding(.top, 10)
|
||||
}
|
||||
}
|
||||
.padding(.leading)
|
||||
.padding(.trailing)
|
||||
.padding(.bottom, 0)
|
||||
}
|
||||
.frame(width: 600)
|
||||
.fixedSize(horizontal: true, vertical: false)
|
||||
}
|
||||
}
|
||||
|
@ -27,7 +27,7 @@ class OnboardingWindowController: PMWindowController {
|
||||
window.titlebarAppearsTransparent = true
|
||||
window.delegate = delegate ?? windowController
|
||||
window.contentView = NSHostingView(rootView: OnboardingView())
|
||||
window.setContentSize(NSSize(width: 600, height: 600))
|
||||
window.setContentSize(window.contentView!.fittingSize)
|
||||
|
||||
App.shared.onboardingWindowController = windowController
|
||||
}
|
@ -0,0 +1,88 @@
|
||||
//
|
||||
// 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() {
|
||||
if value == -1 {
|
||||
// In case we're dealing with unlimited value, we don't need a unit
|
||||
internalValue = "-1"
|
||||
} else {
|
||||
// We need to append the unit otherwise
|
||||
internalValue = "\(value)\(unit.rawValue)"
|
||||
}
|
||||
|
||||
do {
|
||||
try PhpPreference.persistToIniFile(key: self.key, value: self.internalValue)
|
||||
Log.info("The preference \(key) was updated to: \(value)")
|
||||
} catch {
|
||||
Log.info("The preference \(key) could not be updated")
|
||||
}
|
||||
}
|
||||
|
||||
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
|
||||
}
|
||||
}
|
34
phpmon/Modules/PHP Config Editor/Data/PhpPreference.swift
Normal file
34
phpmon/Modules/PHP Config Editor/Data/PhpPreference.swift
Normal file
@ -0,0 +1,34 @@
|
||||
//
|
||||
// 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
|
||||
}
|
||||
|
||||
internal static func persistToIniFile(key: String, value: String) throws {
|
||||
if let file = PhpEnvironments.shared.getConfigFile(forKey: key) {
|
||||
return try file.replace(key: key, value: value)
|
||||
}
|
||||
|
||||
throw PhpConfigurationFile.ReplacementErrors.missingFile
|
||||
}
|
||||
}
|
||||
|
||||
class BoolPhpPreference: PhpPreference {
|
||||
@State var value: Bool = true
|
||||
}
|
||||
|
||||
class StringPhpPreference: PhpPreference {
|
||||
@State var value: String = ""
|
||||
}
|
116
phpmon/Modules/PHP Config Editor/UI/ByteLimitView.swift
Normal file
116
phpmon/Modules/PHP Config Editor/UI/ByteLimitView.swift
Normal file
@ -0,0 +1,116 @@
|
||||
//
|
||||
// ByteLimitView.swift
|
||||
// PHP Monitor
|
||||
//
|
||||
// Created by Nico Verbruggen on 25/07/2023.
|
||||
// Copyright © 2023 Nico Verbruggen. All rights reserved.
|
||||
//
|
||||
|
||||
import SwiftUI
|
||||
|
||||
struct PreferenceContainer<ControlView: View>: 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: 10) {
|
||||
VStack(alignment: .leading) {
|
||||
Text(LocalizedStringKey(self.name))
|
||||
.bold()
|
||||
.multilineTextAlignment(.leading)
|
||||
.frame(minWidth: 150, maxWidth: 150, alignment: .leading)
|
||||
}
|
||||
|
||||
VStack(alignment: .leading) {
|
||||
controlView
|
||||
Text(self.description.localizedForSwiftUI)
|
||||
.lineLimit(nil)
|
||||
.font(.subheadline)
|
||||
.foregroundColor(Color.secondary)
|
||||
.fixedSize(horizontal: false, vertical: true)
|
||||
}
|
||||
}
|
||||
}
|
||||
.padding(5)
|
||||
}
|
||||
}
|
||||
|
||||
struct ByteLimitView: View {
|
||||
@State private var unit: BytePhpPreference.UnitOption
|
||||
@State private var numberText: String
|
||||
@State private var unlimited: Bool
|
||||
@State private var timer: Timer?
|
||||
|
||||
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 {
|
||||
if !unlimited {
|
||||
HStack {
|
||||
TextField("", text: $numberText)
|
||||
.onChange(of: numberText) { [weak preference] newText in
|
||||
timer?.invalidate()
|
||||
timer = Timer.scheduledTimer(withTimeInterval: 1.5, repeats: false) { _ in
|
||||
preference?.value = Int(newText) ?? 256
|
||||
}
|
||||
}
|
||||
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
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Toggle(isOn: $unlimited) {
|
||||
Text("confman.byte_limit.unlimited".localizedForSwiftUI)
|
||||
}.onChange(of: unlimited, perform: { [weak preference] unlimited in
|
||||
timer?.invalidate()
|
||||
timer = Timer.scheduledTimer(withTimeInterval: 0.8, repeats: false) { _ in
|
||||
preference?.value = unlimited ? -1 : 512
|
||||
preference?.unit = .megabyte
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
struct ByteLimitView_Previews: PreviewProvider {
|
||||
static var previews: some View {
|
||||
PreferenceContainer(
|
||||
name: "Max Size",
|
||||
description:
|
||||
"Here's an extensive description that is obviously way too long but it should wrap." +
|
||||
"The point of the wrapping text is that is allows us to see what's going on with the layout here."
|
||||
) {
|
||||
ByteLimitView(preference: BytePhpPreference(key: "max_memory"))
|
||||
}.frame(width: 600, height: 200)
|
||||
|
||||
ConfigManagerView()
|
||||
.frame(width: 600, height: .infinity)
|
||||
.previewDisplayName("Config Manager")
|
||||
}
|
||||
}
|
93
phpmon/Modules/PHP Config Editor/UI/ConfigManagerView.swift
Normal file
93
phpmon/Modules/PHP Config Editor/UI/ConfigManagerView.swift
Normal file
@ -0,0 +1,93 @@
|
||||
//
|
||||
// ConfigManagerView.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 preferences: [PhpPreference] = [
|
||||
BytePhpPreference(key: "memory_limit"),
|
||||
BytePhpPreference(key: "post_max_size"),
|
||||
// BoolPhpPreference(key: "file_uploads"),
|
||||
BytePhpPreference(key: "upload_max_filesize")
|
||||
]
|
||||
|
||||
var body: some View {
|
||||
VStack {
|
||||
HStack(alignment: .center, spacing: 15) {
|
||||
Image(systemName: "gearshape.fill")
|
||||
.resizable()
|
||||
.frame(width: 40, height: 40)
|
||||
.foregroundColor(Color.blue)
|
||||
.padding(12)
|
||||
VStack(alignment: .leading, spacing: 5) {
|
||||
Text("confman.title".localizedForSwiftUI)
|
||||
.bold()
|
||||
.font(.system(size: 12))
|
||||
.frame(maxWidth: .infinity, alignment: .leading)
|
||||
Text("confman.description".localizedForSwiftUI)
|
||||
.font(.system(size: 12))
|
||||
.fixedSize(horizontal: false, vertical: true)
|
||||
.scaledToFit()
|
||||
.lineLimit(4)
|
||||
}
|
||||
}
|
||||
.padding(10)
|
||||
|
||||
Divider()
|
||||
|
||||
VStack(spacing: 5) {
|
||||
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(preference: preference)
|
||||
}
|
||||
/*
|
||||
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()
|
||||
|
||||
VStack(alignment: .trailing) {
|
||||
Button("Close", action: {
|
||||
App.shared.phpConfigManagerWindowController?.close()
|
||||
})
|
||||
}
|
||||
.padding(.vertical, 10)
|
||||
.padding(.horizontal, 15)
|
||||
.frame(
|
||||
minWidth: 0,
|
||||
maxWidth: .infinity,
|
||||
alignment: .topTrailing
|
||||
)
|
||||
}
|
||||
}.frame(maxHeight: 485)
|
||||
}
|
||||
}
|
||||
|
||||
struct ConfigManagerView_Previews: PreviewProvider {
|
||||
static var previews: some View {
|
||||
ConfigManagerView()
|
||||
.frame(width: 600)
|
||||
.previewDisplayName("Live Preview")
|
||||
}
|
||||
}
|
@ -0,0 +1,46 @@
|
||||
//
|
||||
// ConfigManagerWindowController.swift
|
||||
// PHP Monitor
|
||||
//
|
||||
// Created by Nico Verbruggen on 12/09/2023.
|
||||
// Copyright © 2023 Nico Verbruggen. All rights reserved.
|
||||
//
|
||||
|
||||
import Cocoa
|
||||
import SwiftUI
|
||||
|
||||
class PhpConfigManagerWindowController: PMWindowController {
|
||||
|
||||
// MARK: - Window Identifier
|
||||
|
||||
override var windowName: String {
|
||||
return "ConfigManager"
|
||||
}
|
||||
|
||||
public static func create(delegate: NSWindowDelegate?) {
|
||||
let windowController = Self()
|
||||
windowController.window = NSWindow()
|
||||
|
||||
guard let window = windowController.window else { return }
|
||||
window.title = ""
|
||||
window.styleMask = [.titled, .closable, .miniaturizable]
|
||||
window.titlebarAppearsTransparent = true
|
||||
window.delegate = delegate ?? windowController
|
||||
window.contentView = NSHostingView(rootView: ConfigManagerView())
|
||||
window.setContentSize(NSSize(width: 600, height: 480))
|
||||
|
||||
App.shared.phpConfigManagerWindowController = windowController
|
||||
}
|
||||
|
||||
public static func show(delegate: NSWindowDelegate? = nil) {
|
||||
if App.shared.phpConfigManagerWindowController == nil {
|
||||
Self.create(delegate: delegate)
|
||||
}
|
||||
|
||||
App.shared.phpConfigManagerWindowController?.showWindow(self)
|
||||
App.shared.phpConfigManagerWindowController?.positionWindowInTopRightCorner()
|
||||
|
||||
NSApp.activate(ignoringOtherApps: true)
|
||||
App.shared.phpConfigManagerWindowController?.window?.orderFrontRegardless()
|
||||
}
|
||||
}
|
@ -14,7 +14,6 @@ struct FileExistenceCheck {
|
||||
}
|
||||
|
||||
class PhpConfigChecker {
|
||||
|
||||
public static var shared = PhpConfigChecker()
|
||||
|
||||
var missing: [String] = []
|
@ -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) {
|
||||
@ -89,18 +89,20 @@ struct WarningListView: View {
|
||||
}
|
||||
.listRowInsets(EdgeInsets())
|
||||
.listStyle(.plain)
|
||||
.frame(maxHeight: .infinity, alignment: .top)
|
||||
.frame(minHeight: 350, maxHeight: .infinity, alignment: .top)
|
||||
}
|
||||
.frame(width: 600)
|
||||
.fixedSize(horizontal: true, vertical: false)
|
||||
}
|
||||
}
|
||||
|
||||
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")
|
||||
}
|
@ -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,20 +26,21 @@ class WarningsWindowController: PMWindowController {
|
||||
window.styleMask = [.titled, .closable, .miniaturizable]
|
||||
window.titlebarAppearsTransparent = true
|
||||
window.delegate = delegate ?? windowController
|
||||
window.contentView = NSHostingView(rootView: WarningListView())
|
||||
window.setContentSize(NSSize(width: 600, height: 480))
|
||||
window.contentView = NSHostingView(rootView: PhpDoctorView())
|
||||
window.setContentSize(window.contentView!.fittingSize)
|
||||
|
||||
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)
|
||||
App.shared.phpDoctorWindowController?.window?.orderFrontRegardless()
|
||||
}
|
||||
}
|
@ -1,5 +1,5 @@
|
||||
//
|
||||
// BrewFormulaUI.swift
|
||||
// BrewFormula+UI.swift
|
||||
// PHP Monitor
|
||||
//
|
||||
// Created by Nico Verbruggen on 02/05/2023.
|
@ -0,0 +1,73 @@
|
||||
//
|
||||
// FakeBrewFormulaeHandler.swift
|
||||
// PHP Monitor
|
||||
//
|
||||
// Created by Nico Verbruggen on 27/05/2023.
|
||||
// Copyright © 2023 Nico Verbruggen. All rights reserved.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
|
||||
class FakeBrewFormulaeHandler: HandlesBrewFormulae {
|
||||
// swiftlint:disable function_body_length
|
||||
public func loadPhpVersions(loadOutdated: Bool) async -> [BrewFormula] {
|
||||
return [
|
||||
BrewFormula(
|
||||
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",
|
||||
prerelease: true
|
||||
),
|
||||
BrewFormula(
|
||||
name: "php",
|
||||
displayName: "PHP 8.2",
|
||||
installedVersion: "8.2.3",
|
||||
upgradeVersion: "8.2.4"
|
||||
),
|
||||
BrewFormula(
|
||||
name: "php@8.1",
|
||||
displayName: "PHP 8.1",
|
||||
installedVersion: "8.1.17",
|
||||
upgradeVersion: nil
|
||||
),
|
||||
BrewFormula(
|
||||
name: "php@8.0",
|
||||
displayName: "PHP 8.0",
|
||||
installedVersion: nil,
|
||||
upgradeVersion: nil
|
||||
),
|
||||
BrewFormula(
|
||||
name: "php@7.4",
|
||||
displayName: "PHP 7.4",
|
||||
installedVersion: nil,
|
||||
upgradeVersion: nil
|
||||
),
|
||||
BrewFormula(
|
||||
name: "php@7.3",
|
||||
displayName: "PHP 7.3",
|
||||
installedVersion: nil,
|
||||
upgradeVersion: nil
|
||||
),
|
||||
BrewFormula(
|
||||
name: "php@7.2",
|
||||
displayName: "PHP 7.2",
|
||||
installedVersion: nil,
|
||||
upgradeVersion: nil
|
||||
),
|
||||
BrewFormula(
|
||||
name: "php@7.1",
|
||||
displayName: "PHP 7.1",
|
||||
installedVersion: nil,
|
||||
upgradeVersion: nil
|
||||
)
|
||||
]
|
||||
}
|
||||
}
|
@ -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
|
||||
@ -28,8 +28,15 @@ struct PhpFormulaeView: 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 PhpFormulaeView: 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)
|
||||
@ -135,9 +142,26 @@ struct PhpFormulaeView: View {
|
||||
.foregroundColor(formula.iconColor)
|
||||
.padding(.horizontal, 5)
|
||||
VStack(alignment: .leading, spacing: 2) {
|
||||
Text(formula.displayName).bold()
|
||||
HStack {
|
||||
Text(formula.displayName).bold()
|
||||
|
||||
if formula.isInstalled && formula.hasUpgrade {
|
||||
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)
|
||||
}
|
||||
}
|
||||
|
||||
if formula.hasUpgradedFormulaAlias {
|
||||
Text("phpman.version.automatic_upgrade".localized(formula.shortVersion!))
|
||||
.font(.system(size: 11))
|
||||
.foregroundColor(.gray)
|
||||
} else if formula.isInstalled && formula.hasUpgrade {
|
||||
Text("phpman.version.has_update".localized(
|
||||
formula.installedVersion!,
|
||||
formula.upgradeVersion!
|
||||
@ -175,20 +199,29 @@ struct PhpFormulaeView: View {
|
||||
} else {
|
||||
Button("phpman.buttons.install".localizedForSwiftUI) {
|
||||
Task { await self.install(formula) }
|
||||
}
|
||||
}.disabled(formula.hasUpgradedFormulaAlias)
|
||||
}
|
||||
}
|
||||
.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)
|
||||
}
|
||||
|
||||
public func runCommand(_ command: InstallAndUpgradeCommand) async {
|
||||
if PhpEnvironments.shared.isBusy {
|
||||
self.presentErrorAlert(
|
||||
title: "phpman.action_prevented_busy.title".localized,
|
||||
description: "phpman.action_prevented_busy.desc".localized,
|
||||
button: "generic.ok".localized
|
||||
)
|
||||
return
|
||||
}
|
||||
|
||||
do {
|
||||
self.setBusyStatus(true)
|
||||
try await command.execute { progress in
|
||||
@ -224,7 +257,7 @@ struct PhpFormulaeView: View {
|
||||
|
||||
public func repairAll() async {
|
||||
await self.runCommand(InstallAndUpgradeCommand(
|
||||
title: "Repairing installations...",
|
||||
title: "phpman.operations.repairing".localized,
|
||||
upgrading: [],
|
||||
installing: []
|
||||
))
|
||||
@ -232,7 +265,7 @@ struct PhpFormulaeView: View {
|
||||
|
||||
public func upgradeAll(_ formulae: [BrewFormula]) async {
|
||||
await self.runCommand(InstallAndUpgradeCommand(
|
||||
title: "Installing updates...",
|
||||
title: "phpman.operations.updating".localized,
|
||||
upgrading: formulae,
|
||||
installing: []
|
||||
))
|
||||
@ -240,7 +273,7 @@ struct PhpFormulaeView: View {
|
||||
|
||||
public func install(_ formula: BrewFormula) async {
|
||||
await self.runCommand(InstallAndUpgradeCommand(
|
||||
title: "Installing \(formula.displayName)",
|
||||
title: "phpman.operations.installing".localized(formula.displayName),
|
||||
upgrading: [],
|
||||
installing: [formula]
|
||||
))
|
||||
@ -258,7 +291,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,
|
||||
@ -301,18 +334,9 @@ struct PhpFormulaeView: View {
|
||||
}
|
||||
|
||||
public func setBusyStatus(_ busy: Bool) {
|
||||
PhpEnvironments.shared.isBusy = busy
|
||||
if busy {
|
||||
Task { @MainActor in
|
||||
MainMenu.shared.setBusyImage()
|
||||
MainMenu.shared.rebuild()
|
||||
self.status.busy = busy
|
||||
}
|
||||
} else {
|
||||
Task { @MainActor in
|
||||
MainMenu.shared.updatePhpVersionInStatusBar()
|
||||
self.status.busy = busy
|
||||
}
|
||||
Task { @MainActor in
|
||||
PhpEnvironments.shared.isBusy = busy
|
||||
self.status.busy = busy
|
||||
}
|
||||
}
|
||||
|
||||
@ -323,7 +347,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,
|
||||
@ -341,60 +365,11 @@ 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)
|
||||
}
|
||||
}
|
||||
|
||||
class FakeBrewFormulaeHandler: HandlesBrewFormulae {
|
||||
public func loadPhpVersions(loadOutdated: Bool) async -> [BrewFormula] {
|
||||
return [
|
||||
BrewFormula(
|
||||
name: "php",
|
||||
displayName: "PHP 8.2",
|
||||
installedVersion: "8.2.3",
|
||||
upgradeVersion: "8.2.4"
|
||||
),
|
||||
BrewFormula(
|
||||
name: "php@8.1",
|
||||
displayName: "PHP 8.1",
|
||||
installedVersion: "8.1.17",
|
||||
upgradeVersion: nil
|
||||
),
|
||||
BrewFormula(
|
||||
name: "php@8.0",
|
||||
displayName: "PHP 8.0",
|
||||
installedVersion: nil,
|
||||
upgradeVersion: nil
|
||||
),
|
||||
BrewFormula(
|
||||
name: "php@7.4",
|
||||
displayName: "PHP 7.4",
|
||||
installedVersion: nil,
|
||||
upgradeVersion: nil
|
||||
),
|
||||
BrewFormula(
|
||||
name: "php@7.3",
|
||||
displayName: "PHP 7.3",
|
||||
installedVersion: nil,
|
||||
upgradeVersion: nil
|
||||
),
|
||||
BrewFormula(
|
||||
name: "php@7.2",
|
||||
displayName: "PHP 7.2",
|
||||
installedVersion: nil,
|
||||
upgradeVersion: nil
|
||||
),
|
||||
BrewFormula(
|
||||
name: "php@7.1",
|
||||
displayName: "PHP 7.1",
|
||||
installedVersion: nil,
|
||||
upgradeVersion: nil
|
||||
)
|
||||
]
|
||||
}
|
||||
}
|
@ -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,17 +36,19 @@ 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?.positionWindowInTopRightCorner()
|
||||
|
||||
NSApp.activate(ignoringOtherApps: true)
|
||||
|
||||
App.shared.phpVersionManagerWindowController?.window?.orderFrontRegardless()
|
||||
}
|
||||
}
|
791
phpmon/de.lproj/Localizable.strings
Normal file
791
phpmon/de.lproj/Localizable.strings
Normal file
@ -0,0 +1,791 @@
|
||||
// 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.version.automatic_upgrade" = "Diese Version wird automatisch installiert, indem eine ältere Version aktualisiert wird.";
|
||||
"phpman.buttons.uninstall" = "Deinstallieren";
|
||||
"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.";
|
||||
"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" = "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";
|
||||
"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" = "<warte auf Eingabe>";
|
||||
"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";
|
||||
|
||||
// Laravel Herd conflicts
|
||||
"startup.errors.herd_running.title" = "Laravel Herd scheint aktiv zu sein";
|
||||
"startup.errors.herd_running.subtitle" = "Es scheint, dass Laravel Herd derzeit aktiv ist. Die integrierte Valet-Konfiguration von Herd kann mit Ihrer regulären Valet-Installation kollidieren. Beenden Sie daher Herd, bevor Sie fortfahren. (Sie können Herd und reguläres Valet problemlos kombinieren, sollten sie jedoch nicht gleichzeitig ausführen.)";
|
||||
"startup.errors.herd_running.desc" = "Möglicherweise stellt der von Herd zu Ihrem $PATH hinzugefügte `php`-Alias eine Behinderung für das Aliasen von PHP Monitor als `php` dar. Beachten Sie dies bitte. Schauen Sie in die Datei `~/.zshrc`, um zu sehen, was Herd zu Ihrem $PATH hinzugefügt hat.";
|
||||
|
||||
// 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.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.";
|
||||
"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";
|
@ -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...";
|
||||
@ -21,6 +13,8 @@
|
||||
"mi_fix_php_link" = "Fix Automatically...";
|
||||
"mi_no_php_linked_explain" = "What's This?";
|
||||
"mi_php_version_manager" = "PHP Version Manager...";
|
||||
"mi_php_config_manager" = "PHP Configuration Editor...";
|
||||
"mi_manage_limits" = "Manage Limits...";
|
||||
|
||||
"mi_diagnostics" = "Diagnostics";
|
||||
"mi_active_services" = "Active Services";
|
||||
@ -89,6 +83,21 @@
|
||||
"mi_xdebug_actions" = "Actions";
|
||||
"mi_xdebug_disable_all" = "Disable All Modes";
|
||||
|
||||
// CONFMAN
|
||||
|
||||
"confman.title" = "PHP Configuration Editor";
|
||||
"confman.description" = "This feature lets you customize your PHP installation's configuration with ease.\nPlease note that any changes you make are immediately and automatically applied.";
|
||||
"confman.byte_limit.unlimited" = "Allow unlimited usage";
|
||||
|
||||
"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
|
||||
|
||||
"phpman.busy.title" = "Checking for updates!";
|
||||
@ -98,10 +107,12 @@
|
||||
"phpman.version.has_update" = "Version %@ installed, %@ available.";
|
||||
"phpman.version.installed" = "Version %@ is currently installed.";
|
||||
"phpman.version.available_for_installation" = "This version can be installed.";
|
||||
"phpman.version.automatic_upgrade" = "This version will be automatically installed by upgrading an older version.";
|
||||
"phpman.buttons.uninstall" = "Uninstall";
|
||||
"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.";
|
||||
@ -128,6 +139,9 @@ You may be asked for your password during the uninstallation process if file per
|
||||
|
||||
%@";
|
||||
|
||||
"phpman.action_prevented_busy.title" = "PHP Monitor is currently busy.";
|
||||
"phpman.action_prevented_busy.desc" = "PHP Monitor is currently doing something like switching between PHP versions. To ensure your system does not break, you will need to wait until PHP Monitor is ready in order before you try this again.";
|
||||
|
||||
"phpman.uninstall_prevented.title" = "You cannot uninstall the currently active version of PHP via PHP Monitor.";
|
||||
"phpman.uninstall_prevented.desc" = "In order to prevent issues with PHP Monitor and further crashes, it isn't possible to uninstall the currently linked version of PHP via this UI. You can switch versions and try again, or uninstall this version manually via the terminal.\n\nPlease note that PHP Monitor may crash if you uninstall the currently linked PHP version.";
|
||||
|
||||
@ -138,12 +152,22 @@ You may be asked for your password during the uninstallation process if file per
|
||||
"phpman.unlinked.desc" = "You likely still have some version of PHP that is currently installed, but currently no version of PHP is linked.";
|
||||
"phpman.unlinked.detail" = "Without any PHP version linked, the `php` binary is not accessible on your system and you cannot run any PHP scripts without explicitly being part of the PATH. You can have PHP Monitor automatically resolve this problem (choose Fix Automatically in the main menu), or fix it yourself by running `brew link php --force`.";
|
||||
|
||||
"phpman.operations.repairing" = "Repairing installations...";
|
||||
"phpman.operations.updating" = "Installing updates...";
|
||||
"phpman.operations.installing" = "Installing %@...";
|
||||
|
||||
"phpman.steps.fetching" = "Fetching...";
|
||||
"phpman.steps.downloading" = "Downloading package data...";
|
||||
"phpman.steps.installing" = "Installing some package data...";
|
||||
"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.";
|
||||
@ -200,6 +224,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.secure" = "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?";
|
||||
@ -256,6 +286,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";
|
||||
@ -308,6 +339,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:";
|
||||
@ -351,7 +387,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" = "<listening for keypress>";
|
||||
"prefs.shortcut_clear" = "Clear";
|
||||
@ -635,6 +671,11 @@ If you are seeing this message but are confused why this folder has gone missing
|
||||
"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";
|
||||
|
||||
/// Laravel Herd conflicts
|
||||
"startup.errors.herd_running.title" = "Laravel Herd appears to be running";
|
||||
"startup.errors.herd_running.subtitle" = "It seems that Laravel Herd is currently running. Herd's built-in Valet setup may conflict with your regular Valet installation, so please quit Herd before continuing. (You can perfectly mix usage of Herd and regular Valet but you shouldn't run both at the same time.)";
|
||||
"startup.errors.herd_running.desc" = "You may also find that the `php` alias by Herd added to your $PATH may prevent `php` aliasing of PHP Monitor from working, so keep that in mind. You can check out `~/.zshrc` and see what Herd has added to your $PATH.";
|
||||
|
||||
// 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?";
|
||||
@ -720,6 +761,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.";
|
||||
@ -739,7 +783,7 @@ COMMON TROUBLESHOOTING TIPS
|
||||
|
||||
• %@
|
||||
|
||||
When files like these are missing, 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.";
|
||||
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!";
|
||||
|
||||
@ -751,14 +795,14 @@ When files like these are missing, it's recommended to reinstall the appropriate
|
||||
"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, and much more.";
|
||||
"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 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.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";
|
805
phpmon/fr.lproj/Localizable.strings
Normal file
805
phpmon/fr.lproj/Localizable.strings
Normal file
@ -0,0 +1,805 @@
|
||||
// MENU ITEMS (MI)
|
||||
|
||||
"mi_busy" = "PHP Monitor est occupé...";
|
||||
"mi_unsure" = "Nous ne sommes pas sûrs de quelle version de PHP vous utilisez.";
|
||||
"mi_php_version" = "Version globale: PHP";
|
||||
"mi_php_switch" = "Passer à PHP";
|
||||
"mi_php_unsupported" = "Certaines versions de PHP installées ne sont pas affichées.";
|
||||
"mi_php_broken_1" = "Oups ! Il semblerait que votre installation de PHP soit endommagée...";
|
||||
"mi_php_broken_2" = "Essayez d'exécuter `php -v` dans votre terminal.";
|
||||
"mi_php_broken_3" = "Vous pouvez également essayer de passer à une autre version.";
|
||||
"mi_php_broken_4" = "Exécuter `brew reinstall php` (ou la commande équivalente pour votre version désirée) pourrait aider.";
|
||||
"mi_no_php_linked" = "Aucune version de PHP n'est liée !";
|
||||
"mi_fix_php_link" = "Réparer Automatiquement...";
|
||||
"mi_no_php_linked_explain" = "Qu'est-ce que c'est ?";
|
||||
"mi_php_version_manager" = "Gestionnaire de Versions PHP...";
|
||||
"mi_php_config_manager" = "Éditeur de Configuration PHP...";
|
||||
"mi_manage_limits" = "Gérer les Limites...";
|
||||
|
||||
"mi_diagnostics" = "Diagnostiques";
|
||||
"mi_active_services" = "Services actifs";
|
||||
"mi_restart_php_fpm" = "Redémarrer le service: php";
|
||||
"mi_restart_nginx" = "Redémarrer le service: nginx";
|
||||
"mi_restart_dnsmasq" = "Redémarrer le service: dnsmasq";
|
||||
"mi_manage_services" = "Gérer les services";
|
||||
"mi_restart_valet_services" = "Redémarrer les services Valet";
|
||||
"mi_stop_valet_services" = "Arrêter les services Valet";
|
||||
|
||||
"mi_fix_my_valet" = "Réparer mon Valet...";
|
||||
"mi_fix_my_valet_tooltip" = "Un problème avec votre installation de Valet ? Essayez les correctifs automatiques de PHP Monitor qui vous permettront d'être à nouveau opérationnel en un rien de temps !";
|
||||
"mi_fix_brew_permissions" = "Restaurer les permissions Homebrew";
|
||||
"mi_fix_brew_permissions_tooltip" = "Des problèmes de permission lors de l'exécution de `brew upgrade` ? PHP Monitor vient à votre rescousse !";
|
||||
|
||||
"mi_php_refresh" = "Actualiser les informations";
|
||||
|
||||
"mi_configuration" = "Configuration PHP";
|
||||
"mi_limits" = "Configuration des limites";
|
||||
"mi_memory_limit" = "Limite de mémoire";
|
||||
"mi_post_max_size" = "Taille maximale POST";
|
||||
"mi_upload_max_filesize" = "Taille maximal d'upload";
|
||||
"mi_manual_actions" = "Actions manuelles";
|
||||
"mi_services" = "Services";
|
||||
"mi_other" = "Dépannage & services";
|
||||
"mi_first_aid" = "Dépannage";
|
||||
|
||||
"mi_xdebug_mode" = "Gérer Xdebug";
|
||||
|
||||
"mi_composer" = "Composer";
|
||||
"mi_valet_config" = "Localiser le dossier Valet (.config/valet)";
|
||||
"mi_php_config" = "Localiser le fichier de configuration de PHP (php.ini)";
|
||||
"mi_phpmon_config" = "Localiser le dossier de PHP Monitor (.config/phpmon)";
|
||||
"mi_global_composer" = "Localiser le fichier Composer global (.composer)";
|
||||
"mi_phpinfo" = "Afficher la configuration actuelle (phpinfo)";
|
||||
"mi_update_global_composer" = "Mettre à jour les dépendances globales de Composer...";
|
||||
"mi_detected_extensions" = "Extensions détectées";
|
||||
"mi_no_extensions_detected" = "Aucune extension supplémentaire détectée.";
|
||||
|
||||
"mi_php_doctor" = "PHP Doctor";
|
||||
"mi_fa_php_doctor" = "Ouvrir PHP Doctor...";
|
||||
"mi_recommendations_count" = "%i problèmes(s) détecté(s)!";
|
||||
"mi_view_recommendations" = "Afficher les recommandations...";
|
||||
|
||||
"mi_valet" = "Laravel Valet";
|
||||
"mi_domain_list" = "Afficher la liste des domaines...";
|
||||
|
||||
"mi_preferences" = "Préférences...";
|
||||
"mi_donate" = "Faire un don...";
|
||||
"mi_check_for_updates" = "Vérifier les mises à jour...";
|
||||
"mi_lite_mode" = "À propos du mode Standalone...";
|
||||
"mi_quit" = "Quitter PHP Monitor";
|
||||
"mi_about" = "À propos de PHP Monitor";
|
||||
|
||||
"mi_presets_title" = "Paramètres de configuration";
|
||||
"mi_apply_presets_title" = "Appliquer les paramètres de configuration";
|
||||
"mi_revert_to_prev_config" = "Revenir à la configuration précédente...";
|
||||
"mi_profiles_loaded" = "%i profils chargés à partir du fichier de configuration";
|
||||
|
||||
"mi_no_presets" = "Aucun paramètre disponible.";
|
||||
"mi_set_up_presets" = "En savoir plus sur les paramètres...";
|
||||
|
||||
"mi_view_onboarding" = "Ouvrir la visite guidée de bienvenue...";
|
||||
|
||||
"mi_xdebug_available_modes" = "Modes disponibles";
|
||||
"mi_xdebug_actions" = "Actions";
|
||||
"mi_xdebug_disable_all" = "Désactiver tous les modes";
|
||||
|
||||
// CONFMAN
|
||||
|
||||
"confman.title" = "Éditeur de configuration PHP";
|
||||
"confman.description" = "Cette fonction vous permet de personnaliser facilement votre installation PHP. Les modifications sont appliquées automatiquement.";
|
||||
"confman.byte_limit.unlimited" = "Autoriser l'utilisation sans limite";
|
||||
|
||||
"php_ini.memory_limit.title" = "Limite de mémoire";
|
||||
"php_ini.memory_limit.description" = "Ce paramètre définit la quantité maximale de mémoire (en octets) qu'un script est autorisé à allouer. Cela permet d'éviter que des scripts mal écrits ne consomment toute la mémoire disponible sur un serveur.";
|
||||
"php_ini.post_max_size.title" = "POST Taille maximale";
|
||||
"php_ini.post_max_size.description" = "Définit la taille maximale des message POST autorisées. Ce paramètre affecte également le téléchargement montant de fichiers. Pour envoyer des fichiers volumineux, cette valeur doit être supérieure à la taille maximale de téléchargement montant. D'une manière générale, la limite de mémoire doit être supérieure à la taille maximale des messages POST.";
|
||||
"php_ini.file_uploads.title" = "Téléchargement montant de fichiers";
|
||||
"php_ini.file_uploads.description" = "Activer ou désactiver complètement les téléchargements montant de fichiers. Il est recommandé de laisser cette option activée.";
|
||||
"php_ini.upload_max_filesize.title" = "Taille maximale de téléchargement montant";
|
||||
"php_ini.upload_max_filesize.description" = "Taille maximale d'un téléchargement montant. La taille maximale POST doit être supérieure à cette valeur.";
|
||||
|
||||
// PHPMAN
|
||||
|
||||
"phpman.busy.title" = "Vérification des mises à jour en cours !";
|
||||
"phpman.busy.description.outdated" = "Vérification des versions PHP obsolètes en cours...";
|
||||
|
||||
"phpman.version.broken" = "Cette version semble être endommagée. Vous pouvez tenter de la réparer.";
|
||||
"phpman.version.has_update" = "Version %@ installée, %@ disponible.";
|
||||
"phpman.version.installed" = "La version %@ est actuellement installée.";
|
||||
"phpman.version.available_for_installation" = "Cette version peut être installée.";
|
||||
"phpman.version.automatic_upgrade" = "Cette version sera installée automatiquement en mettant à jour une version plus ancienne.";
|
||||
"phpman.buttons.uninstall" = "Désinstaller";
|
||||
"phpman.buttons.install" = "Installer";
|
||||
"phpman.buttons.update" = "Mettre à jour";
|
||||
"phpman.buttons.repair" = "Réparer";
|
||||
"phpman.version.prerelease" = "Pré-version";
|
||||
|
||||
"phpman.title" = "Gestionnaire de versions PHP";
|
||||
"phpman.description" = "Le **gestionnaire de versions PHP** vous permet d'installer, de mettre à niveau et de supprimer différentes versions de PHP via Homebrew sans avoir à exécuter les commandes vous-même dans le terminal.";
|
||||
"phpman.disclaimer" = "Veuillez noter que l'installation ou la mise à niveau des versions de PHP peut entraîner la mise à niveau d'autres packages Homebrew. La plupart des étapes d'installation prennent généralement un certain temps, donc veuillez patienter pendant que Homebrew fait son travail.";
|
||||
"phpman.refresh.button" = "Rechercher des mises à jour";
|
||||
"phpman.refresh.button.description" = "Vous pouvez appuyer sur le bouton de rafraîchissement pour vérifier si des mises à jour sont disponibles pour les versions de PHP installées.";
|
||||
|
||||
"phpman.has_updates.description" = "Une ou plusieurs mises à jour sont disponibles. (Veuillez noter que PHP Monitor installera ou mettra toujours à jour les versions de PHP en bloc, vous mettrez donc à jour toutes les installations en une seule fois.)";
|
||||
"phpman.has_updates.button" = "Tout mettre à jour";
|
||||
|
||||
"phpman.warnings.unsupported.title" = "Votre version de Homebrew peut causer des problèmes";
|
||||
"phpman.warnings.unsupported.desc" = "Aucune fonctionnalité n'est désactivée, mais certaines commandes peuvent ne pas fonctionner comme prévu. Vous utilisez actuellement Homebrew %@.
|
||||
|
||||
Actuellement, Homebrew 4 est la seule version prise en charge par le gestionnaire de versions PHP. Si vous utilisez une version plus récente de Homebrew, vous pouvez vérifier si une version plus récente de PHP Monitor est disponible.";
|
||||
|
||||
"phpman.warnings.removal.title" = "Êtes-vous sûr de vouloir désinstaller %@ ?";
|
||||
"phpman.warnings.removal.desc" = "Veuillez noter que les fichiers de configuration ne seront pas supprimés, il sera donc facile de réinstaller ultérieurement si nécessaire.
|
||||
|
||||
Il se peut que vous deviez saisir votre mot de passe pendant le processus de désinstallation si les autorisations des fichiers ne permettent pas une suppression simple.";
|
||||
"phpman.warnings.removal.button" = "Désinstaller";
|
||||
|
||||
"phpman.failures.install.title" = "L'installation a échoué !";
|
||||
"phpman.failures.install.desc" = "Malheureusement, l'opération a renvoyé un code d'erreur pour une raison inconnue. Il se peut que les formules aient été correctement installées ou mises à niveau. Malheureusement, je ne peux pas faire grand-chose à ce sujet. Veuillez consulter les derniers messages de Homebrew ici pour plus d'informations sur ce qui s'est passé :
|
||||
|
||||
%@";
|
||||
|
||||
"phpman.action_prevented_busy.title" = "PHP Monitor est actuellement occupé.";
|
||||
"phpman.action_prevented_busy.desc" = "PHP Monitor est actuellement occupé à effectuer une opération telle que le changement de versions de PHP. Pour garantir que votre système ne se casse pas, vous devez attendre que PHP Monitor soit prêt avant de réessayer.";
|
||||
|
||||
"phpman.uninstall_prevented.title" = "Vous ne pouvez pas désinstaller la version de PHP actuellement active via PHP Monitor.";
|
||||
"phpman.uninstall_prevented.desc" = "Afin de prévenir les problèmes avec PHP Monitor et d'autres plantages, il n'est pas possible de désinstaller la version actuellement liée de PHP via cette interface utilisateur. Vous pouvez changer de version et réessayer, ou désinstaller cette version manuellement via le terminal.\n\nVeuillez noter que PHP Monitor peut planter si vous désinstallez la version de PHP actuellement liée.";
|
||||
|
||||
"phpman.failures.uninstall.title" = "La désinstallation a échoué !";
|
||||
"phpman.failures.uninstall.desc" = "Malheureusement, la désinstallation automatique a échoué. Vous pouvez essayer de lancer manuellement cette commande : `%@` et découvrir ce qui ne fonctionne pas. N'oubliez pas de redémarrer PHP Monitor (ou d'appuyer sur le bouton de rafraîchissement) une fois terminé.";
|
||||
|
||||
"phpman.unlinked.title" = "Aucune des versions de PHP installées sur votre système n'est actuellement liée.";
|
||||
"phpman.unlinked.desc" = "Il est probable que vous ayez toujours une version de PHP installée, mais actuellement aucune version de PHP n'est liée.";
|
||||
"phpman.unlinked.detail" = "Sans aucune version de PHP liée, le binaire php n'est pas accessible sur votre système et vous ne pouvez pas exécuter de scripts PHP sans être explicitement inclus dans le PATH. PHP Monitor peut résoudre automatiquement ce problème (choisissez Réparer automatiquement dans le menu principal) ou vous pouvez le résoudre vous-même en exécutant la commande `brew link php --force`.";
|
||||
|
||||
"phpman.operations.repairing" = "Réparation des installations en cours...";
|
||||
"phpman.operations.updating" = "Installation des mises à jour en cours...";
|
||||
"phpman.operations.installing" = "Installation de %@ en cours...";
|
||||
|
||||
"phpman.steps.fetching" = "Récupération en cours...";
|
||||
"phpman.steps.downloading" = "Téléchargement des données du package en cours...";
|
||||
"phpman.steps.installing" = "Installation de certaines données du package en cours...";
|
||||
"phpman.steps.pouring" = "Versement en cours... Cela peut prendre un certain temps...";
|
||||
"phpman.steps.summary" = "L'installation d'un package est terminée...";
|
||||
|
||||
"phpman.services.loading" = "Chargement...";
|
||||
"phpman.services.not_installed" = "Un service nécessaire n'est pas installé.";
|
||||
"phpman.services.error" = "Un service nécessaire rapporte une érreur.";
|
||||
"phpman.services.inactive" = "Un service nécessaire n'est pas lancé.";
|
||||
"phpman.services.all_ok" = "Tout les services Valet sont OK.";
|
||||
|
||||
// LITE MODE
|
||||
|
||||
"lite_mode_explanation.title" = "Vous utilisez actuellement PHP Monitor en mode Standalone.";
|
||||
"lite_mode_explanation.subtitle" = "PHP Monitor dispose de fonctionnalités supplémentaires qui sont disponibles si vous utilisez Laravel Valet. Actuellement, PHP Monitor n'a pas détecté d'installation active de Valet sur votre système, ces fonctionnalités ne sont donc pas disponibles.";
|
||||
"lite_mode_explanation.description" = "Pour plus d'informations, je vous recommande de consulter le README (accessible sur GitHub) qui expliquera les étapes à suivre pour installer Valet et faire fonctionner correctement PHP Monitor avec cette installation. Vous devrez redémarrer PHP Monitor après avoir installé Laravel Valet avant de quitter le mode Standalone.";
|
||||
|
||||
// GENERIC
|
||||
|
||||
"generic.ok" = "OK";
|
||||
"generic.cancel" = "Annuler";
|
||||
"generic.retry" = "Réessayer";
|
||||
"generic.notice" = "Notice";
|
||||
|
||||
// PRESET LOADING
|
||||
|
||||
"preset_help_title" = "Utilisation des paramètres de configuration";
|
||||
"preset_help_info" = "Vous pouvez configurer des paramètres de configuration dans le fichier config.json, situé dans ~/.config/phpmon/config.json. Ces paramètres peuvent appliquer une sélection de valeurs de configuration en une seule fois. Il s'agit d'une fonctionnalité puissante, mais qui doit actuellement être configurée manuellement.";
|
||||
"preset_help_desc" = "Après avoir redémarré PHP Monitor, tous les paramètres présents dans le fichier seront chargés. Si aucun paramètre n'apparaît, il est probable que le fichier n'ait pas pu être analysé correctement.\n\nVous pouvez cliquer sur le point d'interrogation dans cette alerte pour accéder à la FAQ sur GitHub, où vous trouverez plus d'informations sur cette fonctionnalité, y compris un exemple de fichier.";
|
||||
|
||||
// MENU ITEMS (if window is open)
|
||||
|
||||
"mm_add_folder_as_link" = "Ajouter un dossier en tant que lien...";
|
||||
"mm_reload_domain_list" = "Recharger la liste des domaines";
|
||||
"mm_find_in_domain_list" = "Rechercher dans la liste des domaines";
|
||||
|
||||
// SITE LIST
|
||||
|
||||
"domain_list.title" = "Domaines";
|
||||
"domain_list.subtitle" = "";
|
||||
|
||||
"domain_list.no_domains" = "Vous n'avez pas encore configuré de domaines ou de proxies.";
|
||||
"domain_list.no_domains_for_search_query" = "Votre recherche ne retourne aucun résultat.";
|
||||
|
||||
"domain_list.tooltips.isolated" = "Ce domaine est isolé et utilise PHP %@ au lieu de la version de PHP liée globalement.";
|
||||
"domain_list.tooltips.checkmark" = "Ce domaine est servi avec une version de PHP compatible avec cette exigence (PHP %@). Cliquez sur la version de PHP à côté de cette coche pour obtenir plus d'informations sur la manière dont cette exigence a été déterminée.";
|
||||
|
||||
"domain_list.alerts_isolation_failed.title" = "Oups ! L'isolation du site n'a pas été appliquée.";
|
||||
"domain_list.alerts_isolation_failed.subtitle" = "Quelque chose s'est mal passé lors de la tentative de modification du statut d'isolation pour ce site. Si c'est votre site par défaut mais qu'il n'est pas lié, je vous recommande de le lier manuellement avant de configurer l'isolation.";
|
||||
"domain_list.alerts_isolation_failed.desc" = "Pour déterminer ce qui ne fonctionne pas, vous pouvez essayer d'exécuter la commande manuellement dans votre terminal : %@";
|
||||
|
||||
"domain_list.alerts_status_not_changed.title" = "Oups ! Le statut SSL n'a pas été modifié.";
|
||||
"domain_list.alerts_status_not_changed.desc" = "Quelque chose s'est mal passé. Essayez d'exécuter la commande manuellement dans votre terminal : %@";
|
||||
|
||||
"domain_list.alerts_status_changed.title" = "Statut SSL modifié";
|
||||
"domain_list.alerts_status_changed.desc" = "Le domaine '%@' est maintenant %@.";
|
||||
"domain_list.alerts_status_secure" = "sécurisé";
|
||||
"domain_list.alerts_status_unsecure" = "non sécurisé";
|
||||
|
||||
"domain_list.confirm_unlink" = "Êtes-vous sûr de vouloir dissocier '%@' ?";
|
||||
"domain_list.confirm_unlink_desc" = "Aucun fichier ne sera supprimé. Vous pouvez toujours lier à nouveau le dossier en cliquant sur le bouton + et en sélectionnant le dossier d'origine.";
|
||||
"site_link.close" = "Fermer";
|
||||
"site_link.switch_to_php" = "Basculer vers PHP %@";
|
||||
|
||||
"domain_list.confirm_unproxy" = "Êtes-vous sûr de vouloir supprimer le proxy '%@' ?";
|
||||
"domain_list.confirm_unproxy_desc" = "Vous pouvez toujours recréer le proxy en cliquant à nouveau sur le bouton +.";
|
||||
|
||||
"domain_list.columns.secure" = "TLS";
|
||||
"domain_list.columns.domain" = "Domaine";
|
||||
"domain_list.columns.active" = "Actif";
|
||||
"domain_list.columns.kind" = "Sorte";
|
||||
"domain_list.columns.project_type" = "Type de Projet";
|
||||
|
||||
// CHOOSE WHAT TO ADD
|
||||
|
||||
"selection.title" = "Quel type de domaine souhaitez-vous configurer ?";
|
||||
"selection.description" = "Les liens sont utilisés pour servir directement les projets. Si vous avez un dossier Laravel, Symfony, WordPress, etc. contenant du code, vous voudrez créer un lien et choisir le dossier où se trouve votre code.\n\nSi vous avez besoin d'un proxy, vous pouvez proxyer par exemple un conteneur vers un nom de domaine particulier. Cela peut être utile en combinaison avec Docker, par exemple.";
|
||||
"selection.create_link" = "Créer un lien";
|
||||
"selection.create_proxy" = "Créer un Proxy";
|
||||
"selection.cancel" = "Annuler";
|
||||
|
||||
// ADD PROXY TO DOMAINS LIST
|
||||
|
||||
"domain_list.add.set_up_proxy" = "Configurer un Proxy";
|
||||
"domain_list.add.proxy_subject" = "Sujet du proxy (doit inclure le protocole et le port)";
|
||||
"domain_list.add.domain_name" = "Nom de domaine";
|
||||
"domain_list.add.create_proxy" = "Créer le Proxy";
|
||||
"domain_list.add.proxy_available" = "%@ sera proxy et sera disponible via : %@://%@.%@";
|
||||
"domain_list.add.proxy_https_warning" = "%@ sera proxy et sera disponible via : %@://%@.%@.
|
||||
|
||||
( !) IMPORTANT : Ce proxy peut ne pas fonctionner jusqu'à ce que vous ajoutiez manuellement `proxy_ssl_verify off;` au fichier de configuration de nginx pour ce domaine. Il est recommandé d'utiliser un domaine non sécurisé comme sujet du proxy.";
|
||||
|
||||
// ADD SITE TO DOMAINS LIST
|
||||
|
||||
"domain_list.add.link_folder" = "Lier un dossier";
|
||||
"domain_list.add.domain_name_placeholder" = "Entrez un nom de domaine ici";
|
||||
"domain_list.add.secure_after_creation" = "Sécuriser %@.%@ après la création";
|
||||
"domain_list.add.secure_description" = "La sécurisation d'un domaine nécessite des privilèges administrateurs.\nIl se peut que l'on vous demande votre mot de passe ou votre Touch ID.";
|
||||
"domain_list.add.create_link" = "Créer Lien";
|
||||
"domain_list.add.cancel" = "Annuler";
|
||||
"domain_list.add.folder_available" = "Ce site sera accessible via l'URL suivante : %@://%@.%@";
|
||||
|
||||
"domain_list.add.empty_fields" = "Un ou plusieurs champs sont vides. Veuillez remplir tous les champs obligatoires.";
|
||||
"domain_list.add.errors.empty" = "Vous devez saisir un nom de domaine.";
|
||||
"domain_list.add.errors.empty_proxy" = "Vous devez indiquer ce qui sera proxy.";
|
||||
"domain_list.add.errors.subject_invalid" = "Le sujet que vous avez saisi n'est pas valide.\nVous devez inclure le protocole et le port.";
|
||||
"domain_list.add.errors.already_exists" = "Un lien portant ce nom existe déjà.";
|
||||
|
||||
// ADD SITE ERROR: FOLDER MISSING SINCE SELECTION
|
||||
|
||||
"domain_list.alert.folder_missing.desc" = "Le dossier que vous avez choisi ne semble plus exister. Voulez-vous annuler l'ajout de ce dossier ? Si vous avez déplacé le dossier, vous pouvez toujours le remettre en place et réessayer.";
|
||||
"domain_list.alert.folder_missing.title" = "Dossier manquant !";
|
||||
"domain_list.alert.folder_missing.cancel" = "Annuler le Lien";
|
||||
"domain_list.alert.folder_missing.return" = "OK";
|
||||
|
||||
"domain_list.add.modal_description" = "Sélectionnez d'abord le dossier que vous souhaitez lier.";
|
||||
|
||||
// SITE LIST ACTIONS
|
||||
|
||||
"domain_list.isolate" = "Changer la Version de PHP";
|
||||
"domain_list.site_isolation" = "Isolation du site";
|
||||
"domain_list.remove_isolation" = "Supprimer l'isolation";
|
||||
"domain_list.always_use_php" = "Tojours utiliser PHP %@";
|
||||
"domain_list.isolation_unavailable" = "Isolement non pris en charge (dans Valet 2)";
|
||||
|
||||
"domain_list.actions" = "Actions";
|
||||
"domain_list.unlink" = "Supprimer le Lien vers le Dossier";
|
||||
"domain_list.secure" = "Sécuriser le Domaine";
|
||||
"domain_list.unsecure" = "Supprimer la Sécurisation du Domaine";
|
||||
"domain_list.open_in" = "Ouvrir avec %@";
|
||||
"domain_list.open_in_finder" = "Ouvrir dans le Finder";
|
||||
"domain_list.open_in_browser" = "Ouvrir dans le Navigateur";
|
||||
"domain_list.open_in_terminal" = "Ouvrir dans le Terminal";
|
||||
"domain_list.detected_apps" = "Applications Détectées";
|
||||
"domain_list.system_apps" = "Applications Système";
|
||||
"domain_list.unproxy" = "Supprimer le Proxy";
|
||||
"domain_list.use_in_terminal" = "Ouvrir PHP %@ dans le Terminal";
|
||||
|
||||
"domain_list.alerts_isolated_php_terminal.title" = "Vous pouvez utiliser PHP %@ dans un terminal spécifique!";
|
||||
"domain_list.alerts_isolated_php_terminal.subtitle" = "Malheureusement, PHP Monitor ne peut pas ouvrir un terminal pour vous (et taper les commandes appropriées). Vous devrez donc manuellement créer le script d'aide afin d'utiliser cette version spécifique de PHP. Pour ce faire, vous pouvez taper ce qui suit dans le terminal de votre choix :
|
||||
|
||||
. pm%@
|
||||
|
||||
Ceci va générer le script d'aide tel qu'il est généré par PHP Monitor et permettre l'utilisation de PHP %@ pour ce terminal spécifique.
|
||||
|
||||
Cela n'a pas d'effet sur les autres terminaux, mais uniquement sur la session de terminal particulière sur laquelle vous l'utilisez. (par exemple, si vous avez plusieurs onglets dans votre application de terminal, les autres onglets et fenêtres ne sont pas affectés).";
|
||||
"domain_list.alerts_isolated_php_terminal.desc" = "Si cela ne fonctionne pas, vous pouvez vérifier PHP Doctor via le menu Dépannage ici dans PHP Monitor. Plus d'informations sur cette fonctionnalité peuvent être trouvées sur GitHub (sur le wiki du dépôt de PHP Monitor). Cette alerte est incluse pour améliorer la visibilité de cette fonctionnalité.";
|
||||
|
||||
|
||||
"domain_list.warning.spaces" = "Attention ! Ce site a un espace dans son dossier.\nLe site ne sera pas accessible via le navigateur.";
|
||||
|
||||
"domain_list.alert.invalid_folder_name" = "Nom de dossier non valide";
|
||||
"domain_list.alert.invalid_folder_name_desc" = "Ce dossier n'a pas pu être résolu en une URL valide. Cela est généralement dû à la présence d'un espace dans le nom du dossier. Veuillez renommer le dossier, recharger la liste des sites et réessayer.";
|
||||
|
||||
"domain_list.columns.tls" = "TLS";
|
||||
"domain_list.columns.php" = "PHP";
|
||||
"domain_list.columns.type" = "Type";
|
||||
|
||||
// DRIVERS
|
||||
|
||||
"driver.not_detected" = "Autres";
|
||||
|
||||
// PRESET
|
||||
|
||||
"preset.extension" = "%i extension";
|
||||
"preset.extensions" = "%i extensions";
|
||||
"preset.preference" = "%i préférence";
|
||||
"preset.preferences" = "%i préférences";
|
||||
|
||||
// EDITORS
|
||||
|
||||
"editors.alert.try_again" = "Essayez à nouveau";
|
||||
"editors.alert.cancel" = "Annuler";
|
||||
|
||||
// PREFERENCES
|
||||
|
||||
"prefs.title" = "PHP Monitor";
|
||||
"prefs.subtitle" = "Préférences";
|
||||
"prefs.close" = "Fermer";
|
||||
|
||||
"prefs.tabs.general" = "Général";
|
||||
"prefs.tabs.appearance" = "Apparence";
|
||||
"prefs.tabs.visibility" = "Visibilité";
|
||||
"prefs.tabs.notifications" = "Notifications";
|
||||
|
||||
"prefs.global_shortcut" = "Raccourci Clavier :";
|
||||
"prefs.dynamic_icon" = "Type d'Icône :";
|
||||
"prefs.info_density" = "Densité d'Informations :";
|
||||
"prefs.services" = "Services :";
|
||||
"prefs.switcher" = "Sélecteur :";
|
||||
"prefs.php_doctor" = "PHP Doctor :";
|
||||
"prefs.integrations" = "Intégrations :";
|
||||
"prefs.updates" = "Mises-à-jour :";
|
||||
"prefs.notifications" = "Notifications :";
|
||||
"prefs.warnings" = "Avertissements :";
|
||||
"prefs.menu_contents" = "Le menu contient :";
|
||||
"prefs.startup" = "Démarrage :";
|
||||
|
||||
"prefs.auto_start_desc" = "Lancer automatiquement PHP Monitor lorsque vous vous connectez à votre Mac.";
|
||||
"prefs.auto_start_title" = "Démarrer PHP Monitor à la connexion";
|
||||
|
||||
"prefs.icon_options.php" = "Afficher l'icône PHP";
|
||||
"prefs.icon_options.elephant" = "Afficher l'icône Éléphant";
|
||||
"prefs.icon_options.none" = "Ne Pas Afficher d'icône";
|
||||
|
||||
"prefs.icon_options_desc" = "Cette option détermine l'icône qui sera affichée à côté du numéro de version de la version de PHP actuellement liée. Si l'option Icône dynamique a été désactivée, cette option n'aura aucun effet.";
|
||||
|
||||
"prefs.auto_restart_services_title" = "Redémarrer PHP-FPM automatiquement";
|
||||
"prefs.auto_restart_services_desc" = "Lorsque cette option est cochée, PHP-FPM redémarre automatiquement lorsque vous cochez ou décochez une extension. Légèrement plus lent lorsqu'il est activé, mais il applique immédiatement le changement d'extension pour tous les sites que vous servez, sans avoir besoin de redémarrer PHP-FPM manuellement.";
|
||||
|
||||
"prefs.dynamic_icon_title" = "Afficher une icône dynamique dans la barre de menu";
|
||||
"prefs.dynamic_icon_desc" = "Si vous décochez cette case, l'icône du camion sera toujours visible. Si elle est cochée, elle affichera le numéro de la version majeure de la version de PHP actuellement liée.";
|
||||
|
||||
"prefs.display_full_php_version" = "Afficher la version complète de PHP partout";
|
||||
"prefs.display_full_php_version_desc" = "Afficher la version complète au lieu de la version majeure affichée dans la barre de menu et le menu déroulant. (Cela peut s'avérer indésirable sur les petits écrans, c'est pourquoi cette option est désactivée par défaut).";
|
||||
|
||||
"prefs.auto_composer_update_title" = "Mise à jour automatique des dépendances globales";
|
||||
"prefs.auto_composer_update_desc" = "Si cette option est cochée, elle demandera automatiquement à Composer d'exécuter `composer global update` à chaque fois que vous passerez d'une version de PHP à une autre. Vous serez en mesure de voir quels changements sont effectués, ou si cela échoue.";
|
||||
|
||||
"prefs.open_protocol_title" = "Autoriser les intégrations tierces";
|
||||
"prefs.open_protocol_desc" = "Lorsque cette option est cochée, elle permet à l'interaction avec des utilitaires tiers de fonctionner (par exemple Alfred, Raycast). Si vous désactivez cette option, le PHP Monitor recevra toujours les commandes, mais n'agira pas en conséquence.";
|
||||
|
||||
"prefs.automatic_update_check_title" = "Vérifier automatiquement les mises à jour";
|
||||
"prefs.automatic_update_check_desc" = "Lorsque cette option est cochée, PHP Monitor vérifie automatiquement si une version plus récente est disponible, et vous en informe si c'est le cas.";
|
||||
|
||||
"prefs.php_doctor_suggestions_title" = "Toujours afficher les suggestions";
|
||||
"prefs.php_doctor_suggestions_desc" = "Si vous décochez cette option, aucune suggestion de PHP Doctor n'apparaîtra dans le menu de PHP Monitor. Gardez à l'esprit que PHP Doctor n'apparaîtra pas s'il n'y a pas de recommandations.";
|
||||
|
||||
"prefs.shortcut_set" = "Définir un raccourci global";
|
||||
"prefs.shortcut_listening" = "<écoute de l'appui sur le clavier>";
|
||||
"prefs.shortcut_clear" = "Éffacer";
|
||||
"prefs.shortcut_desc" = "Si une combinaison de raccourcis est configurée, vous pouvez basculer le moniteur PHP où que vous soyez en appuyant sur la combinaison de touches que vous avez choisie. (Annulez le choix d'un raccourci en appuyant sur la barre d'espacement).";
|
||||
|
||||
"prefs.notify_about_version_change_desc" = "Affiche une notification lorsque la version active de PHP change.";
|
||||
"prefs.notify_about_version_change" = "Notification du changement de version de PHP";
|
||||
|
||||
"prefs.notify_about_php_fpm_change_desc" = "Affiche une notification lorsque le processus PHP-FPM actif a redémarré suite à un changement de configuration.";
|
||||
"prefs.notify_about_php_fpm_change" = "Notifier le redémarrage de PHP-FPM";
|
||||
|
||||
"prefs.notify_about_services_desc" = "Affiche une notification lorsque l'un des services Homebrew (installés et configurés par Valet) a été redémarré ou arrêté.";
|
||||
"prefs.notify_about_services" = "Notifier l'état des services";
|
||||
|
||||
"prefs.notify_about_presets_desc" = "Affiche une notification lorsqu'un paramètre a été appliqué ou annulé avec succès.";
|
||||
"prefs.notify_about_presets" = "Notification de l'application des paramètres";
|
||||
|
||||
"prefs.notify_about_secure_status_desc" = "Affiche une notification lorsqu'un domaine a été sécurisé ou non sécurisé" ;
|
||||
"prefs.notify_about_secure_status" = "Notification de l'état sécurisé/non sécurisé";
|
||||
|
||||
"prefs.notify_about_composer_success_desc" = "Affiche une notification lorsque la configuration globale de Composer a été mise à jour avec succès" ;
|
||||
"prefs.notify_about_composer_success" = "Notifier sur les mises à jour globales composer" ;
|
||||
|
||||
"prefs.warn_about_non_standard_tld_desc" = "Si vous utilisez un TLD non standard, vous ne souhaiterez peut-être pas recevoir de notifications répétées à ce sujet" ;
|
||||
"prefs.warn_about_non_standard_tld" = "Avertir à propos d'un TLD non standard" ;
|
||||
|
||||
"prefs.display_global_version_switcher_desc" = "Si cette option est désactivée, vous ne pourrez pas modifier la version de PHP liée globalement via le menu principal.";
|
||||
"prefs.display_global_version_switcher" = "PHP Switcher";
|
||||
|
||||
"prefs.display_services_manager_desc" = "S'il est désactivé, vous ne pourrez pas voir, démarrer ou arrêter les différents services. (Si des services sont désactivés, vous ne pourrez pas facilement voir que c'est le cas).";
|
||||
"prefs.display_services_manager" = "Gestionnaire des services";
|
||||
|
||||
"prefs.display_valet_integration_desc" = "Si elle est désactivée, vous ne pourrez pas localiser le dossier principal de Valet ni ouvrir la liste des domaines.";
|
||||
"prefs.display_valet_integration" = "Intégration Valet";
|
||||
|
||||
"prefs.display_php_config_finder_desc" = "Si cette option est désactivée, vous ne pourrez pas localiser facilement vos fichiers de configuration PHP et/ou générer un dump phpinfo().";
|
||||
"prefs.display_php_config_finder" = "Chercheur de configuration PHP";
|
||||
|
||||
"prefs.display_composer_toolkit_desc" = "Si cette option est désactivée, vous ne pourrez pas invoquer Composer via le menu principal. La mise à jour automatique de Composer après avoir changé de préférence n'est pas affectée par ce changement.";
|
||||
"prefs.display_composer_toolkit" = "Boîte à Outils Composer";
|
||||
|
||||
"prefs.display_limits_widget_desc" = "Si cette option est désactivée, vous ne pourrez pas voir le widget des limites (mémoire, POST, téléchargement) dans le menu principal.";
|
||||
"prefs.display_limits_widget" = "Widget des Limites";
|
||||
|
||||
"prefs.display_extensions_desc" = "Si cette option est désactivée, vous ne pourrez pas contrôler facilement les extensions via le menu principal.";
|
||||
"prefs.display_extensions" = "Extensions";
|
||||
|
||||
"prefs.display_presets_desc" = "Si cette option est désactivée, il ne sera pas possible d'appliquer ou de revenir sur les paramètres de configuration de PHP.";
|
||||
"prefs.display_presets" = "Paramètres";
|
||||
|
||||
"prefs.display_misc_desc" = "Si vous êtes désactivé, vous ne pourrez pas accéder au menu Premiers Secours et Services.";
|
||||
"prefs.display_misc" = "Menu Premiers Secours et Services";
|
||||
|
||||
// NOTIFICATIONS
|
||||
|
||||
"notification.version_changed_title" = "PHP %@ maintenant actif";
|
||||
"notification.version_changed_desc" = "PHP Monitor est passé à PHP %@.";
|
||||
|
||||
"notification.php_fpm_restarted" = "PHP-FPM a redémarrer automatiquement";
|
||||
"notification.php_fpm_restarted_desc" = "Vous avez basculé une extension, et PHP-FPM a donc été redémarré automatiquement.";
|
||||
|
||||
"notification.services_stopped" = "Les Services Valet sont arrêtés";
|
||||
"notification.services_stopped_desc" = "Tous les services ont été arrêtés avec succès.";
|
||||
|
||||
"notification.services_restarted" = "Redémarrage des services Valet";
|
||||
"notification.services_restarted_desc" = "Tous les services ont été redémarrés avec succès.";
|
||||
|
||||
"notification.preset_applied_title" = "Paramètre appliqué";
|
||||
"notification.preset_applied_desc" = "Le paramètre '%@' a été appliqué avec succès.";
|
||||
|
||||
"notification.preset_reverted_title" = "Paramètre annulé";
|
||||
"notification.preset_reverted_desc" = "Le dernier paramètre que vous avez appliqué a été annulé. Votre configuration précédente est maintenant active.";
|
||||
|
||||
"notification.phpmon_updated.title" = "PHP Monitor a été mis à jour !";
|
||||
"notification.phpmon_updated.desc" = "Vous utilisez maintenant PHP Monitor v%@. L'équipe vous remercie !";
|
||||
"notification.phpmon_updated_dev.desc" = "PHP Monitor v%@ (build %@) est maintenant installé et actif.";
|
||||
|
||||
// Composer Update
|
||||
"alert.composer_missing.title" = "Composer introuvable!";
|
||||
"alert.composer_missing.subtitle" = "PHP Monitor n'a pas pu trouver Composer. Assurez-vous que Composer est installé et réessayez.";
|
||||
"alert.composer_missing.desc" = "PHP Monitor suppose que Composer est situé dans:
|
||||
|
||||
• `/usr/local/bin/composer`
|
||||
• `/opt/homebrew/bin/composer`
|
||||
|
||||
Assurez-vous qu'il est installé à l'un de ces endroits, ou créez un lien symbolique si Composer est installé ailleurs.";
|
||||
|
||||
"alert.composer_progress.title" = "Mise à jour des dépendances globales...";
|
||||
"alert.composer_progress.info" = "Vous pouvez voir la progression dans le terminal ci-dessous.";
|
||||
|
||||
"alert.composer_failure.title" = "Quelque chose n'a pas fonctionné !";
|
||||
"alert.composer_failure.info" = "Vos dépendances globales de Composer n'ont pas pu être mises à jour.
|
||||
Vous trouverez plus d'informations dans le message ci-dessous. Vous devrez corriger ce
|
||||
problème manuellement, en utilisant votre propre application Terminal (ceci vous montre simplement un message).";
|
||||
|
||||
"alert.composer_success.title" = "Composer a fini sa mise à jour!";
|
||||
"alert.composer_success.info" = "Les dépendances globales de votre Composer ont été mises à jour avec succès.";
|
||||
|
||||
// Composer Version
|
||||
|
||||
"alert.composer_php_isolated.desc" = "Ce site a été isolé, ce qui signifie que Valet sert PHP %@ pour ce site spécifiquement. La version globale est actuellement PHP %@.";
|
||||
"alert.composer_php_requirement.title" = "'%@' a besoin de PHP %@.";
|
||||
"alert.composer_php_requirement.unable_to_determine" = "Impossible de déterminer les versions requises PHP";
|
||||
"alert.composer_php_requirement.type.unknown" = "PHP Monitor n'a pas pu déterminer quelle version de PHP est requise pour ce domaine. La contrainte peut être déterminée si vous avez un fichier `composer.json` ou un fichier `.valetphprc` dans le dossier de votre projet.";
|
||||
"alert.composer_php_requirement.type.require" = "La version PHP requise a été déterminée en vérifiant le champ `require` dans le fichier `composer.json` lors de la dernière mise à jour de la liste des sites.";
|
||||
"alert.composer_php_requirement.type.platform" = "La version PHP requise a été déterminée en vérifiant le champ `platform` dans le fichier `composer.json` lors de la dernière mise à jour de la liste des sites.";
|
||||
"alert.composer_php_requirement.type.valetphprc" = "La version de PHP requise a été déterminée en vérifiant le fichier .valetphprc dans le dossier de votre projet.";
|
||||
"alert.composer_php_requirement.type.valetrc" = "La version de PHP requise a été déterminée en vérifiant le fichier .valetrc dans le répertoire de votre projet.";
|
||||
"alert.unable_to_determine_is_fine" = "Si vous avez un projet simple, il se peut qu'aucune version de PHP ne soit exigée. Dans ce cas, vous pouvez ignorer cet avertissement.";
|
||||
"alert.php_version_ideal" = "La version PHP actuellement active est idéale pour ce site.";
|
||||
"alert.php_version_incorrect" = "La version PHP actuellement active ne respecte pas les contraintes définies pour ce site.";
|
||||
"alert.php_suggestions" = "Il se peut qu'il existe une version différente de PHP qui soit plus proche de la contrainte.";
|
||||
|
||||
// Suggest Fix My Valet
|
||||
"alert.php_switch_failed.title" = "Le basculement vers PHP %@ semble avoir échoué.";
|
||||
"alert.php_switch_failed.info" = "PHP Monitor a détecté que PHP %@ n'est pas actif après avoir terminé sa procédure de remplacement. Vous pouvez essayer d'exécuter « Fix My Valet » et recommencer à basculer après cela. Voulez-vous essayer cette solution ?";
|
||||
"alert.php_switch_failed.desc" = "Tout d'abord, vous devriez essayer « Fix My Valet » si vous ne l'avez pas déjà fait. Si PHP Monitor reste incapable de changer la version active de PHP, il se peut que vous deviez mettre à jour Valet et les paquets Homebrew. Vous pouvez le faire en lançant `brew update && brew upgrade` ainsi qu'en mettant à jour Valet en lançant `composer global update && valet install`.";
|
||||
"alert.php_switch_failed.confirm" = "Oui, éxécute \"Fix My Valet\"";
|
||||
"alert.php_switch_failed.cancel" = "Ne Pas Éxécuter";
|
||||
|
||||
// PHP Formula Missing
|
||||
"alert.php_formula_missing.title" = "Oups ! La formule `php` doit être installée pour que Fix My Valet fonctionne...";
|
||||
"alert.php_formula_missing.info" = "Il semble que vous n'ayez pas installé la formule `php`, ce qui empêche PHP Monitor d'exécuter Fix My Valet. Veuillez l'installer en utilisant `brew install php`, redémarrez PHP Monitor et réessayez.";
|
||||
|
||||
// Fix My Valet Started
|
||||
"alert.fix_my_valet.title" = "Vous avez des problèmes ? Fix My Valet est prêt à vous aider !";
|
||||
"alert.fix_my_valet.info" = "Cela peut prendre un certain temps. Veuillez être patient.\n\nLorsque cela sera fait, tous les autres services seront interrompus et PHP %@ sera lié. Vous pourrez passer à la version de PHP de votre choix une fois cette opération terminée.\n\n(Vous recevrez une autre notification lorsque Fix My Valet sera terminé.)";
|
||||
"alert.fix_my_valet.ok" = "Continuer";
|
||||
"alert.fix_my_valet.cancel" = "Annuler";
|
||||
|
||||
// Fix My Valet Done
|
||||
"alert.fix_my_valet_done.title" = "Fix My Valet a terminé ses opérations.";
|
||||
"alert.fix_my_valet_done.subtitle" = "Tous les services appropriés ont été arrêtés et les sélectionnés redémarrés, et la dernière version de PHP devrait maintenant être active. Vous pouvez maintenant essayer de passer à une autre version de PHP.";
|
||||
"alert.fix_my_valet_done.stay" = "Rester avec PHP %@";
|
||||
"alert.fix_my_valet_done.switch_back" = "Revenir à PHP %@";
|
||||
"alert.fix_my_valet_done.desc" = "Si le chargement des sites ne fonctionne toujours pas, vous pouvez essayer d'exécuter `valet install` à nouveau, cela peut corriger un problème 502 (Bad Gateway).\n\nSi Valet est cassé et que vous ne pouvez pas exécuter `valet install`, vous pouvez avoir besoin d'exécuter `composer global update`. Veuillez consulter la FAQ sur GitHub si vous avez d'autres problèmes.";
|
||||
|
||||
// Restore Homebrew Permissions
|
||||
"alert.fix_homebrew_permissions.title" = "À propos de \"Rétablir les permissions Homebrew\"";
|
||||
"alert.fix_homebrew_permissions.subtitle" = "Cette fonctionnalité a été créée pour que vous puissiez exécuter `brew upgrade` ou `brew cleanup` sans problème de permission. (Vous serez notifié lorsque ce correctif aura été appliqué.)";
|
||||
"alert.fix_homebrew_permissions.desc" = "Cela nécessite des privilèges administrateurs, car PHP Monitor va restaurer votre accès aux fichiers et dossiers qui sont actuellement la propriété de l'utilisateur `root`, du fait que les services Valet s'exécutent en tant qu'utilisateur root.";
|
||||
"alert.fix_homebrew_permissions.ok" = "Rétablir les Permissions";
|
||||
"alert.fix_homebrew_permissions.cancel" = "Annuler";
|
||||
|
||||
"alert.fix_homebrew_permissions_done.title" = "Toutes les autorisations de fichiers et de dossiers pour les dépendances de Valet ont été rétablies.";
|
||||
"alert.fix_homebrew_permissions_done.subtitle" = "Pour cette raison, tous les services de Valet ne sont plus actifs. Vous pouvez maintenant interagir avec Homebrew, mais vos sites Valet seront indisponibles car tous les services sont désactivés.";
|
||||
"alert.fix_homebrew_permissions_done.desc" = "Lorsque vous avez terminé avec Homebrew (après avoir lancé `brew upgrade`, par exemple), vous devriez redémarrer PHP Monitor et sélectionner « Redémarrer les services Valet » Lorsque vous avez terminé avec Homebrew (après avoir lancé `brew upgrade`, par exemple), vous devriez redémarrer PHP Monitor et sélectionner ``Restart Valet Services`` si vous voulez que Valet fonctionne à nouveau. Il est toujours recommandé de redémarrer PHP Monitor à chaque fois que vous mettez à jour une version de PHP avec `brew upgrade`, sans quoi des problèmes pourraient survenir.";
|
||||
|
||||
// PHP FPM Broken
|
||||
"alert.php_fpm_broken.title" = "Votre configuration PHP-FPM ne pointe pas vers le socket Valet !";
|
||||
"alert.php_fpm_broken.info" = "PHP Monitor a déterminé qu'il y a des problèmes avec votre configuration PHP-FPM. Cela se traduira par des réponses '502 Bad Gateway' si vous visitez des sites web liés via Valet.";
|
||||
"alert.php_fpm_broken.description" = "Si cela fait longtemps, vous pouvez habituellement corriger cela en lançant `valet install`, qui met à jour votre configuration PHP-FPM.\n\nSi vous voyez ce message et que vous essayez d'exécuter une pré-version de PHP, il est possible que Valet ne supporte pas encore celle-ci.\n\nVous devrez peut-être mettre à jour votre installation de Laravel Valet vers au moins la version 3.1.11, après quoi vous devrez exécuter `valet install`. Plus d'informations ici : https://phpmon.app/prerelease-php";
|
||||
|
||||
// PHP Monitor Cannot Start
|
||||
"alert.cannot_start.title" = "PHP Monitor ne peut pas démarrer en raison d'un problème de configuration de votre système";
|
||||
"alert.cannot_start.subtitle" = "Le problème dont vous venez d'être informé empêche le PHP Monitor de fonctionner correctement.";
|
||||
"alert.cannot_start.description" = "Il se peut que vous n'ayez pas besoin de quitter PHP Monitor et de le redémarrer. Si vous avez résolu le problème (ou si vous ne vous souvenez pas du problème exact), vous pouvez cliquer sur Réessayer, ce qui permettra à PHP Monitor de refaire les vérifications de démarrage.";
|
||||
"alert.cannot_start.close" = "Quitter";
|
||||
"alert.cannot_start.retry" = "Essayer à nouveau";
|
||||
|
||||
// PHP alias issue
|
||||
"alert.php_alias_conflict.title" = "Conflit d'alias de la formule Homebrew `php` détecté";
|
||||
"alert.php_alias_conflict.info" = "PHP Monitor a détecté des alias `php` conflictuels dans votre configuration Homebrew, qui ont tous deux été détectés comme étant installés.\n\nCeci entraînera probablement l'échec de la liaison lors du changement de version de PHP, et brisera la fonctionnalité de PHP Monitor.\n\nPour plus d'informations, veuillez visiter : https://github.com/nicoverbruggen/phpmon/issues/54";
|
||||
|
||||
"alert.min_valet_version.title" = "La version installée de Valet ne correspond pas à la version minimale requise. Le PHP Monitor peut ne pas fonctionner comme prévu !";
|
||||
"alert.min_valet_version.info" = "Vous êtes en train d'exécuter Valet %@.
|
||||
|
||||
Pour une prise en charge optimale des dernières versions de PHP et un changement de version correct, il est recommandé de mettre à jour vers la version %@, qui est la configuration minimale requise pour cette version de PHP Monitor.
|
||||
|
||||
Vous pouvez mettre à jour en executant `composer global update` dans votre terminal. Une fois fait, lancez `valet install` à nouveau. Pour de meilleurs résultats, redémarrez PHP Monitor. Tant que ceci n'est pas réglé, PHP Monitor ne fonctionnera pas comme prévu.";
|
||||
|
||||
// Preset text description
|
||||
"alert.preset_description.switcher_version" = "Basculer vers PHP %@.\n\n";
|
||||
"alert.preset_description.applying_extensions" = "Les extensions suivantes seront appliquées :\n";
|
||||
"alert.preset_description.applying_config" = "Applique les valeurs de configuration suivantes :\n";
|
||||
"alert.preset_description.enabled" = "activée";
|
||||
"alert.preset_description.disabled" = "désactivée";
|
||||
"alert.preset_description.empty" = "(vide)";
|
||||
|
||||
// PHP version unavailable
|
||||
"alert.php_switch_unavailable.title" = "Version de PHP non supportée";
|
||||
"alert.php_switch_unavailable.subtitle" = "PHP Monitor ne peut pas passer à PHP %@, car il n'est peut-être pas installé ou disponible. L'application de ce paramètre a été annulée.";
|
||||
"alert.php_switch_unavailable.info" = "Assurez-vous que PHP %@ est installé et vous pouvez le sélectionner dans le menu déroulant. Les versions actuellement supportées sont PHP : %@.";
|
||||
"alert.php_switch_unavailable.ok" = "OK";
|
||||
|
||||
// Service error
|
||||
"alert.service_error.title" = "Le service '%@' signale une erreur!";
|
||||
"alert.service_error.subtitle.error_log" = "Cela signifie que le service '%@' n'est pas lancé. Cela peut empêcher Valet de fonctionner correctement. Ce service est associé à un fichier log que vous pouvez consulter.";
|
||||
"alert.service_error.subtitle.no_error_log" = "Cela signifie que le service '%@' n'est pas lancé. Cela peut empêcher Valet de fonctionner correctement. Malheureusement, il n'y a pas de fichier log associé à ce service.";
|
||||
"alert.service_error.extra" = "Vous pouvez également suivre les étapes de résolution des problèmes les plus communes. Pour en savoir plus, cliquez sur le bouton '?' dans la section services de PHP Monitor.";
|
||||
|
||||
"alert.service_error.button.show_log" = "Voir le log d'erreur";
|
||||
"alert.service_error.button.close" = "Fermer";
|
||||
|
||||
// Composer issues
|
||||
"alert.global_composer_platform_issues.title" = "Composer a détecté des problèmes dans votre plate-forme";
|
||||
"alert.global_composer_platform_issues.subtitle" = "La version de PHP que vous avez choisie est trop ancienne pour les dépendances globales de Composer que vous avez installées. Ces dépendances devront être mises à jour.";
|
||||
"alert.global_composer_platform_issues.desc" = "La façon la plus simple d'éviter ce problème à l'avenir est de basculer vers la plus ancienne version de PHP que vous avez installée et de lancer à nouveau `composer global update`. \n\nVous pouvez également choisir l'option \"Mettre à jour automatiquement les dépendances globales\" dans les préférences pour éviter ce problème.\n\nSi vous continuez à voir ce message même après avoir essayé de mettre à jour ces dépendances globales, vous pouvez consulter votre fichier de configuration globale de composer, situé à `~/.composer/composer.json`.";
|
||||
"alert.global_composer_platform_issues.buttons.update" = "Mettre à jour les dépendances globales";
|
||||
"alert.global_composer_platform_issues.buttons.quit" = "Quitter PHP Monitor";
|
||||
|
||||
// Revert
|
||||
"alert.revert_description.title" = "Revenir à la configuration précédente ?";
|
||||
"alert.revert_description.subtitle" = "PHP Monitor peut revenir à la configuration précédente active. Voici celle qui sera appliqué : \n\n%@";
|
||||
"alert.revert_description.ok" = "Revenir";
|
||||
"alert.revert_description.cancel" = "Annuler";
|
||||
|
||||
// STARTUP
|
||||
|
||||
/// 0. Architecture mismatch
|
||||
|
||||
"alert.homebrew_missing.title" = "Le PHP Monitor ne peut pas démarrer !";
|
||||
"alert.homebrew_missing.subtitle" = "Un binaire Homebrew fonctionnel n'a pas pu être trouvé à l'emplacement standard. Veuillez redémarrer l'application après avoir résolu ce problème.";
|
||||
"alert.homebrew_missing.info" = "Vous utilisez PHP Monitor avec l'architecture suivante : %@. En conséquence, un binaire Homebrew fonctionnel est attendu dans `%@`, mais n'a pas été trouvé. C'est pourquoi PHP Monitor ne peut pas fonctionner. \n\nSi vous n'avez pas encore installé Homebrew, faites-le. Si vous êtes sur Apple Silicon, assurez-vous que Homebrew et PHP Monitor utilisent la même architecture, en activant ou désactivant Rosetta si nécessaire.";
|
||||
|
||||
"alert.homebrew_missing.quit" = "Quitter";
|
||||
|
||||
/// PHP binary not found
|
||||
"startup.errors.php_binary.title" = "PHP n'est pas correctement installé";
|
||||
"startup.errors.php_binary.subtitle" = "Vous devez installer PHP via Homebrew. L'application ne fonctionnera pas correctement tant que vous n'aurez pas résolu ce problème.";
|
||||
"startup.errors.php_binary.desc" = "Généralement, l'exécution de `brew link php` dans votre Terminal résoudra ce problème.\n\nPour diagnostiquer ce qui ne va pas, vous pouvez essayer de lancer `which php` dans votre Terminal, il devrait retourner `%@`.";
|
||||
|
||||
/// PHP not found in /usr/local/opt or /opt/homebrew/opt
|
||||
"startup.errors.php_opt.title" = "PHP n'est pas correctement installé";
|
||||
"startup.errors.php_opt.subtitle" = "L'alias PHP n'a pas été trouvé dans `%@`. L'application ne fonctionnera pas correctement tant que vous n'aurez pas résolu ce problème.";
|
||||
"startup.errors.php_opt.desc" = "Si vous avez déjà installé la formule `php`, vous pouvez avoir besoin de lancer `brew install php` pour que PHP Monitor détecte cette installation.";
|
||||
|
||||
/// PHP binary is broken
|
||||
"startup.errors.dyld_library.title" = "PHP est installé, mais ne fonctionne manifestement pas.";
|
||||
"startup.errors.dyld_library.subtitle" = "Lorsque le PHP Monitor tente d'exécuter des commandes, il ne parvient pas à le faire correctement. C'est généralement un indicateur d'une installation PHP défectueuse.";
|
||||
"startup.errors.dyld_library.desc" = "Lancer `brew reinstall php && brew link php` dans votre Terminal peut résoudre ce problème, veuillez donc essayer.";
|
||||
|
||||
/// Valet is not installed
|
||||
"startup.errors.valet_executable.title" = "Laravel Valet n'est pas correctement installé";
|
||||
"startup.errors.valet_executable.subtitle" = "Vous devez installer Valet avec Composer. L'application ne fonctionnera pas correctement tant que vous n'aurez pas résolu ce problème.";
|
||||
"startup.errors.valet_executable.desc" = "Si vous n'avez pas encore installé Laravel Valet, faites-le d'abord. Si vous l'avez installé mais que vous voyez quand même ce message, essayez de lancer `which valet` dans Terminal, il devrait retourner : `%@`.";
|
||||
|
||||
/// Valet configuration file missing or broken
|
||||
"startup.errors.valet_json_invalid.title" = "Fichier de configuration de Laravel Valet invalide ou manquant";
|
||||
"startup.errors.valet_json_invalid.subtitle" = "PHP Monitor doit pouvoir lire le fichier de configuration. Il semble que le fichier soit malformé ou manquant. Veuillez vérifier qu'il existe et qu'il est correctement formaté.";
|
||||
"startup.errors.valet_json_invalid.desc" = "Vous pouvez trouver le fichier à `~/.config/valet/config.json`. Si Laravel Valet ne peut pas analyser le fichier de configuration, l'exécution de n'importe quelle commande `valet` corrigera automatiquement le fichier JSON. Essayez d'exécuter `valet --version` pour corriger automatiquement le fichier.";
|
||||
|
||||
/// Valet version not readable
|
||||
"startup.errors.valet_version_unknown.title" = "La version de votre Valet n'a pu être lue";
|
||||
"startup.errors.valet_version_unknown.subtitle" = "L'analyse de la réponse de `valet --version` a échoué. Assurez-vous que votre installation de Valet fonctionne et qu'elle est à jour.";
|
||||
"startup.errors.valet_version_unknown.desc" = "Essayez de lancer `valet --version` dans un terminal pour savoir ce qui se passe.";
|
||||
|
||||
"startup.errors.valet_not_installed.title" = "Le dossier de configuration de Valet est absent";
|
||||
"startup.errors.valet_not_installed.subtitle" = "Le répertoire requis `~/.config/valet` est manquant. Cela signifie généralement que vous avez oublié d'exécuter `valet install`.";
|
||||
"startup.errors.valet_not_installed.desc" = "En supposant que vous avez déjà installé Valet via Composer, lancez `valet install` pour terminer la configuration de Laravel Valet.
|
||||
|
||||
Si vous voyez ce message mais que vous ne savez pas pourquoi ce dossier a disparu, vous pouvez chercher à savoir pourquoi il a disparu - il ne devrait pas disparaître comme ça et cela signifie que l'installation de Valet est défectueuse.";
|
||||
|
||||
// Valet version too new or old
|
||||
"startup.errors.valet_version_not_supported.title" = "Cette version de Valet n'est pas compatible";
|
||||
"startup.errors.valet_version_not_supported.subtitle" = "Vous utilisez une version de Valet qui n'est pas supportée actuellement. PHP Monitor fonctionne actuellement avec Valet v2, v3 et v4. Afin d'éviter de causer des problèmes sur votre système, PHP Monitor ne peut pas démarrer.";
|
||||
"startup.errors.valet_version_not_supported.desc" = "Vous devez installer une version de Valet qui est compatible avec PHP Monitor, ou vous pouvez avoir besoin de mettre à jour vers une version plus récente de PHP Monitor qui peut inclure la compatibilité avec cette version de Valet (consultez les dernières notes de version pour plus d'informations).";
|
||||
|
||||
/// Brew & sudoers
|
||||
"startup.errors.sudoers_brew.title" = "Brew n'a pas été ajouté à sudoers.d";
|
||||
"startup.errors.sudoers_brew.subtitle" = "Vous devez exécuter `sudo valet trust` pour vous assurer que Valet peut démarrer et arrêter les services sans avoir à utiliser sudo à chaque fois. L'application ne fonctionnera pas correctement tant que vous n'aurez pas résolu ce problème.";
|
||||
"startup.errors.sudoers_brew.desc" = "Si vous continuez à voir cette erreur, il est possible qu'il y ait un problème de permission où PHP Monitor ne peut pas valider le fichier, ce qui peut généralement être résolu en exécutant : `sudo chmod +r /private/etc/sudoers.d/brew`";
|
||||
|
||||
/// Valet & sudoers
|
||||
"startup.errors.sudoers_valet.title" = "Valet n'a pas été ajouté à sudoers.d";
|
||||
"startup.errors.sudoers_valet.subtitle" = "Vous devez exécuter `sudo valet trust` pour vous assurer que Valet peut démarrer et arrêter les services sans avoir à utiliser sudo à chaque fois. L'application ne fonctionnera pas correctement tant que vous n'aurez pas résolu ce problème. Si vous l'avez déjà fait, exécutez à nouveau `sudo valet trust`.";
|
||||
"startup.errors.sudoers_valet.desc" = "Si vous continuez à voir cette erreur, il est possible qu'il y ait un problème de permission où PHP Monitor ne peut pas valider le fichier, ce qui peut généralement être résolu en exécutant : `sudo chmod +r /private/etc/sudoers.d/valet`";
|
||||
|
||||
/// Platform issue detected
|
||||
"startup.errors.global_composer_platform_issues.title" = "PHP Monitor et Valet ne peuvent pas fonctionner correctement : Composer signale un problème avec votre plateforme";
|
||||
"startup.errors.global_composer_platform_issues.subtitle" = "Veuillez suivre les étapes suivantes pour éviter ce problème à l'avenir :\n\n1. Exécuter `composer global update`.\n2. Redémarrer PHP Monitor. (Il devrait fonctionner à nouveau.)\n3. Passez à la version la plus ancienne de PHP que vous avez installée.\n4. Exécutez à nouveau `composer global update`.";
|
||||
"startup.errors.global_composer_platform_issues.desc" = "Vous pouvez aller dans Préférences et cocher l'option 'Mettre à jour automatiquement les dépendances globales'. Cela mettra à jour les dépendances globales de Composer à chaque fois que vous changerez de version de PHP, ce qui n'est pas idéal si vous n'avez pas un accès constant à internet.\n\nPour savoir exactement ce qui ne va pas, essayez de lancer `valet --version`. Valet n'est actuellement pas fonctionnel avec les dépendances installées. Habituellement, cela est dû à une incompatibilité de version : c'est-à-dire que les dépendances installées correspondent à une version de PHP plus récente que la version actuellement active.";
|
||||
|
||||
/// Cannot retrieve services
|
||||
"startup.errors.services_json_error.title" = "Impossible de déterminer l'état des services";
|
||||
"startup.errors.services_json_error.subtitle" = "PHP Monitor interroge habituellement `brew` en utilisant la commande suivante pour tester si les services peuvent être récupérés : `sudo brew services info nginx --json`.\n\n Le moniteur PHP n'a pas pu interpréter cette réponse.";
|
||||
"startup.errors.services_json_error.desc" = "Cela peut arriver si votre installation Homebrew n'est pas à jour, auquel cas Homebrew ne renverra pas encore de JSON. Vous pouvez généralement corriger cela en lançant `brew update` ou `brew tap homebrew/services`. Vous pouvez aussi essayer de lancer `sudo brew services info nginx --json` dans le terminal de votre choix.";
|
||||
|
||||
/// Issue with `which` alias
|
||||
"startup.errors.which_alias_issue.title" = "Un problème de configuration a été détecté";
|
||||
"startup.errors.which_alias_issue.subtitle" = "Il semble qu'il y ait un fichier dans `/usr/local/bin/which`. Ceci est généralement mis en place par NodeJS, mais `node` n'est pas dans le PATH de `/usr/local/bin`. Pour corriger cela, continuez à lire.";
|
||||
"startup.errors.which_alias_issue.desc" = "Vous devrez faire un lien symbolique entre `node` et le répertoire `/usr/local/bin` pour vous assurer que PHP Monitor peut démarrer avec succès. Pour plus d'informations, voir : https://github.com/nicoverbruggen/phpmon/issues/174";
|
||||
|
||||
/// Laravel Herd conflicts
|
||||
"startup.errors.herd_running.title" = "Laravel Herd semble être lancé";
|
||||
"startup.errors.herd_running.subtitle" = "Il semble que Laravel Herd soit en cours d'exécution. La configuration de Valet intégrée à Herd peut entrer en conflit avec votre installation habituelle de Valet, veuillez donc quitter Herd avant de continuer. (Vous pouvez parfaitement mélanger l'utilisation de Herd et de Valet mais vous ne devez pas utiliser les deux en même temps).";
|
||||
"startup.errors.herd_running.desc" = "Vous pouvez également constater que l'alias `php` ajouté par Herd à votre $PATH peut empêcher l'alias `php` de PHP Monitor de fonctionner, alors gardez cela à l'esprit. Vous pouvez vérifier `~/.zshrc` et voir ce que Herd a ajouté à votre $PATH.";
|
||||
|
||||
// Warning about a different PHP version linked than last time
|
||||
"startup.version_mismatch.title" = "Votre version active de PHP a changé.";
|
||||
"startup.version_mismatch.subtitle" = "Depuis la dernière activation du moniteur PHP, la version PHP liée a été modifiée pour PHP %@. Souhaitez-vous revenir à PHP %@, ou souhaitez-vous continuer à utiliser la version actuelle ?";
|
||||
"startup.version_mismatch.desc" = "PHP Monitor surveille la version de PHP qui est liée globalement. La version globale peut avoir été changée à cause d'un autre programme ou Homebrew peut avoir lié une formule différente après les mises à jour.";
|
||||
"startup.version_mismatch.button_switch_back" = "Revenir à PHP %@";
|
||||
"startup.version_mismatch.button_stay" = "Continuer à utiliser PHP %@";
|
||||
|
||||
// Warning about unsupported PHP versions
|
||||
"startup.unsupported_versions_explanation.title" = "Installation(s) PHP non supportée(s) par Valet détectée(s) !";
|
||||
"startup.unsupported_versions_explanation.subtitle" = "Les versions suivantes de PHP sont installées sur votre système mais ne sont pas supportées par cette version de Valet.
|
||||
|
||||
%@
|
||||
|
||||
Valet risque de ne pas fonctionner si vous liez ces versions de PHP, c'est pourquoi PHP Monitor ne vous laissera pas passer à ces versions.";
|
||||
"startup.unsupported_versions_explanation.desc" = "Si vous avez besoin de la prise en charge de versions plus anciennes de PHP, vous devrez peut-être passer à une version plus ancienne de Valet. Sinon, il peut être judicieux de désinstaller toutes les versions obsolètes qui ne sont pas utilisées. Il se peut également que cette version de Valet soit trop ancienne. Ce message ne disparaîtra qu'après le redémarrage de PHP Monitor.";
|
||||
|
||||
// Sponsor encouragement
|
||||
"startup.sponsor_encouragement.title" = "Si PHP Monitor vous a été utile, à vous ou à votre entreprise, n'hésitez pas à laisser un \"tip\".";
|
||||
"startup.sponsor_encouragement.subtitle" = "Pour être 100% transparent : je prévois de garder PHP Monitor open source et gratuit. Votre soutien rend cette décision très facile.\n\n - (Vous ne verrez cette annonce qu'une seule fois.)";
|
||||
"startup.sponsor_encouragement.desc" = "Si vous avez déjà fait un don, c'est grâce à VOUS que l'application a pu bénéficier de toutes ces mises à jour. Dans ce cas, ceci est un message de remerciement pour vous. J'apprécie votre soutien.";
|
||||
|
||||
"startup.sponsor_encouragement.accept" = "Sponsoriser Maintenant";
|
||||
"startup.sponsor_encouragement.learn_more" = "En Apprendre Plus";
|
||||
"startup.sponsor_encouragement.skip" = "Non Merci";
|
||||
|
||||
// ERROR MESSAGES (based on AlertableError)
|
||||
|
||||
"alert.errors.homebrew_permissions.applescript_returned_nil.title" = "La restauration des permissions Homebrew a été annulée.";
|
||||
"alert.errors.homebrew_permissions.applescript_returned_nil.description" = "Le résultat du script exécuté pour ajuster les permissions est `nil`, ce qui signifie habituellement que vous n'avez pas accordé les permissions administratives à PHP Monitor.\n\nSi vous avez cliqué sur Annuler lors de l'invite d'authentification, c'est normal. Si vous vous êtes authentifié et que vous voyez toujours ce message, quelque chose a probablement échoué.";
|
||||
|
||||
"alert.key_service_not_running.title" = "En raison de problèmes avec les services Homebrew nécessaires, Valet ne fonctionne pas correctement pour le moment";
|
||||
"alert.key_service_not_running.subtitle" = "Pour que Valet fonctionne correctement, il faut qu'au moins trois services clés fonctionnent correctement.
|
||||
|
||||
PHP Monitor signale que ce n'est pas le cas. Vous pouvez essayer de résoudre ce problème en appuyant sur le bouton avec le 'X' dans le menu sous le service concerné pour (re)démarrer le service qui est actuellement inactif.";
|
||||
"alert.key_service_not_running.desc" = "Si le fait de cliquer sur le bouton situé sous le service ne fonctionne pas (c.-à-d. que la roulette apparaît mais affiche toujours un \"X\" au bout d'un certain temps), il se peut que vous deviez lancer Fix My Valet. Vous pouvez le faire via le menu First Aid > Fix My Valet.
|
||||
|
||||
Vous pouvez également utiliser `valet stop` et `valet start` dans le terminal, ce qui peut également résoudre le problème (comme alternative à Fix My Valet).
|
||||
|
||||
Pour un débogage plus approfondi, vous pouvez consulter le GitHub issue tracker, où d'autres personnes peuvent avoir eu des problèmes similaires. En tant que développeur, j'essaie de m'assurer que toutes les questions reçoivent une réponse :)";
|
||||
|
||||
"alert.key_service_has_error.title" = "En raison de problèmes avec les services Homebrew nécessaires, Valet ne fonctionne pas correctement pour le moment.";
|
||||
"alert.key_service_has_error.subtitle" = "Pour que Valet fonctionne correctement, il faut qu'au moins trois services clés fonctionnent correctement.
|
||||
|
||||
PHP Monitor signale que ce n'est pas le cas. Il semble que l'un des services concernés signale un état d'erreur, et je recommande donc de cliquer sur le 'E'.
|
||||
|
||||
PHP Monitor tentera de redémarrer le service, et s'il échoue (ce qui est probable), il proposera de localiser le fichier journal s'il existe, ce qui peut contenir des informations supplémentaires qui peuvent vous aider à déboguer le problème.";
|
||||
"alert.key_service_has_error.desc" = "Malheureusement, si un service signale une erreur, cela est souvent dû à une configuration invalide, qui peut être difficile à déboguer.
|
||||
|
||||
CONSEILS DE DÉPANNAGE
|
||||
|
||||
• Essayez de redémarrer le service et de vérifier le fichier log (s'il existe) en premier lieu. Vous pouvez demander à PHP Monitor de le faire en cliquant sur le bouton 'E'.
|
||||
|
||||
• PHP : Si vous voyez un statut d'erreur, il se peut qu'il y ait un problème avec la configuration de PHP. Assurez-vous que les fichiers .ini de l'installation Homebrew sont corrects et qu'il n'y a pas de conflit concernant les sockets.
|
||||
|
||||
• nginx : Si vous obtenez un statut d'erreur, il est probable qu'un site soit mal configuré (ce qui est généralement indiqué dans le log d'erreur). Vous voudrez probablement vérifier le dossier nginx de Valet.
|
||||
|
||||
• dnsmasq: Si vous obtenez une erreur, le fichier de configuration de dnsmasq est probablement endommagé (il se trouve généralement dans ~/.config/valet/dnsmasq.d).";
|
||||
|
||||
// CHECK FOR UPDATES
|
||||
|
||||
"updater.alerts.newer_version_available.title" = "PHP Monitor v%@ est maintenant disponible !";
|
||||
"updater.alerts.newer_version_available.subtitle" = "Il est fortement recommandé de maintenir PHP Monitor à jour, car les nouvelles versions corrigent généralement les bogues et incluent des correctifs pour prendre en charge les dernières versions de Valet et de PHP.";
|
||||
"updater.installation_source.brew" = "La méthode recommandée pour installer les mises à jour de PHP Monitor est d'appuyer simplement sur “Install Update” (Installer la mise à jour). \n\nComme vous avez utilisé Homebrew pour installer l'application, vous pouvez également effectuer la mise à jour via le terminal en exécutant `%@`, mais cela n'est pas recommandé. \n\n(Veuillez noter que l'installation via cette mise à jour intégrée supprimera PHP Monitor du répertoire Caskroom de Homebrew, afin d'éviter que des mises à jour en double ne soient téléchargées et ne causent des problèmes potentiels plus tard).";
|
||||
"updater.installation_source.direct" = "La méthode recommandée pour installer les mises à jour de PHP Monitor est de cliquer simplement sur 'Installer la mise à jour'.";
|
||||
"updater.alerts.buttons.release_notes" = "Voir les notes de mise à jour";
|
||||
|
||||
"updater.alerts.is_latest_version.title" = "PHP Monitor est à jour !";
|
||||
"updater.alerts.is_latest_version.subtitle" = "La version actuellement installée (v%@) est à jour. Il n'y a pas de version plus récente disponible.";
|
||||
|
||||
"updater.alerts.cannot_check_for_update.title" = "PHP Monitor n'a pas pu déterminer si une version plus récente est disponible.";
|
||||
"updater.alerts.cannot_check_for_update.subtitle" = "Il se peut que vous ne soyez pas connecté à l'internet, que vous bloquiez le trafic ou que GitHub soit en panne et ne vous permette pas de vérifier les mises à jour. Si vous continuez à voir ce message, vous pouvez vérifier manuellement la page des versions.";
|
||||
"updater.alerts.cannot_check_for_update.description" = "La version actuellement installée est : %@. Vous pouvez accéder à la liste des dernières versions (sur GitHub) en cliquant sur le bouton à gauche.";
|
||||
"updater.alerts.buttons.releases_on_github" = "Voir les versions";
|
||||
"updater.alerts.buttons.install" = "Installer la mise à jour";
|
||||
"updater.alerts.buttons.dismiss" = "Annuler";
|
||||
|
||||
// WARNINGS ABOUT NON-DEFAULT TLD
|
||||
|
||||
"alert.warnings.tld_issue.title" = "Vous n'utilisez pas `.test` comme TLD pour Valet.";
|
||||
"alert.warnings.tld_issue.subtitle" = "L'utilisation d'un TLD autre que celui par défaut peut ne pas fonctionner correctement et n'est pas officiellement pris en charge.";
|
||||
"alert.warnings.tld_issue.description" = "PHP Monitor restera fonctionnel, mais il pourrait y avoir des problèmes : l'application pourrait ne pas montrer correctement quels domaines ont été sécurisés. Pour des résultats optimaux, allez dans votre fichier de configuration Valet (config.json dans le répertoire Valet) et changez le TLD en `test`.";
|
||||
"alert.do_not_tell_again" = "Ne m'en Parlez Plus";
|
||||
|
||||
// WARNINGS
|
||||
|
||||
"warnings.limits_error.title" = "PHP Monitor n'a pas pu obtenir les limites.";
|
||||
"warnings.limits_error.steps" = "Essayez de lancer 'php -v' dans votre terminal.";
|
||||
|
||||
"warnings.title" = "PHP Doctor";
|
||||
"warnings.description" = "**PHP Doctor** vous proposera des améliorations de la configuration de votre système.";
|
||||
"warnings.disclaimer" = "Vous pouvez choisir de masquer toutes les recommandations dans le menu PHP Monitor des préférences, mais il est recommandé de traiter tous les points pouvant être améliorés.";
|
||||
"warnings.refresh.button" = "Scanner à nouveau";
|
||||
"warnings.refresh.button.description" = "Appuyez sur ce bouton une fois que vous avez corrigé un problème. PHP Monitor va alors réévaluer votre environnement. Si le problème est vraiment corrigé, la recommandation devrait disparaître.";
|
||||
|
||||
"warnings.helper_permissions.title" = "Les programmes d'aide du PHP Monitor ne sont pas disponibles pour le moment.";
|
||||
"warnings.helper_permissions.description" = "Le PHP Monitor est livré avec plusieurs scripts auxiliaires. L'utilisation de ces scripts vous permet d'invoquer facilement une version spécifique de PHP sans changer la version de PHP liée.";
|
||||
"warnings.helper_permissions.unavailable" = "Cependant, ces aides sont potentiellement *indisponibles* parce que PHP Monitor ne peut pas créer ou mettre à jour les liens symboliques requis.";
|
||||
"warnings.helper_permissions.symlink" = "Si vous ne souhaitez pas rendre `/usr/local/bin` accessible en écriture, vous pouvez ajouter le répertoire d'aide de PHP Monitor à votre variable `PATH` pour faire disparaître cet avertissement. (Cliquez sur “En savoir plus” pour savoir comment résoudre ce problème).";
|
||||
|
||||
"warnings.arm_compatibility.title" = "Vous exécutez PHP Monitor en utilisant Rosetta sur Apple Silicon, ce qui signifie que votre environnement PHP est également exécuté via Rosetta.";
|
||||
"warnings.arm_compatibility.description" = "Vous semblez utiliser une version compatible ARM de macOS, mais vous exécutez PHP Monitor en utilisant Rosetta. Bien que cela fonctionne correctement, il est recommandé d'utiliser la version native de Homebrew.";
|
||||
|
||||
"warnings.files_missing.title" = "Des fichiers de configuration importants sont absents de votre installation PHP.";
|
||||
"warnings.files_missing.description" = "Les fichiers de configuration clés suivants doivent exister à la suite de l'installation de PHP :
|
||||
|
||||
• %@
|
||||
|
||||
Lorsque des fichiers de ce type sont manquants, vous devriez passer à la version de PHP associée à ces fichiers : cela peut résoudre le problème. Si cela ne résout pas le problème, il est recommandé de réinstaller la (les) version(s) PHP appropriée(s) via Homebrew, ce qui devrait restaurer les fichiers de configuration manquants. Les fichiers de configuration manquants peuvent être la raison pour laquelle vous obtenez des erreurs '502 Bad Gateway', même après avoir exécuté Fix My Valet (si vous utilisez Valet).";
|
||||
|
||||
"warnings.none" = "Il n'y a pas de recommandations disponibles pour vous en ce moment. Tout est parfait !";
|
||||
|
||||
// ONBOARDING
|
||||
|
||||
"onboarding.title" = "Visite d'Accueil";
|
||||
"onboarding.welcome" = "Bienvenue sur PHP Monitor !";
|
||||
"onboarding.explore" = "Vous avez maintenant accès à l'ensemble des fonctionnalités de PHP Monitor. Vous pouvez en apprendre davantage sur certaines des fonctionnalités offertes par PHP Monitor en consultant cet écran.";
|
||||
"onboarding.explore.lite" = "Vous avez maintenant accès aux fonctionnalités les plus importantes de PHP Monitor.
|
||||
Veuillez noter que certaines fonctionnalités (grisées ci-dessous) sont actuellement indisponibles car Laravel Valet n'est pas actif.";
|
||||
"onboarding.tour.menu_bar.title" = "Le Pouvoir dans votre Barre de Menu";
|
||||
"onboarding.tour.menu_bar" = "PHP Monitor se trouve dans votre barre de menu. À partir de ce menu, vous pouvez accéder à la plupart des fonctionnalités clés de PHP Monitor, y compris le changement de la version globale de PHP, la localisation des fichiers de configuration, l'installation de différentes versions de PHP, et plus encore.";
|
||||
"onboarding.tour.faq_hint" = "**Questions?** Je vous recommande de lire le [README](https://github.com/nicoverbruggen/phpmon/blob/main/README.md) sur GitHub: il contient une FAQ complète avec divers conseils et des questions et réponses courantes.";
|
||||
"onboarding.tour.services.title" = "Gérer les services Homebrew";
|
||||
"onboarding.tour.services" = "Une fois que vous avez cliqué sur l'icône de la barre de menu, vous pouvez voir d'un coup d'œil si tous les services Homebrew sont opérationnels, en vous basant sur les coches ou les croix. Vous pouvez également cliquer sur un service pour le basculer rapidement.";
|
||||
"onboarding.tour.domains.title" = "Gérer les Domaines";
|
||||
"onboarding.tour.domains" = "En ouvrant la fenêtre Domaines via la barre de menu, vous pouvez voir quels domaines sont liés et parqués, ainsi que les proxys nginx actifs.";
|
||||
"onboarding.tour.isolation.title" = "Isoler les Domaines";
|
||||
"onboarding.tour.isolation" = "Si vous avez installé Valet 3 ou une version plus récente, vous pouvez même utiliser l'isolation de domaine en faisant un clic droit sur un domaine donné dans la fenêtre Domaines. Cela vous permet de choisir une version spécifique de PHP à utiliser pour ce domaine, et ce domaine seulement.";
|
||||
"onboarding.tour.feature_unavailable" = "Cette fonctionnalité n'est actuellement pas disponible et nécessite l'installation de Laravel Valet.";
|
||||
"onboarding.tour.once" = "Vous ne verrez la visite de bienvenue qu'une seule fois. Vous pouvez rouvrir la visite de bienvenue ultérieurement via l'icône de la barre de menu (disponible dans le menu, sous Premiers Secours et Services).";
|
||||
"onboarding.tour.close" = "Fermer la Visite d'Accueil";
|
790
phpmon/nl.lproj/Localizable.strings
Normal file
790
phpmon/nl.lproj/Localizable.strings
Normal file
@ -0,0 +1,790 @@
|
||||
// MENU ITEMS (MI)
|
||||
|
||||
"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";
|
||||
"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" = "Heeft u problemen met permissions wanneer u `brew upgrade` gebruikt? PHP Monitor kan u helpen!";
|
||||
|
||||
"mi_php_refresh" = "Vernieuwen";
|
||||
|
||||
"mi_configuration" = "PHP configuratie";
|
||||
"mi_limits" = "Configureer limieten";
|
||||
"mi_memory_limit" = "Geheugenlimiet";
|
||||
"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" = "Globale Composer update...";
|
||||
"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 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, 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.";
|
||||
"phpman.version.automatic_upgrade" = "Deze versie zal automatisch geïnstalleerd worden door een upgrade.";
|
||||
"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 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 u zult altijd alle installaties tegelijk upgraden.)";
|
||||
"phpman.has_updates.button" = "Alles bijwerken";
|
||||
|
||||
"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 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 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 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!";
|
||||
"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 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. 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. 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 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...";
|
||||
"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" = "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
|
||||
|
||||
"generic.ok" = "OK";
|
||||
"generic.cancel" = "Annuleren";
|
||||
"generic.retry" = "Opnieuw";
|
||||
"generic.notice" = "Opmerking";
|
||||
|
||||
// PRESET LOADING
|
||||
|
||||
"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 u meer informatie over deze functie kunt vinden, inclusief een voorbeeld.";
|
||||
|
||||
// MENU ITEMS (if window is open)
|
||||
|
||||
"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" = "Domeinen";
|
||||
"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 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 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 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 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 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";
|
||||
"domain_list.columns.active" = "Actief";
|
||||
"domain_list.columns.kind" = "Type";
|
||||
"domain_list.columns.project_type" = "Projecttype";
|
||||
|
||||
// CHOOSE WHAT TO ADD
|
||||
|
||||
"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";
|
||||
|
||||
// ADD PROXY TO DOMAINS LIST
|
||||
|
||||
"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: %@://%@.%@.
|
||||
|
||||
(!) 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.\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: %@://%@.%@";
|
||||
|
||||
"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" = "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 u wilt koppelen.";
|
||||
|
||||
// SITE LIST ACTIONS
|
||||
|
||||
"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" = "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";
|
||||
"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 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 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.";
|
||||
|
||||
"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.secure" = "TLS";
|
||||
"domain_list.columns.domain" = "Domein";
|
||||
"domain_list.columns.php" = "PHP";
|
||||
"domain_list.columns.type" = "Type";
|
||||
"domain_list.columns.kind" = "Soort";
|
||||
|
||||
// DRIVERS
|
||||
|
||||
"driver.not_detected" = "Andere";
|
||||
|
||||
// PRESET
|
||||
|
||||
"preset.extension" = "%i extensie";
|
||||
"preset.extensions" = "%i extensies";
|
||||
"preset.preference" = "%i voorkeur";
|
||||
"preset.preferences" = "%i voorkeuren";
|
||||
|
||||
// EDITORS
|
||||
|
||||
"editors.alert.try_again" = "Probeer opnieuw";
|
||||
"editors.alert.cancel" = "Annuleren";
|
||||
|
||||
// PREFERENCES
|
||||
|
||||
"prefs.title" = "PHP Monitor";
|
||||
"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" = "Informatie:";
|
||||
"prefs.services" = "Services:";
|
||||
"prefs.switcher" = "Switcher:";
|
||||
"prefs.php_doctor" = "PHP Doctor:";
|
||||
"prefs.integrations" = "Integraties:";
|
||||
"prefs.updates" = "Updates:";
|
||||
"prefs.notifications" = "Meldingen:";
|
||||
"prefs.warnings" = "Waarschuwingen:";
|
||||
"prefs.menu_contents" = "Functies in menu:";
|
||||
"prefs.startup" = "Opstarten:";
|
||||
|
||||
"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 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 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 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 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 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 u een melding als dat het geval is.";
|
||||
|
||||
"prefs.php_doctor_suggestions_title" = "Altijd suggesties tonen";
|
||||
"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" = "<wachten op toetsaanslag>";
|
||||
"prefs.shortcut_clear" = "Wissen";
|
||||
"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" = "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" = "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" = "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" = "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" = "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" = "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 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.";
|
||||
"prefs.display_global_version_switcher" = "PHP switcher";
|
||||
|
||||
"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" = "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" = "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" = "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" = "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" = "Indien uitgeschakeld, kunt u extensies niet gemakkelijk in- of uitschakelen via het hoofdmenu.";
|
||||
"prefs.display_extensions" = "Extensies";
|
||||
|
||||
"prefs.display_presets_desc" = "Indien uitgeschakeld, kunt u geen PHP presets toepassen of ongedaan maken.";
|
||||
"prefs.display_presets" = "Presets";
|
||||
|
||||
"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 %@ nu actief";
|
||||
"notification.version_changed_desc" = "PHP Monitor is overgeschakeld naar PHP %@.";
|
||||
|
||||
"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 gestopt";
|
||||
"notification.services_stopped_desc" = "Alle services zijn succesvol gestopt.";
|
||||
|
||||
"notification.services_restarted" = "Valet-services herstart";
|
||||
"notification.services_restarted_desc" = "Alle services zijn succesvol herstart.";
|
||||
|
||||
"notification.preset_applied_title" = "Preset toegepast";
|
||||
"notification.preset_applied_desc" = "De preset '%@' is succesvol toegepast.";
|
||||
|
||||
"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 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 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`
|
||||
|
||||
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" = "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" = "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 is klaar met bijwerken!";
|
||||
"alert.composer_success.info" = "Uw globale Composer-afhankelijkheden zijn succesvol bijgewerkt.";
|
||||
|
||||
// Composer Version
|
||||
|
||||
"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" = "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" = "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" = "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 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" = "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" = "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" = "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 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" = "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" = "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 %@.
|
||||
|
||||
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.
|
||||
|
||||
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" = "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" = "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" = "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" = "Bekijk foutenlogboek";
|
||||
"alert.service_error.button.close" = "Sluiten";
|
||||
|
||||
// Composer issues
|
||||
"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" = "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
|
||||
|
||||
/// 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 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 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 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 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 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" = "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" = "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.
|
||||
|
||||
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" = "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 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 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 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" = "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" = "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";
|
||||
|
||||
/// Laravel Herd conflicts
|
||||
"startup.errors.herd_running.title" = "Laravel Herd lijkt actief te zijn";
|
||||
"startup.errors.herd_running.subtitle" = "Het lijkt erop dat Laravel Herd momenteel actief is. De ingebouwde Valet-configuratie van Herd kan conflicteren met je reguliere Valet-installatie, dus sluit Herd af voordat je verdergaat. (Je kunt perfect gebruik maken van zowel Herd als reguliere Valet, maar je moet ze niet tegelijkertijd uitvoeren.)";
|
||||
"startup.errors.herd_running.desc" = "Je kan ook merken dat de `php`-alias die Herd aan je $PATH heeft toegevoegd, niet werkt met de aliases van PHP Monitor, dus hou daar rekening mee. Je kunt `~/.zshrc` bekijken om te zien wat Herd aan je $PATH heeft toegevoegd.";
|
||||
|
||||
// Warning about a different PHP version linked than last time
|
||||
"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" = "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 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" = "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" = "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" = "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" = "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 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.
|
||||
|
||||
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).
|
||||
|
||||
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" = "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 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 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.
|
||||
|
||||
VEELVOORKOMENDE PROBLEEMOPLOSSINGSTIPS
|
||||
|
||||
• 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: 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: 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: 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 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" = "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 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" = "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.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.";
|
||||
"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" = "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" = "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" = "Uw PHP-installatie mist belangrijke vereiste configuratiebestanden.";
|
||||
"warnings.files_missing.description" = "De volgende belangrijke configuratiebestanden zouden moeten bestaan na het installeren van PHP:
|
||||
|
||||
• %@
|
||||
|
||||
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" = "Er zijn momenteel geen aanbevelingen beschikbaar. Alles is in orde!";
|
||||
|
||||
// ONBOARDING
|
||||
|
||||
"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";
|
787
phpmon/pt-PT.lproj/Localizable.strings
Normal file
787
phpmon/pt-PT.lproj/Localizable.strings
Normal file
@ -0,0 +1,787 @@
|
||||
// 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.version.automatic_upgrade" = "Esta versão será instalada automaticamente ao atualizar uma versão mais antiga.";
|
||||
"phpman.buttons.uninstall" = "Desinstalar";
|
||||
"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.";
|
||||
"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" = "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";
|
||||
"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" = "<a aguardar tecla>";
|
||||
"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";
|
||||
|
||||
// Laravel Herd conflicts
|
||||
"startup.errors.herd_running.title" = "O Laravel Herd parece estar em execução";
|
||||
"startup.errors.herd_running.subtitle" = "Parece que o Laravel Herd está atualmente em execução. A configuração integrada do Valet do Herd pode entrar em conflito com a sua instalação regular do Valet. Por favor, encerre o Herd antes de continuar. (Você pode combinar perfeitamente o uso do Herd e do Valet regular, mas não deve executar ambos ao mesmo tempo.)";
|
||||
"startup.errors.herd_running.desc" = "Você também pode perceber que o alias `php` adicionado pelo Herd ao seu $PATH pode impedir o aliasing do PHP Monitor como `php`, então tenha isso em mente. Você pode verificar o arquivo `~/.zshrc` para ver o que o Herd adicionou ao seu $PATH.";
|
||||
|
||||
// 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";
|
784
phpmon/vi.lproj/Localizable.strings
Normal file
784
phpmon/vi.lproj/Localizable.strings
Normal file
@ -0,0 +1,784 @@
|
||||
// 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.version.automatic_upgrade" = "Phiên bản này sẽ được cài đặt tự động bằng cách nâng cấp từ một phiên bản cũ hơn.";
|
||||
"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.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.";
|
||||
"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 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
|
||||
|
||||
"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" = "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";
|
||||
"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.secure" = "TLS";
|
||||
"domain_list.columns.domain" = "Tên miền";
|
||||
"domain_list.columns.active" = "Kích hoạt";
|
||||
"domain_list.columns.kind" = "Loại";
|
||||
"domain_list.columns.project_type" = "Loại dự án";
|
||||
|
||||
// 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.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:";
|
||||
"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";
|
||||
|
||||
/// Laravel Herd conflicts
|
||||
"startup.errors.herd_running.title" = "Có vẻ như Laravel Herd đang chạy";
|
||||
"startup.errors.herd_running.subtitle" = "Có vẻ như Laravel Herd hiện đang chạy. Cài đặt Valet tích hợp của Herd có thể xung đột với cài đặt Valet thông thường của bạn, vì vậy hãy thoát Herd trước khi tiếp tục. (Bạn có thể hoàn toàn kết hợp sử dụng Herd và Valet thông thường nhưng bạn không nên chạy cả hai cùng một lúc.)";
|
||||
"startup.errors.herd_running.desc" = "Bạn cũng có thể thấy rằng bí danh `php` mà Herd thêm vào $PATH của bạn có thể ngăn chặn việc đặt bí danh `php` cho PHP Monitor hoạt động, vì vậy hãy lưu ý điều đó. Bạn có thể kiểm tra tệp `~/.zshrc` và xem Herd đã thêm gì vào $PATH của bạn.";
|
||||
|
||||
// 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.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.";
|
||||
"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";
|
@ -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'
|
||||
|
||||
@ -161,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",
|
||||
@ -174,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)
|
||||
]
|
||||
|
@ -27,22 +27,23 @@ final class DomainsListTest: UITestCase {
|
||||
|
||||
app.menuItems["mi_domain_list".localized].click()
|
||||
|
||||
let window = app.windows.allElementsBoundByIndex.first { element in
|
||||
element.title == "domain_list.title".localized
|
||||
}!
|
||||
let window = app.windows.element(boundBy: 0)
|
||||
XCTAssertEqual(window.title, "domain_list.title".localized)
|
||||
|
||||
let searchField = window.searchFields.firstMatch
|
||||
let searchField = window.searchFields.element(boundBy: 0)
|
||||
|
||||
searchField.click()
|
||||
searchField.typeText("non-existent thing")
|
||||
Thread.sleep(forTimeInterval: 0.2)
|
||||
XCTAssertTrue(window.tables.tableRows.count == 0)
|
||||
|
||||
searchField.clearText()
|
||||
searchField.click()
|
||||
searchField.typeText("concord")
|
||||
Thread.sleep(forTimeInterval: 0.2)
|
||||
XCTAssertTrue(window.tables.tableRows.count == 1)
|
||||
|
||||
sleep(2)
|
||||
sleep(1)
|
||||
}
|
||||
|
||||
final func test_can_tap_add_domain_button() throws {
|
||||
@ -50,9 +51,8 @@ final class DomainsListTest: UITestCase {
|
||||
|
||||
app.menuItems["mi_domain_list".localized].click()
|
||||
|
||||
let window = app.windows.allElementsBoundByIndex.first { element in
|
||||
element.title == "domain_list.title".localized
|
||||
}!
|
||||
let window = app.windows.element(boundBy: 0)
|
||||
XCTAssertEqual(window.title, "domain_list.title".localized)
|
||||
|
||||
window.buttons["Add Link"].click()
|
||||
|
||||
@ -61,6 +61,6 @@ final class DomainsListTest: UITestCase {
|
||||
assertExists(app.buttons["selection.create_proxy".localized])
|
||||
assertExists(app.buttons["selection.cancel".localized])
|
||||
|
||||
sleep(2)
|
||||
sleep(1)
|
||||
}
|
||||
}
|
||||
|
@ -58,6 +58,8 @@ final class MainMenuTest: UITestCase {
|
||||
let app = launch(openMenu: true)
|
||||
app.mainMenuItem(withText: "mi_preferences".localized).click()
|
||||
|
||||
Thread.sleep(forTimeInterval: 0.5)
|
||||
|
||||
assertExists(app.buttons["General"])
|
||||
click(app.buttons["General"])
|
||||
|
||||
@ -71,6 +73,32 @@ 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 and PHP 8.3
|
||||
assertExists(app.staticTexts["PHP 8.2"], 5)
|
||||
assertExists(app.staticTexts["PHP 8.3"])
|
||||
|
||||
// Should also display pre-release version
|
||||
assertExists(app.staticTexts["PHP 8.4"])
|
||||
assertExists(app.staticTexts["phpman.version.prerelease".localized.uppercased()])
|
||||
assertExists(app.staticTexts["phpman.version.available_for_installation".localized])
|
||||
|
||||
// But not PHP 8.5 (yet)
|
||||
assertNotExists(app.staticTexts["PHP 8.5"])
|
||||
|
||||
// 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()
|
||||
|
@ -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'
|
||||
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user