Merge branch 'release/v3.5.0' into production

This commit is contained in:
TimZ99 2020-05-01 02:36:41 +02:00
commit 5e4413bb2e
No known key found for this signature in database
GPG Key ID: 4D8268DC68E8339D
135 changed files with 18883 additions and 15648 deletions

12
.github/FUNDING.yml vendored Normal file
View File

@ -0,0 +1,12 @@
# These are supported funding model platforms
github: TimZ99
patreon: # Replace with a single Patreon username
open_collective: # Replace with a single Open Collective username
ko_fi: # Replace with a single Ko-fi username
tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
liberapay: # Replace with a single Liberapay username
issuehunt: # Replace with a single IssueHunt username
otechie: # Replace with a single Otechie username
custom: ["https://www.paypal.me/TimZandbergen99", "https://bunq.me/t"]

31
.github/ISSUE_TEMPLATE/bug_report.md vendored Normal file
View File

@ -0,0 +1,31 @@
---
name: Bug report
about: Create a report to help us improve
title: "[BUG] "
labels: 'Type: bug'
assignees: ''
---
**Describe the bug**
A clear and concise description of what the bug is.
**To Reproduce**
Steps to reproduce the behavior:
1. Go to '...'
2. Click on '....'
3. Scroll down to '....'
4. See error
**Expected behavior**
A clear and concise description of what you expected to happen.
**Screenshots**
If applicable, add screenshots to help explain your problem.
**Version (please complete the following information):**
- Version [e.g. 3.3.5]
- PHP [e.g. 7.3]
**Additional context**
Add any other context about the problem here.

View File

@ -0,0 +1,20 @@
---
name: Feature request
about: Suggest an idea for this project
title: "[Feature Request]"
labels: 'Type: Feature'
assignees: ''
---
**Is your feature request related to a problem? Please describe.**
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
**Describe the solution you'd like**
A clear and concise description of what you want to happen.
**Describe alternatives you've considered**
A clear and concise description of any alternative solutions or features you've considered.
**Additional context**
Add any other context or screenshots about the feature request here.

19
.github/ISSUE_TEMPLATE/question.md vendored Normal file
View File

@ -0,0 +1,19 @@
---
name: Question
about: Ask your questions
title: "[Question] "
labels: 'Type: Question'
assignees: ''
---
- [ ] Looked at the documentation first
**Describe the question**
**Version (please complete the following information):**
- Version [e.g. 3.3.5]
- PHP [e.g. 7.3]
**Additional context**
Add any other context about the problem here.

3
.gitignore vendored
View File

@ -9,3 +9,6 @@
/puphpet/files/dot/ssh/ /puphpet/files/dot/ssh/
*.bak *.bak
__MACOSX/ __MACOSX/
.DS_Store
.buildpath
.settings/

View File

@ -6,6 +6,11 @@ Not yet released
---------------- ----------------
\- \-
v3.5.0 (released May 1, 2020)
-----------------------------
* See https://github.com/phpservermon/phpservermon/compare/v3.4.5...v3.5.0
v3.4.5 (released September 30, 2019) v3.4.5 (released September 30, 2019)
------------------------------------ ------------------------------------

0
Makefile Executable file → Normal file
View File

8
README.rst Executable file → Normal file
View File

@ -5,7 +5,7 @@ PHP Server Monitor
:alt: Join the chat at https://gitter.im/erickrf/nlpnet :alt: Join the chat at https://gitter.im/erickrf/nlpnet
:target: https://gitter.im/phpservermon/phpservermon :target: https://gitter.im/phpservermon/phpservermon
Version 3.4.5 Version 3.5.0
PHP Server Monitor is a script that checks whether your websites and servers are up and running. PHP Server Monitor is a script that checks whether your websites and servers are up and running.
It comes with a web based user interface where you can manage your services and websites, It comes with a web based user interface where you can manage your services and websites,
@ -16,7 +16,7 @@ Features:
--------- ---------
* Monitor services and websites (see below). * Monitor services and websites (see below).
* Email, SMS, Pushover, Telegram notifications. * Email, SMS, Pushover, Telegram and Jabber notifications.
* View history graphs of uptime and latency. * View history graphs of uptime and latency.
* User authentication with 2 levels (administrator and regular user). * User authentication with 2 levels (administrator and regular user).
* Logs of connection errors, outgoing emails and text messages. * Logs of connection errors, outgoing emails and text messages.
@ -39,7 +39,7 @@ There are two different ways to monitor a server:
In both cases the script will return a "status offline", and will start sending out notifications. In both cases the script will return a "status offline", and will start sending out notifications.
Each server has its own settings regarding notification. Each server has its own settings regarding notification.
You can choose for email, text message (SMS), Pushover.net and Telegram notifications. You can choose for email, text message (SMS), Pushover.net, Telegram and Jabber notifications.
The following SMS gateways are currently available: The following SMS gateways are currently available:
* Clickatell - <https://www.clickatell.com> * Clickatell - <https://www.clickatell.com>
@ -77,7 +77,7 @@ Requirements
* Web server * Web server
* MySQL database * MySQL database
* For PHP5: 5.5.9+ * For PHP5: 5.6.0+
* For PHP7: 7.0.8+ * For PHP7: 7.0.8+
* PHP cURL package * PHP cURL package
* PHP PDO mysql driver * PHP PDO mysql driver

7
composer.json Executable file → Normal file
View File

@ -12,11 +12,12 @@
"symfony/config": "~3.4", "symfony/config": "~3.4",
"symfony/dependency-injection": "~3.4", "symfony/dependency-injection": "~3.4",
"symfony/event-dispatcher": "~3.4", "symfony/event-dispatcher": "~3.4",
"symfony/http-foundation": "~3.4", "symfony/http-foundation": ">=3.4.35 ~3.4",
"symfony/filesystem": "~3.4", "symfony/filesystem": "~3.4",
"php-pushover/php-pushover": "dev-master", "php-pushover/php-pushover": "dev-master",
"paragonie/random_compat": "^2.0", "paragonie/random_compat": "^2.0",
"twig/twig": "~1.35" "twig/twig": "~1.35",
"jaxl/jaxl": "^3.1"
}, },
"autoload": { "autoload": {
"files": [ "files": [
@ -27,4 +28,4 @@
"psm\\": "src/psm/" "psm\\": "src/psm/"
} }
} }
} }

233
composer.lock generated
View File

@ -4,8 +4,81 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically" "This file is @generated automatically"
], ],
"content-hash": "308dce74ade38b2bb81a328232102134", "content-hash": "f78e950e2dfef7debe88d7b64e2b4aec",
"packages": [ "packages": [
{
"name": "jaxl/jaxl",
"version": "v3.1.0",
"source": {
"type": "git",
"url": "https://github.com/jaxl/JAXL.git",
"reference": "27aa43c4600b05809779428843d8d51db6ce6e0d"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/jaxl/JAXL/zipball/27aa43c4600b05809779428843d8d51db6ce6e0d",
"reference": "27aa43c4600b05809779428843d8d51db6ce6e0d",
"shasum": ""
},
"require": {
"ext-curl": "*",
"ext-hash": "*",
"ext-json": "*",
"ext-libxml": "*",
"ext-openssl": "*",
"ext-pcre": "*",
"ext-sockets": "*",
"php": ">=5.2.4"
},
"require-dev": {
"phpunit/phpunit": "^3.7.0",
"squizlabs/php_codesniffer": "*"
},
"suggest": {
"ext-pcntl": "Interrupt JAXL with signals"
},
"bin": [
"jaxlctl"
],
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "3.1.x-dev"
}
},
"autoload": {
"classmap": [
"src/JAXL"
],
"exclude-from-classmap": [
"/tests/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"BSD-3-Clause"
],
"authors": [
{
"name": "Abhinavsingh",
"homepage": "https://abhinavsingh.com/"
}
],
"description": "Jaxl - Async, Non-Blocking, Event based Networking Library in PHP.",
"homepage": "http://jaxl.readthedocs.org/en/latest/index.html",
"keywords": [
"abhinavsingh",
"asynchronous",
"event loop",
"http",
"jabber",
"jaxl",
"non blocking",
"php",
"xmpp"
],
"time": "2016-09-13T01:59:35+00:00"
},
{ {
"name": "paragonie/random_compat", "name": "paragonie/random_compat",
"version": "v2.0.18", "version": "v2.0.18",
@ -61,12 +134,12 @@
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/cschalenborgh/php-pushover.git", "url": "https://github.com/cschalenborgh/php-pushover.git",
"reference": "620df1c6cf53061286ecde80e96bb402f2713c22" "reference": "b2d060efacf48e4c6821427691b19db0315ccedd"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/cschalenborgh/php-pushover/zipball/620df1c6cf53061286ecde80e96bb402f2713c22", "url": "https://api.github.com/repos/cschalenborgh/php-pushover/zipball/b2d060efacf48e4c6821427691b19db0315ccedd",
"reference": "620df1c6cf53061286ecde80e96bb402f2713c22", "reference": "b2d060efacf48e4c6821427691b19db0315ccedd",
"shasum": "" "shasum": ""
}, },
"type": "library", "type": "library",
@ -83,20 +156,20 @@
} }
], ],
"description": "PHP class for the Pushover.net project", "description": "PHP class for the Pushover.net project",
"time": "2017-08-29T22:04:56+00:00" "time": "2019-09-26T19:38:11+00:00"
}, },
{ {
"name": "phpmailer/phpmailer", "name": "phpmailer/phpmailer",
"version": "v6.0.7", "version": "v6.1.3",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/PHPMailer/PHPMailer.git", "url": "https://github.com/PHPMailer/PHPMailer.git",
"reference": "0c41a36d4508d470e376498c1c0c527aa36a2d59" "reference": "a25ae38e03de4ee4031725498a600012364787c7"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/0c41a36d4508d470e376498c1c0c527aa36a2d59", "url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/a25ae38e03de4ee4031725498a600012364787c7",
"reference": "0c41a36d4508d470e376498c1c0c527aa36a2d59", "reference": "a25ae38e03de4ee4031725498a600012364787c7",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -105,13 +178,9 @@
"php": ">=5.5.0" "php": ">=5.5.0"
}, },
"require-dev": { "require-dev": {
"doctrine/annotations": "1.2.*", "doctrine/annotations": "^1.2",
"friendsofphp/php-cs-fixer": "^2.2", "friendsofphp/php-cs-fixer": "^2.2",
"phpdocumentor/phpdocumentor": "2.*", "phpunit/phpunit": "^4.8 || ^5.7"
"phpunit/phpunit": "^4.8 || ^5.7",
"zendframework/zend-eventmanager": "3.0.*",
"zendframework/zend-i18n": "2.7.3",
"zendframework/zend-serializer": "2.7.*"
}, },
"suggest": { "suggest": {
"ext-mbstring": "Needed to send email in multibyte encoding charset", "ext-mbstring": "Needed to send email in multibyte encoding charset",
@ -129,17 +198,17 @@
}, },
"notification-url": "https://packagist.org/downloads/", "notification-url": "https://packagist.org/downloads/",
"license": [ "license": [
"LGPL-2.1" "LGPL-2.1-only"
], ],
"authors": [ "authors": [
{
"name": "Jim Jagielski",
"email": "jimjag@gmail.com"
},
{ {
"name": "Marcus Bointon", "name": "Marcus Bointon",
"email": "phpmailer@synchromedia.co.uk" "email": "phpmailer@synchromedia.co.uk"
}, },
{
"name": "Jim Jagielski",
"email": "jimjag@gmail.com"
},
{ {
"name": "Andy Prevost", "name": "Andy Prevost",
"email": "codeworxtech@users.sourceforge.net" "email": "codeworxtech@users.sourceforge.net"
@ -149,7 +218,7 @@
} }
], ],
"description": "PHPMailer is a full-featured email creation and transfer class for PHP", "description": "PHPMailer is a full-featured email creation and transfer class for PHP",
"time": "2019-02-01T15:04:28+00:00" "time": "2019-11-21T09:37:46+00:00"
}, },
{ {
"name": "psr/container", "name": "psr/container",
@ -202,16 +271,16 @@
}, },
{ {
"name": "symfony/config", "name": "symfony/config",
"version": "v3.4.27", "version": "v3.4.36",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/config.git", "url": "https://github.com/symfony/config.git",
"reference": "177a276c01575253c95cefe0866e3d1b57637fe0" "reference": "a599a867d0e4a07c342b5f1e656b3915a540ddbe"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/config/zipball/177a276c01575253c95cefe0866e3d1b57637fe0", "url": "https://api.github.com/repos/symfony/config/zipball/a599a867d0e4a07c342b5f1e656b3915a540ddbe",
"reference": "177a276c01575253c95cefe0866e3d1b57637fe0", "reference": "a599a867d0e4a07c342b5f1e656b3915a540ddbe",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -262,20 +331,20 @@
], ],
"description": "Symfony Config Component", "description": "Symfony Config Component",
"homepage": "https://symfony.com", "homepage": "https://symfony.com",
"time": "2019-02-23T15:06:07+00:00" "time": "2019-12-01T10:45:41+00:00"
}, },
{ {
"name": "symfony/dependency-injection", "name": "symfony/dependency-injection",
"version": "v3.4.27", "version": "v3.4.36",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/dependency-injection.git", "url": "https://github.com/symfony/dependency-injection.git",
"reference": "be0feb3fa202aedfd8d1956f2dafd563fb13acbf" "reference": "0d201916bfb3af939fec3c0c8815ea16c60ac1a2"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/dependency-injection/zipball/be0feb3fa202aedfd8d1956f2dafd563fb13acbf", "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/0d201916bfb3af939fec3c0c8815ea16c60ac1a2",
"reference": "be0feb3fa202aedfd8d1956f2dafd563fb13acbf", "reference": "0d201916bfb3af939fec3c0c8815ea16c60ac1a2",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -333,20 +402,20 @@
], ],
"description": "Symfony DependencyInjection Component", "description": "Symfony DependencyInjection Component",
"homepage": "https://symfony.com", "homepage": "https://symfony.com",
"time": "2019-04-20T15:32:49+00:00" "time": "2019-12-01T08:33:36+00:00"
}, },
{ {
"name": "symfony/event-dispatcher", "name": "symfony/event-dispatcher",
"version": "v3.4.27", "version": "v3.4.36",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/event-dispatcher.git", "url": "https://github.com/symfony/event-dispatcher.git",
"reference": "a088aafcefb4eef2520a290ed82e4374092a6dff" "reference": "f9031c22ec127d4a2450760f81a8677fe8a10177"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/a088aafcefb4eef2520a290ed82e4374092a6dff", "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/f9031c22ec127d4a2450760f81a8677fe8a10177",
"reference": "a088aafcefb4eef2520a290ed82e4374092a6dff", "reference": "f9031c22ec127d4a2450760f81a8677fe8a10177",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -396,20 +465,20 @@
], ],
"description": "Symfony EventDispatcher Component", "description": "Symfony EventDispatcher Component",
"homepage": "https://symfony.com", "homepage": "https://symfony.com",
"time": "2019-04-02T08:51:52+00:00" "time": "2019-10-24T15:33:53+00:00"
}, },
{ {
"name": "symfony/filesystem", "name": "symfony/filesystem",
"version": "v3.4.27", "version": "v3.4.36",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/filesystem.git", "url": "https://github.com/symfony/filesystem.git",
"reference": "acf99758b1df8e9295e6b85aa69f294565c9fedb" "reference": "00cdad0936d06fab136944bc2342b762b1c3a4a2"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/filesystem/zipball/acf99758b1df8e9295e6b85aa69f294565c9fedb", "url": "https://api.github.com/repos/symfony/filesystem/zipball/00cdad0936d06fab136944bc2342b762b1c3a4a2",
"reference": "acf99758b1df8e9295e6b85aa69f294565c9fedb", "reference": "00cdad0936d06fab136944bc2342b762b1c3a4a2",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -446,20 +515,20 @@
], ],
"description": "Symfony Filesystem Component", "description": "Symfony Filesystem Component",
"homepage": "https://symfony.com", "homepage": "https://symfony.com",
"time": "2019-02-04T21:34:32+00:00" "time": "2019-11-25T16:36:22+00:00"
}, },
{ {
"name": "symfony/http-foundation", "name": "symfony/http-foundation",
"version": "v3.4.27", "version": "v3.4.36",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/http-foundation.git", "url": "https://github.com/symfony/http-foundation.git",
"reference": "fa02215233be8de1c2b44617088192f9e8db3512" "reference": "d2d0cfe8e319d9df44c4cca570710fcf221d4593"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/http-foundation/zipball/fa02215233be8de1c2b44617088192f9e8db3512", "url": "https://api.github.com/repos/symfony/http-foundation/zipball/d2d0cfe8e319d9df44c4cca570710fcf221d4593",
"reference": "fa02215233be8de1c2b44617088192f9e8db3512", "reference": "d2d0cfe8e319d9df44c4cca570710fcf221d4593",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -500,20 +569,20 @@
], ],
"description": "Symfony HttpFoundation Component", "description": "Symfony HttpFoundation Component",
"homepage": "https://symfony.com", "homepage": "https://symfony.com",
"time": "2019-05-01T08:04:33+00:00" "time": "2019-11-28T12:52:59+00:00"
}, },
{ {
"name": "symfony/polyfill-ctype", "name": "symfony/polyfill-ctype",
"version": "v1.11.0", "version": "v1.13.1",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/polyfill-ctype.git", "url": "https://github.com/symfony/polyfill-ctype.git",
"reference": "82ebae02209c21113908c229e9883c419720738a" "reference": "f8f0b461be3385e56d6de3dbb5a0df24c0c275e3"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/82ebae02209c21113908c229e9883c419720738a", "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/f8f0b461be3385e56d6de3dbb5a0df24c0c275e3",
"reference": "82ebae02209c21113908c229e9883c419720738a", "reference": "f8f0b461be3385e56d6de3dbb5a0df24c0c275e3",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -525,7 +594,7 @@
"type": "library", "type": "library",
"extra": { "extra": {
"branch-alias": { "branch-alias": {
"dev-master": "1.11-dev" "dev-master": "1.13-dev"
} }
}, },
"autoload": { "autoload": {
@ -541,13 +610,13 @@
"MIT" "MIT"
], ],
"authors": [ "authors": [
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
},
{ {
"name": "Gert de Pagter", "name": "Gert de Pagter",
"email": "BackEndTea@gmail.com" "email": "BackEndTea@gmail.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
} }
], ],
"description": "Symfony polyfill for ctype functions", "description": "Symfony polyfill for ctype functions",
@ -558,20 +627,20 @@
"polyfill", "polyfill",
"portable" "portable"
], ],
"time": "2019-02-06T07:57:58+00:00" "time": "2019-11-27T13:56:44+00:00"
}, },
{ {
"name": "symfony/polyfill-mbstring", "name": "symfony/polyfill-mbstring",
"version": "v1.11.0", "version": "v1.13.1",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/polyfill-mbstring.git", "url": "https://github.com/symfony/polyfill-mbstring.git",
"reference": "fe5e94c604826c35a32fa832f35bd036b6799609" "reference": "7b4aab9743c30be783b73de055d24a39cf4b954f"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/fe5e94c604826c35a32fa832f35bd036b6799609", "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/7b4aab9743c30be783b73de055d24a39cf4b954f",
"reference": "fe5e94c604826c35a32fa832f35bd036b6799609", "reference": "7b4aab9743c30be783b73de055d24a39cf4b954f",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -583,7 +652,7 @@
"type": "library", "type": "library",
"extra": { "extra": {
"branch-alias": { "branch-alias": {
"dev-master": "1.11-dev" "dev-master": "1.13-dev"
} }
}, },
"autoload": { "autoload": {
@ -617,20 +686,20 @@
"portable", "portable",
"shim" "shim"
], ],
"time": "2019-02-06T07:57:58+00:00" "time": "2019-11-27T14:18:11+00:00"
}, },
{ {
"name": "symfony/polyfill-php70", "name": "symfony/polyfill-php70",
"version": "v1.11.0", "version": "v1.13.1",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/polyfill-php70.git", "url": "https://github.com/symfony/polyfill-php70.git",
"reference": "bc4858fb611bda58719124ca079baff854149c89" "reference": "af23c7bb26a73b850840823662dda371484926c4"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-php70/zipball/bc4858fb611bda58719124ca079baff854149c89", "url": "https://api.github.com/repos/symfony/polyfill-php70/zipball/af23c7bb26a73b850840823662dda371484926c4",
"reference": "bc4858fb611bda58719124ca079baff854149c89", "reference": "af23c7bb26a73b850840823662dda371484926c4",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -640,7 +709,7 @@
"type": "library", "type": "library",
"extra": { "extra": {
"branch-alias": { "branch-alias": {
"dev-master": "1.11-dev" "dev-master": "1.13-dev"
} }
}, },
"autoload": { "autoload": {
@ -676,35 +745,35 @@
"portable", "portable",
"shim" "shim"
], ],
"time": "2019-02-06T07:57:58+00:00" "time": "2019-11-27T13:56:44+00:00"
}, },
{ {
"name": "twig/twig", "name": "twig/twig",
"version": "v1.41.0", "version": "v1.42.4",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/twigphp/Twig.git", "url": "https://github.com/twigphp/Twig.git",
"reference": "575cd5028362da591facde1ef5d7b94553c375c9" "reference": "e587180584c3d2d6cb864a0454e777bb6dcb6152"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/twigphp/Twig/zipball/575cd5028362da591facde1ef5d7b94553c375c9", "url": "https://api.github.com/repos/twigphp/Twig/zipball/e587180584c3d2d6cb864a0454e777bb6dcb6152",
"reference": "575cd5028362da591facde1ef5d7b94553c375c9", "reference": "e587180584c3d2d6cb864a0454e777bb6dcb6152",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": ">=5.4.0", "php": ">=5.5.0",
"symfony/polyfill-ctype": "^1.8" "symfony/polyfill-ctype": "^1.8"
}, },
"require-dev": { "require-dev": {
"psr/container": "^1.0", "psr/container": "^1.0",
"symfony/debug": "^2.7", "symfony/debug": "^3.4|^4.2",
"symfony/phpunit-bridge": "^3.4.19|^4.1.8" "symfony/phpunit-bridge": "^4.4@dev|^5.0"
}, },
"type": "library", "type": "library",
"extra": { "extra": {
"branch-alias": { "branch-alias": {
"dev-master": "1.41-dev" "dev-master": "1.42-dev"
} }
}, },
"autoload": { "autoload": {
@ -726,15 +795,15 @@
"homepage": "http://fabien.potencier.org", "homepage": "http://fabien.potencier.org",
"role": "Lead Developer" "role": "Lead Developer"
}, },
{
"name": "Armin Ronacher",
"email": "armin.ronacher@active-4.com",
"role": "Project Founder"
},
{ {
"name": "Twig Team", "name": "Twig Team",
"homepage": "https://twig.symfony.com/contributors", "homepage": "https://twig.symfony.com/contributors",
"role": "Contributors" "role": "Contributors"
},
{
"name": "Armin Ronacher",
"email": "armin.ronacher@active-4.com",
"role": "Project Founder"
} }
], ],
"description": "Twig, the flexible, fast, and secure template language for PHP", "description": "Twig, the flexible, fast, and secure template language for PHP",
@ -742,7 +811,7 @@
"keywords": [ "keywords": [
"templating" "templating"
], ],
"time": "2019-05-14T11:59:08+00:00" "time": "2019-11-11T16:49:32+00:00"
} }
], ],
"packages-dev": [], "packages-dev": [],

3
config.php.sample Executable file → Normal file
View File

@ -5,4 +5,5 @@ define('PSM_DB_PASS', 'db_pass');
define('PSM_DB_NAME', 'db_name'); define('PSM_DB_NAME', 'db_name');
define('PSM_DB_HOST', 'localhost'); define('PSM_DB_HOST', 'localhost');
define('PSM_DB_PORT', '3306'); //3306 is the default port for MySQL. If no specfic port is used, leave it empty. define('PSM_DB_PORT', '3306'); //3306 is the default port for MySQL. If no specfic port is used, leave it empty.
define('PSM_BASE_URL', ''); define('PSM_BASE_URL', '');
define('PSM_WEBCRON_KEY', '');

View File

@ -1,4 +1,5 @@
<?php <?php
/** /**
* PHP Server Monitor * PHP Server Monitor
* Monitor your servers and websites. * Monitor your servers and websites.
@ -25,66 +26,140 @@
* @link http://www.phpservermonitor.org/ * @link http://www.phpservermonitor.org/
**/ **/
namespace {
// include main configuration and functionality // include main configuration and functionality
require_once __DIR__.'/../src/bootstrap.php'; use psm\Router;
use psm\Util\Server\UpdateManager;
if (!psm_is_cli()) { require_once __DIR__ . '/../src/bootstrap.php';
// check if it's an allowed host
if (!isset($_SERVER["HTTP_X_FORWARDED_FOR"])) {
$_SERVER["HTTP_X_FORWARDED_FOR"] = "";
}
// define won't accept array before php 7.0.0 if (!psm_is_cli()) {
// check if data is serialized (not needed when using php 7.0.0 and higher) // check if it's an allowed host
$data = @unserialize(PSM_CRON_ALLOW); if (!isset($_SERVER["HTTP_X_FORWARDED_FOR"])) {
$allow = $data === false ? PSM_CRON_ALLOW : $data; $_SERVER["HTTP_X_FORWARDED_FOR"] = "";
}
if (!in_array($_SERVER['REMOTE_ADDR'], $allow) && !in_array($_SERVER["HTTP_X_FORWARDED_FOR"], $allow)) { // define won't accept array before php 7.0.0
header('HTTP/1.0 403 Forbidden'); // check if data is serialized (not needed when using php 7.0.0 and higher)
die('<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"><html><head><title>403 Forbidden</title></head><body><h1>Forbidden</h1><p>IP address not allowed. See the <a href="http://docs.phpservermonitor.org/en/latest/install.html#cronjob-over-web">documentation</a> for more info.</p></body></html>'); $data = @unserialize(PSM_CRON_ALLOW);
} $allow = $data === false ? PSM_CRON_ALLOW : $data;
echo "OK";
}
$cron_timeout = PSM_CRON_TIMEOUT; if (!in_array($_SERVER['REMOTE_ADDR'], $allow) && !in_array($_SERVER["HTTP_X_FORWARDED_FOR"], $allow)
&& ! (array_key_exists ("webcron_key", $_GET) &&
$_GET["webcron_key"]==PSM_WEBCRON_KEY && (PSM_WEBCRON_KEY != ""))
) {
header('HTTP/1.0 403 Forbidden');
die('
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"><html>
<head><title>403 Forbidden</title></head>
<body>
<h1>Forbidden</h1><p>IP address not allowed. See the
<a href="http://docs.phpservermonitor.org/en/latest/install.html#cronjob-over-web">documentation</a>
for more info.</p>
</body>
</html>');
}
echo "OK";
}
$cron_timeout = PSM_CRON_TIMEOUT;
// parse a couple of arguments // parse a couple of arguments
if (!empty($_SERVER['argv'])) { if (!empty($_SERVER['argv'])) {
foreach ($_SERVER['argv'] as $argv) { foreach ($_SERVER['argv'] as $argv) {
$argi = explode('=', ltrim($argv, '--')); $argi = explode('=', ltrim($argv, '--'));
if (count($argi) !== 2) { if (count($argi) !== 2) {
continue; continue;
} }
switch ($argi[0]) { switch ($argi[0]) {
case 'uri': case 'uri':
if (!defined('PSM_BASE_URL')) { if (!defined('PSM_BASE_URL')) {
define('PSM_BASE_URL', $argi[1]); define('PSM_BASE_URL', $argi[1]);
} }
break; break;
case 'timeout': case 'timeout':
$cron_timeout = intval($argi[1]); $cron_timeout = intval($argi[1]);
break; break;
} }
} }
} }
// prevent cron from running twice at the same time // prevent cron from running twice at the same time
// however if the cron has been running for X mins, we'll assume it died and run anyway // however if the cron has been running for X mins, we'll assume it died and run anyway
// if you want to change PSM_CRON_TIMEOUT, have a look in src/includes/psmconfig.inc.php. // if you want to change PSM_CRON_TIMEOUT, have a look in src/includes/psmconfig.inc.php.
// or you can provide the --timeout=x argument // or you can provide the --timeout=x argument
$time = time();
if (
psm_get_conf('cron_running') == 1
&& $cron_timeout > 0
&& ($time - psm_get_conf('cron_running_time') < $cron_timeout)
) {
die('Cron is already running. Exiting.');
}
if (!defined('PSM_DEBUG') || !PSM_DEBUG) {
psm_update_conf('cron_running', 1);
}
psm_update_conf('cron_running_time', $time);
$autorun = $router->getService('util.server.updatemanager'); $status = null;
$autorun->run(true); if (PHP_SAPI === 'cli') {
$shortOptions = 's:'; // status
psm_update_conf('cron_running', 0); $longOptions = [
'status:'
];
$options = getopt($shortOptions, $longOptions);
$possibleValues = [
'on' => 'on',
'1' => 'on',
'up' => 'on',
'off' => 'off',
'0' => 'off',
'down' => 'off'
];
if (
true === array_key_exists('status', $options) &&
true === array_key_exists(strtolower($options['status']), $possibleValues)
) {
$status = $possibleValues[$options['status']];
} elseif (
true === array_key_exists('s', $options) &&
true === array_key_exists(strtolower($options['s']), $possibleValues)
) {
$status = $possibleValues[$options['s']];
}
}
if ($status === 'off') {
$confPrefix = 'cron_off_';
} else {
$confPrefix = 'cron_';
}
$time = time();
if (
psm_get_conf($confPrefix . 'running') == 1
&& $cron_timeout > 0
&& ($time - psm_get_conf($confPrefix . 'running_time') < $cron_timeout)
) {
die('Cron is already running. Exiting.');
}
if (!defined('PSM_DEBUG') || !PSM_DEBUG) {
psm_update_conf($confPrefix . 'running', 1);
}
psm_update_conf($confPrefix . 'running_time', $time);
/** @var Router $router */
/** @var UpdateManager $autorun */
$autorun = $router->getService('util.server.updatemanager');
if ($status !== 'off') {
$autorun->run(true, $status);
} else {
set_time_limit(60);
if (false === defined('CRON_DOWN_INTERVAL')) {
define('CRON_DOWN_INTERVAL', 5); // every 5 second call update
}
$start = time();
$i = 0;
while ($i < 59) {
$autorun->run(true, $status);
if ($i < (59 - CRON_DOWN_INTERVAL)) {
time_sleep_until($start + $i + CRON_DOWN_INTERVAL);
}
$i += CRON_DOWN_INTERVAL;
}
}
psm_update_conf($confPrefix . 'running', 0);
}

View File

@ -51,9 +51,9 @@ copyright = u'2008-2017, Pepijn Over'
# built documents. # built documents.
# #
# The short X.Y version. # The short X.Y version.
version = '3.4.5' version = '3.5.0'
# The full version, including alpha/beta/rc tags. # The full version, including alpha/beta/rc tags.
release = version release = '3.5.0'
# The language for content autogenerated by Sphinx. Refer to documentation # The language for content autogenerated by Sphinx. Refer to documentation
# for a list of supported languages. # for a list of supported languages.

View File

@ -94,6 +94,10 @@ The following people have contributed to the translation of PHP Server Monitor:
* Plamen Vasilev - https://github.com/PVasileff * Plamen Vasilev - https://github.com/PVasileff
* Catalan
* caos30 - https://github.com/caos30
* Chinese * Chinese
* manhere - https://github.com/manhere * manhere - https://github.com/manhere
@ -168,11 +172,10 @@ The following people have contributed to the translation of PHP Server Monitor:
* Turkish * Turkish
* Haydar Kulekci - https://github.com/hkulekci * Haydar Kulekci - https://github.com/hkulekci
* Catalan
* caos30 - https://github.com/caos30
* Ukrainian
* Oleksa Vyshnivsky - https://github.com/oleksavyshnivsky
Vendors Vendors
+++++++ +++++++
@ -188,4 +191,4 @@ The following libraries are being used by PHP Server Monitor:
* PHP Mailer - https://github.com/PHPMailer/PHPMailer * PHP Mailer - https://github.com/PHPMailer/PHPMailer
* PHP-Pushover - https://github.com/kryap/php-pushover * PHP-Pushover - https://github.com/kryap/php-pushover
* Symfony - https://symfony.com * Symfony - https://symfony.com
* Random_compat - https://github.com/paragonie/random_compat * Random_compat - https://github.com/paragonie/random_compat

View File

@ -66,6 +66,13 @@ Archiving means that per day only one record is stored with averages. This still
The retention period tells the monitor how long to keep records in the archive table. The retention period tells the monitor how long to keep records in the archive table.
How to disable caching?
------------------------
Caching can be stopt by using a unique url. Place `%cachebuster%` in the url,
this will be replaced with the value of time().
Example: https://example.com?%cachebuster% will run as https://example.com?571768757.
Configuration Configuration
+++++++++++++ +++++++++++++
@ -112,14 +119,16 @@ You need to be an administrator for this part.
1. Go to @botfather (https://t.me/BotFather) and type /start . 1. Go to @botfather (https://t.me/BotFather) and type /start .
2. Type /newbot and give your bot an unique name. 2. Type /newbot and give your bot an unique name.
3. Save the API token. 3. Save the API token.
4. Login to PhpServerMonitor dashboard > config > Telegram > put your api token into Telegram API Token's column.
How do I sent Telegram notifications to a person? How do I sent Telegram notifications to a person?
------------------------------------------------- -------------------------------------------------
1. Go to @cid_bot (https://t.me/cid_bot) and start. 1. Go to @cid_bot (https://t.me/cid_bot) and start.
2. Save your chat id. 2. Save your chat id.
3. Press the activation button. 3. Login to PhpServerMonitor dashboard then open user profile page, then put your chat id into Telegram chat id's column.
4. Go to your chat with the bot and press start of type /start. 4. Press save then activate Telegram notifications button.
5. Go to your chat with the bot and press start of type /start.
How do I sent Telegram notifications to a group? How do I sent Telegram notifications to a group?
------------------------------------------------ ------------------------------------------------
@ -142,3 +151,16 @@ What is the username of my bot?
1. Go to profile on the monitor. 1. Go to profile on the monitor.
2. Press activate. 2. Press activate.
3. A button will appear, this will direct you to your Telegram bot. 3. A button will appear, this will direct you to your Telegram bot.
How do I setup Jabber notifications from Google account?
--------------------------------------------------------
A few steps are required to get Jabber notifications working for Google account.
You need to be an administrator for this part.
1. Go into you Google Account Security settings (https://myaccount.google.com/security).
2. Check that you have two factor auth enabled. If not, activate it.
3. Add new app password - copy it.
4. Login to PhpServerMonitor dashboard > config > Jabber and use password from step 3 with your Google account in PhpServerMonitor jabber settings.
5. As host use `talk.google.com`.
6. As username use your whole Google account (for example `example@google.com`).
7. As port use `5223` (really, not typo error ...).

View File

@ -92,6 +92,16 @@ Please note that some distros have user-specific crontabs (e.g. Debian). If that
*/15 * * * * /usr/bin/php /var/www/html/phpservermon/cron/status.cron.php */15 * * * * /usr/bin/php /var/www/html/phpservermon/cron/status.cron.php
If you want to check in different intervals online and offline servers you can use attribute `-s` (or `--status`) with value `on` or `off`.
So for example you want to check your servers which are online every 10 minutes and offline every 5 seconds. So configure two cron jobs::
*/10 * * * * /usr/bin/php /var/www/html/phpservermon/cron/status.cron.php -s on
*/1 * * * * /usr/bin/php /var/www/html/phpservermon/cron/status.cron.php -s off
By default `off` servers are checked every 5 seconds. If you want to change it add into your config file this constant with required value in seconds::
define('CRON_DOWN_INTERVAL', 1); // every 1 second call update
The update script has been designed to prevent itself from running multiple times. It has a maximum timeout of 10 minutes. The update script has been designed to prevent itself from running multiple times. It has a maximum timeout of 10 minutes.
After that the script is assumed dead and the cronjob will run again. After that the script is assumed dead and the cronjob will run again.
If you want to change the 10 minutes timeout, find the constant "PSM_CRON_TIMEOUT" in src/includes/psmconfig.inc.php. If you want to change the 10 minutes timeout, find the constant "PSM_CRON_TIMEOUT" in src/includes/psmconfig.inc.php.
@ -136,6 +146,13 @@ In config.php add following line::
After that, you can hit the url http(s)://"yourmonitor.com"/cron/status.cron.php over the web from your allowed IP. After that, you can hit the url http(s)://"yourmonitor.com"/cron/status.cron.php over the web from your allowed IP.
Alternatively, define a secret key to allow the update over the web:
In config.php add following line::
define('PSM_WEBCRON_KEY', 'YOURKEY');
After that, you can hit the url http(s)://"yourmonitor.com"/cron/status.cron.php?webcron_key=YOURKEY .
Troubleshooting Troubleshooting
+++++++++++++++ +++++++++++++++
@ -144,3 +161,4 @@ If you have problems setting up or accessing your monitor and do not know why, e
To enable debug mode, add the following line to your config.php file:: To enable debug mode, add the following line to your config.php file::
define('PSM_DEBUG', true); define('PSM_DEBUG', true);

View File

@ -15,7 +15,7 @@ Features
++++++++ ++++++++
* Monitor services and websites (see below). * Monitor services and websites (see below).
* Email, SMS, Pushover and Telegram notifications. * Email, SMS, Pushover, Telegram and Jabber notifications.
* View history graphs of uptime and latency. * View history graphs of uptime and latency.
* User authentication with 2 levels (administrator and regular user). * User authentication with 2 levels (administrator and regular user).
* Logs of connection errors, outgoing emails and text messages. * Logs of connection errors, outgoing emails and text messages.
@ -44,7 +44,7 @@ There are two different ways to monitor a server:
Notifications Notifications
------------- -------------
Each server has its own settings regarding notification. Each server has its own settings regarding notification.
You can choose for email, text message (SMS), Pushover.net and Telegram notifications. You can choose for email, text message (SMS), Pushover.net, Telegram and Jabber notifications.
The following SMS gateways are currently available: The following SMS gateways are currently available:
* Clickatell - <https://www.clickatell.com> * Clickatell - <https://www.clickatell.com>

View File

@ -5,7 +5,7 @@ Requirements
* Web server * Web server
* MySQL database * MySQL database
* For PHP5: 5.5.9+ * For PHP5: 5.6.0+
* For PHP7: 7.0.8+ * For PHP7: 7.0.8+
* PHP cURL package * PHP cURL package
* PHP PDO mysql driver * PHP PDO mysql driver

View File

@ -1,4 +1,5 @@
<?php <?php
/** /**
* PHP Server Monitor * PHP Server Monitor
* Monitor your servers and websites. * Monitor your servers and websites.
@ -25,24 +26,24 @@
* @link http://www.phpservermonitor.org/ * @link http://www.phpservermonitor.org/
**/ **/
require __DIR__.'/src/bootstrap.php'; require __DIR__ . '/src/bootstrap.php';
psm_no_cache(); psm_no_cache();
if (isset($_GET["logout"])) { if (isset($_GET["logout"])) {
$router->getService('user')->doLogout(); $router->getService('user')->doLogout();
// logged out, redirect to login // logged out, redirect to login
header('Location: '.psm_build_url()); header('Location: ' . psm_build_url());
die(); die();
} }
$mod = psm_GET('mod', PSM_MODULE_DEFAULT); $mod = psm_GET('mod', PSM_MODULE_DEFAULT);
try { try {
$router->run($mod); $router->run($mod);
} catch (\InvalidArgumentException $e) { } catch (\InvalidArgumentException $e) {
// invalid module, try the default one // invalid module, try the default one
// it that somehow also doesnt exist, we have a bit of an issue // it that somehow also doesnt exist, we have a bit of an issue
// and we really have no reason catch it // and we really have no reason catch it
$router->run(PSM_MODULE_DEFAULT); $router->run(PSM_MODULE_DEFAULT);
} }

View File

@ -1,4 +1,5 @@
<?php <?php
/** /**
* PHP Server Monitor * PHP Server Monitor
* Monitor your servers and websites. * Monitor your servers and websites.
@ -25,8 +26,10 @@
* @link http://www.phpservermonitor.org/ * @link http://www.phpservermonitor.org/
**/ **/
define('PSM_INSTALL', true); namespace {
define('PSM_INSTALL', true);
require __DIR__.'/src/bootstrap.php'; require __DIR__ . '/src/bootstrap.php';
$router->run('install'); $router->run('install');
}

2
logs/.gitignore vendored Normal file
View File

@ -0,0 +1,2 @@
*
!.gitignore

0
manifest.json Executable file → Normal file
View File

0
phpservermon.png Executable file → Normal file
View File

Before

Width:  |  Height:  |  Size: 6.0 KiB

After

Width:  |  Height:  |  Size: 6.0 KiB

2
service-worker.js Executable file → Normal file
View File

@ -1,7 +1,7 @@
var dataCacheName = 'PSM-v1'; var dataCacheName = 'PSM-v1';
var cacheName = 'PSM-PWA-final-1'; var cacheName = 'PSM-PWA-final-1';
var filesToCache = [ var filesToCache = [
'/', '',
'index.php', 'index.php',
'src/templates/default/static/js/history.js', 'src/templates/default/static/js/history.js',
'src/templates/default/static/js/scripts.js', 'src/templates/default/static/js/scripts.js',

View File

@ -1,4 +1,5 @@
<?php <?php
/** /**
* PHP Server Monitor * PHP Server Monitor
* Monitor your servers and websites. * Monitor your servers and websites.
@ -26,75 +27,87 @@
* @since phpservermon 2.1.0 * @since phpservermon 2.1.0
**/ **/
// Include paths namespace {
define('PSM_PATH_SRC', __DIR__.DIRECTORY_SEPARATOR); // Include paths
define('PSM_PATH_CONFIG', PSM_PATH_SRC.'config'.DIRECTORY_SEPARATOR); define('PSM_PATH_SRC', __DIR__ . DIRECTORY_SEPARATOR);
define('PSM_PATH_LANG', PSM_PATH_SRC.'lang'.DIRECTORY_SEPARATOR); define('PSM_PATH_CONFIG', PSM_PATH_SRC . 'config' . DIRECTORY_SEPARATOR);
define('PSM_PATH_SMS_GATEWAY', PSM_PATH_SRC.'psm'.DIRECTORY_SEPARATOR.'Txtmsg'.DIRECTORY_SEPARATOR); define('PSM_PATH_LANG', PSM_PATH_SRC . 'lang' . DIRECTORY_SEPARATOR);
define('PSM_PATH_SMS_GATEWAY', PSM_PATH_SRC . 'psm' . DIRECTORY_SEPARATOR . 'Txtmsg' . DIRECTORY_SEPARATOR);
// user levels // user levels
define('PSM_USER_ADMIN', 10); define('PSM_USER_ADMIN', 10);
define('PSM_USER_USER', 20); define('PSM_USER_USER', 20);
define('PSM_USER_ANONYMOUS', 30); define('PSM_USER_ANONYMOUS', 30);
if (function_exists('date_default_timezone_set') && function_exists('date_default_timezone_get')) { if (function_exists('date_default_timezone_set') && function_exists('date_default_timezone_get')) {
date_default_timezone_set(@date_default_timezone_get()); date_default_timezone_set(@date_default_timezone_get());
}
// find config file
$path_conf = PSM_PATH_SRC . '../config.php';
if (file_exists($path_conf)) {
include_once $path_conf;
}
// check for a debug var
if (!defined('PSM_DEBUG')) {
define('PSM_DEBUG', false);
}
// Debug enabled: report everything
// Debug disabled: report error only if created manually
ini_set('display_errors', 1);
PSM_DEBUG ? error_reporting(E_ALL) : error_reporting(E_USER_ERROR);
// check for a cron allowed ip array
if (!defined('PSM_CRON_ALLOW')) {
//serialize for php version lower than 7.0.0
define('PSM_CRON_ALLOW', serialize(array()));
}
$vendor_autoload = PSM_PATH_SRC . '..' . DIRECTORY_SEPARATOR . 'vendor' .
DIRECTORY_SEPARATOR . 'autoload.php';
if (!file_exists($vendor_autoload)) {
trigger_error(
"No dependencies found in vendor dir. Did you install the dependencies?
Please run \"php composer.phar install\".",
E_USER_ERROR
);
}
require_once $vendor_autoload;
$router = new psm\Router();
// this may seem insignificant, but right now lots of functions
// depend on the following global var definition:
$db = $router->getService('db');
// sanity check!
if (!defined('PSM_INSTALL') || !PSM_INSTALL) {
if ($db->getDbHost() === null) {
// no config file has been loaded, redirect the user to the install
header('Location: install.php');
die();
}
// config file has been loaded, check if we have a connection
if (!$db->status()) {
trigger_error("Unable to establish database connection...", E_USER_ERROR);
}
// attempt to load configuration from database
if (!psm_load_conf()) {
// unable to load from config table
header('Location: install.php');
die();
}
// config load OK, make sure database version is up to date
$installer = new \psm\Util\Install\Installer($db);
if ($installer->isUpgradeRequired()) {
trigger_error(
"Your database is for an older version and requires an upgrade,
<a href=\"install.php\">please click here</a> to update your database to the latest version.",
E_USER_ERROR
);
}
}
$lang = psm_get_conf('language', 'en_US');
psm_load_lang($lang);
} }
// find config file
$path_conf = PSM_PATH_SRC.'../config.php';
if (file_exists($path_conf)) {
include_once $path_conf;
}
// check for a debug var
if (!defined('PSM_DEBUG')) {
define('PSM_DEBUG', false);
}
// Debug enabled: report everything
// Debug disabled: report error only if created manually
ini_set('display_errors', 1);
PSM_DEBUG ? error_reporting(E_ALL) : error_reporting(E_USER_ERROR);
// check for a cron allowed ip array
if (!defined('PSM_CRON_ALLOW')) {
//serialize for php version lower than 7.0.0
define('PSM_CRON_ALLOW', serialize(array()));
}
$vendor_autoload = PSM_PATH_SRC.'..'.DIRECTORY_SEPARATOR.'vendor'.DIRECTORY_SEPARATOR.'autoload.php';
if (!file_exists($vendor_autoload)) {
trigger_error("No dependencies found in vendor dir. Did you install the dependencies? Please run \"php composer.phar install\".", E_USER_ERROR);
}
require_once $vendor_autoload;
$router = new psm\Router();
// this may seem insignificant, but right now lots of functions depend on the following global var definition:
$db = $router->getService('db');
// sanity check!
if (!defined('PSM_INSTALL') || !PSM_INSTALL) {
if ($db->getDbHost() === null) {
// no config file has been loaded, redirect the user to the install
header('Location: install.php');
trigger_error("Could not load config file. Redirect to install failed, <a href=\"install.php\">click here</a>.", E_USER_ERROR);
}
// config file has been loaded, check if we have a connection
if (!$db->status()) {
trigger_error("Unable to establish database connection...", E_USER_ERROR);
}
// attempt to load configuration from database
if (!psm_load_conf()) {
// unable to load from config table
header('Location: install.php');
trigger_error("Could not load config table. Redirect to install failed, <a href=\"install.php\">click here</a>.", E_USER_ERROR);
}
// config load OK, make sure database version is up to date
$installer = new \psm\Util\Install\Installer($db);
if ($installer->isUpgradeRequired()) {
trigger_error("Your database is for an older version and requires an upgrade, <a href=\"install.php\">please click here</a> to update your database to the latest version.", E_USER_ERROR);
}
}
$lang = psm_get_conf('language', 'en_US');
psm_load_lang($lang);

File diff suppressed because it is too large Load Diff

View File

@ -1,4 +1,5 @@
<?php <?php
/** /**
* PHP Server Monitor * PHP Server Monitor
* Monitor your servers and websites. * Monitor your servers and websites.
@ -35,212 +36,230 @@
*/ */
if (!defined('PASSWORD_DEFAULT')) { if (!defined('PASSWORD_DEFAULT')) {
define('PASSWORD_BCRYPT', 1);
define('PASSWORD_DEFAULT', PASSWORD_BCRYPT);
define('PASSWORD_BCRYPT', 1); /**
define('PASSWORD_DEFAULT', PASSWORD_BCRYPT); * Hash the password using the specified algorithm
*
* @param string $password The password to hash
* @param int $algo The algorithm to use (Defined by PASSWORD_* constants)
* @param array $options The options for the algorithm to use
*
* @return string|false The hashed password, or false on error.
*/
function password_hash($password, $algo, array $options = array())
{
if (!function_exists('crypt')) {
trigger_error("Crypt must be loaded for password_hash to function", E_USER_WARNING);
return null;
}
if (!is_string($password)) {
trigger_error("password_hash(): Password must be a string", E_USER_WARNING);
return null;
}
if (!is_int($algo)) {
trigger_error("password_hash() expects parameter 2 to be long, " . gettype($algo) .
" given", E_USER_WARNING);
return null;
}
switch ($algo) {
case PASSWORD_BCRYPT:
// Note that this is a C constant, but not exposed to PHP, so we don't define it here.
$cost = 10;
if (isset($options['cost'])) {
$cost = $options['cost'];
if ($cost < 4 || $cost > 31) {
trigger_error(
sprintf("password_hash(): Invalid bcrypt cost parameter specified: %d", $cost),
E_USER_WARNING
);
return null;
}
}
// The length of salt to generate
$raw_salt_len = 16;
// The length required in the final serialization
$required_salt_len = 22;
$hash_format = sprintf("$2y$%02d$", $cost);
break;
default:
trigger_error(
sprintf("password_hash(): Unknown password hashing algorithm: %s", $algo),
E_USER_WARNING
);
return null;
}
if (isset($options['salt'])) {
switch (gettype($options['salt'])) {
case 'NULL':
case 'boolean':
case 'integer':
case 'double':
case 'string':
$salt = (string) $options['salt'];
break;
case 'object':
if (method_exists($options['salt'], '__tostring')) {
$salt = (string) $options['salt'];
break;
}
// no break
case 'array':
case 'resource':
default:
trigger_error('password_hash(): Non-string salt parameter supplied', E_USER_WARNING);
return null;
}
if (strlen($salt) < $required_salt_len) {
trigger_error(
sprintf(
"password_hash(): Provided salt is too short: %d expecting %d",
strlen($salt),
$required_salt_len
),
E_USER_WARNING
);
return null;
} elseif (0 == preg_match('#^[a-zA-Z0-9./]+$#D', $salt)) {
$salt = str_replace('+', '.', base64_encode($salt));
}
} else {
$buffer = '';
$buffer_valid = false;
if (function_exists('mcrypt_create_iv') && !defined('PHALANGER')) {
$buffer = mcrypt_create_iv($raw_salt_len, MCRYPT_DEV_URANDOM);
if ($buffer) {
$buffer_valid = true;
}
}
if (!$buffer_valid && function_exists('openssl_random_pseudo_bytes')) {
$buffer = openssl_random_pseudo_bytes($raw_salt_len);
if ($buffer) {
$buffer_valid = true;
}
}
if (!$buffer_valid && is_readable('/dev/urandom')) {
$f = fopen('/dev/urandom', 'r');
$read = strlen($buffer);
while ($read < $raw_salt_len) {
$buffer .= fread($f, $raw_salt_len - $read);
$read = strlen($buffer);
}
fclose($f);
if ($read >= $raw_salt_len) {
$buffer_valid = true;
}
}
if (!$buffer_valid || strlen($buffer) < $raw_salt_len) {
$bl = strlen($buffer);
for ($i = 0; $i < $raw_salt_len; $i++) {
if ($i < $bl) {
$buffer[$i] = $buffer[$i] ^ chr(mt_rand(0, 255));
} else {
$buffer .= chr(mt_rand(0, 255));
}
}
}
$salt = str_replace('+', '.', base64_encode($buffer));
}
$salt = substr($salt, 0, $required_salt_len);
/** $hash = $hash_format . $salt;
* Hash the password using the specified algorithm
*
* @param string $password The password to hash
* @param int $algo The algorithm to use (Defined by PASSWORD_* constants)
* @param array $options The options for the algorithm to use
*
* @return string|false The hashed password, or false on error.
*/
function password_hash($password, $algo, array $options = array()) {
if (!function_exists('crypt')) {
trigger_error("Crypt must be loaded for password_hash to function", E_USER_WARNING);
return null;
}
if (!is_string($password)) {
trigger_error("password_hash(): Password must be a string", E_USER_WARNING);
return null;
}
if (!is_int($algo)) {
trigger_error("password_hash() expects parameter 2 to be long, ".gettype($algo)." given", E_USER_WARNING);
return null;
}
switch ($algo) {
case PASSWORD_BCRYPT:
// Note that this is a C constant, but not exposed to PHP, so we don't define it here.
$cost = 10;
if (isset($options['cost'])) {
$cost = $options['cost'];
if ($cost < 4 || $cost > 31) {
trigger_error(sprintf("password_hash(): Invalid bcrypt cost parameter specified: %d", $cost), E_USER_WARNING);
return null;
}
}
// The length of salt to generate
$raw_salt_len = 16;
// The length required in the final serialization
$required_salt_len = 22;
$hash_format = sprintf("$2y$%02d$", $cost);
break;
default:
trigger_error(sprintf("password_hash(): Unknown password hashing algorithm: %s", $algo), E_USER_WARNING);
return null;
}
if (isset($options['salt'])) {
switch (gettype($options['salt'])) {
case 'NULL':
case 'boolean':
case 'integer':
case 'double':
case 'string':
$salt = (string) $options['salt'];
break;
case 'object':
if (method_exists($options['salt'], '__tostring')) {
$salt = (string) $options['salt'];
break;
}
case 'array':
case 'resource':
default:
trigger_error('password_hash(): Non-string salt parameter supplied', E_USER_WARNING);
return null;
}
if (strlen($salt) < $required_salt_len) {
trigger_error(sprintf("password_hash(): Provided salt is too short: %d expecting %d", strlen($salt), $required_salt_len), E_USER_WARNING);
return null;
} elseif (0 == preg_match('#^[a-zA-Z0-9./]+$#D', $salt)) {
$salt = str_replace('+', '.', base64_encode($salt));
}
} else {
$buffer = '';
$buffer_valid = false;
if (function_exists('mcrypt_create_iv') && !defined('PHALANGER')) {
$buffer = mcrypt_create_iv($raw_salt_len, MCRYPT_DEV_URANDOM);
if ($buffer) {
$buffer_valid = true;
}
}
if (!$buffer_valid && function_exists('openssl_random_pseudo_bytes')) {
$buffer = openssl_random_pseudo_bytes($raw_salt_len);
if ($buffer) {
$buffer_valid = true;
}
}
if (!$buffer_valid && is_readable('/dev/urandom')) {
$f = fopen('/dev/urandom', 'r');
$read = strlen($buffer);
while ($read < $raw_salt_len) {
$buffer .= fread($f, $raw_salt_len - $read);
$read = strlen($buffer);
}
fclose($f);
if ($read >= $raw_salt_len) {
$buffer_valid = true;
}
}
if (!$buffer_valid || strlen($buffer) < $raw_salt_len) {
$bl = strlen($buffer);
for ($i = 0; $i < $raw_salt_len; $i++) {
if ($i < $bl) {
$buffer[$i] = $buffer[$i] ^ chr(mt_rand(0, 255));
} else {
$buffer .= chr(mt_rand(0, 255));
}
}
}
$salt = str_replace('+', '.', base64_encode($buffer));
}
$salt = substr($salt, 0, $required_salt_len);
$hash = $hash_format.$salt; $ret = crypt($password, $hash);
$ret = crypt($password, $hash); if (!is_string($ret) || strlen($ret) <= 13) {
return false;
}
if (!is_string($ret) || strlen($ret) <= 13) { return $ret;
return false; }
}
return $ret; /**
} * Get information about the password hash. Returns an array of the information
* that was used to generate the password hash.
*
* array(
* 'algo' => 1,
* 'algoName' => 'bcrypt',
* 'options' => array(
* 'cost' => 10,
* ),
* )
*
* @param string $hash The password hash to extract info from
*
* @return array The array of information about the hash.
*/
function password_get_info($hash)
{
$return = array(
'algo' => 0,
'algoName' => 'unknown',
'options' => array(),
);
if (substr($hash, 0, 4) == '$2y$' && strlen($hash) == 60) {
$return['algo'] = PASSWORD_BCRYPT;
$return['algoName'] = 'bcrypt';
list($cost) = sscanf($hash, "$2y$%d$");
$return['options']['cost'] = $cost;
}
return $return;
}
/** /**
* Get information about the password hash. Returns an array of the information * Determine if the password hash needs to be rehashed according to the options provided
* that was used to generate the password hash. *
* * If the answer is true, after validating the password using password_verify, rehash it.
* array( *
* 'algo' => 1, * @param string $hash The hash to test
* 'algoName' => 'bcrypt', * @param int $algo The algorithm used for new password hashes
* 'options' => array( * @param array $options The options array passed to password_hash
* 'cost' => 10, *
* ), * @return boolean True if the password needs to be rehashed.
* ) */
* function password_needs_rehash($hash, $algo, array $options = array())
* @param string $hash The password hash to extract info from {
* $info = password_get_info($hash);
* @return array The array of information about the hash. if ($info['algo'] != $algo) {
*/ return true;
function password_get_info($hash) { }
$return = array( switch ($algo) {
'algo' => 0, case PASSWORD_BCRYPT:
'algoName' => 'unknown', $cost = isset($options['cost']) ? $options['cost'] : 10;
'options' => array(), if ($cost != $info['options']['cost']) {
); return true;
if (substr($hash, 0, 4) == '$2y$' && strlen($hash) == 60) { }
$return['algo'] = PASSWORD_BCRYPT; break;
$return['algoName'] = 'bcrypt'; }
list($cost) = sscanf($hash, "$2y$%d$"); return false;
$return['options']['cost'] = $cost; }
}
return $return;
}
/** /**
* Determine if the password hash needs to be rehashed according to the options provided * Verify a password against a hash using a timing attack resistant approach
* *
* If the answer is true, after validating the password using password_verify, rehash it. * @param string $password The password to verify
* * @param string $hash The hash to verify against
* @param string $hash The hash to test *
* @param int $algo The algorithm used for new password hashes * @return boolean If the password matches the hash
* @param array $options The options array passed to password_hash */
* function password_verify($password, $hash)
* @return boolean True if the password needs to be rehashed. {
*/ if (!function_exists('crypt')) {
function password_needs_rehash($hash, $algo, array $options = array()) { trigger_error("Crypt must be loaded for password_verify to function", E_USER_WARNING);
$info = password_get_info($hash); return false;
if ($info['algo'] != $algo) { }
return true; $ret = crypt($password, $hash);
} if (!is_string($ret) || strlen($ret) != strlen($hash) || strlen($ret) <= 13) {
switch ($algo) { return false;
case PASSWORD_BCRYPT: }
$cost = isset($options['cost']) ? $options['cost'] : 10;
if ($cost != $info['options']['cost']) {
return true;
}
break;
}
return false;
}
/** $status = 0;
* Verify a password against a hash using a timing attack resistant approach for ($i = 0; $i < strlen($ret); $i++) {
* $status |= (ord($ret[$i]) ^ ord($hash[$i]));
* @param string $password The password to verify }
* @param string $hash The hash to verify against
*
* @return boolean If the password matches the hash
*/
function password_verify($password, $hash) {
if (!function_exists('crypt')) {
trigger_error("Crypt must be loaded for password_verify to function", E_USER_WARNING);
return false;
}
$ret = crypt($password, $hash);
if (!is_string($ret) || strlen($ret) != strlen($hash) || strlen($ret) <= 13) {
return false;
}
$status = 0; return $status === 0;
for ($i = 0; $i < strlen($ret); $i++) { }
$status |= (ord($ret[$i]) ^ ord($hash[$i]));
}
return $status === 0;
}
} }

View File

@ -1,4 +1,5 @@
<?php <?php
/** /**
* PHP Server Monitor * PHP Server Monitor
* Monitor your servers and websites. * Monitor your servers and websites.
@ -29,7 +30,7 @@
/** /**
* Current PSM version * Current PSM version
*/ */
define('PSM_VERSION', '3.4.5'); define('PSM_VERSION', '3.5.0');
/** /**
* URL to check for updates. Will not be checked if turned off on config page. * URL to check for updates. Will not be checked if turned off on config page.
@ -119,13 +120,25 @@ define('PSM_TELEGRAM_GET_ID_URL', 'https://telegram.me/cid_bot');
//define('PSM_BASE_URL', null); //define('PSM_BASE_URL', null);
if (!defined('PSM_MODULE_DEFAULT')) { if (!defined('PSM_MODULE_DEFAULT')) {
/** /**
* Default theme * Default theme
*/ */
define('PSM_THEME', 'default'); define('PSM_THEME', 'default');
/** /**
* Default module (if none given or invalid one) * Default module (if none given or invalid one)
*/ */
define('PSM_MODULE_DEFAULT', 'server_status'); define('PSM_MODULE_DEFAULT', 'server_status');
}
if (defined('PSM_JABBER_FORCE_TLS') === false) {
define('PSM_JABBER_FORCE_TLS', true);
}
if (defined('PSM_JABBER_AUTH_TYPE') === false) {
// possible values: PLAIN, X-OAUTH2, DIGEST-MD5, CRAM-MD5, SCRAM-SHA-1, ANONYMOUS, EXTERNAL
define('PSM_JABBER_AUTH_TYPE', 'PLAIN'); // default just plain because of google for example :(
}
if (defined('PSM_JABBER_DEBUG_LEVEL') === false) {
// possible values: ERROR, WARNING, NOTICE, INFO, DEBUG
define('PSM_JABBER_DEBUG_LEVEL', JAXLLogger::WARNING);
} }

View File

@ -1,4 +1,5 @@
<?php <?php
/** /**
* PHP Server Monitor * PHP Server Monitor
* Monitor your servers and websites. * Monitor your servers and websites.
@ -26,284 +27,345 @@
**/ **/
$sm_lang = array( $sm_lang = array(
'name' => 'Български - Bulgarian', 'name' => 'Български - Bulgarian',
'locale' => array('bg_BG.UTF-8', 'bg_BG', 'bulgarian'), 'locale' => array(
'locale_tag' => 'bg', '0' => 'bg_BG.UTF-8',
'locale_dir' => 'ltr', '1' => 'bg_BG',
'system' => array( '2' => 'bulgarian',
'title' => 'Мониторинг', ),
'install' => 'Инсталация', 'locale_tag' => 'bg',
'action' => 'Действие', 'locale_dir' => 'ltr',
'save' => 'Запиши', 'system' => array(
'edit' => 'Редактирай', 'title' => 'Мониторинг',
'delete' => 'Изтрий', 'install' => 'Инсталация',
'date' => 'Дата', 'action' => 'Действие',
'message' => 'Съобщение', 'save' => 'Запиши',
'yes' => 'Да', 'edit' => 'Редактирай',
'no' => 'Не', 'delete' => 'Изтрий',
'insert' => 'Добавяне', 'date' => 'Дата',
'add_new' => 'Добави нов', 'message' => 'Съобщение',
'update_available' => 'Налична е нова версия: ({version}). Може да я свалите от <a href="https://github.com/phpservermon/phpservermon/releases/latest" target="_blank" rel="noopener">тук</a>.', 'yes' => 'Да',
'back_to_top' => 'Нагоре', 'no' => 'Не',
'go_back' => 'Назад', 'insert' => 'Добавяне',
'ok' => 'Ок', 'add_new' => 'Добави нов',
'cancel' => 'Отказ', 'update_available' => 'Налична е нова версия: ({version}). Може да я свалите
// date/time са във формат според параметъра strftime PHP функцията http://php.net/manual/function.strftime.php от <a href="https://github.com/phpservermon/phpservermon/releases/latest"
'short_day_format' => '%B %e', target="_blank" rel="noopener">тук</a>.',
'long_day_format' => '%B %e, %Y', 'back_to_top' => 'Нагоре',
'yesterday_format' => 'Вчера в %k:%M', 'go_back' => 'Назад',
'other_day_format' => '%A в %k:%M', 'ok' => 'Ок',
'never' => 'Никога', 'cancel' => 'Отказ',
'hours_ago' => 'преди %d часа', 'short_day_format' => '%B %e',
'an_hour_ago' => 'преди час', 'long_day_format' => '%B %e, %Y',
'minutes_ago' => 'преди %d минути', 'yesterday_format' => 'Вчера в %k:%M',
'a_minute_ago' => 'преди минута', 'other_day_format' => '%A в %k:%M',
'seconds_ago' => 'преди %d секунди', 'never' => 'Никога',
'a_second_ago' => 'преди секунда', 'hours_ago' => 'преди %d часа',
'year' => 'year', 'an_hour_ago' => 'преди час',
'years' => 'years', 'minutes_ago' => 'преди %d минути',
'month' => 'month', 'a_minute_ago' => 'преди минута',
'months' => 'months', 'seconds_ago' => 'преди %d секунди',
'day' => 'day', 'a_second_ago' => 'преди секунда',
'days' => 'days', ),
'hour' => 'hour', 'menu' => array(
'hours' => 'hours', 'config' => 'Настройки',
'minute' => 'minute', 'server' => 'Сървъри',
'minutes' => 'minutes', 'server_log' => 'Логове',
'second' => 'second', 'server_status' => 'Статус',
'seconds' => 'seconds', 'server_update' => 'Обнови данните',
), 'user' => 'Потребители',
'menu' => array( 'help' => 'Помощ',
'config' => 'Настройки', ),
'server' => 'Сървъри', 'users' => array(
'server_log' => 'Логове', 'user' => 'Потребител',
'server_status' => 'Статус', 'name' => 'Име',
'server_update' => 'Обнови данните', 'user_name' => 'Потребител',
'user' => 'Потребители', 'password' => 'Парола',
'help' => 'Помощ', 'password_repeat' => 'Повторете паролата',
), 'password_leave_blank' => 'Оставете празно, за да не бъде променена
'users' => array( паролата',
'user' => 'Потребител', 'level' => 'Ниво на достъп',
'name' => 'Име', 'level_10' => 'Администратор',
'user_name' => 'Потребител', 'level_20' => 'Потребител',
'password' => 'Парола', 'level_description' => '<b>Администраторите</b> имат пълен достъп: могат
'password_repeat' => 'Повторете паролата', да управляват сървърите, потребителите и да
'password_leave_blank' => 'Оставете празно, за да не бъде променена паролата', редактират глобалните
'level' => 'Ниво на достъп', настройки.<br><b>Потребителите</b> могат само да
'level_10' => 'Администратор', виждат статуса на сървърите и да обнояват
'level_20' => 'Потребител', информацията за даден сървър, за който им е
'level_description' => '<b>Администраторите</b> имат пълен достъп: могат да управляват сървърите, потребителите и да редактират глобалните настройки.<br><b>Потребителите</b> могат само да виждат статуса на сървърите и да обнояват информацията за даден сървър, за който им е разрешен достъп.', разрешен достъп.',
'mobile' => 'Мобилен телефон', 'mobile' => 'Мобилен телефон',
'email' => 'Имейл', 'email' => 'Имейл',
'pushover' => 'Pushover', 'pushover' => 'Pushover',
'pushover_description' => 'Pushover е услуга, която улеснява получаването на известия в реално време. Посетете <a href="https://pushover.net/">техния сайт</a> за повече информация.', 'pushover_description' => 'Pushover е услуга, която улеснява получаването на
'pushover_key' => 'Pushover Ключ', известия в реално време. Посетете <a
'pushover_device' => 'Pushover Устройство', href="https://pushover.net/" target="_blank">техния сайт</a> за
'pushover_device_description' => 'Име на устройство, което да получава съобщение. Оставете празно, за изпращане до всички устройства.', повече информация.',
'delete_title' => 'Изтриване на потребител', 'pushover_key' => 'Pushover Ключ',
'delete_message' => 'Сигурни ли сте, че искате да изтриете потребител \'%1\'?', 'pushover_device' => 'Pushover Устройство',
'deleted' => 'Потребителят е изтрит успешно.', 'pushover_device_description' => 'Име на устройство, което да получава
'updated' => 'Информацията за потребителя е обновена.', съобщение. Оставете празно, за изпращане
'inserted' => 'Потребителят е добавен.', до всички устройства.',
'profile' => 'Профил', 'delete_title' => 'Изтриване на потребител',
'profile_updated' => 'Профилът е обновен успешно', 'delete_message' => 'Сигурни ли сте, че искате да изтриете потребител
'error_user_name_bad_length' => 'Потребителското име трябва да съдържа между 2 и 64 символа', \'%1\'?',
'error_user_name_invalid' => 'Може да съдържа само латински букви (a-z, A-Z), цифри (0-9), точка (.) и долна черта (_).', 'deleted' => 'Потребителят е изтрит успешно.',
'error_user_name_exists' => 'Вече съществува акаунт с това потребителско име.', 'updated' => 'Информацията за потребителя е обновена.',
'error_user_email_bad_length' => 'Имейл адреса трябва да съдържа между 5 и 255 символа.', 'inserted' => 'Потребителят е добавен.',
'error_user_email_invalid' => 'Въведения имейл адрес е грешен.', 'profile' => 'Профил',
'error_user_level_invalid' => 'Избраното ниво на достъп е грешно.', 'profile_updated' => 'Профилът е обновен успешно',
'error_user_no_match' => 'Потребителят не може да бъде намерен.', 'error_user_name_bad_length' => 'Потребителското име трябва да съдържа
'error_user_password_invalid' => 'Въведената парола е грешка.', между 2 и 64 символа',
'error_user_password_no_match' => 'Въведените пароли не съвпадат.', 'error_user_name_invalid' => 'Може да съдържа само латински букви (a-z, A-Z),
), цифри (0-9), точка (.) и долна черта (_).',
'log' => array( 'error_user_name_exists' => 'Вече съществува акаунт с това потребителско
'title' => 'Записи в лога', име.',
'type' => 'Тип', 'error_user_email_bad_length' => 'Имейл адреса трябва да съдържа между 5 и 255
'status' => 'Статус', символа.',
'email' => 'Имейл', 'error_user_email_invalid' => 'Въведения имейл адрес е грешен.',
'sms' => 'SMS', 'error_user_level_invalid' => 'Избраното ниво на достъп е грешно.',
'pushover' => 'Pushover', 'error_user_no_match' => 'Потребителят не може да бъде намерен.',
'no_logs' => 'Няма налични логове', 'error_user_password_invalid' => 'Въведената парола е грешка.',
'clear' => 'Изчистване на дневника', 'error_user_password_no_match' => 'Въведените пароли не съвпадат.',
'delete_title' => 'Изтриване на дневника', ),
'delete_message' => 'Наистина ли искате да изтриете <b>всички</b> дневници?', 'log' => array(
), 'title' => 'Записи в лога',
'servers' => array( 'type' => 'Тип',
'server' => 'Сървър', 'status' => 'Статус',
'status' => 'Статус', 'email' => 'Имейл',
'label' => 'Име', 'sms' => 'SMS',
'domain' => 'Хост', 'pushover' => 'Pushover',
'timeout' => 'Изчакване', 'no_logs' => 'Няма налични логове',
'timeout_description' => 'Брой секунди, който да изчака отговор от сървъра', 'clear' => 'Изчистване на дневника',
'port' => 'Порт', 'delete_title' => 'Изтриване на дневника',
'type' => 'Тип', 'delete_message' => 'Наистина ли искате да изтриете <b>всички</b>
'type_website' => 'Сайт', дневници?',
'type_service' => 'Услуга', ),
'pattern' => 'Търсене на стринг/образец', 'servers' => array(
'pattern_description' => 'Ако този текст не е намерен в интернет страницата (когато имате добавен сайт), той ще бъде маркиран като Офлайн. Регулярните изрази са разрешени.', 'server' => 'Сървър',
'last_check' => 'Последна проверка', 'status' => 'Статус',
'last_online' => 'Последно на линия', 'label' => 'Име',
'last_offline' => 'Last offline', 'domain' => 'Хост',
'monitoring' => 'Мониторинг', 'timeout' => 'Изчакване',
'no_monitoring' => 'Не се наблюдава', 'timeout_description' => 'Брой секунди, който да изчака отговор от
'email' => 'Имейл', сървъра',
'send_email' => 'Имейл', 'port' => 'Порт',
'sms' => 'SMS', 'type' => 'Тип',
'send_sms' => 'SMS', 'type_website' => 'Сайт',
'pushover' => 'Pushover', 'type_service' => 'Услуга',
'users' => 'Потребители', 'pattern' => 'Търсене на стринг/образец',
'delete_title' => 'Изтриване на сървър', 'pattern_description' => 'Ако този текст не е намерен в интернет
'delete_message' => 'Сигурни ли сте, че искате да изтриете сървър \'%1\'?', страницата (когато имате добавен сайт), той ще
'deleted' => 'Сървъра е изтрит успешно.', бъде маркиран като Офлайн. Регулярните изрази
'updated' => 'Информацията за сървъра е обновена.', са разрешени.',
'inserted' => 'Сървърът е добавен успешно.', 'last_check' => 'Последна проверка',
'latency' => 'Латенция', 'last_online' => 'Последно на линия',
'latency_max' => 'Латенция (максимална)', 'last_offline' => 'Last offline',
'latency_min' => 'Латенция (минимална)', 'monitoring' => 'Мониторинг',
'latency_avg' => 'Латенция (средна)', 'no_monitoring' => 'Не се наблюдава',
'uptime' => 'Ъптайм', 'email' => 'Имейл',
'year' => 'Година', 'send_email' => 'Имейл',
'month' => 'Месец', 'sms' => 'SMS',
'week' => 'Седмица', 'send_sms' => 'SMS',
'day' => 'Ден', 'pushover' => 'Pushover',
'hour' => 'Час', 'users' => 'Потребители',
'warning_threshold' => 'Предупредителен праг', 'delete_title' => 'Изтриване на сървър',
'warning_threshold_description' => 'Брой неуспешни проверки, преди сървъра или сайта да бъдат маркирани като Офлайн.', 'delete_message' => 'Сигурни ли сте, че искате да изтриете сървър \'%1\'?',
'chart_last_week' => 'Последната седмица', 'deleted' => 'Сървъра е изтрит успешно.',
'chart_history' => 'История', 'updated' => 'Информацията за сървъра е обновена.',
// Charts формат на датата според jqPlot http://www.jqplot.com/docs/files/plugins/jqplot-dateAxisRenderer-js.html 'inserted' => 'Сървърът е добавен успешно.',
'chart_day_format' => '%d.%m.%Y', 'latency' => 'Латенция',
'chart_long_date_format' => '%d.%m.%Y %H:%M:%S', 'latency_max' => 'Латенция (максимална)',
'chart_short_date_format' => '%d.%m %H:%M', 'latency_min' => 'Латенция (минимална)',
'chart_short_time_format' => '%H:%M', 'latency_avg' => 'Латенция (средна)',
'warning_notifications_disabled_sms' => 'SMS известията са изключени.', 'uptime' => 'Ъптайм',
'warning_notifications_disabled_email' => 'Имейл известията са изключени.', 'year' => 'Година',
'warning_notifications_disabled_pushover' => 'Pushover известията са изключени.', 'month' => 'Месец',
'error_server_no_match' => 'Сървърът не е намерен.', 'week' => 'Седмица',
'error_server_label_bad_length' => 'Името трябва да е между 1 и 255 символа.', 'day' => 'Ден',
'error_server_ip_bad_length' => 'Хоста/IP адреса трябва да е между 1 и 255 символа.', 'hour' => 'Час',
'error_server_ip_bad_service' => 'IP адреса е невалиден.', 'warning_threshold' => 'Предупредителен праг',
'error_server_ip_bad_website' => 'Сайта е невалиден.', 'warning_threshold_description' => 'Брой неуспешни проверки, преди сървъра
'error_server_type_invalid' => 'Избраният тип сървър е невалиден.', или сайта да бъдат маркирани като
'error_server_warning_threshold_invalid' => 'Броя неуспешни проверки, преди сървъра или сайта да бъдат маркирани като Офлайн трябва да е цифра по-голяма от 0.', Офлайн.',
), 'chart_last_week' => 'Последната седмица',
'config' => array( 'chart_history' => 'История',
'general' => 'Основни настройки', 'chart_day_format' => '%d.%m.%Y',
'language' => 'Език', 'chart_long_date_format' => '%d.%m.%Y %H:%M:%S',
'show_update' => 'Да проверява ли за нова версия всяка седмица', 'chart_short_date_format' => '%d.%m %H:%M',
'email_status' => 'Да се изпращат ли имейли', 'chart_short_time_format' => '%H:%M',
'email_from_email' => 'Имейл, от който да се изпращат съобщенията', 'warning_notifications_disabled_sms' => 'SMS известията са изключени.',
'email_from_name' => 'Име на изпращача', 'warning_notifications_disabled_email' => 'Имейл известията са изключени.',
'email_smtp' => 'Активиране на SMTP', 'warning_notifications_disabled_pushover' => 'Pushover известията са изключени.',
'email_smtp_host' => 'SMTP сървър', 'error_server_no_match' => 'Сървърът не е намерен.',
'email_smtp_port' => 'SMTP порт', 'error_server_label_bad_length' => 'Името трябва да е между 1 и 255 символа.',
'email_smtp_security' => 'SMTP security', 'error_server_ip_bad_length' => 'Хоста/IP адреса трябва да е между 1 и 255
'email_smtp_security_none' => 'None', символа.',
'email_smtp_username' => 'SMTP потребителско име', 'error_server_ip_bad_service' => 'IP адреса е невалиден.',
'email_smtp_password' => 'SMTP парола', 'error_server_ip_bad_website' => 'Сайта е невалиден.',
'email_smtp_noauth' => 'Оставете празно за "без аутентикация"', 'error_server_type_invalid' => 'Избраният тип сървър е невалиден.',
'sms_status' => 'Да се изпращат ли SMS-и', 'error_server_warning_threshold_invalid' => 'Броя неуспешни проверки, преди
'sms_gateway' => 'Портал за изпращане на SMS-и', сървъра или сайта да бъдат
'sms_gateway_username' => 'Потребител', маркирани като Офлайн трябва да е
'sms_gateway_password' => 'Парола', цифра по-голяма от 0.',
'sms_from' => 'Номер на изпращача', ),
'pushover_status' => 'Позволява изпращането на Pushover съобщения', 'config' => array(
'pushover_description' => 'Pushover е услуга, която улеснява получаването на известия в реално време. Посетете <a href="https://pushover.net/">техния сайт</a> за повече информация.', 'general' => 'Основни настройки',
'pushover_clone_app' => 'Кликнете тук за да създаване на вашият Pushover App', 'language' => 'Език',
'pushover_api_token' => 'Pushover App API Token', 'show_update' => 'Да проверява ли за нова версия всяка седмица',
'pushover_api_token_description' => 'Преди да използвате Pushover, трябва да <a href="%1$s" target="_blank" rel="noopener">регистрирате свой App</a> в техния сайт и въведете вашия App API Token тук.', 'email_status' => 'Да се изпращат ли имейли',
'alert_type' => 'Изберете кога желаете да получавате известия', 'email_from_email' => 'Имейл, от който да се изпращат съобщенията',
'alert_type_description' => '<b>Промяна на сатуса:</b><br>'. 'email_from_name' => 'Име на изпращача',
'Ще получавате известие когато има промяна със връзката на даден някой от описаните сървър или сайт. От Онлайн -> Офлайн и от Офлайн -> Онлайн.<br>'. 'email_smtp' => 'Активиране на SMTP',
'<br><b>Офлайн</b><br>'. 'email_smtp_host' => 'SMTP сървър',
'Ще получите известие когато връзката до сървъра е изгубена за *ПЪРВИ ПЪТ*. Например, '. 'email_smtp_port' => 'SMTP порт',
'вашия cron скрипт проверява всеки 15 минути и връзката до сървъра е изгубена в 1 часа през нощта и не работи до 6 часа сутринта '. 'email_smtp_security' => 'SMTP security',
'Вие ще получите едно известие в 1 часа за това<br>'. 'email_smtp_security_none' => 'None',
'<br><b>Винаги:</b><br> '. 'email_smtp_username' => 'SMTP потребителско име',
'Ще получавате известие при всяка проверка на Вашия крон скрипт дори когато връзката до даден сървър или сайт е била прекъсната в продължение на часове.', 'email_smtp_password' => 'SMTP парола',
'alert_type_status' => 'Промяна на статуса', 'email_smtp_noauth' => 'Оставете празно за "без аутентикация"',
'alert_type_offline' => 'Офлайн', 'sms_status' => 'Да се изпращат ли SMS-и',
'alert_type_always' => 'Винаги', 'sms_gateway' => 'Портал за изпращане на SMS-и',
'log_status' => 'Статус на логовете', 'sms_gateway_username' => 'Потребител',
'log_status_description' => 'Ако е отметнато, системата ще записва всяка промяна.', 'sms_gateway_password' => 'Парола',
'log_email' => 'Да се пази ли лог на изпратените имейли от системата', 'sms_from' => 'Номер на изпращача',
'log_sms' => 'Да се пази ли лог на изпратените SMS съобщения от системата', 'pushover_status' => 'Позволява изпращането на Pushover съобщения',
'log_pushover' => 'Log pushover messages sent by the script', 'pushover_description' => 'Pushover е услуга, която улеснява получаването на
'updated' => 'Настройките са обновени успешно.', известия в реално време. Посетете <a
'tab_email' => 'Имейл', href="https://pushover.net/" target="_blank">техния сайт</a> за
'tab_sms' => 'SMS', повече информация.',
'tab_pushover' => 'Pushover', 'pushover_clone_app' => 'Кликнете тук за да създаване на вашият Pushover App',
'settings_email' => 'Имейл настройки', 'pushover_api_token' => 'Pushover App API Token',
'settings_sms' => 'SMS настройки', 'pushover_api_token_description' => 'Преди да използвате Pushover, трябва да <a
'settings_pushover' => 'Pushover настройки', href="%1$s" target="_blank" rel="noopener">регистрирате
'settings_notification' => 'Настройки на известията', свой App</a> в техния сайт и въведете вашия
'settings_log' => 'Настройки на логовете', App API Token тук.',
'auto_refresh' => 'Автоматично опресняване', 'alert_type' => 'Изберете кога желаете да получавате известия',
'auto_refresh_description' => 'alert_type_description' => '<b>Промяна на сатуса:</b><br>Ще получавате
'Автоматично опресняване на страницата.<br>'. известие когато има промяна със връзката на
'<span class="small">'. даден някой от описаните сървър или сайт. От
'Времето е в секунди, ако е 0 страницата няма да се обновява.'. Онлайн -> Офлайн и от Офлайн ->
'</span>', Онлайн.<br><br><b>Офлайн</b><br>Ще получите
'seconds' => 'секунди', известие когато връзката до сървъра е
'test' => 'Тест', изгубена за *ПЪРВИ ПЪТ*. Например, вашия cron
'test_email' => 'Ще бъде изпратенo тестово съобщение до имейл адреса, който сте задали в профила си.', скрипт проверява всеки 15 минути и връзката
'test_sms' => 'Ще бъде изпратен тестово SMS съобщение до телефонния номер, който сте задали в профила си.', до сървъра е изгубена в 1 часа през нощта и не
'test_pushover' => 'Pushover известоята ще бъдат изпратени до потребителски ключ/устройство посочено във вашият профил.', работи до 6 часа сутринта Вие ще получите
'send' => 'Изпрати', едно известие в 1 часа за
'test_subject' => 'Тестово съобщение', това<br><br><b>Винаги:</b><br> Ще получавате
'test_message' => 'Тестово съобщение изпртено от PHP Сървър мониторинг', известие при всяка проверка на Вашия крон
'email_sent' => 'Тестовия имейл е изпратен успешно.', скрипт дори когато връзката до даден сървър
'email_error' => 'Възникна грешка при изпращането на тесовия имейл', или сайт е била прекъсната в продължение на
'sms_sent' => 'Тестовото SMS съобщение е изпратеното успешно.', часове.',
'sms_error' => 'Възникна грешка при изпращането на тестовия SMS. %s', 'alert_type_status' => 'Промяна на статуса',
'sms_error_nomobile' => 'Неуспешно изпращане на тестов SMS: не е намерен валиден телефонен номер във вашия профил.', 'alert_type_offline' => 'Офлайн',
'pushover_sent' => 'Pushover тестово известие', 'alert_type_always' => 'Винаги',
'pushover_error' => 'Възникна грешка при изпращане на тестово Pushover известие: %s', 'log_status' => 'Статус на логовете',
'pushover_error_noapp' => 'Unable to send test notification: не е зададен валиден Pushover App API token в настройките.', 'log_status_description' => 'Ако е отметнато, системата ще записва всяка
'pushover_error_nokey' => 'Unable to send test notification: не е зададен валиден Pushover ключ във вашия профил.', промяна.',
'log_retention_period' => 'Период на съхранение на логовете', 'log_email' => 'Да се пази ли лог на изпратените имейли от
'log_retention_period_description' => 'Какъв брой дни да се пазят логовете от известията и архиви за ъптайм на сървърите. Въведете 0 ако желаете логовете да не се трият.', системата',
'log_retention_days' => 'дни', 'log_sms' => 'Да се пази ли лог на изпратените SMS съобщения от
), системата',
// За нов ред в имейл съобщението, моля използвайте тага <br> 'log_pushover' => 'Log pushover messages sent by the script',
'notifications' => array( 'updated' => 'Настройките са обновени успешно.',
'off_sms' => 'Сървър \'%LABEL%\' е Офлайн: ip=%IP%, port=%PORT%. Greshka=%ERROR%', 'tab_email' => 'Имейл',
'off_email_subject' => 'Връзката до \'%LABEL%\' е ИЗГУБЕНА', 'tab_sms' => 'SMS',
'off_email_body' => "Неуспешно свързване:<br><br>Сървър: %LABEL%<br>IP адрес: %IP%<br>Порт: %PORT%<br>Грешка: %ERROR%<br>Днес: %DATE%", 'tab_pushover' => 'Pushover',
'off_pushover_title' => 'Връзката до \'%LABEL%\' е ИЗГУБЕНА', 'settings_email' => 'Имейл настройки',
'off_pushover_message' => "Неуспешно свързване:<br><br>Сървър: %LABEL%<br>IP адрес: %IP%<br>Порт: %PORT%<br>Грешка: %ERROR%<br>Днес: %DATE%", 'settings_sms' => 'SMS настройки',
'on_sms' => 'Сървър \'%LABEL%\' е Онлайн: ip=%IP%, port=%PORT%, it was down for %LAST_OFFLINE_DURATION%', 'settings_pushover' => 'Pushover настройки',
'on_email_subject' => 'Връзката до \'%LABEL%\' е ВЪЗСТАНОВЕНА', 'settings_notification' => 'Настройки на известията',
'on_email_body' => "Връзката до '%LABEL%' беше ВЪЗСТАНОВЕНА, it was down for %LAST_OFFLINE_DURATION%:<br><br>Сървър: %LABEL%<br>IP адрес: %IP%<br>Порт: %PORT%<br>Днес: %DATE%", 'settings_log' => 'Настройки на логовете',
'on_pushover_title' => 'Връзката до \'%LABEL%\' е ВЪЗСТАНОВЕНА', 'auto_refresh' => 'Автоматично опресняване',
'on_pushover_message' => "Връзката до '%LABEL%' беше ВЪЗСТАНОВЕНА, it was down for %LAST_OFFLINE_DURATION%:<br><br>Сървър: %LABEL%<br>IP адрес: %IP%<br>Порт: %PORT%<br>Днес: %DATE%", 'auto_refresh_description' => 'Автоматично опресняване на
), страницата.<br><span class="small">Времето е в
'login' => array( секунди, ако е 0 страницата няма да се
'welcome_usermenu' => 'Добре дошъл, %user_name%', обновява.</span>',
'title_sign_in' => 'Моля, влезте с профила си', 'seconds' => 'секунди',
'title_forgot' => 'Забравили сте паролата си?', 'test' => 'Тест',
'title_reset' => 'Възстановяване на паролата', 'test_email' => 'Ще бъде изпратенo тестово съобщение до имейл
'submit' => 'Вход', адреса, който сте задали в профила си.',
'remember_me' => 'Искам да остана логнат', 'test_sms' => 'Ще бъде изпратен тестово SMS съобщение до телефонния
'login' => 'Вход', номер, който сте задали в профила си.',
'logout' => 'Изход', 'test_pushover' => 'Pushover известоята ще бъдат изпратени до
'username' => 'Потребител', потребителски ключ/устройство посочено във
'password' => 'Парола', вашият профил.',
'password_repeat' => 'Повторете паролата', 'send' => 'Изпрати',
'password_forgot' => 'Забравили сте паролата си?', 'test_subject' => 'Тестово съобщение',
'password_reset' => 'Възстановяване на паролата', 'test_message' => 'Тестово съобщение изпртено от PHP Сървър
'password_reset_email_subject' => 'Възстановяване на парола за PHP Сървър Мониторинг', мониторинг',
'password_reset_email_body' => 'За да възстановите паролата си е нужно да кликнете на линка по-долу. Валидността на линка е един час.<br><br>%link%', 'email_sent' => 'Тестовия имейл е изпратен успешно.',
'error_user_incorrect' => 'Потребителят не може да бъде намерен.', 'email_error' => 'Възникна грешка при изпращането на тесовия имейл',
'error_login_incorrect' => 'Информацията е грешна.', 'sms_sent' => 'Тестовото SMS съобщение е изпратеното успешно.',
'error_login_passwords_nomatch' => 'Паролите не съвпадат.', 'sms_error' => 'Възникна грешка при изпращането на тестовия SMS. %s',
'error_reset_invalid_link' => 'Линкът за възстановяване на паролата не е валиден.', 'sms_error_nomobile' => 'Неуспешно изпращане на тестов SMS: не е намерен
'success_password_forgot' => 'Изпратен е имейл с информация за възстановяване на паролата.', валиден телефонен номер във вашия профил.',
'success_password_reset' => 'Вашата парола е променена успешно. Моля, влезте в системата.', 'pushover_sent' => 'Pushover тестово известие',
), 'pushover_error' => 'Възникна грешка при изпращане на тестово Pushover
'error' => array( известие: %s',
'401_unauthorized' => 'Неоторизиран достъп', 'pushover_error_noapp' => 'Unable to send test notification: не е зададен валиден Pushover
'401_unauthorized_description' => 'Нямате нужното ниво на достъп за да прегледате тази страница.', App API token в настройките.',
), 'pushover_error_nokey' => 'Unable to send test notification: не е зададен валиден Pushover
ключ във вашия профил.',
'log_retention_period' => 'Период на съхранение на логовете',
'log_retention_period_description' => 'Какъв брой дни да се пазят логовете от
известията и архиви за ъптайм на
сървърите. Въведете 0 ако желаете
логовете да не се трият.',
'log_retention_days' => 'дни',
),
'notifications' => array(
'off_sms' => 'Сървър \'%LABEL%\' е Офлайн: ip=%IP%, port=%PORT%. Greshka=%ERROR%',
'off_email_subject' => 'Връзката до \'%LABEL%\' е ИЗГУБЕНА',
'off_email_body' => 'Неуспешно свързване:<br><br>Сървър: %LABEL%<br>IP адрес:
%IP%<br>Порт: %PORT%<br>Грешка: %ERROR%<br>Днес: %DATE%',
'off_pushover_title' => 'Връзката до \'%LABEL%\' е ИЗГУБЕНА',
'off_pushover_message' => 'Неуспешно свързване:<br><br>Сървър: %LABEL%<br>IP
адрес: %IP%<br>Порт: %PORT%<br>Грешка: %ERROR%<br>Днес: %DATE%',
'on_sms' => 'Сървър \'%LABEL%\' е Онлайн: ip=%IP%, port=%PORT%, it was down for
%LAST_OFFLINE_DURATION%',
'on_email_subject' => 'Връзката до \'%LABEL%\' е ВЪЗСТАНОВЕНА',
'on_email_body' => 'Връзката до \'%LABEL%\' беше ВЪЗСТАНОВЕНА, it was down for
%LAST_OFFLINE_DURATION%:<br><br>Сървър: %LABEL%<br>IP адрес: %IP%<br>Порт:
%PORT%<br>Днес: %DATE%',
'on_pushover_title' => 'Връзката до \'%LABEL%\' е ВЪЗСТАНОВЕНА',
'on_pushover_message' => 'Връзката до \'%LABEL%\' беше ВЪЗСТАНОВЕНА, it was down for
%LAST_OFFLINE_DURATION%:<br><br>Сървър: %LABEL%<br>IP адрес:
%IP%<br>Порт: %PORT%<br>Днес: %DATE%',
),
'login' => array(
'welcome_usermenu' => 'Добре дошъл, %user_name%',
'title_sign_in' => 'Моля, влезте с профила си',
'title_forgot' => 'Забравили сте паролата си?',
'title_reset' => 'Възстановяване на паролата',
'submit' => 'Вход',
'remember_me' => 'Искам да остана логнат',
'login' => 'Вход',
'logout' => 'Изход',
'username' => 'Потребител',
'password' => 'Парола',
'password_repeat' => 'Повторете паролата',
'password_forgot' => 'Забравили сте паролата си?',
'password_reset' => 'Възстановяване на паролата',
'password_reset_email_subject' => 'Възстановяване на парола за PHP Сървър
Мониторинг',
'password_reset_email_body' => 'За да възстановите паролата си е нужно да
кликнете на линка по-долу. Валидността на
линка е един час.<br><br>%link%',
'error_user_incorrect' => 'Потребителят не може да бъде намерен.',
'error_login_incorrect' => 'Информацията е грешна.',
'error_login_passwords_nomatch' => 'Паролите не съвпадат.',
'error_reset_invalid_link' => 'Линкът за възстановяване на паролата не е
валиден.',
'success_password_forgot' => 'Изпратен е имейл с информация за
възстановяване на паролата.',
'success_password_reset' => 'Вашата парола е променена успешно. Моля,
влезте в системата.',
),
'error' => array(
'401_unauthorized' => 'Неоторизиран достъп',
'401_unauthorized_description' => 'Нямате нужното ниво на достъп за да
прегледате тази страница.',
),
); );

View File

@ -1,4 +1,5 @@
<?php <?php
/** /**
* PHP Server Monitor * PHP Server Monitor
* Monitor your servers and websites. * Monitor your servers and websites.
@ -26,360 +27,432 @@
**/ **/
$sm_lang = array( $sm_lang = array(
'name' => 'Català - Catalan', 'name' => 'Català - Catalan',
'locale' => array( 'locale' => array(
'0' => 'ca_ES.UTF-8', '0' => 'ca_ES.UTF-8',
'1' => 'ca_ES', '1' => 'ca_ES',
'2' => 'catalan', '2' => 'catalan',
'3' => 'catalan-es', '3' => 'catalan-es',
), ),
'locale_tag' => 'ca', 'locale_tag' => 'ca',
'locale_dir' => 'ltr', 'locale_dir' => 'ltr',
'system' => array( 'system' => array(
'title' => 'Server Monitor', 'title' => 'Server Monitor',
'install' => 'Instal·lar', 'install' => 'Instal·lar',
'action' => 'Acció', 'action' => 'Acció',
'save' => 'Desar', 'save' => 'Desar',
'edit' => 'Editar', 'edit' => 'Editar',
'delete' => 'Esborrar', 'delete' => 'Esborrar',
'date' => 'Data', 'date' => 'Data',
'message' => 'Missatge', 'message' => 'Missatge',
'yes' => 'Sí', 'yes' => 'Sí',
'no' => 'No', 'no' => 'No',
'insert' => 'Inserir', 'insert' => 'Inserir',
'add_new' => 'Afegir nou', 'add_new' => 'Afegir nou',
'update_available' => 'Hi ha disponible una nova versió ({version}) a <a href="https://github.com/phpservermon/phpservermon/releases/latest" target="_blank" rel="noopener">https://github.com/phpservermon</a>.', 'update_available' => 'Hi ha disponible una nova versió ({version}) a <a
'back_to_top' => 'Tornar a dalt', href="https://github.com/phpservermon/phpservermon/releases/latest" target="_blank"
'go_back' => 'Enrere', rel="noopener">https://github.com/phpservermon</a>.',
'ok' => 'OK', 'back_to_top' => 'Tornar a dalt',
'bad' => 'dolent', 'go_back' => 'Enrere',
'cancel' => 'Cancel·lar', 'ok' => 'OK',
'none' => 'Cap', 'bad' => 'dolent',
'activate' => 'Activar', 'cancel' => 'Cancel·lar',
'advanced' => 'Avançat', 'none' => 'Cap',
'short_day_format' => '%e %B', 'activate' => 'Activar',
'long_day_format' => '%e %B %Y', 'short_day_format' => '%e %B',
'yesterday_format' => 'Ahir a les %k:%M', 'long_day_format' => '%e %B %Y',
'other_day_format' => '%A a les %k:%M', 'yesterday_format' => 'Ahir a les %k:%M',
'never' => 'Mai', 'other_day_format' => '%A a les %k:%M',
'hours_ago' => 'fa %d hores', 'never' => 'Mai',
'an_hour_ago' => 'fa una hora', 'hours_ago' => 'fa %d hores',
'minutes_ago' => 'fa %d minuts', 'an_hour_ago' => 'fa una hora',
'a_minute_ago' => 'fa un minut', 'minutes_ago' => 'fa %d minuts',
'seconds_ago' => 'fa %d segons', 'a_minute_ago' => 'fa un minut',
'a_second_ago' => 'fa un segon', 'seconds_ago' => 'fa %d segons',
'year' => 'any', 'a_second_ago' => 'fa un segon',
'years' => 'anys', 'year' => 'any',
'month' => 'mes', 'years' => 'anys',
'months' => 'mesos', 'month' => 'mes',
'day' => 'dia', 'months' => 'mesos',
'days' => 'dies', 'day' => 'dia',
'hour' => 'hora', 'days' => 'dies',
'hours' => 'hores', 'hour' => 'hora',
'minute' => 'minut', 'hours' => 'hores',
'minutes' => 'minuts', 'minute' => 'minut',
'second' => 'segon', 'minutes' => 'minuts',
'seconds' => 'segons', 'second' => 'segon',
'online' => 'en línia', 'seconds' => 'segons',
'offline' => 'fora de línia', ),
), 'menu' => array(
'menu' => array( 'config' => 'Configuració',
'config' => 'Configuració', 'server' => 'Servidors',
'server' => 'Servidors', 'server_log' => 'Log',
'server_log' => 'Log', 'server_status' => 'Estat',
'server_status' => 'Estat', 'server_update' => 'FER PING ARA',
'server_update' => 'FER PING ARA', 'user' => 'Usuaris',
'user' => 'Usuaris', 'help' => 'Ajuda',
'help' => 'Ajuda', ),
), 'users' => array(
'users' => array( 'user' => 'Usuari',
'user' => 'Usuari', 'name' => 'Nom',
'name' => 'Nom', 'user_name' => 'Nom d\'usuari',
'user_name' => 'Nom d\'usuari', 'password' => 'Contrasenya',
'password' => 'Contrasenya', 'password_repeat' => 'Repetir contrasenya',
'password_repeat' => 'Repetir contrasenya', 'password_leave_blank' => 'Deixar en blanc si no es vol canviar',
'password_leave_blank' => 'Deixar en blanc si no es vol canviar', 'level' => 'Nivell',
'level' => 'Nivell', 'level_10' => 'Administrador',
'level_10' => 'Administrador', 'level_20' => 'Usuari',
'level_20' => 'Usuari', 'level_description' => 'Els <b>administradors</b> tenen accés complet: poden administrar servidors, usuaris i
'level_description' => 'Els <b>administradors</b> tenen accés complet: poden administrar servidors, usuaris i editar la configuració general.<br/>Els <b>usuaris</b> només poden engegar actualitzacions dels servidors que els han estat assignats.', editar la configuració general.<br/>Els <b>usuaris</b> només poden engegar
'mobile' => 'Mòbil', actualitzacions dels servidors que els han estat assignats.',
'email' => 'Correu', 'mobile' => 'Mòbil',
'pushover' => 'Pushover', 'email' => 'Correu',
'pushover_description' => 'Pushover és un servei que fa fàcil obtenir notificacions en temps real. Veieu <a href="https://pushover.net/">la seva web</a> per a més informació.', 'pushover' => 'Pushover',
'pushover_key' => 'Clau Pushover', 'pushover_description' => 'Pushover és un servei que fa fàcil obtenir notificacions en temps real. Veieu <a
'pushover_device' => 'Dispositiu Pushover', href="https://pushover.net/" target="_blank">la seva web</a> per a més
'pushover_device_description' => 'Nom del dispositiu al qual enviar els missatges. Deixau en blanc per enviar a tots els dispositius.', informació.',
'telegram' => 'Telegram', 'pushover_key' => 'Clau Pushover',
'telegram_description' => '<a href="https://telegram.org/">Telegram</a> és una app de missatgeria que facilita el rebre notificacions en temps real. Consulteu la <a href="http://docs.phpservermonitor.org/">documentació</a> per a més informació i per saber com instal·lar-ho.', 'pushover_device' => 'Dispositiu Pushover',
'telegram_chat_id' => 'Codi ID del xat a Telegram', 'pushover_device_description' => 'Nom del dispositiu al qual enviar els missatges. Deixau en blanc per enviar
'telegram_chat_id_description' => 'Els missatges seran enviats al xat de Telegram amb aquest ID.', a tots els dispositius.',
'telegram_get_chat_id' => 'Premeu aquí per a obtenir el codi ID del vostre xat', 'telegram' => 'Telegram',
'activate_telegram' => 'Activar notificacions de Telegram', 'telegram_description' => '<a href="https://telegram.org/" target="_blank">Telegram</a> és una app de
'activate_telegram_description' => 'Permetre a Telegram enviar notificacions al xat amb aquest ID. Sense aquest permís, Telegram rebutjarà qualsevol missatge enviat des d\'aquesta aplicació.', missatgeria que facilita el rebre notificacions en temps real. Consulteu la <a
'telegram_bot_username_found' => 'S\'ha trobat el bot!<br><a href="%s" target="_blank"><button class="btn btn-primary">Següent pas</button></a> <br>S\'obrirà un xat amb el bot. És necessari que premeu el botó START o escriviu el comandament /start com a missatge pel bot.', href="http://docs.phpservermonitor.org/" target="_blank">documentació</a> per a
'telegram_bot_username_error_token' => '401 - No autoritzat. Assegureu-vos que el token de la API és vàlid.', més informació i per saber com instal·lar-ho.',
'telegram_bot_error' => 'Ha succeït un error mentre s\'intentava activar les notificacions amb Telegram: %s', 'telegram_chat_id' => 'Codi ID del xat a Telegram',
'delete_title' => 'Esborrar usuari', 'telegram_chat_id_description' => 'Els missatges seran enviats al xat de Telegram amb aquest ID.',
'delete_message' => 'Aquesta és una acció irreversible, n\'esteu segurs de voler esborrar l\'usuari \'%1\'?', 'telegram_get_chat_id' => 'Premeu aquí per a obtenir el codi ID del vostre xat',
'deleted' => 'Usuari esborrat.', 'activate_telegram' => 'Activar notificacions de Telegram',
'updated' => 'Usuari actualitzat.', 'activate_telegram_description' => 'Permetre a Telegram enviar notificacions al xat amb aquest ID. Sense
'inserted' => 'Usuari afegit.', aquest permís, Telegram rebutjarà qualsevol missatge enviat des
'profile' => 'Perfil', d\'aquesta aplicació.',
'profile_updated' => 'El vostre perfil ha estat actualitzat.', 'telegram_bot_username_found' => 'S\'ha trobat el bot!<br><a href="%s" target="_blank"><button class="btn
'error_user_name_bad_length' => 'El nom d\'usuari ha de tenir entre 2 i 64 caràcters.', btn-primary">Següent pas</button></a> <br>S\'obrirà un xat amb el bot. És
'error_user_name_invalid' => 'El nom d\'usuari només pot tenir caràcters alfanumèrics (a-z, A-Z), digits (0-9) i guions baixos (_).', necessari que premeu el botó START o escriviu el comandament /start com a
'error_user_name_exists' => 'Aquest nom d\'usuari ja existeix. Esculliu un altre.', missatge pel bot.',
'error_user_email_bad_length' => 'L\'adreça de correu ha de tenir entre 5 i 255 caràcters.', 'telegram_bot_username_error_token' => '401 - No autoritzat. Assegureu-vos que el token de la API és vàlid.',
'error_user_email_invalid' => 'L\'adreça de correu no és correcta.', 'telegram_bot_error' => 'Ha succeït un error mentre s\'intentava activar les notificacions amb Telegram: %s',
'error_user_level_invalid' => 'Aquest nivell d\'usuari no és vàlid.', 'delete_title' => 'Esborrar usuari',
'error_user_no_match' => 'No s\'ha trobat aquest usuari a la base de dades.', 'delete_message' => 'Aquesta és una acció irreversible, n\'esteu segurs de voler esborrar l\'usuari \'%1\'?',
'error_user_password_invalid' => 'Aquesta contrasenya no és vàlida.', 'deleted' => 'Usuari esborrat.',
'error_user_password_no_match' => 'LEs contrasenyes no coincideixen.', 'updated' => 'Usuari actualitzat.',
), 'inserted' => 'Usuari afegit.',
'log' => array( 'profile' => 'Perfil',
'title' => 'Entrades del LOG', 'profile_updated' => 'El vostre perfil ha estat actualitzat.',
'type' => 'Tipus', 'error_user_name_bad_length' => 'El nom d\'usuari ha de tenir entre 2 i 64 caràcters.',
'status' => 'Estat', 'error_user_name_invalid' => 'El nom d\'usuari només pot tenir caràcters alfanumèrics (a-z, A-Z), digits
'email' => 'Correu', (0-9) i guions baixos (_).',
'sms' => 'SMS', 'error_user_name_exists' => 'Aquest nom d\'usuari ja existeix. Esculliu un altre.',
'pushover' => 'Pushover', 'error_user_email_bad_length' => 'L\'adreça de correu ha de tenir entre 5 i 255 caràcters.',
'telegram' => 'Telegram', 'error_user_email_invalid' => 'L\'adreça de correu no és correcta.',
'no_logs' => 'No generar LOGs', 'error_user_level_invalid' => 'Aquest nivell d\'usuari no és vàlid.',
'clear' => 'Netejar LOG', 'error_user_no_match' => 'No s\'ha trobat aquest usuari a la base de dades.',
'delete_title' => 'Esborrar LOG', 'error_user_password_invalid' => 'Aquesta contrasenya no és vàlida.',
'delete_message' => 'Voleu esborrar <b>tots</b> els LOGs?', 'error_user_password_no_match' => 'LEs contrasenyes no coincideixen.',
), ),
'servers' => array( 'log' => array(
'server' => 'Servidor', 'title' => 'Entrades del LOG',
'status' => 'Estat', 'type' => 'Tipus',
'label' => 'Etiqueta', 'status' => 'Estat',
'domain' => 'Domini/IP', 'email' => 'Correu',
'timeout' => 'Timeout', 'sms' => 'SMS',
'timeout_description' => 'Nombre de segons que cal esperar a que el servidor respongui.', 'pushover' => 'Pushover',
'authentication_settings' => 'Opcions d\'autenticació (opcional)', 'telegram' => 'Telegram',
'website_username' => 'Nom d\'usuari', 'no_logs' => 'No generar LOGs',
'website_username_description' => 'Nom d\'usuari per accedir al portal web (només està soportada l\'autenticació d\'Apache).', 'clear' => 'Netejar LOG',
'website_password' => 'Contrasenya', 'delete_title' => 'Esborrar LOG',
'website_password_description' => 'Contrasenya per accedir al portal web. La contrasenya es desa encriptada a la base de dades.', 'delete_message' => 'Voleu esborrar <b>tots</b> els LOGs?',
'fieldset_monitoring' => 'Monitorització', ),
'fieldset_permissions' => 'Permisos', 'servers' => array(
'port' => 'Port', 'server' => 'Servidor',
'custom_port' => 'Port personalitzat', 'status' => 'Estat',
'popular_ports' => 'Ports populars', 'label' => 'Etiqueta',
'request_method' => 'Mètode de crida', 'domain' => 'Domini/IP',
'custom_request_method' => 'Mètode de crida personalitzat', 'timeout' => 'Timeout',
'popular_request_methods' => 'Mètodes de crida habituals', 'timeout_description' => 'Nombre de segons que cal esperar a que el servidor respongui.',
'post_field' => 'Camp POST', 'authentication_settings' => 'Opcions d\'autenticació (opcional)',
'post_field_description' => 'Els camps de dades que seran enviats emprant el mètode de crida de dalt. Exemple: param1=val1&amp;param2=val2&...', 'website_username' => 'Nom d\'usuari',
'please_select' => 'Seleccioneu', 'website_username_description' => 'Nom d\'usuari per accedir al portal web (només està soportada
'type' => 'Tipus', l\'autenticació d\'Apache).',
'type_website' => 'Website', 'website_password' => 'Contrasenya',
'type_service' => 'Servei', 'website_password_description' => 'Contrasenya per accedir al portal web. La contrasenya es desa encriptada a
'type_ping' => 'Ping', la base de dades.',
'pattern' => 'cercar cadena/patrò', 'fieldset_monitoring' => 'Monitorització',
'pattern_description' => 'Si aquest patró no es troba al lloc web, el servidor es marcarà fora de línia. Es permeten expressions regulars.', 'fieldset_permissions' => 'Permisos',
'pattern_online' => 'El patró indica que el website és', 'port' => 'Port',
'pattern_online_description' => 'En línia: si aquest patró es pot trobar en la resposta del servidor, el servidor serà marcat com en línia. Fóra de línia: si aquest patró no es pot trobar en la resposta del servidor, aquest serà marcat fóra de línia.', 'custom_port' => 'Port personalitzat',
'redirect_check' => 'El redireccionament cap a un altre domini és', 'popular_ports' => 'Ports populars',
'redirect_check_description' => 'El redireccionament cap a un altre domini habitualment és un mal senyal.', 'request_method' => 'Mètode de crida',
'allow_http_status' => 'Permetre codi d\'estat HTTP', 'custom_request_method' => 'Mètode de crida personalitzat',
'allow_http_status_description' => 'Marcar el website com en línia. Els codis d\'estat HTTP inferiors a 400 són marcats com en línia per defecte. Empreu el símbol | per separar més d\'un estat. Exemple: 401|403.', 'popular_request_methods' => 'Mètodes de crida habituals',
'header' => 'Capçalera', 'post_field' => 'Camp POST',
'header_name_description' => 'Nom de la capçalera (sensible a majúscules)', 'post_field_description' => 'Els camps de dades que seran enviats emprant el mètode de crida de dalt.
'header_value_description' => 'Valor de la capçalera. Es permeten expressions regulars.', Exemple: param1=val1&amp;param2=val2&...',
'last_check' => 'Darrera comprovació', 'please_select' => 'Seleccioneu',
'last_online' => 'Darrer cop en línia', 'type' => 'Tipus',
'last_offline' => 'Darrer cop fóra de línia', 'type_website' => 'Website',
'last_output' => 'Darrera sortida positiva', 'type_service' => 'Servei',
'last_error' => 'Darrer error', 'type_ping' => 'Ping',
'last_error_output' => 'Darrera sortida amb error', 'pattern' => 'cercar cadena/patrò',
'monitoring' => 'Monitorització', 'pattern_description' => 'Si aquest patró no es troba al lloc web, el servidor es marcarà fora de línia. Es
'no_monitoring' => 'Sense monitorització', permeten expressions regulars.',
'email' => 'Correu', 'pattern_online' => 'El patró indica que el website és',
'send_email' => 'Enviar correu', 'pattern_online_description' => 'En línia: si aquest patró es pot trobar en la resposta del servidor, el
'sms' => 'SMS', servidor serà marcat com en línia. Fóra de línia: si aquest patró no es
'send_sms' => 'Enviar SMS', pot trobar en la resposta del servidor, aquest serà marcat fóra de línia.',
'pushover' => 'Pushover', 'redirect_check' => 'El redireccionament cap a un altre domini és',
'send_pushover' => 'Enviar notificació per Pushover', 'redirect_check_description' => 'El redireccionament cap a un altre domini habitualment és un mal senyal.',
'telegram' => 'Telegram', 'allow_http_status' => 'Permetre codi d\'estat HTTP',
'send_telegram' => 'Enviar notificació per Telegram', 'allow_http_status_description' => 'Marcar el website com en línia. Els codis d\'estat HTTP inferiors a 400
'users' => 'Usuaris', són marcats com en línia per defecte. Empreu el símbol | per separar
'delete_title' => 'Esborrar servidor', més d\'un estat. Exemple: 401|403.',
'delete_message' => 'Esteu segurs de que voleu esborrar el servidor \'%1\'?', 'header_name_description' => 'Nom de la capçalera (sensible a majúscules)',
'deleted' => 'Servidor esborrat.', 'header_value_description' => 'Valor de la capçalera. Es permeten expressions regulars.',
'updated' => 'Servidor actualitzat.', 'last_check' => 'Darrera comprovació',
'inserted' => 'Servidor afegit.', 'last_online' => 'Darrer cop en línia',
'latency' => 'Latència', 'last_offline' => 'Darrer cop fóra de línia',
'latency_max' => 'Latència (màxima)', 'last_output' => 'Darrera sortida positiva',
'latency_min' => 'Latència (mínima)', 'last_error' => 'Darrer error',
'latency_avg' => 'Latència (mitjana)', 'last_error_output' => 'Darrera sortida amb error',
'uptime' => 'Temps actiu', 'monitoring' => 'Monitorització',
'year' => 'Any', 'no_monitoring' => 'Sense monitorització',
'month' => 'Mes', 'email' => 'Correu',
'week' => 'Setmana', 'send_email' => 'Enviar correu',
'day' => 'Dia', 'sms' => 'SMS',
'hour' => 'Hora', 'send_sms' => 'Enviar SMS',
'warning_threshold' => 'Llindar \'advertència', 'pushover' => 'Pushover',
'warning_threshold_description' => 'Nombre de comprovacions fallides necessàries abans de considerar el servidor fóra de línia.', 'send_pushover' => 'Enviar notificació per Pushover',
'chart_last_week' => 'Darrera setmana', 'telegram' => 'Telegram',
'chart_history' => 'Historial', 'send_telegram' => 'Enviar notificació per Telegram',
'chart_day_format' => '%Y-%m-%d', 'users' => 'Usuaris',
'chart_long_date_format' => '%Y-%m-%d %H:%M:%S', 'delete_title' => 'Esborrar servidor',
'chart_short_date_format' => '%d/%m %H:%M', 'delete_message' => 'Esteu segurs de que voleu esborrar el servidor \'%1\'?',
'chart_short_time_format' => '%H:%M', 'deleted' => 'Servidor esborrat.',
'warning_notifications_disabled_sms' => 'Les notificacions per SMS estan deshabilitades.', 'updated' => 'Servidor actualitzat.',
'warning_notifications_disabled_email' => 'Les notificacions per correu estan deshabilitades.', 'inserted' => 'Servidor afegit.',
'warning_notifications_disabled_pushover' => 'Les notificacions per Pushover estan deshabilitades.', 'latency' => 'Latència',
'warning_notifications_disabled_telegram' => 'Les notificacions per Telegram estan deshabilitades.', 'latency_max' => 'Latència (màxima)',
'error_server_no_match' => 'No s\'ha trobat el servidor.', 'latency_min' => 'Latència (mínima)',
'error_server_label_bad_length' => 'L\'etiqueta ha de tenir entre 1 i 255 caràcters.', 'latency_avg' => 'Latència (mitjana)',
'error_server_ip_bad_length' => 'El nom de domini o IP ha de tenir entre 1 i 255 caràcters.', 'uptime' => 'Temps actiu',
'error_server_ip_bad_service' => 'L\'adreça IP no és vàlida', 'year' => 'Any',
'error_server_ip_bad_website' => 'L\'adreça URL del lloc web no és vàlida.', 'month' => 'Mes',
'error_server_type_invalid' => 'El tipus de servidor escollit no és vàlid.', 'week' => 'Setmana',
'error_server_warning_threshold_invalid' => 'El llindar d\'advertència ha de ser un valor sencer positiu.', 'day' => 'Dia',
), 'hour' => 'Hora',
'config' => array( 'warning_threshold' => 'Llindar \'advertència',
'general' => 'General', 'warning_threshold_description' => 'Nombre de comprovacions fallides necessàries abans de considerar el
'language' => 'Idioma', servidor fóra de línia.',
'show_update' => 'Comprovar actualitzacions?', 'chart_last_week' => 'Darrera setmana',
'password_encrypt_key' => 'La clau per xifrar contrasenyes', 'chart_history' => 'Historial',
'password_encrypt_key_note' => 'Aquesta és la clau emprada per xifrar les contrasenyes que són emmagatzemades als servidors per accedir als llocs web. Si la clau canviés la contrasenya guardada no seria vàlida!', 'chart_day_format' => '%Y-%m-%d',
'proxy' => 'Habilitar proxy', 'chart_long_date_format' => '%Y-%m-%d %H:%M:%S',
'proxy_url' => 'URL del proxy', 'chart_short_date_format' => '%d/%m %H:%M',
'proxy_user' => 'Usuari del proxy', 'chart_short_time_format' => '%H:%M',
'proxy_password' => 'Contrasenya del proxy', 'warning_notifications_disabled_sms' => 'Les notificacions per SMS estan deshabilitades.',
'email_status' => 'Permetre l\'enviament de correus', 'warning_notifications_disabled_email' => 'Les notificacions per correu estan deshabilitades.',
'email_from_email' => 'Adreça del remitent', 'warning_notifications_disabled_pushover' => 'Les notificacions per Pushover estan deshabilitades.',
'email_from_name' => 'Nom del remitent', 'warning_notifications_disabled_telegram' => 'Les notificacions per Telegram estan deshabilitades.',
'email_smtp' => 'Habilitar SMTP', 'error_server_no_match' => 'No s\'ha trobat el servidor.',
'email_smtp_host' => 'Servidor SMTP', 'error_server_label_bad_length' => 'L\'etiqueta ha de tenir entre 1 i 255 caràcters.',
'email_smtp_port' => 'Port SMTP', 'error_server_ip_bad_length' => 'El nom de domini o IP ha de tenir entre 1 i 255 caràcters.',
'email_smtp_security' => 'Seguretat SMTP', 'error_server_ip_bad_service' => 'L\'adreça IP no és vàlida',
'email_smtp_security_none' => 'Cap', 'error_server_ip_bad_website' => 'L\'adreça URL del lloc web no és vàlida.',
'email_smtp_username' => 'Usuari SMTP', 'error_server_type_invalid' => 'El tipus de servidor escollit no és vàlid.',
'email_smtp_password' => 'Contrasenya SMTP', 'error_server_warning_threshold_invalid' => 'El llindar d\'advertència ha de ser un valor sencer positiu.',
'email_smtp_noauth' => 'Deixar en blanc si no cal autenticació', ),
'sms_status' => 'Permetre l\'enviament de missatges de text', 'config' => array(
'sms_gateway' => 'Servei \'Gateway\' per l\'enviament de SMS', 'general' => 'General',
'sms_gateway_username' => 'Usuari del Gateway', 'language' => 'Idioma',
'sms_gateway_password' => 'Contrasenya del Gateway', 'show_update' => 'Comprovar actualitzacions?',
'sms_from' => 'Numero de telèfon de qui envia', 'password_encrypt_key' => 'La clau per xifrar contrasenyes',
'pushover_status' => 'Permetre l\'enviament de missatges per Pushover', 'password_encrypt_key_note' => 'Aquesta és la clau emprada per xifrar les contrasenyes que són
'pushover_description' => 'Pushover és un servei que facilita la recepció de notificacions en temps real. Veieu <a href=\'https://pushover.net/\'>la serv web</a> per a més informació.', emmagatzemades als servidors per accedir als llocs web. Si la clau canviés la
'pushover_clone_app' => 'premeu aquí per a crear la vostra app Pushover', contrasenya guardada no seria vàlida!',
'pushover_api_token' => 'Token de la API de la App Pushover', 'proxy' => 'Habilitar proxy',
'pushover_api_token_description' => 'Abans de poder emprar Pushover necessiteu <a href="%1$s" target="_blank">registrar una app</a> al seu portal web i introduïr aquí el Token de la API.', 'proxy_url' => 'URL del proxy',
'telegram_status' => 'Permetre l\'enviament de missatges per Telegram', 'proxy_user' => 'Usuari del proxy',
'telegram_description' => '<a href="https://telegram.org/">Telegram</a> és una app de xat (mòbil i PC) que facilita la recepció de notificacions en temps real. Veieu la <a href="http://docs.phpservermonitor.org/">documentació</a> per saber més i saber com activar-ho.', 'proxy_password' => 'Contrasenya del proxy',
'telegram_api_token' => 'Token de l\'API de Telegram', 'email_status' => 'Permetre l\'enviament de correus',
'telegram_api_token_description' => 'Abans de poder emprar Telegram necessiteu obtenir un token de l\'API. Consulteu la <a href="http://docs.phpservermonitor.org/">documentació</a> per saber més.', 'email_from_email' => 'Adreça del remitent',
'alert_type' => 'Seleccioneu quan voleu ser notificats.', 'email_from_name' => 'Nom del remitent',
'alert_type_description' => '<b>Canvi d\'estat:</b> Rebreu una notificació quan un servidor tingui un canvi d\'estat. És a dir, passi d\'estar en línia a fora de línia o viceversa.<br /><br /><b>Fora de línia:</b> Rebreu una notificació només *EL PRIMER COP* que un servidor passa a estar fora de línia. Per exemple, la vostra aplicació s\'executa cada 15 minuts i el servidor esdevé fora de línia a la una de la matinada i es queda així fins les sis. llavors rebríeu només una notificació. No se us aviasarà quan torni a ser en línia.<br /><br><b>Sempre:</b> Rebreu una notificació *CADA COP* que l\'aplicació detecti que el servidor és fora de línia, fins que torni a estar en línia.', 'email_smtp' => 'Habilitar SMTP',
'alert_type_status' => 'Canvi \'estat', 'email_smtp_host' => 'Servidor SMTP',
'alert_type_offline' => 'Fora de línia', 'email_smtp_port' => 'Port SMTP',
'alert_type_always' => 'Sempre', 'email_smtp_security' => 'Seguretat SMTP',
'combine_notifications' => 'Combinar notificacions', 'email_smtp_security_none' => 'Cap',
'combine_notifications_description' => 'Redueix el nombre de notificacions en combinar-les en una de sola. (Això no afecta a les notificacions per SMS.)', 'email_smtp_username' => 'Usuari SMTP',
'alert_proxy' => 'Encara que s\'habiliti, el proxy no és emprat mai per als serveis', 'email_smtp_password' => 'Contrasenya SMTP',
'alert_proxy_url' => '<b>Format:</b> Servidor:Port', 'email_smtp_noauth' => 'Deixar en blanc si no cal autenticació',
'log_status' => 'LOG d\'estat', 'sms_status' => 'Permetre l\'enviament de missatges de text',
'log_status_description' => 'Si el LOG d\'estat es configura a SÍ, l\'aplicació enregistrarà aquells events que disparin les notificacions.', 'sms_gateway' => 'Servei \'Gateway\' per l\'enviament de SMS',
'log_email' => 'Enregistrar els correus enviats per l\'aplicació', 'sms_gateway_username' => 'Usuari del Gateway',
'log_sms' => 'Enregistrar els SMS enviats per l\'aplicació', 'sms_gateway_password' => 'Contrasenya del Gateway',
'log_pushover' => 'Enregistrar els missatges enviats a Pushover per l\'aplicació', 'sms_from' => 'Numero de telèfon de qui envia',
'log_telegram' => 'Enregistrar els missatges enviats a Telegram per l\'aplicació', 'pushover_status' => 'Permetre l\'enviament de missatges per Pushover',
'updated' => 'S\'ha actualitzat la configuració', 'pushover_description' => 'Pushover és un servei que facilita la recepció de notificacions en temps real.
'tab_email' => 'Correu', Veieu <a href=\'https://pushover.net/\'>la serv web</a> per a més informació.',
'tab_sms' => 'SMS', 'pushover_clone_app' => 'premeu aquí per a crear la vostra app Pushover',
'tab_pushover' => 'Pushover', 'pushover_api_token' => 'Token de la API de la App Pushover',
'tab_telegram' => 'Telegram', 'pushover_api_token_description' => 'Abans de poder emprar Pushover necessiteu <a href="%1$s"
'settings_email' => 'Preferències de correu', target="_blank">registrar una app</a> al seu portal web i introduïr
'settings_sms' => 'Preferències de SMS', aquí el Token de la API.',
'settings_pushover' => 'Preferències de Pushover', 'telegram_status' => 'Permetre l\'enviament de missatges per Telegram',
'settings_telegram' => 'Preferències de Telegram', 'telegram_description' => '<a href="https://telegram.org/" target="_blank">Telegram</a> és una app de xat
'settings_notification' => 'Preferències de notificacions', (mòbil i PC) que facilita la recepció de notificacions en temps real. Veieu la <a
'settings_log' => 'Preferències de LOG', href="http://docs.phpservermonitor.org/" target="_blank">documentació</a> per
'settings_proxy' => 'Preferències de Proxy', saber més i saber com activar-ho.',
'auto_refresh' => 'Auto-recàrrega', 'telegram_api_token' => 'Token de l\'API de Telegram',
'auto_refresh_description' => 'Recarregar automàticament la plana Servidors.<br/><span class="small">Temps en segons, si poseu ZERO la plana no s\'auto-recarregarà.</span>', 'telegram_api_token_description' => 'Abans de poder emprar Telegram necessiteu obtenir un token de l\'API.
'seconds' => 'segons', Consulteu la <a href="http://docs.phpservermonitor.org/"
'test' => 'Provar', target="_blank">documentació</a> per saber més.',
'test_email' => 'S\'enviarà un correu a l\'adreça que teniu al vostre perfil d\'usuari.', 'alert_type' => 'Seleccioneu quan voleu ser notificats.',
'test_sms' => 'S\'enviarà un SMS al telèfon que teniu al vostre perfil d\'usuari.', 'alert_type_description' => '<b>Canvi d\'estat:</b> Rebreu una notificació quan un servidor tingui un canvi
'test_pushover' => 'S\'enviarà una notificació per Pushover a la clau d\'usuari/dispositiu que teniu al vostre perfil d\'usuari.', d\'estat. És a dir, passi d\'estar en línia a fora de línia o viceversa.<br
'test_telegram' => 'S\'enviarà una notificació per Telegram al xat amb l\'ID que teniu al vostre perfil d\'usuari.', /><br /><b>Fora de línia:</b> Rebreu una notificació només *EL PRIMER COP* que
'send' => 'Enviar', un servidor passa a estar fora de línia. Per exemple, la vostra aplicació
'test_subject' => 'Provar', s\'executa cada 15 minuts i el servidor esdevé fora de línia a la una de la
'test_message' => 'Missatge de prova', matinada i es queda així fins les sis. llavors rebríeu només una notificació.
'email_sent' => 'Correu enviat', No se us aviasarà quan torni a ser en línia.<br /><br><b>Sempre:</b> Rebreu una
'email_error' => 'Hi ha hagut un error provant d\'enviar el correu', notificació *CADA COP* que l\'aplicació detecti que el servidor és fora de
'sms_sent' => 'Sms enviat', línia, fins que torni a estar en línia.',
'sms_error' => 'Hi ha hagut un error provant d\'enviar el SMS', 'alert_type_status' => 'Canvi \'estat',
'sms_error_nomobile' => 'No ha estat posible enviar el SMS de prova: no s\'ha trobat un telèfon vàlid al vostre perfil d\'usuari.', 'alert_type_offline' => 'Fora de línia',
'pushover_sent' => 'Notificació enviada per Pushover', 'alert_type_always' => 'Sempre',
'pushover_error' => 'Ha succeït un error provant d\'enviar la notificació Pushover: %s', 'combine_notifications' => 'Combinar notificacions',
'pushover_error_noapp' => 'No ha estat posible enviar la notificació de prova: no s\'ha trobat cap token d\'API d\'una App Pushover a la configuració general.', 'combine_notifications_description' => 'Redueix el nombre de notificacions en combinar-les en una de sola.
'pushover_error_nokey' => 'No ha estat posible enviar la notificació de prova: no s\'ha trobat cap clau Pushover al vostre perfil d\'usuari.', (Això no afecta a les notificacions per SMS.)',
'telegram_sent' => 'Notificació enviada per Telegram', 'alert_proxy' => 'Encara que s\'habiliti, el proxy no és emprat mai per als serveis',
'telegram_error' => 'Ha succeït un error provant d\'enviar la notificació per Telegram: %s', 'alert_proxy_url' => '<b>Format:</b> Servidor:Port',
'telegram_error_notoken' => 'No ha estat posible enviar la notificació de prova: no s\'ha trobat cap token d\'API de Telegram a la configuració general.', 'log_status' => 'LOG d\'estat',
'telegram_error_noid' => 'No ha estat posible enviar la notificació de prova: no s\'ha trobat cap codi ID de xat al vostre perfil d\'usuari.', 'log_status_description' => 'Si el LOG d\'estat es configura a , l\'aplicació enregistrarà aquells events
'log_retention_period' => 'Període de retenció al LOG', que disparin les notificacions.',
'log_retention_period_description' => 'Nombre de dies a conservar al LOG les notificacions i informació sobre l\'activitat dels servidors. Poseu 0 per evitar que el LOG es buidi mai.', 'log_email' => 'Enregistrar els correus enviats per l\'aplicació',
'log_retention_days' => 'dies', 'log_sms' => 'Enregistrar els SMS enviats per l\'aplicació',
), 'log_pushover' => 'Enregistrar els missatges enviats a Pushover per l\'aplicació',
'notifications' => array( 'log_telegram' => 'Enregistrar els missatges enviats a Telegram per l\'aplicació',
'off_sms' => 'El servidor \'%LABEL%\' NO RESPON: IP=%IP%, Port=%PORT%. Error=%ERROR%', 'updated' => 'S\'ha actualitzat la configuració',
'off_email_subject' => 'IMPORTANT: El servidor \'%LABEL%\' NO RESPON', 'tab_email' => 'Correu',
'off_email_body' => 'Ha fallat la connexió amb aquest servidor:<br/><br/>Servidor: %LABEL%<br/>IP: %IP%<br/>Port: %PORT%<br/>Error: %ERROR%<br/>Data: %DATE%', 'tab_sms' => 'SMS',
'off_pushover_title' => 'El servidor \'%LABEL%\' NO RESPON', 'tab_pushover' => 'Pushover',
'off_pushover_message' => 'Ha fallat la connexió amb aquest servidor:<br/><br/>Servidor: %LABEL%<br/>IP: %IP%<br/>Port: %PORT%<br/>Error: %ERROR%<br/>Data: %DATE%', 'tab_telegram' => 'Telegram',
'off_telegram_message' => 'Ha fallat la connexió amb aquest servidor:<br/><br/>Servidor: %LABEL%<br/>IP: %IP%<br/>Port: %PORT%<br/>Error: %ERROR%<br/>Data: %DATE%', 'settings_email' => 'Preferències de correu',
'on_sms' => 'El servidor \'%LABEL%\' TORNA A FUNCIONAR: ip=%IP%, port=%PORT%, temps caigut=%LAST_OFFLINE_DURATION%', 'settings_sms' => 'Preferències de SMS',
'on_email_subject' => 'IMPORTANT: el servidor \'%LABEL%\' TORNA A FUNCIONAR', 'settings_pushover' => 'Preferències de Pushover',
'on_email_body' => 'El servidor \'%LABEL%\' TORNA A FUNCIONAR:<br/><br/>Servidor: %LABEL%<br/>IP: %IP%<br/>Port: %PORT%<br/>Data: %DATE%<br/>Temps fóra de línia: %LAST_OFFLINE_DURATION%', 'settings_telegram' => 'Preferències de Telegram',
'on_pushover_title' => 'El servidor \'%LABEL%\' TORNA A FUNCIONAR', 'settings_notification' => 'Preferències de notificacions',
'on_pushover_message' => 'El servidor \'%LABEL%\' TORNA A FUNCIONAR:<br/><br/>Servidor: %LABEL%<br/>IP: %IP%<br/>Port: %PORT%<br/>Data: %DATE%<br/>Temps fóra de línia: %LAST_OFFLINE_DURATION%', 'settings_log' => 'Preferències de LOG',
'on_telegram_message' => 'El servidor \'%LABEL%\' TORNA A FUNCIONAR:<br/><br/>Servidor: %LABEL%<br/>IP: %IP%<br/>Port: %PORT%<br/>Data: %DATE%<br/>Temps fóra de línia: %LAST_OFFLINE_DURATION%', 'settings_proxy' => 'Preferències de Proxy',
'combi_off_email_message' => '<ul><li>Servidor: %LABEL%</li><li>IP: %IP%</li><li>Port: %PORT%</li><li>Error: %ERROR%</li><li>Data: %DATE%</li></ul>', 'auto_refresh' => 'Auto-recàrrega',
'combi_off_pushover_message' => '<ul><li>Servidor: %LABEL%</li><li>IP: %IP%</li><li>Port: %PORT%</li><li>Error: %ERROR%</li><li>Data: %DATE%</li></ul>', 'auto_refresh_description' => 'Recarregar automàticament la plana Servidors.<br/><span class="small">Temps en
'combi_off_telegram_message' => '- Servidor: %LABEL%<br/>- IP: %IP%<br/>- Port: %PORT%<br/>- Error: %ERROR%<br/>- Data: %DATE%<br/><br/>', segons, si poseu ZERO la plana no s\'auto-recarregarà.</span>',
'combi_on_email_message' => '<ul><li>Servidor: %LABEL%</li><li>IP: %IP%</li><li>Port: %PORT%</li><li>Data: %DATE%</li><li>Temps fóra de línia: %LAST_OFFLINE_DURATION%</li></ul>', 'seconds' => 'segons',
'combi_on_pushover_message' => '<ul><li>Servidor: %LABEL%</li><li>IP: %IP%</li><li>Port: %PORT%</li><li>Data: %DATE%</li><li>Temps fóra de línia: %LAST_OFFLINE_DURATION%</li></ul>', 'test' => 'Provar',
'combi_on_telegram_message' => '- Servidor: %LABEL%<br/>- IP: %IP%<br/>- Port: %PORT%<br/>- Data: %DATE%<br/>- Temps fóra de línia: %LAST_OFFLINE_DURATION%<br/><br/>', 'test_email' => 'S\'enviarà un correu a l\'adreça que teniu al vostre perfil d\'usuari.',
'combi_email_subject' => 'IMPORTANT: els servidors \'%UP%\' TORNEN A FUNCIONAR, els servidors \'%DOWN%\' NO RESPONEN', 'test_sms' => 'S\'enviarà un SMS al telèfon que teniu al vostre perfil d\'usuari.',
'combi_pushover_subject' => 'Els servidors \'%UP%\' TORNEN A FUNCIONAR, els servidors \'%DOWN%\' NO RESPONEN', 'test_pushover' => 'S\'enviarà una notificació per Pushover a la clau d\'usuari/dispositiu que teniu al
'combi_email_message' => '<b>Aquests servidors NO RESPONEN:</b><br/>%DOWN_SERVERS%<br/><b>Aquests servidors TORNEN A FUNCIONAR:</b><br/>%UP_SERVERS%', vostre perfil d\'usuari.',
'combi_pushover_message' => '<b>Aquests servidors NO RESPONEN:</b><br/>%DOWN_SERVERS%<br/><b>Aquests servidors TORNEN A FUNCIONAR:</b><br/>%UP_SERVERS%', 'test_telegram' => 'S\'enviarà una notificació per Telegram al xat amb l\'ID que teniu al vostre perfil
'combi_telegram_message' => '<b>Aquests servidors NO RESPONEN:</b><br/>%DOWN_SERVERS%<br/><b>Aquests servidors TORNEN A FUNCIONAR:</b><br/>%UP_SERVERS%', d\'usuari.',
), 'send' => 'Enviar',
'login' => array( 'test_subject' => 'Provar',
'welcome_usermenu' => 'Benvingut(a), %user_name%', 'test_message' => 'Missatge de prova',
'title_sign_in' => 'Credencials d\'accés', 'email_sent' => 'Correu enviat',
'title_forgot' => 'Heu oblidat la contrasenya?', 'email_error' => 'Hi ha hagut un error provant d\'enviar el correu',
'title_reset' => 'Restablir la contrasenya', 'sms_sent' => 'Sms enviat',
'submit' => 'Enviar', 'sms_error' => 'Hi ha hagut un error provant d\'enviar el SMS',
'remember_me' => 'Recorda\'m', 'sms_error_nomobile' => 'No ha estat posible enviar el SMS de prova: no s\'ha trobat un telèfon vàlid al
'login' => 'Accedir', vostre perfil d\'usuari.',
'logout' => 'Tancar sessió', 'pushover_sent' => 'Notificació enviada per Pushover',
'username' => 'Usuari', 'pushover_error' => 'Ha succeït un error provant d\'enviar la notificació Pushover: %s',
'password' => 'Contrasenya', 'pushover_error_noapp' => 'No ha estat posible enviar la notificació de prova: no s\'ha trobat cap token
'password_repeat' => 'Repetir contrasenya', d\'API d\'una App Pushover a la configuració general.',
'password_forgot' => 'Heu oblidat la contrasenya?', 'pushover_error_nokey' => 'No ha estat posible enviar la notificació de prova: no s\'ha trobat cap clau
'password_reset' => 'Restablir la contrasenya', Pushover al vostre perfil d\'usuari.',
'password_reset_email_subject' => 'Restablir la vostra contrasenya per accedir a PHP Server Monitor', 'telegram_sent' => 'Notificació enviada per Telegram',
'password_reset_email_body' => 'Empreu el següent enllaç per restablir la vostra contrasenya. Tingueu en compte que expira en 1 hora.<br/><br/>%link%', 'telegram_error' => 'Ha succeït un error provant d\'enviar la notificació per Telegram: %s',
'error_user_incorrect' => 'No s\'ha trobat l\'usuari especificat.', 'telegram_error_notoken' => 'No ha estat posible enviar la notificació de prova: no s\'ha trobat cap token
'error_login_incorrect' => 'Aquestes credencials no són vàlides.', d\'API de Telegram a la configuració general.',
'error_login_passwords_nomatch' => 'Les dues contrasenyes no coincideixen.', 'telegram_error_noid' => 'No ha estat posible enviar la notificació de prova: no s\'ha trobat cap codi ID de
'error_reset_invalid_link' => 'L\'enllaç per restablir la contrasenya no és vàlid.', xat al vostre perfil d\'usuari.',
'success_password_forgot' => 'Se us ha enviat un correu amb informació per restablir la vostra contrasenya.', 'log_retention_period' => 'Període de retenció al LOG',
'success_password_reset' => 'La vostra contrasenya s\'ha restablert amb èxit. Ja podeu entrar.', 'log_retention_period_description' => 'Nombre de dies a conservar al LOG les notificacions i informació sobre
), l\'activitat dels servidors. Poseu 0 per evitar que el LOG es buidi
'error' => array( mai.',
'401_unauthorized' => 'No-autoritzat', 'log_retention_days' => 'dies',
'401_unauthorized_description' => 'No teniu els privilegis per veure aquesta plana o potser la vostra sessió ha expirat.', ),
), 'notifications' => array(
'off_sms' => 'El servidor \'%LABEL%\' NO RESPON: IP=%IP%, Port=%PORT%. Error=%ERROR%',
'off_email_subject' => 'IMPORTANT: El servidor \'%LABEL%\' NO RESPON',
'off_email_body' => 'Ha fallat la connexió amb aquest servidor:<br/><br/>Servidor: %LABEL%<br/>IP:
%IP%<br/>Port: %PORT%<br/>Error: %ERROR%<br/>Data: %DATE%',
'off_pushover_title' => 'El servidor \'%LABEL%\' NO RESPON',
'off_pushover_message' => 'Ha fallat la connexió amb aquest servidor:<br/><br/>Servidor: %LABEL%<br/>IP:
%IP%<br/>Port: %PORT%<br/>Error: %ERROR%<br/>Data: %DATE%',
'off_telegram_message' => 'Ha fallat la connexió amb aquest servidor:<br/><br/>Servidor: %LABEL%<br/>IP:
%IP%<br/>Port: %PORT%<br/>Error: %ERROR%<br/>Data: %DATE%',
'on_sms' => 'El servidor \'%LABEL%\' TORNA A FUNCIONAR: ip=%IP%, port=%PORT%, temps
caigut=%LAST_OFFLINE_DURATION%',
'on_email_subject' => 'IMPORTANT: el servidor \'%LABEL%\' TORNA A FUNCIONAR',
'on_email_body' => 'El servidor \'%LABEL%\' TORNA A FUNCIONAR:<br/><br/>Servidor: %LABEL%<br/>IP:
%IP%<br/>Port: %PORT%<br/>Data: %DATE%<br/>Temps fóra de línia: %LAST_OFFLINE_DURATION%',
'on_pushover_title' => 'El servidor \'%LABEL%\' TORNA A FUNCIONAR',
'on_pushover_message' => 'El servidor \'%LABEL%\' TORNA A FUNCIONAR:<br/><br/>Servidor: %LABEL%<br/>IP:
%IP%<br/>Port: %PORT%<br/>Data: %DATE%<br/>Temps fóra de línia:
%LAST_OFFLINE_DURATION%',
'on_telegram_message' => 'El servidor \'%LABEL%\' TORNA A FUNCIONAR:<br/><br/>Servidor: %LABEL%<br/>IP:
%IP%<br/>Port: %PORT%<br/>Data: %DATE%<br/>Temps fóra de línia:
%LAST_OFFLINE_DURATION%',
'combi_off_email_message' => '<ul><li>Servidor: %LABEL%</li><li>IP: %IP%</li><li>Port: %PORT%</li><li>Error:
%ERROR%</li><li>Data: %DATE%</li></ul>',
'combi_off_pushover_message' => '<ul><li>Servidor: %LABEL%</li><li>IP: %IP%</li><li>Port:
%PORT%</li><li>Error: %ERROR%</li><li>Data: %DATE%</li></ul>',
'combi_off_telegram_message' => '- Servidor: %LABEL%<br/>- IP: %IP%<br/>- Port: %PORT%<br/>- Error:
%ERROR%<br/>- Data: %DATE%<br/><br/>',
'combi_on_email_message' => '<ul><li>Servidor: %LABEL%</li><li>IP: %IP%</li><li>Port: %PORT%</li><li>Data:
%DATE%</li><li>Temps fóra de línia: %LAST_OFFLINE_DURATION%</li></ul>',
'combi_on_pushover_message' => '<ul><li>Servidor: %LABEL%</li><li>IP: %IP%</li><li>Port: %PORT%</li><li>Data:
%DATE%</li><li>Temps fóra de línia: %LAST_OFFLINE_DURATION%</li></ul>',
'combi_on_telegram_message' => '- Servidor: %LABEL%<br/>- IP: %IP%<br/>- Port: %PORT%<br/>- Data: %DATE%<br/>-
Temps fóra de línia: %LAST_OFFLINE_DURATION%<br/><br/>',
'combi_email_subject' => 'IMPORTANT: els servidors \'%UP%\' TORNEN A FUNCIONAR, els servidors \'%DOWN%\' NO
RESPONEN',
'combi_pushover_subject' => 'Els servidors \'%UP%\' TORNEN A FUNCIONAR, els servidors \'%DOWN%\' NO RESPONEN',
'combi_email_message' => '<b>Aquests servidors NO RESPONEN:</b><br/>%DOWN_SERVERS%<br/><b>Aquests servidors
TORNEN A FUNCIONAR:</b><br/>%UP_SERVERS%',
'combi_pushover_message' => '<b>Aquests servidors NO RESPONEN:</b><br/>%DOWN_SERVERS%<br/><b>Aquests servidors
TORNEN A FUNCIONAR:</b><br/>%UP_SERVERS%',
'combi_telegram_message' => '<b>Aquests servidors NO RESPONEN:</b><br/>%DOWN_SERVERS%<br/><b>Aquests servidors
TORNEN A FUNCIONAR:</b><br/>%UP_SERVERS%',
),
'login' => array(
'welcome_usermenu' => 'Benvingut(a), %user_name%',
'title_sign_in' => 'Credencials d\'accés',
'title_forgot' => 'Heu oblidat la contrasenya?',
'title_reset' => 'Restablir la contrasenya',
'submit' => 'Enviar',
'remember_me' => 'Recorda\'m',
'login' => 'Accedir',
'logout' => 'Tancar sessió',
'username' => 'Usuari',
'password' => 'Contrasenya',
'password_repeat' => 'Repetir contrasenya',
'password_forgot' => 'Heu oblidat la contrasenya?',
'password_reset' => 'Restablir la contrasenya',
'password_reset_email_subject' => 'Restablir la vostra contrasenya per accedir a PHP Server Monitor',
'password_reset_email_body' => 'Empreu el següent enllaç per restablir la vostra contrasenya. Tingueu en
compte que expira en 1 hora.<br/><br/>%link%',
'error_user_incorrect' => 'No s\'ha trobat l\'usuari especificat.',
'error_login_incorrect' => 'Aquestes credencials no són vàlides.',
'error_login_passwords_nomatch' => 'Les dues contrasenyes no coincideixen.',
'error_reset_invalid_link' => 'L\'enllaç per restablir la contrasenya no és vàlid.',
'success_password_forgot' => 'Se us ha enviat un correu amb informació per restablir la vostra contrasenya.',
'success_password_reset' => 'La vostra contrasenya s\'ha restablert amb èxit. Ja podeu entrar.',
),
'error' => array(
'401_unauthorized' => 'No-autoritzat',
'401_unauthorized_description' => 'No teniu els privilegis per veure aquesta plana o potser la vostra sessió
ha expirat.',
),
); );

View File

@ -1,4 +1,5 @@
<?php <?php
/** /**
* PHP Server Monitor * PHP Server Monitor
* Monitor your servers and websites. * Monitor your servers and websites.
@ -27,295 +28,308 @@
**/ **/
$sm_lang = array( $sm_lang = array(
'name' => 'Česky - Czech', 'name' => 'Česky - Czech',
'locale' => array('cs_CZ.UTF-8', 'cs_CZ', 'czech', 'czech'), 'locale' => array(
'locale_tag' => 'cs', '0' => 'cs_CZ.UTF-8',
'locale_dir' => 'ltr', '1' => 'cs_CZ',
'system' => array( '2' => 'czech',
'title' => 'Server Monitor', '3' => 'czech',
'install' => 'Instalace', ),
'action' => 'Akce', 'locale_tag' => 'cs',
'save' => 'Uložit', 'locale_dir' => 'ltr',
'edit' => 'Upravit', 'system' => array(
'delete' => 'Smazat', 'title' => 'Server Monitor',
'date' => 'Datum', 'install' => 'Instalace',
'message' => 'Zpráva', 'action' => 'Akce',
'yes' => 'Ano', 'save' => 'Uložit',
'no' => 'Ne', 'edit' => 'Upravit',
'insert' => 'Vložit', 'delete' => 'Smazat',
'add_new' => 'Přidat', 'date' => 'Datum',
'update_available' => 'Nová verze - ({version}) je dostupná na <a href="https://github.com/phpservermon/phpservermon/releases/latest" target="_blank" rel="noopener">http://www.phpservermonitor.org</a>.', 'message' => 'Zpráva',
'back_to_top' => 'Zpět na začátek', 'yes' => 'Ano',
'go_back' => 'Zpět', 'no' => 'Ne',
'ok' => 'OK', 'insert' => 'Vložit',
'cancel' => 'Zrušit', 'add_new' => 'Přidat',
// date/time format according the strftime php function format parameter http://php.net/manual/function.strftime.php 'update_available' => 'Nová verze - ({version}) je dostupná na <a
'short_day_format' => '%B %e', href="https://github.com/phpservermon/phpservermon/releases/latest" target="_blank"
'long_day_format' => '%B %e, %Y', rel="noopener">http://www.phpservermonitor.org</a>.',
'yesterday_format' => 'Včera v %k:%M', 'back_to_top' => 'Zpět na začátek',
'other_day_format' => '%A v %k:%M', 'go_back' => 'Zpět',
'never' => 'Nikdy', 'ok' => 'OK',
'hours_ago' => 'před %d hodinami', 'cancel' => 'Zrušit',
'an_hour_ago' => 'cca před hodinou', 'short_day_format' => '%B %e',
'minutes_ago' => 'před %d minutami', 'long_day_format' => '%B %e, %Y',
'a_minute_ago' => 'cca před minutou', 'yesterday_format' => 'Včera v %k:%M',
'seconds_ago' => 'před %d vteřinami', 'other_day_format' => '%A v %k:%M',
'a_second_ago' => 'před chvílí', 'never' => 'Nikdy',
'year' => 'year', 'hours_ago' => 'před %d hodinami',
'years' => 'years', 'an_hour_ago' => 'cca před hodinou',
'month' => 'month', 'minutes_ago' => 'před %d minutami',
'months' => 'months', 'a_minute_ago' => 'cca před minutou',
'day' => 'day', 'seconds_ago' => 'před %d vteřinami',
'days' => 'days', 'a_second_ago' => 'před chvílí',
'hour' => 'hour', ),
'hours' => 'hours', 'menu' => array(
'minute' => 'minute', 'config' => 'Konfigurace',
'minutes' => 'minutes', 'server' => 'Servery',
'second' => 'second', 'server_log' => 'Log',
'seconds' => 'seconds', 'server_status' => 'Status',
), 'server_update' => 'Aktualizace',
'menu' => array( 'user' => 'Uživatelé',
'config' => 'Konfigurace', 'help' => 'Nápověda',
'server' => 'Servery', ),
'server_log' => 'Log', 'users' => array(
'server_status' => 'Status', 'user' => 'Uživatel',
'server_update' => 'Aktualizace', 'name' => 'Jméno',
'user' => 'Uživatelé', 'user_name' => 'Uživatelské jméno',
'help' => 'Nápověda', 'password' => 'Heslo',
), 'password_repeat' => 'Stejné heslo (pro kontrolu)',
'users' => array( 'password_leave_blank' => 'Ponechte prázdné pro ponechání beze změn.',
'user' => 'Uživatel', 'level' => 'Oprávnění',
'name' => 'Jméno', 'level_10' => 'Administrátor',
'user_name' => 'Uživatelské jméno', 'level_20' => 'Uživatel',
'password' => 'Heslo', 'level_description' => '<b>Administrátor</b> plný přístup: může spravovat servery, uživatele a
'password_repeat' => 'Stejné heslo (pro kontrolu)', upravit globální konfiguraci.<br><b>Uživatel</b> práva pouze na čtení a
'password_leave_blank' => 'Ponechte prázdné pro ponechání beze změn.', spustit aktualizaci serverů, které přiřazeny.',
'level' => 'Oprávnění', 'mobile' => 'Mobil',
'level_10' => 'Administrátor', 'email' => 'E-mail',
'level_20' => 'Uživatel', 'pushover' => 'Pushover',
'level_description' => '<b>Administrátor</b> má plný přístup: může spravovat servery, uživatele a upravit globální konfiguraci.<br><b>Uživatel</b> má práva pouze na čtení a spustit aktualizaci serverů, které má přiřazeny.', 'pushover_description' => 'Pushover je služba umožňující jednoduše zasílat real-time upozornění.
'mobile' => 'Mobil', Více na <a href="https://pushover.net/" target="_blank">webu Pushover</a>',
'email' => 'E-mail', 'pushover_key' => 'Pushover Token',
'pushover' => 'Pushover', 'pushover_device' => 'Pushover Zařízení',
'pushover_description' => 'Pushover je služba umožňující jednoduše zasílat real-time upozornění. Více na <a href="https://pushover.net/">webu Pushover</a>', 'pushover_device_description' => 'Název zařízení, na které být zráva odeslána. Ponechte prázdné
'pushover_key' => 'Pushover Token', pro odeslání na všechna zařízení.',
'pushover_device' => 'Pushover Zařízení', 'delete_title' => 'Smazat uživatele',
'pushover_device_description' => 'Název zařízení, na které má být zráva odeslána. Ponechte prázdné pro odeslání na všechna zařízení.', 'delete_message' => 'Opravdu smazat uživatele \'%1\'?',
'delete_title' => 'Smazat uživatele', 'deleted' => 'Uživatel smazán.',
'delete_message' => 'Opravdu smazat uživatele \'%1\'?', 'updated' => 'Uživatel aktualizován.',
'deleted' => 'Uživatel smazán.', 'inserted' => 'Uživatel přidán.',
'updated' => 'Uživatel aktualizován.', 'profile' => 'Profil',
'inserted' => 'Uživatel přidán.', 'profile_updated' => 'Váš uživatelský profil byl upraven.',
'profile' => 'Profil', 'error_user_name_bad_length' => 'Uživatelské jméno musí obsahovat 2 až 64 znaků.',
'profile_updated' => 'Váš uživatelský profil byl upraven.', 'error_user_name_invalid' => 'Uživatelské jméno může obsahovat pouze písmena (a-z, A-Z), čísla (0-9),
'error_user_name_bad_length' => 'Uživatelské jméno musí obsahovat 2 až 64 znaků.', tečky (.) a podtržítka (_).',
'error_user_name_invalid' => 'Uživatelské jméno může obsahovat pouze písmena (a-z, A-Z), čísla (0-9), tečky (.) a podtržítka (_).', 'error_user_name_exists' => 'Zadané uživatelské jméno již existuje v databázi.',
'error_user_name_exists' => 'Zadané uživatelské jméno již existuje v databázi.', 'error_user_email_bad_length' => 'E-mailová adresa musí obsahovat 5 až 255 znaků .',
'error_user_email_bad_length' => 'E-mailová adresa musí obsahovat 5 až 255 znaků .', 'error_user_email_invalid' => 'E-mailová adresa je neplatná',
'error_user_email_invalid' => 'E-mailová adresa je neplatná', 'error_user_level_invalid' => 'Zadané oprávnění je neplatné.',
'error_user_level_invalid' => 'Zadané oprávnění je neplatné.', 'error_user_no_match' => 'Uživatel nebyl nalezen.',
'error_user_no_match' => 'Uživatel nebyl nalezen.', 'error_user_password_invalid' => 'Zadané heslo je neplatné.',
'error_user_password_invalid' => 'Zadané heslo je neplatné.', 'error_user_password_no_match' => 'Zadaná hesla neodpovídají.',
'error_user_password_no_match' => 'Zadaná hesla neodpovídají.', ),
), 'log' => array(
'log' => array( 'title' => 'Záznamy logu',
'title' => 'Záznamy logu', 'type' => 'Typ',
'type' => 'Typ', 'status' => 'Stav',
'status' => 'Stav', 'email' => 'E-mail',
'email' => 'E-mail', 'sms' => 'SMS',
'sms' => 'SMS', 'pushover' => 'Pushover',
'pushover' => 'Pushover', 'no_logs' => 'Žádné záznamy',
'no_logs' => 'Žádné záznamy', 'clear' => 'Jasný protokol',
'clear' => 'Jasný protokol', 'delete_title' => 'Odstranit protokol',
'delete_title' => 'Odstranit protokol', 'delete_message' => 'Opravdu chcete odstranit protokoly <b>všechny</b>?',
'delete_message' => 'Opravdu chcete odstranit protokoly <b>všechny</b>?', ),
), 'servers' => array(
'servers' => array( 'server' => 'Server',
'server' => 'Server', 'status' => 'Stav',
'status' => 'Stav', 'label' => 'Popis',
'label' => 'Popis', 'domain' => 'Doména/IP',
'domain' => 'Doména/IP', 'timeout' => 'Časový limit',
'timeout' => 'Časový limit', 'timeout_description' => 'Počet vteřin čekání na odpověď serveru.',
'timeout_description' => 'Počet vteřin čekání na odpověď serveru.', 'authentication_settings' => 'Nastavení autentizace',
'authentication_settings' => 'Nastavení autentizace', 'optional' => 'volitelný',
'optional' => 'volitelný', 'website_username' => 'Uživatelské jméno',
'website_username' => 'Uživatelské jméno', 'website_username_description' => 'Uživatelské jméno pro přístup na stránku. (Pouze Apache autorizace je
'website_username_description' => 'Uživatelské jméno pro přístup na stránku. (Pouze Apache autorizace je podporovaná.)', podporovaná.)',
'website_password' => 'Heslo', 'website_password' => 'Heslo',
'website_password_description' => 'Heslo pro přístup na stránku. Heslo je v databázi šifrované.', 'website_password_description' => 'Heslo pro přístup na stránku. Heslo je v databázi šifrované.',
'fieldset_monitoring' => 'Monitoring', 'fieldset_monitoring' => 'Monitoring',
'fieldset_permissions' => 'Oprávnění', 'fieldset_permissions' => 'Oprávnění',
'port' => 'Port', 'port' => 'Port',
'custom_port' => 'Uživatelský Port', 'custom_port' => 'Uživatelský Port',
'popular_ports' => 'Populární Porty', 'popular_ports' => 'Populární Porty',
'please_select' => 'Prosím vyberte', 'please_select' => 'Prosím vyberte',
'type' => 'Typ', 'type' => 'Typ',
'type_website' => 'Web', 'type_website' => 'Web',
'type_service' => 'Služba', 'type_service' => 'Služba',
'pattern' => 'Vyhledat řetězec/vzorek', 'pattern' => 'Vyhledat řetězec/vzorek',
'pattern_description' => 'Pokud vzorek nebude na webu nalezen, bude server označen jako offline. Regulární výrazy jsou povoleny.', 'pattern_description' => 'Pokud vzorek nebude na webu nalezen, bude server označen jako offline. Regulární
'last_check' => 'Poslední kontrola', výrazy jsou povoleny.',
'last_online' => 'Naposledy online', 'last_check' => 'Poslední kontrola',
'last_offline' => 'Naposledy offline', 'last_online' => 'Naposledy online',
'monitoring' => 'Monitoring', 'last_offline' => 'Naposledy offline',
'no_monitoring' => 'Žádné monitorované služby', 'monitoring' => 'Monitoring',
'email' => 'E-mail', 'no_monitoring' => 'Žádné monitorované služby',
'send_email' => 'Odeslat e-mail', 'email' => 'E-mail',
'sms' => 'SMS', 'send_email' => 'Odeslat e-mail',
'send_sms' => 'Odeslat SMS', 'sms' => 'SMS',
'pushover' => 'Pushover', 'send_sms' => 'Odeslat SMS',
'users' => 'Uživatelé', 'pushover' => 'Pushover',
'delete_title' => 'Smazat server', 'users' => 'Uživatelé',
'delete_message' => 'Opravdu si přejete smazat \'%1\'?', 'delete_title' => 'Smazat server',
'deleted' => 'Server smazán.', 'delete_message' => 'Opravdu si přejete smazat \'%1\'?',
'updated' => 'Server aktualizován.', 'deleted' => 'Server smazán.',
'inserted' => 'Server přidán.', 'updated' => 'Server aktualizován.',
'latency' => 'Latence', 'inserted' => 'Server přidán.',
'latency_max' => 'Latence (maximum)', 'latency' => 'Latence',
'latency_min' => 'Latence (minimum)', 'latency_max' => 'Latence (maximum)',
'latency_avg' => 'Latence (průměr)', 'latency_min' => 'Latence (minimum)',
'uptime' => 'Uptime', 'latency_avg' => 'Latence (průměr)',
'year' => 'Rok', 'uptime' => 'Uptime',
'month' => 'Měsíc', 'year' => 'Rok',
'week' => 'Týden', 'month' => 'Měsíc',
'day' => 'Den', 'week' => 'Týden',
'hour' => 'Hodina', 'day' => 'Den',
'warning_threshold' => 'Stropní hranice varování', 'hour' => 'Hodina',
'warning_threshold_description' => 'Počet neúspěšných pokusů před označením serveru jako offline.', 'warning_threshold' => 'Stropní hranice varování',
'chart_last_week' => 'Minulý týden', 'warning_threshold_description' => 'Počet neúspěšných pokusů před označením serveru jako offline.',
'chart_history' => 'Historie', 'chart_last_week' => 'Minulý týden',
// Charts date format according jqPlot date format http://www.jqplot.com/docs/files/plugins/jqplot-dateAxisRenderer-js.html 'chart_history' => 'Historie',
'chart_day_format' => '%Y-%m-%d', 'chart_day_format' => '%Y-%m-%d',
'chart_long_date_format' => '%Y-%m-%d %H:%M:%S', 'chart_long_date_format' => '%Y-%m-%d %H:%M:%S',
'chart_short_date_format' => '%m/%d %H:%M', 'chart_short_date_format' => '%m/%d %H:%M',
'chart_short_time_format' => '%H:%M', 'chart_short_time_format' => '%H:%M',
'warning_notifications_disabled_sms' => 'SMS upozornění jsou vypnuta.', 'warning_notifications_disabled_sms' => 'SMS upozornění jsou vypnuta.',
'warning_notifications_disabled_email' => 'E-mailová upozornění jsou vypnuta.', 'warning_notifications_disabled_email' => 'E-mailová upozornění jsou vypnuta.',
'warning_notifications_disabled_pushover' => 'Pushover upozornění jsou vypnuta.', 'warning_notifications_disabled_pushover' => 'Pushover upozornění jsou vypnuta.',
'error_server_no_match' => 'Server nenalezen.', 'error_server_no_match' => 'Server nenalezen.',
'error_server_label_bad_length' => 'Popisek musí obsahovat 1 až 255 znaků.', 'error_server_label_bad_length' => 'Popisek musí obsahovat 1 až 255 znaků.',
'error_server_ip_bad_length' => 'Doména/IP adresa musí obsahovat 1 až 255 znaků.', 'error_server_ip_bad_length' => 'Doména/IP adresa musí obsahovat 1 až 255 znaků.',
'error_server_ip_bad_service' => 'IP adresa není platná.', 'error_server_ip_bad_service' => 'IP adresa není platná.',
'error_server_ip_bad_website' => 'URL webu není platná.', 'error_server_ip_bad_website' => 'URL webu není platná.',
'error_server_type_invalid' => 'Zvolený typ serveru není platný', 'error_server_type_invalid' => 'Zvolený typ serveru není platný',
'error_server_warning_threshold_invalid' => 'Hranice varování musí být číslo větší než 0.', 'error_server_warning_threshold_invalid' => 'Hranice varování musí být číslo větší než 0.',
), ),
'config' => array( 'config' => array(
'general' => 'Obecné', 'general' => 'Obecné',
'language' => 'Jazyk', 'language' => 'Jazyk',
'show_update' => 'Kontrolovat aktualizace?', 'show_update' => 'Kontrolovat aktualizace?',
'password_encrypt_key' => 'Šifrovací klíč pro hesla', 'password_encrypt_key' => 'Šifrovací klíč pro hesla',
'password_encrypt_key_note' => 'Tímto klíčem se šifrují hesla, která se ukládají u serverů pro přístup na webové stránky. Pokud klíč změníte budou uložená hesla neplatná!', 'password_encrypt_key_note' => 'Tímto klíčem se šifrují hesla, která se ukládají u serverů pro
'email_status' => 'Povolit odesílání e-mailu', přístup na webové stránky. Pokud klíč změníte budou uložená hesla
'email_from_email' => 'E-mailová adresa odesilatele', neplatná!',
'email_from_name' => 'Jméno odesilatele', 'email_status' => 'Povolit odesílání e-mailu',
'email_smtp' => 'Zapnout SMTP', 'email_from_email' => 'E-mailová adresa odesilatele',
'email_smtp_host' => 'SMTP adresa', 'email_from_name' => 'Jméno odesilatele',
'email_smtp_port' => 'SMTP port', 'email_smtp' => 'Zapnout SMTP',
'email_smtp_security' => 'SMTP zabezpečení', 'email_smtp_host' => 'SMTP adresa',
'email_smtp_security_none' => 'žádné', 'email_smtp_port' => 'SMTP port',
'email_smtp_username' => 'SMTP uživatelské jméno', 'email_smtp_security' => 'SMTP zabezpečení',
'email_smtp_password' => 'SMTP heslo', 'email_smtp_security_none' => 'žádné',
'email_smtp_noauth' => 'Ponechte prázdné pro použití SMTP bez hesla', 'email_smtp_username' => 'SMTP uživatelské jméno',
'sms_status' => 'Povolit odesílání textových zpráv', 'email_smtp_password' => 'SMTP heslo',
'sms_gateway' => 'Brána použitá pro odesílání zpráv', 'email_smtp_noauth' => 'Ponechte prázdné pro použití SMTP bez hesla',
'sms_gateway_username' => 'Uživatelské jméno brány', 'sms_status' => 'Povolit odesílání textových zpráv',
'sms_gateway_password' => 'Heslo brány', 'sms_gateway' => 'Brána použitá pro odesílání zpráv',
'sms_from' => 'Telefonní číslo odesilatele', 'sms_gateway_username' => 'Uživatelské jméno brány',
'pushover_status' => 'Povolit zasílání Pushover zpráv', 'sms_gateway_password' => 'Heslo brány',
'pushover_description' => 'Pushover je služba umožňující jednoduše zasílat real-time upozornění. Více na <a href="https://pushover.net/">webu Pushover</a>', 'sms_from' => 'Telefonní číslo odesilatele',
'pushover_clone_app' => 'Klikněte pro vytvoření Pushover aplikace', 'pushover_status' => 'Povolit zasílání Pushover zpráv',
'pushover_api_token' => 'Pushover App API Token', 'pushover_description' => 'Pushover je služba umožňující jednoduše zasílat real-time upozornění.
'pushover_api_token_description' => 'Pře použitím Pushoveru se musíte <a href="%1$s" target="_blank" rel="noopener">registrovat</a> a získat API Token.', Více na <a href="https://pushover.net/" target="_blank">webu Pushover</a>',
'alert_type' => 'Zvolte kdy si přejete být upozorněni.', 'pushover_clone_app' => 'Klikněte pro vytvoření Pushover aplikace',
'alert_type_description' => '<b>Změna stavu:</b> '. 'pushover_api_token' => 'Pushover App API Token',
'Obdržíte upozornění při změně stavu, tedy:online -> offline nebo offline -> online.<br>'. 'pushover_api_token_description' => 'Pře použitím Pushoveru se musíte <a href="%1$s" target="_blank"
'<br /><b>Offline:</b> '. rel="noopener">registrovat</a> a získat API Token.',
'Obdržíte upozornění, kdy server přejde poprvé do offline stavu. Například, pokud je cron nastaven na 15 minut a sledovaný server bude offline mezi 01:00 a 06:00. Obdržíte upozornění pouze v 01:00. <br>'. 'alert_type' => 'Zvolte kdy si přejete být upozorněni.',
'<br><b>Vždy:</b> '. 'alert_type_description' => '<b>Změna stavu:</b> Obdržíte upozornění při změně stavu, tedy:online ->
'Obdržíte upozornění při každém spuštění kontroly, tedy i pokud bude server offline několik hodin.', offline nebo offline -> online.<br><br /><b>Offline:</b> Obdržíte upozornění,
'alert_type_status' => 'Změna stavu', kdy server přejde poprvé do offline stavu. Například, pokud je cron nastaven
'alert_type_offline' => 'Offline', na 15 minut a sledovaný server bude offline mezi 01:00 a 06:00. Obdržíte
'alert_type_always' => 'Vždy', upozornění pouze v 01:00. <br><br><b>Vždy:</b> Obdržíte upozornění při
'log_status' => 'Log', každém spuštění kontroly, tedy i pokud bude server offline několik hodin.',
'log_status_description' => 'Pokud je Log nastaven na hodnotu TRUE, systém do něj zapíše veškerá provedená upozornění.', 'alert_type_status' => 'Změna stavu',
'log_email' => 'Logovat odeslané e-maily', 'alert_type_offline' => 'Offline',
'log_sms' => 'Logovat odeslané textové zprávy', 'alert_type_always' => 'Vždy',
'log_pushover' => 'Logovat odeslané Pushover zprávy', 'log_status' => 'Log',
'updated' => 'Nastavení bylo aktualizováno.', 'log_status_description' => 'Pokud je Log nastaven na hodnotu TRUE, systém do něj zapíše veškerá
'tab_email' => 'E-mail', provedená upozornění.',
'tab_sms' => 'SMS', 'log_email' => 'Logovat odeslané e-maily',
'tab_pushover' => 'Pushover', 'log_sms' => 'Logovat odeslané textové zprávy',
'settings_email' => 'Nastavení e-mailů', 'log_pushover' => 'Logovat odeslané Pushover zprávy',
'settings_sms' => 'Nastavení textových zpráv', 'updated' => 'Nastavení bylo aktualizováno.',
'settings_pushover' => 'Nastavení Pushover', 'tab_email' => 'E-mail',
'settings_notification' => 'Nastavení upozornění', 'tab_sms' => 'SMS',
'settings_log' => 'Nastavení logu', 'tab_pushover' => 'Pushover',
'auto_refresh' => 'Automaticky obnovit', 'settings_email' => 'Nastavení e-mailů',
'auto_refresh_description' => 'settings_sms' => 'Nastavení textových zpráv',
'Automaticky obnovit stránku Servery.<br>'. 'settings_pushover' => 'Nastavení Pushover',
'<span class="small">'. 'settings_notification' => 'Nastavení upozornění',
'Čas v sekundách, 0 pro vypnutí automatického obnovení.'. 'settings_log' => 'Nastavení logu',
'</span>', 'auto_refresh' => 'Automaticky obnovit',
'seconds' => 'sekund', 'auto_refresh_description' => 'Automaticky obnovit stránku Servery.<br><span class="small">Čas v sekundách,
'test' => 'Test', 0 pro vypnutí automatického obnovení.</span>',
'test_email' => 'E-mail bude odeslán na adresu uvedenou v uživatelském profilu.', 'seconds' => 'sekund',
'test_sms' => 'SMS bude odeslána na telefonní číslo uvedené v uživatelském profilu.', 'test' => 'Test',
'test_pushover' => 'Pushover upozornění bude odesláno uživateli/zařízení dle nastavení v uživatelském profilu.', 'test_email' => 'E-mail bude odeslán na adresu uvedenou v uživatelském profilu.',
'send' => 'Odeslat', 'test_sms' => 'SMS bude odeslána na telefonní číslo uvedené v uživatelském profilu.',
'test_subject' => 'Test', 'test_pushover' => 'Pushover upozornění bude odesláno uživateli/zařízení dle nastavení v
'test_message' => 'Testovací zpráva', uživatelském profilu.',
'email_sent' => 'E-mail odeslán', 'send' => 'Odeslat',
'email_error' => 'Chyba při odeslání e-mailu', 'test_subject' => 'Test',
'sms_sent' => 'SMS odeslána', 'test_message' => 'Testovací zpráva',
'sms_error' => 'Chyba při odeslání SMS. %s', 'email_sent' => 'E-mail odeslán',
'sms_error_nomobile' => 'Nebylo možné odeslat SMS: v uživatelském profilu nebylo nalezeno platné telefonní číslo.', 'email_error' => 'Chyba při odeslání e-mailu',
'pushover_sent' => 'Pushover upozornění odesláno.', 'sms_sent' => 'SMS odeslána',
'pushover_error' => 'Nastala chyba při odesílání Pushover upozornění: %s', 'sms_error' => 'Chyba při odeslání SMS. %s',
'pushover_error_noapp' => 'Nebylo možné odeslat testovací upozornění: v globálním nastavení nebyl nalezen žádný API token.', 'sms_error_nomobile' => 'Nebylo možné odeslat SMS: v uživatelském profilu nebylo nalezeno platné
'pushover_error_nokey' => 'Nebylo možné odeslat testovací upozornění: ve vašem profilu není definován Pushover key.', telefonní číslo.',
'log_retention_period' => 'Rotace logu', 'pushover_sent' => 'Pushover upozornění odesláno.',
'log_retention_period_description' => 'Počet dnů po které budou zachovány logy upozornění. Vložte 0 pro vypnutí autorotace.', 'pushover_error' => 'Nastala chyba při odesílání Pushover upozornění: %s',
'log_retention_days' => 'dnů', 'pushover_error_noapp' => 'Nebylo možné odeslat testovací upozornění: v globálním nastavení nebyl
), nalezen žádný API token.',
// for newlines in the email messages use <br> 'pushover_error_nokey' => 'Nebylo možné odeslat testovací upozornění: ve vašem profilu není definován
'notifications' => array( Pushover key.',
'off_sms' => 'Server \'%LABEL%\' je offline: ip=%IP%, port=%PORT%. Chyba=%ERROR%', 'log_retention_period' => 'Rotace logu',
'off_email_subject' => 'DŮLEŽITÉ: Server \'%LABEL%\' je offline', 'log_retention_period_description' => 'Počet dnů po které budou zachovány logy upozornění. Vložte 0 pro
'off_email_body' => 'Nebylo možné spojit se se serverem:<br><br>Server: %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>Chyba: %ERROR%<br>Datum: %DATE%', vypnutí autorotace.',
'off_pushover_title' => 'Server \'%LABEL%\' je offline', 'log_retention_days' => 'dnů',
'off_pushover_message' => 'Nebylo možné spojit se se serverem:<br><br>Server: %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>Chyba: %ERROR%<br>Datum: %DATE%', ),
'on_sms' => 'Server \'%LABEL%\' je online: ip=%IP%, port=%PORT%, it was down for %LAST_OFFLINE_DURATION%', 'notifications' => array(
'on_email_subject' => 'DŮLEŽITÉ: Server \'%LABEL%\' je online', 'off_sms' => 'Server \'%LABEL%\' je offline: ip=%IP%, port=%PORT%. Chyba=%ERROR%',
'on_email_body' => "Server '%LABEL%' je opět online, it was down for %LAST_OFFLINE_DURATION%:<br><br>Server: %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>Datum: %DATE%", 'off_email_subject' => 'DŮLEŽITÉ: Server \'%LABEL%\' je offline',
'on_pushover_title' => 'Server \'%LABEL%\' je online', 'off_email_body' => 'Nebylo možné spojit se se serverem:<br><br>Server: %LABEL%<br>IP: %IP%<br>Port:
'on_pushover_message' => 'Server \'%LABEL%\' je znovu online, it was down for %LAST_OFFLINE_DURATION%:<br><br>Server: %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>Datum: %DATE%', %PORT%<br>Chyba: %ERROR%<br>Datum: %DATE%',
), 'off_pushover_title' => 'Server \'%LABEL%\' je offline',
'login' => array( 'off_pushover_message' => 'Nebylo možné spojit se se serverem:<br><br>Server: %LABEL%<br>IP: %IP%<br>Port:
'welcome_usermenu' => 'Vítejte, %user_name%', %PORT%<br>Chyba: %ERROR%<br>Datum: %DATE%',
'title_sign_in' => 'Prosím přihlašte se', 'on_sms' => 'Server \'%LABEL%\' je online: ip=%IP%, port=%PORT%, it was down for %LAST_OFFLINE_DURATION%',
'title_forgot' => 'Zapomenuté heslo?', 'on_email_subject' => 'DŮLEŽITÉ: Server \'%LABEL%\' je online',
'title_reset' => 'Obnova hesla', 'on_email_body' => 'Server \'%LABEL%\' je opět online, it was down for
'submit' => 'Odeslat', %LAST_OFFLINE_DURATION%:<br><br>Server: %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>Datum:
'remember_me' => 'Zapamatovat údaje', %DATE%',
'login' => 'Přihlásit', 'on_pushover_title' => 'Server \'%LABEL%\' je online',
'logout' => 'Odhlásit', 'on_pushover_message' => 'Server \'%LABEL%\' je znovu online, it was down for
'username' => 'Uživatelské jméno', %LAST_OFFLINE_DURATION%:<br><br>Server: %LABEL%<br>IP: %IP%<br>Port:
'password' => 'Heslo', %PORT%<br>Datum: %DATE%',
'password_repeat' => 'Opište heslo', ),
'password_forgot' => 'Zapomenuté heslo?', 'login' => array(
'password_reset' => 'Obnovit heslo', 'welcome_usermenu' => 'Vítejte, %user_name%',
'password_reset_email_subject' => 'Obnovit heslo pro PHP Server Monitor', 'title_sign_in' => 'Prosím přihlašte se',
'password_reset_email_body' => 'Použijte následující odkaz pro obnovení hesla. Odkaz je platný jednu hodinu.<br><br>%link%', 'title_forgot' => 'Zapomenuté heslo?',
'error_user_incorrect' => 'Zadané uživatelské jméno nebylo nalezeno.', 'title_reset' => 'Obnova hesla',
'error_login_incorrect' => 'Přihlášení nebylo úspěšné.', 'submit' => 'Odeslat',
'error_login_passwords_nomatch' => 'Zadaná hesla neodpovídají.', 'remember_me' => 'Zapamatovat údaje',
'error_reset_invalid_link' => 'Odkaz je neplatný.', 'login' => 'Přihlásit',
'success_password_forgot' => 'Na vaši e-mailovou adresu byl zaslán e-mail s informacemi pro obnovu hesla.', 'logout' => 'Odhlásit',
'success_password_reset' => 'Vaše heslo bylo úspěšně obnoveno. Prosím přihlašte se.', 'username' => 'Uživatelské jméno',
), 'password' => 'Heslo',
'error' => array( 'password_repeat' => 'Opište heslo',
'401_unauthorized' => 'Nedostatečné oprávnění', 'password_forgot' => 'Zapomenuté heslo?',
'401_unauthorized_description' => 'Nemáte oprávnění zobrazit tuto stránku.', 'password_reset' => 'Obnovit heslo',
), 'password_reset_email_subject' => 'Obnovit heslo pro PHP Server Monitor',
'password_reset_email_body' => 'Použijte následující odkaz pro obnovení hesla. Odkaz je platný jednu
hodinu.<br><br>%link%',
'error_user_incorrect' => 'Zadané uživatelské jméno nebylo nalezeno.',
'error_login_incorrect' => 'Přihlášení nebylo úspěšné.',
'error_login_passwords_nomatch' => 'Zadaná hesla neodpovídají.',
'error_reset_invalid_link' => 'Odkaz je neplatný.',
'success_password_forgot' => 'Na vaši e-mailovou adresu byl zaslán e-mail s informacemi pro obnovu hesla.',
'success_password_reset' => 'Vaše heslo bylo úspěšně obnoveno. Prosím přihlašte se.',
),
'error' => array(
'401_unauthorized' => 'Nedostatečné oprávnění',
'401_unauthorized_description' => 'Nemáte oprávnění zobrazit tuto stránku.',
),
); );

View File

@ -1,4 +1,5 @@
<?php <?php
/** /**
* PHP Server Monitor * PHP Server Monitor
* Monitor your servers and websites. * Monitor your servers and websites.
@ -26,282 +27,292 @@
**/ **/
$sm_lang = array( $sm_lang = array(
'name' => 'Dansk - Danish', 'name' => 'Dansk - Danish',
'locale' => array('da_DK.UTF-8', 'da_DK', 'danish', 'danish-dk'), 'locale' => array(
'system' => array( '0' => 'da_DK.UTF-8',
'title' => 'Server Monitor', '1' => 'da_DK',
'install' => 'Installér', '2' => 'danish',
'action' => 'Action', '3' => 'danish-dk',
'save' => 'Gem', ),
'edit' => 'Redigér', 'system' => array(
'delete' => 'Slet', 'title' => 'Server Monitor',
'date' => 'Dato', 'install' => 'Installér',
'message' => 'Besked', 'action' => 'Action',
'yes' => 'Ja', 'save' => 'Gem',
'no' => 'Nej', 'edit' => 'Redigér',
'insert' => 'Indsæt', 'delete' => 'Slet',
'add_new' => 'Tilføj ny', 'date' => 'Dato',
'update_available' => 'En ny version ({version}) er tilgængelig på <a href="https://github.com/phpservermon/phpservermon/releases/latest" target="_blank" rel="noopener">http://www.phpservermonitor.org</a>.', 'message' => 'Besked',
'back_to_top' => 'Til toppen', 'yes' => 'Ja',
'go_back' => 'Tilbage', 'no' => 'Nej',
'ok' => 'OK', 'insert' => 'Indsæt',
'cancel' => 'Annullér', 'add_new' => 'Tilføj ny',
// date/time format according the strftime php function format parameter http://php.net/manual/function.strftime.php 'update_available' => 'En ny version ({version}) er tilgængelig <a
'short_day_format' => '%B %e', href="https://github.com/phpservermon/phpservermon/releases/latest" target="_blank"
'long_day_format' => '%B %e, %Y', rel="noopener">http://www.phpservermonitor.org</a>.',
'yesterday_format' => 'Igår %k:%M', 'back_to_top' => 'Til toppen',
'other_day_format' => '%A %k:%M', 'go_back' => 'Tilbage',
'never' => 'Aldrig', 'ok' => 'OK',
'hours_ago' => '%d timer siden', 'cancel' => 'Annullér',
'an_hour_ago' => 'omkring en time siden', 'short_day_format' => '%B %e',
'minutes_ago' => '%d minutter siden', 'long_day_format' => '%B %e, %Y',
'a_minute_ago' => 'omkring et minut siden', 'yesterday_format' => 'Igår %k:%M',
'seconds_ago' => '%d sekunder siden', 'other_day_format' => '%A %k:%M',
'a_second_ago' => 'et sekund siden', 'never' => 'Aldrig',
'year' => 'year', 'hours_ago' => '%d timer siden',
'years' => 'years', 'an_hour_ago' => 'omkring en time siden',
'month' => 'month', 'minutes_ago' => '%d minutter siden',
'months' => 'months', 'a_minute_ago' => 'omkring et minut siden',
'day' => 'day', 'seconds_ago' => '%d sekunder siden',
'days' => 'days', 'a_second_ago' => 'et sekund siden',
'hour' => 'hour', ),
'hours' => 'hours', 'menu' => array(
'minute' => 'minute', 'config' => 'Indstillinger',
'minutes' => 'minutes', 'server' => 'Servere',
'second' => 'second', 'server_log' => 'Log',
'seconds' => 'seconds', 'server_status' => 'Status',
), 'server_update' => 'Opdatér',
'menu' => array( 'user' => 'Brugere',
'config' => 'Indstillinger', 'help' => 'Hjælp',
'server' => 'Servere', ),
'server_log' => 'Log', 'users' => array(
'server_status' => 'Status', 'user' => 'Bruger',
'server_update' => 'Opdatér', 'name' => 'Navn',
'user' => 'Brugere', 'user_name' => 'Brugernavn',
'help' => 'Hjælp', 'password' => 'Adgangskode',
), 'password_repeat' => 'Adgangskode igen',
'users' => array( 'password_leave_blank' => 'Udfyldes hvis du vil skifte adgangskode',
'user' => 'Bruger', 'level' => 'Niveau',
'name' => 'Navn', 'level_10' => 'Administrator',
'user_name' => 'Brugernavn', 'level_20' => 'Bruger',
'password' => 'Adgangskode', 'level_description' => '<b>Administratorer</b> har fuld adgang: De kan styre servere, brugere og
'password_repeat' => 'Adgangskode igen', indstillinger.<br><b>Brugere</b> kan kun se og opdatere servere som er de har adgang
'password_leave_blank' => 'Udfyldes hvis du vil skifte adgangskode', til.',
'level' => 'Niveau', 'mobile' => 'Mobil',
'level_10' => 'Administrator', 'email' => 'E-mail',
'level_20' => 'Bruger', 'pushover' => 'Pushover',
'level_description' => '<b>Administratorer</b> har fuld adgang: De kan styre servere, brugere og indstillinger.<br><b>Brugere</b> kan kun se og opdatere servere som er de har adgang til.', 'pushover_description' => 'Pushover er en service der gør det let at modtage real-time notifikationer. Se <a
'mobile' => 'Mobil', href="https://pushover.net/" target="_blank">deres website</a> for mere
'email' => 'E-mail', information.',
'pushover' => 'Pushover', 'pushover_key' => 'Pushover nøgle',
'pushover_description' => 'Pushover er en service der gør det let at modtage real-time notifikationer. Se <a href="https://pushover.net/">deres website</a> for mere information.', 'pushover_device' => 'Pushover enhed',
'pushover_key' => 'Pushover nøgle', 'pushover_device_description' => 'Navnet enheden som beskeden skal sendes til. Lad denne være tom hvis
'pushover_device' => 'Pushover enhed', alle skal modtage beskeden.',
'pushover_device_description' => 'Navnet på enheden som beskeden skal sendes til. Lad denne være tom hvis alle skal modtage beskeden.', 'delete_title' => 'Slet bruger',
'delete_title' => 'Slet bruger', 'delete_message' => 'Er du sikker på du vil slette bruger \'%1\'?',
'delete_message' => 'Er du sikker på du vil slette bruger \'%1\'?', 'deleted' => 'Bruger slettet.',
'deleted' => 'Bruger slettet.', 'updated' => 'Bruger opdateret.',
'updated' => 'Bruger opdateret.', 'inserted' => 'Bruger tilføjet.',
'inserted' => 'Bruger tilføjet.', 'profile' => 'Profil',
'profile' => 'Profil', 'profile_updated' => 'Din profil er opdateret.',
'profile_updated' => 'Din profil er opdateret.', 'error_user_name_bad_length' => 'Brugernavn skal være mellem 2 til 64 tegn.',
'error_user_name_bad_length' => 'Brugernavn skal være mellem 2 til 64 tegn.', 'error_user_name_invalid' => 'Brugernavn kun indholde alfabetiske tegn (a-z, A-Z), tal (0-9), prikker (.)
'error_user_name_invalid' => 'Brugernavn må kun indholde alfabetiske tegn (a-z, A-Z), tal (0-9), prikker (.) og (_).', og (_).',
'error_user_name_exists' => 'Det valgte brugernavn findes allerede.', 'error_user_name_exists' => 'Det valgte brugernavn findes allerede.',
'error_user_email_bad_length' => 'E-mail addresser skal være mellem 5 til 255 tegn.', 'error_user_email_bad_length' => 'E-mail addresser skal være mellem 5 til 255 tegn.',
'error_user_email_invalid' => 'Den valgte e-mail er ugyldig.', 'error_user_email_invalid' => 'Den valgte e-mail er ugyldig.',
'error_user_level_invalid' => 'Det angivet bruger niveau er ugyldig.', 'error_user_level_invalid' => 'Det angivet bruger niveau er ugyldig.',
'error_user_no_match' => 'Brugeren findes ikke.', 'error_user_no_match' => 'Brugeren findes ikke.',
'error_user_password_invalid' => 'Den indtastede adgangskode er ugyldig.', 'error_user_password_invalid' => 'Den indtastede adgangskode er ugyldig.',
'error_user_password_no_match' => 'De to adgangskode er ikke ens.', 'error_user_password_no_match' => 'De to adgangskode er ikke ens.',
), ),
'log' => array( 'log' => array(
'title' => 'Logposter', 'title' => 'Logposter',
'type' => 'Type', 'type' => 'Type',
'status' => 'Status', 'status' => 'Status',
'email' => 'E-mail', 'email' => 'E-mail',
'sms' => 'SMS', 'sms' => 'SMS',
'pushover' => 'Pushover', 'pushover' => 'Pushover',
'no_logs' => 'Intet i loggen', 'no_logs' => 'Intet i loggen',
'clear' => 'Ryd log', 'clear' => 'Ryd log',
'delete_title' => 'Slet log', 'delete_title' => 'Slet log',
'delete_message' => 'Er du sikker på, at du vil slette <b>alle</b> logfiler?', 'delete_message' => 'Er du sikker på, at du vil slette <b>alle</b> logfiler?',
), ),
'servers' => array( 'servers' => array(
'server' => 'Server', 'server' => 'Server',
'status' => 'Status', 'status' => 'Status',
'label' => 'Label', 'label' => 'Label',
'domain' => 'Domæne/IP', 'domain' => 'Domæne/IP',
'timeout' => 'Timeout', 'timeout' => 'Timeout',
'timeout_description' => 'Antal sekunder som serveren har til at svare.', 'timeout_description' => 'Antal sekunder som serveren har til at svare.',
'port' => 'Port', 'port' => 'Port',
'type' => 'Type', 'type' => 'Type',
'type_website' => 'Hjemmeside', 'type_website' => 'Hjemmeside',
'type_service' => 'Tjeneste', 'type_service' => 'Tjeneste',
'pattern' => 'Søgestreng/mønster', 'pattern' => 'Søgestreng/mønster',
'pattern_description' => 'Hvis dette mønster ikke findes på hjemmesiden, vil serveren blive markeret som værende offline. Regulære udtryk er tilladt.', 'pattern_description' => 'Hvis dette mønster ikke findes hjemmesiden, vil serveren blive markeret som
'last_check' => 'Sidst kontrolleret', værende offline. Regulære udtryk er tilladt.',
'last_online' => 'Sidst online', 'last_check' => 'Sidst kontrolleret',
'last_offline' => 'Sidst offline', 'last_online' => 'Sidst online',
'monitoring' => 'Overvågning', 'last_offline' => 'Sidst offline',
'no_monitoring' => 'Ingen overvågning', 'monitoring' => 'Overvågning',
'email' => 'E-mail', 'no_monitoring' => 'Ingen overvågning',
'send_email' => 'Send E-mail', 'email' => 'E-mail',
'sms' => 'SMS', 'send_email' => 'Send E-mail',
'send_sms' => 'Send SMS', 'sms' => 'SMS',
'pushover' => 'Pushover', 'send_sms' => 'Send SMS',
'users' => 'Users', 'pushover' => 'Pushover',
'delete_title' => 'Slet server', 'users' => 'Users',
'delete_message' => 'Er du sikker på du vil slette server \'%1\'?', 'delete_title' => 'Slet server',
'deleted' => 'Server slettet.', 'delete_message' => 'Er du sikker på du vil slette server \'%1\'?',
'updated' => 'Server opdateret.', 'deleted' => 'Server slettet.',
'inserted' => 'Server tilføjet.', 'updated' => 'Server opdateret.',
'latency' => 'Forsinkelse', 'inserted' => 'Server tilføjet.',
'latency_max' => 'Forsinkelse (maksimum)', 'latency' => 'Forsinkelse',
'latency_min' => 'Forsinkelse (minimum)', 'latency_max' => 'Forsinkelse (maksimum)',
'latency_avg' => 'Forsinkelse (gennemsnitlig)', 'latency_min' => 'Forsinkelse (minimum)',
'uptime' => 'Oppetid', 'latency_avg' => 'Forsinkelse (gennemsnitlig)',
'year' => 'År', 'uptime' => 'Oppetid',
'month' => 'Måned', 'year' => 'År',
'week' => 'Uge', 'month' => 'Måned',
'day' => 'Dag', 'week' => 'Uge',
'hour' => 'Time', 'day' => 'Dag',
'warning_threshold' => 'Advarsel grænse', 'hour' => 'Time',
'warning_threshold_description' => 'Antallet af fejl, før status skifter til offline.', 'warning_threshold' => 'Advarsel grænse',
'chart_last_week' => 'Sidste uge', 'warning_threshold_description' => 'Antallet af fejl, før status skifter til offline.',
'chart_history' => 'Historie', 'chart_last_week' => 'Sidste uge',
// Charts date format according jqPlot date format http://www.jqplot.com/docs/files/plugins/jqplot-dateAxisRenderer-js.html 'chart_history' => 'Historie',
'chart_day_format' => '%d-%m-%Y', 'chart_day_format' => '%d-%m-%Y',
'chart_long_date_format' => '%d-%m-%Y %H:%M:%S', 'chart_long_date_format' => '%d-%m-%Y %H:%M:%S',
'chart_short_date_format' => '%d/%m %H:%M', 'chart_short_date_format' => '%d/%m %H:%M',
'chart_short_time_format' => '%H:%M', 'chart_short_time_format' => '%H:%M',
'warning_notifications_disabled_sms' => 'SMS notifikationer er deaktiveret.', 'warning_notifications_disabled_sms' => 'SMS notifikationer er deaktiveret.',
'warning_notifications_disabled_email' => 'E-mail notifikationer er deaktiveret.', 'warning_notifications_disabled_email' => 'E-mail notifikationer er deaktiveret.',
'warning_notifications_disabled_pushover' => 'Pushover notifikationer er deaktiveret.', 'warning_notifications_disabled_pushover' => 'Pushover notifikationer er deaktiveret.',
'error_server_no_match' => 'Server ikke fundet.', 'error_server_no_match' => 'Server ikke fundet.',
'error_server_label_bad_length' => 'Label skal være mellem et og 255 karakterer.', 'error_server_label_bad_length' => 'Label skal være mellem et og 255 karakterer.',
'error_server_ip_bad_length' => 'Domænet/IP skal være mellem et og 255 karakterer.', 'error_server_ip_bad_length' => 'Domænet/IP skal være mellem et og 255 karakterer.',
'error_server_ip_bad_service' => 'IP adressen er ikke gyldig.', 'error_server_ip_bad_service' => 'IP adressen er ikke gyldig.',
'error_server_ip_bad_website' => 'Websitets URL er ikke gyldigt.', 'error_server_ip_bad_website' => 'Websitets URL er ikke gyldigt.',
'error_server_type_invalid' => 'Den valgte servertype er ikke gyldig.', 'error_server_type_invalid' => 'Den valgte servertype er ikke gyldig.',
'error_server_warning_threshold_invalid' => 'Advarsels-tærskel skal være et gyldigt tal større end 0.', 'error_server_warning_threshold_invalid' => 'Advarsels-tærskel skal være et gyldigt tal større end 0.',
), ),
'config' => array( 'config' => array(
'general' => 'Generelt', 'general' => 'Generelt',
'language' => 'Sprog', 'language' => 'Sprog',
'show_update' => 'Opdateringer', 'show_update' => 'Opdateringer',
'email_status' => 'Tillad at sende e-mail', 'email_status' => 'Tillad at sende e-mail',
'email_from_email' => 'E-mail fra adresse', 'email_from_email' => 'E-mail fra adresse',
'email_from_name' => 'E-mail fra navn', 'email_from_name' => 'E-mail fra navn',
'email_smtp' => 'Aktiver SMTP', 'email_smtp' => 'Aktiver SMTP',
'email_smtp_host' => 'SMTP vært', 'email_smtp_host' => 'SMTP vært',
'email_smtp_port' => 'SMTP port', 'email_smtp_port' => 'SMTP port',
'email_smtp_security' => 'SMTP c', 'email_smtp_security' => 'SMTP c',
'email_smtp_security_none' => 'Ingen', 'email_smtp_security_none' => 'Ingen',
'email_smtp_username' => 'SMTP brugernavn', 'email_smtp_username' => 'SMTP brugernavn',
'email_smtp_password' => 'SMTP adgangskode', 'email_smtp_password' => 'SMTP adgangskode',
'email_smtp_noauth' => 'Efterlad blank hvis det ikke er krævet', 'email_smtp_noauth' => 'Efterlad blank hvis det ikke er krævet',
'sms_status' => 'Tillad at sende SMS beskeder', 'sms_status' => 'Tillad at sende SMS beskeder',
'sms_gateway' => 'SMS Gateway', 'sms_gateway' => 'SMS Gateway',
'sms_gateway_username' => 'Gateway brugernavn/apikey', 'sms_gateway_username' => 'Gateway brugernavn/apikey',
'sms_gateway_password' => 'Gateway adgangskode', 'sms_gateway_password' => 'Gateway adgangskode',
'sms_from' => 'Afsenderens navn.', 'sms_from' => 'Afsenderens navn.',
'pushover_status' => 'Tillad at sende Pushover beskeder', 'pushover_status' => 'Tillad at sende Pushover beskeder',
'pushover_description' => 'Pushover er en service det gør det nemt at modtage real-time notifikationer. Se <a href="https://pushover.net/">deres website</a> for yderligere information.', 'pushover_description' => 'Pushover er en service det gør det nemt at modtage real-time notifikationer. Se <a
'pushover_clone_app' => 'Klik her for at oprette din Pushover app', href="https://pushover.net/" target="_blank">deres website</a> for yderligere
'pushover_api_token' => 'Pushover App API Token', information.',
'pushover_api_token_description' => 'Før du kan benytte Pushover, skal du <a href="%1$s" target="_blank" rel="noopener">registrere en app</a> på deres website og indtaste en App API Token her.', 'pushover_clone_app' => 'Klik her for at oprette din Pushover app',
'alert_type' => 'Vælg hvornår du vil modtage beskeden', 'pushover_api_token' => 'Pushover App API Token',
'alert_type_description' => '<b>Status ændring:</b> '. 'pushover_api_token_description' => 'Før du kan benytte Pushover, skal du <a href="%1$s" target="_blank"
'Du vil modtage en notifkation når en server har en ændring i status. Fra online -> offline eller offline -> online.<br>'. rel="noopener">registrere en app</a> deres website og indtaste en App
'<br /><b>Offline:</b> '. API Token her.',
'Du vil modtage en meddelelse, når en server går offline for første gang. Eksempelvis '. 'alert_type' => 'Vælg hvornår du vil modtage beskeden',
'hvis dit cronjob kører hvert kvarter, og din server går ned kl 01 og kommer først op kl 06, '. 'alert_type_description' => '<b>Status ændring:</b> Du vil modtage en notifkation når en server har en
' vil du kun modtage en mail kl 01.<br>'. ændring i status. Fra online -> offline eller offline -> online.<br><br
'<br><b>Altid:</b> '. /><b>Offline:</b> Du vil modtage en meddelelse, når en server går offline for
'Du vil modtage en besked, hver gang scriptet kører og et websted er nede, selvom site har været offline i flere timer.', første gang. Eksempelvis hvis dit cronjob kører hvert kvarter, og din server
'alert_type_status' => 'Status ændret', går ned kl 01 og kommer først op kl 06, vil du kun modtage en mail kl
'alert_type_offline' => 'Offline', 01.<br><br><b>Altid:</b> Du vil modtage en besked, hver gang scriptet kører og
'alert_type_always' => 'Altid', et websted er nede, selvom site har været offline i flere timer.',
'log_status' => 'Log status', 'alert_type_status' => 'Status ændret',
'log_status_description' => 'Hvis log status er sat til TRUE, vil monitoren logge hændelsen hver gang status ændre sig.', 'alert_type_offline' => 'Offline',
'log_email' => 'Log e-mails sendt af systemet', 'alert_type_always' => 'Altid',
'log_sms' => 'Log SMS sendt af systemet', 'log_status' => 'Log status',
'log_pushover' => 'Log pushover messages sent by the script', 'log_status_description' => 'Hvis log status er sat til TRUE, vil monitoren logge hændelsen hver gang status
'updated' => 'Indstillingerne er blevet opdateret.', ændre sig.',
'tab_email' => 'E-mail', 'log_email' => 'Log e-mails sendt af systemet',
'tab_sms' => 'SMS', 'log_sms' => 'Log SMS sendt af systemet',
'tab_pushover' => 'Pushover', 'log_pushover' => 'Log pushover messages sent by the script',
'settings_email' => 'E-mail indstillinger', 'updated' => 'Indstillingerne er blevet opdateret.',
'settings_sms' => 'SMS indstillinger', 'tab_email' => 'E-mail',
'settings_pushover' => 'Pushover settings', 'tab_sms' => 'SMS',
'settings_notification' => 'Meddelelse indstillinger', 'tab_pushover' => 'Pushover',
'settings_log' => 'Log indstillinger', 'settings_email' => 'E-mail indstillinger',
'auto_refresh' => 'Genopfrisk automatisk', 'settings_sms' => 'SMS indstillinger',
'auto_refresh_description' => 'settings_pushover' => 'Pushover settings',
'Genopfrisk automatisk serversider.<br>'. 'settings_notification' => 'Meddelelse indstillinger',
'<span class="small">'. 'settings_log' => 'Log indstillinger',
'Tid i sekunder. Hvis 0 vil siden ikke genopfriske automatisk'. 'auto_refresh' => 'Genopfrisk automatisk',
'</span>', 'auto_refresh_description' => 'Genopfrisk automatisk serversider.<br><span class="small">Tid i sekunder. Hvis
'seconds' => 'sekunder', 0 vil siden ikke genopfriske automatisk</span>',
'test' => 'Test', 'seconds' => 'sekunder',
'test_email' => 'En e-mail vil blive sendt til den adresse, der er angivet i din brugerprofil.', 'test' => 'Test',
'test_sms' => 'En SMS vil blive sendt til det nummer, der er angivet i din brugerprofil.', 'test_email' => 'En e-mail vil blive sendt til den adresse, der er angivet i din brugerprofil.',
'test_pushover' => 'En Pushover notifikation vil blive sendt til brugerens enhed, specificeret i brugerprofilen.', 'test_sms' => 'En SMS vil blive sendt til det nummer, der er angivet i din brugerprofil.',
'send' => 'Send', 'test_pushover' => 'En Pushover notifikation vil blive sendt til brugerens enhed, specificeret i
'test_subject' => 'Test', brugerprofilen.',
'test_message' => 'Test besked', 'send' => 'Send',
'email_sent' => 'E-mail sendt', 'test_subject' => 'Test',
'email_error' => 'Fejl ved afsendelse af e-mail', 'test_message' => 'Test besked',
'sms_sent' => 'Sms sendt', 'email_sent' => 'E-mail sendt',
'sms_error' => 'Fejl ved afsendelse af SMS. %s', 'email_error' => 'Fejl ved afsendelse af e-mail',
'sms_error_nomobile' => 'Ikke muligt at sende SMS: Intet gyldigt telefonnummer blev fundet i din profil.', 'sms_sent' => 'Sms sendt',
'pushover_sent' => 'Pushover notifikation blev sendt', 'sms_error' => 'Fejl ved afsendelse af SMS. %s',
'pushover_error' => 'En fejl opstod under afsendelse af Pushover notifikation: %s', 'sms_error_nomobile' => 'Ikke muligt at sende SMS: Intet gyldigt telefonnummer blev fundet i din profil.',
'pushover_error_noapp' => 'Ikke muligt at sende test notifikation: Intet Pushover App API token fundet i den globale konfiguration.', 'pushover_sent' => 'Pushover notifikation blev sendt',
'pushover_error_nokey' => 'Ikke muligt at sende test notifikation: Ingen Pushover key fundet i din profil.', 'pushover_error' => 'En fejl opstod under afsendelse af Pushover notifikation: %s',
'log_retention_period' => 'Logs gemmes', 'pushover_error_noapp' => 'Ikke muligt at sende test notifikation: Intet Pushover App API token fundet i den
'log_retention_period_description' => 'Antal dage over hvor længe logs med notifikationer og arkiverede serveres oppetid skal gemmes. Indtast 0 for at deaktivere logoprydning.', globale konfiguration.',
'log_retention_days' => 'dage', 'pushover_error_nokey' => 'Ikke muligt at sende test notifikation: Ingen Pushover key fundet i din profil.',
), 'log_retention_period' => 'Logs gemmes',
// for newlines in the email messages use <br> 'log_retention_period_description' => 'Antal dage over hvor længe logs med notifikationer og arkiverede
'notifications' => array( serveres oppetid skal gemmes. Indtast 0 for at deaktivere logoprydning.',
'off_sms' => 'Serveren \'%LABEL%\' er NEDE: ip=%IP%, port=%PORT%. Fejl=%ERROR%', 'log_retention_days' => 'dage',
'off_email_subject' => 'VIGTIGT: Server \'%LABEL%\' er NEDE', ),
'off_email_body' => "Det lykkedes ikke at oprette forbindelse til følgende server:<br><br>Server: %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>Fejl: %ERROR%<br>Dato: %DATE%", 'notifications' => array(
'off_pushover_title' => 'Serveren \'%LABEL%\' er NEDE', 'off_sms' => 'Serveren \'%LABEL%\' er NEDE: ip=%IP%, port=%PORT%. Fejl=%ERROR%',
'off_pushover_message' => "Det lykkedes ikke at oprette forbindelse til følgende server:<br><br>Server: %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>Fejl: %ERROR%<br>Dato: %DATE%", 'off_email_subject' => 'VIGTIGT: Server \'%LABEL%\' er NEDE',
'on_sms' => 'Serveren \'%LABEL%\' KØRER: ip=%IP%, port=%PORT%, it was down for %LAST_OFFLINE_DURATION%', 'off_email_body' => 'Det lykkedes ikke at oprette forbindelse til følgende server:<br><br>Server:
'on_email_subject' => 'VIGTIGT: Serveren \'%LABEL%\' KØRER', %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>Fejl: %ERROR%<br>Dato: %DATE%',
'on_email_body' => "Serveren '%LABEL%' kører igen, it was down for %LAST_OFFLINE_DURATION%:<br><br>Server: %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>Dato: %DATE%", 'off_pushover_title' => 'Serveren \'%LABEL%\' er NEDE',
'on_pushover_title' => 'Serveren \'%LABEL%\' KØRER', 'off_pushover_message' => 'Det lykkedes ikke at oprette forbindelse til følgende server:<br><br>Server:
'on_pushover_message' => "Serveren '%LABEL%' kører igen, it was down for %LAST_OFFLINE_DURATION%:<br><br>Server: %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>Dato: %DATE%", %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>Fejl: %ERROR%<br>Dato: %DATE%',
), 'on_sms' => 'Serveren \'%LABEL%\' KØRER: ip=%IP%, port=%PORT%, it was down for %LAST_OFFLINE_DURATION%',
'login' => array( 'on_email_subject' => 'VIGTIGT: Serveren \'%LABEL%\' KØRER',
'welcome_usermenu' => 'Velkommen, %user_name%', 'on_email_body' => 'Serveren \'%LABEL%\' kører igen, it was down for %LAST_OFFLINE_DURATION%:<br><br>Server:
'title_sign_in' => 'Log ind', %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>Dato: %DATE%',
'title_forgot' => 'Glemt adgangskode?', 'on_pushover_title' => 'Serveren \'%LABEL%\' KØRER',
'title_reset' => 'Nulstil din adgangskode', 'on_pushover_message' => 'Serveren \'%LABEL%\' kører igen, it was down for
'submit' => 'Indsend', %LAST_OFFLINE_DURATION%:<br><br>Server: %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>Dato:
'remember_me' => 'Husk kode', %DATE%',
'login' => 'Log ind', ),
'logout' => 'Log ud', 'login' => array(
'username' => 'Brugernavn', 'welcome_usermenu' => 'Velkommen, %user_name%',
'password' => 'Adgangskode', 'title_sign_in' => 'Log ind',
'password_repeat' => 'Skriv adgangskode igen', 'title_forgot' => 'Glemt adgangskode?',
'password_forgot' => 'Glemt adgangskode?', 'title_reset' => 'Nulstil din adgangskode',
'password_reset' => 'Nulstil adgangskode', 'submit' => 'Indsend',
'password_reset_email_subject' => 'Nulstil din adgangskode for PHP Server Monitor', 'remember_me' => 'Husk kode',
'password_reset_email_body' => 'Brug venligst følgende link for at nulstille din adgangskode. Bemærk at linkets gyldighed udløber efter en time.<br><br>%link%', 'login' => 'Log ind',
'error_user_incorrect' => 'Det angivet brugernavn kunne ikke findes.', 'logout' => 'Log ud',
'error_login_incorrect' => 'Oplysningerne stemmer ikke overens.', 'username' => 'Brugernavn',
'error_login_passwords_nomatch' => 'De angivne adgangskoder er ikke ens.', 'password' => 'Adgangskode',
'error_reset_invalid_link' => 'Følgende link er ugyldigt.', 'password_repeat' => 'Skriv adgangskode igen',
'success_password_forgot' => 'En e-mail er blevet sendt til dig med oplysninger om, hvordan du nulstiller din adgangskode.', 'password_forgot' => 'Glemt adgangskode?',
'success_password_reset' => 'Din adgangskode er blevet nulstillet. Log venligst ind igen.', 'password_reset' => 'Nulstil adgangskode',
), 'password_reset_email_subject' => 'Nulstil din adgangskode for PHP Server Monitor',
'error' => array( 'password_reset_email_body' => 'Brug venligst følgende link for at nulstille din adgangskode. Bemærk at
'401_unauthorized' => 'Uautoriseret', linkets gyldighed udløber efter en time.<br><br>%link%',
'401_unauthorized_description' => 'Du har ikke rettigheder til at se denne side.', 'error_user_incorrect' => 'Det angivet brugernavn kunne ikke findes.',
), 'error_login_incorrect' => 'Oplysningerne stemmer ikke overens.',
'error_login_passwords_nomatch' => 'De angivne adgangskoder er ikke ens.',
'error_reset_invalid_link' => 'Følgende link er ugyldigt.',
'success_password_forgot' => 'En e-mail er blevet sendt til dig med oplysninger om, hvordan du nulstiller din
adgangskode.',
'success_password_reset' => 'Din adgangskode er blevet nulstillet. Log venligst ind igen.',
),
'error' => array(
'401_unauthorized' => 'Uautoriseret',
'401_unauthorized_description' => 'Du har ikke rettigheder til at se denne side.',
),
); );

View File

@ -1,4 +1,5 @@
<?php <?php
/** /**
* PHP Server Monitor * PHP Server Monitor
* Monitor your servers and websites. * Monitor your servers and websites.
@ -26,285 +27,305 @@
**/ **/
$sm_lang = array( $sm_lang = array(
'name' => 'Deutsch - German', 'name' => 'Deutsch - German',
'locale' => array('de_DE.UTF-8', 'de_DE', 'german'), 'locale' => array(
'locale_tag' => 'de', '0' => 'de_DE.UTF-8',
'locale_dir' => 'ltr', '1' => 'de_DE',
'system' => array( '2' => 'german',
'title' => 'Server Monitor', ),
'install' => 'Installation', 'locale_tag' => 'de',
'action' => 'Aktion', 'locale_dir' => 'ltr',
'save' => 'Speichern', 'system' => array(
'edit' => 'Bearbeiten', 'title' => 'Server Monitor',
'delete' => 'Löschen', 'install' => 'Installation',
'date' => 'Datum', 'action' => 'Aktion',
'message' => 'Meldung', 'save' => 'Speichern',
'yes' => 'Ja', 'edit' => 'Bearbeiten',
'no' => 'Nein', 'delete' => 'Löschen',
'insert' => 'Einfügen', 'date' => 'Datum',
'add_new' => 'Neuen Eintrag erstellen', 'message' => 'Meldung',
'update_available' => 'Eine Aktualisierung ({version}) ist verfügbar unter <a href="https://github.com/phpservermon/phpservermon/releases/latest" target="_blank" rel="noopener">http://www.phpservermonitor.org</a>.', 'yes' => 'Ja',
'back_to_top' => 'nach oben', 'no' => 'Nein',
'go_back' => 'Zurück', 'insert' => 'Einfügen',
'ok' => 'OK', 'add_new' => 'Neuen Eintrag erstellen',
'cancel' => 'Abbrechen', 'update_available' => 'Eine Aktualisierung ({version}) ist verfügbar unter <a
// date/time format according the strftime php function format parameter http://php.net/manual/function.strftime.php href="https://github.com/phpservermon/phpservermon/releases/latest" target="_blank"
'short_day_format' => '%B %e', rel="noopener">http://www.phpservermonitor.org</a>.',
'long_day_format' => '%B %e, %Y', 'back_to_top' => 'nach oben',
'yesterday_format' => 'Gestern um %k:%M Uhr', 'go_back' => 'Zurück',
'other_day_format' => '%A um %k:%M Uhr', 'ok' => 'OK',
'never' => 'Never', 'cancel' => 'Abbrechen',
'hours_ago' => 'vor %d Stunden', 'short_day_format' => '%B %e',
'an_hour_ago' => 'vor über einer Stunde', 'long_day_format' => '%B %e, %Y',
'minutes_ago' => 'vor %d Minuten', 'yesterday_format' => 'Gestern um %k:%M Uhr',
'a_minute_ago' => 'vor über einer Minute', 'other_day_format' => '%A um %k:%M Uhr',
'seconds_ago' => 'vor %d Sekunden', 'never' => 'Never',
'a_second_ago' => 'vor über einer Sekunde', 'hours_ago' => 'vor %d Stunden',
'year' => 'year', 'an_hour_ago' => 'vor über einer Stunde',
'years' => 'years', 'minutes_ago' => 'vor %d Minuten',
'month' => 'month', 'a_minute_ago' => 'vor über einer Minute',
'months' => 'months', 'seconds_ago' => 'vor %d Sekunden',
'day' => 'day', 'a_second_ago' => 'vor über einer Sekunde',
'days' => 'days', ),
'hour' => 'hour', 'menu' => array(
'hours' => 'hours', 'config' => 'Einstellungen',
'minute' => 'minute', 'server' => 'Server',
'minutes' => 'minutes', 'server_log' => 'Protokoll',
'second' => 'second', 'server_status' => 'Status',
'seconds' => 'seconds', 'server_update' => 'Update',
), 'user' => 'Benutzer',
'menu' => array( 'help' => 'Hilfe',
'config' => 'Einstellungen', ),
'server' => 'Server', 'users' => array(
'server_log' => 'Protokoll', 'user' => 'Benutzer',
'server_status' => 'Status', 'name' => 'Name',
'server_update' => 'Update', 'user_name' => 'Benutzername',
'user' => 'Benutzer', 'password' => 'Passwort',
'help' => 'Hilfe', 'password_repeat' => 'Passwort wiederholen',
), 'password_leave_blank' => 'Passwort ändern...',
'users' => array( 'level' => 'Berechtigungsstufe',
'user' => 'Benutzer', 'level_10' => 'Administrator',
'name' => 'Name', 'level_20' => 'Benutzer',
'user_name' => 'Benutzername', 'level_description' => '<b>Administratoren</b> haben vollen Zugriff sie können Webseiten, Benutzer und
'password' => 'Passwort', globale Einstellungen verwalten.<br><b>Benutzer</b> können nur (für ihnen
'password_repeat' => 'Passwort wiederholen', zugeordnete Webseiten) Analysedaten einsehen und deren Aktualisierung veranlassen.',
'password_leave_blank' => 'Passwort ändern...', 'mobile' => 'Mobil',
'level' => 'Berechtigungsstufe', 'email' => 'E-Mail',
'level_10' => 'Administrator', 'pushover' => 'Pushover',
'level_20' => 'Benutzer', 'pushover_description' => 'Pushover ist ein Dienst, der es stark vereinfacht, Statusbenachrichtigungen in
'level_description' => '<b>Administratoren</b> haben vollen Zugriff — sie können Webseiten, Benutzer und globale Einstellungen verwalten.<br><b>Benutzer</b> können nur (für ihnen zugeordnete Webseiten) Analysedaten einsehen und deren Aktualisierung veranlassen.', Echtzeit zu erhalten. Besuchen Sie <a href="https://pushover.net/"
'mobile' => 'Mobil', target="_blank">pushover.net</a> für weitere Informationen.',
'email' => 'E-Mail', 'pushover_key' => 'Pushover Key/Schlüssel',
'pushover' => 'Pushover', 'pushover_device' => 'Pushover Gerät',
'pushover_description' => 'Pushover ist ein Dienst, der es stark vereinfacht, Statusbenachrichtigungen in Echtzeit zu erhalten. Besuchen Sie <a href="https://pushover.net/">pushover.net</a> für weitere Informationen.', 'pushover_device_description' => 'Name des Gerätes, an das die Nachricht gesendet werden soll. Leer lassen,
'pushover_key' => 'Pushover Key/Schlüssel', um die Nachricht an alle registrierten Geräte zu senden.',
'pushover_device' => 'Pushover Gerät', 'delete_title' => 'Benutzer löschen',
'pushover_device_description' => 'Name des Gerätes, an das die Nachricht gesendet werden soll. Leer lassen, um die Nachricht an alle registrierten Geräte zu senden.', 'delete_message' => 'Sind Sie sicher, dass Sie den Benutzer \'%1\' löschen wollen?',
'delete_title' => 'Benutzer löschen', 'deleted' => 'Benutzer gelöscht.',
'delete_message' => 'Sind Sie sicher, dass Sie den Benutzer \'%1\' löschen wollen?', 'updated' => 'Benutzer bearbeitet.',
'deleted' => 'Benutzer gelöscht.', 'inserted' => 'Benutzer hinzugefügt.',
'updated' => 'Benutzer bearbeitet.', 'profile' => 'Profileinstellungen',
'inserted' => 'Benutzer hinzugefügt.', 'profile_updated' => 'Ihr Profil wurde aktualisiert.',
'profile' => 'Profileinstellungen', 'error_user_name_bad_length' => 'Benutzernamen müssen zwischen 2 und 64 Zeichen lang sein.',
'profile_updated' => 'Ihr Profil wurde aktualisiert.', 'error_user_name_invalid' => 'Der Benutzername darf nur alphanumerische Zeichen (a-z, A-Z), Zahlen (0-9),
'error_user_name_bad_length' => 'Benutzernamen müssen zwischen 2 und 64 Zeichen lang sein.', Punkte (.) und Unterstriche (_) enthalten.',
'error_user_name_invalid' => 'Der Benutzername darf nur alphanumerische Zeichen (a-z, A-Z), Zahlen (0-9), Punkte (.) und Unterstriche (_) enthalten.', 'error_user_name_exists' => 'Der gewählte Benutzername existiert bereits in der Datenbank.',
'error_user_name_exists' => 'Der gewählte Benutzername existiert bereits in der Datenbank.', 'error_user_email_bad_length' => 'E-Mail-Adressen müssen zwischen 5 und 255 Zeichen lang sein.',
'error_user_email_bad_length' => 'E-Mail-Adressen müssen zwischen 5 und 255 Zeichen lang sein.', 'error_user_email_invalid' => 'Die E-Mail-Adresse ist ungültig.',
'error_user_email_invalid' => 'Die E-Mail-Adresse ist ungültig.', 'error_user_level_invalid' => 'Die gewählte Berechtigungsstufe ist ungültig.',
'error_user_level_invalid' => 'Die gewählte Berechtigungsstufe ist ungültig.', 'error_user_no_match' => 'Der Benutzer konnte in der Datenbank nicht gefunden werden.',
'error_user_no_match' => 'Der Benutzer konnte in der Datenbank nicht gefunden werden.', 'error_user_password_invalid' => 'Das eingegebene Passwort ist nicht korrekt.',
'error_user_password_invalid' => 'Das eingegebene Passwort ist nicht korrekt.', 'error_user_password_no_match' => 'Die eingegebenen Passwörter stimmen nicht überein.',
'error_user_password_no_match' => 'Die eingegebenen Passwörter stimmen nicht überein.', ),
), 'log' => array(
'log' => array( 'title' => 'Protokoll',
'title' => 'Protokoll', 'type' => 'Typ',
'type' => 'Typ', 'status' => 'Status',
'status' => 'Status', 'email' => 'E-Mail',
'email' => 'E-Mail', 'sms' => 'SMS',
'sms' => 'SMS', 'pushover' => 'Pushover',
'pushover' => 'Pushover', 'no_logs' => 'Keine Logs vorhanden.',
'no_logs' => 'Keine Logs vorhanden.', 'clear' => 'Protokoll Logs',
'clear' => 'Protokoll Logs', 'delete_title' => 'Protokoll Logs',
'delete_title' => 'Protokoll Logs', 'delete_message' => 'Bist du sicher, dass du <b>alle</b> logs löschen möchtest?',
'delete_message' => 'Bist du sicher, dass du <b>alle</b> logs löschen möchtest?', ),
), 'servers' => array(
'servers' => array( 'server' => 'Server',
'server' => 'Server', 'status' => 'Status',
'status' => 'Status', 'label' => 'Beschriftung',
'label' => 'Beschriftung', 'domain' => 'Domain/IP',
'domain' => 'Domain/IP', 'timeout' => 'Timeout',
'timeout' => 'Timeout', 'timeout_description' => 'Anzahl der Sekunden, die auf eine Antwort des Servers gewartet werden soll.',
'timeout_description' => 'Anzahl der Sekunden, die auf eine Antwort des Servers gewartet werden soll.', 'port' => 'Port',
'port' => 'Port', 'type' => 'Typ',
'type' => 'Typ', 'type_website' => 'Webseite',
'type_website' => 'Webseite', 'type_service' => 'Service',
'type_service' => 'Service', 'type_ping' => 'Ping',
'type_ping' => 'Ping', 'pattern' => 'Suchstring/-muster',
'pattern' => 'Suchstring/-muster', 'pattern_description' => 'Wenn das gesuchte Muster nicht in der Webseite ist, wird die Seite als offline
'pattern_description' => 'Wenn das gesuchte Muster nicht in der Webseite ist, wird die Seite als offline markiert. Reguläre Ausdrücke sind erlaubt.', markiert. Reguläre Ausdrücke sind erlaubt.',
'last_check' => 'Letzter Check', 'last_check' => 'Letzter Check',
'last_online' => 'Zuletzt online', 'last_online' => 'Zuletzt online',
'last_offline' => 'Zuletzt offline', 'last_offline' => 'Zuletzt offline',
'monitoring' => 'Monitoring', 'monitoring' => 'Monitoring',
'no_monitoring' => 'Monitoring inaktiv', 'no_monitoring' => 'Monitoring inaktiv',
'email' => 'E-Mail', 'email' => 'E-Mail',
'send_email' => 'E-Mail versenden', 'send_email' => 'E-Mail versenden',
'sms' => 'SMS', 'sms' => 'SMS',
'send_sms' => 'SMS versenden', 'send_sms' => 'SMS versenden',
'pushover' => 'Pushover', 'pushover' => 'Pushover',
'users' => 'Benutzer', 'users' => 'Benutzer',
'delete_title' => 'Server löschen', 'delete_title' => 'Server löschen',
'delete_message' => 'Sind Sie sicher, dass Sie den Server \'%1\' löschen wollen?', 'delete_message' => 'Sind Sie sicher, dass Sie den Server \'%1\' löschen wollen?',
'deleted' => 'Server gelöscht.', 'deleted' => 'Server gelöscht.',
'updated' => 'Server aktualisiert.', 'updated' => 'Server aktualisiert.',
'inserted' => 'Server hinzugefügt.', 'inserted' => 'Server hinzugefügt.',
'latency' => 'Antwortzeit', 'latency' => 'Antwortzeit',
'latency_max' => 'Antwortzeit (Maximum)', 'latency_max' => 'Antwortzeit (Maximum)',
'latency_min' => 'Antwortzeit (Minimum)', 'latency_min' => 'Antwortzeit (Minimum)',
'latency_avg' => 'Antwortzeit (im Durchschnitt)', 'latency_avg' => 'Antwortzeit (im Durchschnitt)',
'uptime' => 'Uptime', 'uptime' => 'Uptime',
'year' => 'Jahr', 'year' => 'Jahr',
'month' => 'Monat', 'month' => 'Monat',
'week' => 'Woche', 'week' => 'Woche',
'day' => 'Tag', 'day' => 'Tag',
'hour' => 'Stunde', 'hour' => 'Stunde',
'warning_threshold' => 'Warnschwelle', 'warning_threshold' => 'Warnschwelle',
'warning_threshold_description' => 'Anzahl der fehlgeschlagenen Überprüfungen, bevor der Status als offline markiert wird.', 'warning_threshold_description' => 'Anzahl der fehlgeschlagenen Überprüfungen, bevor der Status als offline
'chart_last_week' => 'Letzte Woche', markiert wird.',
'chart_history' => 'Historie', 'chart_last_week' => 'Letzte Woche',
// Charts date format according jqPlot date format http://www.jqplot.com/docs/files/plugins/jqplot-dateAxisRenderer-js.html 'chart_history' => 'Historie',
'chart_day_format' => '%d.%m.%Y', 'chart_day_format' => '%d.%m.%Y',
'chart_long_date_format' => '%d.%m.%Y %H:%M:%S Uhr', 'chart_long_date_format' => '%d.%m.%Y %H:%M:%S Uhr',
'chart_short_date_format' => '%d.%m %H:%M Uhr', 'chart_short_date_format' => '%d.%m %H:%M Uhr',
'chart_short_time_format' => '%H:%M Uhr', 'chart_short_time_format' => '%H:%M Uhr',
'warning_notifications_disabled_sms' => 'SMS-Benachrichtigungen sind deaktiviert.', 'warning_notifications_disabled_sms' => 'SMS-Benachrichtigungen sind deaktiviert.',
'warning_notifications_disabled_email' => 'E-Mail-Benachrichtigungen sind deaktiviert.', 'warning_notifications_disabled_email' => 'E-Mail-Benachrichtigungen sind deaktiviert.',
'warning_notifications_disabled_pushover' => 'Pushover-Benachrichtigungen sind deaktiviert.', 'warning_notifications_disabled_pushover' => 'Pushover-Benachrichtigungen sind deaktiviert.',
'error_server_no_match' => 'Server nicht gefunden.', 'error_server_no_match' => 'Server nicht gefunden.',
'error_server_label_bad_length' => 'Das Label muss zwischen 1 und 255 Zeichen lang sein.', 'error_server_label_bad_length' => 'Das Label muss zwischen 1 und 255 Zeichen lang sein.',
'error_server_ip_bad_length' => 'Die Domain/IP muss zwischen 1 und 255 Zeichen lang sein.', 'error_server_ip_bad_length' => 'Die Domain/IP muss zwischen 1 und 255 Zeichen lang sein.',
'error_server_ip_bad_service' => 'Die eingegebene IP-Adresse ist ungültig.', 'error_server_ip_bad_service' => 'Die eingegebene IP-Adresse ist ungültig.',
'error_server_ip_bad_website' => 'Die eingegebene Webseiten-URL ist ungültig.', 'error_server_ip_bad_website' => 'Die eingegebene Webseiten-URL ist ungültig.',
'error_server_type_invalid' => 'Der gewählte Server-Typ ist ungültig.', 'error_server_type_invalid' => 'Der gewählte Server-Typ ist ungültig.',
'error_server_warning_threshold_invalid' => 'Die Warnschwelle muss eine gültige ganze Zahl größer als 0 sein.', 'error_server_warning_threshold_invalid' => 'Die Warnschwelle muss eine gültige ganze Zahl größer als 0
), sein.',
'config' => array( ),
'general' => 'Allgemein', 'config' => array(
'language' => 'Sprache', 'general' => 'Allgemein',
'show_update' => 'Wöchentlich auf Aktualisierungen prüfen?', 'language' => 'Sprache',
'email_status' => 'E-Mail-Versand erlauben?', 'show_update' => 'Wöchentlich auf Aktualisierungen prüfen?',
'email_from_email' => 'Absenderadresse', 'email_status' => 'E-Mail-Versand erlauben?',
'email_from_name' => 'Name des Absenders', 'email_from_email' => 'Absenderadresse',
'email_smtp' => 'SMTP-Versand aktivieren', 'email_from_name' => 'Name des Absenders',
'email_smtp_host' => 'SMTP Server/Host', 'email_smtp' => 'SMTP-Versand aktivieren',
'email_smtp_port' => 'SMTP Port', 'email_smtp_host' => 'SMTP Server/Host',
'email_smtp_security' => 'SMTP security', 'email_smtp_port' => 'SMTP Port',
'email_smtp_security_none' => 'None', 'email_smtp_security' => 'SMTP security',
'email_smtp_username' => 'SMTP Benutzername', 'email_smtp_security_none' => 'None',
'email_smtp_password' => 'SMTP Passwort', 'email_smtp_username' => 'SMTP Benutzername',
'email_smtp_noauth' => 'Feld leer lassen, bei fehlender Authentifizierung', 'email_smtp_password' => 'SMTP Passwort',
'sms_status' => 'SMS-Nachrichtenversand erlauben?', 'email_smtp_noauth' => 'Feld leer lassen, bei fehlender Authentifizierung',
'sms_gateway' => 'SMS Gateway', 'sms_status' => 'SMS-Nachrichtenversand erlauben?',
'sms_gateway_username' => 'Gateway Benutzername', 'sms_gateway' => 'SMS Gateway',
'sms_gateway_password' => 'Gateway Passwort', 'sms_gateway_username' => 'Gateway Benutzername',
'sms_from' => 'SMS-Sendernummer', 'sms_gateway_password' => 'Gateway Passwort',
'pushover_status' => 'Ermögliche das Senden von Pushover-Nachrichten', 'sms_from' => 'SMS-Sendernummer',
'pushover_description' => 'Pushover ist ein Dienst, der es stark vereinfacht, Statusbenachrichtigungen in Echtzeit zu erhalten. Besuchen Sie <a href="https://pushover.net/">pushover.net</a> für weitere Informationen.', 'pushover_status' => 'Ermögliche das Senden von Pushover-Nachrichten',
'pushover_clone_app' => 'Klicken Sie hier, um Ihre Pushover-Anwendung zu erstellen', 'pushover_description' => 'Pushover ist ein Dienst, der es stark vereinfacht, Statusbenachrichtigungen in
'pushover_api_token' => 'Pushover-Anwendungs-API-Token', Echtzeit zu erhalten. Besuchen Sie <a href="https://pushover.net/"
'pushover_api_token_description' => 'Bevor Sie Pushover verwenden können, müssen Sie Ihre <a href="%1$s" target="_blank" rel="noopener">Anwendung hier registrieren</a> und Ihren Anwendungs-API-Token hier eingeben.', target="_blank">pushover.net</a> für weitere Informationen.',
'alert_type' => 'Wann möchten Sie benachrichtigt werden?', 'pushover_clone_app' => 'Klicken Sie hier, um Ihre Pushover-Anwendung zu erstellen',
'alert_type_description' => '<b>Status geändert:</b> '. 'pushover_api_token' => 'Pushover-Anwendungs-API-Token',
'... wenn sich der Status ändert<br>'. 'pushover_api_token_description' => 'Bevor Sie Pushover verwenden können, müssen Sie Ihre <a href="%1$s"
'z. B. online -> offline oder offline -> online.<br>'. target="_blank" rel="noopener">Anwendung hier registrieren</a> und Ihren
'<br><b>Offline: </b>'. Anwendungs-API-Token hier eingeben.',
'Sie bekommen eine Benachrichtigung, wenn ein Server offline ist.<br>'. 'alert_type' => 'Wann möchten Sie benachrichtigt werden?',
'Es wird nur eine Mitteilung versendet.<br>'. 'alert_type_description' => '<b>Status geändert:</b> ... wenn sich der Status ändert<br>z. B. online ->
'<br><b>Immer: </b>'. offline oder offline -> online.<br><br><b>Offline: </b>Sie bekommen eine
'Sie erhalten jedes Mal eine Benachrichtigung, sobald der CronJob oder das Skript ausgeführt werden, auch wenn der Dienst mehrere Stunden offline sein sollte.', Benachrichtigung, wenn ein Server offline ist.<br>Es wird nur eine Mitteilung
'alert_type_status' => 'Status geändert', versendet.<br><br><b>Immer: </b>Sie erhalten jedes Mal eine Benachrichtigung,
'alert_type_offline' => 'Offline', sobald der CronJob oder das Skript ausgeführt werden, auch wenn der Dienst
'alert_type_always' => 'Immer', mehrere Stunden offline sein sollte.',
'log_status' => 'Protokollierung aktivieren?', 'alert_type_status' => 'Status geändert',
'log_status_description' => 'Ist die Protokollierung aktiviert (d.h. ist ein Haken gesetzt), wird jeder Status und jede Meldung vom System protokolliert.', 'alert_type_offline' => 'Offline',
'log_email' => 'E-Mail-Versand protokollieren?', 'alert_type_always' => 'Immer',
'log_sms' => 'SMS-Versand protokollieren?', 'log_status' => 'Protokollierung aktivieren?',
'log_pushover' => 'Pushover-Versand protokollieren?', 'log_status_description' => 'Ist die Protokollierung aktiviert (d.h. ist ein Haken gesetzt), wird jeder Status
'updated' => 'Die Einstellungen wurden gespeichert.', und jede Meldung vom System protokolliert.',
'tab_email' => 'E-Mail', 'log_email' => 'E-Mail-Versand protokollieren?',
'tab_sms' => 'SMS', 'log_sms' => 'SMS-Versand protokollieren?',
'tab_pushover' => 'Pushover', 'log_pushover' => 'Pushover-Versand protokollieren?',
'settings_email' => 'E-Mail-Einstellungen', 'updated' => 'Die Einstellungen wurden gespeichert.',
'settings_sms' => 'SMS-Einstellungen', 'tab_email' => 'E-Mail',
'settings_pushover' => 'Pushover-Einstellungen', 'tab_sms' => 'SMS',
'settings_notification' => 'Benachrichtigungseinstellungen', 'tab_pushover' => 'Pushover',
'settings_log' => 'Protokollierungseinstellungen', 'settings_email' => 'E-Mail-Einstellungen',
'auto_refresh' => 'Automatische Aktualisierung', 'settings_sms' => 'SMS-Einstellungen',
'auto_refresh_description' => 'settings_pushover' => 'Pushover-Einstellungen',
'Automatische Aktualisierung der Server-Übersichtsseite<br>'. 'settings_notification' => 'Benachrichtigungseinstellungen',
'<span class="small">'. 'settings_log' => 'Protokollierungseinstellungen',
'Zeit in Sekunden - die Ziffer \'0\' deaktiviert die automatische Aktualisierung.'. 'auto_refresh' => 'Automatische Aktualisierung',
'</span>', 'auto_refresh_description' => 'Automatische Aktualisierung der Server-Übersichtsseite<br><span
'seconds' => 'Sekunden', class="small">Zeit in Sekunden - die Ziffer \'0\' deaktiviert die automatische
'test' => 'Test', Aktualisierung.</span>',
'test_email' => 'Eine E-Mail wird an die E-Mail-Adresse gesendet, die in Ihrem Profil hinterlegt ist.', 'seconds' => 'Sekunden',
'test_sms' => 'Eine SMS wird an die Telefonnummer gesendet, die in Ihrem Profil hinterlegt ist.', 'test' => 'Test',
'test_pushover' => 'Eine Pushover-Benachrichtigung wird an den Schlüssel/das Gerät gesendet, welche(s) in Ihrem Profil hinterlegt ist.', 'test_email' => 'Eine E-Mail wird an die E-Mail-Adresse gesendet, die in Ihrem Profil hinterlegt ist.',
'send' => 'Senden', 'test_sms' => 'Eine SMS wird an die Telefonnummer gesendet, die in Ihrem Profil hinterlegt ist.',
'test_subject' => 'Test', 'test_pushover' => 'Eine Pushover-Benachrichtigung wird an den Schlüssel/das Gerät gesendet, welche(s) in
'test_message' => 'Testnachricht', Ihrem Profil hinterlegt ist.',
'email_sent' => 'E-Mail gesendet.', 'send' => 'Senden',
'email_error' => 'Beim Versand der E-Mail trat ein Fehler auf.', 'test_subject' => 'Test',
'sms_sent' => 'SMS-Nachricht gesendet.', 'test_message' => 'Testnachricht',
'sms_error' => 'Beim Versand der SMS-Nachricht trat ein Fehler auf. %s', 'email_sent' => 'E-Mail gesendet.',
'sms_error_nomobile' => 'Versand der SMS-Nachricht nicht möglich: Es wurde keine gültige Telefonnummer in Ihrem Profil hinterlegt.', 'email_error' => 'Beim Versand der E-Mail trat ein Fehler auf.',
'pushover_sent' => 'Pushover-Benachrichtigung versendet', 'sms_sent' => 'SMS-Nachricht gesendet.',
'pushover_error' => 'Beim Versand der Pushover-Benachrichtigung trat ein Fehler auf: %s', 'sms_error' => 'Beim Versand der SMS-Nachricht trat ein Fehler auf. %s',
'pushover_error_noapp' => 'Es konnte keine Testbenachrichtigung versendet werden: Kein Pushover-Anwendungs-API-Token in den allgemeinen Einstellungen hinterlegt.', 'sms_error_nomobile' => 'Versand der SMS-Nachricht nicht möglich: Es wurde keine gültige Telefonnummer in
'pushover_error_nokey' => 'Es konnte keine Testbenachrichtigung versendet werden: Es wurde kein Pushover Key/Schlüssel in Ihrem Profil hinterlegt.', Ihrem Profil hinterlegt.',
'log_retention_period' => 'Protokollierungszeitraum', 'pushover_sent' => 'Pushover-Benachrichtigung versendet',
'log_retention_period_description' => 'Anzahl in Tagen bis zur automatischen Bereinigung/Löschung sämtlicher Protokollierungsdaten im System. Geben Sie die Ziffer \'0\' ein, um die automatische Bereinigung/Löschung zu deaktivieren.', 'pushover_error' => 'Beim Versand der Pushover-Benachrichtigung trat ein Fehler auf: %s',
'log_retention_days' => 'Tage', 'pushover_error_noapp' => 'Es konnte keine Testbenachrichtigung versendet werden: Kein
), Pushover-Anwendungs-API-Token in den allgemeinen Einstellungen hinterlegt.',
// for newlines in the email messages use <br> 'pushover_error_nokey' => 'Es konnte keine Testbenachrichtigung versendet werden: Es wurde kein Pushover
'notifications' => array( Key/Schlüssel in Ihrem Profil hinterlegt.',
'off_sms' => 'Dienst/Webseite \'%LABEL%\' ist offline: ip=%IP%, port=%PORT%. Fehler=%ERROR%', 'log_retention_period' => 'Protokollierungszeitraum',
'off_email_subject' => 'Warnung: Dienst/Webseite \'%LABEL%\' ist offline.', 'log_retention_period_description' => 'Anzahl in Tagen bis zur automatischen Bereinigung/Löschung sämtlicher
'off_email_body' => "Kann keine funktionierende Verbindung zum Dienst bzw. der Webseite aufbauen:<br><br>Dienst/Webseite: %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>Fehler: %ERROR%<br>Datum: %DATE% Uhr", Protokollierungsdaten im System. Geben Sie die Ziffer \'0\' ein, um die
'off_pushover_title' => 'Dienst/Webseite \'%LABEL%\' ist offline.', automatische Bereinigung/Löschung zu deaktivieren.',
'off_pushover_message' => "Kann keine funktionierende Verbindung zum Dienst bzw. der Webseite aufbauen:<br><br>Dienst/Webseite: %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>Fehler: %ERROR%<br>Datum: %DATE% Uhr", 'log_retention_days' => 'Tage',
'on_sms' => 'Dienst/Webseite \'%LABEL%\' ist wieder online: ip=%IP%, port=%PORT%, it was down for %LAST_OFFLINE_DURATION%', ),
'on_email_subject' => 'Hinweis: Dienst/Webseite \'%LABEL%\' ist wieder online.', 'notifications' => array(
'on_email_body' => "Dienst/Webseite '%LABEL%' ist wieder erreichbar, it was down for %LAST_OFFLINE_DURATION%:<br><br>Server: %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>Datum: %DATE% Uhr", 'off_sms' => 'Dienst/Webseite \'%LABEL%\' ist offline: ip=%IP%, port=%PORT%. Fehler=%ERROR%',
'on_pushover_title' => 'Dienst/Webseite \'%LABEL%\' ist wieder online.', 'off_email_subject' => 'Warnung: Dienst/Webseite \'%LABEL%\' ist offline.',
'on_pushover_message' => "Dienst/Webseite '%LABEL%' ist wieder erreichbar, it was down for %LAST_OFFLINE_DURATION%:<br><br>Server: %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>Datum: %DATE% Uhr", 'off_email_body' => 'Kann keine funktionierende Verbindung zum Dienst bzw. der Webseite
), aufbauen:<br><br>Dienst/Webseite: %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>Fehler:
'login' => array( %ERROR%<br>Datum: %DATE% Uhr',
'welcome_usermenu' => '%user_name%', 'off_pushover_title' => 'Dienst/Webseite \'%LABEL%\' ist offline.',
'title_sign_in' => 'Bitte loggen Sie sich ein.', 'off_pushover_message' => 'Kann keine funktionierende Verbindung zum Dienst bzw. der Webseite
'title_forgot' => 'Passwort vergessen?', aufbauen:<br><br>Dienst/Webseite: %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>Fehler:
'title_reset' => 'Ihr Passwort zurücksetzen', %ERROR%<br>Datum: %DATE% Uhr',
'submit' => 'Senden', 'on_sms' => 'Dienst/Webseite \'%LABEL%\' ist wieder online: ip=%IP%, port=%PORT%, it was down for
'remember_me' => 'Angemeldet bleiben', %LAST_OFFLINE_DURATION%',
'login' => 'Login', 'on_email_subject' => 'Hinweis: Dienst/Webseite \'%LABEL%\' ist wieder online.',
'logout' => 'Abmelden', 'on_email_body' => 'Dienst/Webseite \'%LABEL%\' ist wieder erreichbar, it was down for
'username' => 'Benutzername', %LAST_OFFLINE_DURATION%:<br><br>Server: %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>Datum:
'password' => 'Passwort', %DATE% Uhr',
'password_repeat' => 'Passwort wiederholen', 'on_pushover_title' => 'Dienst/Webseite \'%LABEL%\' ist wieder online.',
'password_forgot' => 'Passwort vergessen?', 'on_pushover_message' => 'Dienst/Webseite \'%LABEL%\' ist wieder erreichbar, it was down for
'password_reset' => 'Passwort zurücksetzen', %LAST_OFFLINE_DURATION%:<br><br>Server: %LABEL%<br>IP: %IP%<br>Port:
'password_reset_email_subject' => 'Setzen Sie Ihr Zugangspasswort für den Server Monitor', %PORT%<br>Datum: %DATE% Uhr',
'password_reset_email_body' => 'Benutzen Sie bitte den folgenden Link, um Ihr Zugangspasswort zurückzusetzen. Bitte beachten Sie: Der Link verfällt in 1 Stunde.<br><br>%link%', ),
'error_user_incorrect' => 'Der angegebene Benutzername konnte nicht gefunden werden.', 'login' => array(
'error_login_incorrect' => 'Die angegebenen Informationen sind leider nicht korrekt.', 'welcome_usermenu' => '%user_name%',
'error_login_passwords_nomatch' => 'Die angegebenen Passwörter stimmen nicht überein.', 'title_sign_in' => 'Bitte loggen Sie sich ein.',
'error_reset_invalid_link' => 'Der angegebene Link, um Ihr Zugangspasswort zurückzusetzen, ist ungültig.', 'title_forgot' => 'Passwort vergessen?',
'success_password_forgot' => 'Eine Nachricht wurde an Ihre E-Mail-Adresse versendet. Sie beschreibt, wie Sie Ihr Passwort zurücksetzen können.', 'title_reset' => 'Ihr Passwort zurücksetzen',
'success_password_reset' => 'Ihr Passwort wurde erfolgreich zurückgesetzt. Bitte versuchen Sie, sich erneut anzumelden.', 'submit' => 'Senden',
), 'remember_me' => 'Angemeldet bleiben',
'error' => array( 'login' => 'Login',
'401_unauthorized' => 'Nicht autorisiert', 'logout' => 'Abmelden',
'401_unauthorized_description' => 'Sie haben nicht die erforderlichen Zugriffsrechte, um diese Seite aufzurufen.', 'username' => 'Benutzername',
), 'password' => 'Passwort',
'password_repeat' => 'Passwort wiederholen',
'password_forgot' => 'Passwort vergessen?',
'password_reset' => 'Passwort zurücksetzen',
'password_reset_email_subject' => 'Setzen Sie Ihr Zugangspasswort für den Server Monitor',
'password_reset_email_body' => 'Benutzen Sie bitte den folgenden Link, um Ihr Zugangspasswort zurückzusetzen.
Bitte beachten Sie: Der Link verfällt in 1 Stunde.<br><br>%link%',
'error_user_incorrect' => 'Der angegebene Benutzername konnte nicht gefunden werden.',
'error_login_incorrect' => 'Die angegebenen Informationen sind leider nicht korrekt.',
'error_login_passwords_nomatch' => 'Die angegebenen Passwörter stimmen nicht überein.',
'error_reset_invalid_link' => 'Der angegebene Link, um Ihr Zugangspasswort zurückzusetzen, ist ungültig.',
'success_password_forgot' => 'Eine Nachricht wurde an Ihre E-Mail-Adresse versendet. Sie beschreibt, wie Sie
Ihr Passwort zurücksetzen können.',
'success_password_reset' => 'Ihr Passwort wurde erfolgreich zurückgesetzt. Bitte versuchen Sie, sich erneut
anzumelden.',
),
'error' => array(
'401_unauthorized' => 'Nicht autorisiert',
'401_unauthorized_description' => 'Sie haben nicht die erforderlichen Zugriffsrechte, um diese Seite
aufzurufen.',
),
); );

View File

@ -1,4 +1,5 @@
<?php <?php
/** /**
* PHP Server Monitor * PHP Server Monitor
* Monitor your servers and websites. * Monitor your servers and websites.
@ -26,376 +27,475 @@
**/ **/
$sm_lang = array( $sm_lang = array(
'name' => 'English', 'name' => 'English',
'locale' => array('en_US.UTF-8', 'en_US', 'american', 'english-us'), 'locale' => array(
'locale_tag' => 'en', '0' => 'en_US.UTF-8',
'locale_dir' => 'ltr', '1' => 'en_US',
'system' => array( '2' => 'american',
'title' => 'Server Monitor', '3' => 'english-us',
'install' => 'Install', ),
'action' => 'Action', 'locale_tag' => 'en',
'save' => 'Save', 'locale_dir' => 'ltr',
'edit' => 'Edit', 'system' => array(
'delete' => 'Delete', 'title' => 'Server Monitor',
'view' => 'View', 'install' => 'Install',
'date' => 'Date', 'action' => 'Action',
'message' => 'Message', 'save' => 'Save',
'yes' => 'Yes', 'edit' => 'Edit',
'no' => 'No', 'delete' => 'Delete',
'insert' => 'Insert', 'view' => 'View',
'add_new' => 'Add new', 'date' => 'Date',
'update_available' => 'A new version ({version}) is available. Click <a href="https://github.com/phpservermon/phpservermon/releases/latest" target="_blank" rel="noopener">here</a> to download the update.', 'message' => 'Message',
'back_to_top' => 'Back to top', 'yes' => 'Yes',
'go_back' => 'Go back', 'no' => 'No',
'ok' => 'OK', 'insert' => 'Insert',
'bad' => 'bad', 'add_new' => 'Add new',
'cancel' => 'Cancel', 'update_available' => 'A new version ({version}) is available. Click <a
'none' => 'None', href="https://github.com/phpservermon/phpservermon/releases/latest" target="_blank"
'activate' => 'Activate', rel="noopener">here</a> to download the update.',
// date/time format according the strftime php function format parameter http://php.net/manual/function.strftime.php 'back_to_top' => 'Back to top',
'short_day_format' => '%B %e', 'go_back' => 'Go back',
'long_day_format' => '%B %e, %Y', 'ok' => 'OK',
'yesterday_format' => 'Yesterday at %k:%M', 'bad' => 'bad',
'other_day_format' => '%A at %k:%M', 'cancel' => 'Cancel',
'never' => 'Never', 'none' => 'None',
'hours_ago' => '%d hours ago', 'activate' => 'Activate',
'an_hour_ago' => 'about an hour ago', 'short_day_format' => '%B %e',
'minutes_ago' => '%d minutes ago', 'long_day_format' => '%B %e, %Y',
'a_minute_ago' => 'about a minute ago', 'yesterday_format' => 'Yesterday at %k:%M',
'seconds_ago' => '%d seconds ago', 'other_day_format' => '%A at %k:%M',
'a_second_ago' => 'a second ago', 'never' => 'Never',
'year' => 'year', 'hours_ago' => '%d hours ago',
'years' => 'years', 'an_hour_ago' => 'about an hour ago',
'month' => 'month', 'minutes_ago' => '%d minutes ago',
'months' => 'months', 'a_minute_ago' => 'about a minute ago',
'day' => 'day', 'seconds_ago' => '%d seconds ago',
'days' => 'days', 'a_second_ago' => 'a second ago',
'hour' => 'hour', 'year' => 'year',
'hours' => 'hours', 'years' => 'years',
'minute' => 'minute', 'month' => 'month',
'minutes' => 'minutes', 'months' => 'months',
'second' => 'second', 'day' => 'day',
'seconds' => 'seconds', 'days' => 'days',
'current' => 'current', 'hour' => 'hour',
'settings' => 'Settings', 'hours' => 'hours',
'search' => 'Search' 'minute' => 'minute',
), 'minutes' => 'minutes',
'menu' => array( 'second' => 'second',
'config' => 'Config', 'seconds' => 'seconds',
'server' => 'Servers', 'current' => 'current',
'server_log' => 'Log', 'settings' => 'Settings',
'server_status' => 'Status', 'search' => 'Search',
'server_update' => 'Update', ),
'user' => 'Users', 'menu' => array(
'help' => 'Help', 'config' => 'Config',
), 'server' => 'Servers',
'users' => array( 'server_log' => 'Log',
'user' => 'User', 'server_status' => 'Status',
'name' => 'Name', 'server_update' => 'Update',
'user_name' => 'Username', 'user' => 'Users',
'password' => 'Password', 'help' => 'Help',
'password_repeat' => 'Password repeat', ),
'password_leave_blank' => 'Leave blank to keep unchanged', 'users' => array(
'level' => 'Level', 'user' => 'User',
'level_10' => 'Administrator', 'name' => 'Name',
'level_20' => 'User', 'user_name' => 'Username',
'level_description' => '<b>Administrators</b> have full access: they can manage servers, users and edit the global configuration.<br><b>Users</b> can only view and run the updater for the servers that have been assigned to them.', 'password' => 'Password',
'mobile' => 'Mobile', 'password_repeat' => 'Password repeat',
'email' => 'Email', 'password_leave_blank' => 'Leave blank to keep unchanged',
'pushover' => 'Pushover', 'level' => 'Level',
'pushover_description' => 'Pushover is a service that makes it easy to get real-time notifications. See <a href="https://pushover.net/">their website</a> for more info.', 'level_10' => 'Administrator',
'pushover_key' => 'Pushover Key', 'level_20' => 'User',
'pushover_device' => 'Pushover Device', 'level_description' => '<b>Administrators</b> have full access: they can manage servers, users and edit the
'pushover_device_description' => 'Device name to send the message to. Leave empty to send it to all devices.', global configuration.<br><b>Users</b> can only view and run the updater for the
'telegram' => 'Telegram', servers that have been assigned to them.',
'telegram_description' => '<a href="https://telegram.org/">Telegram</a> is a chat app that makes it easy to get real-time notifications. Visit the <a href="http://docs.phpservermonitor.org/">documentation</a> for more info and an install guide.', 'mobile' => 'Mobile',
'telegram_chat_id' => 'Telegram chat id', 'email' => 'Email',
'telegram_chat_id_description' => 'The message will be send to the corresponding chat.', 'pushover' => 'Pushover',
'telegram_get_chat_id' => 'Click here to get your chat id', 'pushover_description' => 'Pushover is a service that makes it easy to get real-time notifications. See <a
'activate_telegram' => 'Activate Telegram notifications', href="https://pushover.net/" target="_blank">their website</a> for more info.',
'activate_telegram_description' => 'Allow Telegram notifications to be sent to the specified chat id. Without this permission, Telegram doesn\'t allow us to send notifications to you.', 'pushover_key' => 'Pushover Key',
'telegram_bot_username_found' => 'The bot was found!<br><a href="%s" target="_blank" rel="noopener"><button class="btn btn-primary">Next step</button></a> <br>This will open a chat with the bot. Here you need to press start of type /start.', 'pushover_device' => 'Pushover Device',
'telegram_bot_username_error_token' => '401 - Unauthorized. Please make sure that the API token is valid.', 'pushover_device_description' => 'Device name to send the message to. Leave empty to send it to all devices.',
'telegram_bot_error' => 'An error has occurred while activating Telegram notification: %s', 'telegram' => 'Telegram',
'delete_title' => 'Delete User', 'telegram_description' => '<a href="https://telegram.org/" target="_blank">Telegram</a> is a chat app that
'delete_message' => 'Are you sure you want to delete user \'%1\'?', makes it easy to get real-time notifications. Visit the <a
'deleted' => 'User deleted.', href="http://docs.phpservermonitor.org/" target="_blank">documentation</a> for more
'updated' => 'User updated.', info and an install guide.',
'inserted' => 'User added.', 'telegram_chat_id' => 'Telegram chat id',
'profile' => 'Profile', 'telegram_chat_id_description' => 'The message will be send to the corresponding chat.',
'profile_updated' => 'Your profile has been updated.', 'telegram_get_chat_id' => 'Click here to get your chat id',
'error_user_name_bad_length' => 'Usernames must be between 2 and 64 characters.', 'activate_telegram' => 'Activate Telegram notifications',
'error_user_name_invalid' => 'The username may only contain alphabetic characters (a-z, A-Z), digits (0-9), dots (.) and underscores (_).', 'activate_telegram_description' => 'Allow Telegram notifications to be sent to the specified chat id. Without
'error_user_name_exists' => 'The given username already exists in the database.', this permission, Telegram doesn\'t allow us to send notifications to you.',
'error_user_email_bad_length' => 'Email addresses must be between 5 and 255 characters.', 'telegram_bot_username_found' => 'The bot was found!<br><a href="%s" target="_blank" rel="noopener"><button
'error_user_email_invalid' => 'The email address is invalid.', class="btn btn-primary">Next step</button></a> <br>This will open a chat
'error_user_level_invalid' => 'The given user level is invalid.', with the bot. Here you need to press start or type /start.',
'error_user_no_match' => 'The user could not be found in the database.', 'telegram_bot_username_error_token' => '401 - Unauthorized. Please make sure that the API token is valid.',
'error_user_password_invalid' => 'The entered password is invalid.', 'telegram_bot_error' => 'An error has occurred while activating Telegram notification: %s',
'error_user_password_no_match' => 'The entered passwords do not match.', 'jabber' => 'Jabber',
), 'jabber_label' => 'Jabber',
'log' => array( 'jabber_description' => 'You Jabber account',
'title' => 'Log entries', 'delete_title' => 'Delete User',
'type' => 'Type', 'delete_message' => 'Are you sure you want to delete user \'%1\'?',
'status' => 'Status', 'deleted' => 'User deleted.',
'email' => 'Email', 'updated' => 'User updated.',
'sms' => 'SMS', 'inserted' => 'User added.',
'pushover' => 'Pushover', 'profile' => 'Profile',
'telegram' => 'Telegram', 'profile_updated' => 'Your profile has been updated.',
'no_logs' => 'No logs', 'error_user_name_bad_length' => 'Usernames must be between 2 and 64 characters.',
'clear' => 'Clear log', 'error_user_name_invalid' => 'The username may only contain alphabetic characters (a-z, A-Z), digits (0-9),
'delete_title' => 'Delete log', dots (.) and underscores (_).',
'delete_message' => 'Are you sure you want to delete <b>all</b> logs?', 'error_user_name_exists' => 'The given username already exists in the database.',
), 'error_user_email_bad_length' => 'Email addresses must be between 5 and 255 characters.',
'servers' => array( 'error_user_email_invalid' => 'The email address is invalid.',
'server' => 'Server', 'error_user_level_invalid' => 'The given user level is invalid.',
'status' => 'Status', 'error_user_no_match' => 'The user could not be found in the database.',
'label' => 'Label', 'error_user_password_invalid' => 'The entered password is invalid.',
'domain' => 'Domain/IP', 'error_user_password_no_match' => 'The entered passwords do not match.',
'timeout' => 'Timeout', 'error_user_admin_cant_be_deleted' => 'You can\'t remove the last administrator.',
'timeout_description' => 'Number of seconds to wait for the server to respond.', ),
'authentication_settings' => 'Authentication Settings', 'log' => array(
'optional' => 'Optional', 'title' => 'Log entries',
'website_username' => 'Username', 'type' => 'Type',
'website_username_description' => 'Username to access the site. (Only Apache authentication is supported.)', 'status' => 'Status',
'website_password' => 'Password', 'email' => 'Email',
'website_password_description' => 'Password to access the site. The password is encrypted in the database.', 'sms' => 'SMS',
'fieldset_monitoring' => 'Monitoring', 'pushover' => 'Pushover',
'fieldset_permissions' => 'Permissions', 'telegram' => 'Telegram',
'permissions' => 'Server will be visible for the following users', 'jabber' => 'Jabber',
'port' => 'Port', 'no_logs' => 'No logs',
'custom_port' => 'Custom Port', 'clear' => 'Clear log',
'popular_ports' => 'Popular Ports', 'delete_title' => 'Delete log',
'request_method' => 'Request method', 'delete_message' => 'Are you sure you want to delete <b>all</b> logs?',
'custom_request_method' => 'Custom request method', ),
'popular_request_methods' => 'Popular request methods', 'servers' => array(
'post_field' => 'Post field', 'server' => 'Server',
'post_field_description' => 'The data that will be send using the request method above.', 'status' => 'Status',
'please_select' => 'Please select', 'label' => 'Label',
'type' => 'Type', 'domain' => 'Domain/IP',
'type_website' => 'Website', 'timeout' => 'Timeout',
'type_service' => 'Service', 'timeout_description' => 'Number of seconds to wait for the server to respond.',
'type_ping' => 'Ping', 'authentication_settings' => 'Authentication Settings',
'pattern' => 'Search string/pattern', 'optional' => 'Optional',
'pattern_description' => 'If this pattern is not found on the website, the server will be marked online/offline. Regular expressions are allowed.', 'website_username' => 'Username',
'pattern_online' => 'Pattern indicates website is', 'website_username_description' => 'Username to access the site. (Only Apache authentication is supported.)',
'pattern_online_description' => 'Online: If this pattern is not found on the website, the server will be marked online. Offline: If this pattern is not found on the website, the server will be marked offline.', 'website_password' => 'Password',
'redirect_check' => 'Redirecting to another domain is', 'website_password_description' => 'Password to access the site. The password is encrypted in the database.',
'redirect_check_description' => 'Redirect to another domain is usually a bad sign.', 'fieldset_monitoring' => 'Monitoring',
'allow_http_status' => 'Allow HTTP status code', 'fieldset_permissions' => 'Permissions',
'allow_http_status_description' => 'Mark website as online. HTTP Status codes lower then 400 are marked as online by default. Seperate with |.', 'permissions' => 'Server will be visible for the following users',
'header_name' => 'Header name', 'port' => 'Port',
'header_value' => 'Header value', 'custom_port' => 'Custom Port',
'header_name_description' => 'Case-sensitive.', 'popular_ports' => 'Popular Ports',
'header_value_description' => 'Regular expressions are allowed.', 'request_method' => 'Request method',
'last_check' => 'Last check', 'custom_request_method' => 'Custom request method',
'last_online' => 'Last online', 'popular_request_methods' => 'Popular request methods',
'last_offline' => 'Last offline', 'post_field' => 'Post field',
'last_output' => 'Last positive output', 'post_field_description' => 'The data that will be send using the request method above.',
'last_error' => 'Last error', 'please_select' => 'Please select',
'last_error_output' => 'Last error output', 'type' => 'Type',
'output' => 'Output', 'type_website' => 'Website',
'monitoring' => 'Monitoring', 'type_service' => 'Service',
'no_monitoring' => 'No monitoring', 'type_ping' => 'Ping',
'email' => 'Email', 'pattern' => 'Search string/pattern',
'send_email' => 'Send Email', 'pattern_description' => 'If this pattern is not found on the website, the server will be marked
'sms' => 'SMS', online/offline. Regular expressions are allowed.',
'send_sms' => 'Send SMS', 'pattern_online' => 'Pattern indicates website is',
'pushover' => 'Pushover', 'pattern_online_description' => 'Online: If this pattern was found on the website, the server will be marked
'send_pushover' => 'Send Pushover notification', online. Offline: If this pattern was not found on the website, the server
'telegram' => 'Telegram', will be marked offline.',
'send_telegram' => 'Send Telegram notification', 'redirect_check' => 'Redirecting to another domain is',
'users' => 'Users', 'redirect_check_description' => 'Redirect to another domain is usually a bad sign.',
'delete_title' => 'Delete server', 'allow_http_status' => 'Allow HTTP status code',
'delete_message' => 'Are you sure you want to delete server \'%1\'?', 'allow_http_status_description' => 'Mark website as online. HTTP Status codes lower then 400 are marked as
'deleted' => 'Server deleted.', online by default. Seperate with |.',
'updated' => 'Server updated.', 'header_name' => 'Header name',
'inserted' => 'Server added.', 'header_value' => 'Header value',
'latency' => 'Latency', 'header_name_description' => 'Case-sensitive.',
'latency_max' => 'Latency (maximum)', 'header_value_description' => 'Regular expressions are allowed.',
'latency_min' => 'Latency (minimum)', 'last_check' => 'Last check',
'latency_avg' => 'Latency (average)', 'last_online' => 'Last online',
'online' => 'online', 'last_offline' => 'Last offline',
'offline' => 'offline', 'last_output' => 'Last positive output',
'uptime' => 'Uptime', 'last_error' => 'Last error',
'year' => 'Year', 'last_error_output' => 'Last error output',
'month' => 'Month', 'output' => 'Output',
'week' => 'Week', 'monitoring' => 'Monitoring',
'day' => 'Day', 'no_monitoring' => 'No monitoring',
'hour' => 'Hour', 'email' => 'Email',
'warning_threshold' => 'Warning threshold', 'send_email' => 'Send Email',
'warning_threshold_description' => 'Number of failed checks required before it is marked offline.', 'sms' => 'SMS',
'chart_last_week' => 'Last week', 'send_sms' => 'Send SMS',
'chart_history' => 'History', 'pushover' => 'Pushover',
// Charts date format according jqPlot date format http://www.jqplot.com/docs/files/plugins/jqplot-dateAxisRenderer-js.html 'send_pushover' => 'Send Pushover notification',
'chart_day_format' => '%Y-%m-%d', 'telegram' => 'Telegram',
'chart_long_date_format' => '%Y-%m-%d %H:%M:%S', 'send_telegram' => 'Send Telegram notification',
'chart_short_date_format' => '%m/%d %H:%M', 'jabber' => 'Jabber',
'chart_short_time_format' => '%H:%M', 'send_jabber' => 'Send Jabber notification',
'warning_notifications_disabled_sms' => 'SMS notifications are disabled.', 'users' => 'Users',
'warning_notifications_disabled_email' => 'Email notifications are disabled.', 'delete_title' => 'Delete server',
'warning_notifications_disabled_pushover' => 'Pushover notifications are disabled.', 'delete_message' => 'Are you sure you want to delete server \'%1\'?',
'warning_notifications_disabled_telegram' => 'Telegram notifications are disabled.', 'deleted' => 'Server deleted.',
'error_server_no_match' => 'Server not found.', 'updated' => 'Server updated.',
'error_server_label_bad_length' => 'The label must be between 1 and 255 characters.', 'inserted' => 'Server added.',
'error_server_ip_bad_length' => 'The domain / IP must be between 1 and 255 characters.', 'latency' => 'Latency',
'error_server_ip_bad_service' => 'The IP address is not valid.', 'latency_max' => 'Latency (maximum)',
'error_server_ip_bad_website' => 'The website URL is not valid.', 'latency_min' => 'Latency (minimum)',
'error_server_type_invalid' => 'The selected server type is invalid.', 'latency_avg' => 'Latency (average)',
'error_server_warning_threshold_invalid' => 'The warning threshold must be a valid integer greater than 0.', 'online' => 'online',
), 'offline' => 'offline',
'config' => array( 'uptime' => 'Uptime',
'general' => 'General', 'year' => 'Year',
'language' => 'Language', 'month' => 'Month',
'show_update' => 'Check for updates?', 'week' => 'Week',
'password_encrypt_key' => 'The encryption key password', 'day' => 'Day',
'password_encrypt_key_note' => 'This key is used to encrypt passwords that are stored on servers for access to websites. If the key will change the stored password is invalid!', 'hour' => 'Hour',
'proxy' => 'Enable proxy', 'warning_threshold' => 'Warning threshold',
'proxy_url' => 'Proxy URL', 'warning_threshold_description' => 'Number of failed checks required before it is marked offline.',
'proxy_user' => 'Proxy username', 'ssl_cert_expiry_days' => 'SSL Certificate Validity',
'proxy_password' => 'Proxy password', 'ssl_cert_expiry_days_description' => 'The minimum remaining days the SSL certificate is still valid. Use 0 to
'email_status' => 'Allow sending email', disable check.',
'email_from_email' => 'Email from address', 'ssl_cert_expired' => 'SSL certificate expired since',
'email_from_name' => 'Email from name', 'ssl_cert_expiring' => 'SSL certificate expiring:',
'email_smtp' => 'Enable SMTP', 'chart_last_week' => 'Last week',
'email_smtp_host' => 'SMTP host', 'chart_history' => 'History',
'email_smtp_port' => 'SMTP port', 'chart_day_format' => '%Y-%m-%d',
'email_smtp_security' => 'SMTP security', 'chart_long_date_format' => '%Y-%m-%d %H:%M:%S',
'email_smtp_security_none' => 'None', 'chart_short_date_format' => '%m/%d %H:%M',
'email_smtp_username' => 'SMTP username', 'chart_short_time_format' => '%H:%M',
'email_smtp_password' => 'SMTP password', 'warning_notifications_disabled_sms' => 'SMS notifications are disabled.',
'email_smtp_noauth' => 'Leave blank for no authentication', 'warning_notifications_disabled_email' => 'Email notifications are disabled.',
'sms_status' => 'Allow sending text messages', 'warning_notifications_disabled_pushover' => 'Pushover notifications are disabled.',
'sms_gateway' => 'Gateway to use for sending messages', 'warning_notifications_disabled_telegram' => 'Telegram notifications are disabled.',
'sms_gateway_username' => 'Gateway username', 'warning_notifications_disabled_jabber' => 'Jabber notifications are disabled.',
'sms_gateway_password' => 'Gateway password', 'error_server_no_match' => 'Server not found.',
'sms_from' => 'Sender\'s phone number', 'error_server_label_bad_length' => 'The label must be between 1 and 255 characters.',
'pushover_status' => 'Allow sending Pushover messages', 'error_server_ip_bad_length' => 'The domain / IP must be between 1 and 255 characters.',
'pushover_description' => 'Pushover is a service that makes it easy to get real-time notifications. See <a href="https://pushover.net/">their website</a> for more info.', 'error_server_ip_bad_service' => 'The IP address is not valid.',
'pushover_clone_app' => 'Click here to create your Pushover app', 'error_server_ip_bad_website' => 'The website URL is not valid.',
'pushover_api_token' => 'Pushover App API Token', 'error_server_type_invalid' => 'The selected server type is invalid.',
'pushover_api_token_description' => 'Before you can use Pushover, you need to <a href="%1$s" target="_blank" rel="noopener">register an App</a> at their website and enter the App API Token here.', 'error_server_warning_threshold_invalid' => 'The warning threshold must be a valid integer greater than 0.',
'telegram_status' => 'Allow sending Telegram messages', 'error_server_ssl_cert_expiry_days' => 'The remaining days for SSL certificate validity must be a valid
'telegram_description' => '<a href="https://telegram.org/">Telegram</a> is a chat app that makes it easy to get real-time notifications. Visit the <a href="http://docs.phpservermonitor.org/">documentation</a> for more info and an install guide.', integer greater than or equal to 0.',
'telegram_api_token' => 'Telegram API Token', ),
'telegram_api_token_description' => 'Before you can use Telegram, you need to get a API token. Visit the <a href="http://docs.phpservermonitor.org/">documentation</a> for help.', 'config' => array(
'alert_type' => 'Select when you\'d like to be notified.', 'general' => 'General',
'alert_type_description' => '<b>Status change:</b> '. 'language' => 'Language',
'You will receive a notification when a server has a change in status. So from online -> offline or offline -> online.<br>'. 'show_update' => 'Check for updates?',
'<br><b>Offline:</b> '. 'password_encrypt_key' => 'The encryption key password',
'You will receive a notification when a server goes offline for the *FIRST TIME ONLY*. For example, '. 'password_encrypt_key_note' => 'This key is used to encrypt passwords that are stored on servers for access to
'your cronjob is every 15 minutes and your server goes down at 1 am and stays down till 6 am. '. websites. If the key will change the stored password is invalid!',
'You will get 1 notification at 1 am and that\'s it.<br>'. 'proxy' => 'Enable proxy',
'<br><b>Always:</b> '. 'proxy_url' => 'Proxy URL',
'You will receive a notification every time the script runs and a site is down, even if the site has been offline for hours.', 'proxy_user' => 'Proxy username',
'alert_type_status' => 'Status change', 'proxy_password' => 'Proxy password',
'alert_type_offline' => 'Offline', 'email_status' => 'Allow sending email',
'alert_type_always' => 'Always', 'email_from_email' => 'Email from address',
'email_from_name' => 'Email from name',
'email_smtp' => 'Enable SMTP',
'email_smtp_host' => 'SMTP host',
'email_smtp_port' => 'SMTP port',
'email_smtp_security' => 'SMTP security',
'email_smtp_security_none' => 'None',
'email_smtp_username' => 'SMTP username',
'email_smtp_password' => 'SMTP password',
'email_smtp_noauth' => 'Leave blank for no authentication',
'sms_status' => 'Allow sending text messages',
'sms_gateway' => 'Gateway to use for sending messages',
'sms_gateway_username' => 'Gateway username',
'sms_gateway_password' => 'Gateway password',
'sms_from' => 'Sender\'s phone number',
'pushover_status' => 'Allow sending Pushover messages',
'pushover_description' => 'Pushover is a service that makes it easy to get real-time notifications. See <a
href="https://pushover.net/" target="_blank">their website</a> for more info.',
'pushover_clone_app' => 'Click here to create your Pushover app',
'pushover_api_token' => 'Pushover App API Token',
'pushover_api_token_description' => 'Before you can use Pushover, you need to <a href="%1$s" target="_blank"
rel="noopener">register an App</a> at their website and enter the App API
Token here.',
'telegram_status' => 'Allow sending Telegram messages',
'telegram_description' => '<a href="https://telegram.org/" target="_blank">Telegram</a> is a chat app that
makes it easy to get real-time notifications. Visit the <a
href="http://docs.phpservermonitor.org/" target="_blank">documentation</a> for more
info and an install guide.',
'telegram_api_token' => 'Telegram API Token',
'telegram_api_token_description' => 'Before you can use Telegram, you need to get a API token. Visit the <a
href="http://docs.phpservermonitor.org/"
target="_blank">documentation</a> for help.',
'jabber_status' => 'Allow sending Jabber (XMPP) messages',
'jabber_description' => 'Visit the <a
href="http://docs.phpservermonitor.org/">documentation</a> for more info and an
install guide.',
'jabber_host' => 'Host',
'jabber_host_description' => 'Host of your Jabber account provider. For Google Account use talk.google.com.',
'jabber_port' => 'Port',
'jabber_port_description' => 'Port of your Jabber provider. Default 5222. For Google Account use 5223.',
'jabber_username' => 'Username',
'jabber_username_description' => 'For Google Account use incl. domain so for example example@google.com.',
'jabber_domain' => 'Domain',
'jabber_domain_description' => 'Domain of your Jabber provider. Left empty for Google Account.',
'jabber_password' => 'Password',
'jabber_password_description' => 'Fill only to set or change.',
'jabber_check' => 'Check your Jabber account if message was received.',
'alert_type' => 'Select when you\'d like to be notified.',
'alert_type_description' => '<b>Status change:</b> You will receive a notification when a server has a change
in status. So from online -> offline or offline -> online.<br><br><b>Offline:</b>
You will receive a notification when a server goes offline for the *FIRST TIME
ONLY*. For example, your cronjob is every 15 minutes and your server goes down at
1 am and stays down till 6 am. You will get 1 notification at 1 am and that\'s
it.<br><br><b>Always:</b> You will receive a notification every time the script
runs and a site is down, even if the site has been offline for hours.',
'alert_type_status' => 'Status change',
'alert_type_offline' => 'Offline',
'alert_type_always' => 'Always',
'combine_notifications' => 'Combine notifications', 'combine_notifications' => 'Combine notifications',
'combine_notifications_description' => 'Reduces the amount of notification by combining the notifications into 1 single notification. (This does not affect SMS notifications.)', 'combine_notifications_description' => 'Reduces the amount of notification by combining the notifications into
'alert_proxy' => 'Even if enabled, proxy is never used for services', 1 single notification. (This does not affect SMS notifications.)',
'alert_proxy_url' => 'Format: host:port', 'alert_proxy' => 'Even if enabled, proxy is never used for services',
'log_status' => 'Log status', 'alert_proxy_url' => 'Format: host:port',
'log_status_description' => 'If log status is set to TRUE, the monitor will log the event whenever the notification settings are passed.', 'log_status' => 'Log status',
'log_email' => 'Log emails sent by the script', 'log_status_description' => 'If log status is set to TRUE, the monitor will log the event whenever the
'log_sms' => 'Log text messages sent by the script', notification settings are passed.',
'log_pushover' => 'Log pushover messages sent by the script', 'log_email' => 'Log emails sent by the script',
'log_telegram' => 'Log Telegram messages sent by the script', 'log_sms' => 'Log text messages sent by the script',
'updated' => 'The configuration has been updated.', 'log_pushover' => 'Log pushover messages sent by the script',
'tab_email' => 'Email', 'log_telegram' => 'Log Telegram messages sent by the script',
'tab_sms' => 'SMS', 'log_jabber' => 'Log Jabber messages sent by the script',
'tab_pushover' => 'Pushover', 'updated' => 'The configuration has been updated.',
'tab_telegram' => 'Telegram', 'tab_email' => 'Email',
'settings_email' => 'Email settings', 'tab_sms' => 'SMS',
'settings_sms' => 'Text message settings', 'tab_pushover' => 'Pushover',
'settings_pushover' => 'Pushover settings', 'tab_telegram' => 'Telegram',
'settings_telegram' => 'Telegram settings', 'tab_jabber' => 'Jabber',
'settings_notification' => 'Notification settings', 'settings_email' => 'Email settings',
'settings_log' => 'Log settings', 'settings_sms' => 'Text message settings',
'settings_proxy' => 'Proxy settings', 'settings_pushover' => 'Pushover settings',
'auto_refresh' => 'Auto-refresh', 'settings_telegram' => 'Telegram settings',
'auto_refresh_description' => 'settings_jabber' => 'Jabber settings',
'Auto-refresh servers page.<br>'. 'settings_notification' => 'Notification settings',
'<span class="small">'. 'settings_log' => 'Log settings',
'Time in seconds, if 0 the page won\'t refresh.'. 'settings_proxy' => 'Proxy settings',
'</span>', 'auto_refresh' => 'Auto-refresh',
'seconds' => 'seconds', 'auto_refresh_description' => 'Auto-refresh servers page.<br><span class="small">Time in seconds, if 0 the
'test' => 'Test', page won\'t refresh.</span>',
'test_email' => 'An email will be sent to the address specified in your user profile.', 'seconds' => 'seconds',
'test_sms' => 'An SMS will be sent to the phone number specified in your user profile.', 'test' => 'Test',
'test_pushover' => 'A Pushover notification will be sent to the user key/device specified in your user profile.', 'test_email' => 'An email will be sent to the address specified in your user profile.',
'test_telegram' => 'A Telegram notification will be sent to the chat id specified in your user profile.', 'test_sms' => 'An SMS will be sent to the phone number specified in your user profile.',
'send' => 'Send', 'test_pushover' => 'A Pushover notification will be sent to the user key/device specified in your user
'test_subject' => 'Test', profile.',
'test_message' => 'Test message', 'test_telegram' => 'A Telegram notification will be sent to the chat id specified in your user profile.',
'email_sent' => 'Email sent', 'test_jabber' => 'A Jabber notification will be sent to the jabber account specified in your user profile.',
'email_error' => 'Error in email sending', 'send' => 'Send',
'sms_sent' => 'SMS sent', 'test_subject' => 'Test',
'sms_error' => 'An error has occurred while sending the SMS: %s', 'test_message' => 'Test message',
'sms_error_nomobile' => 'Unable to send test SMS: no valid phone number found in your profile.', 'email_sent' => 'Email sent',
'pushover_sent' => 'Pushover notification sent', 'email_error' => 'Error in email sending',
'pushover_error' => 'An error has occurred while sending the Pushover notification: %s', 'sms_sent' => 'SMS sent',
'pushover_error_noapp' => 'Unable to send test notification: no Pushover App API token found in the global configuration.', 'sms_error' => 'An error has occurred while sending the SMS: %s',
'pushover_error_nokey' => 'Unable to send test notification: no Pushover key found in your profile.', 'sms_error_nomobile' => 'Unable to send test SMS: no valid phone number found in your profile.',
'telegram_sent' => 'Telegram notification sent', 'pushover_sent' => 'Pushover notification sent',
'telegram_error' => 'An error has occurred while sending the Telegram notification: %s', 'pushover_error' => 'An error has occurred while sending the Pushover notification: %s',
'telegram_error_notoken' => 'Unable to send test notification: no Telegram API token found in the global configuration.', 'pushover_error_noapp' => 'Unable to send test notification: no Pushover App API token found in the global
'telegram_error_noid' => 'Unable to send test notification: no chat id found in your profile.', configuration.',
'log_retention_period' => 'Log retention period', 'pushover_error_nokey' => 'Unable to send test notification: no Pushover key found in your profile.',
'log_retention_period_description' => 'Number of days to keep logs of notifications and archives of server uptime. Enter 0 to disable log cleanup.', 'telegram_sent' => 'Telegram notification sent',
'log_retention_days' => 'days', 'telegram_error' => 'An error has occurred while sending the Telegram notification: %s',
), 'telegram_error_notoken' => 'Unable to send test notification: no Telegram API token found in the global
// for newlines in the email messages use <br> configuration.',
'notifications' => array( 'telegram_error_noid' => 'Unable to send test notification: no chat id found in your profile.',
'off_sms' => 'Server \'%LABEL%\' is DOWN: ip=%IP%, port=%PORT%. Error=%ERROR%', 'jabber_sent' => 'Telegram notification sent',
'off_email_subject' => 'IMPORTANT: Server \'%LABEL%\' is DOWN', 'jabber_error' => 'An error has occurred while sending the Telegram notification: %s',
'off_email_body' => "Failed to connect to the following server:<br><br>Server: %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>Error: %ERROR%<br>Date: %DATE%", 'jabber_error_noconfig' => 'Unable to send test notification: no Jabber account set in the global
'off_pushover_title' => 'Server \'%LABEL%\' is DOWN', configuration.',
'off_pushover_message' => "Failed to connect to the following server:<br><br>Server: %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>Error: %ERROR%<br>Date: %DATE%", 'jabber_error_noaccount' => 'Unable to send test notification: no Jabber account found in your profile.',
'off_telegram_message' => "Failed to connect to the following server:<br><br>Server: %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>Error: %ERROR%<br>Date: %DATE%", 'log_retention_period' => 'Log retention period',
'on_sms' => 'Server \'%LABEL%\' is RUNNING: ip=%IP%, port=%PORT%, it was down for %LAST_OFFLINE_DURATION%', 'log_retention_period_description' => 'Number of days to keep logs of notifications and archives of server
'on_email_subject' => 'IMPORTANT: Server \'%LABEL%\' is RUNNING', uptime. Enter 0 to disable log cleanup.',
'on_email_body' => "Server '%LABEL%' is running again, it was down for %LAST_OFFLINE_DURATION%:<br><br>Server: %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>Date: %DATE%", 'log_retention_days' => 'days',
'on_pushover_title' => 'Server \'%LABEL%\' is RUNNING', ),
'on_pushover_message' => 'Server \'%LABEL%\' is running again, it was down for %LAST_OFFLINE_DURATION%:<br><br>Server: %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>Date: %DATE%', 'notifications' => array(
'on_telegram_message' => 'Server \'%LABEL%\' is running again, it was down for: %LAST_OFFLINE_DURATION%<br><br>Server: %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>Date: %DATE%', 'off_sms' => 'Server \'%LABEL%\' is DOWN: ip=%IP%, port=%PORT%. Error=%ERROR%',
'combi_off_email_message' => "<ul><li>Server: %LABEL%</li><li>IP: %IP%</li><li>Port: %PORT%</li><li>Error: %ERROR%</li><li>Date: %DATE%</li></ul>", 'off_email_subject' => 'IMPORTANT: Server \'%LABEL%\' is DOWN',
'combi_off_pushover_message' => "<ul><li>Server: %LABEL%</li><li>IP: %IP%</li><li>Port: %PORT%</li><li>Error: %ERROR%</li><li>Date: %DATE%</li></ul>", 'off_email_body' => 'Failed to connect to the following server:<br><br>Server: %LABEL%<br>IP: %IP%<br>Port:
'combi_off_telegram_message' => "- Server: %LABEL%<br>- IP: %IP%<br>- Port: %PORT%<br>- Error: %ERROR%<br>- Date: %DATE%<br><br>", %PORT%<br>Error: %ERROR%<br>Date: %DATE%',
'combi_on_email_message' => "<ul><li>Server: %LABEL%</li><li>IP: %IP%</li><li>Port: %PORT%</li><li>Downtime: %LAST_OFFLINE_DURATION%</li><li>Date: %DATE%</li></ul>", 'off_pushover_title' => 'Server \'%LABEL%\' is DOWN',
'combi_on_pushover_message' => '<ul><li>Server: %LABEL%</li><li>IP: %IP%</li><li>Port: %PORT%</li><li>Downtime: %LAST_OFFLINE_DURATION%</li><li>Date: %DATE%</li></ul>', 'off_pushover_message' => 'Failed to connect to the following server:<br><br>Server: %LABEL%<br>IP:
'combi_on_telegram_message' => '- Server: %LABEL%<br>- IP: %IP%<br>- Port: %PORT%<br>- Downtime: %LAST_OFFLINE_DURATION%<br>- Date: %DATE%<br><br>', %IP%<br>Port: %PORT%<br>Error: %ERROR%<br>Date: %DATE%',
'off_telegram_message' => 'Failed to connect to the following server:<br><br>Server: %LABEL%<br>IP:
%IP%<br>Port: %PORT%<br>Error: %ERROR%<br>Date: %DATE%',
'off_jabber_message' => 'Failed to connect to the following server:<br><br>Server: %LABEL%<br>IP:
%IP%<br>Port: %PORT%<br>Error: %ERROR%<br>Date: %DATE%',
'on_sms' => 'Server \'%LABEL%\' is RUNNING: ip=%IP%, port=%PORT%, it was down for %LAST_OFFLINE_DURATION%',
'on_email_subject' => 'IMPORTANT: Server \'%LABEL%\' is RUNNING',
'on_email_body' => 'Server \'%LABEL%\' is running again, it was down for
%LAST_OFFLINE_DURATION%:<br><br>Server: %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>Date:
%DATE%',
'on_pushover_title' => 'Server \'%LABEL%\' is RUNNING',
'on_pushover_message' => 'Server \'%LABEL%\' is running again, it was down for
%LAST_OFFLINE_DURATION%:<br><br>Server: %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>Date:
%DATE%',
'on_telegram_message' => 'Server \'%LABEL%\' is running again, it was down for:
%LAST_OFFLINE_DURATION%<br><br>Server: %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>Date:
%DATE%',
'on_jabber_message' => 'Server \'%LABEL%\' is running again, it was down for:
%LAST_OFFLINE_DURATION%<br><br>Server: %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>Date:
%DATE%',
'combi_off_email_message' => '<ul><li>Server: %LABEL%</li><li>IP: %IP%</li><li>Port: %PORT%</li><li>Error:
%ERROR%</li><li>Date: %DATE%</li></ul>',
'combi_off_pushover_message' => '<ul><li>Server: %LABEL%</li><li>IP: %IP%</li><li>Port: %PORT%</li><li>Error:
%ERROR%</li><li>Date: %DATE%</li></ul>',
'combi_off_telegram_message' => '- Server: %LABEL%<br>- IP: %IP%<br>- Port: %PORT%<br>- Error: %ERROR%<br>-
Date: %DATE%<br><br>',
'combi_off_jabber_message' => '- Server: %LABEL%<br>- IP: %IP%<br>- Port: %PORT%<br>- Error: %ERROR%<br>-
Date: %DATE%<br><br>',
'combi_on_email_message' => '<ul><li>Server: %LABEL%</li><li>IP: %IP%</li><li>Port: %PORT%</li><li>Downtime:
%LAST_OFFLINE_DURATION%</li><li>Date: %DATE%</li></ul>',
'combi_on_pushover_message' => '<ul><li>Server: %LABEL%</li><li>IP: %IP%</li><li>Port:
%PORT%</li><li>Downtime: %LAST_OFFLINE_DURATION%</li><li>Date:
%DATE%</li></ul>',
'combi_on_telegram_message' => '- Server: %LABEL%<br>- IP: %IP%<br>- Port: %PORT%<br>- Downtime:
%LAST_OFFLINE_DURATION%<br>- Date: %DATE%<br><br>',
'combi_on_jabber_message' => '- Server: %LABEL%<br>- IP: %IP%<br>- Port: %PORT%<br>- Downtime:
%LAST_OFFLINE_DURATION%<br>- Date: %DATE%<br><br>',
'combi_email_subject' => 'IMPORTANT: \'%UP%\' servers UP again, \'%DOWN%\' servers DOWN', 'combi_email_subject' => 'IMPORTANT: \'%UP%\' servers UP again, \'%DOWN%\' servers DOWN',
'combi_pushover_subject' => '\'%UP%\' servers UP again, \'%DOWN%\' servers DOWN', 'combi_pushover_subject' => '\'%UP%\' servers UP again, \'%DOWN%\' servers DOWN',
'combi_email_message' => '<b>The following servers went down:</b><br>%DOWN_SERVERS%<br><b>The following servers are up again:</b><br>%UP_SERVERS%', 'combi_email_message' => '<b>The following servers went down:</b><br>%DOWN_SERVERS%<br><b>The following
'combi_pushover_message' => '<b>The following servers went down:</b><br>%DOWN_SERVERS%<br><b>The following servers are up again:</b><br>%UP_SERVERS%', servers are up again:</b><br>%UP_SERVERS%',
'combi_telegram_message' => '<b>The following servers went down:</b><br>%DOWN_SERVERS%<br><b>The following servers are up again:</b><br>%UP_SERVERS%', 'combi_pushover_message' => '<b>The following servers went down:</b><br>%DOWN_SERVERS%<br><b>The following
), servers are up again:</b><br>%UP_SERVERS%',
'login' => array( 'combi_telegram_message' => '<b>The following servers went down:</b><br>%DOWN_SERVERS%<br><b>The following
'welcome_usermenu' => 'Welcome, %user_name%', servers are up again:</b><br>%UP_SERVERS%',
'title_sign_in' => 'Please sign in', 'combi_jabber_message' => '<b>The following servers went down:</b><br>%DOWN_SERVERS%<br><b>The following
'title_forgot' => 'Forgot your password?', servers are up again:</b><br>%UP_SERVERS%',
'title_reset' => 'Reset your password', ),
'submit' => 'Submit', 'login' => array(
'remember_me' => 'Remember me', 'welcome_usermenu' => 'Welcome, %user_name%',
'login' => 'Login', 'title_sign_in' => 'Please sign in',
'logout' => 'Logout', 'title_forgot' => 'Forgot your password?',
'username' => 'Username', 'title_reset' => 'Reset your password',
'password' => 'Password', 'submit' => 'Submit',
'password_repeat' => 'Repeat password', 'remember_me' => 'Remember me',
'password_forgot' => 'Forgot password?', 'login' => 'Login',
'password_reset' => 'Reset password', 'logout' => 'Logout',
'password_reset_email_subject' => 'Reset your password for PHP Server Monitor', 'username' => 'Username',
'password_reset_email_body' => 'Please use the following link to reset your password. Please note it expires in 1 hour.<br><br>%link%', 'password' => 'Password',
'error_user_incorrect' => 'The provided username could not be found.', 'password_repeat' => 'Repeat password',
'error_login_incorrect' => 'The information is incorrect.', 'password_forgot' => 'Forgot password?',
'error_login_passwords_nomatch' => 'The provided passwords do not match.', 'password_reset' => 'Reset password',
'error_reset_invalid_link' => 'The reset link you provided is invalid.', 'password_reset_email_subject' => 'Reset your password for PHP Server Monitor',
'success_password_forgot' => 'An email has been sent to you with information how to reset your password.', 'password_reset_email_body' => 'Please use the following link to reset your password. Please note it expires
'success_password_reset' => 'Your password has been reset successfully. Please login.', in 1 hour.<br><br>%link%',
), 'error_user_incorrect' => 'The provided username could not be found.',
'error' => array( 'error_login_incorrect' => 'The information is incorrect.',
'401_unauthorized' => 'Unauthorized', 'error_login_passwords_nomatch' => 'The provided passwords do not match.',
'401_unauthorized_description' => 'You do not have the privileges to view this page.', 'error_reset_invalid_link' => 'The reset link you provided is invalid.',
), 'success_password_forgot' => 'An email has been sent to you with information how to reset your password.',
'success_password_reset' => 'Your password has been reset successfully. Please login.',
),
'error' => array(
'401_unauthorized' => 'Unauthorized',
'401_unauthorized_description' => 'You do not have the privileges to view this page.',
),
); );

View File

@ -1,4 +1,5 @@
<?php <?php
/** /**
* PHP Server Monitor * PHP Server Monitor
* Monitor your servers and websites. * Monitor your servers and websites.
@ -17,378 +18,452 @@
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with PHP Server Monitor. If not, see <http://www.gnu.org/licenses/>. * along with PHP Server Monitor. If not, see <http://www.gnu.org/licenses/>.
* *
* @package phpservermon * @package phpservermon
* @author Klemens Häckel <http://clickdimension.wordpress.com/> * @author Klemens Häckel <http://clickdimension.wordpress.com/>
* @author Luis Rodriguez <luis@techreanimate.com> * @author Luis Rodriguez <luis@techreanimate.com>
* @author Mauro Vietri <mauro.vietri@outlook.com> * @author Mauro Vietri <mauro.vietri@outlook.com>
* @author Federico Vera <fede@riddler.com.ar> * @author Federico Vera <fede@riddler.com.ar>
* @copyright Copyright (c) 2008-2017 Pepijn Over <pep@mailbox.org> * @copyright Copyright (c) 2008-2017 Pepijn Over <pep@mailbox.org>
* @license http://www.gnu.org/licenses/gpl.txt GNU GPL v3 * @license http://www.gnu.org/licenses/gpl.txt GNU GPL v3
* @version Release: @package_version@ * @version Release: @package_version@
* @link http://www.phpservermonitor.org/ * @link http://www.phpservermonitor.org/
**/ **/
$sm_lang = array( $sm_lang = array(
'name' => 'Español - Spanish', 'name' => 'Español - Spanish',
'locale' => array( 'locale' => array(
'0' => 'es_ES.UTF-8', '0' => 'es_ES.UTF-8',
'1' => 'es_ES', '1' => 'es_ES',
'2' => 'spanish', '2' => 'spanish',
'3' => 'esp', '3' => 'esp',
), ),
'locale_tag' => 'es', 'locale_tag' => 'es',
'locale_dir' => 'ltr', 'locale_dir' => 'ltr',
'system' => array( 'system' => array(
'title' => 'Server Monitor', 'title' => 'Server Monitor',
'install' => 'Instalar', 'install' => 'Instalar',
'action' => 'Acción', 'action' => 'Acción',
'save' => 'Guardar', 'save' => 'Guardar',
'edit' => 'Modificar', 'edit' => 'Modificar',
'delete' => 'Eliminar', 'delete' => 'Eliminar',
'view' => 'Ver', 'view' => 'Ver',
'date' => 'Fecha', 'date' => 'Fecha',
'message' => 'Mensaje', 'message' => 'Mensaje',
'yes' => 'Si', 'yes' => 'Si',
'no' => 'No', 'no' => 'No',
'insert' => 'Insertar', 'insert' => 'Insertar',
'add_new' => 'Agregar nuevo', 'add_new' => 'Agregar nuevo',
'update_available' => 'Hay una nueva versión ({version}) disponible en <a href="https://github.com/phpservermon/phpservermon/releases/latest" target="_blank" rel="noopener">http://www.phpservermonitor.org</a>.', 'update_available' => 'Hay una nueva versión ({version}) disponible en <a
'back_to_top' => 'Volver arriba', href="https://github.com/phpservermon/phpservermon/releases/latest" target="_blank"
'go_back' => 'Volver', rel="noopener">http://www.phpservermonitor.org</a>.',
'ok' => 'Bueno', 'back_to_top' => 'Volver arriba',
'bad' => 'Malo', 'go_back' => 'Volver',
'cancel' => 'Cancelar', 'ok' => 'Bueno',
'none' => 'None', 'bad' => 'Malo',
'activate' => 'Activar', 'cancel' => 'Cancelar',
'short_day_format' => '%e de %B', 'none' => 'None',
'long_day_format' => '%e de %B de %Y', 'activate' => 'Activar',
'yesterday_format' => 'Ayer a las %k:%M', 'short_day_format' => '%e de %B',
'other_day_format' => '%A a las %k:%M', 'long_day_format' => '%e de %B de %Y',
'never' => 'Nunca', 'yesterday_format' => 'Ayer a las %k:%M',
'hours_ago' => 'Hace %d horas', 'other_day_format' => '%A a las %k:%M',
'an_hour_ago' => 'Hace aproximadamente una hora', 'never' => 'Nunca',
'minutes_ago' => 'Hace %d minutos', 'hours_ago' => 'Hace %d horas',
'a_minute_ago' => 'Hace aproximadamente un minuto', 'an_hour_ago' => 'Hace aproximadamente una hora',
'seconds_ago' => 'Hace %d segundos', 'minutes_ago' => 'Hace %d minutos',
'a_second_ago' => 'Hace aproximadamente un segundo', 'a_minute_ago' => 'Hace aproximadamente un minuto',
'year' => 'año', 'seconds_ago' => 'Hace %d segundos',
'years' => 'años', 'a_second_ago' => 'Hace aproximadamente un segundo',
'month' => 'mes', 'year' => 'año',
'months' => 'meses', 'years' => 'años',
'day' => 'día', 'month' => 'mes',
'days' => 'días', 'months' => 'meses',
'hour' => 'hora', 'day' => 'día',
'hours' => 'horas', 'days' => 'días',
'minute' => 'minuto', 'hour' => 'hora',
'minutes' => 'minutos', 'hours' => 'horas',
'second' => 'segundo', 'minute' => 'minuto',
'seconds' => 'segundos', 'minutes' => 'minutos',
'current' => 'actual', 'second' => 'segundo',
'settings' => 'Configuración', 'seconds' => 'segundos',
'search' => 'Buscar', 'current' => 'actual',
), 'settings' => 'Configuración',
'menu' => array( 'search' => 'Buscar',
'config' => 'Configurar', ),
'server' => 'Servidores', 'menu' => array(
'server_log' => 'Registro', 'config' => 'Configurar',
'server_status' => 'Estado', 'server' => 'Servidores',
'server_update' => 'Actualizar', 'server_log' => 'Registro',
'user' => 'Usuarios', 'server_status' => 'Estado',
'help' => 'Ayuda', 'server_update' => 'Actualizar',
), 'user' => 'Usuarios',
'users' => array( 'help' => 'Ayuda',
'user' => 'Usuario', ),
'name' => 'Nombre', 'users' => array(
'user_name' => 'Nombre de Usuario', 'user' => 'Usuario',
'password' => 'Contraseña', 'name' => 'Nombre',
'password_repeat' => 'Repetir Contraseña', 'user_name' => 'Nombre de Usuario',
'password_leave_blank' => 'Dejar en blanco para mantener sin cambios', 'password' => 'Contraseña',
'level' => 'Nivel', 'password_repeat' => 'Repetir Contraseña',
'level_10' => 'Administrador', 'password_leave_blank' => 'Dejar en blanco para mantener sin cambios',
'level_20' => 'Usuarios', 'level' => 'Nivel',
'level_description' => '<b>Administradores</b> tienen acceso completo: pueden administrar servidores, usuarios y editar la configuración global.<br>Los <b>usuarios</b> sólo pueden ver y ejecutar el programa de actualización para los servidores que se han asignado a los mismos.', 'level_10' => 'Administrador',
'mobile' => 'Móvil', 'level_20' => 'Usuarios',
'email' => 'Email', 'level_description' => '<b>Administradores</b> tienen acceso completo: pueden administrar servidores, usuarios
'pushover' => 'Pushover', y editar la configuración global.<br>Los <b>usuarios</b> sólo pueden ver y ejecutar
'pushover_description' => 'Pushover es un servicio que hace que sea fácil de obtener notificaciones en tiempo real. Vea <a href="https://pushover.net/"> su página web </a> para más información.', el programa de actualización para los servidores que se han asignado a los mismos.',
'pushover_key' => 'Clave Pushover', 'mobile' => 'Móvil',
'pushover_device' => 'Dispositivo Pushover', 'email' => 'Email',
'pushover_device_description' => 'Nombre del dispositivo para enviar el mensaje. Dejar en blanco para enviarlo a todos los dispositivos.', 'pushover' => 'Pushover',
'telegram' => 'Telegram', 'pushover_description' => 'Pushover es un servicio que hace que sea fácil de obtener notificaciones en tiempo
'telegram_description' => '<a href="https://telegram.org/">Telegram</a> is a chat app that makes it easy to get real-time notifications. Visit the <a href="http://docs.phpservermonitor.org/">documentation</a> for more info and an install guide.', real. Vea <a href="https://pushover.net/" target="_blank"> su página web </a> para
'telegram_chat_id' => 'Telegram chat id', más información.',
'telegram_chat_id_description' => 'El mensaje será enviado al chat correspondiente.', 'pushover_key' => 'Clave Pushover',
'telegram_get_chat_id' => 'Haga click aquí para obtener su chat id', 'pushover_device' => 'Dispositivo Pushover',
'activate_telegram' => 'Activar las notificaciones de Telegram', 'pushover_device_description' => 'Nombre del dispositivo para enviar el mensaje. Dejar en blanco para enviarlo
'activate_telegram_description' => 'Permitir a Telegram enviar notificaciones al chat id especificado. Sin este permiso, Telegram no podrá enviarle mensajes.', a todos los dispositivos.',
'telegram_bot_username_found' => '¡El bot fue encontrado!<br><a href="%s" target="_blank" rel="noopener"><button class="btn btn-primary">Próximo paso</button></a> <br>Esto abrirá un chat con el bot. Necesita presionar start o escribir /start.', 'telegram' => 'Telegram',
'telegram_bot_username_error_token' => '401 - No autorizado. Por favor asegúrese que el Token es válido.', 'telegram_description' => '<a href="https://telegram.org/" target="_blank">Telegram</a> is a chat app that
'telegram_bot_error' => 'Ocurrió un error activando las notificaciones de Telegram: %s', makes it easy to get real-time notifications. Visit the <a
'delete_title' => 'Eliminar usuario', href="http://docs.phpservermonitor.org/" target="_blank">documentation</a> for more
'delete_message' => 'Realmente desea eliminar el usuario \'%1\'?', info and an install guide.',
'deleted' => 'Usuario eliminado.', 'telegram_chat_id' => 'Telegram chat id',
'updated' => 'Usuario actualizado.', 'telegram_chat_id_description' => 'El mensaje será enviado al chat correspondiente.',
'inserted' => 'Usuario ingresado.', 'telegram_get_chat_id' => 'Haga click aquí para obtener su chat id',
'profile' => 'Perfil', 'activate_telegram' => 'Activar las notificaciones de Telegram',
'profile_updated' => 'Su perfil ha sido actualizado.', 'activate_telegram_description' => 'Permitir a Telegram enviar notificaciones al chat id especificado. Sin
'error_user_name_bad_length' => 'Los nombres de usuario deben tener entre 2 y 64 caracteres.', este permiso, Telegram no podrá enviarle mensajes.',
'error_user_name_invalid' => 'El nombre de usuario sólo puede contener caracteres alfabéticos (a-z, A-Z), números (0-9), puntos (.) y guiones bajos (_).', 'telegram_bot_username_found' => '¡El bot fue encontrado!<br><a href="%s" target="_blank"
'error_user_name_exists' => 'El nombre de usuario dado ya existe en la base de datos.', rel="noopener"><button class="btn btn-primary">Próximo paso</button></a>
'error_user_email_bad_length' => 'Direcciones de correo electrónico deben estar entre 5 y 255 caracteres.', <br>Esto abrirá un chat con el bot. Necesita presionar start o escribir
'error_user_email_invalid' => 'La dirección de correo electrónico no es válida.', /start.',
'error_user_level_invalid' => 'El nivel de usuario dado es inválido.', 'telegram_bot_username_error_token' => '401 - No autorizado. Por favor asegúrese que el Token es válido.',
'error_user_no_match' => 'El usuario no se pudo encontrar en la base de datos.', 'telegram_bot_error' => 'Ocurrió un error activando las notificaciones de Telegram: %s',
'error_user_password_invalid' => 'La contraseña introducida no es válida.', 'delete_title' => 'Eliminar usuario',
'error_user_password_no_match' => 'Las contraseñas introducidas no coinciden.', 'delete_message' => 'Realmente desea eliminar el usuario \'%1\'?',
), 'deleted' => 'Usuario eliminado.',
'log' => array( 'updated' => 'Usuario actualizado.',
'title' => 'Registro', 'inserted' => 'Usuario ingresado.',
'type' => 'Tipo', 'profile' => 'Perfil',
'status' => 'Estado', 'profile_updated' => 'Su perfil ha sido actualizado.',
'email' => 'Email', 'error_user_name_bad_length' => 'Los nombres de usuario deben tener entre 2 y 64 caracteres.',
'sms' => 'SMS', 'error_user_name_invalid' => 'El nombre de usuario sólo puede contener caracteres alfabéticos (a-z, A-Z),
'pushover' => 'Pushover', números (0-9), puntos (.) y guiones bajos (_).',
'telegram' => 'Telegram', 'error_user_name_exists' => 'El nombre de usuario dado ya existe en la base de datos.',
'no_logs' => 'No hay registros', 'error_user_email_bad_length' => 'Direcciones de correo electrónico deben estar entre 5 y 255 caracteres.',
'clear' => 'Borrar registros', 'error_user_email_invalid' => 'La dirección de correo electrónico no es válida.',
'delete_title' => 'Eliminar registro', 'error_user_level_invalid' => 'El nivel de usuario dado es inválido.',
'delete_message' => '¿Estás seguro de que quieres eliminar <b>todos</b> los registros?', 'error_user_no_match' => 'El usuario no se pudo encontrar en la base de datos.',
), 'error_user_password_invalid' => 'La contraseña introducida no es válida.',
'servers' => array( 'error_user_password_no_match' => 'Las contraseñas introducidas no coinciden.',
'server' => 'Servidores', ),
'status' => 'Estado', 'log' => array(
'label' => 'Título', 'title' => 'Registro',
'domain' => 'Dominio/IP', 'type' => 'Tipo',
'timeout' => 'Tiempo de espera', 'status' => 'Estado',
'timeout_description' => 'Número de segundos a esperar para que el servidor responda.', 'email' => 'Email',
'authentication_settings' => 'Configuración de autenticación', 'sms' => 'SMS',
'optional' => 'Opcional', 'pushover' => 'Pushover',
'website_username' => 'Nombre de usuario', 'telegram' => 'Telegram',
'website_username_description' => 'Nombre de usuario para acceder al sitio. (Solo se soporta la autenticación de Apache.)', 'no_logs' => 'No hay registros',
'website_password' => 'Contraseña', 'clear' => 'Borrar registros',
'website_password_description' => 'Contraseña para acceder al sitio. La contraseña se almacenará encriptada en la base de datos.', 'delete_title' => 'Eliminar registro',
'fieldset_monitoring' => 'Monitoreo', 'delete_message' => '¿Estás seguro de que quieres eliminar <b>todos</b> los registros?',
'fieldset_permissions' => 'Permisos', ),
'permissions' => 'El servidor será visible para los siguientes usuarios', 'servers' => array(
'port' => 'Puerto', 'server' => 'Servidores',
'custom_port' => 'Puerto personalizado', 'status' => 'Estado',
'popular_ports' => 'Puertos comunes', 'label' => 'Título',
'request_method' => 'Método', 'domain' => 'Dominio/IP',
'custom_request_method' => 'Método personalizado', 'timeout' => 'Tiempo de espera',
'popular_request_methods' => 'Método común', 'timeout_description' => 'Número de segundos a esperar para que el servidor responda.',
'post_field' => 'Post field', 'authentication_settings' => 'Configuración de autenticación',
'post_field_description' => 'Los datos que serán enviado utilizando el método especificado.', 'optional' => 'Opcional',
'please_select' => 'Por favor seleccionar', 'website_username' => 'Nombre de usuario',
'type' => 'Tipo', 'website_username_description' => 'Nombre de usuario para acceder al sitio. (Solo se soporta la autenticación
'type_website' => 'Sitio Web', de Apache.)',
'type_service' => 'Servicio', 'website_password' => 'Contraseña',
'type_ping' => 'Ping', 'website_password_description' => 'Contraseña para acceder al sitio. La contraseña se almacenará encriptada
'pattern' => 'Patrón/texto de búsqueda', en la base de datos.',
'pattern_description' => 'Si el patrón no se encuentra en el sitio, se marcará al servidor como en línea/fuera de línea. Se permiten expresiones regulares.', 'fieldset_monitoring' => 'Monitoreo',
'pattern_online' => 'El patrón indica si el servidor está:', 'fieldset_permissions' => 'Permisos',
'pattern_online_description' => 'En línea: Si el patrón no se encutra en el sitio, se marcará al servidor como en línea. Fuera de línea: Si el patrón no se encutra en el sitio, se marcará al servidor como furea de línea.', 'permissions' => 'El servidor será visible para los siguientes usuarios',
'redirect_check' => 'Redirigir a otra dirección es:', 'port' => 'Puerto',
'redirect_check_description' => 'Redirigir normalmente es una mala señal.', 'custom_port' => 'Puerto personalizado',
'allow_http_status' => 'Permitir revisar el código de estado HTTP', 'popular_ports' => 'Puertos comunes',
'allow_http_status_description' => 'Marcar el sitio como en línea. Los estados HTTP menores que 400 son marcados como en línea por defecto. Separar con |.', 'request_method' => 'Método',
'header_name' => 'Nombre del encabezado', 'custom_request_method' => 'Método personalizado',
'header_value' => 'Valor del encabezado', 'popular_request_methods' => 'Método común',
'header_name_description' => 'Respetar mayúsculas y minúsculas.', 'post_field' => 'Post field',
'header_value_description' => 'Se permiten expresiones regulares.', 'post_field_description' => 'Los datos que serán enviado utilizando el método especificado.',
'last_check' => 'Último control', 'please_select' => 'Por favor seleccionar',
'last_online' => 'Última vez en línea', 'type' => 'Tipo',
'last_offline' => 'Última vez fuera de línea', 'type_website' => 'Sitio Web',
'last_output' => 'Última salida', 'type_service' => 'Servicio',
'last_error' => 'Último error', 'type_ping' => 'Ping',
'last_error_output' => 'Último error', 'pattern' => 'Patrón/texto de búsqueda',
'output' => 'Salida', 'pattern_description' => 'Si el patrón no se encuentra en el sitio, se marcará al servidor como en
'monitoring' => 'Monitoreado', línea/fuera de línea. Se permiten expresiones regulares.',
'no_monitoring' => 'No monitoreando', 'pattern_online' => 'El patrón indica si el servidor está:',
'email' => 'Email', 'pattern_online_description' => 'En línea: Si el patrón encuentra en el sitio, se marcará al servidor como
'send_email' => 'Enviar correo electrónico', en línea. Fuera de línea: Si el patrón no se encutra en el sitio, se
'sms' => 'SMS', marcará al servidor como furea de línea.',
'send_sms' => 'Eviar SMS', 'redirect_check' => 'Redirigir a otra dirección es:',
'pushover' => 'Pushover', 'redirect_check_description' => 'Redirigir normalmente es una mala señal.',
'send_pushover' => 'Enviar notificación por Pushover', 'allow_http_status' => 'Permitir revisar el código de estado HTTP',
'telegram' => 'Telegram', 'allow_http_status_description' => 'Marcar el sitio como en línea. Los estados HTTP menores que 400 son
'send_telegram' => 'Enviar notificación por Telegram', marcados como en línea por defecto. Separar con |.',
'users' => 'Usuarios', 'header_name' => 'Nombre del encabezado',
'delete_title' => 'Eliminar servidor', 'header_value' => 'Valor del encabezado',
'delete_message' => '¿Seguro que desea eliminar el servidor \'%1\'?', 'header_name_description' => 'Respetar mayúsculas y minúsculas.',
'deleted' => 'Servidor eliminado.', 'header_value_description' => 'Se permiten expresiones regulares.',
'updated' => 'Servidor actualizado.', 'last_check' => 'Último control',
'inserted' => 'Servidor ingresado.', 'last_online' => 'Última vez en línea',
'latency' => 'Latencia', 'last_offline' => 'Última vez fuera de línea',
'latency_max' => 'Latencia (máximo)', 'last_output' => 'Última salida',
'latency_min' => 'Latencia (mínimo)', 'last_error' => 'Último error',
'latency_avg' => 'Latencia (promedio)', 'last_error_output' => 'Último error',
'online' => 'en línea', 'output' => 'Salida',
'offline' => 'fuera de línea', 'monitoring' => 'Monitoreado',
'uptime' => 'Activo', 'no_monitoring' => 'No monitoreando',
'year' => 'Año', 'email' => 'Email',
'month' => 'Mes', 'send_email' => 'Enviar correo electrónico',
'week' => 'Semana', 'sms' => 'SMS',
'day' => 'Día', 'send_sms' => 'Eviar SMS',
'hour' => 'Hora', 'pushover' => 'Pushover',
'warning_threshold' => 'Umbral de advertencia', 'send_pushover' => 'Enviar notificación por Pushover',
'warning_threshold_description' => 'Número de controles fallidos necesarios antes de que se marque como fuera de línea.', 'telegram' => 'Telegram',
'chart_last_week' => 'Última semana', 'send_telegram' => 'Enviar notificación por Telegram',
'chart_history' => 'Historial', 'users' => 'Usuarios',
'chart_day_format' => '%Y-%m-%d', 'delete_title' => 'Eliminar servidor',
'chart_long_date_format' => '%Y-%m-%d %H:%M:%S', 'delete_message' => '¿Seguro que desea eliminar el servidor \'%1\'?',
'chart_short_date_format' => '%m/%d %H:%M', 'deleted' => 'Servidor eliminado.',
'chart_short_time_format' => '%H:%M', 'updated' => 'Servidor actualizado.',
'warning_notifications_disabled_sms' => 'Las notificaciones por SMS están desactivadas.', 'inserted' => 'Servidor ingresado.',
'warning_notifications_disabled_email' => 'Las notificaciones por correo electrónico están desactivados.', 'latency' => 'Latencia',
'warning_notifications_disabled_pushover' => 'Las notificaciones Pushover están desactivadas.', 'latency_max' => 'Latencia (máximo)',
'warning_notifications_disabled_telegram' => 'Las notificaciones Telegram están desactivadas.', 'latency_min' => 'Latencia (mínimo)',
'error_server_no_match' => 'Servidor no encontrado.', 'latency_avg' => 'Latencia (promedio)',
'error_server_label_bad_length' => 'La etiqueta debe estar entre 1 y 255 caracteres.', 'online' => 'en línea',
'error_server_ip_bad_length' => 'El dominio / IP debe estar entre 1 y 255 caracteres.', 'offline' => 'fuera de línea',
'error_server_ip_bad_service' => 'La dirección IP no es válida.', 'uptime' => 'Activo',
'error_server_ip_bad_website' => 'El URL del Sitio Web no es válido.', 'year' => 'Año',
'error_server_type_invalid' => 'El tipo de servidor seleccionado no es válido.', 'month' => 'Mes',
'error_server_warning_threshold_invalid' => 'El umbral de advertencia debe ser un entero válido mayor que 0.', 'week' => 'Semana',
), 'day' => 'Día',
'config' => array( 'hour' => 'Hora',
'general' => 'General', 'warning_threshold' => 'Umbral de advertencia',
'language' => 'Idioma', 'warning_threshold_description' => 'Número de controles fallidos necesarios antes de que se marque como fuera
'show_update' => '¿Comprobar actualizaciones?', de línea.',
'password_encrypt_key' => 'Clave cripográfica', 'chart_last_week' => 'Última semana',
'password_encrypt_key_note' => 'Esta es la clave utilizada para encriptar las contraseñas de acceso a los servidores. ¡Si la contraseña cambia las credenciales serán inválidas!', 'chart_history' => 'Historial',
'proxy' => 'Activar Proxy', 'chart_day_format' => '%Y-%m-%d',
'proxy_url' => 'URL del proxy', 'chart_long_date_format' => '%Y-%m-%d %H:%M:%S',
'proxy_user' => 'Usuario', 'chart_short_date_format' => '%m/%d %H:%M',
'proxy_password' => 'Contraseña', 'chart_short_time_format' => '%H:%M',
'email_status' => '¿Habilitar envio de email?', 'warning_notifications_disabled_sms' => 'Las notificaciones por SMS están desactivadas.',
'email_from_email' => 'Dirección del Remitente', 'warning_notifications_disabled_email' => 'Las notificaciones por correo electrónico están desactivados.',
'email_from_name' => 'Nombre del Remitente', 'warning_notifications_disabled_pushover' => 'Las notificaciones Pushover están desactivadas.',
'email_smtp' => 'Habilitar SMTP', 'warning_notifications_disabled_telegram' => 'Las notificaciones Telegram están desactivadas.',
'email_smtp_host' => 'Servidor SMTP', 'error_server_no_match' => 'Servidor no encontrado.',
'email_smtp_port' => 'Puerto SMTP', 'error_server_label_bad_length' => 'La etiqueta debe estar entre 1 y 255 caracteres.',
'email_smtp_security' => 'Seguridad SMTP', 'error_server_ip_bad_length' => 'El dominio / IP debe estar entre 1 y 255 caracteres.',
'email_smtp_security_none' => 'Ninguna', 'error_server_ip_bad_service' => 'La dirección IP no es válida.',
'email_smtp_username' => 'Usuario SMTP', 'error_server_ip_bad_website' => 'El URL del Sitio Web no es válido.',
'email_smtp_password' => 'Contraseña SMTP', 'error_server_type_invalid' => 'El tipo de servidor seleccionado no es válido.',
'email_smtp_noauth' => 'Deja en blanco para ninguna autenticación', 'error_server_warning_threshold_invalid' => 'El umbral de advertencia debe ser un entero válido mayor que 0.',
'sms_status' => '¿Habilitar envio de SMS?', ),
'sms_gateway' => 'Proveedor de SMS', 'config' => array(
'sms_gateway_username' => 'Usuario', 'general' => 'General',
'sms_gateway_password' => 'Contraseña', 'language' => 'Idioma',
'sms_from' => 'Número origen del SMS', 'show_update' => '¿Comprobar actualizaciones?',
'pushover_status' => '¿Habilitar el envío de mensajes Pushover?', 'password_encrypt_key' => 'Clave cripográfica',
'pushover_description' => 'Pushover es un servicio que hace que sea fácil de obtener notificaciones en tiempo real. Vea <a href="https://pushover.net/"> su página web </a> para más información.', 'password_encrypt_key_note' => 'Esta es la clave utilizada para encriptar las contraseñas de acceso a los
'pushover_clone_app' => 'Haga clic aquí para crear tu aplicación Pushover', servidores. ¡Si la contraseña cambia las credenciales serán inválidas!',
'pushover_api_token' => 'Token API de Pushover', 'proxy' => 'Activar Proxy',
'pushover_api_token_description' => 'Antes de poder utilizar Pushover, necesita <a href="%1$s" target="_blank" rel="noopener"> registrar </a> su aplicación en la página web e ingresar el token API.', 'proxy_url' => 'URL del proxy',
'telegram_status' => '¿Habilitar el envío de mensajes de Telegram?', 'proxy_user' => 'Usuario',
'telegram_description' => '<a href="https://telegram.org/">Telegram</a> es una aplicación de mensajería instantánea que permite recibir notificaciones en tiempo real. Visite la <a href="http://docs.phpservermonitor.org/">documentación</a> para una guía mas detallada.', 'proxy_password' => 'Contraseña',
'telegram_api_token' => 'Token API de Telegram', 'email_status' => '¿Habilitar envio de email?',
'telegram_api_token_description' => 'Antes de utilizar Telegram, necesita un Token de API. Visite la <a href="http://docs.phpservermonitor.org/">documentación</a> para más información.', 'email_from_email' => 'Dirección del Remitente',
'alert_type' => '¿Cuándo desea recibir notificaciones?', 'email_from_name' => 'Nombre del Remitente',
'alert_type_description' => '<b>Al cambiar el estado:</b> p.ej. en línea -> fuera de línea o fuera de línea -> en línea.<br><br /><b>Fuera de Línea:</b> Recibirá una notificación cuando el servidor esté fuera de línea.Se envia un sólo mensaje cuando se detecte la caída por primera vez.<br><br><b>Siempre:</b> Se le enviará una notificación cada vez que se ejecuta el script aunqué el servicio puede haber estado fuera de línea por varias horas.', 'email_smtp' => 'Habilitar SMTP',
'alert_type_status' => 'Cambio de estado', 'email_smtp_host' => 'Servidor SMTP',
'alert_type_offline' => 'Fuera de Línea', 'email_smtp_port' => 'Puerto SMTP',
'alert_type_always' => 'Siempre', 'email_smtp_security' => 'Seguridad SMTP',
'combine_notifications' => 'Combinar notificaciones', 'email_smtp_security_none' => 'Ninguna',
'combine_notifications_description' => 'Reduce la cantidad de notificaciones combinando los mensajes en una sola notificación. (Esto no afecta a las notificaciones por SMS.)', 'email_smtp_username' => 'Usuario SMTP',
'alert_proxy' => 'Incluso si está activo, los proxy no se utilizarán para los servicios.', 'email_smtp_password' => 'Contraseña SMTP',
'alert_proxy_url' => 'Formato: host:puerto', 'email_smtp_noauth' => 'Deja en blanco para ninguna autenticación',
'log_status' => 'Registro de estados', 'sms_status' => '¿Habilitar envio de SMS?',
'log_status_description' => 'Al setear TRUE (marcar) se registrarán todos los estados.', 'sms_gateway' => 'Proveedor de SMS',
'log_email' => 'Guardar emails enviados en el registro', 'sms_gateway_username' => 'Usuario',
'log_sms' => 'Guardar SMS enviados en el registro', 'sms_gateway_password' => 'Contraseña',
'log_pushover' => 'Guardar notificaciones Pushover enviadas en el registro', 'sms_from' => 'Número origen del SMS',
'log_telegram' => 'Guardar notificaciones Telegram enviadas en el registro', 'pushover_status' => '¿Habilitar el envío de mensajes Pushover?',
'updated' => 'Configuración guardada.', 'pushover_description' => 'Pushover es un servicio que hace que sea fácil de obtener notificaciones en tiempo
'tab_email' => 'Email', real. Vea <a href="https://pushover.net/" target="_blank"> su página web </a> para
'tab_sms' => 'SMS', más información.',
'tab_pushover' => 'Pushover', 'pushover_clone_app' => 'Haga clic aquí para crear tu aplicación Pushover',
'tab_telegram' => 'Telegram', 'pushover_api_token' => 'Token API de Pushover',
'settings_email' => 'Configuración de Correo Electrónico', 'pushover_api_token_description' => 'Antes de poder utilizar Pushover, necesita <a href="%1$s" target="_blank"
'settings_sms' => 'Configuración de Mensajes de Texto', rel="noopener"> registrar </a> su aplicación en la página web e
'settings_pushover' => 'Configuración de Pushover', ingresar el token API.',
'settings_telegram' => 'Configuración de Telegram', 'telegram_status' => '¿Habilitar el envío de mensajes de Telegram?',
'settings_notification' => 'Configuración de las notificaciones', 'telegram_description' => '<a href="https://telegram.org/" target="_blank">Telegram</a> es una aplicación de
'settings_log' => 'Configuración de registros', mensajería instantánea que permite recibir notificaciones en tiempo real. Visite
'settings_proxy' => 'Configuración del proxy', la <a href="http://docs.phpservermonitor.org/" target="_blank">documentación</a>
'auto_refresh' => 'Auto-actualizar', para una guía mas detallada.',
'auto_refresh_description' => 'Auto-actualizar la página de servidores.<br><span class="small">Tiempo en segundos, si se utiliza 0 la página no se actualizará.</span>', 'telegram_api_token' => 'Token API de Telegram',
'seconds' => 'segundos', 'telegram_api_token_description' => 'Antes de utilizar Telegram, necesita un Token de API. Visite la <a
'test' => 'Prueba', href="http://docs.phpservermonitor.org/"
'test_email' => 'Un correo electrónico será enviado a la dirección especificada en su perfil de usuario.', target="_blank">documentación</a> para más información.',
'test_sms' => 'Un SMS se enviará al número de teléfono especificado en su perfil de usuario.', 'alert_type' => '¿Cuándo desea recibir notificaciones?',
'test_pushover' => 'Una notificación Pushover será enviada a la clave de usuario / dispositivo especificado en su perfil de usuario.', 'alert_type_description' => '<b>Al cambiar el estado:</b> p.ej. en línea -> fuera de línea o fuera de línea
'test_telegram' => 'Una notificación de Telegram será enviada al chat id especificado en su perfil de usuario.', -> en línea.<br><br /><b>Fuera de Línea:</b> Recibirá una notificación cuando
'send' => 'Enviar', el servidor esté fuera de línea.Se envia un sólo mensaje cuando se detecte la
'test_subject' => 'Prueba', caída por primera vez.<br><br><b>Siempre:</b> Se le enviará una notificación
'test_message' => 'Mensaje de prueba', cada vez que se ejecuta el script aunqué el servicio puede haber estado fuera de
'email_sent' => 'Correo enviado', línea por varias horas.',
'email_error' => 'Error al enviar el correo', 'alert_type_status' => 'Cambio de estado',
'sms_sent' => 'SMS enviado', 'alert_type_offline' => 'Fuera de Línea',
'sms_error' => 'Error al enviar el SMS: %s', 'alert_type_always' => 'Siempre',
'sms_error_nomobile' => 'Imposible enviar el SMS: no se encontró un número de teléfono válido en su perfil.', 'combine_notifications' => 'Combinar notificaciones',
'pushover_sent' => 'Notificación de Pushover enviada', 'combine_notifications_description' => 'Reduce la cantidad de notificaciones combinando los mensajes en una
'pushover_error' => 'Ocurrió un error enviado la notificación de Pushover: %s', sola notificación. (Esto no afecta a las notificaciones por SMS.)',
'pushover_error_noapp' => 'No se puede enviar una notificación de prueba: no existe un token API de Pushover en la configuración global.', 'alert_proxy' => 'Incluso si está activo, los proxy no se utilizarán para los servicios.',
'pushover_error_nokey' => 'No se puede enviar una notificación de prueba: no existe ninguna clave de Pushover en su perfil.', 'alert_proxy_url' => 'Formato: host:puerto',
'telegram_sent' => 'Notificación de Telegram enviada', 'log_status' => 'Registro de estados',
'telegram_error' => 'Ocurrió un error enviado la notificación de Telegram: %s', 'log_status_description' => 'Al setear TRUE (marcar) se registrarán todos los estados.',
'telegram_error_notoken' => 'Imposible enviar la notificación: No se encontró un Token de API en la configuración global.', 'log_email' => 'Guardar emails enviados en el registro',
'telegram_error_noid' => 'Imposible enviar la notificación: No se encontró un chat id en su perfil.', 'log_sms' => 'Guardar SMS enviados en el registro',
'log_retention_period' => 'Período de retención del registro', 'log_pushover' => 'Guardar notificaciones Pushover enviadas en el registro',
'log_retention_period_description' => 'Número de días que se conservan registros de las notificaciones y los archivos de tiempo de actividad del servidor. Introduzca 0 para desactivar la limpieza de los registros.', 'log_telegram' => 'Guardar notificaciones Telegram enviadas en el registro',
'log_retention_days' => 'días', 'updated' => 'Configuración guardada.',
), 'tab_email' => 'Email',
'notifications' => array( 'tab_sms' => 'SMS',
'off_sms' => 'Servidor \'%LABEL%\' está fuera de línea: ip=%IP%, puerto=%PORT%. error=%ERROR%', 'tab_pushover' => 'Pushover',
'off_email_subject' => 'Importante: Servidor \'%LABEL%\' está fuera de línea', 'tab_telegram' => 'Telegram',
'off_email_body' => 'Imposible conectar al servidor:<br/><br/>Servidor: %LABEL%<br/>IP: %IP%<br/>Puerto: %PORT%<br/>Error: %ERROR%<br/>Fecha: %DATE%', 'settings_email' => 'Configuración de Correo Electrónico',
'off_pushover_title' => 'Servidor \'%LABEL%\' está fuera de línea', 'settings_sms' => 'Configuración de Mensajes de Texto',
'off_pushover_message' => 'No posible conectar al servidor:<br/><br/>Servidor: %LABEL%<br/>IP: %IP%<br/>Puerto: %PORT%<br/>Error: %ERROR%<br/>Fecha: %DATE%', 'settings_pushover' => 'Configuración de Pushover',
'off_telegram_message' => 'No posible conectar al servidor:<br/><br/>Servidor: %LABEL%<br/>IP: %IP%<br/>Puerto: %PORT%<br/>Error: %ERROR%<br/>Fecha: %DATE%', 'settings_telegram' => 'Configuración de Telegram',
'on_sms' => 'Servidor \'%LABEL%\' ya está de nuevo funcionando en línea: ip=%IP%, puerto=%PORT%, la duración de la caída fue de %LAST_OFFLINE_DURATION%', 'settings_notification' => 'Configuración de las notificaciones',
'on_email_subject' => 'Importante: Servidor \'%LABEL%\' ya está de nuevo en línea', 'settings_log' => 'Configuración de registros',
'on_email_body' => 'Servidor \'%LABEL%\' ya está funcionando en línea de nuevo, la duración de la caída fue de %LAST_OFFLINE_DURATION%:<br/><br/>Servidor: %LABEL%<br/>IP: %IP%<br/>Puerto: %PORT%<br/>Fecha: %DATE%', 'settings_proxy' => 'Configuración del proxy',
'on_pushover_title' => 'Servidor \'%LABEL%\' ya está de nuevo en línea', 'auto_refresh' => 'Auto-actualizar',
'on_pushover_message' => 'Servidor \'%LABEL%\' ya está funcionando en línea de nuevo, la duración de la caída fue de %LAST_OFFLINE_DURATION%:<br/><br/>Servidor: %LABEL%<br/>IP: %IP%<br/>Puerto: %PORT%<br/>Fecha: %DATE%', 'auto_refresh_description' => 'Auto-actualizar la página de servidores.<br><span class="small">Tiempo en
'on_telegram_message' => 'Servidor \'%LABEL%\' ya está funcionando en línea de nuevo, la duración de la caída fue de %LAST_OFFLINE_DURATION%:<br/><br/>Servidor: %LABEL%<br/>IP: %IP%<br/>Puerto: %PORT%<br/>Fecha: %DATE%', segundos, si se utiliza 0 la página no se actualizará.</span>',
'combi_off_email_message' => '<ul><li>Servidor: %LABEL%</li><li>IP: %IP%</li><li>Puerto: %PORT%</li><li>Error: %ERROR%</li><li>Fecha: %DATE%</li></ul>', 'seconds' => 'segundos',
'combi_off_pushover_message' => '<ul><li>Servidor: %LABEL%</li><li>IP: %IP%</li><li>Puerto: %PORT%</li><li>Error: %ERROR%</li><li>Fecha: %DATE%</li></ul>', 'test' => 'Prueba',
'combi_off_telegram_message' => '- Servidor: %LABEL%<br>- IP: %IP%<br>- Puerto: %PORT%<br>- Error: %ERROR%<br>- Fecha: %DATE%<br><br>', 'test_email' => 'Un correo electrónico será enviado a la dirección especificada en su perfil de usuario.',
'combi_on_email_message' => '<ul><li>Servidor: %LABEL%</li><li>IP: %IP%</li><li>Puerto: %PORT%</li><li>Duración de la caída: %LAST_OFFLINE_DURATION%</li><li>Fecha: %DATE%</li></ul>', 'test_sms' => 'Un SMS se enviará al número de teléfono especificado en su perfil de usuario.',
'combi_on_pushover_message' => '<ul><li>Servidor: %LABEL%</li><li>IP: %IP%</li><li>Puerto: %PORT%</li><li>Duración de la caída: %LAST_OFFLINE_DURATION%</li><li>Fecha: %DATE%</li></ul>', 'test_pushover' => 'Una notificación Pushover será enviada a la clave de usuario / dispositivo especificado
'combi_on_telegram_message' => '- Servidor: %LABEL%<br>- IP: %IP%<br>- Puerto: %PORT%<br>- Duración de la caída: %LAST_OFFLINE_DURATION%<br>- Fecha: %DATE%<br><br>', en su perfil de usuario.',
'combi_email_subject' => 'IMPORTANTE: %UP% servidores están en línea, %DOWN% servidores están ahora fuera de línea', 'test_telegram' => 'Una notificación de Telegram será enviada al chat id especificado en su perfil de
'combi_pushover_subject' => '%UP% servidores están en línea, %DOWN% servidores están ahora fuera de línea', usuario.',
'combi_email_message' => '<b>Los siguentes servidores están fuera de línea:</b><br>%DOWN_SERVERS%<br><b>Los siguientes servidores están en línea:</b><br>%UP_SERVERS%', 'send' => 'Enviar',
'combi_pushover_message' => '<b>Los siguentes servidores están fuera de línea:</b><br>%DOWN_SERVERS%<br><b>Los siguientes servidores están en línea:</b><br>%UP_SERVERS%', 'test_subject' => 'Prueba',
'combi_telegram_message' => '<b>Los siguentes servidores están fuera de línea:</b><br>%DOWN_SERVERS%<br><b>Los siguientes servidores están en línea:</b><br>%UP_SERVERS%', 'test_message' => 'Mensaje de prueba',
), 'email_sent' => 'Correo enviado',
'login' => array( 'email_error' => 'Error al enviar el correo',
'welcome_usermenu' => '%user_name%', 'sms_sent' => 'SMS enviado',
'title_sign_in' => 'Por favor, inicie sesión', 'sms_error' => 'Error al enviar el SMS: %s',
'title_forgot' => '¿Olvidaste tu contraseña?', 'sms_error_nomobile' => 'Imposible enviar el SMS: no se encontró un número de teléfono válido en su
'title_reset' => 'Restablecer su contraseña', perfil.',
'submit' => 'Enviar', 'pushover_sent' => 'Notificación de Pushover enviada',
'remember_me' => 'Recordarme', 'pushover_error' => 'Ocurrió un error enviado la notificación de Pushover: %s',
'login' => 'Iniciar sesión', 'pushover_error_noapp' => 'No se puede enviar una notificación de prueba: no existe un token API de Pushover
'logout' => 'Salir', en la configuración global.',
'username' => 'Nombre de usuario', 'pushover_error_nokey' => 'No se puede enviar una notificación de prueba: no existe ninguna clave de Pushover
'password' => 'Contraseña', en su perfil.',
'password_repeat' => 'Repita la contraseña', 'telegram_sent' => 'Notificación de Telegram enviada',
'password_forgot' => '¿Has olvidado tu contraseña?', 'telegram_error' => 'Ocurrió un error enviado la notificación de Telegram: %s',
'password_reset' => 'Perdí mi contraseña', 'telegram_error_notoken' => 'Imposible enviar la notificación: No se encontró un Token de API en la
'password_reset_email_subject' => 'Restablecer la contraseña para PHP Server Monitor', configuración global.',
'password_reset_email_body' => 'Utilice el siguiente enlace para restablecer tu contraseña. Tenga en cuenta que expira de 1 hora.<br><br>%link%', 'telegram_error_noid' => 'Imposible enviar la notificación: No se encontró un chat id en su perfil.',
'error_user_incorrect' => 'El nombre de usuario proporcionado no se pudo encontrar.', 'log_retention_period' => 'Período de retención del registro',
'error_login_incorrect' => 'La información es incorrecta.', 'log_retention_period_description' => 'Número de días que se conservan registros de las notificaciones y los
'error_login_passwords_nomatch' => 'Las contraseñas proporcionadas no coinciden.', archivos de tiempo de actividad del servidor. Introduzca 0 para
'error_reset_invalid_link' => 'El vínculo de cambio que ya ha proporcionado no es válido.', desactivar la limpieza de los registros.',
'success_password_forgot' => 'Un correo electrónico ha sido enviado a usted con información de cómo restablecer su contraseña.', 'log_retention_days' => 'días',
'success_password_reset' => 'Su contraseña ha sido restablecida correctamente. Por favor, inicia sesión.', ),
), 'notifications' => array(
'error' => array( 'off_sms' => 'Servidor \'%LABEL%\' está fuera de línea: ip=%IP%, puerto=%PORT%. error=%ERROR%',
'401_unauthorized' => 'No Autorizado', 'off_email_subject' => 'Importante: Servidor \'%LABEL%\' está fuera de línea',
'401_unauthorized_description' => 'Usted no tiene los privilegios para ver esta página.', 'off_email_body' => 'Imposible conectar al servidor:<br/><br/>Servidor: %LABEL%<br/>IP: %IP%<br/>Puerto:
), %PORT%<br/>Error: %ERROR%<br/>Fecha: %DATE%',
'off_pushover_title' => 'Servidor \'%LABEL%\' está fuera de línea',
'off_pushover_message' => 'No posible conectar al servidor:<br/><br/>Servidor: %LABEL%<br/>IP:
%IP%<br/>Puerto: %PORT%<br/>Error: %ERROR%<br/>Fecha: %DATE%',
'off_telegram_message' => 'No posible conectar al servidor:<br/><br/>Servidor: %LABEL%<br/>IP:
%IP%<br/>Puerto: %PORT%<br/>Error: %ERROR%<br/>Fecha: %DATE%',
'on_sms' => 'Servidor \'%LABEL%\' ya está de nuevo funcionando en línea: ip=%IP%, puerto=%PORT%, la
duración de la caída fue de %LAST_OFFLINE_DURATION%',
'on_email_subject' => 'Importante: Servidor \'%LABEL%\' ya está de nuevo en línea',
'on_email_body' => 'Servidor \'%LABEL%\' ya está funcionando en línea de nuevo, la duración de la caída
fue de %LAST_OFFLINE_DURATION%:<br/><br/>Servidor: %LABEL%<br/>IP: %IP%<br/>Puerto:
%PORT%<br/>Fecha: %DATE%',
'on_pushover_title' => 'Servidor \'%LABEL%\' ya está de nuevo en línea',
'on_pushover_message' => 'Servidor \'%LABEL%\' ya está funcionando en línea de nuevo, la duración de la
caída fue de %LAST_OFFLINE_DURATION%:<br/><br/>Servidor: %LABEL%<br/>IP:
%IP%<br/>Puerto: %PORT%<br/>Fecha: %DATE%',
'on_telegram_message' => 'Servidor \'%LABEL%\' ya está funcionando en línea de nuevo, la duración de la
caída fue de %LAST_OFFLINE_DURATION%:<br/><br/>Servidor: %LABEL%<br/>IP:
%IP%<br/>Puerto: %PORT%<br/>Fecha: %DATE%',
'combi_off_email_message' => '<ul><li>Servidor: %LABEL%</li><li>IP: %IP%</li><li>Puerto: %PORT%</li><li>Error:
%ERROR%</li><li>Fecha: %DATE%</li></ul>',
'combi_off_pushover_message' => '<ul><li>Servidor: %LABEL%</li><li>IP: %IP%</li><li>Puerto:
%PORT%</li><li>Error: %ERROR%</li><li>Fecha: %DATE%</li></ul>',
'combi_off_telegram_message' => '- Servidor: %LABEL%<br>- IP: %IP%<br>- Puerto: %PORT%<br>- Error:
%ERROR%<br>- Fecha: %DATE%<br><br>',
'combi_on_email_message' => '<ul><li>Servidor: %LABEL%</li><li>IP: %IP%</li><li>Puerto:
%PORT%</li><li>Duración de la caída: %LAST_OFFLINE_DURATION%</li><li>Fecha:
%DATE%</li></ul>',
'combi_on_pushover_message' => '<ul><li>Servidor: %LABEL%</li><li>IP: %IP%</li><li>Puerto:
%PORT%</li><li>Duración de la caída: %LAST_OFFLINE_DURATION%</li><li>Fecha:
%DATE%</li></ul>',
'combi_on_telegram_message' => '- Servidor: %LABEL%<br>- IP: %IP%<br>- Puerto: %PORT%<br>- Duración de la
caída: %LAST_OFFLINE_DURATION%<br>- Fecha: %DATE%<br><br>',
'combi_email_subject' => 'IMPORTANTE: %UP% servidores están en línea, %DOWN% servidores están ahora fuera
de línea',
'combi_pushover_subject' => '%UP% servidores están en línea, %DOWN% servidores están ahora fuera de línea',
'combi_email_message' => '<b>Los siguentes servidores están fuera de línea:</b><br>%DOWN_SERVERS%<br><b>Los
siguientes servidores están en línea:</b><br>%UP_SERVERS%',
'combi_pushover_message' => '<b>Los siguentes servidores están fuera de
línea:</b><br>%DOWN_SERVERS%<br><b>Los siguientes servidores están en
línea:</b><br>%UP_SERVERS%',
'combi_telegram_message' => '<b>Los siguentes servidores están fuera de
línea:</b><br>%DOWN_SERVERS%<br><b>Los siguientes servidores están en
línea:</b><br>%UP_SERVERS%',
),
'login' => array(
'welcome_usermenu' => '%user_name%',
'title_sign_in' => 'Por favor, inicie sesión',
'title_forgot' => '¿Olvidaste tu contraseña?',
'title_reset' => 'Restablecer su contraseña',
'submit' => 'Enviar',
'remember_me' => 'Recordarme',
'login' => 'Iniciar sesión',
'logout' => 'Salir',
'username' => 'Nombre de usuario',
'password' => 'Contraseña',
'password_repeat' => 'Repita la contraseña',
'password_forgot' => '¿Has olvidado tu contraseña?',
'password_reset' => 'Perdí mi contraseña',
'password_reset_email_subject' => 'Restablecer la contraseña para PHP Server Monitor',
'password_reset_email_body' => 'Utilice el siguiente enlace para restablecer tu contraseña. Tenga en cuenta
que expira de 1 hora.<br><br>%link%',
'error_user_incorrect' => 'El nombre de usuario proporcionado no se pudo encontrar.',
'error_login_incorrect' => 'La información es incorrecta.',
'error_login_passwords_nomatch' => 'Las contraseñas proporcionadas no coinciden.',
'error_reset_invalid_link' => 'El vínculo de cambio que ya ha proporcionado no es válido.',
'success_password_forgot' => 'Un correo electrónico ha sido enviado a usted con información de cómo
restablecer su contraseña.',
'success_password_reset' => 'Su contraseña ha sido restablecida correctamente. Por favor, inicia sesión.',
),
'error' => array(
'401_unauthorized' => 'No Autorizado',
'401_unauthorized_description' => 'Usted no tiene los privilegios para ver esta página.',
),
); );

View File

@ -1,4 +1,5 @@
<?php <?php
/** /**
* PHP Server Monitor * PHP Server Monitor
* Monitor your servers and websites. * Monitor your servers and websites.
@ -26,271 +27,290 @@
**/ **/
$sm_lang = array( $sm_lang = array(
'name' => 'Eesti keel - Estonian', 'name' => 'Eesti keel - Estonian',
'locale' => array('et_ET.UTF-8', 'et_ET', 'estonian'), 'locale' => array(
'locale_tag' => 'et', '0' => 'et_ET.UTF-8',
'locale_dir' => 'ltr', '1' => 'et_ET',
'system' => array( '2' => 'estonian',
'title' => 'Serveri Monitor', ),
'install' => 'Installeeri', 'locale_tag' => 'et',
'action' => 'Toiming', 'locale_dir' => 'ltr',
'save' => 'Salvesta', 'system' => array(
'edit' => 'Muuda', 'title' => 'Serveri Monitor',
'delete' => 'Kustuta', 'install' => 'Installeeri',
'date' => 'Kuupäev', 'action' => 'Toiming',
'message' => 'Sõnum', 'save' => 'Salvesta',
'yes' => 'Jah', 'edit' => 'Muuda',
'no' => 'Ei', 'delete' => 'Kustuta',
'insert' => 'Sisesta', 'date' => 'Kuupäev',
'add_new' => 'Lisa uus', 'message' => 'Sõnum',
'update_available' => 'Uus versioon ({version}) on saadaval <a href="https://github.com/phpservermon/phpservermon/releases/latest" target="_blank" rel="noopener">http://www.phpservermonitor.org</a>.', 'yes' => 'Jah',
'back_to_top' => 'Tagasi üles', 'no' => 'Ei',
'go_back' => 'Mine tagasi', 'insert' => 'Sisesta',
'ok' => 'OK', 'add_new' => 'Lisa uus',
'cancel' => 'Tühista', 'update_available' => 'Uus versioon ({version}) on saadaval <a
// date/time format according the strftime php function format parameter http://php.net/manual/function.strftime.php href="https://github.com/phpservermon/phpservermon/releases/latest" target="_blank"
'short_day_format' => '%B %e', rel="noopener">http://www.phpservermonitor.org</a>.',
'long_day_format' => '%B %e, %Y', 'back_to_top' => 'Tagasi üles',
'yesterday_format' => 'Eile kell %k:%M', 'go_back' => 'Mine tagasi',
'other_day_format' => '%A kell %k:%M', 'ok' => 'OK',
'never' => 'Never', 'cancel' => 'Tühista',
'hours_ago' => '%d tundi tagasi', 'short_day_format' => '%B %e',
'an_hour_ago' => 'umbes tund aega tagasi', 'long_day_format' => '%B %e, %Y',
'minutes_ago' => '%d minutit tagasi', 'yesterday_format' => 'Eile kell %k:%M',
'a_minute_ago' => 'umbes minut aega tagasi', 'other_day_format' => '%A kell %k:%M',
'seconds_ago' => '%d sekundit tagasi', 'never' => 'Never',
'a_second_ago' => 'üks sekund tagasi', 'hours_ago' => '%d tundi tagasi',
), 'an_hour_ago' => 'umbes tund aega tagasi',
'menu' => array( 'minutes_ago' => '%d minutit tagasi',
'config' => 'Konfiguratsioon', 'a_minute_ago' => 'umbes minut aega tagasi',
'server' => 'Serverid', 'seconds_ago' => '%d sekundit tagasi',
'server_log' => 'Logi', 'a_second_ago' => 'üks sekund tagasi',
'server_status' => 'Staatus', ),
'server_update' => 'Uuenda', 'menu' => array(
'user' => 'Kasutajad', 'config' => 'Konfiguratsioon',
'help' => 'Abi', 'server' => 'Serverid',
), 'server_log' => 'Logi',
'users' => array( 'server_status' => 'Staatus',
'user' => 'Kasutaja', 'server_update' => 'Uuenda',
'name' => 'Nimi', 'user' => 'Kasutajad',
'user_name' => 'Kasutajanimi', 'help' => 'Abi',
'password' => 'Parool', ),
'password_repeat' => 'Korda parooli', 'users' => array(
'password_leave_blank' => 'Jäta tühjaks, et jätta samaks', 'user' => 'Kasutaja',
'level' => 'Tase', 'name' => 'Nimi',
'level_10' => 'Administraator', 'user_name' => 'Kasutajanimi',
'level_20' => 'Kasutaja', 'password' => 'Parool',
'level_description' => '<b>Administraatoritel</b> on täielik ligipääs: nad saavad hallata servereid, kasutajaid ja muuta globaalset konfiguratsiooni.<br><b>Kasutajad</b> saavad ainult näha ja uuendada neid servereid, mis on neile määratud.', 'password_repeat' => 'Korda parooli',
'mobile' => 'Mobiil', 'password_leave_blank' => 'Jäta tühjaks, et jätta samaks',
'email' => 'Email', 'level' => 'Tase',
'pushover' => 'Pushover', 'level_10' => 'Administraator',
'pushover_description' => 'Pushover on teenus, mis teeb reaalaja teavitused imelihtsaks. Vaata <a href="https://pushover.net/">nende kodulehte</a> rohkema info jaoks.', 'level_20' => 'Kasutaja',
'pushover_key' => 'Pushoveri Võti', 'level_description' => '<b>Administraatoritel</b> on täielik ligipääs: nad saavad hallata servereid,
'pushover_device' => 'Pushoveri Seade', kasutajaid ja muuta globaalset konfiguratsiooni.<br><b>Kasutajad</b> saavad ainult
'pushover_device_description' => 'Seadme nimi, kuhu teavitus saata. Jäta tühjaks, et saata igale seadmele.', näha ja uuendada neid servereid, mis on neile määratud.',
'delete_title' => 'Kustuta Kasutaja', 'mobile' => 'Mobiil',
'delete_message' => 'Oled kindel, et soovid selle kasutaja kustutada \'%1\'?', 'email' => 'Email',
'deleted' => 'Kasutaja kustutatud.', 'pushover' => 'Pushover',
'updated' => 'Kasutaja uuendatud.', 'pushover_description' => 'Pushover on teenus, mis teeb reaalaja teavitused imelihtsaks. Vaata <a
'inserted' => 'Kasutaja lisatud.', href="https://pushover.net/" target="_blank">nende kodulehte</a> rohkema info
'profile' => 'Profiil', jaoks.',
'profile_updated' => 'Sinu profiil on uuendatud.', 'pushover_key' => 'Pushoveri Võti',
'error_user_name_bad_length' => 'Kasutajanimi peab olema 2 kuni 64 tähemärki pikk.', 'pushover_device' => 'Pushoveri Seade',
'error_user_name_invalid' => 'Kasutajanimi võib koosneda ainult tähenumbrilistest kombinatsioonidest (a-z, A-Z), numbritest (0-9), punktid (.) ja alakriipsust (_).', 'pushover_device_description' => 'Seadme nimi, kuhu teavitus saata. Jäta tühjaks, et saata igale seadmele.',
'error_user_name_exists' => 'Antud kasutaja juba eksisteerib andmebaasis.', 'delete_title' => 'Kustuta Kasutaja',
'error_user_email_bad_length' => 'Email võib olla 5 kuni 255 tähemärki pikk.', 'delete_message' => 'Oled kindel, et soovid selle kasutaja kustutada \'%1\'?',
'error_user_email_invalid' => 'Emaili aadress on kehtetu.', 'deleted' => 'Kasutaja kustutatud.',
'error_user_level_invalid' => 'Antud kasutaja tase on kehtetu.', 'updated' => 'Kasutaja uuendatud.',
'error_user_no_match' => 'Kasutajat ei leitud andmebaasist.', 'inserted' => 'Kasutaja lisatud.',
'error_user_password_invalid' => 'Sisestatud parool on kehtetu.', 'profile' => 'Profiil',
'error_user_password_no_match' => 'Sisestatud paroolid ei kattu.', 'profile_updated' => 'Sinu profiil on uuendatud.',
), 'error_user_name_bad_length' => 'Kasutajanimi peab olema 2 kuni 64 tähemärki pikk.',
'log' => array( 'error_user_name_invalid' => 'Kasutajanimi võib koosneda ainult tähenumbrilistest kombinatsioonidest (a-z,
'title' => 'Logi kirjed', A-Z), numbritest (0-9), punktid (.) ja alakriipsust (_).',
'type' => 'Tüüp', 'error_user_name_exists' => 'Antud kasutaja juba eksisteerib andmebaasis.',
'status' => 'Staatus', 'error_user_email_bad_length' => 'Email võib olla 5 kuni 255 tähemärki pikk.',
'email' => 'Email', 'error_user_email_invalid' => 'Emaili aadress on kehtetu.',
'sms' => 'SMS', 'error_user_level_invalid' => 'Antud kasutaja tase on kehtetu.',
'pushover' => 'Pushover', 'error_user_no_match' => 'Kasutajat ei leitud andmebaasist.',
'no_logs' => 'Logisid ei eksisteeri', 'error_user_password_invalid' => 'Sisestatud parool on kehtetu.',
'clear' => 'Puhasta logig', 'error_user_password_no_match' => 'Sisestatud paroolid ei kattu.',
'delete_title' => 'Kustuta logi', ),
'delete_message' => 'Kas olete kindel, et soovite kustutada <b>kõik</b> logid?', 'log' => array(
), 'title' => 'Logi kirjed',
'servers' => array( 'type' => 'Tüüp',
'server' => 'Server', 'status' => 'Staatus',
'status' => 'Staatus', 'email' => 'Email',
'label' => 'Silt', 'sms' => 'SMS',
'domain' => 'Domeen/IP', 'pushover' => 'Pushover',
'timeout' => 'Ajalõpp', 'no_logs' => 'Logisid ei eksisteeri',
'timeout_description' => 'Arv sekundeid oodata serveri vastamiseks.', 'clear' => 'Puhasta logig',
'port' => 'Port', 'delete_title' => 'Kustuta logi',
'type' => 'Tüüp', 'delete_message' => 'Kas olete kindel, et soovite kustutada <b>kõik</b> logid?',
'type_website' => 'Veebileht', ),
'type_service' => 'Teenus', 'servers' => array(
'pattern' => 'Otsi nööri/mudelit', 'server' => 'Server',
'pattern_description' => 'Kui seda mudelit serverist ei leita, siis server märgitakse võrgustväljas. Tavapärased väljendid on lubatud.', 'status' => 'Staatus',
'last_check' => 'Viimane kontroll', 'label' => 'Silt',
'last_online' => 'Viimati oli võrgus', 'domain' => 'Domeen/IP',
'monitoring' => 'Jälgib', 'timeout' => 'Ajalõpp',
'no_monitoring' => 'Ei jälgi', 'timeout_description' => 'Arv sekundeid oodata serveri vastamiseks.',
'email' => 'Email', 'port' => 'Port',
'send_email' => 'Saada Email', 'type' => 'Tüüp',
'sms' => 'SMS', 'type_website' => 'Veebileht',
'send_sms' => 'Saada SMS', 'type_service' => 'Teenus',
'pushover' => 'Pushover', 'pattern' => 'Otsi nööri/mudelit',
'users' => 'Kasutajad', 'pattern_description' => 'Kui seda mudelit serverist ei leita, siis server märgitakse võrgustväljas.
'delete_title' => 'Kustuta server', Tavapärased väljendid on lubatud.',
'delete_message' => 'Oled kindel, et soovid serveri kustutada \'%1\'?', 'last_check' => 'Viimane kontroll',
'deleted' => 'Server kustutatud.', 'last_online' => 'Viimati oli võrgus',
'updated' => 'Server uuendatud.', 'monitoring' => 'Jälgib',
'inserted' => 'Server lisatud.', 'no_monitoring' => 'Ei jälgi',
'latency' => 'Viivitus', 'email' => 'Email',
'latency_max' => 'Viivitus (maksimaalne)', 'send_email' => 'Saada Email',
'latency_min' => 'Viivitus (minimaalne)', 'sms' => 'SMS',
'latency_avg' => 'Viivitus (keskmine)', 'send_sms' => 'Saada SMS',
'uptime' => 'Võrgus oldud aeg', 'pushover' => 'Pushover',
'year' => 'Aasta', 'users' => 'Kasutajad',
'month' => 'Kuu', 'delete_title' => 'Kustuta server',
'week' => 'Nädal', 'delete_message' => 'Oled kindel, et soovid serveri kustutada \'%1\'?',
'day' => 'Päev', 'deleted' => 'Server kustutatud.',
'hour' => 'Tund', 'updated' => 'Server uuendatud.',
'warning_threshold' => 'Hoiatuskünnis', 'inserted' => 'Server lisatud.',
'warning_threshold_description' => 'Arv ebaõnnestunud kontrolle enne võrgustväljas märkimist.', 'latency' => 'Viivitus',
'chart_last_week' => 'Eelmine nädal', 'latency_max' => 'Viivitus (maksimaalne)',
'chart_history' => 'Ajalugu', 'latency_min' => 'Viivitus (minimaalne)',
// Charts date format according jqPlot date format http://www.jqplot.com/docs/files/plugins/jqplot-dateAxisRenderer-js.html 'latency_avg' => 'Viivitus (keskmine)',
'chart_day_format' => '%Y-%m-%d', 'uptime' => 'Võrgus oldud aeg',
'chart_long_date_format' => '%Y-%m-%d %H:%M:%S', 'year' => 'Aasta',
'chart_short_date_format' => '%d/%m %H:%M', 'month' => 'Kuu',
'chart_short_time_format' => '%H:%M', 'week' => 'Nädal',
'warning_notifications_disabled_sms' => 'SMS teavitused on väljas.', 'day' => 'Päev',
'warning_notifications_disabled_email' => 'Emaili teavitused on väljas.', 'hour' => 'Tund',
'warning_notifications_disabled_pushover' => 'Pushover teavitused on väljas.', 'warning_threshold' => 'Hoiatuskünnis',
'error_server_no_match' => 'Serverit ei leitud.', 'warning_threshold_description' => 'Arv ebaõnnestunud kontrolle enne võrgustväljas märkimist.',
'error_server_label_bad_length' => 'Silt peab olema 1 kuni 255 tähemärki pikk.', 'chart_last_week' => 'Eelmine nädal',
'error_server_ip_bad_length' => 'Domeen / IP peab olema 1 kuni 255 tähemärki pikk.', 'chart_history' => 'Ajalugu',
'error_server_ip_bad_service' => 'Antud IP aadress ei ole kehtiv.', 'chart_day_format' => '%Y-%m-%d',
'error_server_ip_bad_website' => 'Antud veebileht ei ole kehtiv.', 'chart_long_date_format' => '%Y-%m-%d %H:%M:%S',
'error_server_type_invalid' => 'Valitud server oli kehtetu.', 'chart_short_date_format' => '%d/%m %H:%M',
'error_server_warning_threshold_invalid' => 'Hoiatuskünnis peab olema suurem täisarv kui 0.', 'chart_short_time_format' => '%H:%M',
), 'warning_notifications_disabled_sms' => 'SMS teavitused on väljas.',
'config' => array( 'warning_notifications_disabled_email' => 'Emaili teavitused on väljas.',
'general' => 'Üldine', 'warning_notifications_disabled_pushover' => 'Pushover teavitused on väljas.',
'language' => 'Keel', 'error_server_no_match' => 'Serverit ei leitud.',
'show_update' => 'Otsi värskendusi?', 'error_server_label_bad_length' => 'Silt peab olema 1 kuni 255 tähemärki pikk.',
'email_status' => 'Luba emailide saatmine', 'error_server_ip_bad_length' => 'Domeen / IP peab olema 1 kuni 255 tähemärki pikk.',
'email_from_email' => 'Email aadressilt', 'error_server_ip_bad_service' => 'Antud IP aadress ei ole kehtiv.',
'email_from_name' => 'Email nimelt', 'error_server_ip_bad_website' => 'Antud veebileht ei ole kehtiv.',
'email_smtp' => 'Luba SMTP', 'error_server_type_invalid' => 'Valitud server oli kehtetu.',
'email_smtp_host' => 'SMTP host', 'error_server_warning_threshold_invalid' => 'Hoiatuskünnis peab olema suurem täisarv kui 0.',
'email_smtp_port' => 'SMTP port', ),
'email_smtp_security' => 'SMTP turvalisus', 'config' => array(
'email_smtp_security_none' => 'Mitte ükski', 'general' => 'Üldine',
'email_smtp_username' => 'SMTP kasutajanimi', 'language' => 'Keel',
'email_smtp_password' => 'SMTP parool', 'show_update' => 'Otsi värskendusi?',
'email_smtp_noauth' => 'Jäta tühjaks, et jätkata ilma autentimiseta', 'email_status' => 'Luba emailide saatmine',
'sms_status' => 'Luba sõnumite saatmine', 'email_from_email' => 'Email aadressilt',
'sms_gateway' => 'Väravad sõnumite saatmiseks', 'email_from_name' => 'Email nimelt',
'sms_gateway_username' => 'Värava kasutajanimi', 'email_smtp' => 'Luba SMTP',
'sms_gateway_password' => 'Värava parool', 'email_smtp_host' => 'SMTP host',
'sms_from' => 'Saatja telefoni number', 'email_smtp_port' => 'SMTP port',
'pushover_status' => 'Luba Pushoveri sõnumite saatmine', 'email_smtp_security' => 'SMTP turvalisus',
'pushover_description' => 'Pushover on teenus, mis teeb reaalaja teavitused imelihtsaks. Vaata <a href="https://pushover.net/">nende kodulehte</a> rohkema info jaoks.', 'email_smtp_security_none' => 'Mitte ükski',
'pushover_clone_app' => 'Kliki siia, et teha oma Pushover äpp', 'email_smtp_username' => 'SMTP kasutajanimi',
'pushover_api_token' => 'Pushover Äppi API Žetoon', 'email_smtp_password' => 'SMTP parool',
'pushover_api_token_description' => 'Enne, kui saad Pushoverida pead sa <a href="%1$s" target="_blank" rel="noopener">regristreerima äpi</a> nende kodulehel ja sisestama API žetooni siia.', 'email_smtp_noauth' => 'Jäta tühjaks, et jätkata ilma autentimiseta',
'alert_type' => 'Vali, millal sa sooviksid olla teavitatud.', 'sms_status' => 'Luba sõnumite saatmine',
'alert_type_description' => '<b>Staatuse muutus:</b> '. 'sms_gateway' => 'Väravad sõnumite saatmiseks',
'Saate teavituse kui serveri staatuses toimub muudatusi. Seega kättesaadav -> võrgust väljas või võrgust väljas -> kättesaadav.<br>'. 'sms_gateway_username' => 'Värava kasutajanimi',
'<br /><b>Võrgust väljas:</b> '. 'sms_gateway_password' => 'Värava parool',
'Saate teavituse kui server läheb võrgust välja *ESIMEST KORDA*. Näiteks, '. 'sms_from' => 'Saatja telefoni number',
'sinu cronjob on iga 15 minuti tagant ja sulgub kell 1 öösel kuni kella 6ni hommikul. '. 'pushover_status' => 'Luba Pushoveri sõnumite saatmine',
'Saate 1 teavituse kell 1 öösel ja see on kõik.<br>'. 'pushover_description' => 'Pushover on teenus, mis teeb reaalaja teavitused imelihtsaks. Vaata <a
'<br><b>Alati:</b> '. href="https://pushover.net/" target="_blank">nende kodulehte</a> rohkema info
'Saate teavituse iga kord kui staatust uuendatakse, isegi kui leht on olnud maas juba tunde.', jaoks.',
'alert_type_status' => 'Staatuse muutus', 'pushover_clone_app' => 'Kliki siia, et teha oma Pushover äpp',
'alert_type_offline' => 'Võrgust väljas', 'pushover_api_token' => 'Pushover Äppi API Žetoon',
'alert_type_always' => 'Alati', 'pushover_api_token_description' => 'Enne, kui saad Pushoverida pead sa <a href="%1$s" target="_blank"
'log_status' => 'Logi staatus', rel="noopener">regristreerima äpi</a> nende kodulehel ja sisestama API
'log_status_description' => 'Kui logimine on seatud TÕESEKS, siis monitor logib aktiivsuse mil teavituse seaded on läbitud.', žetooni siia.',
'log_email' => 'Logi saadetud emailid', 'alert_type' => 'Vali, millal sa sooviksid olla teavitatud.',
'log_sms' => 'Logi saadetud sõnumid', 'alert_type_description' => '<b>Staatuse muutus:</b> Saate teavituse kui serveri staatuses toimub muudatusi.
'log_pushover' => 'Logi Pushoveri saadetud teavitused', Seega kättesaadav -> võrgust väljas või võrgust väljas ->
'updated' => 'Konfiguratsioon on uuendatud.', kättesaadav.<br><br /><b>Võrgust väljas:</b> Saate teavituse kui server läheb
'tab_email' => 'Email', võrgust välja *ESIMEST KORDA*. Näiteks, sinu cronjob on iga 15 minuti tagant
'tab_sms' => 'SMS', ja sulgub kell 1 öösel kuni kella 6ni hommikul. Saate 1 teavituse kell 1
'tab_pushover' => 'Pushover', öösel ja see on kõik.<br><br><b>Alati:</b> Saate teavituse iga kord kui
'settings_email' => 'Emaili seaded', staatust uuendatakse, isegi kui leht on olnud maas juba tunde.',
'settings_sms' => 'Sõnumite seaded', 'alert_type_status' => 'Staatuse muutus',
'settings_pushover' => 'Pushoveri seaded', 'alert_type_offline' => 'Võrgust väljas',
'settings_notification' => 'Teavituste seaded', 'alert_type_always' => 'Alati',
'settings_log' => 'Logi seaded', 'log_status' => 'Logi staatus',
'auto_refresh' => 'Automaatne värskendamine', 'log_status_description' => 'Kui logimine on seatud TÕESEKS, siis monitor logib aktiivsuse mil teavituse
'auto_refresh_description' => seaded on läbitud.',
'Värskenda lehte automaatselt.<br>'. 'log_email' => 'Logi saadetud emailid',
'<span class="small">'. 'log_sms' => 'Logi saadetud sõnumid',
'Aeg sekundites, kui 0 siis lehte ei värskendata.'. 'log_pushover' => 'Logi Pushoveri saadetud teavitused',
'</span>', 'updated' => 'Konfiguratsioon on uuendatud.',
'seconds' => 'sekundit', 'tab_email' => 'Email',
'test' => 'Test', 'tab_sms' => 'SMS',
'test_email' => 'Email saadetakse profiilil märgitud aadressile.', 'tab_pushover' => 'Pushover',
'test_sms' => 'SMS saadetakse profiilil märgitud numbrile.', 'settings_email' => 'Emaili seaded',
'test_pushover' => 'Pushover teavitus saadetakse profiilil märgitud seadmele/tele.', 'settings_sms' => 'Sõnumite seaded',
'send' => 'Saada', 'settings_pushover' => 'Pushoveri seaded',
'test_subject' => 'Test', 'settings_notification' => 'Teavituste seaded',
'test_message' => 'Test sõnum', 'settings_log' => 'Logi seaded',
'email_sent' => 'Email saadetud', 'auto_refresh' => 'Automaatne värskendamine',
'email_error' => 'Emaili saatmisel esines error', 'auto_refresh_description' => 'Värskenda lehte automaatselt.<br><span class="small">Aeg sekundites, kui 0
'sms_sent' => 'Sms saadetud', siis lehte ei värskendata.</span>',
'sms_error' => 'Smsi saatmisel esines error. %s', 'seconds' => 'sekundit',
'sms_error_nomobile' => 'Test SMSi ei saadetud: kehtivat telefoni numbrit ei leitud.', 'test' => 'Test',
'pushover_sent' => 'Pushover teavitus saadetud', 'test_email' => 'Email saadetakse profiilil märgitud aadressile.',
'pushover_error' => 'Pushover teavituse saatmisel esines error: %s', 'test_sms' => 'SMS saadetakse profiilil märgitud numbrile.',
'pushover_error_noapp' => 'Test teavitust ei saadetud: Pushover API žetooni ei leitud globaalsest konfiguratsioonist.', 'test_pushover' => 'Pushover teavitus saadetakse profiilil märgitud seadmele/tele.',
'pushover_error_nokey' => 'Test teavitust ei saadetud: Pushover võtit ei leitud.', 'send' => 'Saada',
'log_retention_period' => 'Logi säilitamis periood', 'test_subject' => 'Test',
'log_retention_period_description' => 'Arv päevi, mil hoida logid alles. Sisesta 0, et keelata logide puhastus.', 'test_message' => 'Test sõnum',
'log_retention_days' => 'päeva', 'email_sent' => 'Email saadetud',
), 'email_error' => 'Emaili saatmisel esines error',
// for newlines in the email messages use <br> 'sms_sent' => 'Sms saadetud',
'notifications' => array( 'sms_error' => 'Smsi saatmisel esines error. %s',
'off_sms' => 'Server \'%LABEL%\' on MAAS: ip=%IP%, port=%PORT%. Error=%ERROR%', 'sms_error_nomobile' => 'Test SMSi ei saadetud: kehtivat telefoni numbrit ei leitud.',
'off_email_subject' => 'TÄHTIS: Server \'%LABEL%\' is MAAS', 'pushover_sent' => 'Pushover teavitus saadetud',
'off_email_body' => "Ühendus järgnevasse serverisse ebaõnnestus:<br><br>Server: %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>Error: %ERROR%<br>Kuupäev: %DATE%", 'pushover_error' => 'Pushover teavituse saatmisel esines error: %s',
'off_pushover_title' => 'Server \'%LABEL%\' on MAAS', 'pushover_error_noapp' => 'Test teavitust ei saadetud: Pushover API žetooni ei leitud globaalsest
'off_pushover_message' => "Ühendus järgnevasse serverisse ebaõnnestus:<br><br>Server: %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>Error: %ERROR%<br>Kuupäev: %DATE%", konfiguratsioonist.',
'on_sms' => 'Server \'%LABEL%\' on KÄTTESAADAV: ip=%IP%, port=%PORT%, it was down for %LAST_OFFLINE_DURATION%', 'pushover_error_nokey' => 'Test teavitust ei saadetud: Pushover võtit ei leitud.',
'on_email_subject' => 'TÄHTIS: Server \'%LABEL%\' on kättesaadav', 'log_retention_period' => 'Logi säilitamis periood',
'on_email_body' => "Server '%LABEL%' on jälle kättesaadav, it was down for %LAST_OFFLINE_DURATION%:<br><br>Server: %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>Kuupäev: %DATE%", 'log_retention_period_description' => 'Arv päevi, mil hoida logid alles. Sisesta 0, et keelata logide
'on_pushover_title' => 'Server \'%LABEL%\' on kättesaadav', puhastus.',
'on_pushover_message' => 'Server \'%LABEL%\' on jälle kättesaadav, it was down for %LAST_OFFLINE_DURATION%:<br><br>Server: %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>Kuupäev: %DATE%', 'log_retention_days' => 'päeva',
), ),
'login' => array( 'notifications' => array(
'welcome_usermenu' => 'Teretulemast, %user_name%', 'off_sms' => 'Server \'%LABEL%\' on MAAS: ip=%IP%, port=%PORT%. Error=%ERROR%',
'title_sign_in' => 'Palun logi sisse', 'off_email_subject' => 'TÄHTIS: Server \'%LABEL%\' is MAAS',
'title_forgot' => 'Unustasid oma salasõna?', 'off_email_body' => 'Ühendus järgnevasse serverisse ebaõnnestus:<br><br>Server: %LABEL%<br>IP:
'title_reset' => 'Lähtesta oma parool', %IP%<br>Port: %PORT%<br>Error: %ERROR%<br>Kuupäev: %DATE%',
'submit' => 'Esita', 'off_pushover_title' => 'Server \'%LABEL%\' on MAAS',
'remember_me' => 'Mäleta mind', 'off_pushover_message' => 'Ühendus järgnevasse serverisse ebaõnnestus:<br><br>Server: %LABEL%<br>IP:
'login' => 'Logi sisse', %IP%<br>Port: %PORT%<br>Error: %ERROR%<br>Kuupäev: %DATE%',
'logout' => 'Logi välja', 'on_sms' => 'Server \'%LABEL%\' on KÄTTESAADAV: ip=%IP%, port=%PORT%, it was down for %LAST_OFFLINE_DURATION%',
'username' => 'Kasutajanimi', 'on_email_subject' => 'TÄHTIS: Server \'%LABEL%\' on kättesaadav',
'password' => 'Parool', 'on_email_body' => 'Server \'%LABEL%\' on jälle kättesaadav, it was down for
'password_repeat' => 'Korda salasõna', %LAST_OFFLINE_DURATION%:<br><br>Server: %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>Kuupäev:
'password_forgot' => 'Unustasid salasõna?', %DATE%',
'password_reset' => 'Lähtesta parool', 'on_pushover_title' => 'Server \'%LABEL%\' on kättesaadav',
'password_reset_email_subject' => 'Lähtestage oma PHP Serveri Monitori parool', 'on_pushover_message' => 'Server \'%LABEL%\' on jälle kättesaadav, it was down for
'password_reset_email_body' => 'Palun kasutage järgnevat linki oma parooli lähtestamiseks. Palume tähendada, et see aegub 1 tunni jooksul.<br><br>%link%', %LAST_OFFLINE_DURATION%:<br><br>Server: %LABEL%<br>IP: %IP%<br>Port:
'error_user_incorrect' => 'Antud kasutaja ei ole kehtiv.', %PORT%<br>Kuupäev: %DATE%',
'error_login_incorrect' => 'Informatsioon ei ole õige.', ),
'error_login_passwords_nomatch' => 'Sisestatud paroolid ei kattu.', 'login' => array(
'error_reset_invalid_link' => 'Teie antud lähtestus link ei kehti.', 'welcome_usermenu' => 'Teretulemast, %user_name%',
'success_password_forgot' => 'Teile saadeti email, kuidas lähtestada oma parooli.', 'title_sign_in' => 'Palun logi sisse',
'success_password_reset' => 'Teie parool on edukalt muudetud. Palun logige sisse.', 'title_forgot' => 'Unustasid oma salasõna?',
), 'title_reset' => 'Lähtesta oma parool',
'error' => array( 'submit' => 'Esita',
'401_unauthorized' => 'Puuduvad õigused', 'remember_me' => 'Mäleta mind',
'401_unauthorized_description' => 'Teil ei ole piisavalt õigusi seda lehte vaadata.', 'login' => 'Logi sisse',
), 'logout' => 'Logi välja',
'username' => 'Kasutajanimi',
'password' => 'Parool',
'password_repeat' => 'Korda salasõna',
'password_forgot' => 'Unustasid salasõna?',
'password_reset' => 'Lähtesta parool',
'password_reset_email_subject' => 'Lähtestage oma PHP Serveri Monitori parool',
'password_reset_email_body' => 'Palun kasutage järgnevat linki oma parooli lähtestamiseks. Palume
tähendada, et see aegub 1 tunni jooksul.<br><br>%link%',
'error_user_incorrect' => 'Antud kasutaja ei ole kehtiv.',
'error_login_incorrect' => 'Informatsioon ei ole õige.',
'error_login_passwords_nomatch' => 'Sisestatud paroolid ei kattu.',
'error_reset_invalid_link' => 'Teie antud lähtestus link ei kehti.',
'success_password_forgot' => 'Teile saadeti email, kuidas lähtestada oma parooli.',
'success_password_reset' => 'Teie parool on edukalt muudetud. Palun logige sisse.',
),
'error' => array(
'401_unauthorized' => 'Puuduvad õigused',
'401_unauthorized_description' => 'Teil ei ole piisavalt õigusi seda lehte vaadata.',
),
); );

View File

@ -1,4 +1,5 @@
<?php <?php
/** /**
* PHP Server Monitor * PHP Server Monitor
* Monitor your servers and websites. * Monitor your servers and websites.
@ -26,271 +27,322 @@
**/ **/
$sm_lang = array( $sm_lang = array(
'name' => 'فارسی - Persian', 'name' => 'فارسی - Persian',
'locale' => array('fa_IR.UTF-8', 'fa_IR', 'far', 'per', 'fa'), 'locale' => array(
'locale_tag' => 'fa', '0' => 'fa_IR.UTF-8',
'locale_dir' => 'rtl', '1' => 'fa_IR',
'system' => array( '2' => 'far',
'title' => 'مانیتورینگ سرور', '3' => 'per',
'install' => 'نصب', ),
'action' => 'عملیات', 'locale_tag' => 'fa',
'save' => 'ذخیره', 'locale_dir' => 'rtl',
'edit' => 'ویرایش', 'system' => array(
'delete' => 'حذف', 'title' => 'مانیتورینگ سرور',
'date' => 'تاریخ', 'install' => 'نصب',
'message' => 'پیغام', 'action' => 'عملیات',
'yes' => 'بله', 'save' => 'ذخیره',
'no' => 'خیر', 'edit' => 'ویرایش',
'insert' => 'افزودن', 'delete' => 'حذف',
'add_new' => 'افزودن', 'date' => 'تاریخ',
'update_available' => 'نسخه جدیدتر ({version}) در <a href="https://github.com/phpservermon/phpservermon/releases/latest" target="_blank" rel="noopener">http://www.phpservermonitor.org</a> موجود است.', 'message' => 'پیغام',
'back_to_top' => 'برو به بالا', 'yes' => 'بله',
'go_back' => 'برگرد', 'no' => 'خیر',
'ok' => 'تایید', 'insert' => 'افزودن',
'cancel' => 'انصراف', 'add_new' => 'افزودن',
// date/time format according the strftime php function format parameter http://php.net/manual/function.strftime.php 'update_available' => 'نسخه جدیدتر ({version}) در <a
'short_day_format' => '%B %e', href="https://github.com/phpservermon/phpservermon/releases/latest" target="_blank"
'long_day_format' => '%B %e, %Y', rel="noopener">http://www.phpservermonitor.org</a> موجود است.',
'yesterday_format' => 'دیروز در %k:%M', 'back_to_top' => 'برو به بالا',
'other_day_format' => '%A در %k:%M', 'go_back' => 'برگرد',
'never' => 'هرگز', 'ok' => 'تایید',
'hours_ago' => '%d ساعت پیش', 'cancel' => 'انصراف',
'an_hour_ago' => 'حدود یک ساعت پیش', 'short_day_format' => '%B %e',
'minutes_ago' => '%d دقیقه پیش', 'long_day_format' => '%B %e, %Y',
'a_minute_ago' => 'حدود یک دقیقه پیش', 'yesterday_format' => 'دیروز در %k:%M',
'seconds_ago' => '%d ثانیه پیش', 'other_day_format' => '%A در %k:%M',
'a_second_ago' => 'یک ثانیه پیش', 'never' => 'هرگز',
), 'hours_ago' => '%d ساعت پیش',
'menu' => array( 'an_hour_ago' => 'حدود یک ساعت پیش',
'config' => 'تنظیم', 'minutes_ago' => '%d دقیقه پیش',
'server' => 'سرور', 'a_minute_ago' => 'حدود یک دقیقه پیش',
'server_log' => 'لاگ', 'seconds_ago' => '%d ثانیه پیش',
'server_status' => 'وضعیت', 'a_second_ago' => 'یک ثانیه پیش',
'server_update' => 'بروزرسانی', ),
'user' => 'کاربران', 'menu' => array(
'help' => 'پشتیبانی', 'config' => 'تنظیم',
), 'server' => 'سرور',
'users' => array( 'server_log' => 'لاگ',
'user' => 'کاربر', 'server_status' => 'وضعیت',
'name' => 'نام', 'server_update' => 'بروزرسانی',
'user_name' => 'نام کاربری', 'user' => 'کاربران',
'password' => 'کلمه عبور', 'help' => 'پشتیبانی',
'password_repeat' => 'تکرار کلمه عبور', ),
'password_leave_blank' => 'برای عدم تغییر خالی بگذارید', 'users' => array(
'level' => 'سطح', 'user' => 'کاربر',
'level_10' => 'مدیر', 'name' => 'نام',
'level_20' => 'کاربر', 'user_name' => 'نام کاربری',
'level_description' => '<b>مدیر</b> دسترسی کامل: این گروه ها توانایی مدیریت سرورها، کاربران و ویرایش تنظیمات عمومی را داردند.<br><b>کاربران</b> تنها توانایی دیدن و بروزرسانی سرورهای اختصاص داده شده به خودشان را داردند.', 'password' => 'کلمه عبور',
'mobile' => 'موبایل', 'password_repeat' => 'تکرار کلمه عبور',
'email' => 'ایمیل', 'password_leave_blank' => 'برای عدم تغییر خالی بگذارید',
'pushover' => 'Pushover', 'level' => 'سطح',
'pushover_description' => 'Pushover سرویسی است که دریافت اطلاعیه های بلادرنگ را ساده می کند. برای اطلاعات بیشتر <a href="https://pushover.net/">سایت آن ها</a> را ببینید.', 'level_10' => 'مدیر',
'pushover_key' => 'کلید Pushover', 'level_20' => 'کاربر',
'pushover_device' => 'دستگاه Pushover', 'level_description' => '<b>مدیر</b> دسترسی کامل: این گروه ها توانایی
'pushover_device_description' => 'نام دستگاه برای ارسال پیام. برای ارسال به همه دستگاه ها آن را خالی بگذارید', مدیریت سرورها، کاربران و ویرایش تنظیمات عمومی
'delete_title' => 'حذف کاربر', را داردند.<br><b>کاربران</b> تنها توانایی دیدن و
'delete_message' => 'آیا برای حذف کاربر \'%1\' مطئن هستیند؟', بروزرسانی سرورهای اختصاص داده شده به خودشان را
'deleted' => 'کاربر حذف شد.', داردند.',
'updated' => 'کاربر بروزرسانی شد.', 'mobile' => 'موبایل',
'inserted' => 'کاربر اضافه شد.', 'email' => 'ایمیل',
'profile' => 'پروفایل', 'pushover' => 'Pushover',
'profile_updated' => 'پروفایل شما بروزرسانی شد.', 'pushover_description' => 'Pushover سرویسی است که دریافت اطلاعیه های بلادرنگ
'error_user_name_bad_length' => 'نام های کاربری باید بین 2 و 64 کاراکتر باشد.', را ساده می کند. برای اطلاعات بیشتر <a
'error_user_name_invalid' => 'نام کاربری باید فقط شامل حروف (a-z, A-Z)، نقطه (.) اعداد (0-9) و علامت (_) باشد.', href="https://pushover.net/" target="_blank">سایت آن ها</a> را
'error_user_name_exists' => 'نام کاربری وارد شده در حال حاضر در پایگاه داده موجود است.', ببینید.',
'error_user_email_bad_length' => 'آدرس های ایمیل باید بین 5 و 255 کاراکتر باشد.', 'pushover_key' => 'کلید Pushover',
'error_user_email_invalid' => 'آدرس ایمیل نامعتبر است.', 'pushover_device' => 'دستگاه Pushover',
'error_user_level_invalid' => 'سطح کاربرد داده شده نامعتبر است.', 'pushover_device_description' => 'نام دستگاه برای ارسال پیام. برای ارسال به
'error_user_no_match' => 'کاربر داده شده در پایگاه داده موجود نیست.', همه دستگاه ها آن را خالی بگذارید',
'error_user_password_invalid' => 'کلمه عبور وارد شده نامعتبر است.', 'delete_title' => 'حذف کاربر',
'error_user_password_no_match' => 'کلمه های عبور وارد شده یکسان نیستند.', 'delete_message' => 'آیا برای حذف کاربر \'%1\' مطئن هستیند؟',
), 'deleted' => 'کاربر حذف شد.',
'log' => array( 'updated' => 'کاربر بروزرسانی شد.',
'title' => 'ورودی های لاگ', 'inserted' => 'کاربر اضافه شد.',
'type' => 'نوع', 'profile' => 'پروفایل',
'status' => 'وضعیت', 'profile_updated' => 'پروفایل شما بروزرسانی شد.',
'email' => 'ایمیل', 'error_user_name_bad_length' => 'نام های کاربری باید بین 2 و 64 کاراکتر باشد.',
'sms' => 'پیامک', 'error_user_name_invalid' => 'نام کاربری باید فقط شامل حروف (a-z, A-Z)، نقطه (.)
'pushover' => 'Pushover', اعداد (0-9) و علامت (_) باشد.',
'no_logs' => 'لاگی وجود ندارد.', 'error_user_name_exists' => 'نام کاربری وارد شده در حال حاضر در پایگاه
'clear' => 'پاک کردن ورود', داده موجود است.',
'delete_title' => 'حذف ورود', 'error_user_email_bad_length' => 'آدرس های ایمیل باید بین 5 و 255 کاراکتر باشد.',
'delete_message' => 'آیا مطمئن هستید که میخواهید سیاهههای «همه» را حذف کنید؟', 'error_user_email_invalid' => 'آدرس ایمیل نامعتبر است.',
), 'error_user_level_invalid' => 'سطح کاربرد داده شده نامعتبر است.',
'servers' => array( 'error_user_no_match' => 'کاربر داده شده در پایگاه داده موجود نیست.',
'server' => 'سرور', 'error_user_password_invalid' => 'کلمه عبور وارد شده نامعتبر است.',
'status' => 'وضعیت', 'error_user_password_no_match' => 'کلمه های عبور وارد شده یکسان نیستند.',
'label' => 'برچسب', ),
'domain' => 'دامنه/آی پی', 'log' => array(
'timeout' => 'تایم اوت', 'title' => 'ورودی های لاگ',
'timeout_description' => 'زمان مورد نیاز برای سرور جهت پاسخ دهی به ثانیه', 'type' => 'نوع',
'port' => 'پورت', 'status' => 'وضعیت',
'type' => 'نوع', 'email' => 'ایمیل',
'type_website' => 'وب سایت', 'sms' => 'پیامک',
'type_service' => 'سرویس', 'pushover' => 'Pushover',
'pattern' => 'جستجوری رشته/الگو', 'no_logs' => 'لاگی وجود ندارد.',
'pattern_description' => 'اگر این الگو در سایت یافته نشد، سرور آفلاین نمایش داده خواهد شد. عبارات منظم مجاز هستند.', 'clear' => 'پاک کردن ورود',
'last_check' => 'آخرین بررسی', 'delete_title' => 'حذف ورود',
'last_online' => 'آخرین زمان آنلاین بودن', 'delete_message' => 'آیا مطمئن هستید که میخواهید سیاهههای «همه» را
'monitoring' => 'مانیتورینگ', حذف کنید؟',
'no_monitoring' => 'بدون مانیتورینگ', ),
'email' => 'ایمیل', 'servers' => array(
'send_email' => 'ارسال ایمیل', 'server' => 'سرور',
'sms' => 'پیامک', 'status' => 'وضعیت',
'send_sms' => 'ارسال پیامک', 'label' => 'برچسب',
'pushover' => 'Pushover', 'domain' => 'دامنه/آی پی',
'users' => 'کاربران', 'timeout' => 'تایم اوت',
'delete_title' => 'حذف سرور', 'timeout_description' => 'زمان مورد نیاز برای سرور جهت پاسخ دهی به ثانیه',
'delete_message' => 'مطمئنید که میخواهید سرور را پاک کنید \'%1\'؟', 'port' => 'پورت',
'deleted' => 'سرور پاک شد.', 'type' => 'نوع',
'updated' => 'سرور به روز رسانی شد.', 'type_website' => 'وب سایت',
'inserted' => 'سرور اضافه شد.', 'type_service' => 'سرویس',
'latency' => 'زمان بررسی', 'pattern' => 'جستجوری رشته/الگو',
'latency_max' => 'زمان بررسی (حداکثر)', 'pattern_description' => 'اگر این الگو در سایت یافته نشد، سرور آفلاین
'latency_min' => 'زمان بررسی (حداقل)', نمایش داده خواهد شد. عبارات منظم مجاز هستند.',
'latency_avg' => 'زمان بررسی (میانگین)', 'last_check' => 'آخرین بررسی',
'uptime' => 'آپ تایم', 'last_online' => 'آخرین زمان آنلاین بودن',
'year' => 'سال', 'monitoring' => 'مانیتورینگ',
'month' => 'ماه', 'no_monitoring' => 'بدون مانیتورینگ',
'week' => 'هفته', 'email' => 'ایمیل',
'day' => 'روز', 'send_email' => 'ارسال ایمیل',
'hour' => 'ساعت', 'sms' => 'پیامک',
'warning_threshold' => 'آستانه هشدار', 'send_sms' => 'ارسال پیامک',
'warning_threshold_description' => 'تعداد چک های شکست خورده قبل از اینکه به عنوان آفلاین نشانه گذاری شود.', 'pushover' => 'Pushover',
'chart_last_week' => 'هفته گذشته', 'users' => 'کاربران',
'chart_history' => 'تاریخچه', 'delete_title' => 'حذف سرور',
// Charts date format according jqPlot date format http://www.jqplot.com/docs/files/plugins/jqplot-dateAxisRenderer-js.html 'delete_message' => 'مطمئنید که میخواهید سرور را پاک کنید \'%1\'؟',
'chart_day_format' => '%Y-%m-%d', 'deleted' => 'سرور پاک شد.',
'chart_long_date_format' => '%Y-%m-%d %H:%M:%S', 'updated' => 'سرور به روز رسانی شد.',
'chart_short_date_format' => '%m/%d %H:%M', 'inserted' => 'سرور اضافه شد.',
'chart_short_time_format' => '%H:%M', 'latency' => 'زمان بررسی',
'warning_notifications_disabled_sms' => 'اطلاعیه های پیامک غیرفعال هستند.', 'latency_max' => 'زمان بررسی (حداکثر)',
'warning_notifications_disabled_email' => 'اطلاعیه های ایمیل غیرفعال هستند.', 'latency_min' => 'زمان بررسی (حداقل)',
'warning_notifications_disabled_pushover' => 'اطلاعیه های پوش آور غیرفعال هستند.', 'latency_avg' => 'زمان بررسی (میانگین)',
'error_server_no_match' => 'سرور پیدا نشد.', 'uptime' => 'آپ تایم',
'error_server_label_bad_length' => 'برچسب باید بین 1 و 255 کاراکتر باشد.', 'year' => 'سال',
'error_server_ip_bad_length' => 'دامنمه / آی پی باید بین 1 و 255 کاراکتر باشد.', 'month' => 'ماه',
'error_server_ip_bad_service' => 'آدرس آی پی معتبر نیست.', 'week' => 'هفته',
'error_server_ip_bad_website' => 'آدرس وب سایت معتبر نیست.', 'day' => 'روز',
'error_server_type_invalid' => 'نوع سرور انتخاب شده نامعتبر است.', 'hour' => 'ساعت',
'error_server_warning_threshold_invalid' => 'آستانه هشدار باید یک عدد صحیح بزرگتر از 0 باشد.', 'warning_threshold' => 'آستانه هشدار',
), 'warning_threshold_description' => 'تعداد چک های شکست خورده قبل از اینکه به
'config' => array( عنوان آفلاین نشانه گذاری شود.',
'general' => 'عمومی', 'chart_last_week' => 'هفته گذشته',
'language' => 'زبان', 'chart_history' => 'تاریخچه',
'show_update' => 'به روز رسانی بررسی شود؟', 'chart_day_format' => '%Y-%m-%d',
'email_status' => 'اجازه ارسال ایمیل', 'chart_long_date_format' => '%Y-%m-%d %H:%M:%S',
'email_from_email' => 'ایمیل ارسال کننده', 'chart_short_date_format' => '%m/%d %H:%M',
'email_from_name' => 'نام ارسال کننده', 'chart_short_time_format' => '%H:%M',
'email_smtp' => 'فعالسازی SMTP', 'warning_notifications_disabled_sms' => 'اطلاعیه های پیامک غیرفعال هستند.',
'email_smtp_host' => 'هاست SMTP', 'warning_notifications_disabled_email' => 'اطلاعیه های ایمیل غیرفعال هستند.',
'email_smtp_port' => 'پورت SMTP', 'warning_notifications_disabled_pushover' => 'اطلاعیه های پوش آور غیرفعال هستند.',
'email_smtp_security' => 'امنیت SMTP', 'error_server_no_match' => 'سرور پیدا نشد.',
'email_smtp_security_none' => 'هیچ کدام', 'error_server_label_bad_length' => 'برچسب باید بین 1 و 255 کاراکتر باشد.',
'email_smtp_username' => 'نام کاربری SMTP', 'error_server_ip_bad_length' => 'دامنمه / آی پی باید بین 1 و 255 کاراکتر باشد.',
'email_smtp_password' => 'کلمه عبور SMTP', 'error_server_ip_bad_service' => 'آدرس آی پی معتبر نیست.',
'email_smtp_noauth' => 'برای عدم احراز هویت اینجا را خالی بگذارید.', 'error_server_ip_bad_website' => 'آدرس وب سایت معتبر نیست.',
'sms_status' => 'اجازه ارسال پیام های متنی', 'error_server_type_invalid' => 'نوع سرور انتخاب شده نامعتبر است.',
'sms_gateway' => 'گیت وی برای ارسال پیام ها', 'error_server_warning_threshold_invalid' => 'آستانه هشدار باید یک عدد صحیح
'sms_gateway_username' => 'نام کاربری Gateway', بزرگتر از 0 باشد.',
'sms_gateway_password' => 'کلمه عبور Gateway', ),
'sms_from' => 'شماره تلفن ارسال کننده', 'config' => array(
'pushover_status' => 'اجازه ارسال پیام های Pushover', 'general' => 'عمومی',
'pushover_description' => 'Pushover سرویسی است که دریافت اطلاعیه های بلادرنگ را ساده می کند. برای اطلاعات بیشتر <a href="https://pushover.net/">سایت آن ها</a> را ببینید.', 'language' => 'زبان',
'pushover_clone_app' => 'برای ایجاد برنامه پوش آور خود اینجا را کلیک کنید.', 'show_update' => 'به روز رسانی بررسی شود؟',
'pushover_api_token' => 'رمز API برنامه پوش آور', 'email_status' => 'اجازه ارسال ایمیل',
'pushover_api_token_description' => 'قبل از استفاده از پوش آور، شما باید در سایت آن ها <a href="%1$s" target="_blank" rel="noopener">یک برنامه ثبت نام کنید</a> و رمز API برنامه پوش آور را اینجا وارد کنید.', 'email_from_email' => 'ایمیل ارسال کننده',
'alert_type' => 'زمان دلخواه خورد برای دریافت اطلاعیه ها را انتخاب کنید.', 'email_from_name' => 'نام ارسال کننده',
'alert_type_description' => '<b>تغییر وضعیت:</b> '. 'email_smtp' => 'فعالسازی SMTP',
'زمانی که وضعیت سرور تغییر کرد شما یک اطلاعیته دریافت خواهید کرد. از آنلاین -> آفلاین یا آفلاین -> آنلاین.<br>'. 'email_smtp_host' => 'هاست SMTP',
'<br /><b>آفلاین:</b> '. 'email_smtp_port' => 'پورت SMTP',
'زمانی که یک سرور *فقط برای اولین بار* آفلاین شد شما یک اطلاعیه دریافت خواهید کرد. به عنوان مثال،'. 'email_smtp_security' => 'امنیت SMTP',
'cronjob شما هر 15 دقیقه است و سرور شما در ساعت 1 صبح دان می شود و تا ساعت 6 صبح دان می ماند.'. 'email_smtp_security_none' => 'هیچ کدام',
'شما 1 اطلاعیه در ساعت 1 صبح دریافت خواهید کرد. همین و بس!'. 'email_smtp_username' => 'نام کاربری SMTP',
'<br><b>همیشه:</b> '. 'email_smtp_password' => 'کلمه عبور SMTP',
'هر بار که اسکریپت اجرا شود و یک سایت دان شود شما یک اطلاعیه دریافت خواهید کرد، حتی اگر سایت چند ساعت آفلاین باشد.', 'email_smtp_noauth' => 'برای عدم احراز هویت اینجا را خالی بگذارید.',
'alert_type_status' => 'تغییر وضعیت', 'sms_status' => 'اجازه ارسال پیام های متنی',
'alert_type_offline' => 'آفلاین', 'sms_gateway' => 'گیت وی برای ارسال پیام ها',
'alert_type_always' => 'همیشه', 'sms_gateway_username' => 'نام کاربری Gateway',
'log_status' => 'وضعیت لاگ', 'sms_gateway_password' => 'کلمه عبور Gateway',
'log_status_description' => 'اگر لاگ در وضعیت درست باشد مانیتور هر وقت که تنظیمات اطلاعیه ها وارد شود رویدادها را لاگ می کند.', 'sms_from' => 'شماره تلفن ارسال کننده',
'log_email' => 'لاگ کردن ایمیل هایی که ارسال شده توسط اسکریپت', 'pushover_status' => 'اجازه ارسال پیام های Pushover',
'log_sms' => 'لاگ کردن پیامک های ارسال شده توسط اسکریپت', 'pushover_description' => 'Pushover سرویسی است که دریافت اطلاعیه های بلادرنگ
'log_pushover' => 'لاگ پیام های پوش آور ارسال شده توسط سرور', را ساده می کند. برای اطلاعات بیشتر <a
'updated' => 'پیکربندی به روز رسانی شد.', href="https://pushover.net/" target="_blank">سایت آن ها</a> را
'tab_email' => 'ایمیل', ببینید.',
'tab_sms' => 'پیامک', 'pushover_clone_app' => 'برای ایجاد برنامه پوش آور خود اینجا را کلیک
'tab_pushover' => 'پوش آور', کنید.',
'settings_email' => 'تنظیمات ایمیل', 'pushover_api_token' => 'رمز API برنامه پوش آور',
'settings_sms' => 'تنظیمات پیامک', 'pushover_api_token_description' => 'قبل از استفاده از پوش آور، شما باید در
'settings_pushover' => 'تنظیمات پوش آور', سایت آن ها <a href="%1$s" target="_blank" rel="noopener">یک
'settings_notification' => 'تنظیمات اطلاعیه ها', برنامه ثبت نام کنید</a> و رمز API برنامه پوش
'settings_log' => 'تنظیمات لاگ', آور را اینجا وارد کنید.',
'auto_refresh' => 'رفرش خودکار', 'alert_type' => 'زمان دلخواه خورد برای دریافت اطلاعیه ها را انتخاب
'auto_refresh_description' => کنید.',
'رفرش خودکار صفحه سرورها.<br>'. 'alert_type_description' => '<b>تغییر وضعیت:</b> زمانی که وضعیت سرور تغییر
'<span class="small">'. کرد شما یک اطلاعیته دریافت خواهید کرد. از
'زمان به ثنیه, اگر 0 باشد صفحه رفرش نخواهد شد.'. آنلاین -> آفلاین یا آفلاین -> آنلاین.<br><br
'</span>', /><b>آفلاین:</b> زمانی که یک سرور *فقط برای اولین
'seconds' => 'ثانیه', بار* آفلاین شد شما یک اطلاعیه دریافت خواهید
'test' => 'تست', کرد. به عنوان مثال،cronjob شما هر 15 دقیقه است و
'test_email' => 'یک ایمیل به آدرس تعیین شده در پروفایل شما ارسال خواهد شد.', سرور شما در ساعت 1 صبح دان می شود و تا ساعت 6
'test_sms' => 'یک پیامک به شماره تلفن تعیین شده در پروفایل شما ارسال خواهد شد.', صبح دان می ماند.شما 1 اطلاعیه در ساعت 1 صبح
'test_pushover' => 'یک پیام پوش آور به کلید کاربر/دستگاه تعیین شده در پروفایل شما ارسال خواهد شد.', دریافت خواهید کرد. همین و بس!<br><b>همیشه:</b> هر
'send' => 'ارسال', بار که اسکریپت اجرا شود و یک سایت دان شود شما
'test_subject' => 'تست', یک اطلاعیه دریافت خواهید کرد، حتی اگر سایت
'test_message' => 'پیام تستی', چند ساعت آفلاین باشد.',
'email_sent' => 'ایمیل ارسال شد', 'alert_type_status' => 'تغییر وضعیت',
'email_error' => 'خطا در ارسال ایمیل', 'alert_type_offline' => 'آفلاین',
'sms_sent' => 'پیامک ارسال شد', 'alert_type_always' => 'همیشه',
'sms_error' => '%s خطا در ارسال پیامک', 'log_status' => 'وضعیت لاگ',
'sms_error_nomobile' => 'قادر به ارسال پیامک تستی نیستیم: شماره تلفن معتبر در پروفایل شما یافته نشد.', 'log_status_description' => 'اگر لاگ در وضعیت درست باشد مانیتور هر وقت که
'pushover_sent' => 'اطلاعیه پوش آور ارسال شد.', تنظیمات اطلاعیه ها وارد شود رویدادها را لاگ
'pushover_error' => 'یک خطا در هنگام ارسال اطلاعیه پوش آور رخ داده است: %s', می کند.',
'pushover_error_noapp' => 'قادر به ارسال اطلاعیه تستی نیستیم: رمز API برنامه پوش آور در پیکربندی عمومی یافته نشد.', 'log_email' => 'لاگ کردن ایمیل هایی که ارسال شده توسط اسکریپت',
'pushover_error_nokey' => 'قادر به ارسال اطلاعیه تستی نیستیم: کلید پوش آور در پروفایل شما یافته نشد.', 'log_sms' => 'لاگ کردن پیامک های ارسال شده توسط اسکریپت',
'log_retention_period' => 'مدت زمان ذخیره سازی لاگ ها', 'log_pushover' => 'لاگ پیام های پوش آور ارسال شده توسط سرور',
'log_retention_period_description' => 'تعداد روزها برای نگهداری لاگ اطلاعیه ها و آرشیو های آپ تایم های سرور. برای غیرفعال کردن پاکسازی لاگ 0 وارد کنید.', 'updated' => 'پیکربندی به روز رسانی شد.',
'log_retention_days' => 'روزها', 'tab_email' => 'ایمیل',
), 'tab_sms' => 'پیامک',
// for newlines in the email messages use <br> 'tab_pushover' => 'پوش آور',
'notifications' => array( 'settings_email' => 'تنظیمات ایمیل',
'off_sms' => 'Server \'%LABEL%\' دان است: آی پی=%IP%, پورت=%PORT%. خطا=%ERROR%', 'settings_sms' => 'تنظیمات پیامک',
'off_email_subject' => 'مهم: سرور \'%LABEL%\' دان است', 'settings_pushover' => 'تنظیمات پوش آور',
'off_email_body' => "اتصال به سرور زیر با شکست مواجه شد:<br><br>سرور: %LABEL%<br>آی پی: %IP%<br>پورت: %PORT%<br>خطا: %ERROR%<br>تاریخ: %DATE%", 'settings_notification' => 'تنظیمات اطلاعیه ها',
'off_pushover_title' => 'سرور \'%LABEL%\' دان است', 'settings_log' => 'تنظیمات لاگ',
'off_pushover_message' => "اتصال به سرور زیر با شکست مواجه شد:<br><br>سرور: %LABEL%<br>آی پی: %IP%<br>پورت: %PORT%<br>خطا: %ERROR%<br>تاریخ: %DATE%", 'auto_refresh' => 'رفرش خودکار',
'on_sms' => 'سرور \'%LABEL%\' در حال اجراست: آی پی=%IP%, پورت=%PORT%, it was down for %LAST_OFFLINE_DURATION%', 'auto_refresh_description' => 'رفرش خودکار صفحه سرورها.<br><span class="small">زمان
'on_email_subject' => 'مهم: سرور \'%LABEL%\' در حال اجراست', به ثنیه, اگر 0 باشد صفحه رفرش نخواهد شد.</span>',
'on_email_body' => "سرور '%LABEL%' دوباره در حال اجراست, it was down for %LAST_OFFLINE_DURATION%:<br><br>سرور: %LABEL%<br>آی پی: %IP%<br>پورت: %PORT%<br>تاریخ: %DATE%", 'seconds' => 'ثانیه',
'on_pushover_title' => 'سرور \'%LABEL%\' در حال اجراست', 'test' => 'تست',
'on_pushover_message' => 'سرور \'%LABEL%\' دوباره در حال اجراست, it was down for %LAST_OFFLINE_DURATION%:<br><br>سرور: %LABEL%<br>آی پی: %IP%<br>پورت: %PORT%<br>تاریخ: %DATE%', 'test_email' => 'یک ایمیل به آدرس تعیین شده در پروفایل شما ارسال
), خواهد شد.',
'login' => array( 'test_sms' => 'یک پیامک به شماره تلفن تعیین شده در پروفایل شما
'welcome_usermenu' => 'خوش آمدید, %user_name%', ارسال خواهد شد.',
'title_sign_in' => 'لطفا وارد شوید', 'test_pushover' => 'یک پیام پوش آور به کلید کاربر/دستگاه تعیین شده در
'title_forgot' => 'کلمه عبور خود را فراموش کرده اید؟', پروفایل شما ارسال خواهد شد.',
'title_reset' => 'کلمه عبور خود را بازنشانی کنید', 'send' => 'ارسال',
'submit' => 'ثبت کردن', 'test_subject' => 'تست',
'remember_me' => 'من را به خاطر بسپار', 'test_message' => 'پیام تستی',
'login' => 'ورود', 'email_sent' => 'ایمیل ارسال شد',
'logout' => 'خروج', 'email_error' => 'خطا در ارسال ایمیل',
'username' => 'نام کاربری', 'sms_sent' => 'پیامک ارسال شد',
'password' => 'کلمه عبور', 'sms_error' => '%s خطا در ارسال پیامک',
'password_repeat' => 'تکرار کلمه عبور', 'sms_error_nomobile' => 'قادر به ارسال پیامک تستی نیستیم: شماره تلفن
'password_forgot' => 'کلمه عبور خود را فراموش کرده اید؟', معتبر در پروفایل شما یافته نشد.',
'password_reset' => 'بازنشانی کلمه عبور', 'pushover_sent' => 'اطلاعیه پوش آور ارسال شد.',
'password_reset_email_subject' => 'کلمه عبور خود را برای مانیتور سرور PHP بازنشانی کنید', 'pushover_error' => 'یک خطا در هنگام ارسال اطلاعیه پوش آور رخ داده است:
'password_reset_email_body' => 'لطفا برای بازنشانی کلمه عبور خود از این لینک استفاده کنید. لطفا توجه کنید تنها 1 ساعت وقت دارید.<br><br>%link%', %s',
'error_user_incorrect' => 'نام کاربری ارائه شده یافته نشد.', 'pushover_error_noapp' => 'قادر به ارسال اطلاعیه تستی نیستیم: رمز API
'error_login_incorrect' => 'اطلاعات نادرست است.', برنامه پوش آور در پیکربندی عمومی یافته نشد.',
'error_login_passwords_nomatch' => 'کلمه های عبور یکسان نیستند.', 'pushover_error_nokey' => 'قادر به ارسال اطلاعیه تستی نیستیم: کلید پوش
'error_reset_invalid_link' => 'لینک بازنشانی شما نامعتبر است.', آور در پروفایل شما یافته نشد.',
'success_password_forgot' => 'یک ایمیل حاوی اطلاعات مورد نیاز برای بازنشانی کلمه عبور برای شما ارسال شد.', 'log_retention_period' => 'مدت زمان ذخیره سازی لاگ ها',
'success_password_reset' => 'کلمه عبور شما با موفقیت بازنشانی شد. لطفا وارد شوید.', 'log_retention_period_description' => 'تعداد روزها برای نگهداری لاگ اطلاعیه
), ها و آرشیو های آپ تایم های سرور. برای
'error' => array( غیرفعال کردن پاکسازی لاگ 0 وارد کنید.',
'401_unauthorized' => 'غیر مجاز', 'log_retention_days' => 'روزها',
'401_unauthorized_description' => 'شما اجازه مشاهده این صفحه را ندارید.', ),
), 'notifications' => array(
'off_sms' => 'Server \'%LABEL%\' دان است: آی پی=%IP%, پورت=%PORT%. خطا=%ERROR%',
'off_email_subject' => 'مهم: سرور \'%LABEL%\' دان است',
'off_email_body' => 'اتصال به سرور زیر با شکست مواجه شد:<br><br>سرور:
%LABEL%<br>آی پی: %IP%<br>پورت: %PORT%<br>خطا: %ERROR%<br>تاریخ: %DATE%',
'off_pushover_title' => 'سرور \'%LABEL%\' دان است',
'off_pushover_message' => 'اتصال به سرور زیر با شکست مواجه شد:<br><br>سرور:
%LABEL%<br>آی پی: %IP%<br>پورت: %PORT%<br>خطا: %ERROR%<br>تاریخ:
%DATE%',
'on_sms' => 'سرور \'%LABEL%\' در حال اجراست: آی پی=%IP%, پورت=%PORT%, it was down for
%LAST_OFFLINE_DURATION%',
'on_email_subject' => 'مهم: سرور \'%LABEL%\' در حال اجراست',
'on_email_body' => 'سرور \'%LABEL%\' دوباره در حال اجراست, it was down for
%LAST_OFFLINE_DURATION%:<br><br>سرور: %LABEL%<br>آی پی: %IP%<br>پورت:
%PORT%<br>تاریخ: %DATE%',
'on_pushover_title' => 'سرور \'%LABEL%\' در حال اجراست',
'on_pushover_message' => 'سرور \'%LABEL%\' دوباره در حال اجراست, it was down for
%LAST_OFFLINE_DURATION%:<br><br>سرور: %LABEL%<br>آی پی: %IP%<br>پورت:
%PORT%<br>تاریخ: %DATE%',
),
'login' => array(
'welcome_usermenu' => 'خوش آمدید, %user_name%',
'title_sign_in' => 'لطفا وارد شوید',
'title_forgot' => 'کلمه عبور خود را فراموش کرده اید؟',
'title_reset' => 'کلمه عبور خود را بازنشانی کنید',
'submit' => 'ثبت کردن',
'remember_me' => 'من را به خاطر بسپار',
'login' => 'ورود',
'logout' => 'خروج',
'username' => 'نام کاربری',
'password' => 'کلمه عبور',
'password_repeat' => 'تکرار کلمه عبور',
'password_forgot' => 'کلمه عبور خود را فراموش کرده اید؟',
'password_reset' => 'بازنشانی کلمه عبور',
'password_reset_email_subject' => 'کلمه عبور خود را برای مانیتور سرور PHP
بازنشانی کنید',
'password_reset_email_body' => 'لطفا برای بازنشانی کلمه عبور خود از این
لینک استفاده کنید. لطفا توجه کنید تنها 1
ساعت وقت دارید.<br><br>%link%',
'error_user_incorrect' => 'نام کاربری ارائه شده یافته نشد.',
'error_login_incorrect' => 'اطلاعات نادرست است.',
'error_login_passwords_nomatch' => 'کلمه های عبور یکسان نیستند.',
'error_reset_invalid_link' => 'لینک بازنشانی شما نامعتبر است.',
'success_password_forgot' => 'یک ایمیل حاوی اطلاعات مورد نیاز برای
بازنشانی کلمه عبور برای شما ارسال شد.',
'success_password_reset' => 'کلمه عبور شما با موفقیت بازنشانی شد. لطفا
وارد شوید.',
),
'error' => array(
'401_unauthorized' => 'غیر مجاز',
'401_unauthorized_description' => 'شما اجازه مشاهده این صفحه را ندارید.',
),
); );

View File

@ -1,4 +1,5 @@
<?php <?php
/** /**
* PHP Server Monitor * PHP Server Monitor
* Monitor your servers and websites. * Monitor your servers and websites.
@ -26,271 +27,273 @@
**/ **/
$sm_lang = array( $sm_lang = array(
'name' => 'Suomi - Finnish', 'name' => 'Suomi - Finnish',
'locale' => array('fi_FI.UTF-8', 'fi_FI', 'finnish', 'finnish-fi'), 'locale' => array(
'locale_tag' => 'fi', '0' => 'fi_FI.UTF-8',
'locale_dir' => 'ltr', '1' => 'fi_FI',
'system' => array( '2' => 'finnish',
'title' => 'Server Monitor', '3' => 'finnish-fi',
'install' => 'Asenna', ),
'action' => 'Toiminta', 'locale_tag' => 'fi',
'save' => 'Tallenna', 'locale_dir' => 'ltr',
'edit' => 'Muokkaa', 'system' => array(
'delete' => 'Poista', 'title' => 'Server Monitor',
'date' => 'Päivä', 'install' => 'Asenna',
'message' => 'Viesti', 'action' => 'Toiminta',
'yes' => 'Kyllä', 'save' => 'Tallenna',
'no' => 'Ei', 'edit' => 'Muokkaa',
'insert' => 'Asetukset', 'delete' => 'Poista',
'add_new' => 'Lisää uusi', 'date' => 'Päivä',
'update_available' => 'Uusi versio ({version}) on ladattavissa osoitteessa <a href="https://github.com/phpservermon/phpservermon/releases/latest" target="_blank" rel="noopener">http://www.phpservermonitor.org</a>.', 'message' => 'Viesti',
'back_to_top' => 'Takaisin ylös', 'yes' => 'Kyllä',
'go_back' => 'Takaisin', 'no' => 'Ei',
'ok' => 'OK', 'insert' => 'Asetukset',
'cancel' => 'Peruuta', 'add_new' => 'Lisää uusi',
// date/time format according the strftime php function format parameter http://php.net/manual/function.strftime.php 'update_available' => 'Uusi versio ({version}) on ladattavissa osoitteessa <a
'short_day_format' => '%B %e', href="https://github.com/phpservermon/phpservermon/releases/latest" target="_blank"
'long_day_format' => '%B %e, %Y', rel="noopener">http://www.phpservermonitor.org</a>.',
'yesterday_format' => 'Eilen klo %k:%M', 'back_to_top' => 'Takaisin ylös',
'other_day_format' => '%A klo %k:%M', 'go_back' => 'Takaisin',
'never' => 'Ei koskaan', 'ok' => 'OK',
'hours_ago' => '%d tuntia sitten', 'cancel' => 'Peruuta',
'an_hour_ago' => 'noin tunti sitten', 'short_day_format' => '%B %e',
'minutes_ago' => '%d minuuttia sitten', 'long_day_format' => '%B %e, %Y',
'a_minute_ago' => 'noin minuutti sitten', 'yesterday_format' => 'Eilen klo %k:%M',
'seconds_ago' => '%d sekuntia sitten', 'other_day_format' => '%A klo %k:%M',
'a_second_ago' => 'sekunti sitten', 'never' => 'Ei koskaan',
), 'hours_ago' => '%d tuntia sitten',
'menu' => array( 'an_hour_ago' => 'noin tunti sitten',
'config' => 'Asetukset', 'minutes_ago' => '%d minuuttia sitten',
'server' => 'Palvelimet', 'a_minute_ago' => 'noin minuutti sitten',
'server_log' => 'Tapahtumat', 'seconds_ago' => '%d sekuntia sitten',
'server_status' => 'Tila', 'a_second_ago' => 'sekunti sitten',
'server_update' => 'Päivitä', ),
'user' => 'Käyttäjät', 'menu' => array(
'help' => 'Apua', 'config' => 'Asetukset',
), 'server' => 'Palvelimet',
'users' => array( 'server_log' => 'Tapahtumat',
'user' => 'Käyttäjä', 'server_status' => 'Tila',
'name' => 'Nimi', 'server_update' => 'Päivitä',
'user_name' => 'Käyttäjänimi', 'user' => 'Käyttäjät',
'password' => 'Salasana', 'help' => 'Apua',
'password_repeat' => 'Salasana uudestaan', ),
'password_leave_blank' => 'Jätä tyhjäksi jos et halua vaihtaa', 'users' => array(
'level' => 'Taso', 'user' => 'Käyttäjä',
'level_10' => 'Järjestelmänvalvoja', 'name' => 'Nimi',
'level_20' => 'Käyttäjä', 'user_name' => 'Käyttäjänimi',
'level_description' => '<b>Järjestelmänvalvojilla</b> on täydet oikeudet: he voivat hallita palvelimia, käyttäjiä ja muokata ohjelmiston asetuksia.<br><b>Käyttäjät</b> voivat vain nähdä ja päivittää palvelimia jotka on asetettu heille.', 'password' => 'Salasana',
'mobile' => 'Puhelin', 'password_repeat' => 'Salasana uudestaan',
'email' => 'Sähköposti', 'password_leave_blank' => 'Jätä tyhjäksi jos et halua vaihtaa',
'pushover' => 'Pushover', 'level' => 'Taso',
'pushover_description' => 'Pushover on palvelu jolla on helppo lähettää reaaliaikaisia tilaviestejä. Katso <a href="https://pushover.net/">verkkosivuilta</a> lisäinfoa.', 'level_10' => 'Järjestelmänvalvoja',
'pushover_key' => 'Pushover avain', 'level_20' => 'Käyttäjä',
'pushover_device' => 'Pushover laite', 'level_description' => '<b>Järjestelmänvalvojilla</b> on täydet oikeudet: he voivat hallita palvelimia,
'pushover_device_description' => 'Laitteen nimi johon viesti lähetetään. Jätä tyhjäksi lähettääksesi kaikkiin laitteisiin.', käyttäjiä ja muokata ohjelmiston asetuksia.<br><b>Käyttäjät</b> voivat vain
'delete_title' => 'Poista käyttäjä', nähdä ja päivittää palvelimia jotka on asetettu heille.',
'delete_message' => 'Haluatko varmasti poistaa käyttäjän \'%1\'?', 'mobile' => 'Puhelin',
'deleted' => 'Käyttäjä poistettu.', 'email' => 'Sähköposti',
'updated' => 'Käyttäjä päivitetty.', 'pushover' => 'Pushover',
'inserted' => 'Käyttäjä lisätty.', 'pushover_description' => 'Pushover on palvelu jolla on helppo lähettää reaaliaikaisia tilaviestejä. Katso
'profile' => 'Profiili', <a href="https://pushover.net/" target="_blank">verkkosivuilta</a> lisäinfoa.',
'profile_updated' => 'Profiilisi on päivitetty.', 'pushover_key' => 'Pushover avain',
'error_user_name_bad_length' => 'Käyttäjänimi saa olla 2-64 merkkiä pitkä.', 'pushover_device' => 'Pushover laite',
'error_user_name_invalid' => 'Käyttäjänimessä saa olla vain kirjaimia (a-z, A-Z), numeroita (0-9), pisteitä (.) ja alaviivoja (_).', 'pushover_device_description' => 'Laitteen nimi johon viesti lähetetään. Jätä tyhjäksi lähettääksesi
'error_user_name_exists' => 'Annettu käyttäjänimi on jo tietokannassa.', kaikkiin laitteisiin.',
'error_user_email_bad_length' => 'Sähköpostiosoitteen täytyy olla 5-255 merkkiä pitkä.', 'delete_title' => 'Poista käyttäjä',
'error_user_email_invalid' => 'Annettu sähköposti ei kelpaa.', 'delete_message' => 'Haluatko varmasti poistaa käyttäjän \'%1\'?',
'error_user_level_invalid' => 'Annettu käyttäjän taso ei kelpaa.', 'deleted' => 'Käyttäjä poistettu.',
'error_user_no_match' => 'Käyttäjää ei löydetty tietokannasta.', 'updated' => 'Käyttäjä päivitetty.',
'error_user_password_invalid' => 'Annettu salasana on väärin.', 'inserted' => 'Käyttäjä lisätty.',
'error_user_password_no_match' => 'Annetut salasanat eivät täsmää.', 'profile' => 'Profiili',
), 'profile_updated' => 'Profiilisi on päivitetty.',
'log' => array( 'error_user_name_bad_length' => 'Käyttäjänimi saa olla 2-64 merkkiä pitkä.',
'title' => 'Tapahtumamerkinnät', 'error_user_name_invalid' => 'Käyttäjänimessä saa olla vain kirjaimia (a-z, A-Z), numeroita (0-9),
'type' => 'Tyyppi', pisteitä (.) ja alaviivoja (_).',
'status' => 'Tila', 'error_user_name_exists' => 'Annettu käyttäjänimi on jo tietokannassa.',
'email' => 'Sähköposti', 'error_user_email_bad_length' => 'Sähköpostiosoitteen täytyy olla 5-255 merkkiä pitkä.',
'sms' => 'Tekstiviesti', 'error_user_email_invalid' => 'Annettu sähköposti ei kelpaa.',
'pushover' => 'Pushover', 'error_user_level_invalid' => 'Annettu käyttäjän taso ei kelpaa.',
'no_logs' => 'Ei tapahtumia', 'error_user_no_match' => 'Käyttäjää ei löydetty tietokannasta.',
'clear' => 'Tyhjennä loki', 'error_user_password_invalid' => 'Annettu salasana on väärin.',
'delete_title' => 'Poista loki', 'error_user_password_no_match' => 'Annetut salasanat eivät täsmää.',
'delete_message' => 'Haluatko varmasti poistaa <b>kaikki</b> lokit?', ),
), 'log' => array(
'servers' => array( 'title' => 'Tapahtumamerkinnät',
'server' => 'Palvelin', 'type' => 'Tyyppi',
'status' => 'Tila', 'status' => 'Tila',
'label' => 'Nimi', 'email' => 'Sähköposti',
'domain' => 'Isäntänimi/IP', 'sms' => 'Tekstiviesti',
'timeout' => 'Aikakatkaisu', 'pushover' => 'Pushover',
'timeout_description' => 'Kuinka monta sekuntia odottaa kunnes palvelin merkitään sammuneeksi.', 'no_logs' => 'Ei tapahtumia',
'port' => 'Portti', 'clear' => 'Tyhjennä loki',
'type' => 'Tyyppi', 'delete_title' => 'Poista loki',
'type_website' => 'Verkkosivu', 'delete_message' => 'Haluatko varmasti poistaa <b>kaikki</b> lokit?',
'type_service' => 'Palvelu', ),
'pattern' => 'Etsittävä sarja/kuvio', 'servers' => array(
'pattern_description' => 'Jos määriteltyä sarjaa ei löydetä verkkosivuilta, palvelin merkitään sammuneeksi. REGEX on sallittua.', 'server' => 'Palvelin',
'last_check' => 'Viimeisin tarkistus', 'status' => 'Tila',
'last_online' => 'Viimeksi nähty', 'label' => 'Nimi',
'monitoring' => 'Valvottava', 'domain' => 'Isäntänimi/IP',
'no_monitoring' => 'Ei valvontaa', 'timeout' => 'Aikakatkaisu',
'email' => 'Sähköposti', 'timeout_description' => 'Kuinka monta sekuntia odottaa kunnes palvelin merkitään sammuneeksi.',
'send_email' => 'Lähetä sähköposti', 'port' => 'Portti',
'sms' => 'Tekstiviesti', 'type' => 'Tyyppi',
'send_sms' => 'Lähetä tekstiviesti', 'type_website' => 'Verkkosivu',
'pushover' => 'Pushover', 'type_service' => 'Palvelu',
'users' => 'Käyttäjät', 'pattern' => 'Etsittävä sarja/kuvio',
'delete_title' => 'Poista palvelin', 'pattern_description' => 'Jos määriteltyä sarjaa ei löydetä verkkosivuilta, palvelin merkitään
'delete_message' => 'Haluatko varmasti poistaa palvelimen \'%1\'?', sammuneeksi. REGEX on sallittua.',
'deleted' => 'Palvelin poistettu.', 'last_check' => 'Viimeisin tarkistus',
'updated' => 'Palvelin päivitetty.', 'last_online' => 'Viimeksi nähty',
'inserted' => 'Palvelin lisätty.', 'monitoring' => 'Valvottava',
'latency' => 'Viive', 'no_monitoring' => 'Ei valvontaa',
'latency_max' => 'Viive (maksimi)', 'email' => 'Sähköposti',
'latency_min' => 'Viive (minimi)', 'send_email' => 'Lähetä sähköposti',
'latency_avg' => 'Viive (keskiarvo)', 'sms' => 'Tekstiviesti',
'uptime' => 'Päälläoloaika', 'send_sms' => 'Lähetä tekstiviesti',
'year' => 'Vuosi', 'pushover' => 'Pushover',
'month' => 'Kuukausi', 'users' => 'Käyttäjät',
'week' => 'Viikko', 'delete_title' => 'Poista palvelin',
'day' => 'Päivä', 'delete_message' => 'Haluatko varmasti poistaa palvelimen \'%1\'?',
'hour' => 'Tunti', 'deleted' => 'Palvelin poistettu.',
'warning_threshold' => 'Varoituskynnys', 'updated' => 'Palvelin päivitetty.',
'warning_threshold_description' => 'Epäonnistuneiden tarkistuksien määrä kunnes se merkataan sammuneeksi.', 'inserted' => 'Palvelin lisätty.',
'chart_last_week' => 'Viime viikolla', 'latency' => 'Viive',
'chart_history' => 'Historia', 'latency_max' => 'Viive (maksimi)',
// Charts date format according jqPlot date format http://www.jqplot.com/docs/files/plugins/jqplot-dateAxisRenderer-js.html 'latency_min' => 'Viive (minimi)',
'chart_day_format' => '%Y-%m-%d', 'latency_avg' => 'Viive (keskiarvo)',
'chart_long_date_format' => '%Y-%m-%d %H:%M:%S', 'uptime' => 'Päälläoloaika',
'chart_short_date_format' => '%m/%d %H:%M', 'year' => 'Vuosi',
'chart_short_time_format' => '%H:%M', 'month' => 'Kuukausi',
'warning_notifications_disabled_sms' => 'Tekstiviesti-ilmoitukset on poistettu käytöstä.', 'week' => 'Viikko',
'warning_notifications_disabled_email' => 'Sähköposti-ilmoitukset on poistettu käytöstä.', 'day' => 'Päivä',
'warning_notifications_disabled_pushover' => 'Pushover-ilmoitukset on poistettu käytöstä.', 'hour' => 'Tunti',
'error_server_no_match' => 'Palvelinta ei löydetty.', 'warning_threshold' => 'Varoituskynnys',
'error_server_label_bad_length' => 'Nimen pitää olla 1-255 merkkiä pitkä.', 'warning_threshold_description' => 'Epäonnistuneiden tarkistuksien määrä kunnes se merkataan sammuneeksi.',
'error_server_ip_bad_length' => 'Isäntänimen / IP:n pitää olla 1-255 merkkiä pitkä.', 'chart_last_week' => 'Viime viikolla',
'error_server_ip_bad_service' => 'Annettu IP osoite ei kelpaa.', 'chart_history' => 'Historia',
'error_server_ip_bad_website' => 'Annettu verkkosivun osoite ei kelpaa.', 'chart_day_format' => '%Y-%m-%d',
'error_server_type_invalid' => 'Valittu palvelintyyppi ei kelpaa.', 'chart_long_date_format' => '%Y-%m-%d %H:%M:%S',
'error_server_warning_threshold_invalid' => 'Varoituskynnyksen arvo pitää olla suurempi kuin 0.', 'chart_short_date_format' => '%m/%d %H:%M',
), 'chart_short_time_format' => '%H:%M',
'config' => array( 'warning_notifications_disabled_sms' => 'Tekstiviesti-ilmoitukset on poistettu käytöstä.',
'general' => 'Yleiset', 'warning_notifications_disabled_email' => 'Sähköposti-ilmoitukset on poistettu käytöstä.',
'language' => 'Kieli', 'warning_notifications_disabled_pushover' => 'Pushover-ilmoitukset on poistettu käytöstä.',
'show_update' => 'Tarkista päivitykset?', 'error_server_no_match' => 'Palvelinta ei löydetty.',
'email_status' => 'Salli sähköpostin lähettäminen', 'error_server_label_bad_length' => 'Nimen pitää olla 1-255 merkkiä pitkä.',
'email_from_email' => 'Lähettäjän osoite', 'error_server_ip_bad_length' => 'Isäntänimen / IP:n pitää olla 1-255 merkkiä pitkä.',
'email_from_name' => 'Lähettäjän nimi', 'error_server_ip_bad_service' => 'Annettu IP osoite ei kelpaa.',
'email_smtp' => 'Käytä SMTP:tä', 'error_server_ip_bad_website' => 'Annettu verkkosivun osoite ei kelpaa.',
'email_smtp_host' => 'SMTP isäntä', 'error_server_type_invalid' => 'Valittu palvelintyyppi ei kelpaa.',
'email_smtp_port' => 'SMTP portti', 'error_server_warning_threshold_invalid' => 'Varoituskynnyksen arvo pitää olla suurempi kuin 0.',
'email_smtp_security' => 'SMTP turvallisuus', ),
'email_smtp_security_none' => 'Ei mitään', 'config' => array(
'email_smtp_username' => 'SMTP käyttäjänimi', 'general' => 'Yleiset',
'email_smtp_password' => 'SMTP salasana', 'language' => 'Kieli',
'email_smtp_noauth' => 'Jätä tyhjäksi jos ei varmennusta', 'show_update' => 'Tarkista päivitykset?',
'sms_status' => 'Salli tekstiviestien lähetys', 'email_status' => 'Salli sähköpostin lähettäminen',
'sms_gateway' => 'Palvelu jonka kautta tekstiviestit lähetetään', 'email_from_email' => 'Lähettäjän osoite',
'sms_gateway_username' => 'Palvelun käyttäjänimi', 'email_from_name' => 'Lähettäjän nimi',
'sms_gateway_password' => 'Palvelun salasana', 'email_smtp' => 'Käytä SMTP:tä',
'sms_from' => 'Lähettäjän puhelinnumero', 'email_smtp_host' => 'SMTP isäntä',
'pushover_status' => 'Salli Pushover-viestien lähetys', 'email_smtp_port' => 'SMTP portti',
'pushover_description' => 'Pushover on palvelu jolla on helppo lähettää reaaliaikaisia tilaviestejä. Katso <a href="https://pushover.net/">verkkosivuilta</a> lisäinfoa.', 'email_smtp_security' => 'SMTP turvallisuus',
'pushover_clone_app' => 'Paina tästä luodaksesi Pushover-sovelluksesi', 'email_smtp_security_none' => 'Ei mitään',
'pushover_api_token' => 'Pushover API-avain', 'email_smtp_username' => 'SMTP käyttäjänimi',
'pushover_api_token_description' => 'Ennen kuin voit käyttää Pushoveria, sinun täytyy <a href="%1$s" target="_blank" rel="noopener">rekisteröidä sovellus</a> heidän nettisivuillaan, ja kopioida API-avain tänne.', 'email_smtp_password' => 'SMTP salasana',
'alert_type' => 'Valitse milloin haluat ilmoituksia.', 'email_smtp_noauth' => 'Jätä tyhjäksi jos ei varmennusta',
'alert_type_description' => '<b>Tilan muutos:</b> '. 'sms_status' => 'Salli tekstiviestien lähetys',
'Saat ilmoituksen kun palvelimen tila vaihtuu. Eli tilasta päällä -> sammunut tai sammunut -> päällä.<br>'. 'sms_gateway' => 'Palvelu jonka kautta tekstiviestit lähetetään',
'<br /><b>Sammunut:</b> '. 'sms_gateway_username' => 'Palvelun käyttäjänimi',
'Saat yhden ilmoituksen kun palvelimen tila vaihtuu sammuneeksi, mutta *VAIN ENSIMMÄISEN KERRAN*. Esimerkiksi, '. 'sms_gateway_password' => 'Palvelun salasana',
'jos tarkistus tehdään joka 15 minuutti, ja palvelin sammuu klo 1 ja pysyy sammuneena klo 6 asti. '. 'sms_from' => 'Lähettäjän puhelinnumero',
'Saat vain yhden ilmoituksen klo 1, ei muuta.<br>'. 'pushover_status' => 'Salli Pushover-viestien lähetys',
'<br><b>Aina:</b> '. 'pushover_description' => 'Pushover on palvelu jolla on helppo lähettää reaaliaikaisia tilaviestejä. Katso
'Saat ilmoituksen joka kerta kun palvelin tarkistetaan, vaikka palvelin olisi ollut sammuneena tunteja.', <a href="https://pushover.net/" target="_blank">verkkosivuilta</a> lisäinfoa.',
'alert_type_status' => 'Tilan muutos', 'pushover_clone_app' => 'Paina tästä luodaksesi Pushover-sovelluksesi',
'alert_type_offline' => 'Sammunut', 'pushover_api_token' => 'Pushover API-avain',
'alert_type_always' => 'Aina', 'pushover_api_token_description' => 'Ennen kuin voit käyttää Pushoveria, sinun täytyy <a href="%1$s"
'log_status' => 'Tallenna tapahtumat', target="_blank" rel="noopener">rekisteröidä sovellus</a> heidän
'log_status_description' => 'Jos arvo on tosi, palvelin tallentaa tapahtumamerkinnän jokaisesta tilan muutoksesta.', nettisivuillaan, ja kopioida API-avain tänne.',
'log_email' => 'Tallenna lähetetyt sähköpostitapahtumat', 'alert_type' => 'Valitse milloin haluat ilmoituksia.',
'log_sms' => 'Tallenna lähetetyt tekstiviestitapahtumat', 'alert_type_description' => '<b>Tilan muutos:</b> Saat ilmoituksen kun palvelimen tila vaihtuu. Eli tilasta
'log_pushover' => 'Tallenna lähetetyt Pushover-tapahtumat', päällä -> sammunut tai sammunut -> päällä.<br><br /><b>Sammunut:</b> Saat
'updated' => 'Asetukset tallennettu ja päivitetty.', yhden ilmoituksen kun palvelimen tila vaihtuu sammuneeksi, mutta *VAIN
'tab_email' => 'Sähköposti', ENSIMMÄISEN KERRAN*. Esimerkiksi, jos tarkistus tehdään joka 15 minuutti, ja
'tab_sms' => 'Tekstiviesti', palvelin sammuu klo 1 ja pysyy sammuneena klo 6 asti. Saat vain yhden ilmoituksen
'tab_pushover' => 'Pushover', klo 1, ei muuta.<br><br><b>Aina:</b> Saat ilmoituksen joka kerta kun palvelin
'settings_email' => 'Sähköposti asetukset', tarkistetaan, vaikka palvelin olisi ollut sammuneena tunteja.',
'settings_sms' => 'Tekstiviesti asetukset', 'alert_type_status' => 'Tilan muutos',
'settings_pushover' => 'Pushover asetukset', 'alert_type_offline' => 'Sammunut',
'settings_notification' => 'Ilmoitusasetukset', 'alert_type_always' => 'Aina',
'settings_log' => 'Tapahtumamerkintöjen asetukset', 'log_status' => 'Tallenna tapahtumat',
'auto_refresh' => 'Automaattipäivitys', 'log_status_description' => 'Jos arvo on tosi, palvelin tallentaa tapahtumamerkinnän jokaisesta tilan
'auto_refresh_description' => muutoksesta.',
'Päivittää automaattisesti palvelimet-sivun.<br>'. 'log_email' => 'Tallenna lähetetyt sähköpostitapahtumat',
'<span class="small">'. 'log_sms' => 'Tallenna lähetetyt tekstiviestitapahtumat',
'Aika sekunteina, jos 0, sivu ei päivity automaattisesti.'. 'log_pushover' => 'Tallenna lähetetyt Pushover-tapahtumat',
'</span>', 'updated' => 'Asetukset tallennettu ja päivitetty.',
'seconds' => 'sekuntia', 'tab_email' => 'Sähköposti',
'test' => 'Testi', 'tab_sms' => 'Tekstiviesti',
'test_email' => 'Testisähköposti lähetetään profiilisi sähköpostiosoitteeseen.', 'tab_pushover' => 'Pushover',
'test_sms' => 'Testitekstiviesti lähetetään profiilisi numeroon.', 'settings_email' => 'Sähköposti asetukset',
'test_pushover' => 'Pushover-ilmoitus lähetetään profiilissa asetettuun laitteeseen.', 'settings_sms' => 'Tekstiviesti asetukset',
'send' => 'Lähetä', 'settings_pushover' => 'Pushover asetukset',
'test_subject' => 'Testi', 'settings_notification' => 'Ilmoitusasetukset',
'test_message' => 'Testiviesti', 'settings_log' => 'Tapahtumamerkintöjen asetukset',
'email_sent' => 'Sähköposti lähetetty', 'auto_refresh' => 'Automaattipäivitys',
'email_error' => 'Virhe sähköpostin lähetyksessä', 'auto_refresh_description' => 'Päivittää automaattisesti palvelimet-sivun.<br><span class="small">Aika
'sms_sent' => 'Tekstiviesti lähetetty', sekunteina, jos 0, sivu ei päivity automaattisesti.</span>',
'sms_error' => 'Virhe tekstiviestin lähetyksessä. %s', 'seconds' => 'sekuntia',
'sms_error_nomobile' => 'Testitektiviestin lähetys epäonnistui: toimivaa numeroa ei löydetty profiilistasi.', 'test' => 'Testi',
'pushover_sent' => 'Pushover ilmoitus lähetetty', 'test_email' => 'Testisähköposti lähetetään profiilisi sähköpostiosoitteeseen.',
'pushover_error' => 'Virhe Pushover-ilmoitusta lähetettäessä: %s', 'test_sms' => 'Testitekstiviesti lähetetään profiilisi numeroon.',
'pushover_error_noapp' => 'Virhe lähetettäessä Pushover-ilmoitusta: Pushover API-avainta ei löydetty asetuksista.', 'test_pushover' => 'Pushover-ilmoitus lähetetään profiilissa asetettuun laitteeseen.',
'pushover_error_nokey' => 'Virhe lähetettäessä Pushover-ilmoitusta: Pushover avainta ei löydetty profiilistasi.', 'send' => 'Lähetä',
'log_retention_period' => 'Tapahtumien säilytysaika', 'test_subject' => 'Testi',
'log_retention_period_description' => 'Kuinka monta päivää pitää palvelinten päälläoloaikoja ja muita tapahtumia. Aseta arvoksi 0 jos haluat pitää ne loputtomasti.', 'test_message' => 'Testiviesti',
'log_retention_days' => 'päivää', 'email_sent' => 'Sähköposti lähetetty',
), 'email_error' => 'Virhe sähköpostin lähetyksessä',
// for newlines in the email messages use <br> 'sms_sent' => 'Tekstiviesti lähetetty',
'notifications' => array( 'sms_error' => 'Virhe tekstiviestin lähetyksessä. %s',
'off_sms' => 'Server \'%LABEL%\' is DOWN: ip=%IP%, port=%PORT%. Error=%ERROR%', 'sms_error_nomobile' => 'Testitektiviestin lähetys epäonnistui: toimivaa numeroa ei löydetty profiilistasi.',
'off_email_subject' => 'IMPORTANT: Server \'%LABEL%\' is DOWN', 'pushover_sent' => 'Pushover ilmoitus lähetetty',
'off_email_body' => "Failed to connect to the following server:<br><br>Server: %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>Error: %ERROR%<br>Date: %DATE%", 'pushover_error' => 'Virhe Pushover-ilmoitusta lähetettäessä: %s',
'off_pushover_title' => 'Server \'%LABEL%\' is DOWN', 'pushover_error_noapp' => 'Virhe lähetettäessä Pushover-ilmoitusta: Pushover API-avainta ei löydetty
'off_pushover_message' => "Failed to connect to the following server:<br><br>Server: %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>Error: %ERROR%<br>Date: %DATE%", asetuksista.',
'on_sms' => 'Server \'%LABEL%\' is RUNNING: ip=%IP%, port=%PORT%, it was down for %LAST_OFFLINE_DURATION%', 'pushover_error_nokey' => 'Virhe lähetettäessä Pushover-ilmoitusta: Pushover avainta ei löydetty
'on_email_subject' => 'IMPORTANT: Server \'%LABEL%\' is RUNNING', profiilistasi.',
'on_email_body' => "Server '%LABEL%' is running again, it was down for %LAST_OFFLINE_DURATION%:<br><br>Server: %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>Date: %DATE%", 'log_retention_period' => 'Tapahtumien säilytysaika',
'on_pushover_title' => 'Server \'%LABEL%\' is RUNNING', 'log_retention_period_description' => 'Kuinka monta päivää pitää palvelinten päälläoloaikoja ja muita
'on_pushover_message' => 'Server \'%LABEL%\' is running again, it was down for %LAST_OFFLINE_DURATION%:<br><br>Server: %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>Date: %DATE%', tapahtumia. Aseta arvoksi 0 jos haluat pitää ne loputtomasti.',
), 'log_retention_days' => 'päivää',
'login' => array( ),
'welcome_usermenu' => 'Tervetuloa, %user_name%', 'login' => array(
'title_sign_in' => 'Ole hyvä ja kirjaudu sisään', 'welcome_usermenu' => 'Tervetuloa, %user_name%',
'title_forgot' => 'Unohtuiko salasanasi?', 'title_sign_in' => 'Ole hyvä ja kirjaudu sisään',
'title_reset' => 'Resetoi salasanasi', 'title_forgot' => 'Unohtuiko salasanasi?',
'submit' => 'Lähetä', 'title_reset' => 'Resetoi salasanasi',
'remember_me' => 'Muista minut', 'submit' => 'Lähetä',
'login' => 'Kirjaudu sisään', 'remember_me' => 'Muista minut',
'logout' => 'Kirjaudu ulos', 'login' => 'Kirjaudu sisään',
'username' => 'Käyttäjänimi', 'logout' => 'Kirjaudu ulos',
'password' => 'Salasana', 'username' => 'Käyttäjänimi',
'password_repeat' => 'Salasana uudestaan', 'password' => 'Salasana',
'password_forgot' => 'Unohtuiko salasanasi?', 'password_repeat' => 'Salasana uudestaan',
'password_reset' => 'Resetoi salasanasi', 'password_forgot' => 'Unohtuiko salasanasi?',
'password_reset_email_subject' => 'Resetoi salasanasi PHP Server Monitoriin', 'password_reset' => 'Resetoi salasanasi',
'password_reset_email_body' => 'Ole hyvä ja käytä seuraavaa linkkiä restoidaksesi salasanasi. Huomaa että linkki vanhentuu tunnin sisällä.<br><br>%link%', 'password_reset_email_subject' => 'Resetoi salasanasi PHP Server Monitoriin',
'error_user_incorrect' => 'Annettua käyttäjänimeä ei löydetty.', 'password_reset_email_body' => 'Ole hyvä ja käytä seuraavaa linkkiä restoidaksesi salasanasi. Huomaa että
'error_login_incorrect' => 'Antamasi tiedot eivät ole oikein.', linkki vanhentuu tunnin sisällä.<br><br>%link%',
'error_login_passwords_nomatch' => 'Annetut salasanat eivät täsmää.', 'error_user_incorrect' => 'Annettua käyttäjänimeä ei löydetty.',
'error_reset_invalid_link' => 'Resetointilinkkisi on väärä.', 'error_login_incorrect' => 'Antamasi tiedot eivät ole oikein.',
'success_password_forgot' => 'Sähköpostiisi on lähetetty ohjeet kuinka resetoida salasanasi.', 'error_login_passwords_nomatch' => 'Annetut salasanat eivät täsmää.',
'success_password_reset' => 'Salasanasi on resetoitu onnistuneesti, ole hyvä ja kirjaudu sisään.', 'error_reset_invalid_link' => 'Resetointilinkkisi on väärä.',
), 'success_password_forgot' => 'Sähköpostiisi on lähetetty ohjeet kuinka resetoida salasanasi.',
'error' => array( 'success_password_reset' => 'Salasanasi on resetoitu onnistuneesti, ole hyvä ja kirjaudu sisään.',
'401_unauthorized' => 'Ei käyttöoikeuksia', ),
'401_unauthorized_description' => 'Sinulla ei ole käyttöoikeuksia katsoa tätä sivua.', 'error' => array(
), '401_unauthorized' => 'Ei käyttöoikeuksia',
'401_unauthorized_description' => 'Sinulla ei ole käyttöoikeuksia katsoa tätä sivua.',
),
); );

View File

@ -1,4 +1,5 @@
<?php <?php
/** /**
* PHP Server Monitor * PHP Server Monitor
* Monitor your servers and websites. * Monitor your servers and websites.
@ -27,376 +28,448 @@
**/ **/
$sm_lang = array( $sm_lang = array(
'name' => 'Français - French', 'name' => 'Français - French',
'locale' => array('fr_FR.UTF-8', 'fr_FR', 'french'), 'locale' => array(
'locale_tag' => 'fr', '0' => 'fr_FR.UTF-8',
'locale_dir' => 'ltr', '1' => 'fr_FR',
'system' => array( '2' => 'french',
'title' => 'Server Monitor', ),
'install' => 'Installer', 'locale_tag' => 'fr',
'action' => 'Action', 'locale_dir' => 'ltr',
'save' => 'Enregistrer', 'system' => array(
'edit' => 'Editer', 'title' => 'Server Monitor',
'delete' => 'Supprimer', 'install' => 'Installer',
'view' => 'Détails', 'action' => 'Action',
'date' => 'Date', 'save' => 'Enregistrer',
'message' => 'Message', 'edit' => 'Editer',
'yes' => 'Oui', 'delete' => 'Supprimer',
'no' => 'Non', 'view' => 'Détails',
'insert' => 'Nouveau', 'date' => 'Date',
'add_new' => 'Nouveau', 'message' => 'Message',
'update_available' => 'Une nouvelle version ({version}) est disponible à l\'adresse <a href="https://github.com/phpservermon/phpservermon/releases/latest" target="_blank" rel="noopener">http://www.phpservermonitor.org</a>.', 'yes' => 'Oui',
'back_to_top' => 'Haut de page', 'no' => 'Non',
'go_back' => 'Retour', 'insert' => 'Nouveau',
'ok' => 'OK', 'add_new' => 'Nouveau',
'bad' => 'mauvais', 'update_available' => 'Une nouvelle version ({version}) est disponible à l\'adresse <a
'cancel' => 'Annuler', href="https://github.com/phpservermon/phpservermon/releases/latest" target="_blank"
'none' => 'Aucun', rel="noopener">http://www.phpservermonitor.org</a>.',
'activate' => 'Activer', 'back_to_top' => 'Haut de page',
// date/time format according the strftime php function format parameter http://php.net/manual/function.strftime.php 'go_back' => 'Retour',
'short_day_format' => 'Le %e %B', 'ok' => 'OK',
'long_day_format' => 'Le %e %B %Y', 'bad' => 'mauvais',
'yesterday_format' => 'Hier à %kh%M', 'cancel' => 'Annuler',
'other_day_format' => '%A à %kh%M', 'none' => 'Aucun',
'never' => 'Jamais', 'activate' => 'Activer',
'hours_ago' => 'Il y a %d heures', 'short_day_format' => 'Le %e %B',
'an_hour_ago' => 'Il y a une heure', 'long_day_format' => 'Le %e %B %Y',
'minutes_ago' => 'Il y a %d minutes', 'yesterday_format' => 'Hier à %kh%M',
'a_minute_ago' => 'Il y a une minute', 'other_day_format' => '%A à %kh%M',
'seconds_ago' => 'Il y a %d secondes', 'never' => 'Jamais',
'a_second_ago' => 'Il y a une seconde', 'hours_ago' => 'Il y a %d heures',
'year' => 'année', 'an_hour_ago' => 'Il y a une heure',
'years' => 'années', 'minutes_ago' => 'Il y a %d minutes',
'month' => 'mois', 'a_minute_ago' => 'Il y a une minute',
'months' => 'mois', 'seconds_ago' => 'Il y a %d secondes',
'day' => 'jour', 'a_second_ago' => 'Il y a une seconde',
'days' => 'jours', 'year' => 'année',
'hour' => 'heure', 'years' => 'années',
'hours' => 'heures', 'month' => 'mois',
'minute' => 'minute', 'months' => 'mois',
'minutes' => 'minutes', 'day' => 'jour',
'second' => 'seconde', 'days' => 'jours',
'seconds' => 'secondes', 'hour' => 'heure',
'current' => 'actuel', 'hours' => 'heures',
'settings' => 'Paramètres', 'minute' => 'minute',
'search' => 'Recherche' 'minutes' => 'minutes',
), 'second' => 'seconde',
'menu' => array( 'seconds' => 'secondes',
'config' => 'Configuration', 'current' => 'actuel',
'server' => 'Serveurs', 'settings' => 'Paramètres',
'server_log' => 'Événements', 'search' => 'Recherche',
'server_status' => 'États', ),
'server_update' => 'Mise à jour', 'menu' => array(
'user' => 'Utilisateurs', 'config' => 'Configuration',
'help' => 'Aide', 'server' => 'Serveurs',
), 'server_log' => 'Événements',
'users' => array( 'server_status' => 'États',
'user' => 'Utilisateur', 'server_update' => 'Mise à jour',
'name' => 'Nom', 'user' => 'Utilisateurs',
'user_name' => 'Nom d\'utilisateur', 'help' => 'Aide',
'password' => 'Mot de passe', ),
'password_repeat' => 'Répéter le mot de passe', 'users' => array(
'password_leave_blank' => 'Laisser vide pour ne pas le modifier', 'user' => 'Utilisateur',
'level' => 'Rôle', 'name' => 'Nom',
'level_10' => 'Administrateur', 'user_name' => 'Nom d\'utilisateur',
'level_20' => 'Utilisateur', 'password' => 'Mot de passe',
'level_description' => 'Les <b>Administrateurs</b> ont un accès total. Ils peuvent gérer les serveurs, les utilisateurs et éditer la configuration globale.<br>Les <b>Utilisateurs</b> ne peuvent que voir et mettre à jour les serveurs qui leur ont été assignés.', 'password_repeat' => 'Répéter le mot de passe',
'mobile' => 'Téléphone', 'password_leave_blank' => 'Laisser vide pour ne pas le modifier',
'email' => 'Email', 'level' => 'Rôle',
'pushover' => 'Pushover', 'level_10' => 'Administrateur',
'pushover_description' => 'Pushover est un service qui simplifie les notifications en temps réel. Voir <a href="https://pushover.net/">leur site web</a> pour plus d\'informations.', 'level_20' => 'Utilisateur',
'pushover_key' => 'Clé Pushover', 'level_description' => 'Les <b>Administrateurs</b> ont un accès total. Ils peuvent gérer les serveurs, les
'pushover_device' => 'Appareil Pushover', utilisateurs et éditer la configuration globale.<br>Les <b>Utilisateurs</b> ne
'pushover_device_description' => 'Nom de l\'appareil auquel le message doit être envoyé. Laissez vide pour l\'envoyer à tous les appareils.', peuvent que voir et mettre à jour les serveurs qui leur ont été assignés.',
'telegram' => 'Telegram', 'mobile' => 'Téléphone',
'telegram_description' => '<a href="https://telegram.org/">Telegram</a> est une application de messagerie instantanée qui facilite la réception de notification en temps réel. Lisez la <a href="http://docs.phpservermonitor.org/">documentation</a> pour obtenir plus d\'informations sur la configuration de ce service.', 'email' => 'Email',
'telegram_chat_id' => 'ID de conversation (Chat ID) Telegram', 'pushover' => 'Pushover',
'telegram_chat_id_description' => 'Les notifications seront envoyées à la conversation correspondante.', 'pushover_description' => 'Pushover est un service qui simplifie les notifications en temps réel. Voir <a
'telegram_get_chat_id' => 'Cliquez ici pour obtenir votre ID de conversation (Chat ID)', href="https://pushover.net/" target="_blank">leur site web</a> pour plus
'activate_telegram' => 'Activer les alertes Telegram', d\'informations.',
'activate_telegram_description' => 'Permet aux notifications Telegram d\'être envoyée à la conversation spécifiée. Sans cette permission, Telegram ne nous autorise pas à vous envoyer des notifications.', 'pushover_key' => 'Clé Pushover',
'telegram_bot_username_found' => 'Le BOT a été trouvé&nbsp;!<br><a href="%s" target="_blank" rel="noopener"><button class="btn btn-primary">Étape suivante</button></a> <br>Cela va ouvrir une conversation avec le BOT. Vous devez appuyer sur \'/start\' ou le saisir.', 'pushover_device' => 'Appareil Pushover',
'telegram_bot_username_error_token' => '<b>401 - Unauthorized</b>. Assuez-vous que le Token API soit valide.', 'pushover_device_description' => 'Nom de l\'appareil auquel le message doit être envoyé. Laissez vide pour
'telegram_bot_error' => 'Une erreur s\'est produite en tentant d\'activer les notifications Telegram&nbsp;: %s', l\'envoyer à tous les appareils.',
'delete_title' => 'Supprimer un utilisateur', 'telegram' => 'Telegram',
'delete_message' => 'Êtes-vous sûr de vouloir supprimer l\'utilisateur \'%1\'&nbsp;?', 'telegram_description' => '<a href="https://telegram.org/" target="_blank">Telegram</a> est une application de
'deleted' => 'Utilisateur supprimé.', messagerie instantanée qui facilite la réception de notification en temps réel.
'updated' => 'Utilisateur mis à jour.', Lisez la <a href="http://docs.phpservermonitor.org/"
'inserted' => 'Utilisateur ajouté.', target="_blank">documentation</a> pour obtenir plus d\'informations sur la
'profile' => 'Profil', configuration de ce service.',
'profile_updated' => 'Votre profil a été mis à jour.', 'telegram_chat_id' => 'ID de conversation (Chat ID) Telegram',
'error_user_name_bad_length' => 'Le nom d\'utilisateur doit avoir entre 2 et 64 caractères.', 'telegram_chat_id_description' => 'Les notifications seront envoyées à la conversation correspondante.',
'error_user_name_invalid' => 'Le nom d\'utilisateur ne peut contenir que des caractères alphabétiques (a-z, A-Z), des chiffres (0-9), points (.) ou underscore (_).', 'telegram_get_chat_id' => 'Cliquez ici pour obtenir votre ID de conversation (Chat ID)',
'error_user_name_exists' => 'Ce nom d\'utilisateur existe déjà.', 'activate_telegram' => 'Activer les alertes Telegram',
'error_user_email_bad_length' => 'L\'adresse email doit avoir entre 5 et 255 caractères.', 'activate_telegram_description' => 'Permet aux notifications Telegram d\'être envoyée à la conversation
'error_user_email_invalid' => 'L\'adresse email n\'est pas valide.', spécifiée. Sans cette permission, Telegram ne nous autorise pas à vous
'error_user_level_invalid' => 'Le rôle d\'utilisateur n\'est pas valide.', envoyer des notifications.',
'error_user_no_match' => 'L\'utilisateur n\'a pas été trouvé dans la base de données.', 'telegram_bot_username_found' => 'Le BOT a été trouvé&nbsp;!<br><a href="%s" target="_blank"
'error_user_password_invalid' => 'Le mot de passe n\'est pas valide.', rel="noopener"><button class="btn btn-primary">Étape suivante</button></a>
'error_user_password_no_match' => 'Le mot de passe est incorrect.', <br>Cela va ouvrir une conversation avec le BOT. Vous devez appuyer sur
), \'/start\' ou le saisir.',
'log' => array( 'telegram_bot_username_error_token' => '<b>401 - Unauthorized</b>. Assuez-vous que le Token API soit valide.',
'title' => 'Événements', 'telegram_bot_error' => 'Une erreur s\'est produite en tentant d\'activer les notifications Telegram&nbsp;: %s',
'type' => 'Type', 'delete_title' => 'Supprimer un utilisateur',
'status' => 'État', 'delete_message' => 'Êtes-vous sûr de vouloir supprimer l\'utilisateur \'%1\'&nbsp;?',
'email' => 'Email', 'deleted' => 'Utilisateur supprimé.',
'sms' => 'SMS', 'updated' => 'Utilisateur mis à jour.',
'pushover' => 'Pushover', 'inserted' => 'Utilisateur ajouté.',
'telegram' => 'Telegram', 'profile' => 'Profil',
'no_logs' => 'Aucun événement', 'profile_updated' => 'Votre profil a été mis à jour.',
'clear' => 'Effacer les journaux', 'error_user_name_bad_length' => 'Le nom d\'utilisateur doit avoir entre 2 et 64 caractères.',
'delete_title' => 'Supprimer les journaux', 'error_user_name_invalid' => 'Le nom d\'utilisateur ne peut contenir que des caractères alphabétiques (a-z,
'delete_message' => 'Êtes-vous sûr de vouloir supprimer <b>tous</b> les journaux&nbsp;?', A-Z), des chiffres (0-9), points (.) ou underscore (_).',
), 'error_user_name_exists' => 'Ce nom d\'utilisateur existe déjà.',
'servers' => array( 'error_user_email_bad_length' => 'L\'adresse email doit avoir entre 5 et 255 caractères.',
'server' => 'Serveur', 'error_user_email_invalid' => 'L\'adresse email n\'est pas valide.',
'status' => 'État', 'error_user_level_invalid' => 'Le rôle d\'utilisateur n\'est pas valide.',
'label' => 'Nom', 'error_user_no_match' => 'L\'utilisateur n\'a pas été trouvé dans la base de données.',
'domain' => 'Domaine/IP', 'error_user_password_invalid' => 'Le mot de passe n\'est pas valide.',
'timeout' => 'Délai d\'attente', 'error_user_password_no_match' => 'Le mot de passe est incorrect.',
'timeout_description' => 'Nombre de secondes à attendre une réponse du serveur.', ),
'authentication_settings' => 'Paramètres d\'authentification', 'log' => array(
'optional' => 'Optionnel', 'title' => 'Événements',
'website_username' => 'Nom d\'utilisateur', 'type' => 'Type',
'website_username_description' => 'Nom d\'utilisateur pour accèder au site. (Seul l\'authentification Apache est supporté.)', 'status' => 'État',
'website_password' => 'Mot de passe', 'email' => 'Email',
'website_password_description' => 'Mot de passe pour accèder au site. Le mot de passe est cryptè dans la base de donnée.', 'sms' => 'SMS',
'fieldset_monitoring' => 'Monitoring', 'pushover' => 'Pushover',
'fieldset_permissions' => 'Permissions', 'telegram' => 'Telegram',
'permissions' => 'Les utilisateurs suivants pourront voir le serveur.', 'no_logs' => 'Aucun événement',
'port' => 'Port', 'clear' => 'Effacer les journaux',
'custom_port' => 'Port personnalisé', 'delete_title' => 'Supprimer les journaux',
'popular_ports' => 'Ports courant', 'delete_message' => 'Êtes-vous sûr de vouloir supprimer <b>tous</b> les journaux&nbsp;?',
'request_method' => 'Type de requête', ),
'custom_request_method' => 'Type de requête personalisée', 'servers' => array(
'popular_request_methods' => 'Type de requête prédéfinie', 'server' => 'Serveur',
'post_field' => 'Champ POST', 'status' => 'État',
'post_field_description' => 'Les données qui seront envoyés en utilisant le type de requête choisi.', 'label' => 'Nom',
'please_select' => 'Veuillez choisir', 'domain' => 'Domaine/IP',
'type' => 'Type', 'timeout' => 'Délai d\'attente',
'type_website' => 'Site Web', 'timeout_description' => 'Nombre de secondes à attendre une réponse du serveur.',
'type_service' => 'Service', 'authentication_settings' => 'Paramètres d\'authentification',
'type_ping' => 'Ping', 'optional' => 'Optionnel',
'pattern' => 'Rechercher un texte/motif', 'website_username' => 'Nom d\'utilisateur',
'pattern_description' => 'Si ce texte n\'est par retrouvé sur le site web, le serveur est marqué hors-service. Les expressions régulières sont autorisées.', 'website_username_description' => 'Nom d\'utilisateur pour accèder au site. (Seul l\'authentification Apache
'pattern_online' => 'Le texte indique que le site est', est supporté.)',
'pattern_online_description' => 'En ligne&nbsp;: Si ce texte <b>n\'est pas trouvé</b> sur le site internet, le serveur sera considéré en ligne. Hors-ligne&nbsp;: Si ce texte <b>n\'est pas trouvé</b> sur le site, le serveur sera considéré hors-ligne.', 'website_password' => 'Mot de passe',
'redirect_check' => 'La redirection vers un autre domaine est', 'website_password_description' => 'Mot de passe pour accèder au site. Le mot de passe est cryptè dans la
'redirect_check_description' => 'Une redirection vers un autre domaine est généralement mauvais signe.', base de donnée.',
'allow_http_status' => 'Autoriser les codes de status HTTP', 'fieldset_monitoring' => 'Monitoring',
'allow_http_status_description' => 'Marquer le serveur en ligne. Les codes de status HTTP inférieur à 400 sont considérés comme en ligne par défaut. Séparés les valeurs avec |.', 'fieldset_permissions' => 'Permissions',
'header_name' => 'Nom d\'en-têtes', 'permissions' => 'Les utilisateurs suivants pourront voir le serveur.',
'header_value' => 'Valeur d\'en-tête', 'port' => 'Port',
'header_name_description' => 'Sensible à la casse.', 'custom_port' => 'Port personnalisé',
'header_value_description' => 'Les expréssions régulières sont autorisées.', 'popular_ports' => 'Ports courant',
'last_check' => 'Dernière vérification', 'request_method' => 'Type de requête',
'last_online' => 'Dernière fois OK', 'custom_request_method' => 'Type de requête personalisée',
'last_offline' => 'Dernière fois hors-ligne', 'popular_request_methods' => 'Type de requête prédéfinie',
'last_output' => 'Dernière sortie positive', 'post_field' => 'Champ POST',
'last_error' => 'Dernière erreur', 'post_field_description' => 'Les données qui seront envoyés en utilisant le type de requête choisi.',
'last_error_output' => 'Dernière erreur de sortie', 'please_select' => 'Veuillez choisir',
'output' => 'Sortie', 'type' => 'Type',
'monitoring' => 'Surveillé', 'type_website' => 'Site Web',
'no_monitoring' => 'Non surveillé', 'type_service' => 'Service',
'email' => 'Email', 'type_ping' => 'Ping',
'send_email' => 'Envoyer un email', 'pattern' => 'Rechercher un texte/motif',
'sms' => 'SMS', 'pattern_description' => 'Si ce texte n\'est par retrouvé sur le site web, le serveur est marqué
'send_sms' => 'Envoyer un SMS', hors-service. Les expressions régulières sont autorisées.',
'pushover' => 'Pushover', 'pattern_online' => 'Le texte indique que le site est',
'send_pushover' => 'Envoyer des notifications Pushover', 'pattern_online_description' => 'En ligne&nbsp;: Si ce texte est trouvé sur le site internet, le serveur sera
'telegram' => 'Telegram', considéré en ligne. Hors-ligne&nbsp;: Si ce texte n\'est pas trouvé sur le
'send_telegram' => 'Envoyer des notifications Telegram', site, le serveur sera considéré hors-ligne.',
'users' => 'Utilisateurs', 'redirect_check' => 'La redirection vers un autre domaine est',
'delete_title' => 'Supprimer un serveur', 'redirect_check_description' => 'Une redirection vers un autre domaine est généralement mauvais signe.',
'delete_message' => 'Êtes-vous sûr de vouloir supprimer le serveur \'%1\'&nbsp;?', 'allow_http_status' => 'Autoriser les codes de status HTTP',
'deleted' => 'Serveur supprimé.', 'allow_http_status_description' => 'Marquer le serveur en ligne. Les codes de status HTTP inférieur à 400
'updated' => 'Serveur mis à jour.', sont considérés comme en ligne par défaut. Séparés les valeurs avec
'inserted' => 'Serveur ajouté.', |.',
'latency' => 'Temps de réponse', 'header_name' => 'Nom d\'en-têtes',
'latency_max' => 'Temps de réponse maximum', 'header_value' => 'Valeur d\'en-tête',
'latency_min' => 'Temps de réponse minimum', 'header_name_description' => 'Sensible à la casse.',
'latency_avg' => 'Temps de réponse moyen', 'header_value_description' => 'Les expréssions régulières sont autorisées.',
'online' => 'en ligne', 'last_check' => 'Dernière vérification',
'offline' => 'hors ligne', 'last_online' => 'Dernière fois OK',
'uptime' => 'Disponibilité', 'last_offline' => 'Dernière fois hors-ligne',
'year' => 'Année', 'last_output' => 'Dernière sortie positive',
'month' => 'Mois', 'last_error' => 'Dernière erreur',
'week' => 'Semaine', 'last_error_output' => 'Dernière erreur de sortie',
'day' => 'Jour', 'output' => 'Sortie',
'hour' => 'Heure', 'monitoring' => 'Surveillé',
'warning_threshold' => 'Seuil d\'alerte', 'no_monitoring' => 'Non surveillé',
'warning_threshold_description' => 'Nombre d\'échecs de connexion avant que le serveur soit marqué hors-service.', 'email' => 'Email',
'chart_last_week' => 'La dernière semaine', 'send_email' => 'Envoyer un email',
'chart_history' => 'Historique', 'sms' => 'SMS',
// Charts date format according jqPlot date format http://www.jqplot.com/docs/files/plugins/jqplot-dateAxisRenderer-js.html 'send_sms' => 'Envoyer un SMS',
'chart_day_format' => '%d/%m/%Y', 'pushover' => 'Pushover',
'chart_long_date_format' => '%d/%m/%Y %H:%M:%S', 'send_pushover' => 'Envoyer des notifications Pushover',
'chart_short_date_format' => '%d/%m %H:%M', 'telegram' => 'Telegram',
'chart_short_time_format' => '%H:%M', 'send_telegram' => 'Envoyer des notifications Telegram',
'warning_notifications_disabled_sms' => 'Les notifications SMS sont désactivées.', 'users' => 'Utilisateurs',
'warning_notifications_disabled_email' => 'Les notifications par email sont désactivées.', 'delete_title' => 'Supprimer un serveur',
'warning_notifications_disabled_pushover' => 'Les notifications Pushover sont désactivées.', 'delete_message' => 'Êtes-vous sûr de vouloir supprimer le serveur \'%1\'&nbsp;?',
'warning_notifications_disabled_telegram' => 'Les notifications Telegram sont désactivées.', 'deleted' => 'Serveur supprimé.',
'error_server_no_match' => 'Serveur non trouvé.', 'updated' => 'Serveur mis à jour.',
'error_server_label_bad_length' => 'Le nom doit avoir entre 1 et 255 caractères.', 'inserted' => 'Serveur ajouté.',
'error_server_ip_bad_length' => 'Domaine/IP doit avoir entre 1 et 255 caractères.', 'latency' => 'Temps de réponse',
'error_server_ip_bad_service' => 'L\'adresse IP n\'est pas valide.', 'latency_max' => 'Temps de réponse maximum',
'error_server_ip_bad_website' => 'L\'URL du site web n\'est pas valide.', 'latency_min' => 'Temps de réponse minimum',
'error_server_type_invalid' => 'Le type de service sélectionné n\'est pas valide.', 'latency_avg' => 'Temps de réponse moyen',
'error_server_warning_threshold_invalid' => 'Le seuil d\'alerte doit être un nombre entier supérieur à 0.', 'online' => 'en ligne',
), 'offline' => 'hors ligne',
'config' => array( 'uptime' => 'Disponibilité',
'general' => 'Général', 'year' => 'Année',
'language' => 'Langue', 'month' => 'Mois',
'show_update' => 'Vérifier les nouvelles mises à jour chaque semaine', 'week' => 'Semaine',
'password_encrypt_key' => 'Clée de cryptage des mots de passe', 'day' => 'Jour',
'password_encrypt_key_note' => 'Cette clée est utilisée pour crypter les mots de passe qui sont enregistrés dans la base de donnée pour les serveurs qui requiert une authentification. Si la clé est modifié, les mots de passe enregistré ne seront plus valide&nbsp;!', 'hour' => 'Heure',
'proxy' => 'Activer le proxy', 'warning_threshold' => 'Seuil d\'alerte',
'proxy_url' => 'URL du proxy', 'warning_threshold_description' => 'Nombre d\'échecs de connexion avant que le serveur soit marqué
'proxy_user' => 'Nom d\'utilisateur du proxy', hors-service.',
'proxy_password' => 'Mot de passe du proxy', 'chart_last_week' => 'La dernière semaine',
'email_status' => 'Autoriser l\'envoi de mail', 'chart_history' => 'Historique',
'email_from_email' => 'Adresse de l\'expéditeur', 'chart_day_format' => '%d/%m/%Y',
'email_from_name' => 'Nom de l\'expéditeur', 'chart_long_date_format' => '%d/%m/%Y %H:%M:%S',
'email_smtp' => 'Utiliser un serveur SMTP', 'chart_short_date_format' => '%d/%m %H:%M',
'email_smtp_host' => 'Adresse serveur SMTP', 'chart_short_time_format' => '%H:%M',
'email_smtp_port' => 'Port SMTP', 'warning_notifications_disabled_sms' => 'Les notifications SMS sont désactivées.',
'email_smtp_security' => 'Protocole de sécurité SMTP', 'warning_notifications_disabled_email' => 'Les notifications par email sont désactivées.',
'email_smtp_security_none' => 'Aucun', 'warning_notifications_disabled_pushover' => 'Les notifications Pushover sont désactivées.',
'email_smtp_username' => 'Nom utilisateur SMTP', 'warning_notifications_disabled_telegram' => 'Les notifications Telegram sont désactivées.',
'email_smtp_password' => 'Mot de passe SMTP', 'error_server_no_match' => 'Serveur non trouvé.',
'email_smtp_noauth' => 'Laisser vide si pas d\'authentication', 'error_server_label_bad_length' => 'Le nom doit avoir entre 1 et 255 caractères.',
'sms_status' => 'Autoriser l\'envoi de SMS', 'error_server_ip_bad_length' => 'Domaine/IP doit avoir entre 1 et 255 caractères.',
'sms_gateway' => 'Passerelle à utiliser pour l\'envoi de SMS', 'error_server_ip_bad_service' => 'L\'adresse IP n\'est pas valide.',
'sms_gateway_username' => 'Nom utilisateur de la passerelle', 'error_server_ip_bad_website' => 'L\'URL du site web n\'est pas valide.',
'sms_gateway_password' => 'Mot de passe de la passerelle', 'error_server_type_invalid' => 'Le type de service sélectionné n\'est pas valide.',
'sms_from' => 'SMS de l\'expéditeur', 'error_server_warning_threshold_invalid' => 'Le seuil d\'alerte doit être un nombre entier supérieur à 0.',
'pushover_status' => 'Autoriser l\'envoi des messages Pushover', ),
'pushover_description' => 'Pushover est un service qui simplifie les notifications en temps réel. Voir <a href="https://pushover.net/">leur site web</a> pour plus d\'informations.', 'config' => array(
'pushover_clone_app' => 'Cliquez ici pour créer votre application Pushover', 'general' => 'Général',
'pushover_api_token' => 'Jeton application Pushover', 'language' => 'Langue',
'pushover_api_token_description' => 'Avant de pouvoir utiliser Pushover, vous devez <a href="%1$s" target="_blank" rel="noopener">créer une application</a> sur leur site web et entrer ici le jeton (Token) de l\'application.', 'show_update' => 'Vérifier les nouvelles mises à jour chaque semaine',
'telegram_status' => 'Autorise l\'envoi de message Telegram', 'password_encrypt_key' => 'Clée de cryptage des mots de passe',
'telegram_description' => '<a href="https://telegram.org/">Telegram</a> est une application de messagerie instantanée qui facilite la réception de notification en temps réel. Lisez la <a href="http://docs.phpservermonitor.org/">documentation</a> pour obtenir plus d\'informations sur la configuration de ce service.', 'password_encrypt_key_note' => 'Cette clée est utilisée pour crypter les mots de passe qui sont enregistrés
'telegram_api_token' => 'Token API Telegram', dans la base de donnée pour les serveurs qui requiert une authentification.
'telegram_api_token_description' => 'Afin de pouvoir utiliser Telegram, il vous faut obtenir un token api. Consultez la <a href="http://docs.phpservermonitor.org/">documentation</a> pour obtenir de l\'aide.', Si la clé est modifié, les mots de passe enregistré ne seront plus
'alert_type' => 'Choisissez quand vous souhaitez être notifié', valide&nbsp;!',
'alert_type_description' => '<b>Changement d\'état&nbsp;: </b>'. 'proxy' => 'Activer le proxy',
'Vous recevez une notification chaque fois que le serveur change d\'état. C\'est-à-dire passe de l\'état OK à HORS SERVICE ou de HORS SERVICE à OK.<br>'. 'proxy_url' => 'URL du proxy',
'<br><b>Hors service&nbsp;: </b>'. 'proxy_user' => 'Nom d\'utilisateur du proxy',
'Vous ne recevez une notification que quand le serveur passe de l\'état OK à HORS SERVICE. Par exemple, '. 'proxy_password' => 'Mot de passe du proxy',
'Votre tâche planifiée s\'exécute toutes les 15 minutes et votre serveur passe à l\'état HORS SERVICE à 1 heure du matin et le reste jusqu\'à 6 heures du matin.'. 'email_status' => 'Autoriser l\'envoi de mail',
'Vous ne recevez qu\'une seule notification à 1 heure du matin.<br>'. 'email_from_email' => 'Adresse de l\'expéditeur',
'<br><b>Toujours&nbsp;: </b>'. 'email_from_name' => 'Nom de l\'expéditeur',
'Vous recevez une notification à chaque exécution de la tâche planifiée si le serveur est à l\'état HORS SERVICE ', 'email_smtp' => 'Utiliser un serveur SMTP',
'alert_type_status' => 'Changement d\'état', 'email_smtp_host' => 'Adresse serveur SMTP',
'alert_type_offline' => 'Hors service', 'email_smtp_port' => 'Port SMTP',
'alert_type_always' => 'Toujours', 'email_smtp_security' => 'Protocole de sécurité SMTP',
'combine_notifications' => 'Combiner les notifications', 'email_smtp_security_none' => 'Aucun',
'combine_notifications_description' => 'Réduit le nombre de notifications en les combinant toutes en une seule. (Cela ne s\'applique pas aux SMS.)', 'email_smtp_username' => 'Nom utilisateur SMTP',
'alert_proxy' => 'Le serveur proxy n\'est jamais utilisé pour les services, même quand celui-ci est activé.', 'email_smtp_password' => 'Mot de passe SMTP',
'alert_proxy_url' => 'Format&nbsp;: hôte:port', 'email_smtp_noauth' => 'Laisser vide si pas d\'authentication',
'log_status' => 'Etat des événements', 'sms_status' => 'Autoriser l\'envoi de SMS',
'log_status_description' => 'Si l\'option est activée, un événement est enregistré chaque fois qu\'une notification a lieu.', 'sms_gateway' => 'Passerelle à utiliser pour l\'envoi de SMS',
'log_email' => 'Enregistrer tous les emails envoyés', 'sms_gateway_username' => 'Nom utilisateur de la passerelle',
'log_sms' => 'Enregistrer tous les SMS envoyés', 'sms_gateway_password' => 'Mot de passe de la passerelle',
'log_pushover' => 'Enregistrer tous les messages Pushover envoyés', 'sms_from' => 'SMS de l\'expéditeur',
'log_telegram' => 'Enregistrer tous les messages Telegram envoyés', 'pushover_status' => 'Autoriser l\'envoi des messages Pushover',
'updated' => 'La configuration a été mise à jour.', 'pushover_description' => 'Pushover est un service qui simplifie les notifications en temps réel. Voir <a
'tab_email' => 'Email', href="https://pushover.net/" target="_blank">leur site web</a> pour plus
'tab_sms' => 'SMS', d\'informations.',
'tab_pushover' => 'Pushover', 'pushover_clone_app' => 'Cliquez ici pour créer votre application Pushover',
'tab_telegram' => 'Telegram', 'pushover_api_token' => 'Jeton application Pushover',
'settings_email' => 'Configuration email', 'pushover_api_token_description' => 'Avant de pouvoir utiliser Pushover, vous devez <a href="%1$s"
'settings_sms' => 'Configuration SMS', target="_blank" rel="noopener">créer une application</a> sur leur site
'settings_pushover' => 'Configuration Pushover', web et entrer ici le jeton (Token) de l\'application.',
'settings_telegram' => 'Configuration Telegram', 'telegram_status' => 'Autorise l\'envoi de message Telegram',
'settings_notification' => 'Configuration des notifications', 'telegram_description' => '<a href="https://telegram.org/" target="_blank">Telegram</a> est une application de
'settings_log' => 'Configuration des événements', messagerie instantanée qui facilite la réception de notification en temps réel.
'settings_proxy' => 'Configuration du proxy', Lisez la <a href="http://docs.phpservermonitor.org/"
'auto_refresh' => 'Auto-rachaîchissement', target="_blank">documentation</a> pour obtenir plus d\'informations sur la
'auto_refresh_description' => configuration de ce service.',
'Auto-rachaîchissement de la page serveurs.<br>'. 'telegram_api_token' => 'Token API Telegram',
'<span class="small">'. 'telegram_api_token_description' => 'Afin de pouvoir utiliser Telegram, il vous faut obtenir un token api.
'Temps en secondes. Si 0, la page n\'est pas rafraîchie.'. Consultez la <a href="http://docs.phpservermonitor.org/"
'</span>', target="_blank">documentation</a> pour obtenir de l\'aide.',
'seconds' => 'secondes', 'alert_type' => 'Choisissez quand vous souhaitez être notifié',
'test' => 'Tester', 'alert_type_description' => '<b>Changement d\'état&nbsp;: </b>Vous recevez une notification chaque fois que
'test_email' => 'Un email va vous être envoyé à l\'adresse définie dans votre profil utilisateur.', le serveur change d\'état. C\'est-à-dire passe de l\'état OK à HORS SERVICE
'test_sms' => 'Un SMS va vous être envoyé au numéro défini dans votre profil utilisateur.', ou de HORS SERVICE à OK.<br><br><b>Hors service&nbsp;: </b>Vous ne recevez une
'test_pushover' => 'Une notification Pushover va être envoyée en utilisant la clé spécifiée dans votre profil utilisateur.', notification que quand le serveur passe de l\'état OK à HORS SERVICE. Par
'test_telegram' => 'Une notification Telegram sera envoyé à la conversion indiqué sur votre profil (ID de conversation).', exemple, Votre tâche planifiée s\'exécute toutes les 15 minutes et votre
'send' => 'Envoyer', serveur passe à l\'état HORS SERVICE à 1 heure du matin et le reste jusqu\'à
'test_subject' => 'Test', 6 heures du matin.Vous ne recevez qu\'une seule notification à 1 heure du
'test_message' => 'Message de test', matin.<br><br><b>Toujours&nbsp;: </b>Vous recevez une notification à chaque
'email_sent' => 'Email envoyé', exécution de la tâche planifiée si le serveur est à l\'état HORS SERVICE ',
'email_error' => 'Erreur lors de l\'envoi de l\'email', 'alert_type_status' => 'Changement d\'état',
'sms_sent' => 'SMS envoyé', 'alert_type_offline' => 'Hors service',
'sms_error' => 'Erreur lors de l\'envoi du SMS. %s', 'alert_type_always' => 'Toujours',
'sms_error_nomobile' => 'Impossible d\'envoyer un SMS de test: aucun numéro de téléphone défini dans votre profil.', 'combine_notifications' => 'Combiner les notifications',
'pushover_sent' => 'Notification Pushover envoyée', 'combine_notifications_description' => 'Réduit le nombre de notifications en les combinant toutes en une
'pushover_error' => 'Une erreur s\'est produite lors de l\'envoi de la notification Pushover&nbsp;: %s', seule. (Cela ne s\'applique pas aux SMS.)',
'pushover_error_noapp' => 'Impossible d\'envoyer une notification de test: Aucun jeton application Pushover n\'a été défini dans la configuration Pushover.', 'alert_proxy' => 'Le serveur proxy n\'est jamais utilisé pour les services, même quand celui-ci est activé.',
'pushover_error_nokey' => 'Impossible d\'envoyer une notification de test: Aucune clé Pushover n\'a été définie dans votre profil.', 'alert_proxy_url' => 'Format&nbsp;: hôte:port',
'telegram_sent' => 'Notification Telegram envoyée', 'log_status' => 'Etat des événements',
'telegram_error' => 'Une erreur s\'est produite lors de l\'envoi de la notification&nbsp;: %s', 'log_status_description' => 'Si l\'option est activée, un événement est enregistré chaque fois qu\'une
'telegram_error_notoken' => 'Impossible d\'envoyé la notification de test&nbsp;: aucun token APII token trouvé dans la configuration.', notification a lieu.',
'telegram_error_noid' => 'Impossible d\'envoyé la notification de test&nbsp;: aucun ID de conversation trouvé dans votre profil utilisateur.', 'log_email' => 'Enregistrer tous les emails envoyés',
'log_retention_period' => 'Durée de conservation', 'log_sms' => 'Enregistrer tous les SMS envoyés',
'log_retention_period_description' => 'Nombre de jours de conservation des événements envoyés et des temps de réponse des serveurs. Entrez 0 pour les conserver indéfiniment.', 'log_pushover' => 'Enregistrer tous les messages Pushover envoyés',
'log_retention_days' => 'jours', 'log_telegram' => 'Enregistrer tous les messages Telegram envoyés',
), 'updated' => 'La configuration a été mise à jour.',
// for newlines in the email messages use <br> 'tab_email' => 'Email',
'notifications' => array( 'tab_sms' => 'SMS',
'off_sms' => 'Le Serveur \'%LABEL%\' est HORS SERVICE: IP=%IP%, Port=%PORT%. Erreur=%ERROR%', 'tab_pushover' => 'Pushover',
'off_email_subject' => 'IMPORTANT: Le Serveur \'%LABEL%\' est HORS SERVICE', 'tab_telegram' => 'Telegram',
'off_email_body' => "Impossible de se connecter au serveur suivant:<br><br>Serveur&nbsp;: %LABEL%<br>IP&nbsp;: %IP%<br>Port&nbsp;: %PORT%<br>Erreur&nbsp;: %ERROR%<br>Date: %DATE%", 'settings_email' => 'Configuration email',
'off_pushover_title' => 'Le Serveur \'%LABEL%\' est HORS SERVICE', 'settings_sms' => 'Configuration SMS',
'off_pushover_message' => "Impossible de se connecter au serveur suivant&nbsp;:<br><br>Serveur&nbsp;: %LABEL%<br>IP&nbsp;: %IP%<br>Port&nbsp;: %PORT%<br>Erreur&nbsp;: %ERROR%<br>Date&nbsp;: %DATE%", 'settings_pushover' => 'Configuration Pushover',
'off_telegram_message' => "Impossible de se connecter au serveur suivant&nbsp;:<br><br>Serveur&nbsp;: %LABEL%<br>IP&nbsp;: %IP%<br>Port&nbsp;: %PORT%<br>Erreur&nbsp;: %ERROR%<br>Date&nbsp;: %DATE%", 'settings_telegram' => 'Configuration Telegram',
'on_sms' => 'Le Serveur \'%LABEL%\' est OK: IP=%IP%, Port=%PORT%, il était hors-ligne pendant %LAST_OFFLINE_DURATION%', 'settings_notification' => 'Configuration des notifications',
'on_email_subject' => 'IMPORTANT: Le Serveur \'%LABEL%\' est OK', 'settings_log' => 'Configuration des événements',
'on_email_body' => "Le Serveur '%LABEL%' est de nouveau OK, il était hors-ligne pendant %LAST_OFFLINE_DURATION%:<br><br>Serveur: %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>Date: %DATE%", 'settings_proxy' => 'Configuration du proxy',
'on_pushover_title' => 'Le Serveur \'%LABEL%\' est OK', 'auto_refresh' => 'Auto-rachaîchissement',
'on_pushover_message' => "Le Serveur '%LABEL%' est de nouveau OK, il était hors-ligne pendant %LAST_OFFLINE_DURATION%:<br><br>Serveur: %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>Date: %DATE%", 'auto_refresh_description' => 'Auto-rachaîchissement de la page serveurs.<br><span class="small">Temps en
'on_telegram_message' => 'Server \'%LABEL%\' is running again, it was down for: %LAST_OFFLINE_DURATION%<br><br>Server: %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>Date: %DATE%', secondes. Si 0, la page n\'est pas rafraîchie.</span>',
'combi_off_email_message' => "<ul><li>Serveur&nbsp;: %LABEL%</li><li>IP&nbsp;: %IP%</li><li>Port&nbsp;: %PORT%</li><li>Erreur&nbsp;: %ERROR%</li><li>Date&nbsp;: %DATE%</li></ul>", 'seconds' => 'secondes',
'combi_off_pushover_message' => "<ul><li>Serveur&nbsp;: %LABEL%</li><li>IP&nbsp;: %IP%</li><li>Port&nbsp;: %PORT%</li><li>Erreur&nbsp;: %ERROR%</li><li>Date&nbsp;: %DATE%</li></ul>", 'test' => 'Tester',
'combi_off_telegram_message' => "- Serveur&nbsp;: %LABEL%<br>- IP&nbsp;: %IP%<br>- Port&nbsp;: %PORT%<br>- Erreur&nbsp;: %ERROR%<br>- Date&nbsp;: %DATE%<br><br>", 'test_email' => 'Un email va vous être envoyé à l\'adresse définie dans votre profil utilisateur.',
'combi_on_email_message' => "<ul><li>Serveur&nbsp;: %LABEL%</li><li>IP&nbsp;: %IP%</li><li>Port&nbsp;: %PORT%</li><li>Durée&nbsp;: %LAST_OFFLINE_DURATION%</li><li>Date&nbsp;: %DATE%</li></ul>", 'test_sms' => 'Un SMS va vous être envoyé au numéro défini dans votre profil utilisateur.',
'combi_on_pushover_message' => '<ul><li>Serveur&nbsp;: %LABEL%</li><li>IP&nbsp;: %IP%</li><li>Port&nbsp;: %PORT%</li><li>Durée&nbsp;: %LAST_OFFLINE_DURATION%</li><li>Date&nbsp;: %DATE%</li></ul>', 'test_pushover' => 'Une notification Pushover va être envoyée en utilisant la clé spécifiée dans votre
'combi_on_telegram_message' => '- Serveur&nbsp;: %LABEL%<br>- IP: %IP%<br>- Port&nbsp;: %PORT%<br>- Durée&nbsp;: %LAST_OFFLINE_DURATION%<br>- Date&nbsp;: %DATE%<br><br>', profil utilisateur.',
'combi_email_subject' => 'IMPORTANT&nbsp;: \'%UP%\' serveurs de nouveaux en ligne, \'%DOWN%\' serveurs hors-ligne', 'test_telegram' => 'Une notification Telegram sera envoyé à la conversion indiqué sur votre profil (ID de
'combi_pushover_subject' => '\'%UP%\' serveurs de nouveaux en ligne, \'%DOWN%\' serveurs hors-ligne', conversation).',
'combi_email_message' => '<b>Les serveurs suivants sont hors-ligne&nbsp;:</b><br>%DOWN_SERVERS%<br><b>Les serveurs suivants sont en ligne&nbsp;:</b><br>%UP_SERVERS%', 'send' => 'Envoyer',
'combi_pushover_message' => '<b>Les serveurs suivants sont hors-ligne&nbsp;:</b><br>%DOWN_SERVERS%<br><b>Les serveurs suivants sont en ligne&nbsp;:</b><br>%UP_SERVERS%', 'test_subject' => 'Test',
'combi_telegram_message' => '<b>Les serveurs suivants sont hors-ligne&nbsp;:</b><br>%DOWN_SERVERS%<br><b>Les serveurs suivants sont en ligne&nbsp;:</b><br>%UP_SERVERS%', 'test_message' => 'Message de test',
), 'email_sent' => 'Email envoyé',
'login' => array( 'email_error' => 'Erreur lors de l\'envoi de l\'email',
'welcome_usermenu' => 'Bonjour %user_name%', 'sms_sent' => 'SMS envoyé',
'title_sign_in' => 'Connectez vous SVP', 'sms_error' => 'Erreur lors de l\'envoi du SMS. %s',
'title_forgot' => 'Mot de passe oublié&nbsp;?', 'sms_error_nomobile' => 'Impossible d\'envoyer un SMS de test: aucun numéro de téléphone défini dans votre
'title_reset' => 'Réinitialisation du mot de passe', profil.',
'submit' => 'Envoyer', 'pushover_sent' => 'Notification Pushover envoyée',
'remember_me' => 'Se souvenir de moi', 'pushover_error' => 'Une erreur s\'est produite lors de l\'envoi de la notification Pushover&nbsp;: %s',
'login' => 'Connexion', 'pushover_error_noapp' => 'Impossible d\'envoyer une notification de test: Aucun jeton application Pushover
'logout' => 'Déconnexion', n\'a été défini dans la configuration Pushover.',
'username' => 'Nom', 'pushover_error_nokey' => 'Impossible d\'envoyer une notification de test: Aucune clé Pushover n\'a été
'password' => 'Mot de passe', définie dans votre profil.',
'password_repeat' => 'Répéter le mot de passe', 'telegram_sent' => 'Notification Telegram envoyée',
'password_forgot' => 'Mot de passe oublié&nbsp;?', 'telegram_error' => 'Une erreur s\'est produite lors de l\'envoi de la notification&nbsp;: %s',
'password_reset' => 'Réinitialiser le mot de passe', 'telegram_error_notoken' => 'Impossible d\'envoyé la notification de test&nbsp;: aucun token APII token
'password_reset_email_subject' => 'Réinitialisation du mot de passe pour PHP Server Monitor', trouvé dans la configuration.',
'password_reset_email_body' => 'Cliquez sur le lien ci-dessous pour réinitialiser votre mot de passe. Veuillez noter qu\'il expire dans une heure.<br><br>%link%', 'telegram_error_noid' => 'Impossible d\'envoyé la notification de test&nbsp;: aucun ID de conversation
'error_user_incorrect' => 'Nom d\'utilisateur invalide.', trouvé dans votre profil utilisateur.',
'error_login_incorrect' => 'Informations incorrectes.', 'log_retention_period' => 'Durée de conservation',
'error_login_passwords_nomatch' => 'Mot de passe invalide.', 'log_retention_period_description' => 'Nombre de jours de conservation des événements envoyés et des temps
'error_reset_invalid_link' => 'Le lien d\'initialisation du mot de passe n\'est pas valide.', de réponse des serveurs. Entrez 0 pour les conserver indéfiniment.',
'success_password_forgot' => 'Un email vous a été envoyé pour réinitialiser votre mot de passe.', 'log_retention_days' => 'jours',
'success_password_reset' => 'Votre mot de passe a été réinitialisé.', ),
), 'notifications' => array(
'error' => array( 'off_sms' => 'Le Serveur \'%LABEL%\' est HORS SERVICE: IP=%IP%, Port=%PORT%. Erreur=%ERROR%',
'401_unauthorized' => 'Non autorisée', 'off_email_subject' => 'IMPORTANT: Le Serveur \'%LABEL%\' est HORS SERVICE',
'401_unauthorized_description' => 'Vous n\'avez pas les privilèges nécessaires pour voir cette page.', 'off_email_body' => 'Impossible de se connecter au serveur suivant:<br><br>Serveur&nbsp;: %LABEL%<br>IP&nbsp;:
), %IP%<br>Port&nbsp;: %PORT%<br>Erreur&nbsp;: %ERROR%<br>Date: %DATE%',
'off_pushover_title' => 'Le Serveur \'%LABEL%\' est HORS SERVICE',
'off_pushover_message' => 'Impossible de se connecter au serveur suivant&nbsp;:<br><br>Serveur&nbsp;:
%LABEL%<br>IP&nbsp;: %IP%<br>Port&nbsp;: %PORT%<br>Erreur&nbsp;:
%ERROR%<br>Date&nbsp;: %DATE%',
'off_telegram_message' => 'Impossible de se connecter au serveur suivant&nbsp;:<br><br>Serveur&nbsp;:
%LABEL%<br>IP&nbsp;: %IP%<br>Port&nbsp;: %PORT%<br>Erreur&nbsp;:
%ERROR%<br>Date&nbsp;: %DATE%',
'on_sms' => 'Le Serveur \'%LABEL%\' est OK: IP=%IP%, Port=%PORT%, il était hors-ligne pendant
%LAST_OFFLINE_DURATION%',
'on_email_subject' => 'IMPORTANT: Le Serveur \'%LABEL%\' est OK',
'on_email_body' => 'Le Serveur \'%LABEL%\' est de nouveau OK, il était hors-ligne pendant
%LAST_OFFLINE_DURATION%:<br><br>Serveur: %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>Date:
%DATE%',
'on_pushover_title' => 'Le Serveur \'%LABEL%\' est OK',
'on_pushover_message' => 'Le Serveur \'%LABEL%\' est de nouveau OK, il était hors-ligne pendant
%LAST_OFFLINE_DURATION%:<br><br>Serveur: %LABEL%<br>IP: %IP%<br>Port:
%PORT%<br>Date: %DATE%',
'on_telegram_message' => 'Server \'%LABEL%\' is running again, it was down for:
%LAST_OFFLINE_DURATION%<br><br>Server: %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>Date:
%DATE%',
'combi_off_email_message' => '<ul><li>Serveur&nbsp;: %LABEL%</li><li>IP&nbsp;: %IP%</li><li>Port&nbsp;:
%PORT%</li><li>Erreur&nbsp;: %ERROR%</li><li>Date&nbsp;: %DATE%</li></ul>',
'combi_off_pushover_message' => '<ul><li>Serveur&nbsp;: %LABEL%</li><li>IP&nbsp;: %IP%</li><li>Port&nbsp;:
%PORT%</li><li>Erreur&nbsp;: %ERROR%</li><li>Date&nbsp;: %DATE%</li></ul>',
'combi_off_telegram_message' => '- Serveur&nbsp;: %LABEL%<br>- IP&nbsp;: %IP%<br>- Port&nbsp;: %PORT%<br>-
Erreur&nbsp;: %ERROR%<br>- Date&nbsp;: %DATE%<br><br>',
'combi_on_email_message' => '<ul><li>Serveur&nbsp;: %LABEL%</li><li>IP&nbsp;: %IP%</li><li>Port&nbsp;:
%PORT%</li><li>Durée&nbsp;: %LAST_OFFLINE_DURATION%</li><li>Date&nbsp;:
%DATE%</li></ul>',
'combi_on_pushover_message' => '<ul><li>Serveur&nbsp;: %LABEL%</li><li>IP&nbsp;: %IP%</li><li>Port&nbsp;:
%PORT%</li><li>Durée&nbsp;: %LAST_OFFLINE_DURATION%</li><li>Date&nbsp;:
%DATE%</li></ul>',
'combi_on_telegram_message' => '- Serveur&nbsp;: %LABEL%<br>- IP: %IP%<br>- Port&nbsp;: %PORT%<br>-
Durée&nbsp;: %LAST_OFFLINE_DURATION%<br>- Date&nbsp;: %DATE%<br><br>',
'combi_email_subject' => 'IMPORTANT&nbsp;: \'%UP%\' serveurs de nouveaux en ligne, \'%DOWN%\' serveurs
hors-ligne',
'combi_pushover_subject' => '\'%UP%\' serveurs de nouveaux en ligne, \'%DOWN%\' serveurs hors-ligne',
'combi_email_message' => '<b>Les serveurs suivants sont hors-ligne&nbsp;:</b><br>%DOWN_SERVERS%<br><b>Les
serveurs suivants sont en ligne&nbsp;:</b><br>%UP_SERVERS%',
'combi_pushover_message' => '<b>Les serveurs suivants sont hors-ligne&nbsp;:</b><br>%DOWN_SERVERS%<br><b>Les
serveurs suivants sont en ligne&nbsp;:</b><br>%UP_SERVERS%',
'combi_telegram_message' => '<b>Les serveurs suivants sont hors-ligne&nbsp;:</b><br>%DOWN_SERVERS%<br><b>Les
serveurs suivants sont en ligne&nbsp;:</b><br>%UP_SERVERS%',
),
'login' => array(
'welcome_usermenu' => 'Bonjour %user_name%',
'title_sign_in' => 'Connectez vous SVP',
'title_forgot' => 'Mot de passe oublié&nbsp;?',
'title_reset' => 'Réinitialisation du mot de passe',
'submit' => 'Envoyer',
'remember_me' => 'Se souvenir de moi',
'login' => 'Connexion',
'logout' => 'Déconnexion',
'username' => 'Nom',
'password' => 'Mot de passe',
'password_repeat' => 'Répéter le mot de passe',
'password_forgot' => 'Mot de passe oublié&nbsp;?',
'password_reset' => 'Réinitialiser le mot de passe',
'password_reset_email_subject' => 'Réinitialisation du mot de passe pour PHP Server Monitor',
'password_reset_email_body' => 'Cliquez sur le lien ci-dessous pour réinitialiser votre mot de passe.
Veuillez noter qu\'il expire dans une heure.<br><br>%link%',
'error_user_incorrect' => 'Nom d\'utilisateur invalide.',
'error_login_incorrect' => 'Informations incorrectes.',
'error_login_passwords_nomatch' => 'Mot de passe invalide.',
'error_reset_invalid_link' => 'Le lien d\'initialisation du mot de passe n\'est pas valide.',
'success_password_forgot' => 'Un email vous a été envoyé pour réinitialiser votre mot de passe.',
'success_password_reset' => 'Votre mot de passe a été réinitialisé.',
),
'error' => array(
'401_unauthorized' => 'Non autorisée',
'401_unauthorized_description' => 'Vous n\'avez pas les privilèges nécessaires pour voir cette page.',
),
); );

View File

@ -1,4 +1,5 @@
<?php <?php
/** /**
* PHP Server Monitor * PHP Server Monitor
* Monitor your servers and websites. * Monitor your servers and websites.
@ -26,284 +27,296 @@
**/ **/
$sm_lang = array( $sm_lang = array(
'name' => 'Italiano - Italian', 'name' => 'Italiano - Italian',
'locale' => array('it_IT.UTF-8', 'it_IT', 'italian', 'ita'), 'locale' => array(
'locale_tag' => 'it', '0' => 'it_IT.UTF-8',
'locale_dir' => 'ltr', '1' => 'it_IT',
'system' => array( '2' => 'italian',
'title' => 'Server Monitor', '3' => 'ita',
'install' => 'Installa', ),
'action' => 'Azione', 'locale_tag' => 'it',
'save' => 'Salva', 'locale_dir' => 'ltr',
'edit' => 'Modifica', 'system' => array(
'delete' => 'Elimina', 'title' => 'Server Monitor',
'date' => 'Data', 'install' => 'Installa',
'message' => 'Messaggio', 'action' => 'Azione',
'yes' => 'Sì', 'save' => 'Salva',
'no' => 'No', 'edit' => 'Modifica',
'insert' => 'Inserisci', 'delete' => 'Elimina',
'add_new' => 'Aggiungi Nuovo', 'date' => 'Data',
'update_available' => 'Una nuova versione ({version}) è disponibile su <a href="https://github.com/phpservermon/phpservermon/releases/latest" target="_blank" rel="noopener">http://www.phpservermonitor.org</a>.', 'message' => 'Messaggio',
'back_to_top' => 'Torna su', 'yes' => 'Sì',
'go_back' => 'Indietro', 'no' => 'No',
'ok' => 'OK', 'insert' => 'Inserisci',
'cancel' => 'Annulla', 'add_new' => 'Aggiungi Nuovo',
// date/time format according the strftime php function format parameter http://php.net/manual/function.strftime.php 'update_available' => 'Una nuova versione ({version}) è disponibile su <a
'short_day_format' => '%e %B', href="https://github.com/phpservermon/phpservermon/releases/latest" target="_blank"
'long_day_format' => '%e %B %Y', rel="noopener">http://www.phpservermonitor.org</a>.',
'yesterday_format' => 'Ieri alle %H:%M', 'back_to_top' => 'Torna su',
'other_day_format' => '%A alle %H:%M', 'go_back' => 'Indietro',
'never' => 'Mai', 'ok' => 'OK',
'hours_ago' => '%d ore fa', 'cancel' => 'Annulla',
'an_hour_ago' => 'circa un ora fa', 'short_day_format' => '%e %B',
'minutes_ago' => '%d minuti fa', 'long_day_format' => '%e %B %Y',
'a_minute_ago' => 'circa un minuto fa', 'yesterday_format' => 'Ieri alle %H:%M',
'seconds_ago' => '%d secondi fa', 'other_day_format' => '%A alle %H:%M',
'a_second_ago' => 'un secondo fa', 'never' => 'Mai',
'year' => 'year', 'hours_ago' => '%d ore fa',
'years' => 'years', 'an_hour_ago' => 'circa un ora fa',
'month' => 'month', 'minutes_ago' => '%d minuti fa',
'months' => 'months', 'a_minute_ago' => 'circa un minuto fa',
'day' => 'day', 'seconds_ago' => '%d secondi fa',
'days' => 'days', 'a_second_ago' => 'un secondo fa',
'hour' => 'hour', ),
'hours' => 'hours', 'menu' => array(
'minute' => 'minute', 'config' => 'Configurazione',
'minutes' => 'minutes', 'server' => 'Servers',
'second' => 'second', 'server_log' => 'Log',
'seconds' => 'seconds', 'server_status' => 'Stato',
), 'server_update' => 'Aggiorna',
'menu' => array( 'user' => 'Utenti',
'config' => 'Configurazione', 'help' => 'Aiuto',
'server' => 'Servers', ),
'server_log' => 'Log', 'users' => array(
'server_status' => 'Stato', 'user' => 'Utente',
'server_update' => 'Aggiorna', 'name' => 'Nome',
'user' => 'Utenti', 'user_name' => 'Nome utente',
'help' => 'Aiuto', 'password' => 'Password',
), 'password_repeat' => 'Ripeti password',
'users' => array( 'password_leave_blank' => 'Lascia vuoto per non modificare',
'user' => 'Utente', 'level' => 'Livello',
'name' => 'Nome', 'level_10' => 'Amministratore',
'user_name' => 'Nome utente', 'level_20' => 'Utente',
'password' => 'Password', 'level_description' => 'Gli <b>Amministratori</b> hanno pieno accesso: possono gestire server, utenti e
'password_repeat' => 'Ripeti password', modificare la configurazione globale.<br>Gli <b>Utenti</b> possono solo visualizzare
'password_leave_blank' => 'Lascia vuoto per non modificare', ed eseguire l\'aggiornamento per i server a cui sono assegnati.',
'level' => 'Livello', 'mobile' => 'Cellulare',
'level_10' => 'Amministratore', 'email' => 'Email',
'level_20' => 'Utente', 'pushover' => 'Pushover',
'level_description' => 'Gli <b>Amministratori</b> hanno pieno accesso: possono gestire server, utenti e modificare la configurazione globale.<br>Gli <b>Utenti</b> possono solo visualizzare ed eseguire l\'aggiornamento per i server a cui sono assegnati.', 'pushover_description' => 'Pushover è un servizio che rende semplice ottenere notifiche in tempo reale. Vedi
'mobile' => 'Cellulare', <a href="https://pushover.net/">il loro sito web</a> per maggiori informazioni.',
'email' => 'Email', 'pushover_key' => 'Pushover Key',
'pushover' => 'Pushover', 'pushover_device' => 'Dispositivo Pushover',
'pushover_description' => 'Pushover è un servizio che rende semplice ottenere notifiche in tempo reale. Vedi <a href="https://pushover.net/">il loro sito web</a> per maggiori informazioni.', 'pushover_device_description' => 'Nome del dispositivo a cui inviare il messaggio. Lascia vuoto per inviarlo a
'pushover_key' => 'Pushover Key', tutti i dispositivi.',
'pushover_device' => 'Dispositivo Pushover', 'delete_title' => 'Elimina Utente',
'pushover_device_description' => 'Nome del dispositivo a cui inviare il messaggio. Lascia vuoto per inviarlo a tutti i dispositivi.', 'delete_message' => 'Sei sicuro di voler eliminare l\'utente \'%1\'?',
'delete_title' => 'Elimina Utente', 'deleted' => 'Utente eliminato.',
'delete_message' => 'Sei sicuro di voler eliminare l\'utente \'%1\'?', 'updated' => 'Utente aggiornato.',
'deleted' => 'Utente eliminato.', 'inserted' => 'Utente aggiunto.',
'updated' => 'Utente aggiornato.', 'profile' => 'Profilo',
'inserted' => 'Utente aggiunto.', 'profile_updated' => 'Il tuo profilo è stato aggiornato.',
'profile' => 'Profilo', 'error_user_name_bad_length' => 'Il nome utente deve essere composto da almeno 2 caratteri (massimo 64).',
'profile_updated' => 'Il tuo profilo è stato aggiornato.', 'error_user_name_invalid' => 'Lo username può contenere solo caratteri alfabetici (a-z, A-Z), numeri (0-9),
'error_user_name_bad_length' => 'Il nome utente deve essere composto da almeno 2 caratteri (massimo 64).', il punto (.) ed la sottolineatura (_).',
'error_user_name_invalid' => 'Lo username può contenere solo caratteri alfabetici (a-z, A-Z), numeri (0-9), il punto (.) ed la sottolineatura (_).', 'error_user_name_exists' => 'Nome utente già in uso.',
'error_user_name_exists' => 'Nome utente già in uso.', 'error_user_email_bad_length' => 'L\'indirizzo Email deve essere composto da 5 a 255 caratteri.',
'error_user_email_bad_length' => 'L\'indirizzo Email deve essere composto da 5 a 255 caratteri.', 'error_user_email_invalid' => 'Indirizzo Email non valido.',
'error_user_email_invalid' => 'Indirizzo Email non valido.', 'error_user_level_invalid' => 'Livello utente non valido.',
'error_user_level_invalid' => 'Livello utente non valido.', 'error_user_no_match' => 'L\'utente non è stato trovato nel database.',
'error_user_no_match' => 'L\'utente non è stato trovato nel database.', 'error_user_password_invalid' => 'La password inserita non è valida.',
'error_user_password_invalid' => 'La password inserita non è valida.', 'error_user_password_no_match' => 'Le password inserite non corrispondono.',
'error_user_password_no_match' => 'Le password inserite non corrispondono.', ),
), 'log' => array(
'log' => array( 'title' => 'Righe log',
'title' => 'Righe log', 'type' => 'Tipo',
'type' => 'Tipo', 'status' => 'Stato',
'status' => 'Stato', 'email' => 'Email',
'email' => 'Email', 'sms' => 'SMS',
'sms' => 'SMS', 'pushover' => 'Pushover',
'pushover' => 'Pushover', 'no_logs' => 'Nessun log',
'no_logs' => 'Nessun log', 'clear' => 'Pulisci il registro',
'clear' => 'Pulisci il registro', 'delete_title' => 'Elimina log',
'delete_title' => 'Elimina log', 'delete_message' => 'Sei sicuro di voler eliminare <b>tutti</b> i registri?',
'delete_message' => 'Sei sicuro di voler eliminare <b>tutti</b> i registri?', ),
), 'servers' => array(
'servers' => array( 'server' => 'Server',
'server' => 'Server', 'status' => 'Stato',
'status' => 'Stato', 'label' => 'Nome',
'label' => 'Nome', 'domain' => 'Dominio/IP',
'domain' => 'Dominio/IP', 'timeout' => 'Timeout',
'timeout' => 'Timeout', 'timeout_description' => 'Numero di secondi da attendere per la risposta del server.',
'timeout_description' => 'Numero di secondi da attendere per la risposta del server.', 'port' => 'Porta',
'port' => 'Porta', 'type' => 'Tipo',
'type' => 'Tipo', 'type_website' => 'Sito web',
'type_website' => 'Sito web', 'type_service' => 'Servizio',
'type_service' => 'Servizio', 'pattern' => 'Cerca stringa/pattern',
'pattern' => 'Cerca stringa/pattern', 'pattern_description' => 'Se questo pattern non è trovato nel sito web, il server verrà contrassegnato come
'pattern_description' => 'Se questo pattern non è trovato nel sito web, il server verrà contrassegnato come fuori linea. Le espressioni regolari sono consentite.', fuori linea. Le espressioni regolari sono consentite.',
'last_check' => 'Ultimo Controllo', 'last_check' => 'Ultimo Controllo',
'last_online' => 'Ultima volta Online', 'last_online' => 'Ultima volta Online',
'last_offline' => 'Ultima volta offline', 'last_offline' => 'Ultima volta offline',
'monitoring' => 'Monitoraggio', 'monitoring' => 'Monitoraggio',
'no_monitoring' => 'Non monitorato', 'no_monitoring' => 'Non monitorato',
'email' => 'Email', 'email' => 'Email',
'send_email' => 'Invia Email', 'send_email' => 'Invia Email',
'sms' => 'SMS', 'sms' => 'SMS',
'send_sms' => 'Invia SMS', 'send_sms' => 'Invia SMS',
'pushover' => 'Pushover', 'pushover' => 'Pushover',
'users' => 'Utenti', 'users' => 'Utenti',
'delete_title' => 'Elimina Server', 'delete_title' => 'Elimina Server',
'delete_message' => 'Sei sicuro di voler eliminare il server \'%1\'?', 'delete_message' => 'Sei sicuro di voler eliminare il server \'%1\'?',
'deleted' => 'Server eliminato.', 'deleted' => 'Server eliminato.',
'updated' => 'Server aggiornato.', 'updated' => 'Server aggiornato.',
'inserted' => 'Server aggiunto.', 'inserted' => 'Server aggiunto.',
'latency' => 'Tempo di risposta', 'latency' => 'Tempo di risposta',
'latency_max' => 'Tempo di risposta (massimo)', 'latency_max' => 'Tempo di risposta (massimo)',
'latency_min' => 'Tempo di risposta (minimo)', 'latency_min' => 'Tempo di risposta (minimo)',
'latency_avg' => 'Tempo di risposta (medio)', 'latency_avg' => 'Tempo di risposta (medio)',
'uptime' => 'Uptime', 'uptime' => 'Uptime',
'year' => 'Anno', 'year' => 'Anno',
'month' => 'Mese', 'month' => 'Mese',
'week' => 'Settimana', 'week' => 'Settimana',
'day' => 'Giorno', 'day' => 'Giorno',
'hour' => 'Ora', 'hour' => 'Ora',
'warning_threshold' => 'Soglia di allarme', 'warning_threshold' => 'Soglia di allarme',
'warning_threshold_description' => 'Numero richiesto di verifiche fallite prima di ritenerlo fuori linea.', 'warning_threshold_description' => 'Numero richiesto di verifiche fallite prima di ritenerlo fuori linea.',
'chart_last_week' => 'Ultima settimana', 'chart_last_week' => 'Ultima settimana',
'chart_history' => 'Cronologia', 'chart_history' => 'Cronologia',
// Charts date format according jqPlot date format http://www.jqplot.com/docs/files/plugins/jqplot-dateAxisRenderer-js.html 'chart_day_format' => '%d-%m-%Y',
'chart_day_format' => '%d-%m-%Y', 'chart_long_date_format' => '%d-%m-%Y %H:%M:%S',
'chart_long_date_format' => '%d-%m-%Y %H:%M:%S', 'chart_short_date_format' => '%d/%m %H:%M',
'chart_short_date_format' => '%d/%m %H:%M', 'chart_short_time_format' => '%H:%M',
'chart_short_time_format' => '%H:%M', 'warning_notifications_disabled_sms' => 'Le notifiche SMS sono disabilitate.',
'warning_notifications_disabled_sms' => 'Le notifiche SMS sono disabilitate.', 'warning_notifications_disabled_email' => 'Le notifiche Email sono disabilitate.',
'warning_notifications_disabled_email' => 'Le notifiche Email sono disabilitate.', 'warning_notifications_disabled_pushover' => 'Le notifiche Pushover sono disabilitate.',
'warning_notifications_disabled_pushover' => 'Le notifiche Pushover sono disabilitate.', 'error_server_no_match' => 'Server non trovato.',
'error_server_no_match' => 'Server non trovato.', 'error_server_label_bad_length' => 'L\'etichetta deve contenere da 1 a 255 caratteri.',
'error_server_label_bad_length' => 'L\'etichetta deve contenere da 1 a 255 caratteri.', 'error_server_ip_bad_length' => 'Il dominio / IP deve contenere da 1 a 255 caratteri.',
'error_server_ip_bad_length' => 'Il dominio / IP deve contenere da 1 a 255 caratteri.', 'error_server_ip_bad_service' => 'L\'indirizzo IP non è valido.',
'error_server_ip_bad_service' => 'L\'indirizzo IP non è valido.', 'error_server_ip_bad_website' => 'L\'indirizzo URL del sito web non è valido.',
'error_server_ip_bad_website' => 'L\'indirizzo URL del sito web non è valido.', 'error_server_type_invalid' => 'Tipologia di server selezionata non valida.',
'error_server_type_invalid' => 'Tipologia di server selezionata non valida.', 'error_server_warning_threshold_invalid' => 'La soglia d\'allarme deve essere un numero intero valido,
'error_server_warning_threshold_invalid' => 'La soglia d\'allarme deve essere un numero intero valido, superiore a zero.', superiore a zero.',
), ),
'config' => array( 'config' => array(
'general' => 'Generale', 'general' => 'Generale',
'language' => 'Linguaggio', 'language' => 'Linguaggio',
'show_update' => 'Controllare per nuovi aggiornamenti?', 'show_update' => 'Controllare per nuovi aggiornamenti?',
'email_status' => 'Permetti invio email', 'email_status' => 'Permetti invio email',
'email_from_email' => 'Indirizzo Email mittente', 'email_from_email' => 'Indirizzo Email mittente',
'email_from_name' => 'Nome Email mittente', 'email_from_name' => 'Nome Email mittente',
'email_smtp' => 'Abilita SMTP', 'email_smtp' => 'Abilita SMTP',
'email_smtp_host' => 'Server SMTP', 'email_smtp_host' => 'Server SMTP',
'email_smtp_port' => 'Porta SMTP', 'email_smtp_port' => 'Porta SMTP',
'email_smtp_security' => 'Sicurezza SMTP', 'email_smtp_security' => 'Sicurezza SMTP',
'email_smtp_security_none' => 'Nessuna', 'email_smtp_security_none' => 'Nessuna',
'email_smtp_username' => 'Nome utente SMTP', 'email_smtp_username' => 'Nome utente SMTP',
'email_smtp_password' => 'Password SMTP', 'email_smtp_password' => 'Password SMTP',
'email_smtp_noauth' => 'Lasciare vuoto per nessuna autentificazione', 'email_smtp_noauth' => 'Lasciare vuoto per nessuna autentificazione',
'sms_status' => 'Permetti invio SMS', 'sms_status' => 'Permetti invio SMS',
'sms_gateway' => 'Gateway da usare per inviare SMS', 'sms_gateway' => 'Gateway da usare per inviare SMS',
'sms_gateway_username' => 'Nome Utente Gateway', 'sms_gateway_username' => 'Nome Utente Gateway',
'sms_gateway_password' => 'Password Gateway', 'sms_gateway_password' => 'Password Gateway',
'sms_from' => 'Numero di telefono del mittente', 'sms_from' => 'Numero di telefono del mittente',
'pushover_status' => 'Permetti invio messaggi da Pushover', 'pushover_status' => 'Permetti invio messaggi da Pushover',
'pushover_description' => 'Pushover è un servizio che rende semplice ottenere notifiche in tempo reale. Vedi <a href="https://pushover.net/">il loro sito web</a> per maggiori informazioni.', 'pushover_description' => 'Pushover è un servizio che rende semplice ottenere notifiche in tempo reale. Vedi
'pushover_clone_app' => 'Clicca qui per creare la tua Pushover app', <a href="https://pushover.net/">il loro sito web</a> per maggiori informazioni.',
'pushover_api_token' => 'Pushover App API Token', 'pushover_clone_app' => 'Clicca qui per creare la tua Pushover app',
'pushover_api_token_description' => 'Prima di poter usare Pushover, devi <a href="%1$s" target="_blank" rel="noopener">registrare un\'App</a> nel loro sito web ed inserire la \'App API Token\' qui.', 'pushover_api_token' => 'Pushover App API Token',
'alert_type' => 'Seleziona quando vuoi essere notificato', 'pushover_api_token_description' => 'Prima di poter usare Pushover, devi <a href="%1$s" target="_blank"
'alert_type_description' => '<b>Cambio di Stato:</b> '. rel="noopener">registrare un\'App</a> nel loro sito web ed inserire la
'Riceverai una notifica solo quando un server cambierà stato. Quindi da online -> offline oppure da offline -> online.<br>'. \'App API Token\' qui.',
'<br /><b>Fuori linea:</b> '. 'alert_type' => 'Seleziona quando vuoi essere notificato',
'Riceverai una notifica solo quando un server andrà offline *SOLO LA PRIMA VOLTA*. Per esempio, '. 'alert_type_description' => '<b>Cambio di Stato:</b> Riceverai una notifica solo quando un server cambierà
'Se il tuo cronjob è impostato per controllare ogni 15 min e il tuo server andrà offline dalle 2AM alle 6AM. '. stato. Quindi da online -> offline oppure da offline -> online.<br><br /><b>Fuori
'Riceverai una sola notifica alle 2AM e nient\'altro.<br>'. linea:</b> Riceverai una notifica solo quando un server andrà offline *SOLO LA
'<br><b>Sempre:</b> '. PRIMA VOLTA*. Per esempio, Se il tuo cronjob è impostato per controllare ogni 15
'Riceverai una notifica ogni volta che lo script troverà un server down anche se è stato offline per ore.', min e il tuo server andrà offline dalle 2AM alle 6AM. Riceverai una sola
'alert_type_status' => 'Cambio di Stato', notifica alle 2AM e nient\'altro.<br><br><b>Sempre:</b> Riceverai una notifica
'alert_type_offline' => 'Fuori linea', ogni volta che lo script troverà un server down anche se è stato offline per
'alert_type_always' => 'Sempre', ore.',
'log_status' => 'Stato Log', 'alert_type_status' => 'Cambio di Stato',
'log_status_description' => 'Se lo Stato Log è impostato su VERO, il monitor registrerà nel log gli eventi appena le notifiche verranno inviate.', 'alert_type_offline' => 'Fuori linea',
'log_email' => 'Registra email inviate dal sistema.', 'alert_type_always' => 'Sempre',
'log_sms' => 'Registra SMS inviati dal sistema.', 'log_status' => 'Stato Log',
'log_pushover' => 'Registra messaggi Pushover inviati dal sistema', 'log_status_description' => 'Se lo Stato Log è impostato su VERO, il monitor registrerà nel log gli eventi
'updated' => 'La configurazione è stato aggiornata.', appena le notifiche verranno inviate.',
'tab_email' => 'Email', 'log_email' => 'Registra email inviate dal sistema.',
'tab_sms' => 'SMS', 'log_sms' => 'Registra SMS inviati dal sistema.',
'tab_pushover' => 'Pushover', 'log_pushover' => 'Registra messaggi Pushover inviati dal sistema',
'settings_email' => 'Impostazioni Email', 'updated' => 'La configurazione è stato aggiornata.',
'settings_sms' => 'Impostazioni SMS', 'tab_email' => 'Email',
'settings_pushover' => 'Impostazioni Pushover', 'tab_sms' => 'SMS',
'settings_notification' => 'Impostazioni Notifiche', 'tab_pushover' => 'Pushover',
'settings_log' => 'Impostazioni Log', 'settings_email' => 'Impostazioni Email',
'auto_refresh' => 'Auto-Aggiornamento', 'settings_sms' => 'Impostazioni SMS',
'auto_refresh_description' => 'settings_pushover' => 'Impostazioni Pushover',
'Auto-Aggiornamento pagina servers.<br>'. 'settings_notification' => 'Impostazioni Notifiche',
'<span class="small">'. 'settings_log' => 'Impostazioni Log',
'Tempo in secondi, se impostato a 0 la pagina non si aggiornerà.'. 'auto_refresh' => 'Auto-Aggiornamento',
'</span>', 'auto_refresh_description' => 'Auto-Aggiornamento pagina servers.<br><span class="small">Tempo in secondi, se
'seconds' => 'secondi', impostato a 0 la pagina non si aggiornerà.</span>',
'test' => 'Test', 'seconds' => 'secondi',
'test_email' => 'Un Email verrà inviata all\'indirizzo specificato nel tuo profilo.', 'test' => 'Test',
'test_sms' => 'Un SMS verrà inviato al numero di telefono specificato nel tuo profilo.', 'test_email' => 'Un Email verrà inviata all\'indirizzo specificato nel tuo profilo.',
'test_pushover' => 'Una notifica Pushover verrà inviata al dispositivo specificato nel tuo profilo.', 'test_sms' => 'Un SMS verrà inviato al numero di telefono specificato nel tuo profilo.',
'send' => 'Invia', 'test_pushover' => 'Una notifica Pushover verrà inviata al dispositivo specificato nel tuo profilo.',
'test_subject' => 'Test', 'send' => 'Invia',
'test_message' => 'Messaggio di test', 'test_subject' => 'Test',
'email_sent' => 'Email inviata', 'test_message' => 'Messaggio di test',
'email_error' => 'Errore in invio Email', 'email_sent' => 'Email inviata',
'sms_sent' => 'SMS inviato', 'email_error' => 'Errore in invio Email',
'sms_error' => 'Errore in invio SMS. %s', 'sms_sent' => 'SMS inviato',
'sms_error_nomobile' => 'Impossibile inviare SMS: nessun numero di telefono valido inserito nel tuo profilo.', 'sms_error' => 'Errore in invio SMS. %s',
'pushover_sent' => 'Notifica Pushover inviata', 'sms_error_nomobile' => 'Impossibile inviare SMS: nessun numero di telefono valido inserito nel tuo profilo.',
'pushover_error' => 'Riscontrato un errore durante l\'invio della notifica Pushover: %s', 'pushover_sent' => 'Notifica Pushover inviata',
'pushover_error_noapp' => 'Impossibile inviare la notifica: nessun \'Pushover App API Token\' inserito nella configurazione globale.', 'pushover_error' => 'Riscontrato un errore durante l\'invio della notifica Pushover: %s',
'pushover_error_nokey' => 'Impossibile inviare la notifica: nessuna \'Pushover Key\' inserita nel tuo profilo.', 'pushover_error_noapp' => 'Impossibile inviare la notifica: nessun \'Pushover App API Token\' inserito nella
'log_retention_period' => 'Periodo conservazione Log', configurazione globale.',
'log_retention_period_description' => 'Numero di giorni per la conservazione dei log delle notifiche e risultati monitoraggio. Inserire 0 (zero) per disabilitare la cancellazione dei log.', 'pushover_error_nokey' => 'Impossibile inviare la notifica: nessuna \'Pushover Key\' inserita nel tuo profilo.',
'log_retention_days' => 'giorni', 'log_retention_period' => 'Periodo conservazione Log',
), 'log_retention_period_description' => 'Numero di giorni per la conservazione dei log delle notifiche e
// for newlines in the email messages use <br> risultati monitoraggio. Inserire 0 (zero) per disabilitare la
'notifications' => array( cancellazione dei log.',
'off_sms' => 'Server \'%LABEL%\' INATTIVO: ip=%IP%, porta=%PORT%. Errore=%ERROR%', 'log_retention_days' => 'giorni',
'off_email_subject' => 'IMPORTANTE: Il Server \'%LABEL%\' è INATTIVO', ),
'off_email_body' => "Impossibile connettersi al seguente server:<br><br>Server: %LABEL%<br>IP: %IP%<br>Porta: %PORT%<br>Errore: %ERROR%<br>Data: %DATE%", 'notifications' => array(
'off_pushover_title' => 'Server \'%LABEL%\' INATTIVO', 'off_sms' => 'Server \'%LABEL%\' INATTIVO: ip=%IP%, porta=%PORT%. Errore=%ERROR%',
'off_pushover_message' => "Impossibile connettersi al seguente server:<br><br>Server: %LABEL%<br>IP: %IP%<br>Porta: %PORT%<br>Errore: %ERROR%<br>Data: %DATE%", 'off_email_subject' => 'IMPORTANTE: Il Server \'%LABEL%\' è INATTIVO',
'on_sms' => 'Server \'%LABEL%\' ATTIVO: ip=%IP%, porta=%PORT%, it was down for %LAST_OFFLINE_DURATION%', 'off_email_body' => 'Impossibile connettersi al seguente server:<br><br>Server: %LABEL%<br>IP: %IP%<br>Porta:
'on_email_subject' => 'IMPORTANTE: Server \'%LABEL%\' è ATTIVO', %PORT%<br>Errore: %ERROR%<br>Data: %DATE%',
'on_email_body' => "Server '%LABEL%' è di nuovo attivo, it was down for %LAST_OFFLINE_DURATION%:<br><br>Server: %LABEL%<br>IP: %IP%<br>Porta: %PORT%<br>Data: %DATE%", 'off_pushover_title' => 'Server \'%LABEL%\' INATTIVO',
'on_pushover_title' => 'Server \'%LABEL%\' ATTIVO', 'off_pushover_message' => 'Impossibile connettersi al seguente server:<br><br>Server: %LABEL%<br>IP:
'on_pushover_message' => "Server '%LABEL%' è di nuovo attivo, it was down for %LAST_OFFLINE_DURATION%:<br><br>Server: %LABEL%<br>IP: %IP%<br>Porta: %PORT%<br>Data: %DATE%", %IP%<br>Porta: %PORT%<br>Errore: %ERROR%<br>Data: %DATE%',
), 'on_sms' => 'Server \'%LABEL%\' ATTIVO: ip=%IP%, porta=%PORT%, it was down for %LAST_OFFLINE_DURATION%',
'login' => array( 'on_email_subject' => 'IMPORTANTE: Server \'%LABEL%\' è ATTIVO',
'welcome_usermenu' => 'Benvenuto, %user_name%', 'on_email_body' => 'Server \'%LABEL%\' è di nuovo attivo, it was down for
'title_sign_in' => 'Registrati', %LAST_OFFLINE_DURATION%:<br><br>Server: %LABEL%<br>IP: %IP%<br>Porta: %PORT%<br>Data:
'title_forgot' => 'Password dimenticata?', %DATE%',
'title_reset' => 'Reimposta la tua password', 'on_pushover_title' => 'Server \'%LABEL%\' ATTIVO',
'submit' => 'Invia', 'on_pushover_message' => 'Server \'%LABEL%\' è di nuovo attivo, it was down for
'remember_me' => 'Ricordami', %LAST_OFFLINE_DURATION%:<br><br>Server: %LABEL%<br>IP: %IP%<br>Porta:
'login' => 'Accedi', %PORT%<br>Data: %DATE%',
'logout' => 'Uscita', ),
'username' => 'Nome utente', 'login' => array(
'password' => 'Password', 'welcome_usermenu' => 'Benvenuto, %user_name%',
'password_repeat' => 'Ripeti password', 'title_sign_in' => 'Registrati',
'password_forgot' => 'Password dimenticata?', 'title_forgot' => 'Password dimenticata?',
'password_reset' => 'Reimposta password', 'title_reset' => 'Reimposta la tua password',
'password_reset_email_subject' => 'Reimpossta la tua password per PHP Server Monitor', 'submit' => 'Invia',
'password_reset_email_body' => 'Usa il seguente link per reimpostare la tua password. Ricordati che scade tra un ora.<br><br>%link%', 'remember_me' => 'Ricordami',
'error_user_incorrect' => 'Il nome utente inserito non è staot trovato.', 'login' => 'Accedi',
'error_login_incorrect' => 'Le informazioni sono errate.', 'logout' => 'Uscita',
'error_login_passwords_nomatch' => 'Le password inserite non sono valide.', 'username' => 'Nome utente',
'error_reset_invalid_link' => 'Il link di reimpostazione password non è valido.', 'password' => 'Password',
'success_password_forgot' => 'Ti è stata inviata un\'Email con le istruzioni da seguire per reimpostare la tua password.', 'password_repeat' => 'Ripeti password',
'success_password_reset' => 'La tua password è stata correttamente reimpostata. Ora puoi effettuare l\'accesso.', 'password_forgot' => 'Password dimenticata?',
), 'password_reset' => 'Reimposta password',
'error' => array( 'password_reset_email_subject' => 'Reimpossta la tua password per PHP Server Monitor',
'401_unauthorized' => 'Non autorizzato', 'password_reset_email_body' => 'Usa il seguente link per reimpostare la tua password. Ricordati che scade tra
'401_unauthorized_description' => 'Non hai i permessi necessari per visualizzare questa pagina.', un ora.<br><br>%link%',
), 'error_user_incorrect' => 'Il nome utente inserito non è staot trovato.',
'error_login_incorrect' => 'Le informazioni sono errate.',
'error_login_passwords_nomatch' => 'Le password inserite non sono valide.',
'error_reset_invalid_link' => 'Il link di reimpostazione password non è valido.',
'success_password_forgot' => 'Ti è stata inviata un\'Email con le istruzioni da seguire per reimpostare la
tua password.',
'success_password_reset' => 'La tua password è stata correttamente reimpostata. Ora puoi effettuare
l\'accesso.',
),
'error' => array(
'401_unauthorized' => 'Non autorizzato',
'401_unauthorized_description' => 'Non hai i permessi necessari per visualizzare questa pagina.',
),
); );

View File

@ -1,4 +1,5 @@
<?php <?php
/** /**
* PHP Server Monitor * PHP Server Monitor
* Monitor your servers and websites. * Monitor your servers and websites.
@ -26,371 +27,433 @@
**/ **/
$sm_lang = array( $sm_lang = array(
'name' => '日本語 - Japanese', 'name' => '日本語 - Japanese',
'locale' => array('ja_JP.UTF-8', 'ja_JP', 'Japan', 'Japanese'), 'locale' => array(
'locale_tag' => 'ja', '0' => 'ja_JP.UTF-8',
'locale_dir' => 'ltr', '1' => 'ja_JP',
'system' => array( '2' => 'Japan',
'title' => 'サーバーモニター', '3' => 'Japanese',
'install' => 'インストール', ),
'action' => 'アクション', 'locale_tag' => 'ja',
'save' => 'セーブ', 'locale_dir' => 'ltr',
'edit' => '編集', 'system' => array(
'delete' => '削除', 'title' => 'サーバーモニター',
'date' => '日時', 'install' => 'インストール',
'message' => 'メッセージ', 'action' => 'アクション',
'yes' => 'はい', 'save' => 'セーブ',
'no' => 'いいえ', 'edit' => '編集',
'insert' => '挿入', 'delete' => '削除',
'add_new' => '新規に追加', 'date' => '日時',
'update_available' => '新しいバージョン({version}) がリリースされています。ここから入手可能です: <a href="https://github.com/phpservermon/phpservermon/releases/latest" target="_blank" rel="noopener">http://www.phpservermonitor.org</a>.', 'message' => 'メッセージ',
'back_to_top' => 'トップに戻る', 'yes' => 'はい',
'go_back' => '戻る', 'no' => 'いいえ',
'ok' => 'OK', 'insert' => '挿入',
'bad' => 'よくない', 'add_new' => '新規に追加',
'cancel' => 'キャンセル', 'update_available' => '新しいバージョン({version})
'none' => 'なし', がリリースされています。ここから入手可能です: <a
'activate' => '有効化', href="https://github.com/phpservermon/phpservermon/releases/latest" target="_blank"
'advanced' => '高度な設定', rel="noopener">http://www.phpservermonitor.org</a>.',
// date/time format according the strftime php function format parameter http://php.net/manual/function.strftime.php 'back_to_top' => 'トップに戻る',
'short_day_format' => '%B %e', 'go_back' => '戻る',
'long_day_format' => '%B %e, %Y', 'ok' => 'OK',
'yesterday_format' => '昨日の %k:%M', 'bad' => 'よくない',
'other_day_format' => '%A の %k:%M', 'cancel' => 'キャンセル',
'never' => 'なし', 'none' => 'なし',
'hours_ago' => '%d 時間前', 'activate' => '有効化',
'an_hour_ago' => '1時間くらい前', 'short_day_format' => '%B %e',
'minutes_ago' => '%d 分前', 'long_day_format' => '%B %e, %Y',
'a_minute_ago' => '1分くらい前', 'yesterday_format' => '昨日の %k:%M',
'seconds_ago' => '%d 秒前', 'other_day_format' => '%A の %k:%M',
'a_second_ago' => '1秒', 'never' => 'なし',
'year' => '年', 'hours_ago' => '%d 時間前',
'years' => '年', 'an_hour_ago' => '1時間くらい前',
'month' => '月', 'minutes_ago' => '%d 分前',
'months' => '月', 'a_minute_ago' => '1分くらい前',
'day' => '日', 'seconds_ago' => '%d 秒前',
'days' => '日', 'a_second_ago' => '1秒',
'hour' => '時間', 'year' => '年',
'hours' => '時間', 'years' => '年',
'minute' => '分', 'month' => '月',
'minutes' => '分', 'months' => '月',
'second' => '秒', 'day' => '日',
'seconds' => '秒', 'days' => '日',
'online' => 'オンライン', 'hour' => '時間',
'offline' => 'オフライン', 'hours' => '時間',
), 'minute' => '分',
'menu' => array( 'minutes' => '分',
'config' => '設定', 'second' => '秒',
'server' => 'サーバー', 'seconds' => '秒',
'server_log' => 'ログ', ),
'server_status' => 'ステータス', 'menu' => array(
'server_update' => 'アップデート', 'config' => '設定',
'user' => 'ユーザー', 'server' => 'サーバー',
'help' => 'ヘルプ', 'server_log' => 'ログ',
), 'server_status' => 'ステータス',
'users' => array( 'server_update' => 'アップデート',
'user' => 'ユーザー', 'user' => 'ユーザー',
'name' => '名前', 'help' => 'ヘルプ',
'user_name' => 'ユーザーネーム', ),
'password' => 'パスワード', 'users' => array(
'password_repeat' => 'パスワードを繰り返す', 'user' => 'ユーザー',
'password_leave_blank' => '空白のままにしておく', 'name' => '名前',
'level' => 'レベル', 'user_name' => 'ユーザーネーム',
'level_10' => '管理者(Administrator)', 'password' => 'パスワード',
'level_20' => 'ユーザー(User)', 'password_repeat' => 'パスワードを繰り返す',
'level_description' => '<b>管理者(Administrator)</b> はフルアクセス権があります:サーバーの管理、 ユーザーとグローバル設定を変更できます。<br><b>ユーザー(Users)</b>は、割り当てられたサーバーのアップデータのみを表示して実行できます。', 'password_leave_blank' => '空白のままにしておく',
'mobile' => 'モバイル', 'level' => 'レベル',
'email' => 'メールアドレス', 'level_10' => '管理者(Administrator)',
'pushover' => 'Pushover', 'level_20' => 'ユーザー(User)',
'pushover_description' => 'Pushoverサービスは、リアルタイムで通知を受け取るのが簡単にできます。詳細についてはこちらをご覧ください <a href="https://pushover.net/" target="_blank" rel="noopener">https://pushover.net/</a>', 'level_description' => '<b>管理者(Administrator)</b>
'pushover_key' => 'Pushoverキー', はフルアクセス権があります:サーバーの管理、
'pushover_device' => 'Pushoverデバイス', ユーザーとグローバル設定を変更できます。<br><b>ユーザー(Users)</b>は、割り当てられたサーバーのアップデータのみを表示して実行できます。',
'pushover_device_description' => '指定したデバイスに送信します。空欄ですべてのデバイスに送信できます。', 'mobile' => 'モバイル',
'telegram' => 'Telegram', 'email' => 'メールアドレス',
'telegram_description' => '<a href="https://telegram.org/" target="_blank" rel="noopener">Telegram</a> はチャットアプリで、簡単にリアルタイム通知を受け取ることができます。 <a href="http://docs.phpservermonitor.org/" target="_blank" rel="noopener">ドキュメント</a> で詳しい情報、インストールの方法を知りましょう。', 'pushover' => 'Pushover',
'telegram_chat_id' => 'Telegram チャットID', 'pushover_description' => 'Pushoverサービスは、リアルタイムで通知を受け取るのが簡単にできます。詳細についてはこちらをご覧ください
'telegram_chat_id_description' => 'メッセージは対応するチャットへ送信されます。', <a href="https://pushover.net/" target="_blank"
'telegram_get_chat_id' => 'ここをクリックしてあなたのチャットIDを取得します。', rel="noopener">https://pushover.net/</a>',
'activate_telegram' => 'Telegramの通知を有効化', 'pushover_key' => 'Pushoverキー',
'activate_telegram_description' => '指定されたチャットIDにTelegram通知を送信できるようにします。 この許可がなければ、Telegramはあなたに通知を送信することができません。', 'pushover_device' => 'Pushoverデバイス',
'telegram_bot_username_found' => 'ボットが見つかりました!<br><a href="%s" target="_blank"><button class="btn btn-primary">次のステップ</button></a> <br>これにより、ボットとあなたのチャットが開かれます。ここであなたは、 /start を入力する必要があります。', 'pushover_device_description' => '指定したデバイスに送信します。空欄ですべてのデバイスに送信できます。',
'telegram_bot_username_error_token' => '401 - 未認証。 APIトークンが有効であることを確認してください。', 'telegram' => 'Telegram',
'telegram_bot_error' => 'Telegram通知を有効化中にエラーが発生: %s', 'telegram_description' => '<a href="https://telegram.org/" target="_blank" rel="noopener">Telegram</a>
'delete_title' => 'ユーザーを削除', はチャットアプリで、簡単にリアルタイム通知を受け取ることができます。
'delete_message' => '本当にユーザーを削除しますか?: \'%1\'?', <a href="http://docs.phpservermonitor.org/" target="_blank"
'deleted' => 'ユーザーを削除しました。', rel="noopener">ドキュメント</a>
'updated' => 'ユーザー情報を更新しました。', で詳しい情報、インストールの方法を知りましょう。',
'inserted' => 'ユーザーを追加しました。', 'telegram_chat_id' => 'Telegram チャットID',
'profile' => 'プロフィール', 'telegram_chat_id_description' => 'メッセージは対応するチャットへ送信されます。',
'profile_updated' => 'あなたのプロフィールは更新されました。', 'telegram_get_chat_id' => 'ここをクリックしてあなたのチャットIDを取得します。',
'error_user_name_bad_length' => 'ユーザーネームは264文字以内で入力してください。', 'activate_telegram' => 'Telegramの通知を有効化',
'error_user_name_invalid' => 'ユーザー名は、アルファベット、数字とアンダーバーのみを含むことができます ドット(.)。', 'activate_telegram_description' => '指定されたチャットIDにTelegram通知を送信できるようにします。
'error_user_name_exists' => '登録しようとしたユーザー名は既にデータベースに登録されています。', この許可がなければ、Telegramはあなたに通知を送信することができません。',
'error_user_email_bad_length' => 'メールアドレスは5255文字以内で入力してください。', 'telegram_bot_username_found' => 'ボットが見つかりました!<br><a href="%s" target="_blank"><button
'error_user_email_invalid' => 'メールアドレスが無効です。', class="btn btn-primary">次のステップ</button></a>
'error_user_level_invalid' => '指定したレベルが無効です。', <br>これにより、ボットとあなたのチャットが開かれます。ここであなたは、
'error_user_no_match' => 'このユーザー名は存在しません。', /start を入力する必要があります。',
'error_user_password_invalid' => 'パスワードが無効です。', 'telegram_bot_username_error_token' => '401 - 未認証。
'error_user_password_no_match' => '確認のパスワードが一致しません。', APIトークンが有効であることを確認してください。',
), 'telegram_bot_error' => 'Telegram通知を有効化中にエラーが発生: %s',
'log' => array( 'delete_title' => 'ユーザーを削除',
'title' => 'ログエントリー', 'delete_message' => '本当にユーザーを削除しますか?: \'%1\'?',
'type' => 'タイプ', 'deleted' => 'ユーザーを削除しました。',
'status' => 'ステータス', 'updated' => 'ユーザー情報を更新しました。',
'email' => 'メール', 'inserted' => 'ユーザーを追加しました。',
'sms' => 'SMS', 'profile' => 'プロフィール',
'pushover' => 'Pushover', 'profile_updated' => 'あなたのプロフィールは更新されました。',
'telegram' => 'Telegram', 'error_user_name_bad_length' => 'ユーザーネームは264文字以内で入力してください。',
'no_logs' => 'ログがありません', 'error_user_name_invalid' => 'ユーザー名は、アルファベット、数字とアンダーバーのみを含むことができます
'clear' => 'ログをクリアする', ドット(.)。',
'delete_title' => 'ログを削除する', 'error_user_name_exists' => '登録しようとしたユーザー名は既にデータベースに登録されています。',
'delete_message' => 'すべてのログを削除してもよろしいですか?', 'error_user_email_bad_length' => 'メールアドレスは5255文字以内で入力してください。',
), 'error_user_email_invalid' => 'メールアドレスが無効です。',
'servers' => array( 'error_user_level_invalid' => '指定したレベルが無効です。',
'server' => 'サーバー', 'error_user_no_match' => 'このユーザー名は存在しません。',
'status' => 'ステータス', 'error_user_password_invalid' => 'パスワードが無効です。',
'label' => 'ラベル', 'error_user_password_no_match' => '確認のパスワードが一致しません。',
'domain' => 'ドメイン/IP', ),
'timeout' => 'タイムアウト', 'log' => array(
'timeout_description' => '指定した秒数、サーバーのレスポンスを待ちます。', 'title' => 'ログエントリー',
'authentication_settings' => '認証設定', 'type' => 'タイプ',
'optional' => 'オプション', 'status' => 'ステータス',
'website_username' => 'ユーザー名', 'email' => 'メール',
'website_username_description' => 'ユーザー名でウェブサイトにアクセスします。 (サポートはApache認証のみです。)', 'sms' => 'SMS',
'website_password' => 'パスワード', 'pushover' => 'Pushover',
'website_password_description' => 'パスワードはサイトのアクセスに使用します。パスワードは暗号化されてデータベースへ保存されます。', 'telegram' => 'Telegram',
'fieldset_monitoring' => 'モニター', 'no_logs' => 'ログがありません',
'fieldset_permissions' => '権限', 'clear' => 'ログをクリアする',
'port' => 'ポート', 'delete_title' => 'ログを削除する',
'custom_port' => 'カスタムポート', 'delete_message' => 'すべてのログを削除してもよろしいですか?',
'popular_ports' => '主要なポート', ),
'request_method' => 'リクエストメソッド', 'servers' => array(
'custom_request_method' => 'カスタムリクエストメソッド', 'server' => 'サーバー',
'popular_request_methods' => '主要なリクエストメソッド', 'status' => 'ステータス',
'post_field' => 'Postフィールド', 'label' => 'ラベル',
'post_field_description' => 'このデータは上記のリクエストメソッドを使用する際に使用されます。 例: param1=val1&amp;param2=val2&...', 'domain' => 'ドメイン/IP',
'please_select' => '選択してください', 'timeout' => 'タイムアウト',
'type' => 'タイプ', 'timeout_description' => '指定した秒数、サーバーのレスポンスを待ちます。',
'type_website' => 'ウェブサイト', 'authentication_settings' => '認証設定',
'type_service' => 'サービス', 'optional' => 'オプション',
'type_ping' => 'Ping', 'website_username' => 'ユーザー名',
'pattern' => '文字列/パターンを検索', 'website_username_description' => 'ユーザー名でウェブサイトにアクセスします。
'pattern_description' => '指定した文字列/パターンが存在しない場合は、「オフライン」としてマークされます。また、標準的な計算式は許可されています。', (サポートはApache認証のみです。)',
'pattern_online' => 'パターンがウェブサイトであることを示すパターン: ', 'website_password' => 'パスワード',
'pattern_online_description' => 'オンライン: このパターンがウェブサイトにない場合は、オンラインとしてマークされます。 Offline: このパターンがウェブサイトにない場合は、オフラインとしてマークされます。', 'website_password_description' => 'パスワードはサイトのアクセスに使用します。パスワードは暗号化されてデータベースへ保存されます。',
'redirect_check' => '別のドメインへのリダイレクト: ', 'fieldset_monitoring' => 'モニター',
'redirect_check_description' => '別のドメインにリダイレクトするのは通常は悪い兆候です。', 'fieldset_permissions' => '権限',
'allow_http_status' => 'HTTPステータスコードを許可する', 'port' => 'ポート',
'allow_http_status_description' => 'ウェブサイトをオンラインにマークします。 400未満のステータスコードはデフォルトでオンラインとマークされます。 | で区切ります。 例: 401|403.', 'custom_port' => 'カスタムポート',
'header' => 'ヘッダー', 'popular_ports' => '主要なポート',
'header_name_description' => 'ヘッダー名(大文字小文字を区別します)', 'request_method' => 'リクエストメソッド',
'header_value_description' => 'ヘッダーの値。正規表現が利用可能です。', 'custom_request_method' => 'カスタムリクエストメソッド',
'last_check' => '最後の確認', 'popular_request_methods' => '主要なリクエストメソッド',
'last_offline' => '最後のオフライン', 'post_field' => 'Postフィールド',
'last_online' => '最後のオンライン', 'post_field_description' => 'このデータは上記のリクエストメソッドを使用する際に使用されます。
'last_output' => '最後のポジティブの出力', : param1=val1&amp;param2=val2&...',
'last_error' => '最後のエラー', 'please_select' => '選択してください',
'last_error_output' => '最後のエラー出力', 'type' => 'タイプ',
'monitoring' => 'モニタリング', 'type_website' => 'ウェブサイト',
'no_monitoring' => 'モニタリングなし', 'type_service' => 'サービス',
'email' => 'メール', 'type_ping' => 'Ping',
'send_email' => 'メールを送信', 'pattern' => '文字列/パターンを検索',
'sms' => 'SMS', 'pattern_description' => '指定した文字列/パターンが存在しない場合は、「オフライン」としてマークされます。また、標準的な計算式は許可されています。',
'send_sms' => 'SMSを送信', 'pattern_online' => 'パターンがウェブサイトであることを示すパターン: ',
'pushover' => 'Pushover', 'pattern_online_description' => 'オンラインこのパターンがWebサイトにある場合、オンラインとしてマークされます。
'send_pushover' => 'Pushover通知を送信', オフラインこのパターンがWebサイトにない場合、オフラインとしてマークされます。',
'telegram' => 'Telegram', 'redirect_check' => '別のドメインへのリダイレクト: ',
'send_telegram' => 'Telegram通知を送信', 'redirect_check_description' => '別のドメインにリダイレクトするのは通常は悪い兆候です。',
'users' => 'ユーザー', 'allow_http_status' => 'HTTPステータスコードを許可する',
'delete_title' => 'サーバーを削除', 'allow_http_status_description' => 'ウェブサイトをオンラインにマークします。
'delete_message' => '本当にこのサーバーを削除しますか?: \'%1\'?', 400未満のステータスコードはデフォルトでオンラインとマークされます。
'deleted' => 'サーバーを削除しました。', | で区切ります。 : 401|403.',
'updated' => 'サーバーを更新しました。', 'header_name_description' => 'ヘッダー名(大文字小文字を区別します)',
'inserted' => 'サーバーを追加しました。', 'header_value_description' => 'ヘッダーの値。正規表現が利用可能です。',
'latency' => 'レイテンシ', 'last_check' => '最後の確認',
'latency_max' => 'レイテンシ(最大)', 'last_online' => '最後のオンライン',
'latency_min' => 'レイテンシ(最小)', 'last_offline' => '最後のオフライン',
'latency_avg' => 'レイテンシ(アベレージ)', 'last_output' => '最後のポジティブの出力',
'uptime' => '稼働時間', 'last_error' => '最後のエラー',
'year' => '年', 'last_error_output' => '最後のエラー出力',
'month' => '月', 'monitoring' => 'モニタリング',
'week' => '週間', 'no_monitoring' => 'モニタリングなし',
'day' => '日', 'email' => 'メール',
'hour' => '時間', 'send_email' => 'メールを送信',
'warning_threshold' => '警告閾値', 'sms' => 'SMS',
'warning_threshold_description' => 'オフラインとしてマークされる前に失敗したチェックの数', 'send_sms' => 'SMSを送信',
'chart_last_week' => '最後の週間', 'pushover' => 'Pushover',
'chart_history' => '履歴', 'send_pushover' => 'Pushover通知を送信',
// Charts date format according jqPlot date format http://www.jqplot.com/docs/files/plugins/jqplot-dateAxisRenderer-js.html 'telegram' => 'Telegram',
'chart_day_format' => '%Y-%m-%d', 'send_telegram' => 'Telegram通知を送信',
'chart_long_date_format' => '%Y-%m-%d %H:%M:%S', 'users' => 'ユーザー',
'chart_short_date_format' => '%m/%d %H:%M', 'delete_title' => 'サーバーを削除',
'chart_short_time_format' => '%H:%M', 'delete_message' => '本当にこのサーバーを削除しますか?: \'%1\'?',
'warning_notifications_disabled_sms' => 'SMS 通知は無効です。', 'deleted' => 'サーバーを削除しました。',
'warning_notifications_disabled_email' => 'メール通知は無効です。', 'updated' => 'サーバーを更新しました。',
'warning_notifications_disabled_pushover' => 'Pushover通知は無効です。', 'inserted' => 'サーバーを追加しました。',
'warning_notifications_disabled_telegram' => 'Telegram通知は無効です。', 'latency' => 'レイテンシ',
'error_server_no_match' => 'サーバーが見つかりません', 'latency_max' => 'レイテンシ(最大)',
'error_server_label_bad_length' => 'ラベルは1255文字以内で入力してください。', 'latency_min' => 'レイテンシ(最小)',
'error_server_ip_bad_length' => 'ドメイン/IPは1255文字以内で入力してください。', 'latency_avg' => 'レイテンシ(アベレージ)',
'error_server_ip_bad_service' => '無効なIPです。', 'uptime' => '稼働時間',
'error_server_ip_bad_website' => 'ウェブサイトのURLが無効です。', 'year' => '年',
'error_server_type_invalid' => '選択されたサーバータイプが無効です。', 'month' => '月',
'error_server_warning_threshold_invalid' => '警告のしきい値は、0より大きい有効な整数でなければなりません。', 'week' => '週間',
), 'day' => '日',
'config' => array( 'hour' => '時間',
'general' => '基本', 'warning_threshold' => '警告閾値',
'language' => '言語', 'warning_threshold_description' => 'オフラインとしてマークされる前に失敗したチェックの数',
'show_update' => 'アップデートをチェックしますか?', 'chart_last_week' => '最後の週間',
'password_encrypt_key' => '暗号鍵パスワード', 'chart_history' => '履歴',
'password_encrypt_key_note' => 'このキーは、Webサイトにアクセスするためにサーバーに保存されているパスワードを暗号化するために使用されます。 キーが変更された場合、保存されたパスワードは無効です!', 'chart_day_format' => '%Y-%m-%d',
'proxy' => 'プロキシを有効化する', 'chart_long_date_format' => '%Y-%m-%d %H:%M:%S',
'proxy_url' => 'プロキシのURL', 'chart_short_date_format' => '%m/%d %H:%M',
'proxy_user' => 'プロキシのユーザー名', 'chart_short_time_format' => '%H:%M',
'proxy_password' => 'プロキシのパスワード', 'warning_notifications_disabled_sms' => 'SMS 通知は無効です。',
'email_status' => 'メールの送信を許可', 'warning_notifications_disabled_email' => 'メール通知は無効です。',
'email_from_email' => 'アドレスからのメール', 'warning_notifications_disabled_pushover' => 'Pushover通知は無効です。',
'email_from_name' => '名前からのメール', 'warning_notifications_disabled_telegram' => 'Telegram通知は無効です。',
'email_smtp' => 'SMTPを有効にしますか', 'error_server_no_match' => 'サーバーが見つかりません',
'email_smtp_host' => 'SMTPホスト', 'error_server_label_bad_length' => 'ラベルは1255文字以内で入力してください。',
'email_smtp_port' => 'SMTPポート', 'error_server_ip_bad_length' => 'ドメイン/IPは1255文字以内で入力してください。',
'email_smtp_security' => 'SMTPセキュリティ', 'error_server_ip_bad_service' => '無効なIPです。',
'email_smtp_security_none' => 'なし', 'error_server_ip_bad_website' => 'ウェブサイトのURLが無効です。',
'email_smtp_username' => 'SMTPのユーザー名', 'error_server_type_invalid' => '選択されたサーバータイプが無効です。',
'email_smtp_password' => 'SMTPのパスワード', 'error_server_warning_threshold_invalid' => '警告のしきい値は、0より大きい有効な整数でなければなりません。',
'email_smtp_noauth' => '空白で認証なしになります', ),
'sms_status' => 'テキストメッセージの送信を許可する', 'config' => array(
'sms_gateway' => 'このゲートウェイは、メッセージの送信に使用されます。', 'general' => '基本',
'sms_gateway_username' => 'ゲートウェイのユーザー名', 'language' => '言語',
'sms_gateway_password' => 'ゲートウェイのパスワード', 'show_update' => 'アップデートをチェックしますか?',
'sms_from' => '送信者の電話番号:', 'password_encrypt_key' => '暗号鍵パスワード',
'pushover_status' => 'Pushoverのメッセージを送信することを許可する', 'password_encrypt_key_note' => 'このキーは、Webサイトにアクセスするためにサーバーに保存されているパスワードを暗号化するために使用されます。
'pushover_description' => 'Pushoverは、リアルタイムの通知を簡単に取得できるサービスです。 詳細については、 キーが変更された場合、保存されたパスワードは無効です!',
href="https://pushover.net/">ウェブサイト</a>をご覧ください。', 'proxy' => 'プロキシを有効化する',
'pushover_clone_app' => 'クリックでPushoverアプリケーションを作成できます。', 'proxy_url' => 'プロキシのURL',
'pushover_api_token' => 'PushoverアプリケーションのAPIトークン', 'proxy_user' => 'プロキシのユーザー名',
'pushover_api_token_description' => 'Pushoverを使用するには、事前にウェブサイトで<a href="%1$s" target="_blank" rel="noopener">アプリを登録</a>してApp APIトークンを入力する必要があります。', 'proxy_password' => 'プロキシのパスワード',
'telegram_status' => 'Telegramメッセージの送信を許可する', 'email_status' => 'メールの送信を許可',
'telegram_description' => '<a href="https://telegram.org/" target="_blank" rel="noopener">Telegram</a> はチャットアプリで、簡単にリアルタイム通知を受け取ることができます。 <a href="http://docs.phpservermonitor.org/" target="_blank" rel="noopener">documentation</a> で詳しい情報、インストールの方法を知りましょう。', 'email_from_email' => 'アドレスからのメール',
'telegram_api_token' => 'Telegram APIトークン', 'email_from_name' => '名前からのメール',
'telegram_api_token_description' => 'Telegramを使用する前に、APIトークンを取得する必要があります。 <a href="http://docs.phpservermonitor.org/" target="_blank" rel="noopener">documentation</a> でヘルプを参照してください。', 'email_smtp' => 'SMTPを有効にしますか',
'alert_type' => '通知するタイミングを選択', 'email_smtp_host' => 'SMTPホスト',
'alert_type_description' => '<b>状態の変化:</b> '. 'email_smtp_port' => 'SMTPポート',
'サーバーのステータスが変更されたときに通知を受け取ります。 だからオンライン -> オフラインまたはオフライン -> オンライン。<br>'. 'email_smtp_security' => 'SMTPセキュリティ',
'<br /><b>オフライン:</b> '. 'email_smtp_security_none' => 'なし',
'サーバーが*初めての間*オフラインになったときに通知を受け取ります。 例えば、'. 'email_smtp_username' => 'SMTPのユーザー名',
'あなたのcronの仕事は15分ごとです。あなたのサーバーは午前1時にダウンし、午前6時まで停止します。 '. 'email_smtp_password' => 'SMTPのパスワード',
'午前1時に1つの通知が届きます。<br>'. 'email_smtp_noauth' => '空白で認証なしになります',
'<br><b>常に:</b> '. 'sms_status' => 'テキストメッセージの送信を許可する',
'サイトが数時間にわたってオフラインになっていても、スクリプトが実行され、サイトが停止するたびに通知を受け取ります。', 'sms_gateway' => 'このゲートウェイは、メッセージの送信に使用されます。',
'alert_type_status' => '状況の変化', 'sms_gateway_username' => 'ゲートウェイのユーザー名',
'alert_type_offline' => 'オフライン', 'sms_gateway_password' => 'ゲートウェイのパスワード',
'alert_type_always' => '常に', 'sms_from' => '送信者の電話番号:',
'pushover_status' => 'Pushoverのメッセージを送信することを許可する',
'pushover_description' => 'Pushoverは、リアルタイムの通知を簡単に取得できるサービスです。
詳細については、
href="https://pushover.net/">ウェブサイト</a>をご覧ください。',
'pushover_clone_app' => 'クリックでPushoverアプリケーションを作成できます。',
'pushover_api_token' => 'PushoverアプリケーションのAPIトークン',
'pushover_api_token_description' => 'Pushoverを使用するには、事前にウェブサイトで<a
href="%1$s" target="_blank"
rel="noopener">アプリを登録</a>してApp
APIトークンを入力する必要があります。',
'telegram_status' => 'Telegramメッセージの送信を許可する',
'telegram_description' => '<a href="https://telegram.org/" target="_blank" rel="noopener">Telegram</a>
はチャットアプリで、簡単にリアルタイム通知を受け取ることができます。
<a href="http://docs.phpservermonitor.org/" target="_blank"
rel="noopener">documentation</a>
で詳しい情報、インストールの方法を知りましょう。',
'telegram_api_token' => 'Telegram APIトークン',
'telegram_api_token_description' => 'Telegramを使用する前に、APIトークンを取得する必要があります。
<a href="http://docs.phpservermonitor.org/" target="_blank"
rel="noopener">documentation</a>
でヘルプを参照してください。',
'alert_type' => '通知するタイミングを選択',
'alert_type_description' => '<b>状態の変化:</b>
サーバーのステータスが変更されたときに通知を受け取ります。
だからオンライン -> オフラインまたはオフライン ->
オンライン。<br><br /><b>オフライン:</b>
サーバーが*初めての間*オフラインになったときに通知を受け取ります。
例えば、あなたのcronの仕事は15分ごとです。あなたのサーバーは午前1時にダウンし、午前6時まで停止します。
午前1時に1つの通知が届きます。<br><br><b>常に:</b>
サイトが数時間にわたってオフラインになっていても、スクリプトが実行され、サイトが停止するたびに通知を受け取ります。',
'alert_type_status' => '状況の変化',
'alert_type_offline' => 'オフライン',
'alert_type_always' => '常に',
'combine_notifications' => '通知の結合', 'combine_notifications' => '通知の結合',
'combine_notifications_description' => '通知を1つの通知にまとめて通知の量を削減します。(これはSMS通知には影響しません。)', 'combine_notifications_description' => '通知を1つの通知にまとめて通知の量を削減します。(これはSMS通知には影響しません。)',
'alert_proxy' => '有効にしても、プロキシはサービスに使用されません', 'alert_proxy' => '有効にしても、プロキシはサービスに使用されません',
'alert_proxy_url' => 'フォーマット: ホスト:ポート', 'alert_proxy_url' => 'フォーマット: ホスト:ポート',
'log_status' => 'ログステータス', 'log_status' => 'ログステータス',
'log_status_description' => 'ログステータスがTRUEに設定されている場合、モニターは通知設定が渡されるたびにイベントを記録します。', 'log_status_description' => 'ログステータスがTRUEに設定されている場合、モニターは通知設定が渡されるたびにイベントを記録します。',
'log_email' => 'スクリプトによって送信された電子メールを記録する', 'log_email' => 'スクリプトによって送信された電子メールを記録する',
'log_sms' => 'スクリプトによって送信されたテキストメッセージを記録する', 'log_sms' => 'スクリプトによって送信されたテキストメッセージを記録する',
'log_pushover' => 'スクリプトによって送信されたPushoverメッセージを記録する', 'log_pushover' => 'スクリプトによって送信されたPushoverメッセージを記録する',
'log_telegram' => 'スクリプトによって送信されたTelegramメッセージを記録する', 'log_telegram' => 'スクリプトによって送信されたTelegramメッセージを記録する',
'updated' => '設定は更新されました。', 'updated' => '設定は更新されました。',
'tab_email' => 'メール', 'tab_email' => 'メール',
'tab_sms' => 'SMS', 'tab_sms' => 'SMS',
'tab_pushover' => 'Pushover', 'tab_pushover' => 'Pushover',
'tab_telegram' => 'Telegram', 'tab_telegram' => 'Telegram',
'settings_email' => 'メール設定', 'settings_email' => 'メール設定',
'settings_sms' => 'テキストメッセージ設定', 'settings_sms' => 'テキストメッセージ設定',
'settings_pushover' => 'Pushover設定', 'settings_pushover' => 'Pushover設定',
'settings_telegram' => 'Telegram設定', 'settings_telegram' => 'Telegram設定',
'settings_notification' => '通知設定', 'settings_notification' => '通知設定',
'settings_log' => 'ログ設定', 'settings_log' => 'ログ設定',
'settings_proxy' => 'プロキシ設定', 'settings_proxy' => 'プロキシ設定',
'auto_refresh' => '自動更新', 'auto_refresh' => '自動更新',
'auto_refresh_description' => 'auto_refresh_description' => 'サーバーページを自動更新します。<br><span
'サーバーページを自動更新します。<br>'. class="small">時間を秒で指定し、0に設定すると更新しません。</span>',
'<span class="small">'. 'seconds' => '秒',
'時間を秒で指定し、0に設定すると更新しません。'. 'test' => 'テスト',
'</span>', 'test_email' => 'あなたのユーザープロフィールで指定されたアドレスに電子メールが送信されます。',
'seconds' => '秒', 'test_sms' => 'あなたのユーザープロフィールで指定された電話番号にSMSが送信されます。',
'test' => 'テスト', 'test_pushover' => 'あなたのユーザープロフィールで指定されたユーザー
'test_email' => 'あなたのユーザープロフィールで指定されたアドレスに電子メールが送信されます。', キー/デバイスにPushover通知が送信されます。',
'test_sms' => 'あなたのユーザープロフィールで指定された電話番号にSMSが送信されます。', 'test_telegram' => 'あなたのユーザープロフィールで指定されたチャットIDにTelegram通知が送信されます。',
'test_pushover' => 'あなたのユーザープロフィールで指定されたユーザー キー/デバイスにPushover通知が送信されます。', 'send' => '送信',
'test_telegram' => 'あなたのユーザープロフィールで指定されたチャットIDにTelegram通知が送信されます。', 'test_subject' => 'テスト',
'send' => '送信', 'test_message' => 'これはテストメッセージです',
'test_subject' => 'テスト', 'email_sent' => 'メールが送信されました',
'test_message' => 'これはテストメッセージです', 'email_error' => 'メールを送信中にエラーが発生しました',
'email_sent' => 'メールが送信されました', 'sms_sent' => 'SMSが送信されました',
'email_error' => 'メールを送信中にエラーが発生しました', 'sms_error' => 'SMSを送信中にエラーが発生しました %s',
'sms_sent' => 'SMSが送信されました', 'sms_error_nomobile' => 'テストSMSの送信に失敗:
'sms_error' => 'SMSを送信中にエラーが発生しました %s', あなたのプロフィールに有効な電話番号がありません',
'sms_error_nomobile' => 'テストSMSの送信に失敗: あなたのプロフィールに有効な電話番号がありません', 'pushover_sent' => 'Pushover通知が送信されました',
'pushover_sent' => 'Pushover通知が送信されました', 'pushover_error' => 'Pushover通知を送信中にエラーが発生しました: %s',
'pushover_error' => 'Pushover通知を送信中にエラーが発生しました: %s', 'pushover_error_noapp' => 'テスト通知の送信に失敗しましたグローバル設定にAPIトークンがありません',
'pushover_error_noapp' => 'テスト通知の送信に失敗しましたグローバル設定にAPIトークンがありません', 'pushover_error_nokey' => 'テスト通知の送信に失敗しましたあなたのプロフィールに有効なPushoverキーがありません',
'pushover_error_nokey' => 'テスト通知の送信に失敗しましたあなたのプロフィールに有効なPushoverキーがありません', 'telegram_sent' => 'Telegram通知が送信されました',
'telegram_sent' => 'Telegram通知が送信されました', 'telegram_error' => 'Telegram通知を送信中にエラーが発生しました: %s',
'telegram_error' => 'Telegram通知を送信中にエラーが発生しました: %s', 'telegram_error_notoken' => 'テスト通知の送信に失敗しましたグローバル設定にTelegram
'telegram_error_notoken' => 'テスト通知の送信に失敗しましたグローバル設定にTelegram APIトークンがありません', APIトークンがありません',
'telegram_error_noid' => 'テスト通知の送信に失敗しましたあなたのプロフィールに有効なチャットIDがありません', 'telegram_error_noid' => 'テスト通知の送信に失敗しましたあなたのプロフィールに有効なチャットIDがありません',
'log_retention_period' => 'ログ保持期間', 'log_retention_period' => 'ログ保持期間',
'log_retention_period_description' => '通知のログおよびサーバー稼働時間のアーカイブを保持する日数。 ログのクリーンアップを無効にするには、0を入力します。', 'log_retention_period_description' => '通知のログおよびサーバー稼働時間のアーカイブを保持する日数。
'log_retention_days' => '日', ログのクリーンアップを無効にするには、0を入力します。',
), 'log_retention_days' => '日',
// for newlines in the email messages use <br> ),
'notifications' => array( 'notifications' => array(
'off_sms' => 'サーバー \'%LABEL%\' はダウンしています: ip=%IP%, ポート=%PORT%. エラー=%ERROR%', 'off_sms' => 'サーバー \'%LABEL%\' はダウンしています: ip=%IP%, ポート=%PORT%.
'off_email_subject' => '重要: サーバー \'%LABEL%\' がダウンしています!', エラー=%ERROR%',
'off_email_body' => "サーバーへの接続に失敗しました:<br><br>Server: %LABEL%<br>IP: %IP%<br>ポート: %PORT%<br>エラー: %ERROR%<br>日時: %DATE%", 'off_email_subject' => '重要: サーバー \'%LABEL%\' がダウンしています!',
'off_pushover_title' => 'サーバー \'%LABEL%\' がダウンしています!', 'off_email_body' => 'サーバーへの接続に失敗しました:<br><br>Server: %LABEL%<br>IP:
'off_pushover_message' => "サーバーへの接続に失敗しました:<br/><br/>Server: %LABEL%<br/>IP: %IP%<br/>ポート: %PORT%<br/>エラー: %ERROR%<br/>日時: %DATE%", %IP%<br>ポート: %PORT%<br>エラー: %ERROR%<br>日時: %DATE%',
'off_telegram_message' => "サーバーへの接続に失敗しました:<br/><br/>Server: %LABEL%<br/>IP: %IP%<br/>ポート: %PORT%<br/>エラー: %ERROR%<br/>日時: %DATE%", 'off_pushover_title' => 'サーバー \'%LABEL%\' がダウンしています!',
'on_sms' => 'サーバー \'%LABEL%\' は動作しています: ip=%IP%, port=%PORT%, it was down for %LAST_OFFLINE_DURATION%', 'off_pushover_message' => 'サーバーへの接続に失敗しました:<br/><br/>Server: %LABEL%<br/>IP:
'on_email_subject' => '重要: サーバー \'%LABEL%\' は動作しています', %IP%<br/>ポート: %PORT%<br/>エラー: %ERROR%<br/>日時: %DATE%',
'on_email_body' => "サーバー '%LABEL%' は動作中です。 この期間の間ダウンしていました: %LAST_OFFLINE_DURATION%:<br/><br/>サーバー: %LABEL%<br/>IP: %IP%<br/>ポート: %PORT%<br/>日時: %DATE%", 'off_telegram_message' => 'サーバーへの接続に失敗しました:<br/><br/>Server: %LABEL%<br/>IP:
'on_pushover_title' => 'サーバー \'%LABEL%\' は動作しています', %IP%<br/>ポート: %PORT%<br/>エラー: %ERROR%<br/>日時: %DATE%',
'on_pushover_message' => "サーバー '%LABEL%' は動作中です。 この期間の間ダウンしていました: %LAST_OFFLINE_DURATION%:<br/><br/>サーバー: %LABEL%<br/>IP: %IP%<br/>ポート: %PORT%<br/>日時: %DATE%", 'on_sms' => 'サーバー \'%LABEL%\' は動作しています: ip=%IP%, port=%PORT%, it was down for
'on_telegram_message' => 'サーバー \'%LABEL%\' は動作中です。 この期間の間ダウンしていました: <br/><br/>サーバー: %LABEL%<br/>IP: %IP%<br/>ポート: %PORT%<br/>ダウンタイム: %LAST_OFFLINE_DURATION%<br/>日時: %DATE%', %LAST_OFFLINE_DURATION%',
'combi_off_email_message' => "<ul><li>サーバー: %LABEL%</li><li>IP: %IP%</li><li>ポート: %PORT%</li><li>エラー: %ERROR%</li><li>日時: %DATE%</li></ul>", 'on_email_subject' => '重要: サーバー \'%LABEL%\' は動作しています',
'combi_off_pushover_message' => "<ul><li>サーバー: %LABEL%</li><li>IP: %IP%</li><li>ポート: %PORT%</li><li>エラー: %ERROR%</li><li>日時: %DATE%</li></ul>", 'on_email_body' => 'サーバー \'%LABEL%\' は動作中です。
'combi_off_telegram_message' => "- サーバー: %LABEL%<br/>- IP: %IP%<br/>- ポート: %PORT%<br/>- エラー: %ERROR%<br/>- 日時: %DATE%<br/><br/>", この期間の間ダウンしていました:
'combi_on_email_message' => "<ul><li>サーバー: %LABEL%</li><li>IP: %IP%</li><li>ポート: %PORT%</li><li>ダウンタイム: %LAST_OFFLINE_DURATION%</li><li>日時: %DATE%</li></ul>", %LAST_OFFLINE_DURATION%:<br/><br/>サーバー: %LABEL%<br/>IP: %IP%<br/>ポート:
'combi_on_pushover_message' => '<ul><li>サーバー: %LABEL%</li><li>IP: %IP%</li><li>ポート: %PORT%</li><li>ダウンタイム: %LAST_OFFLINE_DURATION%</li><li>日時: %DATE%</li></ul>', %PORT%<br/>日時: %DATE%',
'combi_on_telegram_message' => '- サーバー: %LABEL%<br/>- IP: %IP%<br/>- ポート: %PORT%<br/>- ダウンタイム: %LAST_OFFLINE_DURATION%<br/>- 日時: %DATE%<br/><br/>', 'on_pushover_title' => 'サーバー \'%LABEL%\' は動作しています',
'combi_email_subject' => '重要: \'%UP%\' サーバーは動作を再開しました。 \'%DOWN%\' サーバーはダウンしています。', 'on_pushover_message' => 'サーバー \'%LABEL%\' は動作中です。
'combi_pushover_subject' => '\'%UP%\' サーバーは動作を再開しました。 \'%DOWN%\' サーバーはダウンしています。', この期間の間ダウンしていました:
'combi_email_message' => '<b>以下のサーバーはダウンしています: </b><br/>%DOWN_SERVERS%<br/><b>以下のサーバーは動作を再開しました:</b><br/>%UP_SERVERS%', %LAST_OFFLINE_DURATION%:<br/><br/>サーバー: %LABEL%<br/>IP: %IP%<br/>ポート:
'combi_pushover_message' => '<b>以下のサーバーはダウンしています: </b><br/>%DOWN_SERVERS%<br/><b>以下のサーバーは動作を再開しました:</b><br/>%UP_SERVERS%', %PORT%<br/>日時: %DATE%',
'combi_telegram_message' => '<b>以下のサーバーはダウンしています: </b><br/>%DOWN_SERVERS%<br/><b>以下のサーバーは動作を再開しました:</b><br/>%UP_SERVERS%', 'on_telegram_message' => 'サーバー \'%LABEL%\' は動作中です。
), この期間の間ダウンしていました: <br/><br/>サーバー:
'login' => array( %LABEL%<br/>IP: %IP%<br/>ポート: %PORT%<br/>ダウンタイム:
'welcome_usermenu' => 'ようこそ、 %user_name%', %LAST_OFFLINE_DURATION%<br/>日時: %DATE%',
'title_sign_in' => 'サインインしてください。', 'combi_off_email_message' => '<ul><li>サーバー: %LABEL%</li><li>IP: %IP%</li><li>ポート:
'title_forgot' => 'パスワードを忘れましたか?', %PORT%</li><li>エラー: %ERROR%</li><li>日時: %DATE%</li></ul>',
'title_reset' => 'パスワードをリセットする', 'combi_off_pushover_message' => '<ul><li>サーバー: %LABEL%</li><li>IP: %IP%</li><li>ポート:
'submit' => '送信', %PORT%</li><li>エラー: %ERROR%</li><li>日時: %DATE%</li></ul>',
'remember_me' => 'ログイン状態を保持する', 'combi_off_telegram_message' => '- サーバー: %LABEL%<br/>- IP: %IP%<br/>- ポート: %PORT%<br/>-
'login' => 'ログイン', エラー: %ERROR%<br/>- 日時: %DATE%<br/><br/>',
'logout' => 'ログアウト', 'combi_on_email_message' => '<ul><li>サーバー: %LABEL%</li><li>IP: %IP%</li><li>ポート:
'username' => 'ユーザー名', %PORT%</li><li>ダウンタイム: %LAST_OFFLINE_DURATION%</li><li>日時:
'password' => 'パスワード', %DATE%</li></ul>',
'password_repeat' => 'パスワードを繰り返してください', 'combi_on_pushover_message' => '<ul><li>サーバー: %LABEL%</li><li>IP: %IP%</li><li>ポート:
'password_forgot' => 'パスワードを忘れましたか?', %PORT%</li><li>ダウンタイム: %LAST_OFFLINE_DURATION%</li><li>日時:
'password_reset' => 'パスワードをリセットする', %DATE%</li></ul>',
'password_reset_email_subject' => 'PHP Server Monitorのパスワードをリセットする', 'combi_on_telegram_message' => '- サーバー: %LABEL%<br/>- IP: %IP%<br/>- ポート: %PORT%<br/>-
'password_reset_email_body' => 'パスワードをリセットするには、次のリンクを使用してください。 1時間で期限切れになりますのでご注意ください。<br /><br /> %link%', ダウンタイム: %LAST_OFFLINE_DURATION%<br/>- 日時: %DATE%<br/><br/>',
'error_user_incorrect' => '指定されたユーザー名が見つかりませんでした。', 'combi_email_subject' => '重要: \'%UP%\' サーバーは動作を再開しました。 \'%DOWN%\'
'error_login_incorrect' => '情報が間違っています。', サーバーはダウンしています。',
'error_login_passwords_nomatch' => '指定されたパスワードが一致しません。', 'combi_pushover_subject' => '\'%UP%\' サーバーは動作を再開しました。 \'%DOWN%\'
'error_reset_invalid_link' => '指定したリセットリンクは無効です。', サーバーはダウンしています。',
'success_password_forgot' => 'パスワードをリセットする方法に関する情報が電子メールで送信されました。', 'combi_email_message' => '<b>以下のサーバーはダウンしています:
'success_password_reset' => 'パスワードは正常にリセットされました。ログインしてください。', </b><br/>%DOWN_SERVERS%<br/><b>以下のサーバーは動作を再開しました:</b><br/>%UP_SERVERS%',
), 'combi_pushover_message' => '<b>以下のサーバーはダウンしています:
'error' => array( </b><br/>%DOWN_SERVERS%<br/><b>以下のサーバーは動作を再開しました:</b><br/>%UP_SERVERS%',
'401_unauthorized' => '未認証', 'combi_telegram_message' => '<b>以下のサーバーはダウンしています:
'401_unauthorized_description' => 'このページを表示する権限がありません。', </b><br/>%DOWN_SERVERS%<br/><b>以下のサーバーは動作を再開しました:</b><br/>%UP_SERVERS%',
), ),
'login' => array(
'welcome_usermenu' => 'ようこそ、 %user_name%',
'title_sign_in' => 'サインインしてください。',
'title_forgot' => 'パスワードを忘れましたか?',
'title_reset' => 'パスワードをリセットする',
'submit' => '送信',
'remember_me' => 'ログイン状態を保持する',
'login' => 'ログイン',
'logout' => 'ログアウト',
'username' => 'ユーザー名',
'password' => 'パスワード',
'password_repeat' => 'パスワードを繰り返してください',
'password_forgot' => 'パスワードを忘れましたか?',
'password_reset' => 'パスワードをリセットする',
'password_reset_email_subject' => 'PHP Server Monitorのパスワードをリセットする',
'password_reset_email_body' => 'パスワードをリセットするには、次のリンクを使用してください。
1時間で期限切れになりますのでご注意ください。<br /><br
/> %link%',
'error_user_incorrect' => '指定されたユーザー名が見つかりませんでした。',
'error_login_incorrect' => '情報が間違っています。',
'error_login_passwords_nomatch' => '指定されたパスワードが一致しません。',
'error_reset_invalid_link' => '指定したリセットリンクは無効です。',
'success_password_forgot' => 'パスワードをリセットする方法に関する情報が電子メールで送信されました。',
'success_password_reset' => 'パスワードは正常にリセットされました。ログインしてください。',
),
'error' => array(
'401_unauthorized' => '未認証',
'401_unauthorized_description' => 'このページを表示する権限がありません。',
),
); );

View File

@ -1,4 +1,5 @@
<?php <?php
/** /**
* PHP Server Monitor * PHP Server Monitor
* Monitor your servers and websites. * Monitor your servers and websites.
@ -26,284 +27,116 @@
**/ **/
$sm_lang = array( $sm_lang = array(
'name' => '한국 - Korean', 'name' => '한국 - Korean',
'locale' => array('ko_KR.UTF-8', 'ko_KR', 'korean'), 'locale' => array(
'locale_tag' => 'ko', '0' => 'ko_KR.UTF-8',
'locale_dir' => 'ltr', '1' => 'ko_KR',
'system' => array( '2' => 'korean',
'title' => 'Server Monitor', ),
'install' => 'Install', 'locale_tag' => 'ko',
'action' => 'Action', 'locale_dir' => 'ltr',
'save' => '저장', 'system' => array(
'edit' => '수정', 'save' => '저장',
'delete' => '삭제', 'edit' => '수정',
'date' => '날짜', 'delete' => '삭제',
'message' => '메세지', 'date' => '날짜',
'yes' => '예', 'message' => '메세지',
'no' => '아니오', 'yes' => '예',
'insert' => '삽입', 'no' => '아니오',
'add_new' => '새계정 추가', 'insert' => '삽입',
'update_available' => '새로운 업데이트가 있습니다 ({version}). 다음사이트를 방문 해 주십시오. <a href="https://github.com/phpservermon/phpservermon/releases/latest" target="_blank" rel="noopener">http://www.phpservermonitor.org</a>.', 'add_new' => '새계정 추가',
'back_to_top' => 'Back to top', 'update_available' => '새로운 업데이트가 있습니다 ({version}). 다음사이트를 방문
'go_back' => 'Go back', 주십시오. <a href="https://github.com/phpservermon/phpservermon/releases/latest"
'ok' => 'OK', target="_blank" rel="noopener">http://www.phpservermonitor.org</a>.',
'cancel' => 'Cancel', ),
// date/time format according the strftime php function format parameter http://php.net/manual/function.strftime.php 'menu' => array(
'short_day_format' => '%B %e', 'config' => '설정',
'long_day_format' => '%B %e, %Y', 'server' => '서버목록',
'yesterday_format' => 'Yesterday at %X', 'server_log' => '로그',
'other_day_format' => '%A at %X', 'server_update' => '업데이트',
'never' => 'Never', 'user' => '사용자',
'hours_ago' => '%d hours ago', 'help' => '도움말',
'an_hour_ago' => 'about an hour ago', ),
'minutes_ago' => '%d minutes ago', 'users' => array(
'a_minute_ago' => 'about a minute ago', 'user' => '사용자',
'seconds_ago' => '%d seconds ago', 'name' => '이름',
'a_second_ago' => 'a second ago', 'mobile' => '휴대폰',
'year' => 'year', 'updated' => '수정되었습니다.',
'years' => 'years', 'inserted' => '추가되었습니다.',
'month' => 'month', ),
'months' => 'months', 'log' => array(
'day' => 'day', 'type' => '속성',
'days' => 'days', 'status' => '상태',
'hour' => 'hour', 'email' => 'email',
'hours' => 'hours', 'sms' => 'sms',
'minute' => 'minute', 'pushover' => 'Pushover',
'minutes' => 'minutes', 'telegram' => 'Telegram',
'second' => 'second', ),
'seconds' => 'seconds', 'servers' => array(
), 'server' => '서버',
'menu' => array( 'last_check' => '최근체크',
'config' => '설정', 'last_online' => '최근접속',
'server' => '서버목록', 'monitoring' => '확인중',
'server_log' => '로그', 'email' => '메일 전송',
'server_status' => 'Status', 'send_email' => '메일 전송',
'server_update' => '업데이트', 'sms' => 'SMS 전송',
'user' => '사용자', 'send_sms' => 'SMS 전송',
'help' => '도움말', 'updated' => '서버가 수정되었습니다.',
), 'inserted' => '서버가 추가되었습니다.',
'users' => array( 'latency' => '응답',
'user' => '사용자', ),
'name' => '이름', 'config' => array(
'user_name' => 'Username', 'general' => '일반',
'password' => 'Password', 'language' => '언어',
'password_repeat' => 'Password repeat', 'show_update' => '매주 업데이트를 확인하시겠습니까?',
'password_leave_blank' => 'Leave blank to keep unchanged', 'email_status' => '메일전송 허용',
'level' => 'Level', 'email_from_email' => 'Email 주소',
'level_10' => 'Administrator', 'email_from_name' => 'Email 사용자',
'level_20' => 'User', 'sms_status' => 'SMS전송 허용',
'level_description' => '<b>Administrators</b> have full access: they can manage servers, users and edit the global configuration.<br><b>Users</b> can only view and run the updater for the servers that have been assigned to them.', 'sms_gateway' => '메세지 전송을 위한 게이트웨이 허용',
'mobile' => '휴대폰', 'alert_type' => '알림을 원하면 다음과 같이 변경하십시오.',
'email' => 'Email', 'alert_type_description' => '<b>상태 변경: </b><br>서버 상태가 변경이되면 알림을
'pushover' => 'Pushover', 받습니다. online -> offline -> online.<br><br><b>오프라인:
'pushover_description' => 'Pushover is a service that makes it easy to get real-time notifications. See <a href="https://pushover.net/">their website</a> for more info.', </b><br>서버가 첫번째로 오프라인이 되었을 알림을
'pushover_key' => 'Pushover Key', 받습니다. 예를들어, cron이 15분이고 오전1시 부터
'pushover_device' => 'Pushover Device', 오전6시까지 다운되었을때 오전1시에 한번 알림을
'pushover_device_description' => 'Device name to send the message to. Leave empty to send it to all devices.', 받습니다.<br /><br><b>항상: </b><br>사이트가 다운되었을
'delete_title' => 'Delete User', 매시간 알림을 받습니다.',
'delete_message' => 'Are you sure you want to delete user \'%1\'?', 'alert_type_status' => '상태 변경',
'deleted' => 'User deleted.', 'alert_type_offline' => '오프라인',
'updated' => '수정되었습니다.', 'alert_type_always' => '항상',
'inserted' => '추가되었습니다.', 'log_status' => '로그 상태',
'profile' => 'Profile', 'log_status_description' => '로그상태가 TRUE이면 알림설정이 통과할때마다 이벤트를
'profile_updated' => 'Your profile has been updated.', 기록합니다.',
'error_user_name_bad_length' => 'Usernames must be between 2 and 64 characters.', 'log_email' => '이메일로 로그를 전송하시겠습니까?',
'error_user_name_invalid' => 'It may only contain alphabetic characters (a-z, A-Z), digits (0-9), dots (.) and underscores (_).', 'log_sms' => 'SMS로 로그를 전송하시겠습니까?',
'error_user_name_exists' => 'The given username already exists in the database.', 'updated' => '설정이 수정되었습니다.',
'error_user_email_bad_length' => 'Email addresses must be between 5 and 255 characters.', 'tab_email' => 'Email',
'error_user_email_invalid' => 'The email address is invalid.', 'tab_sms' => 'SMS',
'error_user_level_invalid' => 'The given user level is invalid.', 'tab_pushover' => 'Pushover',
'error_user_no_match' => 'The user could not be found in the database.', 'settings_email' => 'Email 설정',
'error_user_password_invalid' => 'The entered password is invalid.', 'settings_sms' => 'SMS 설정',
'error_user_password_no_match' => 'The entered passwords do not match.', 'settings_notification' => '알림 설정',
), 'settings_log' => '로그 설정',
'log' => array( 'auto_refresh_description' => '서버페이지를 자동으로 새로고침.<br><span class="small">시간은
'title' => 'Log entries', (sec) 설정을 하고, 0 새로고침을 하지 않습니다.</span>',
'type' => '속성', ),
'status' => '상태', 'notifications' => array(
'email' => 'email', 'off_sms' => '서버(\'%LABEL%\')가 다운되었습니다. : ip=%IP%, port=%PORT%. Error=%ERROR%',
'sms' => 'sms', 'off_email_subject' => '중요: 서버(\'%LABEL%\')가 다운되었습니다.',
'pushover' => 'Pushover', 'off_email_body' => '서버 접속을 실패하였습니다.<br><br>Server: %LABEL%<br>IP: %IP%<br>Port:
'no_logs' => 'No logs', %PORT%<br>Error: %ERROR%<br>Date: %DATE%',
'clear' => 'Clear log', 'off_pushover_title' => '서버(\'%LABEL%\')가 다운되었습니다.',
'delete_title' => 'Delete log', 'off_pushover_message' => '서버 접속을 실패하였습니다.<br><br>Server: %LABEL%<br>IP: %IP%<br>Port:
'delete_message' => 'Are you sure you want to delete <b>all</b> logs?', %PORT%<br>Error: %ERROR%<br>Date: %DATE%',
), 'on_sms' => '서버(\'%LABEL%\') 가동중: ip=%IP%, port=%PORT%, it was down for %LAST_OFFLINE_DURATION%',
'servers' => array( 'on_email_subject' => '중요: 서버(\'%LABEL%\')가 가동중입니다.',
'server' => '서버', 'on_email_body' => '서버(\'%LABEL%\') 재가동됩니다., it was down for
'status' => 'Status', %LAST_OFFLINE_DURATION%:<br><br>Server: %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>Date:
'label' => 'Label', %DATE%',
'domain' => 'Domain/IP', 'on_pushover_title' => '서버(\'%LABEL%\')가 가동중입니다.',
'timeout' => 'Timeout', 'on_pushover_message' => '서버(\'%LABEL%\') 재가동됩니다., it was down for
'timeout_description' => 'Number of seconds to wait for the server to respond.', %LAST_OFFLINE_DURATION%:<br><br>Server: %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>Date:
'port' => 'Port', %DATE%',
'type' => 'Type', ),
'type_website' => 'Website',
'type_service' => 'Service',
'pattern' => 'Search string/regex',
'pattern_description' => 'If this pattern is not found on the website, the server will be marked offline. Regular expressions are allowed.',
'last_check' => '최근체크',
'last_online' => '최근접속',
'last_offline' => 'Last offline',
'monitoring' => '확인중',
'no_monitoring' => 'No monitoring',
'email' => '메일 전송',
'send_email' => '메일 전송',
'sms' => 'SMS 전송',
'send_sms' => 'SMS 전송',
'pushover' => 'Pushover',
'users' => 'Users',
'delete_title' => 'Delete Server',
'delete_message' => 'Are you sure you want to delete server \'%1\'?',
'deleted' => 'Server deleted.',
'updated' => '서버가 수정되었습니다.',
'inserted' => '서버가 추가되었습니다.',
'latency' => '응답',
'latency_max' => 'Latency (maximum)',
'latency_min' => 'Latency (minimum)',
'latency_avg' => 'Latency (average)',
'uptime' => 'Uptime',
'year' => 'Year',
'month' => 'Month',
'week' => 'Week',
'day' => 'Day',
'hour' => 'Hour',
'warning_threshold' => 'Warning threshold',
'warning_threshold_description' => 'Number of failed checks required before it is marked offline.',
'chart_last_week' => 'Last week',
'chart_history' => 'History',
// Charts date format according jqPlot date format http://www.jqplot.com/docs/files/plugins/jqplot-dateAxisRenderer-js.html
'chart_day_format' => '%Y-%m-%d',
'chart_long_date_format' => '%Y-%m-%d %H:%M:%S',
'chart_short_date_format' => '%m/%d %H:%M',
'chart_short_time_format' => '%H:%M',
'warning_notifications_disabled_sms' => 'SMS notifications are disabled.',
'warning_notifications_disabled_email' => 'Email notifications are disabled.',
'warning_notifications_disabled_pushover' => 'Pushover notifications are disabled.',
'error_server_no_match' => 'Server not found.',
'error_server_label_bad_length' => 'The label must be between 1 and 255 characters.',
'error_server_ip_bad_length' => 'The domain / IP must be between 1 and 255 characters.',
'error_server_ip_bad_service' => 'The IP address is not valid.',
'error_server_ip_bad_website' => 'The website URL is not valid.',
'error_server_type_invalid' => 'The selected server type is invalid.',
'error_server_warning_threshold_invalid' => 'The warning threshold must be a valid integer greater than 0.',
),
'config' => array(
'general' => '일반',
'language' => '언어',
'show_update' => '매주 업데이트를 확인하시겠습니까?',
'email_status' => '메일전송 허용',
'email_from_email' => 'Email 주소',
'email_from_name' => 'Email 사용자',
'email_smtp' => 'Enable SMTP',
'email_smtp_host' => 'SMTP host',
'email_smtp_port' => 'SMTP port',
'email_smtp_security' => 'SMTP security',
'email_smtp_security_none' => 'None',
'email_smtp_username' => 'SMTP username',
'email_smtp_password' => 'SMTP password',
'email_smtp_noauth' => 'Leave blank for no authentication',
'sms_status' => 'SMS전송 허용',
'sms_gateway' => '메세지 전송을 위한 게이트웨이 허용',
'sms_gateway_username' => 'Gateway username',
'sms_gateway_password' => 'Gateway password',
'sms_from' => 'Sender\'s phone number',
'pushover_status' => 'Allow sending Pushover messages',
'pushover_description' => 'Pushover is a service that makes it easy to get real-time notifications. See <a href="https://pushover.net/">their website</a> for more info.',
'pushover_clone_app' => 'Click here to create your Pushover app',
'pushover_api_token' => 'Pushover App API Token',
'pushover_api_token_description' => 'Before you can use Pushover, you need to <a href="%1$s" target="_blank" rel="noopener">register an App</a> at their website and enter the App API Token here.',
'alert_type' => '알림을 원하면 다음과 같이 변경하십시오.',
'alert_type_description' => '<b>상태 변경: </b><br>'.
'서버 상태가 변경이되면 알림을 받습니다. online -> offline -> online.<br>'.
'<br><b>오프라인: </b><br>'.
'서버가 첫번째로 오프라인이 되었을 때 알림을 받습니다. 예를들어, '.
'cron이 매 15분이고 오전1시 부터 오전6시까지 다운되었을때 오전1시에 한번 알림을 받습니다.<br />'.
'<br><b>항상: </b><br>'.
'사이트가 다운되었을 때 매시간 알림을 받습니다.',
'alert_type_status' => '상태 변경',
'alert_type_offline' => '오프라인',
'alert_type_always' => '항상',
'log_status' => '로그 상태',
'log_status_description' => '로그상태가 TRUE이면 알림설정이 통과할때마다 이벤트를 기록합니다.',
'log_email' => '이메일로 로그를 전송하시겠습니까?',
'log_sms' => 'SMS로 로그를 전송하시겠습니까?',
'log_pushover' => 'Log pushover messages sent by the script',
'updated' => '설정이 수정되었습니다.',
'tab_email' => 'Email',
'tab_sms' => 'SMS',
'tab_pushover' => 'Pushover',
'settings_email' => 'Email 설정',
'settings_sms' => 'SMS 설정',
'settings_pushover' => 'Pushover settings',
'settings_notification' => '알림 설정',
'settings_log' => '로그 설정',
'auto_refresh' => 'Auto-refresh',
'auto_refresh_description' =>
'서버페이지를 자동으로 새로고침.<br>'.
'<span class="small">'.
'시간은 초(sec)로 설정을 하고, 0은 새로고침을 하지 않습니다.'.
'</span>',
'seconds' => 'seconds',
'test' => 'Test',
'test_email' => 'An email will be sent to the address specified in your user profile.',
'test_sms' => 'An SMS will be sent to the phone number specified in your user profile.',
'test_pushover' => 'A Pushover notification will be sent to the user key/device specified in your user profile.',
'send' => 'Send',
'test_subject' => 'Test',
'test_message' => 'Test message',
'email_sent' => 'Email sent',
'email_error' => 'Error in email sending',
'sms_sent' => 'Sms sent',
'sms_error' => 'Error in sms sending. %s',
'sms_error_nomobile' => 'Unable to send test SMS: no valid phone number found in your profile.',
'pushover_sent' => 'Pushover notification sent',
'pushover_error' => 'An error has occurred while sending the Pushover notification: %s',
'pushover_error_noapp' => 'Unable to send test notification: no Pushover App API token found in the global configuration.',
'pushover_error_nokey' => 'Unable to send test notification: no Pushover key found in your profile.',
'log_retention_period' => 'Log retention period',
'log_retention_period_description' => 'Number of days to keep logs of notifications and archives of server uptime. Enter 0 to disable log cleanup.',
'log_retention_days' => 'days',
),
// for newlines in the email messages use <br>
'notifications' => array(
'off_sms' => '서버(\'%LABEL%\')가 다운되었습니다. : ip=%IP%, port=%PORT%. Error=%ERROR%',
'off_email_subject' => '중요: 서버(\'%LABEL%\')가 다운되었습니다.',
'off_email_body' => "서버 접속을 실패하였습니다.<br><br>Server: %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>Error: %ERROR%<br>Date: %DATE%",
'off_pushover_title' => '서버(\'%LABEL%\')가 다운되었습니다.',
'off_pushover_message' => "서버 접속을 실패하였습니다.<br><br>Server: %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>Error: %ERROR%<br>Date: %DATE%",
'on_sms' => '서버(\'%LABEL%\') 가동중: ip=%IP%, port=%PORT%, it was down for %LAST_OFFLINE_DURATION%',
'on_email_subject' => '중요: 서버(\'%LABEL%\')가 가동중입니다.',
'on_email_body' => "서버('%LABEL%')가 재가동됩니다., it was down for %LAST_OFFLINE_DURATION%:<br><br>Server: %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>Date: %DATE%",
'on_pushover_title' => '서버(\'%LABEL%\')가 가동중입니다.',
'on_pushover_message' => "서버('%LABEL%')가 재가동됩니다., it was down for %LAST_OFFLINE_DURATION%:<br><br>Server: %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>Date: %DATE%",
),
'login' => array(
'welcome_usermenu' => 'Welcome, %user_name%',
'title_sign_in' => 'Please sign in',
'title_forgot' => 'Forgot your password?',
'title_reset' => 'Reset your password',
'submit' => 'Submit',
'remember_me' => 'Remember me',
'login' => 'Login',
'logout' => 'Logout',
'username' => 'Username',
'password' => 'Password',
'password_repeat' => 'Repeat password',
'password_forgot' => 'Forgot password?',
'password_reset' => 'Reset password',
'password_reset_email_subject' => 'Reset your password for PHP Server Monitor',
'password_reset_email_body' => 'Please use the following link to reset your password. Please note it expires in 1 hour.<br><br>%link%',
'error_user_incorrect' => 'The provided username could not be found.',
'error_login_incorrect' => 'The information is incorrect.',
'error_login_passwords_nomatch' => 'The provided passwords do not match.',
'error_reset_invalid_link' => 'The reset link you provided is invalid.',
'success_password_forgot' => 'An email has been sent to you with information how to reset your password.',
'success_password_reset' => 'Your password has been reset successfully. Please login.',
),
'error' => array(
'401_unauthorized' => 'Unauthorized',
'401_unauthorized_description' => 'You do not have the privileges to view this page.',
),
); );

View File

@ -1,4 +1,5 @@
<?php <?php
/** /**
* PHP Server Monitor * PHP Server Monitor
* Monitor your servers and websites. * Monitor your servers and websites.
@ -26,325 +27,360 @@
**/ **/
$sm_lang = array( $sm_lang = array(
'name' => 'Nederlands - Dutch', 'name' => 'Nederlands - Dutch',
'locale' => array( 'locale' => array(
'0' => 'nl_NL.UTF-8', '0' => 'nl_NL.UTF-8',
'1' => 'nl_NL', '1' => 'nl_NL',
'2' => 'dutch', '2' => 'dutch',
), ),
'locale_tag' => 'nl', 'locale_tag' => 'nl',
'locale_dir' => 'ltr', 'locale_dir' => 'ltr',
'system' => array( 'system' => array(
'title' => 'Server Monitor', 'title' => 'Server Monitor',
'install' => 'Installeren', 'install' => 'Installeren',
'action' => 'Actie', 'action' => 'Actie',
'save' => 'Opslaan', 'save' => 'Opslaan',
'edit' => 'Wijzig', 'edit' => 'Wijzig',
'delete' => 'Verwijder', 'delete' => 'Verwijder',
'date' => 'Datum', 'date' => 'Datum',
'message' => 'Bericht', 'message' => 'Bericht',
'yes' => 'Ja', 'yes' => 'Ja',
'no' => 'Nee', 'no' => 'Nee',
'insert' => 'Voeg toe', 'insert' => 'Voeg toe',
'add_new' => 'Voeg toe', 'add_new' => 'Voeg toe',
'update_available' => 'Een nieuwe update ({version}) is beschikbaar op <a href="https://github.com/phpservermon/phpservermon/releases/latest" target="_blank" rel="noopener">http://www.phpservermonitor.org</a>.', 'update_available' => 'Een nieuwe update ({version}) is beschikbaar op <a
'back_to_top' => 'Terug naar boven', href="https://github.com/phpservermon/phpservermon/releases/latest" target="_blank"
'go_back' => 'Terug', rel="noopener">http://www.phpservermonitor.org</a>.',
'ok' => 'OK', 'back_to_top' => 'Terug naar boven',
'bad' => 'niet goed', 'go_back' => 'Terug',
'cancel' => 'Cancel', 'ok' => 'OK',
'none' => 'Geen', 'bad' => 'niet goed',
'activate' => 'Activeer', 'cancel' => 'Cancel',
'short_day_format' => '%B %e', 'none' => 'Geen',
'long_day_format' => '%B %e, %Y', 'activate' => 'Activeer',
'yesterday_format' => 'Gisteren om %k:%M', 'short_day_format' => '%B %e',
'other_day_format' => '%A om %k:%M', 'long_day_format' => '%B %e, %Y',
'never' => 'Nooit', 'yesterday_format' => 'Gisteren om %k:%M',
'hours_ago' => '%d uren geleden', 'other_day_format' => '%A om %k:%M',
'an_hour_ago' => 'een uur geleden', 'never' => 'Nooit',
'minutes_ago' => '%d minuten geleden', 'hours_ago' => '%d uren geleden',
'a_minute_ago' => 'een minuut geleden', 'an_hour_ago' => 'een uur geleden',
'seconds_ago' => '%d seconden geleden', 'minutes_ago' => '%d minuten geleden',
'a_second_ago' => 'een seconde geleden', 'a_minute_ago' => 'een minuut geleden',
'year' => 'jaar', 'seconds_ago' => '%d seconden geleden',
'years' => 'jaren', 'a_second_ago' => 'een seconde geleden',
'month' => 'maand', 'year' => 'jaar',
'months' => 'maanden', 'years' => 'jaren',
'day' => 'dag', 'month' => 'maand',
'days' => 'dagen', 'months' => 'maanden',
'hour' => 'uur', 'day' => 'dag',
'hours' => 'uren', 'days' => 'dagen',
'minute' => 'minuut', 'hour' => 'uur',
'minutes' => 'minuten', 'hours' => 'uren',
'second' => 'seconde', 'minute' => 'minuut',
'seconds' => 'seconden', 'minutes' => 'minuten',
'current' => 'huidig', 'second' => 'seconde',
'settings' => 'Instellingen', 'seconds' => 'seconden',
), 'current' => 'huidig',
'menu' => array( 'settings' => 'Instellingen',
'config' => 'Configuratie', ),
'server' => 'Servers', 'menu' => array(
'server_log' => 'Log', 'config' => 'Configuratie',
'server_status' => 'Status', 'server' => 'Servers',
'server_update' => 'Update', 'server_log' => 'Log',
'user' => 'Gebruikers', 'server_status' => 'Status',
'help' => 'Help', 'server_update' => 'Update',
), 'user' => 'Gebruikers',
'users' => array( 'help' => 'Help',
'user' => 'Gebruiker', ),
'name' => 'Naam', 'users' => array(
'user_name' => 'Gebruikersnaam', 'user' => 'Gebruiker',
'password' => 'Wachtwoord', 'name' => 'Naam',
'password_repeat' => 'Herhaal wachtwoord', 'user_name' => 'Gebruikersnaam',
'password_leave_blank' => 'Laat leeg om niet te wijzigen', 'password' => 'Wachtwoord',
'level' => 'Level', 'password_repeat' => 'Herhaal wachtwoord',
'level_10' => 'Beheerder', 'password_leave_blank' => 'Laat leeg om niet te wijzigen',
'level_20' => 'Gebruiker', 'level' => 'Level',
'level_description' => '<b>Beheerders</b> hebben volledige toegang: ze kunnen servers en gebruiker beheren en de globale configuratie aanpassen.<br><b>Gebruikers</b> kunnen alleen de servers bekijken en op fouten testen die aan hun zijn toegewezen.', 'level_10' => 'Beheerder',
'mobile' => 'Mobiel', 'level_20' => 'Gebruiker',
'email' => 'Email', 'level_description' => '<b>Beheerders</b> hebben volledige toegang: ze kunnen servers en gebruiker beheren en
'pushover' => 'Pushover', de globale configuratie aanpassen.<br><b>Gebruikers</b> kunnen alleen de servers
'pushover_description' => 'Pushover is een dienst die het gemakkelijk maakt om real-time notificaties te ontvangen. Zie <a href="https://pushover.net/">hun website</a> voor meer informatie.', bekijken en op fouten testen die aan hun zijn toegewezen.',
'pushover_key' => 'Pushover Key', 'mobile' => 'Mobiel',
'pushover_device' => 'Pushover Device', 'email' => 'Email',
'pushover_device_description' => 'Apparaat waar de berichten naar toe gaan. Laat leeg voor alle apparaten.', 'pushover' => 'Pushover',
'telegram' => 'Telegram', 'pushover_description' => 'Pushover is een dienst die het gemakkelijk maakt om real-time notificaties te
'telegram_chat_id' => 'Telegram chat id', ontvangen. Zie <a href="https://pushover.net/" target="_blank">hun website</a> voor meer
'telegram_get_chat_id' => 'Klik hier om je chat id te vinden', informatie.',
'activate_telegram' => 'Activeer Telegram notificaties', 'pushover_key' => 'Pushover Key',
'telegram_bot_username_found' => 'De Telegram bot is gevonden! <br><a href="%s" target="_blank" rel="noopener"><button class="btn btn-primary">Volgende stap</button></a> <br>Dit zal een chat met de bot openen. Klik vervolgens op start of typ /start.', 'pushover_device' => 'Pushover Device',
'telegram_bot_error' => 'Er is een error voorgekomen tijdens de activatie van Telegram notificaties: %s', 'pushover_device_description' => 'Apparaat waar de berichten naar toe gaan. Laat leeg voor alle apparaten.',
'delete_title' => 'Verwijder gebruiker', 'telegram' => 'Telegram',
'delete_message' => 'Weet je zeker dat je deze gebruiker wilt verwijderen: \'%1\'?', 'telegram_chat_id' => 'Telegram chat id',
'deleted' => 'Gebruiker verwijderd.', 'telegram_get_chat_id' => 'Klik hier om je chat id te vinden',
'updated' => 'Gebruiker gewijzigd.', 'activate_telegram' => 'Activeer Telegram notificaties',
'inserted' => 'Gebruiker toegevoegd.', 'telegram_bot_username_found' => 'De Telegram bot is gevonden! <br><a href="%s" target="_blank"
'profile' => 'Profiel', rel="noopener"><button class="btn btn-primary">Volgende stap</button></a>
'profile_updated' => 'Je profiel is bijgewerkt.', <br>Dit zal een chat met de bot openen. Klik vervolgens op start of typ
'error_user_name_bad_length' => 'Een gebruikersnaam moet tussen de 2 en 64 tekens zijn.', /start.',
'error_user_name_invalid' => 'Een gebruikersnaam mag alleen alfabetische tekens (a-z, A-Z), cijfers (0-9), punten (.) en underscores (_) bevatten.', 'telegram_bot_error' => 'Er is een error voorgekomen tijdens de activatie van Telegram notificaties: %s',
'error_user_name_exists' => 'De opgegeven gebruikersnaam bestaat al.', 'delete_title' => 'Verwijder gebruiker',
'error_user_email_bad_length' => 'Een email adres moet tussen de 5 en 255 tekens zijn.', 'delete_message' => 'Weet je zeker dat je deze gebruiker wilt verwijderen: \'%1\'?',
'error_user_email_invalid' => 'Het email adres is ongeldig.', 'deleted' => 'Gebruiker verwijderd.',
'error_user_level_invalid' => 'Het gebruikersniveau is ongeldig.', 'updated' => 'Gebruiker gewijzigd.',
'error_user_no_match' => 'De gebruiker kon niet worden toegevoegd aan de database.', 'inserted' => 'Gebruiker toegevoegd.',
'error_user_password_invalid' => 'Het ingevulde wachtwoord is ongeldig.', 'profile' => 'Profiel',
'error_user_password_no_match' => 'De ingevulde wachtwoorden komen niet overeen.', 'profile_updated' => 'Je profiel is bijgewerkt.',
), 'error_user_name_bad_length' => 'Een gebruikersnaam moet tussen de 2 en 64 tekens zijn.',
'log' => array( 'error_user_name_invalid' => 'Een gebruikersnaam mag alleen alfabetische tekens (a-z, A-Z), cijfers (0-9),
'title' => 'Log entries', punten (.) en underscores (_) bevatten.',
'type' => 'Type', 'error_user_name_exists' => 'De opgegeven gebruikersnaam bestaat al.',
'status' => 'Status', 'error_user_email_bad_length' => 'Een email adres moet tussen de 5 en 255 tekens zijn.',
'email' => 'Email', 'error_user_email_invalid' => 'Het email adres is ongeldig.',
'sms' => 'SMS', 'error_user_level_invalid' => 'Het gebruikersniveau is ongeldig.',
'pushover' => 'Pushover', 'error_user_no_match' => 'De gebruiker kon niet worden toegevoegd aan de database.',
'telegram' => 'Telegram', 'error_user_password_invalid' => 'Het ingevulde wachtwoord is ongeldig.',
'no_logs' => 'Geen logs', 'error_user_password_no_match' => 'De ingevulde wachtwoorden komen niet overeen.',
'clear' => 'Logboek opschonen', 'error_user_admin_cant_be_deleted' => 'Je kan de laatste administrator niet verwijderen.',
'delete_title' => 'Logboek opschonen', ),
'delete_message' => 'Weet je zeker dat je <b>alle</b> logs wilt opschonen?', 'log' => array(
), 'title' => 'Log entries',
'servers' => array( 'type' => 'Type',
'server' => 'Server', 'status' => 'Status',
'status' => 'Status', 'email' => 'Email',
'label' => 'Label', 'sms' => 'SMS',
'domain' => 'Domein/IP', 'pushover' => 'Pushover',
'timeout' => 'Timeout', 'telegram' => 'Telegram',
'timeout_description' => 'Aantal seconden te wachten op een reactie van de server.', 'no_logs' => 'Geen logs',
'authentication_settings' => 'Authenticatie instellingen', 'clear' => 'Logboek opschonen',
'optional' => 'Optioneel', 'delete_title' => 'Logboek opschonen',
'website_username' => 'Gebruikersnaam', 'delete_message' => 'Weet je zeker dat je <b>alle</b> logs wilt opschonen?',
'website_password' => 'Wachtwoord', ),
'port' => 'Poort', 'servers' => array(
'custom_port' => 'Aangepaste poort', 'server' => 'Server',
'popular_ports' => 'Populaire poorten', 'status' => 'Status',
'post_field' => 'POST veld', 'label' => 'Label',
'please_select' => 'Selecteer', 'domain' => 'Domein/IP',
'type' => 'Type', 'timeout' => 'Timeout',
'type_website' => 'Website', 'timeout_description' => 'Aantal seconden te wachten op een reactie van de server.',
'type_service' => 'Service', 'authentication_settings' => 'Authenticatie instellingen',
'type_ping' => 'Ping', 'optional' => 'Optioneel',
'pattern' => 'Zoek voor tekst/regex', 'website_username' => 'Gebruikersnaam',
'pattern_description' => 'Als dit patroon niet gevonden wordt op de website, zal de server als offline gemarkeerd worden. Regular expressions zijn toegestaan.', 'website_password' => 'Wachtwoord',
'redirect_check' => 'Omleiden naar een ander domein is', 'port' => 'Poort',
'redirect_check_description' => 'Een omleiding naar een ander domein is meestal een slecht teken.', 'custom_port' => 'Aangepaste poort',
'allow_http_status' => 'Sta HTTP status code toe', 'popular_ports' => 'Populaire poorten',
'allow_http_status_description' => 'Markeer website als online. HTTP status code lager dan 400 worden standaard als online gemarkeerd. Scheiden met |.', 'post_field' => 'POST veld',
'header_name' => 'Header naam', 'please_select' => 'Selecteer',
'header_value' => 'Header waarde', 'type' => 'Type',
'header_name_description' => 'Hoofdlettergevoelig', 'type_website' => 'Website',
'last_check' => 'Laatst gecontroleerd', 'type_service' => 'Service',
'last_online' => 'Laatst online', 'type_ping' => 'Ping',
'last_offline' => 'Laatst offline', 'pattern' => 'Zoek voor tekst/regex',
'last_output' => 'Laatste succesvole uitvoer', 'pattern_description' => 'Als dit patroon niet gevonden wordt op de website, zal de server als offline
'last_error' => 'Laatste error', gemarkeerd worden. Regular expressions zijn toegestaan.',
'last_error_output' => 'Laatste error uitvoer', 'redirect_check' => 'Omleiden naar een ander domein is',
'output' => 'Uitvoer', 'redirect_check_description' => 'Een omleiding naar een ander domein is meestal een slecht teken.',
'monitoring' => 'Monitoring', 'allow_http_status' => 'Sta HTTP status code toe',
'no_monitoring' => 'Geen monitoring', 'allow_http_status_description' => 'Markeer website als online. HTTP status code lager dan 400 worden
'email' => 'Email', standaard als online gemarkeerd. Scheiden met |.',
'send_email' => 'Stuur email', 'header_name' => 'Header naam',
'sms' => 'SMS', 'header_value' => 'Header waarde',
'send_sms' => 'Stuur SMS', 'header_name_description' => 'Hoofdlettergevoelig',
'pushover' => 'Pushover', 'last_check' => 'Laatst gecontroleerd',
'send_pushover' => 'Stuur Pushover notificatie', 'last_online' => 'Laatst online',
'telegram' => 'Telegram', 'last_offline' => 'Laatst offline',
'send_telegram' => 'Stuur Telegram notificatie', 'last_output' => 'Laatste succesvole uitvoer',
'users' => 'Gebruikers', 'last_error' => 'Laatste error',
'delete_title' => 'Verwijder server', 'last_error_output' => 'Laatste error uitvoer',
'delete_message' => 'Weet je zeker dat je deze server wilt verwijderen: \'%1\'?', 'output' => 'Uitvoer',
'deleted' => 'Server verwijderd.', 'monitoring' => 'Monitoring',
'updated' => 'Server gewijzigd.', 'no_monitoring' => 'Geen monitoring',
'inserted' => 'Server toegevoegd.', 'email' => 'Email',
'latency' => 'Response tijd', 'send_email' => 'Stuur email',
'latency_max' => 'Latency (maximum)', 'sms' => 'SMS',
'latency_min' => 'Latency (minimum)', 'send_sms' => 'Stuur SMS',
'latency_avg' => 'Latency (gemiddeld)', 'pushover' => 'Pushover',
'online' => 'online', 'send_pushover' => 'Stuur Pushover notificatie',
'offline' => 'offline', 'telegram' => 'Telegram',
'uptime' => 'Uptime', 'send_telegram' => 'Stuur Telegram notificatie',
'year' => 'Jaar', 'users' => 'Gebruikers',
'month' => 'Maand', 'delete_title' => 'Verwijder server',
'week' => 'Week', 'delete_message' => 'Weet je zeker dat je deze server wilt verwijderen: \'%1\'?',
'day' => 'Dag', 'deleted' => 'Server verwijderd.',
'hour' => 'Uur', 'updated' => 'Server gewijzigd.',
'warning_threshold' => 'Waarschuwingsdrempel', 'inserted' => 'Server toegevoegd.',
'warning_threshold_description' => 'Aantal mislukte pogingen voordat de server als offline gemarkeerd wordt.', 'latency' => 'Response tijd',
'chart_last_week' => 'Afgelopen week', 'latency_max' => 'Latency (maximum)',
'chart_history' => 'Geschiedenis', 'latency_min' => 'Latency (minimum)',
'chart_day_format' => '%d-%m-%Y', 'latency_avg' => 'Latency (gemiddeld)',
'chart_long_date_format' => '%d-%m-%Y %H:%M:%S', 'online' => 'online',
'chart_short_date_format' => '%d-%m %H:%M', 'offline' => 'offline',
'chart_short_time_format' => '%H:%M', 'uptime' => 'Uptime',
'warning_notifications_disabled_sms' => 'SMS notificaties zijn uitgeschakeld.', 'year' => 'Jaar',
'warning_notifications_disabled_email' => 'Email notificaties zijn uitgeschakeld.', 'month' => 'Maand',
'warning_notifications_disabled_pushover' => 'Pushover notificaties zijn uitgeschakeld.', 'week' => 'Week',
'warning_notifications_disabled_telegram' => 'Telegram notificaties zijn uitgeschakeld.', 'day' => 'Dag',
'error_server_no_match' => 'Server niet gevonden.', 'hour' => 'Uur',
'error_server_label_bad_length' => 'Het label moet tussen de 1 en 255 karakters lang zijn.', 'warning_threshold' => 'Waarschuwingsdrempel',
'error_server_ip_bad_length' => 'Het domein / IP moet tussen de 1 en 255 karakters lang zijn.', 'warning_threshold_description' => 'Aantal mislukte pogingen voordat de server als offline gemarkeerd wordt.',
'error_server_ip_bad_service' => 'Het IP adres is ongeldig.', 'chart_last_week' => 'Afgelopen week',
'error_server_ip_bad_website' => 'De website URL is ongeldig.', 'chart_history' => 'Geschiedenis',
'error_server_type_invalid' => 'Het geselecteerde server type is ongeldig.', 'chart_day_format' => '%d-%m-%Y',
'error_server_warning_threshold_invalid' => 'De warning threshold moet een numerieke waarde zijn groter dan 0.', 'chart_long_date_format' => '%d-%m-%Y %H:%M:%S',
), 'chart_short_date_format' => '%d-%m %H:%M',
'config' => array( 'chart_short_time_format' => '%H:%M',
'general' => 'Algemeen', 'warning_notifications_disabled_sms' => 'SMS notificaties zijn uitgeschakeld.',
'language' => 'Taal', 'warning_notifications_disabled_email' => 'Email notificaties zijn uitgeschakeld.',
'show_update' => 'Controleer wekelijks voor updates?', 'warning_notifications_disabled_pushover' => 'Pushover notificaties zijn uitgeschakeld.',
'email_status' => 'Sta email berichten toe?', 'warning_notifications_disabled_telegram' => 'Telegram notificaties zijn uitgeschakeld.',
'email_from_email' => 'Email van adres', 'error_server_no_match' => 'Server niet gevonden.',
'email_from_name' => 'Email van naam', 'error_server_label_bad_length' => 'Het label moet tussen de 1 en 255 karakters lang zijn.',
'email_smtp' => 'SMTP gebruiken', 'error_server_ip_bad_length' => 'Het domein / IP moet tussen de 1 en 255 karakters lang zijn.',
'email_smtp_host' => 'SMTP host', 'error_server_ip_bad_service' => 'Het IP adres is ongeldig.',
'email_smtp_port' => 'SMTP poort', 'error_server_ip_bad_website' => 'De website URL is ongeldig.',
'email_smtp_security' => 'SMTP beveiliging', 'error_server_type_invalid' => 'Het geselecteerde server type is ongeldig.',
'email_smtp_security_none' => 'Geen', 'error_server_warning_threshold_invalid' => 'De warning threshold moet een numerieke waarde zijn groter dan 0.',
'email_smtp_username' => 'SMTP gebruikersnaam', ),
'email_smtp_password' => 'SMTP wachtwoord', 'config' => array(
'email_smtp_noauth' => 'Laat leeg voor geen authenticatie', 'general' => 'Algemeen',
'sms_status' => 'Sta SMS berichten toe?', 'language' => 'Taal',
'sms_gateway' => 'Gateway voor het sturen van SMS', 'show_update' => 'Controleer wekelijks voor updates?',
'sms_gateway_username' => 'Gateway gebruikersnaam', 'email_status' => 'Sta email berichten toe?',
'sms_gateway_password' => 'Gateway wachtwoord', 'email_from_email' => 'Email van adres',
'sms_from' => 'Telefoonnummer afzender', 'email_from_name' => 'Email van naam',
'pushover_status' => 'Sta Pushover berichten toe?', 'email_smtp' => 'SMTP gebruiken',
'pushover_description' => 'Pushover is een dienst die het gemakkelijk maakt om real-time notificaties te ontvangen. Zie <a href="https://pushover.net/">hun website</a> voor meer informatie.', 'email_smtp_host' => 'SMTP host',
'pushover_clone_app' => 'Klik hier om je Pushover app te maken', 'email_smtp_port' => 'SMTP poort',
'pushover_api_token' => 'Pushover App API Token', 'email_smtp_security' => 'SMTP beveiliging',
'pushover_api_token_description' => 'Voordat je Pushover kunt gebruiken moet je een <a href="%1$s" target="_blank" rel="noopener">App registreren</a> via hun website, en daarvan de App API Token hier invullen.', 'email_smtp_security_none' => 'Geen',
'telegram_status' => 'Sta Telegram berichten toe?', 'email_smtp_username' => 'SMTP gebruikersnaam',
'telegram_api_token' => 'Telegram API Token', 'email_smtp_password' => 'SMTP wachtwoord',
'alert_type' => 'Selecteer wanneer je een notificatie wilt', 'email_smtp_noauth' => 'Laat leeg voor geen authenticatie',
'alert_type_description' => '<b>Status verandert:</b> Je ontvangt alleen bericht wanneer een server van status verandert. Dus van online -> offline of offline -> online.<br><br /><b>Offline:</b> Je ontvangt bericht wanneer een server offline gaat voor de *EERSTE KEER*. Bijvoorbeeld, je cronjob draait iedere 15 min en je server gaat down om 01:00 en blijft offline tot 06:00. Je krijgt 1 bericht om 01:00 en dat is het.<br><br><b>Altijd:</b> Je krijgt een bericht elke keer dat het script draait en een website is down, ook al is de site al een paar uur offline.', 'sms_status' => 'Sta SMS berichten toe?',
'alert_type_status' => 'Status verandering', 'sms_gateway' => 'Gateway voor het sturen van SMS',
'alert_type_offline' => 'Offline', 'sms_gateway_username' => 'Gateway gebruikersnaam',
'alert_type_always' => 'Altijd', 'sms_gateway_password' => 'Gateway wachtwoord',
'combine_notifications' => 'Combineer notificaties', 'sms_from' => 'Telefoonnummer afzender',
'alert_proxy_url' => 'Formaat: host:poort', 'pushover_status' => 'Sta Pushover berichten toe?',
'log_status' => 'Log status', 'pushover_description' => 'Pushover is een dienst die het gemakkelijk maakt om real-time notificaties te
'log_status_description' => 'Als de log status aan staat, zal de monitor een log aanmaken elke keer dat hij door de notificatie instellingen komt.', ontvangen. Zie <a href="https://pushover.net/" target="_blank">hun website</a> voor meer
'log_email' => 'Log emails verstuurd bij het script?', informatie.',
'log_sms' => 'Log sms berichten verstuurd bij het script?', 'pushover_clone_app' => 'Klik hier om je Pushover app te maken',
'log_pushover' => 'Log Pushover berichten verstuurd bij het script?', 'pushover_api_token' => 'Pushover App API Token',
'log_telegram' => 'Log Telegram berichten verstuurd bij het script?', 'pushover_api_token_description' => 'Voordat je Pushover kunt gebruiken moet je een <a href="%1$s"
'updated' => 'De configuratie is gewijzigd.', target="_blank" rel="noopener">App registreren</a> via hun website, en
'tab_email' => 'Email', daarvan de App API Token hier invullen.',
'tab_sms' => 'SMS', 'telegram_status' => 'Sta Telegram berichten toe?',
'tab_pushover' => 'Pushover', 'telegram_api_token' => 'Telegram API Token',
'tab_telegram' => 'Telegram', 'alert_type' => 'Selecteer wanneer je een notificatie wilt',
'settings_email' => 'Email instellingen', 'alert_type_description' => '<b>Status verandert:</b> Je ontvangt alleen bericht wanneer een server van status
'settings_sms' => 'SMS instellingen', verandert. Dus van online -> offline of offline -> online.<br><br
'settings_pushover' => 'Pushover instellingen', /><b>Offline:</b> Je ontvangt bericht wanneer een server offline gaat voor de
'settings_telegram' => 'Telegram instellingen', *EERSTE KEER*. Bijvoorbeeld, je cronjob draait iedere 15 min en je server gaat
'settings_notification' => 'Notificatie instellingen', down om 01:00 en blijft offline tot 06:00. Je krijgt 1 bericht om 01:00 en dat is
'settings_log' => 'Log instellingen', het.<br><br><b>Altijd:</b> Je krijgt een bericht elke keer dat het script draait
'settings_proxy' => 'Proxy instellingen', en een website is down, ook al is de site al een paar uur offline.',
'auto_refresh' => 'Herlaad automatisch', 'alert_type_status' => 'Status verandering',
'auto_refresh_description' => 'Auto-herladen servers pagina.<br><span class="small">Tijd in seconden, als de tijd 0 is wordt de pagina niet ververst.</span>', 'alert_type_offline' => 'Offline',
'seconds' => 'seconden', 'alert_type_always' => 'Altijd',
'test' => 'Test', 'combine_notifications' => 'Combineer notificaties',
'test_email' => 'Er zal een email verstuurd worden naar het email adres in je profiel.', 'alert_proxy_url' => 'Formaat: host:poort',
'test_sms' => 'Er zal een SMS verstuurd worden naar het telefoonnummer in je profiel.', 'log_status' => 'Log status',
'test_pushover' => 'Er zal een Pushover notificatie verstuurd worden naar de user key/device in je profiel.', 'log_status_description' => 'Als de log status aan staat, zal de monitor een log aanmaken elke keer dat hij
'send' => 'Verstuur', door de notificatie instellingen komt.',
'test_subject' => 'Test', 'log_email' => 'Log emails verstuurd bij het script?',
'test_message' => 'Test bericht', 'log_sms' => 'Log sms berichten verstuurd bij het script?',
'email_sent' => 'Email verzonden', 'log_pushover' => 'Log Pushover berichten verstuurd bij het script?',
'email_error' => 'Er is een fout opgetreden tijdens het verzenden', 'log_telegram' => 'Log Telegram berichten verstuurd bij het script?',
'sms_sent' => 'SMS verzonden', 'updated' => 'De configuratie is gewijzigd.',
'sms_error' => 'Er is een fout opgetreden tijdens het verzenden. %s', 'tab_email' => 'Email',
'sms_error_nomobile' => 'Kan test SMS niet verzenden: er is geen telefoonnummer ingevuld in je profiel.', 'tab_sms' => 'SMS',
'pushover_sent' => 'Pushover notificatie verzonden', 'tab_pushover' => 'Pushover',
'pushover_error' => 'De volgende fout is opgetreden bij het versturen van de Pushover notificatie: %s', 'tab_telegram' => 'Telegram',
'pushover_error_noapp' => 'Kan test notificatie niet verzenden: er is geen Pushover App API token gevonden in de algemene configuratie.', 'settings_email' => 'Email instellingen',
'pushover_error_nokey' => 'Kan test notificatie niet verzenden: er is geen Pushover key gevonden in je profiel.', 'settings_sms' => 'SMS instellingen',
'telegram_sent' => 'Telegram notificatie verstuurd', 'settings_pushover' => 'Pushover instellingen',
'telegram_error' => 'Er is een error voorgekomen tijdens het versturen van de Telegram notificatie: %s', 'settings_telegram' => 'Telegram instellingen',
'telegram_error_notoken' => 'Niet mogelijk on test notificatie te versturen: Telegram API token niet gevonden in globale instellingen.', 'settings_notification' => 'Notificatie instellingen',
'telegram_error_noid' => 'Niet mogelijk on test notificatie te versturen: chat id niet gevonden op profiel.', 'settings_log' => 'Log instellingen',
'log_retention_period' => 'Log retentie periode', 'settings_proxy' => 'Proxy instellingen',
'log_retention_period_description' => 'Aantal dagen dat logs van notificaties en archieven van server uptime worden bewaard. Vul 0 in om log opruiming uit te zetten.', 'auto_refresh' => 'Herlaad automatisch',
'log_retention_days' => 'dagen', 'auto_refresh_description' => 'Auto-herladen servers pagina.<br><span class="small">Tijd in seconden, als de
), tijd 0 is wordt de pagina niet ververst.</span>',
'notifications' => array( 'seconds' => 'seconden',
'off_sms' => 'Server %LABEL% is DOWN: ip=%IP%, poort=%PORT%. Fout=%ERROR%', 'test' => 'Test',
'off_email_subject' => 'BELANGRIJK: Server %LABEL% is DOWN', 'test_email' => 'Er zal een email verstuurd worden naar het email adres in je profiel.',
'off_email_body' => 'De server kon niet worden bereikt:<br><br>Server: %LABEL%<br>IP: %IP%<br>Poort: %PORT%<br>Fout: %ERROR%<br>Datum: %DATE%', 'test_sms' => 'Er zal een SMS verstuurd worden naar het telefoonnummer in je profiel.',
'off_pushover_title' => 'Server %LABEL% is DOWN', 'test_pushover' => 'Er zal een Pushover notificatie verstuurd worden naar de user key/device in je profiel.',
'off_pushover_message' => 'De server kon niet worden bereikt:<br><br>Server: %LABEL%<br>IP: %IP%<br>Poort: %PORT%<br>Fout: %ERROR%<br>Datum: %DATE%', 'send' => 'Verstuur',
'off_telegram_message' => 'De server kon niet worden bereikt:<br><br>Server: %LABEL%<br>IP: %IP%<br>Poort: %PORT%<br>Fout: %ERROR%<br>Datum: %DATE%', 'test_subject' => 'Test',
'on_sms' => 'Server %LABEL% is RUNNING: ip=%IP%, poort=%PORT%, tijd offline=%LAST_OFFLINE_DURATION%', 'test_message' => 'Test bericht',
'on_email_subject' => 'BELANGRIJK: Server %LABEL% is RUNNING', 'email_sent' => 'Email verzonden',
'on_email_body' => 'Server %LABEL% is na %LAST_OFFLINE_DURATION% weer online:<br><br>Server: %LABEL%<br>IP: %IP%<br>Poort: %PORT%<br>Datum: %DATE%', 'email_error' => 'Er is een fout opgetreden tijdens het verzenden',
'on_pushover_title' => 'Server %LABEL% is RUNNING', 'sms_sent' => 'SMS verzonden',
'on_pushover_message' => 'Server %LABEL% is na %LAST_OFFLINE_DURATION% weer online:<br><br>Server: %LABEL%<br>IP: %IP%<br>Poort: %PORT%<br>Datum: %DATE%', 'sms_error' => 'Er is een fout opgetreden tijdens het verzenden. %s',
), 'sms_error_nomobile' => 'Kan test SMS niet verzenden: er is geen telefoonnummer ingevuld in je profiel.',
'login' => array( 'pushover_sent' => 'Pushover notificatie verzonden',
'welcome_usermenu' => 'Welkom, %user_name%', 'pushover_error' => 'De volgende fout is opgetreden bij het versturen van de Pushover notificatie: %s',
'title_sign_in' => 'Log in', 'pushover_error_noapp' => 'Kan test notificatie niet verzenden: er is geen Pushover App API token gevonden in
'title_forgot' => 'Wachtwoord vergeten?', de algemene configuratie.',
'title_reset' => 'Herstel wachtwoord', 'pushover_error_nokey' => 'Kan test notificatie niet verzenden: er is geen Pushover key gevonden in je
'submit' => 'Sla op', profiel.',
'remember_me' => 'Onthoud mij', 'telegram_sent' => 'Telegram notificatie verstuurd',
'login' => 'Login', 'telegram_error' => 'Er is een error voorgekomen tijdens het versturen van de Telegram notificatie: %s',
'logout' => 'Uitloggen', 'telegram_error_notoken' => 'Niet mogelijk on test notificatie te versturen: Telegram API token niet gevonden
'username' => 'Gebruikersnaam', in globale instellingen.',
'password' => 'Wachtwoord', 'telegram_error_noid' => 'Niet mogelijk on test notificatie te versturen: chat id niet gevonden op profiel.',
'password_repeat' => 'Herhaal wachtwoord', 'log_retention_period' => 'Log retentie periode',
'password_forgot' => 'Wachtwoord vergeten?', 'log_retention_period_description' => 'Aantal dagen dat logs van notificaties en archieven van server uptime
'password_reset' => 'Wachtwoord herstellen', worden bewaard. Vul 0 in om log opruiming uit te zetten.',
'password_reset_email_subject' => 'Wijzig je wachtwoord voor PHP Server Monitor', 'log_retention_days' => 'dagen',
'password_reset_email_body' => 'Gebruik de onderstaande link om je wachtwoord te wijzigen. Let op, deze link verloopt na 1 uur.<br><br>%link%', ),
'error_user_incorrect' => 'De opgegeven gebruikersnaam is onjuist.', 'notifications' => array(
'error_login_incorrect' => 'De informatie is niet juist.', 'off_sms' => 'Server %LABEL% is DOWN: ip=%IP%, poort=%PORT%. Fout=%ERROR%',
'error_login_passwords_nomatch' => 'De ingevulde wachtwoorden komen niet overeen.', 'off_email_subject' => 'BELANGRIJK: Server %LABEL% is DOWN',
'error_reset_invalid_link' => 'De reset link is ongeldig.', 'off_email_body' => 'De server kon niet worden bereikt:<br><br>Server: %LABEL%<br>IP: %IP%<br>Poort:
'success_password_forgot' => 'Er is een mail verstuurd met informatie om je wachtwoord aan te passen.', %PORT%<br>Fout: %ERROR%<br>Datum: %DATE%',
'success_password_reset' => 'Je wachtwoord is aangepast. Je kunt nu inloggen.', 'off_pushover_title' => 'Server %LABEL% is DOWN',
), 'off_pushover_message' => 'De server kon niet worden bereikt:<br><br>Server: %LABEL%<br>IP: %IP%<br>Poort:
'error' => array( %PORT%<br>Fout: %ERROR%<br>Datum: %DATE%',
'401_unauthorized' => 'Unauthorized', 'off_telegram_message' => 'De server kon niet worden bereikt:<br><br>Server: %LABEL%<br>IP: %IP%<br>Poort:
'401_unauthorized_description' => 'Je hebt niet de juiste bevoegdheden om deze pagina te bekijken.', %PORT%<br>Fout: %ERROR%<br>Datum: %DATE%',
), 'on_sms' => 'Server %LABEL% is RUNNING: ip=%IP%, poort=%PORT%, tijd offline=%LAST_OFFLINE_DURATION%',
); 'on_email_subject' => 'BELANGRIJK: Server %LABEL% is RUNNING',
'on_email_body' => 'Server %LABEL% is na %LAST_OFFLINE_DURATION% weer online:<br><br>Server: %LABEL%<br>IP:
%IP%<br>Poort: %PORT%<br>Datum: %DATE%',
'on_pushover_title' => 'Server %LABEL% is RUNNING',
'on_pushover_message' => 'Server %LABEL% is na %LAST_OFFLINE_DURATION% weer online:<br><br>Server:
%LABEL%<br>IP: %IP%<br>Poort: %PORT%<br>Datum: %DATE%',
),
'login' => array(
'welcome_usermenu' => 'Welkom, %user_name%',
'title_sign_in' => 'Log in',
'title_forgot' => 'Wachtwoord vergeten?',
'title_reset' => 'Herstel wachtwoord',
'submit' => 'Sla op',
'remember_me' => 'Onthoud mij',
'login' => 'Login',
'logout' => 'Uitloggen',
'username' => 'Gebruikersnaam',
'password' => 'Wachtwoord',
'password_repeat' => 'Herhaal wachtwoord',
'password_forgot' => 'Wachtwoord vergeten?',
'password_reset' => 'Wachtwoord herstellen',
'password_reset_email_subject' => 'Wijzig je wachtwoord voor PHP Server Monitor',
'password_reset_email_body' => 'Gebruik de onderstaande link om je wachtwoord te wijzigen. Let op, deze link
verloopt na 1 uur.<br><br>%link%',
'error_user_incorrect' => 'De opgegeven gebruikersnaam is onjuist.',
'error_login_incorrect' => 'De informatie is niet juist.',
'error_login_passwords_nomatch' => 'De ingevulde wachtwoorden komen niet overeen.',
'error_reset_invalid_link' => 'De reset link is ongeldig.',
'success_password_forgot' => 'Er is een mail verstuurd met informatie om je wachtwoord aan te passen.',
'success_password_reset' => 'Je wachtwoord is aangepast. Je kunt nu inloggen.',
),
'error' => array(
'401_unauthorized' => 'Unauthorized',
'401_unauthorized_description' => 'Je hebt niet de juiste bevoegdheden om deze pagina te bekijken.',
),
);

View File

@ -1,4 +1,5 @@
<?php <?php
/** /**
* PHP Server Monitor * PHP Server Monitor
* Monitor your servers and websites. * Monitor your servers and websites.
@ -26,343 +27,384 @@
**/ **/
$sm_lang = array( $sm_lang = array(
'name' => 'Norsk - Norwegian', 'name' => 'Norsk - Norwegian',
'locale' => array('no_NB.UTF-8', 'no_NB', 'norwegian', 'norwegian-no'), 'locale' => array(
'locale_tag' => 'no', '0' => 'no_NB.UTF-8',
'locale_dir' => 'ltr', '1' => 'no_NB',
'system' => array( '2' => 'norwegian',
'title' => 'Server Overvåking', '3' => 'norwegian-no',
'install' => 'Installer', ),
'action' => 'Handling', 'locale_tag' => 'no',
'save' => 'Lagre', 'locale_dir' => 'ltr',
'edit' => 'Endre', 'system' => array(
'delete' => 'Slett', 'title' => 'Server Overvåking',
'date' => 'Dato', 'install' => 'Installer',
'message' => 'Melding', 'action' => 'Handling',
'yes' => 'Ja', 'save' => 'Lagre',
'no' => 'Nei', 'edit' => 'Endre',
'insert' => 'Sett inn', 'delete' => 'Slett',
'add_new' => 'Legg til ny', 'date' => 'Dato',
'update_available' => 'En ny versjon ({versjon}) er tilgjengelig på <a href="https://github.com/phpservermon/phpservermon/releases/latest" target="_blank" rel="noopener">http://www.phpservermonitor.org</a>.', 'message' => 'Melding',
'back_to_top' => 'Tilbake til toppen', 'yes' => 'Ja',
'go_back' => 'Gå tilbake', 'no' => 'Nei',
'ok' => 'OK', 'insert' => 'Sett inn',
'cancel' => 'Avbryt', 'add_new' => 'Legg til ny',
'activate' => 'Aktiver', 'update_available' => 'En ny versjon ({versjon}) er tilgjengelig <a
// date/time format according the strftime php function format parameter http://php.net/manual/function.strftime.php href="https://github.com/phpservermon/phpservermon/releases/latest" target="_blank"
'short_day_format' => '%e. %B', rel="noopener">http://www.phpservermonitor.org</a>.',
'long_day_format' => '%e. %B, %Y', 'back_to_top' => 'Tilbake til toppen',
'yesterday_format' => 'Yesterday at %H:%M', 'go_back' => 'Gå tilbake',
'other_day_format' => '%A at %H:%M', 'ok' => 'OK',
'never' => 'Aldri', 'cancel' => 'Avbryt',
'hours_ago' => '%d timer siden', 'activate' => 'Aktiver',
'an_hour_ago' => 'omtrent et time siden', 'short_day_format' => '%e. %B',
'minutes_ago' => '%d minutter siden', 'long_day_format' => '%e. %B, %Y',
'a_minute_ago' => 'omtrent et minutt siden', 'yesterday_format' => 'Yesterday at %H:%M',
'seconds_ago' => '%d sekunder siden', 'other_day_format' => '%A at %H:%M',
'a_second_ago' => 'et sekund siden', 'never' => 'Aldri',
'year' => 'år', 'hours_ago' => '%d timer siden',
'years' => 'år', 'an_hour_ago' => 'omtrent et time siden',
'month' => 'måned', 'minutes_ago' => '%d minutter siden',
'months' => 'måneder', 'a_minute_ago' => 'omtrent et minutt siden',
'day' => 'dag', 'seconds_ago' => '%d sekunder siden',
'days' => 'dager', 'a_second_ago' => 'et sekund siden',
'hour' => 'time', 'year' => 'år',
'hours' => 'timer', 'years' => 'år',
'minute' => 'minutt', 'month' => 'måned',
'minutes' => 'minutter', 'months' => 'måneder',
'second' => 'sekund', 'day' => 'dag',
'seconds' => 'sekunder', 'days' => 'dager',
), 'hour' => 'time',
'menu' => array( 'hours' => 'timer',
'config' => 'Konfig', 'minute' => 'minutt',
'server' => 'Servere', 'minutes' => 'minutter',
'server_log' => 'Logg', 'second' => 'sekund',
'server_status' => 'Status', 'seconds' => 'sekunder',
'server_update' => 'Oppdater', ),
'user' => 'Brukere', 'menu' => array(
'help' => 'Hjelp', 'config' => 'Konfig',
), 'server' => 'Servere',
'users' => array( 'server_log' => 'Logg',
'user' => 'Bruker', 'server_status' => 'Status',
'name' => 'Navn', 'server_update' => 'Oppdater',
'user_name' => 'Brukernavn', 'user' => 'Brukere',
'password' => 'Passord', 'help' => 'Hjelp',
'password_repeat' => 'Gjenta passord', ),
'password_leave_blank' => 'La være tom for å forbli uendret', 'users' => array(
'level' => 'Level', 'user' => 'Bruker',
'level_10' => 'Administrator', 'name' => 'Navn',
'level_20' => 'Bruker', 'user_name' => 'Brukernavn',
'level_description' => '<b>Administratorer</b> har full tilgang: de kan administrere servere, brukere og redigere den globale konfigurasjonen.<br><b>Brukere</b> kan bare vise og kjøre oppdatering for serverne som er tildelt dem.', 'password' => 'Passord',
'mobile' => 'Mobil', 'password_repeat' => 'Gjenta passord',
'email' => 'E-post', 'password_leave_blank' => 'La være tom for å forbli uendret',
'pushover' => 'Pushover', 'level' => 'Level',
'pushover_description' => 'Pushover er en tjeneste som gjør det enkelt å få meldinger i sanntid. Se <a href="https://pushover.net/">deres nettside</a> for mer info.', 'level_10' => 'Administrator',
'pushover_key' => 'Pushover Key', 'level_20' => 'Bruker',
'pushover_device' => 'Pushover Device', 'level_description' => '<b>Administratorer</b> har full tilgang: de kan administrere servere, brukere og
'pushover_device_description' => 'Enhetsnavn for å sende meldingen til. La det være tomt for å sende det til alle enheter.', redigere den globale konfigurasjonen.<br><b>Brukere</b> kan bare vise og kjøre
'telegram' => 'Telegram', oppdatering for serverne som er tildelt dem.',
'telegram_description' => '<a href="https://telegram.org/">Telegram</a> er en chat-app som gjør det enkelt å få meldinger i sanntid. Gå til <a href="http://docs.phpservermonitor.org/">dokumentasjonen</a> for mer informasjon og en installasjonsguide. ', 'mobile' => 'Mobil',
'telegram_chat_id' => 'Telegram chat-ID', 'email' => 'E-post',
'telegram_chat_id_description' => 'Meldingen vil bli sendt til tilhørende chat.', 'pushover' => 'Pushover',
'telegram_get_chat_id' => 'Klikk her for å få chat-ID', 'pushover_description' => 'Pushover er en tjeneste som gjør det enkelt å meldinger i sanntid. Se <a
'activate_telegram' => 'Aktiver Telegram notifications', href="https://pushover.net/" target="_blank">deres nettside</a> for mer info.',
'activate_telegram_description' => 'Tillat Telegram varsler som skal sendes til det angitte chat-IDet. Uten denne tillatelsen tillater Telegram oss ikke å sende varsler til deg.', 'pushover_key' => 'Pushover Key',
'telegram_bot_username_found' => 'The bot was found!<br><a href="%s" target="_blank" rel="noopener"><button class="btn btn-primary">Neste steg</button></a> <br>Dette åpner en chat med bot. Her må du trykke på start ved å skrive: /start.', 'pushover_device' => 'Pushover Device',
'telegram_bot_username_error_token' => '401 - Unauthorized. Pass på at API-token er gyldig.', 'pushover_device_description' => 'Enhetsnavn for å sende meldingen til. La det være tomt for å sende det
'telegram_bot_error' => 'Det har oppstått en feil under aktivering av Telegram varsling: %s', til alle enheter.',
'delete_title' => 'Slett bruker', 'telegram' => 'Telegram',
'delete_message' => 'Er du sikker på at du vil slette brukeren \'%1\'?', 'telegram_description' => '<a href="https://telegram.org/" target="_blank">Telegram</a> er en chat-app som
'deleted' => 'Bruker slettet.', gjør det enkelt å meldinger i sanntid. til <a
'updated' => 'Bruker oppdatert.', href="http://docs.phpservermonitor.org/" target="_blank">dokumentasjonen</a> for
'inserted' => 'Bruker lagt til.', mer informasjon og en installasjonsguide. ',
'profile' => 'Profil', 'telegram_chat_id' => 'Telegram chat-ID',
'profile_updated' => 'Din profil har blitt oppdatert.', 'telegram_chat_id_description' => 'Meldingen vil bli sendt til tilhørende chat.',
'error_user_name_bad_length' => 'Brukernavn må være mellom 2 og 64 tegn.', 'telegram_get_chat_id' => 'Klikk her for å få chat-ID',
'error_user_name_invalid' => 'Brukernavnet kan bare inneholde alfabetiske tegn (a-z, A-Z), sifre (0-9), punktum (.) and understrek (_).', 'activate_telegram' => 'Aktiver Telegram notifications',
'error_user_name_exists' => 'Det oppgitte brukernavnet eksisterer allerede i databasen.', 'activate_telegram_description' => 'Tillat Telegram varsler som skal sendes til det angitte chat-IDet. Uten
'error_user_email_bad_length' => 'E-postadresser må være mellom 5 og 255 tegn.', denne tillatelsen tillater Telegram oss ikke å sende varsler til deg.',
'error_user_email_invalid' => 'E-postadressen er ugyldig.', 'telegram_bot_username_found' => 'The bot was found!<br><a href="%s" target="_blank" rel="noopener"><button
'error_user_level_invalid' => 'Det oppgitte brukernivået er ugyldig.', class="btn btn-primary">Neste steg</button></a> <br>Dette åpner en chat med
'error_user_no_match' => 'Brukeren kunne ikke bli funnet i databasen.', bot. Her du trykke start ved å skrive: /start.',
'error_user_password_invalid' => 'Det oppgitte passordet er ugyldig.', 'telegram_bot_username_error_token' => '401 - Unauthorized. Pass på at API-token er gyldig.',
'error_user_password_no_match' => 'De oppgitte passordene stemmer ikke overens.', 'telegram_bot_error' => 'Det har oppstått en feil under aktivering av Telegram varsling: %s',
), 'delete_title' => 'Slett bruker',
'log' => array( 'delete_message' => 'Er du sikker på at du vil slette brukeren \'%1\'?',
'title' => 'Logg oppføringer', 'deleted' => 'Bruker slettet.',
'type' => 'Type', 'updated' => 'Bruker oppdatert.',
'status' => 'Status', 'inserted' => 'Bruker lagt til.',
'email' => 'E-post', 'profile' => 'Profil',
'sms' => 'Tekstmelding', 'profile_updated' => 'Din profil har blitt oppdatert.',
'pushover' => 'Pushover', 'error_user_name_bad_length' => 'Brukernavn må være mellom 2 og 64 tegn.',
'telegram' => 'Telegram', 'error_user_name_invalid' => 'Brukernavnet kan bare inneholde alfabetiske tegn (a-z, A-Z), sifre (0-9),
'no_logs' => 'Ingen logger', punktum (.) and understrek (_).',
'clear' => 'Tøm logg', 'error_user_name_exists' => 'Det oppgitte brukernavnet eksisterer allerede i databasen.',
'delete_title' => 'Slett logg', 'error_user_email_bad_length' => 'E-postadresser må være mellom 5 og 255 tegn.',
'delete_message' => 'Er du sikker på at du vil slette <b>alle</ b> logger?', 'error_user_email_invalid' => 'E-postadressen er ugyldig.',
), 'error_user_level_invalid' => 'Det oppgitte brukernivået er ugyldig.',
'servers' => array( 'error_user_no_match' => 'Brukeren kunne ikke bli funnet i databasen.',
'server' => 'Server', 'error_user_password_invalid' => 'Det oppgitte passordet er ugyldig.',
'status' => 'Status', 'error_user_password_no_match' => 'De oppgitte passordene stemmer ikke overens.',
'label' => 'Label', ),
'domain' => 'Domene/IP', 'log' => array(
'timeout' => 'Timeout', 'title' => 'Logg oppføringer',
'timeout_description' => 'Antall sekunder å vente på at serveren skal svare.', 'type' => 'Type',
'authentication_settings' => 'Autentiseringsinnstillinger', 'status' => 'Status',
'optional' => 'ValgfrittF', 'email' => 'E-post',
'website_username' => 'Brukernavn', 'sms' => 'Tekstmelding',
'website_username_description' => 'Brukernavn for å få tilgang til nettstedet. (Kun Apache-godkjenning støttes.)', 'pushover' => 'Pushover',
'website_password' => 'Password', 'telegram' => 'Telegram',
'website_password_description' => 'Passord for å få tilgang til nettstedet. Passordet er kryptert i databasen.', 'no_logs' => 'Ingen logger',
'fieldset_monitoring' => 'Overvåkning', 'clear' => 'Tøm logg',
'fieldset_permissions' => 'Tilganger', 'delete_title' => 'Slett logg',
'port' => 'Port', 'delete_message' => 'Er du sikker på at du vil slette <b>alle</ b> logger?',
'custom_port' => 'Tilpasset Port', ),
'popular_ports' => 'Populære Ports', 'servers' => array(
'please_select' => 'Vennligst vent', 'server' => 'Server',
'type' => 'Type', 'status' => 'Status',
'type_website' => 'Nettside', 'label' => 'Label',
'type_service' => 'Tjeneste', 'domain' => 'Domene/IP',
'type_ping' => 'Ping', 'timeout' => 'Timeout',
'pattern' => 'Søke streng/mønster', 'timeout_description' => 'Antall sekunder å vente på at serveren skal svare.',
'pattern_description' => 'Hvis dette mønsteret ikke er funnet på nettstedet, blir serveren merket online/offline. Vanlige uttrykk er tillatt.', 'authentication_settings' => 'Autentiseringsinnstillinger',
'pattern_online' => 'Mønster indikerer at nettstedet er', 'optional' => 'ValgfrittF',
'pattern_online_description' => 'Online: Hvis dette mønsteret ikke er funnet på nettstedet, blir serveren merket online. Offline: Hvis dette mønsteret ikke er funnet på nettstedet, blir serveren merket offline.', 'website_username' => 'Brukernavn',
'header_name' => 'Overskriftnavn', 'website_username_description' => 'Brukernavn for å tilgang til nettstedet. (Kun Apache-godkjenning
'header_value' => 'Overskriftsverdi', støttes.)',
'header_name_description' => 'Versalsensitivt.', 'website_password' => 'Password',
'header_value_description' => 'Vanlige uttrykk er tillatt.', 'website_password_description' => 'Passord for å tilgang til nettstedet. Passordet er kryptert i
'last_check' => 'Siste sjekk', databasen.',
'last_online' => 'Sist online', 'fieldset_monitoring' => 'Overvåkning',
'last_offline' => 'Sist offline', 'fieldset_permissions' => 'Tilganger',
'monitoring' => 'Overvåking', 'port' => 'Port',
'no_monitoring' => 'Ingen overvåking', 'custom_port' => 'Tilpasset Port',
'email' => 'E-post', 'popular_ports' => 'Populære Ports',
'send_email' => 'Send e-post', 'please_select' => 'Vennligst vent',
'sms' => 'Tekstmelding', 'type' => 'Type',
'send_sms' => 'Send tekstmelding', 'type_website' => 'Nettside',
'pushover' => 'Pushover', 'type_service' => 'Tjeneste',
'send_pushover' => 'Send Pushover melding', 'type_ping' => 'Ping',
'telegram' => 'Telegram', 'pattern' => 'Søke streng/mønster',
'send_telegram' => 'Send Telegram melding', 'pattern_description' => 'Hvis dette mønsteret ikke er funnet nettstedet, blir serveren merket
'users' => 'Brukere', online/offline. Vanlige uttrykk er tillatt.',
'delete_title' => 'Slett server', 'pattern_online' => 'Mønster indikerer at nettstedet er',
'delete_message' => 'Er du sikker på at du vil slette serveren \'%1\'?', 'pattern_online_description' => 'Online: Hvis dette mønsteret blir funnet nettstedet, er serverens merke
'deleted' => 'Server slettet.', online. Frakoblet: Hvis dette mønsteret ikke blir funnet nettstedet,
'updated' => 'Server oppdatert.', flagges serveren offline.',
'inserted' => 'Server lagt til.', 'header_name' => 'Overskriftnavn',
'latency' => 'Ventetid', 'header_value' => 'Overskriftsverdi',
'latency_max' => 'Ventetid (maximum)', 'header_name_description' => 'Versalsensitivt.',
'latency_min' => 'Ventetid (minimum)', 'header_value_description' => 'Vanlige uttrykk er tillatt.',
'latency_avg' => 'Ventetid (gjennomsnitt)', 'last_check' => 'Siste sjekk',
'online' => 'online', 'last_online' => 'Sist online',
'offline' => 'offline', 'last_offline' => 'Sist offline',
'uptime' => 'Oppetid', 'monitoring' => 'Overvåking',
'year' => 'År', 'no_monitoring' => 'Ingen overvåking',
'month' => 'Måned', 'email' => 'E-post',
'week' => 'Uke', 'send_email' => 'Send e-post',
'day' => 'Dag', 'sms' => 'Tekstmelding',
'hour' => 'Time', 'send_sms' => 'Send tekstmelding',
'warning_threshold' => 'Advarselsgrense', 'pushover' => 'Pushover',
'warning_threshold_description' => 'Antall mislykkede sjekker kreves før den er merket frakoblet.', 'send_pushover' => 'Send Pushover melding',
'chart_last_week' => 'Forrige uke', 'telegram' => 'Telegram',
'chart_history' => 'Historie', 'send_telegram' => 'Send Telegram melding',
// Charts date format according jqPlot date format http://www.jqplot.com/docs/files/plugins/jqplot-dateAxisRenderer-js.html 'users' => 'Brukere',
'chart_day_format' => '%d-%m-%Y', 'delete_title' => 'Slett server',
'chart_long_date_format' => '%d-%m-%Y %H:%M:%S', 'delete_message' => 'Er du sikker på at du vil slette serveren \'%1\'?',
'chart_short_date_format' => '%d/%m %H:%M', 'deleted' => 'Server slettet.',
'chart_short_time_format' => '%H:%M', 'updated' => 'Server oppdatert.',
'warning_notifications_disabled_sms' => 'Tekstmelding varsling er deaktivert.', 'inserted' => 'Server lagt til.',
'warning_notifications_disabled_email' => 'E-post varsling er deaktivert.', 'latency' => 'Ventetid',
'warning_notifications_disabled_pushover' => 'Pushover varsling er deaktivert.', 'latency_max' => 'Ventetid (maximum)',
'warning_notifications_disabled_telegram' => 'Telegram varsling er deaktivert.', 'latency_min' => 'Ventetid (minimum)',
'error_server_no_match' => 'Server ikke funnet.', 'latency_avg' => 'Ventetid (gjennomsnitt)',
'error_server_label_bad_length' => 'Etiketten må være mellom 1 og 255 tegn.', 'online' => 'online',
'error_server_ip_bad_length' => 'Domenet / IP må være mellom 1 og 255 tegn.', 'offline' => 'offline',
'error_server_ip_bad_service' => 'IP-adressen er ikke gyldig.', 'uptime' => 'Oppetid',
'error_server_ip_bad_website' => 'Nettstedets URL er ikke gyldig.', 'year' => 'År',
'error_server_type_invalid' => 'Den valgte servertypen er ugyldig.', 'month' => 'Måned',
'error_server_warning_threshold_invalid' => 'Advarselsgrensen må være et gyldig heltall større enn 0.', 'week' => 'Uke',
), 'day' => 'Dag',
'config' => array( 'hour' => 'Time',
'general' => 'General', 'warning_threshold' => 'Advarselsgrense',
'language' => 'Språk', 'warning_threshold_description' => 'Antall mislykkede sjekker kreves før den er merket frakoblet.',
'show_update' => 'Se etter oppdateringer?', 'chart_last_week' => 'Forrige uke',
'password_encrypt_key' => 'Krypteringsnøkkelpassordet', 'chart_history' => 'Historie',
'password_encrypt_key_note' => 'Denne nøkkelen brukes til å kryptere passord som er lagret på servere for tilgang til nettsteder. Hvis nøkkelen endres, er det lagrede passordet ugyldig!', 'chart_day_format' => '%d-%m-%Y',
'proxy' => 'Aktiver proxy', 'chart_long_date_format' => '%d-%m-%Y %H:%M:%S',
'proxy_url' => 'Proxy URL', 'chart_short_date_format' => '%d/%m %H:%M',
'proxy_user' => 'Proxy brukernavn', 'chart_short_time_format' => '%H:%M',
'proxy_password' => 'Proxy passord', 'warning_notifications_disabled_sms' => 'Tekstmelding varsling er deaktivert.',
'email_status' => 'Tillat sending av e-post', 'warning_notifications_disabled_email' => 'E-post varsling er deaktivert.',
'email_from_email' => 'E-post fra adresse', 'warning_notifications_disabled_pushover' => 'Pushover varsling er deaktivert.',
'email_from_name' => 'E-post from navn', 'warning_notifications_disabled_telegram' => 'Telegram varsling er deaktivert.',
'email_smtp' => 'Aktiver SMTP', 'error_server_no_match' => 'Server ikke funnet.',
'email_smtp_host' => 'SMTP-vert', 'error_server_label_bad_length' => 'Etiketten må være mellom 1 og 255 tegn.',
'email_smtp_port' => 'SMTP-port', 'error_server_ip_bad_length' => 'Domenet / IP må være mellom 1 og 255 tegn.',
'email_smtp_security' => 'SMTP-sikkerhet', 'error_server_ip_bad_service' => 'IP-adressen er ikke gyldig.',
'email_smtp_security_none' => 'Ingen', 'error_server_ip_bad_website' => 'Nettstedets URL er ikke gyldig.',
'email_smtp_username' => 'SMTP brukernavn', 'error_server_type_invalid' => 'Den valgte servertypen er ugyldig.',
'email_smtp_password' => 'SMTP passord', 'error_server_warning_threshold_invalid' => 'Advarselsgrensen må være et gyldig heltall større enn 0.',
'email_smtp_noauth' => 'La være tom for ingen godkjenning', ),
'sms_status' => 'Tillat sending av tekstmeldinger', 'config' => array(
'sms_gateway' => 'Gateway for bruk for sending av meldinger', 'general' => 'General',
'sms_gateway_username' => 'Gateway brukernavn', 'language' => 'Språk',
'sms_gateway_password' => 'Gateway passord', 'show_update' => 'Se etter oppdateringer?',
'sms_from' => 'Avsenderens telefonnummer', 'password_encrypt_key' => 'Krypteringsnøkkelpassordet',
'pushover_status' => 'Tillat sending av Pushover-meldinger', 'password_encrypt_key_note' => 'Denne nøkkelen brukes til å kryptere passord som er lagret servere for
'pushover_description' => 'Pushover er en tjeneste som gjør det enkelt å få meldinger i sanntid. Se <a href="https://pushover.net/">deres nettside</a> for mer info.', tilgang til nettsteder. Hvis nøkkelen endres, er det lagrede passordet
'pushover_clone_app' => 'Klikk her for å lage din Pushover-app', ugyldig!',
'pushover_api_token' => 'Pushover App API Token', 'proxy' => 'Aktiver proxy',
'pushover_api_token_description' => 'Før du kan bruke Pushover, må du <a href="%1$s" target="_blank" rel="noopener"> registrere en app </a> på deres nettside og angi App API Token her.', 'proxy_url' => 'Proxy URL',
'telegram_status' => 'Tillat sending av Telegram-meldinger', 'proxy_user' => 'Proxy brukernavn',
'telegram_description' => '<a href="https://telegram.org/">Telegram</a> er en chat-app som gjør det enkelt å få meldinger i sanntid. Gå til <a href="http://docs.phpservermonitor.org/">dokumentasjonen</a> for mer informasjon og en installasjonsveiledning.', 'proxy_password' => 'Proxy passord',
'telegram_api_token' => 'Telegram API Token', 'email_status' => 'Tillat sending av e-post',
'telegram_api_token_description' => 'Før du kan bruke Telegram, må du få en API-token. Gå til <a href="http://docs.phpservermonitor.org/">dokumentasjonen</a> for å få hjelp.', 'email_from_email' => 'E-post fra adresse',
'alert_type' => 'Velg når du vil bli varslet.', 'email_from_name' => 'E-post from navn',
'alert_type_description' => '<b>Statusendring:</b> '. 'email_smtp' => 'Aktiver SMTP',
'Du vil motta et varsel når en server har endret status. Så fra online -> offline eller offline -> online.<br>'. 'email_smtp_host' => 'SMTP-vert',
'<br /><b>Offline:</b> '. 'email_smtp_port' => 'SMTP-port',
'Du vil motta et varsel når en server går offline for *FØRSTE GANG BARE*. For eksempel,'. 'email_smtp_security' => 'SMTP-sikkerhet',
'din cronjob er hver 15 minutter og serveren din går ned klokken 01:00 og holder seg ned til 06:00. '. 'email_smtp_security_none' => 'Ingen',
'Du får 1 melding klokken 01:00 og det er det.<br>'. 'email_smtp_username' => 'SMTP brukernavn',
'<br><b>Alltid:</b> '. 'email_smtp_password' => 'SMTP passord',
'Du vil motta et varsel hver gang scriptet kjører, og et nettsted er nede, selv om nettstedet har vært offline i flere timer.', 'email_smtp_noauth' => 'La være tom for ingen godkjenning',
'alert_type_status' => 'Statusendring', 'sms_status' => 'Tillat sending av tekstmeldinger',
'alert_type_offline' => 'Offline', 'sms_gateway' => 'Gateway for bruk for sending av meldinger',
'alert_type_always' => 'Alltid', 'sms_gateway_username' => 'Gateway brukernavn',
'alert_proxy' => 'Selv om aktivert, blir proxy aldri brukt for tjenester', 'sms_gateway_password' => 'Gateway passord',
'alert_proxy_url' => 'Format: Vert:Port', 'sms_from' => 'Avsenderens telefonnummer',
'log_status' => 'Logg status', 'pushover_status' => 'Tillat sending av Pushover-meldinger',
'log_status_description' => 'Hvis loggstatus er satt til SANT, logger monitoren på hendelsen når meldingsinnstillingene er bestått.', 'pushover_description' => 'Pushover er en tjeneste som gjør det enkelt å meldinger i sanntid. Se <a
'log_email' => 'Logg e-post sendt av skriptet', href="https://pushover.net/" target="_blank">deres nettside</a> for mer info.',
'log_sms' => 'Logg tekstmeldinger sendt av skriptet', 'pushover_clone_app' => 'Klikk her for å lage din Pushover-app',
'log_pushover' => 'Logg pushover-meldinger sendt av skriptet', 'pushover_api_token' => 'Pushover App API Token',
'log_telegram' => 'Logg Telegram-meldinger sendt av skriptet', 'pushover_api_token_description' => 'Før du kan bruke Pushover, du <a href="%1$s" target="_blank"
'updated' => 'Konfigurasjonen er oppdatert.', rel="noopener"> registrere en app </a> deres nettside og angi App API
'tab_email' => 'E-post', Token her.',
'tab_sms' => 'Tekstmelding', 'telegram_status' => 'Tillat sending av Telegram-meldinger',
'tab_pushover' => 'Pushover', 'telegram_description' => '<a href="https://telegram.org/" target="_blank">Telegram</a> er en chat-app som
'tab_telegram' => 'Telegram', gjør det enkelt å meldinger i sanntid. til <a
'settings_email' => 'E-post innstillinger', href="http://docs.phpservermonitor.org/" target="_blank">dokumentasjonen</a> for
'settings_sms' => 'Tekstmelding innstillinger', mer informasjon og en installasjonsveiledning.',
'settings_pushover' => 'Pushover innstillinger', 'telegram_api_token' => 'Telegram API Token',
'settings_telegram' => 'Telegram innstillinger', 'telegram_api_token_description' => 'Før du kan bruke Telegram, du en API-token. til <a
'settings_notification' => 'Varsling innstillinger', href="http://docs.phpservermonitor.org/"
'settings_log' => 'Logg innstillinger', target="_blank">dokumentasjonen</a> for å hjelp.',
'settings_proxy' => 'Proxy innstillinger', 'alert_type' => 'Velg når du vil bli varslet.',
'auto_refresh' => 'Auto-refresh', 'alert_type_description' => '<b>Statusendring:</b> Du vil motta et varsel når en server har endret status.
'auto_refresh_description' => fra online -> offline eller offline -> online.<br><br /><b>Offline:</b> Du
'Auto-refresh server side.<br>'. vil motta et varsel når en server går offline for *FØRSTE GANG BARE*. For
'<span class="small">'. eksempel,din cronjob er hver 15 minutter og serveren din går ned klokken 01:00
'Tid i sekunder, hvis 0 siden ikke blir oppdatert.'. og holder seg ned til 06:00. Du får 1 melding klokken 01:00 og det er
'</span>', det.<br><br><b>Alltid:</b> Du vil motta et varsel hver gang scriptet kjører, og
'seconds' => 'sekunder', et nettsted er nede, selv om nettstedet har vært offline i flere timer.',
'test' => 'Test', 'alert_type_status' => 'Statusendring',
'test_email' => 'En e-post vil bli sendt til adressen spesifisert i brukerprofilen din.', 'alert_type_offline' => 'Offline',
'test_sms' => 'En tekstmelding vil bli sendt til telefonnummeret som er angitt i brukerprofilen din.', 'alert_type_always' => 'Alltid',
'test_pushover' => 'En Pushover varsling vil bli sendt til brukernøkkelen/enheten som er angitt i brukerprofilen din.', 'alert_proxy' => 'Selv om aktivert, blir proxy aldri brukt for tjenester',
'test_telegram' => 'Et telegramvarsling vil bli sendt til chat-ID-en spesifisert i brukerprofilen din.', 'alert_proxy_url' => 'Format: Vert:Port',
'send' => 'Send', 'log_status' => 'Logg status',
'test_subject' => 'Test', 'log_status_description' => 'Hvis loggstatus er satt til SANT, logger monitoren hendelsen når
'test_message' => 'Test melding', meldingsinnstillingene er bestått.',
'email_sent' => 'E-post sent', 'log_email' => 'Logg e-post sendt av skriptet',
'email_error' => 'Feil ved sending av e-post', 'log_sms' => 'Logg tekstmeldinger sendt av skriptet',
'sms_sent' => 'Tekstmelding sendt', 'log_pushover' => 'Logg pushover-meldinger sendt av skriptet',
'sms_error' => 'Det har oppstått en feil under sending av tekstmelding: %s', 'log_telegram' => 'Logg Telegram-meldinger sendt av skriptet',
'sms_error_nomobile' => 'Kan ikke sende test tekstmelding: ingen gyldig telefonnummer funnet i profilen din.', 'updated' => 'Konfigurasjonen er oppdatert.',
'pushover_sent' => 'Pushover varsling sendt', 'tab_email' => 'E-post',
'pushover_error' => 'Det har oppstått en feil under sending av Pushover-varslingen: %s', 'tab_sms' => 'Tekstmelding',
'pushover_error_noapp' => 'Kan ikke sende testvarsling: Ingen Pushover App API-token funnet i den globale konfigurasjonen.', 'tab_pushover' => 'Pushover',
'pushover_error_nokey' => 'Kan ikke sende testvarsling: Ingen Pushover-nøkkel funnet i profilen din.', 'tab_telegram' => 'Telegram',
'telegram_sent' => 'Telegram varsling sent', 'settings_email' => 'E-post innstillinger',
'telegram_error' => 'Det har oppstått en feil under sending av telegrammeldingen: %s', 'settings_sms' => 'Tekstmelding innstillinger',
'telegram_error_notoken' => 'Kan ikke sende testvarsling: Ingen Telegram API-token funnet i den globale konfigurasjonen.', 'settings_pushover' => 'Pushover innstillinger',
'telegram_error_noid' => 'Kan ikke sende testvarsling: Ingen chat-ID funnet i profilen din.', 'settings_telegram' => 'Telegram innstillinger',
'log_retention_period' => 'Oppbevaringsperiode for logg', 'settings_notification' => 'Varsling innstillinger',
'log_retention_period_description' => 'Antall dager for å holde logger over varsler og arkiver av serveroppetid. Skriv 0 for å deaktivere loggopprydding.', 'settings_log' => 'Logg innstillinger',
'log_retention_days' => 'dager', 'settings_proxy' => 'Proxy innstillinger',
), 'auto_refresh' => 'Auto-refresh',
// for newlines in the email messages use <br> 'auto_refresh_description' => 'Auto-refresh server side.<br><span class="small">Tid i sekunder, hvis 0 siden
'notifications' => array( ikke blir oppdatert.</span>',
'off_sms' => 'Serveren \'%LABEL%\' er NEDE: ip=%IP%, port=%PORT%. Feil=%ERROR%', 'seconds' => 'sekunder',
'off_email_subject' => 'VIKTIG: Serveren \'%LABEL%\' er NEDE', 'test' => 'Test',
'off_email_body' => "Kunne ikke koble til følgende server:<br><br>Server: %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>Feil: %ERROR%<br>Dato: %DATE%", 'test_email' => 'En e-post vil bli sendt til adressen spesifisert i brukerprofilen din.',
'off_pushover_title' => 'Server \'%LABEL%\' er NEDE', 'test_sms' => 'En tekstmelding vil bli sendt til telefonnummeret som er angitt i brukerprofilen din.',
'off_pushover_message' => "Kunne ikke koble til følgende server:<br><br>Server: %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>Feil: %ERROR%<br>Dato: %DATE%", 'test_pushover' => 'En Pushover varsling vil bli sendt til brukernøkkelen/enheten som er angitt i
'off_telegram_message' => "Kunne ikke koble til følgende server:<br><br>Server: %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>Feil: %ERROR%<br>Dato: %DATE%", brukerprofilen din.',
'on_sms' => 'Server \'%LABEL%\' er OPPE igjen: ip=%IP%, port=%PORT%, det var nede i %LAST_OFFLINE_DURATION%', 'test_telegram' => 'Et telegramvarsling vil bli sendt til chat-ID-en spesifisert i brukerprofilen din.',
'on_email_subject' => 'VIKTIG: Server \'%LABEL%\' er OPPE', 'send' => 'Send',
'on_email_body' => "Server '%LABEL%' er oppe igjen, det var nede i %LAST_OFFLINE_DURATION%:<br><br>Server: %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>Dato: %DATE%", 'test_subject' => 'Test',
'on_pushover_title' => 'Server \'%LABEL%\' er OPPE', 'test_message' => 'Test melding',
'on_pushover_message' => 'Server \'%LABEL%\' er oppe igjen, det var nede i %LAST_OFFLINE_DURATION%:<br><br>Server: %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>Dato: %DATE%', 'email_sent' => 'E-post sent',
'on_telegram_message' => 'Server \'%LABEL%\' er oppe igjen, det var nede i %LAST_OFFLINE_DURATION%:<br><br>Server: %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>Dato: %DATE%', 'email_error' => 'Feil ved sending av e-post',
), 'sms_sent' => 'Tekstmelding sendt',
'login' => array( 'sms_error' => 'Det har oppstått en feil under sending av tekstmelding: %s',
'welcome_usermenu' => 'Velkommen, %user_name%', 'sms_error_nomobile' => 'Kan ikke sende test tekstmelding: ingen gyldig telefonnummer funnet i profilen din.',
'title_sign_in' => 'Vennligst logg inn', 'pushover_sent' => 'Pushover varsling sendt',
'title_forgot' => 'Glemt passordet?', 'pushover_error' => 'Det har oppstått en feil under sending av Pushover-varslingen: %s',
'title_reset' => 'Tilbakestill passordet ditt', 'pushover_error_noapp' => 'Kan ikke sende testvarsling: Ingen Pushover App API-token funnet i den globale
'submit' => 'Send inn', konfigurasjonen.',
'remember_me' => 'Husk meg', 'pushover_error_nokey' => 'Kan ikke sende testvarsling: Ingen Pushover-nøkkel funnet i profilen din.',
'login' => 'Logg inn', 'telegram_sent' => 'Telegram varsling sent',
'logout' => 'Logg ut', 'telegram_error' => 'Det har oppstått en feil under sending av telegrammeldingen: %s',
'username' => 'Brukernavn', 'telegram_error_notoken' => 'Kan ikke sende testvarsling: Ingen Telegram API-token funnet i den globale
'password' => 'Passord', konfigurasjonen.',
'password_repeat' => 'Gjenta passord', 'telegram_error_noid' => 'Kan ikke sende testvarsling: Ingen chat-ID funnet i profilen din.',
'password_forgot' => 'Glemt passordet?', 'log_retention_period' => 'Oppbevaringsperiode for logg',
'password_reset' => 'Tilbakestille passord', 'log_retention_period_description' => 'Antall dager for å holde logger over varsler og arkiver av
'password_reset_email_subject' => 'Tilbakestill passordet ditt for PHP Server Monitor', serveroppetid. Skriv 0 for å deaktivere loggopprydding.',
'password_reset_email_body' => 'Vennligst bruk følgende link for å tilbakestille passordet ditt. Vær oppmerksom på at det utløper om 1 time.<br><br>%link%', 'log_retention_days' => 'dager',
'error_user_incorrect' => 'Det oppgitte brukernavnet ble ikke funnet.', ),
'error_login_incorrect' => 'Informasjonen er feil.', 'notifications' => array(
'error_login_passwords_nomatch' => 'De oppgitte passordene stemmer ikke overens.', 'off_sms' => 'Serveren \'%LABEL%\' er NEDE: ip=%IP%, port=%PORT%. Feil=%ERROR%',
'error_reset_invalid_link' => 'Tilbakestill lenken du oppgav er ugyldig.', 'off_email_subject' => 'VIKTIG: Serveren \'%LABEL%\' er NEDE',
'success_password_forgot' => 'En epost er sendt til deg med informasjon om hvordan du tilbakestiller passordet ditt.', 'off_email_body' => 'Kunne ikke koble til følgende server:<br><br>Server: %LABEL%<br>IP: %IP%<br>Port:
'success_password_reset' => 'Ditt passord er tilbakestilt. Vennligst logg inn.', %PORT%<br>Feil: %ERROR%<br>Dato: %DATE%',
), 'off_pushover_title' => 'Server \'%LABEL%\' er NEDE',
'error' => array( 'off_pushover_message' => 'Kunne ikke koble til følgende server:<br><br>Server: %LABEL%<br>IP: %IP%<br>Port:
'401_unauthorized' => 'Uautorisert', %PORT%<br>Feil: %ERROR%<br>Dato: %DATE%',
'401_unauthorized_description' => 'Du har ikke rettighetene til å se denne siden.', 'off_telegram_message' => 'Kunne ikke koble til følgende server:<br><br>Server: %LABEL%<br>IP: %IP%<br>Port:
), %PORT%<br>Feil: %ERROR%<br>Dato: %DATE%',
'on_sms' => 'Server \'%LABEL%\' er OPPE igjen: ip=%IP%, port=%PORT%, det var nede i %LAST_OFFLINE_DURATION%',
'on_email_subject' => 'VIKTIG: Server \'%LABEL%\' er OPPE',
'on_email_body' => 'Server \'%LABEL%\' er oppe igjen, det var nede i %LAST_OFFLINE_DURATION%:<br><br>Server:
%LABEL%<br>IP: %IP%<br>Port: %PORT%<br>Dato: %DATE%',
'on_pushover_title' => 'Server \'%LABEL%\' er OPPE',
'on_pushover_message' => 'Server \'%LABEL%\' er oppe igjen, det var nede i
%LAST_OFFLINE_DURATION%:<br><br>Server: %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>Dato:
%DATE%',
'on_telegram_message' => 'Server \'%LABEL%\' er oppe igjen, det var nede i
%LAST_OFFLINE_DURATION%:<br><br>Server: %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>Dato:
%DATE%',
),
'login' => array(
'welcome_usermenu' => 'Velkommen, %user_name%',
'title_sign_in' => 'Vennligst logg inn',
'title_forgot' => 'Glemt passordet?',
'title_reset' => 'Tilbakestill passordet ditt',
'submit' => 'Send inn',
'remember_me' => 'Husk meg',
'login' => 'Logg inn',
'logout' => 'Logg ut',
'username' => 'Brukernavn',
'password' => 'Passord',
'password_repeat' => 'Gjenta passord',
'password_forgot' => 'Glemt passordet?',
'password_reset' => 'Tilbakestille passord',
'password_reset_email_subject' => 'Tilbakestill passordet ditt for PHP Server Monitor',
'password_reset_email_body' => 'Vennligst bruk følgende link for å tilbakestille passordet ditt. Vær
oppmerksom at det utløper om 1 time.<br><br>%link%',
'error_user_incorrect' => 'Det oppgitte brukernavnet ble ikke funnet.',
'error_login_incorrect' => 'Informasjonen er feil.',
'error_login_passwords_nomatch' => 'De oppgitte passordene stemmer ikke overens.',
'error_reset_invalid_link' => 'Tilbakestill lenken du oppgav er ugyldig.',
'success_password_forgot' => 'En epost er sendt til deg med informasjon om hvordan du tilbakestiller passordet
ditt.',
'success_password_reset' => 'Ditt passord er tilbakestilt. Vennligst logg inn.',
),
'error' => array(
'401_unauthorized' => 'Uautorisert',
'401_unauthorized_description' => 'Du har ikke rettighetene til å se denne siden.',
),
); );

View File

@ -1,4 +1,5 @@
<?php <?php
/** /**
* PHP Server Monitor * PHP Server Monitor
* Monitor your servers and websites. * Monitor your servers and websites.
@ -26,284 +27,298 @@
**/ **/
$sm_lang = array( $sm_lang = array(
'name' => 'Polski - Polish', 'name' => 'Polski - Polish',
'locale' => array('pl_PL.UTF-8', 'pl_PL', 'polski', 'polski'), 'locale' => array(
'locale_tag' => 'pl', '0' => 'pl_PL.UTF-8',
'locale_dir' => 'ltr', '1' => 'pl_PL',
'system' => array( '2' => 'polski',
'title' => 'Server Monitor', '3' => 'polski',
'install' => 'Instalacja', ),
'action' => 'Akcja', 'locale_tag' => 'pl',
'save' => 'Zapisz', 'locale_dir' => 'ltr',
'edit' => 'Edycja', 'system' => array(
'delete' => 'Usuń', 'title' => 'Server Monitor',
'date' => 'Data', 'install' => 'Instalacja',
'message' => 'Wiadomość', 'action' => 'Akcja',
'yes' => 'Tak', 'save' => 'Zapisz',
'no' => 'Nie', 'edit' => 'Edycja',
'insert' => 'Wstaw', 'delete' => 'Usuń',
'add_new' => 'Dodaj', 'date' => 'Data',
'update_available' => 'Nowa wersja ({version}) jest dostępna do pobrania z <a href="https://github.com/phpservermon/phpservermon/releases/latest" target="_blank" rel="noopener">http://www.phpservermonitor.org</a>.', 'message' => 'Wiadomość',
'back_to_top' => 'Do góry', 'yes' => 'Tak',
'go_back' => 'Wstecz', 'no' => 'Nie',
'ok' => 'OK', 'insert' => 'Wstaw',
'cancel' => 'Anuluj', 'add_new' => 'Dodaj',
// date/time format according the strftime php function format parameter http://php.net/manual/function.strftime.php 'update_available' => 'Nowa wersja ({version}) jest dostępna do pobrania z <a
'short_day_format' => '%B %e', href="https://github.com/phpservermon/phpservermon/releases/latest" target="_blank"
'long_day_format' => '%B %e, %Y', rel="noopener">http://www.phpservermonitor.org</a>.',
'yesterday_format' => 'Wczoraj o %k:%M', 'back_to_top' => 'Do góry',
'other_day_format' => '%A o %k:%M', 'go_back' => 'Wstecz',
'never' => 'Nigdy', 'ok' => 'OK',
'hours_ago' => '%d godzin temu', 'cancel' => 'Anuluj',
'an_hour_ago' => 'godzinę temu', 'short_day_format' => '%B %e',
'minutes_ago' => '%d minut temu', 'long_day_format' => '%B %e, %Y',
'a_minute_ago' => 'minutę temu', 'yesterday_format' => 'Wczoraj o %k:%M',
'seconds_ago' => '%d sekund temu', 'other_day_format' => '%A o %k:%M',
'a_second_ago' => 'sekundę temu', 'never' => 'Nigdy',
'year' => 'year', 'hours_ago' => '%d godzin temu',
'years' => 'years', 'an_hour_ago' => 'godzinę temu',
'month' => 'month', 'minutes_ago' => '%d minut temu',
'months' => 'months', 'a_minute_ago' => 'minutę temu',
'day' => 'day', 'seconds_ago' => '%d sekund temu',
'days' => 'days', 'a_second_ago' => 'sekundę temu',
'hour' => 'hour', ),
'hours' => 'hours', 'menu' => array(
'minute' => 'minute', 'config' => 'Konfiguracja',
'minutes' => 'minutes', 'server' => 'Serwery',
'second' => 'second', 'server_log' => 'Logi',
'seconds' => 'seconds', 'server_status' => 'Status',
), 'server_update' => 'Aktualizuj',
'menu' => array( 'user' => 'Użytkownicy',
'config' => 'Konfiguracja', 'help' => 'Pomoc',
'server' => 'Serwery', ),
'server_log' => 'Logi', 'users' => array(
'server_status' => 'Status', 'user' => 'Użytkownik',
'server_update' => 'Aktualizuj', 'name' => 'Nazwa',
'user' => 'Użytkownicy', 'user_name' => 'Login',
'help' => 'Pomoc', 'password' => 'Hasło',
), 'password_repeat' => 'Powtórz hasło',
'users' => array( 'password_leave_blank' => 'Pozostaw puste aby zaniechać zmian',
'user' => 'Użytkownik', 'level' => 'Poziom',
'name' => 'Nazwa', 'level_10' => 'Administrator',
'user_name' => 'Login', 'level_20' => 'Użytkownik',
'password' => 'Hasło', 'level_description' => '<b>Administratorzy</b> posiadają pełny dostęp: mogą zarządzać serwerami,
'password_repeat' => 'Powtórz hasło', użytkownikami oraz edytować konfigurację globalną.<br><b>Użytkownicy</b> mogą
'password_leave_blank' => 'Pozostaw puste aby zaniechać zmian', podejrzeć serwer oraz uruchomić aktualizację statusu dla serwerów do nich
'level' => 'Poziom', przypisanych.',
'level_10' => 'Administrator', 'mobile' => 'Telefon',
'level_20' => 'Użytkownik', 'email' => 'Email',
'level_description' => '<b>Administratorzy</b> posiadają pełny dostęp: mogą zarządzać serwerami, użytkownikami oraz edytować konfigurację globalną.<br><b>Użytkownicy</b> mogą podejrzeć serwer oraz uruchomić aktualizację statusu dla serwerów do nich przypisanych.', 'pushover' => 'Pushover',
'mobile' => 'Telefon', 'pushover_description' => 'Pushover jest usługą szybkich notyfikacji. Sprawdź <a
'email' => 'Email', href="https://pushover.net/" target="_blank">ich stronę</a> po więcej informacji.',
'pushover' => 'Pushover', 'pushover_key' => 'Pushover Key',
'pushover_description' => 'Pushover jest usługą szybkich notyfikacji. Sprawdź <a href="https://pushover.net/">ich stronę</a> po więcej informacji.', 'pushover_device' => 'Urządzenie dla Pushover',
'pushover_key' => 'Pushover Key', 'pushover_device_description' => 'Nazwa urządzenia do którego wysłać powiadomienie. Pozostaw puste aby
'pushover_device' => 'Urządzenie dla Pushover', wysłać do wszystkich urządzeń.',
'pushover_device_description' => 'Nazwa urządzenia do którego wysłać powiadomienie. Pozostaw puste aby wysłać do wszystkich urządzeń.', 'delete_title' => 'Usuń użytkownika',
'delete_title' => 'Usuń użytkownika', 'delete_message' => 'Czy jesteś pewny że chcesz usunąć użytkownika \'%1\'?',
'delete_message' => 'Czy jesteś pewny że chcesz usunąć użytkownika \'%1\'?', 'deleted' => 'Użytkownik usunięty.',
'deleted' => 'Użytkownik usunięty.', 'updated' => 'Użytkownik zaktualizowany.',
'updated' => 'Użytkownik zaktualizowany.', 'inserted' => 'Użytkownik dodany.',
'inserted' => 'Użytkownik dodany.', 'profile' => 'Profil',
'profile' => 'Profil', 'profile_updated' => 'Twój profil został zaktualizowany.',
'profile_updated' => 'Twój profil został zaktualizowany.', 'error_user_name_bad_length' => 'Login musi mieć od 2 do 64 znaków.',
'error_user_name_bad_length' => 'Login musi mieć od 2 do 64 znaków.', 'error_user_name_invalid' => 'Login może zawierać tylko litery (a-z, A-Z), cyfry (0-9), kropki (.) oraz znak
'error_user_name_invalid' => 'Login może zawierać tylko litery (a-z, A-Z), cyfry (0-9), kropki (.) oraz znak podkreślenia (_).', podkreślenia (_).',
'error_user_name_exists' => 'Wybrana nazwa użytkownika jest już używana.', 'error_user_name_exists' => 'Wybrana nazwa użytkownika jest już używana.',
'error_user_email_bad_length' => 'Email powinien mieć od 5 do 255 znaków.', 'error_user_email_bad_length' => 'Email powinien mieć od 5 do 255 znaków.',
'error_user_email_invalid' => 'Wprowadzony adres email jest nieprawidłowy.', 'error_user_email_invalid' => 'Wprowadzony adres email jest nieprawidłowy.',
'error_user_level_invalid' => 'Wybrany poziom uprawnień użytkownika jest nieprawidłowy.', 'error_user_level_invalid' => 'Wybrany poziom uprawnień użytkownika jest nieprawidłowy.',
'error_user_no_match' => 'Użytkownik nie został odnaleziony.', 'error_user_no_match' => 'Użytkownik nie został odnaleziony.',
'error_user_password_invalid' => 'Wprowadzone hasło jest nieprawidłowe.', 'error_user_password_invalid' => 'Wprowadzone hasło jest nieprawidłowe.',
'error_user_password_no_match' => 'Wprowadzone hasła są różne.', 'error_user_password_no_match' => 'Wprowadzone hasła są różne.',
), ),
'log' => array( 'log' => array(
'title' => 'Logi', 'title' => 'Logi',
'type' => 'Typ', 'type' => 'Typ',
'status' => 'Status', 'status' => 'Status',
'email' => 'Email', 'email' => 'Email',
'sms' => 'SMS', 'sms' => 'SMS',
'pushover' => 'Pushover', 'pushover' => 'Pushover',
'no_logs' => 'Brak logów', 'no_logs' => 'Brak logów',
'clear' => 'Wyczyść log', 'clear' => 'Wyczyść log',
'delete_title' => 'Wyczyść log', 'delete_title' => 'Wyczyść log',
'delete_message' => 'Czy na pewno chcesz usunąć <b>wszystkie</b> dzienniki?', 'delete_message' => 'Czy na pewno chcesz usunąć <b>wszystkie</b> dzienniki?',
), ),
'servers' => array( 'servers' => array(
'server' => 'Server', 'server' => 'Server',
'status' => 'Status', 'status' => 'Status',
'label' => 'Etykieta', 'label' => 'Etykieta',
'domain' => 'Domena/IP', 'domain' => 'Domena/IP',
'timeout' => 'Timeout', 'timeout' => 'Timeout',
'timeout_description' => 'Liczba sekund do odczekania na odpowiedź serwera.', 'timeout_description' => 'Liczba sekund do odczekania na odpowiedź serwera.',
'port' => 'Port', 'port' => 'Port',
'type' => 'Typ', 'type' => 'Typ',
'type_website' => 'Strona', 'type_website' => 'Strona',
'type_service' => 'Usługa', 'type_service' => 'Usługa',
'pattern' => 'Wyszukiwane wyrażenie/wzorzec', 'pattern' => 'Wyszukiwane wyrażenie/wzorzec',
'pattern_description' => 'Jeśli wzorzec nie zostanie odnaleziony, status zostanie ustawiony na offline. Wyrażenia regularne są dozwolone.', 'pattern_description' => 'Jeśli wzorzec nie zostanie odnaleziony, status zostanie ustawiony na offline.
'last_check' => 'Ostatnie sprawdzenie', Wyrażenia regularne dozwolone.',
'last_online' => 'Ostatnio online', 'last_check' => 'Ostatnie sprawdzenie',
'last_offline' => 'Ostatnio offline', 'last_online' => 'Ostatnio online',
'monitoring' => 'Monitorowany', 'last_offline' => 'Ostatnio offline',
'no_monitoring' => 'Brak monitoringu', 'monitoring' => 'Monitorowany',
'email' => 'Email', 'no_monitoring' => 'Brak monitoringu',
'send_email' => 'Wyślij Email', 'email' => 'Email',
'sms' => 'SMS', 'send_email' => 'Wyślij Email',
'send_sms' => 'Wyślij SMS', 'sms' => 'SMS',
'pushover' => 'Pushover', 'send_sms' => 'Wyślij SMS',
'users' => 'Użytkownicy', 'pushover' => 'Pushover',
'delete_title' => 'Usuń serwer', 'users' => 'Użytkownicy',
'delete_message' => 'Czy jesteś pewny że chcesz usunąć serwer \'%1\'?', 'delete_title' => 'Usuń serwer',
'deleted' => 'Serwer usunięty.', 'delete_message' => 'Czy jesteś pewny że chcesz usunąć serwer \'%1\'?',
'updated' => 'Serwer zaktualizowany.', 'deleted' => 'Serwer usunięty.',
'inserted' => 'Server dodany.', 'updated' => 'Serwer zaktualizowany.',
'latency' => 'Opóźnienie', 'inserted' => 'Server dodany.',
'latency_max' => 'Opóźnienie (maksymalne)', 'latency' => 'Opóźnienie',
'latency_min' => 'Opóźnienie (minimalne)', 'latency_max' => 'Opóźnienie (maksymalne)',
'latency_avg' => 'Opóźnienie (średnie)', 'latency_min' => 'Opóźnienie (minimalne)',
'uptime' => 'Czas dostępności', 'latency_avg' => 'Opóźnienie (średnie)',
'year' => 'Rok', 'uptime' => 'Czas dostępności',
'month' => 'Miesiąc', 'year' => 'Rok',
'week' => 'Tydzień', 'month' => 'Miesiąc',
'day' => 'Dzień', 'week' => 'Tydzień',
'hour' => 'Godzina', 'day' => 'Dzień',
'warning_threshold' => 'Próg ostrzeżeń', 'hour' => 'Godzina',
'warning_threshold_description' => 'Ilość wymaganych niepowodzeń przed oznaczeniem serwera jako offline.', 'warning_threshold' => 'Próg ostrzeżeń',
'chart_last_week' => 'Ostatni tydzień', 'warning_threshold_description' => 'Ilość wymaganych niepowodzeń przed oznaczeniem serwera jako offline.',
'chart_history' => 'Historia', 'chart_last_week' => 'Ostatni tydzień',
// Charts date format according jqPlot date format http://www.jqplot.com/docs/files/plugins/jqplot-dateAxisRenderer-js.html 'chart_history' => 'Historia',
'chart_day_format' => '%Y-%m-%d', 'chart_day_format' => '%Y-%m-%d',
'chart_long_date_format' => '%Y-%m-%d %H:%M:%S', 'chart_long_date_format' => '%Y-%m-%d %H:%M:%S',
'chart_short_date_format' => '%m/%d %H:%M', 'chart_short_date_format' => '%m/%d %H:%M',
'chart_short_time_format' => '%H:%M', 'chart_short_time_format' => '%H:%M',
'warning_notifications_disabled_sms' => 'Powiadomienia SMS są wyłączone.', 'warning_notifications_disabled_sms' => 'Powiadomienia SMS są wyłączone.',
'warning_notifications_disabled_email' => 'Powiadomienia Email są wyłączone.', 'warning_notifications_disabled_email' => 'Powiadomienia Email są wyłączone.',
'warning_notifications_disabled_pushover' => 'Powiadomienia Pushover są wyłączone.', 'warning_notifications_disabled_pushover' => 'Powiadomienia Pushover są wyłączone.',
'error_server_no_match' => 'Nie odnaleziono serwera.', 'error_server_no_match' => 'Nie odnaleziono serwera.',
'error_server_label_bad_length' => 'Etykieta musi mieć pomiędzy 1 a 255 znaków.', 'error_server_label_bad_length' => 'Etykieta musi mieć pomiędzy 1 a 255 znaków.',
'error_server_ip_bad_length' => 'Domena/IP musi mieć pomiędzy 1 a 255 znaków.', 'error_server_ip_bad_length' => 'Domena/IP musi mieć pomiędzy 1 a 255 znaków.',
'error_server_ip_bad_service' => 'Adres IP jest nieprawidłowy.', 'error_server_ip_bad_service' => 'Adres IP jest nieprawidłowy.',
'error_server_ip_bad_website' => 'Adres URL jest nieprawidłowy.', 'error_server_ip_bad_website' => 'Adres URL jest nieprawidłowy.',
'error_server_type_invalid' => 'Wybrany typ serwera jest nieprawidłowy.', 'error_server_type_invalid' => 'Wybrany typ serwera jest nieprawidłowy.',
'error_server_warning_threshold_invalid' => 'Próg ostrzeżeń musi być liczbą całkowitą większą od 0.', 'error_server_warning_threshold_invalid' => 'Próg ostrzeżeń musi być liczbą całkowitą większą od 0.',
), ),
'config' => array( 'config' => array(
'general' => 'Ogólne', 'general' => 'Ogólne',
'language' => 'Język', 'language' => 'Język',
'show_update' => 'Sprawdzić aktualizacje?', 'show_update' => 'Sprawdzić aktualizacje?',
'email_status' => 'Pozwól na wysyłkę email', 'email_status' => 'Pozwól na wysyłkę email',
'email_from_email' => 'Email z adresu', 'email_from_email' => 'Email z adresu',
'email_from_name' => 'Email od(nazwa)', 'email_from_name' => 'Email od(nazwa)',
'email_smtp' => 'Włącz SMTP', 'email_smtp' => 'Włącz SMTP',
'email_smtp_host' => 'SMTP host', 'email_smtp_host' => 'SMTP host',
'email_smtp_port' => 'SMTP port', 'email_smtp_port' => 'SMTP port',
'email_smtp_security' => 'SMTP security', 'email_smtp_security' => 'SMTP security',
'email_smtp_security_none' => 'None', 'email_smtp_security_none' => 'None',
'email_smtp_username' => 'SMTP login', 'email_smtp_username' => 'SMTP login',
'email_smtp_password' => 'SMTP hasło', 'email_smtp_password' => 'SMTP hasło',
'email_smtp_noauth' => 'Pozostaw puste dla braku autentykacji', 'email_smtp_noauth' => 'Pozostaw puste dla braku autentykacji',
'sms_status' => 'Pozwól na wysyłkę SMS', 'sms_status' => 'Pozwól na wysyłkę SMS',
'sms_gateway' => 'Bramka SMS', 'sms_gateway' => 'Bramka SMS',
'sms_gateway_username' => 'Login do bramki', 'sms_gateway_username' => 'Login do bramki',
'sms_gateway_password' => 'Hasło do bramki', 'sms_gateway_password' => 'Hasło do bramki',
'sms_from' => 'Numer nadawcy', 'sms_from' => 'Numer nadawcy',
'pushover_status' => 'Pozwól na wysyłkę notyfikacji Pushover', 'pushover_status' => 'Pozwól na wysyłkę notyfikacji Pushover',
'pushover_description' => 'Pushover jest usługą ułatwiającą otrzymywanie powiadomień w czasie rzeczywistym. Sprawdź <a href="https://pushover.net/">ich stronę</a> aby uzyskać więcej informacji.', 'pushover_description' => 'Pushover jest usługą ułatwiającą otrzymywanie powiadomień w czasie
'pushover_clone_app' => 'Kliknij tutaj aby stworzyć aplikację korzystającą z Pushover', rzeczywistym. Sprawdź <a href="https://pushover.net/" target="_blank">ich stronę</a> aby uzyskać
'pushover_api_token' => 'Pushover App API Token', więcej informacji.',
'pushover_api_token_description' => 'Zanim zaczniesz używać Pushover, musisz <a href="%1$s" target="_blank" rel="noopener"> zarejestrować aplikację</a> na ich stronie internetowej i wpisać tutaj App API Token.', 'pushover_clone_app' => 'Kliknij tutaj aby stworzyć aplikację korzystającą z Pushover',
'alert_type' => 'Wybierz kiedy chcesz być powiadomiony.', 'pushover_api_token' => 'Pushover App API Token',
'alert_type_description' => '<b>Zmiana statusu:</b> '. 'pushover_api_token_description' => 'Zanim zaczniesz używać Pushover, musisz <a href="%1$s" target="_blank"
'Otrzymasz powiadomienie gdy serwer zmieni status. Z online -> offline lub offline -> online.<br>'. rel="noopener"> zarejestrować aplikację</a> na ich stronie internetowej
'<br /><b>Offline:</b> '. i wpisać tutaj App API Token.',
'Otrzymasz powiadomienie gdy serwer zmieni status na offline po raz pierwszy. Na przykład, '. 'alert_type' => 'Wybierz kiedy chcesz być powiadomiony.',
'Twój cronjob uruchamia się co 15 minut, a Twój serwer przestaje odpowiadać o 13 i nie działa do 18. '. 'alert_type_description' => '<b>Zmiana statusu:</b> Otrzymasz powiadomienie gdy serwer zmieni status. Z online
'Otrzymasz *TYLKO* jedno powiadomienie o 13.<br>'. -> offline lub offline -> online.<br><br /><b>Offline:</b> Otrzymasz
'<br><b>Zawsze:</b> '. powiadomienie gdy serwer zmieni status na offline po raz pierwszy. Na przykład,
'Otrzymasz powiadomienie za każdym razem gdy skrypt zostanie uruchomiony a strona będzie niedostępna.', Twój cronjob uruchamia się co 15 minut, a Twój serwer przestaje odpowiadać o
'alert_type_status' => 'Zmiana statusu', 13 i nie działa do 18. Otrzymasz *TYLKO* jedno powiadomienie o
'alert_type_offline' => 'Offline', 13.<br><br><b>Zawsze:</b> Otrzymasz powiadomienie za każdym razem gdy skrypt
'alert_type_always' => 'Zawsze', zostanie uruchomiony a strona będzie niedostępna.',
'log_status' => 'Status logowania', 'alert_type_status' => 'Zmiana statusu',
'log_status_description' => 'Jeśli status logowania ustawiony jest na TRUE, monitor będzie logował wydarzenia.', 'alert_type_offline' => 'Offline',
'log_email' => 'Emaile wysłane przez skrypt', 'alert_type_always' => 'Zawsze',
'log_sms' => 'SMS wysłane przez skrypt', 'log_status' => 'Status logowania',
'log_pushover' => 'Notyfikacje Pushover wysłane przez skrypt', 'log_status_description' => 'Jeśli status logowania ustawiony jest na TRUE, monitor będzie logował
'updated' => 'Konfiguracja została zaktualizowana.', wydarzenia.',
'tab_email' => 'Email', 'log_email' => 'Emaile wysłane przez skrypt',
'tab_sms' => 'SMS', 'log_sms' => 'SMS wysłane przez skrypt',
'tab_pushover' => 'Pushover', 'log_pushover' => 'Notyfikacje Pushover wysłane przez skrypt',
'settings_email' => 'Ustawienia Email', 'updated' => 'Konfiguracja została zaktualizowana.',
'settings_sms' => 'Ustawienia SMS', 'tab_email' => 'Email',
'settings_pushover' => 'Ustawienia Pushover', 'tab_sms' => 'SMS',
'settings_notification' => 'Ustawienia powiadomień', 'tab_pushover' => 'Pushover',
'settings_log' => 'Ustawienia Logowania', 'settings_email' => 'Ustawienia Email',
'auto_refresh' => 'Auto-odświeżanie', 'settings_sms' => 'Ustawienia SMS',
'auto_refresh_description' => 'settings_pushover' => 'Ustawienia Pushover',
'Auto-odświeżanie strony serwera.<br>'. 'settings_notification' => 'Ustawienia powiadomień',
'<span class="small">'. 'settings_log' => 'Ustawienia Logowania',
'Czas w sekundach, dla czasu 0 strona nie będzie odświeżana.'. 'auto_refresh' => 'Auto-odświeżanie',
'</span>', 'auto_refresh_description' => 'Auto-odświeżanie strony serwera.<br><span class="small">Czas w sekundach, dla
'seconds' => 'sekund', czasu 0 strona nie będzie odświeżana.</span>',
'test' => 'Test', 'seconds' => 'sekund',
'test_email' => 'Email zostanie wysłany na adres podany w Twoim profilu.', 'test' => 'Test',
'test_sms' => 'SMS zostanie wysłany na numer podany w Twoim profilu.', 'test_email' => 'Email zostanie wysłany na adres podany w Twoim profilu.',
'test_pushover' => 'Powiadomienie Pushover zostanie wysłany na klucz użytkownika/urządzenie podane w Twoim profilu..', 'test_sms' => 'SMS zostanie wysłany na numer podany w Twoim profilu.',
'send' => 'Wyślij', 'test_pushover' => 'Powiadomienie Pushover zostanie wysłany na klucz użytkownika/urządzenie podane w Twoim
'test_subject' => 'Test', profilu..',
'test_message' => 'Testowa wiadomość', 'send' => 'Wyślij',
'email_sent' => 'Email wysłany', 'test_subject' => 'Test',
'email_error' => 'Błąd podczas wysyłania emaila', 'test_message' => 'Testowa wiadomość',
'sms_sent' => 'Sms wysłany', 'email_sent' => 'Email wysłany',
'sms_error' => 'Błąd podczas wysyłania sms. %s', 'email_error' => 'Błąd podczas wysyłania emaila',
'sms_error_nomobile' => 'Nie udało się wysłać testowego SMS: brak poprawnego telefonu w Twoim profilu.', 'sms_sent' => 'Sms wysłany',
'pushover_sent' => 'Powiadomienie Pushover wysłane.', 'sms_error' => 'Błąd podczas wysyłania sms. %s',
'pushover_error' => 'Błąd podczas wysyłania powiadomienia Pushover: %s', 'sms_error_nomobile' => 'Nie udało się wysłać testowego SMS: brak poprawnego telefonu w Twoim profilu.',
'pushover_error_noapp' => 'Błąd podczas wysyłania testowego powiadomienia: brak Pushover App API token w konfuguracji globalnej.', 'pushover_sent' => 'Powiadomienie Pushover wysłane.',
'pushover_error_nokey' => 'Błąd podczas wysyłania testowego powiadomienia: brak Pushover key na Twoim profilu.', 'pushover_error' => 'Błąd podczas wysyłania powiadomienia Pushover: %s',
'log_retention_period' => 'Czas rotacji logów', 'pushover_error_noapp' => 'Błąd podczas wysyłania testowego powiadomienia: brak Pushover App API token w
'log_retention_period_description' => 'Liczba dni przez którą należy przetrzymywać logi powiadomień i archiwizować uptime serwera. Wpisz 0 aby wyłączyć czyszczenie logów.', konfuguracji globalnej.',
'log_retention_days' => 'dni', 'pushover_error_nokey' => 'Błąd podczas wysyłania testowego powiadomienia: brak Pushover key na Twoim
), profilu.',
// for newlines in the email messages use <br> 'log_retention_period' => 'Czas rotacji logów',
'notifications' => array( 'log_retention_period_description' => 'Liczba dni przez którą należy przetrzymywać logi powiadomień i
'off_sms' => 'Serwer \'%LABEL%\' przestał odpowiadać: ip=%IP%, port=%PORT%. Błąd=%ERROR%', archiwizować uptime serwera. Wpisz 0 aby wyłączyć czyszczenie
'off_email_subject' => 'Uwaga: Serwer \'%LABEL%\' nie odpowiada', logów.',
'off_email_body' => "Błąd połączenia do serwera:<br><br>Serwer: %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>Błąd: %ERROR%<br>Data: %DATE%", 'log_retention_days' => 'dni',
'off_pushover_title' => 'Serwer \'%LABEL%\' nie odpowiada', ),
'off_pushover_message' => "Błąd połączenia do serwera:<br><br>Serwer: %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>Błąd: %ERROR%<br>Data: %DATE%", 'notifications' => array(
'on_sms' => 'Serwer \'%LABEL%\' działa poprawnie: ip=%IP%, port=%PORT%, it was down for %LAST_OFFLINE_DURATION%', 'off_sms' => 'Serwer \'%LABEL%\' przestał odpowiadać: ip=%IP%, port=%PORT%. Błąd=%ERROR%',
'on_email_subject' => 'Uwaga: Serwer \'%LABEL%\' działa poprawnie', 'off_email_subject' => 'Uwaga: Serwer \'%LABEL%\' nie odpowiada',
'on_email_body' => "Serwer '%LABEL%' znów odpowiada, it was down for %LAST_OFFLINE_DURATION%:<br><br>Serwer: %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>Data: %DATE%", 'off_email_body' => 'Błąd połączenia do serwera:<br><br>Serwer: %LABEL%<br>IP: %IP%<br>Port:
'on_pushover_title' => 'Serwer \'%LABEL%\' działa poprawnie', %PORT%<br>Błąd: %ERROR%<br>Data: %DATE%',
'on_pushover_message' => 'Serwer \'%LABEL%\' znów działa poprawnie, it was down for %LAST_OFFLINE_DURATION%:<br><br>Serwer: %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>Data: %DATE%', 'off_pushover_title' => 'Serwer \'%LABEL%\' nie odpowiada',
), 'off_pushover_message' => 'Błąd połączenia do serwera:<br><br>Serwer: %LABEL%<br>IP: %IP%<br>Port:
'login' => array( %PORT%<br>Błąd: %ERROR%<br>Data: %DATE%',
'welcome_usermenu' => 'Witaj, %user_name%', 'on_sms' => 'Serwer \'%LABEL%\' działa poprawnie: ip=%IP%, port=%PORT%, it was down for
'title_sign_in' => 'Zaloguj się', %LAST_OFFLINE_DURATION%',
'title_forgot' => 'Zapomniałeś hasła?', 'on_email_subject' => 'Uwaga: Serwer \'%LABEL%\' działa poprawnie',
'title_reset' => 'Zresetuj hasło', 'on_email_body' => 'Serwer \'%LABEL%\' znów odpowiada, it was down for
'submit' => 'Zapisz', %LAST_OFFLINE_DURATION%:<br><br>Serwer: %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>Data:
'remember_me' => 'Zapamiętaj mnie', %DATE%',
'login' => 'Zaloguj', 'on_pushover_title' => 'Serwer \'%LABEL%\' działa poprawnie',
'logout' => 'Wyloguj', 'on_pushover_message' => 'Serwer \'%LABEL%\' znów działa poprawnie, it was down for
'username' => 'Login', %LAST_OFFLINE_DURATION%:<br><br>Serwer: %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>Data:
'password' => 'Hasło', %DATE%',
'password_repeat' => 'Powtórz hasło', ),
'password_forgot' => 'Zapomniałeś hasła?', 'login' => array(
'password_reset' => 'Zresetuj hasło', 'welcome_usermenu' => 'Witaj, %user_name%',
'password_reset_email_subject' => 'Zresetuj hasło do monitoringu', 'title_sign_in' => 'Zaloguj się',
'password_reset_email_body' => 'Aby zresetować hasło użyj tego linku. Ważność linku to jedna godzina.<br><br>%link%', 'title_forgot' => 'Zapomniałeś hasła?',
'error_user_incorrect' => 'Brak użytkownika o takim loginie.', 'title_reset' => 'Zresetuj hasło',
'error_login_incorrect' => 'Login lub hasło jest błędne.', 'submit' => 'Zapisz',
'error_login_passwords_nomatch' => 'Podane hasła nie pasują do siebie.', 'remember_me' => 'Zapamiętaj mnie',
'error_reset_invalid_link' => 'Podany link do zmiany hasła jest nieprawidłowy.', 'login' => 'Zaloguj',
'success_password_forgot' => 'Email został wysłany do Ciebie z informacjami dotyczącymi zresetowania hasła.', 'logout' => 'Wyloguj',
'success_password_reset' => 'Twoje hasło zostało pomyślnie zmienione. Zaloguj się.', 'username' => 'Login',
), 'password' => 'Hasło',
'error' => array( 'password_repeat' => 'Powtórz hasło',
'401_unauthorized' => 'Brak autoryzacji', 'password_forgot' => 'Zapomniałeś hasła?',
'401_unauthorized_description' => 'Nie masz odpowiednich praw dostępu by przeglądać tę stronę.', 'password_reset' => 'Zresetuj hasło',
), 'password_reset_email_subject' => 'Zresetuj hasło do monitoringu',
'password_reset_email_body' => 'Aby zresetować hasło użyj tego linku. Ważność linku to jedna
godzina.<br><br>%link%',
'error_user_incorrect' => 'Brak użytkownika o takim loginie.',
'error_login_incorrect' => 'Login lub hasło jest błędne.',
'error_login_passwords_nomatch' => 'Podane hasła nie pasują do siebie.',
'error_reset_invalid_link' => 'Podany link do zmiany hasła jest nieprawidłowy.',
'success_password_forgot' => 'Email został wysłany do Ciebie z informacjami dotyczącymi zresetowania
hasła.',
'success_password_reset' => 'Twoje hasło zostało pomyślnie zmienione. Zaloguj się.',
),
'error' => array(
'401_unauthorized' => 'Brak autoryzacji',
'401_unauthorized_description' => 'Nie masz odpowiednich praw dostępu by przeglądać tę stronę.',
),
); );

View File

@ -1,4 +1,5 @@
<?php <?php
/** /**
* PHP Server Monitor * PHP Server Monitor
* Monitor your servers and websites. * Monitor your servers and websites.
@ -26,284 +27,295 @@
**/ **/
$sm_lang = array( $sm_lang = array(
'name' => 'Português - Brazilian Portuguese', 'name' => 'Português - Brazilian Portuguese',
'locale' => array('pt_BR.UTF-8', 'pt_BR', 'portuguese-brazilian'), 'locale' => array(
'locale_tag' => 'BR', '0' => 'pt_BR.UTF-8',
'locale_dir' => 'ltr', '1' => 'pt_BR',
'system' => array( '2' => 'portuguese-brazilian',
'title' => 'Server Monitor', ),
'install' => 'Instalar', 'locale_tag' => 'BR',
'action' => 'Ação', 'locale_dir' => 'ltr',
'save' => 'Salvar', 'system' => array(
'edit' => 'Editar', 'title' => 'Server Monitor',
'delete' => 'Excluir', 'install' => 'Instalar',
'date' => 'Data', 'action' => 'Ação',
'message' => 'Mensagem', 'save' => 'Salvar',
'yes' => 'Sim', 'edit' => 'Editar',
'no' => 'Não', 'delete' => 'Excluir',
'insert' => 'Inserir', 'date' => 'Data',
'add_new' => 'Adicionar novo', 'message' => 'Mensagem',
'update_available' => 'Uma atualização ({version}) disponível em <a href="https://github.com/phpservermon/phpservermon/releases/latest" target="_blank" rel="noopener">http://www.phpservermonitor.org</a>.', 'yes' => 'Sim',
'back_to_top' => 'Voltar ao topo', 'no' => 'Não',
'go_back' => 'Voltar', 'insert' => 'Inserir',
'ok' => 'OK', 'add_new' => 'Adicionar novo',
'cancel' => 'Cancel', 'update_available' => 'Uma atualização ({version}) disponível em <a
// date/time format according the strftime php function format parameter http://php.net/manual/function.strftime.php href="https://github.com/phpservermon/phpservermon/releases/latest" target="_blank"
'short_day_format' => '%e %m', rel="noopener">http://www.phpservermonitor.org</a>.',
'long_day_format' => '%e/%m/%Y', 'back_to_top' => 'Voltar ao topo',
'yesterday_format' => 'Ontem as %k:%M', 'go_back' => 'Voltar',
'other_day_format' => '%A at %k:%M', 'ok' => 'OK',
'never' => 'Nunca', 'cancel' => 'Cancel',
'hours_ago' => '%d horas atrás', 'short_day_format' => '%e %m',
'an_hour_ago' => 'cerca de uma hora atrás', 'long_day_format' => '%e/%m/%Y',
'minutes_ago' => '%d minutos atrás', 'yesterday_format' => 'Ontem as %k:%M',
'a_minute_ago' => 'cerca de um minuto atrás', 'other_day_format' => '%A at %k:%M',
'seconds_ago' => '%d segundos atrás', 'never' => 'Nunca',
'a_second_ago' => 'um segundo atrás', 'hours_ago' => '%d horas atrás',
'year' => 'year', 'an_hour_ago' => 'cerca de uma hora atrás',
'years' => 'years', 'minutes_ago' => '%d minutos atrás',
'month' => 'month', 'a_minute_ago' => 'cerca de um minuto atrás',
'months' => 'months', 'seconds_ago' => '%d segundos atrás',
'day' => 'day', 'a_second_ago' => 'um segundo atrás',
'days' => 'days', ),
'hour' => 'hour', 'menu' => array(
'hours' => 'hours', 'config' => 'Configuração',
'minute' => 'minute', 'server' => 'Servidores',
'minutes' => 'minutes', 'server_log' => 'Log',
'second' => 'second', 'server_status' => 'Status',
'seconds' => 'seconds', 'server_update' => 'Atualização',
), 'user' => 'Usuários',
'menu' => array( 'help' => 'Ajuda',
'config' => 'Configuração', ),
'server' => 'Servidores', 'users' => array(
'server_log' => 'Log', 'user' => 'Usuário',
'server_status' => 'Status', 'name' => 'Nome',
'server_update' => 'Atualização', 'user_name' => 'Username',
'user' => 'Usuários', 'password' => 'Senha',
'help' => 'Ajuda', 'password_repeat' => 'Repetir senha',
), 'password_leave_blank' => 'Deixe em branco para não modificar',
'users' => array( 'level' => 'Nível',
'user' => 'Usuário', 'level_10' => 'Administrador',
'name' => 'Nome', 'level_20' => 'Usuário',
'user_name' => 'Username', 'level_description' => '<b>Administradores</b> Tem total acesso: podem gerenciar servidores, usuários e
'password' => 'Senha', configurações globais.<br><b>Usuários</b> podem executar atualizações para
'password_repeat' => 'Repetir senha', servidores que lhe foram atribuídos.',
'password_leave_blank' => 'Deixe em branco para não modificar', 'mobile' => 'Celular',
'level' => 'Nível', 'email' => 'Email',
'level_10' => 'Administrador', 'pushover' => 'Pushover',
'level_20' => 'Usuário', 'pushover_description' => 'Pushover para enviar notificações em real-tome. Veja <a
'level_description' => '<b>Administradores</b> Tem total acesso: podem gerenciar servidores, usuários e configurações globais.<br><b>Usuários</b> só podem executar atualizações para servidores que lhe foram atribuídos.', href="https://pushover.net/" target="_blank">o website</a> para mais informações.',
'mobile' => 'Celular', 'pushover_key' => 'Pushover Key',
'email' => 'Email', 'pushover_device' => 'Pushover Device',
'pushover' => 'Pushover', 'pushover_device_description' => 'Nome do Device para enviar a mensagem. Deixe em branco para enviar a todos
'pushover_description' => 'Pushover para enviar notificações em real-tome. Veja <a href="https://pushover.net/">o website</a> para mais informações.', os Devices.',
'pushover_key' => 'Pushover Key', 'delete_title' => 'Excluir Usuário',
'pushover_device' => 'Pushover Device', 'delete_message' => 'Tem certeza que deseja excluir o usuário \'%1\'?',
'pushover_device_description' => 'Nome do Device para enviar a mensagem. Deixe em branco para enviar a todos os Devices.', 'deleted' => 'Usuário excluído.',
'delete_title' => 'Excluir Usuário', 'updated' => 'Usuário atualizado.',
'delete_message' => 'Tem certeza que deseja excluir o usuário \'%1\'?', 'inserted' => 'Usuário adicionado.',
'deleted' => 'Usuário excluído.', 'profile' => 'Perfil',
'updated' => 'Usuário atualizado.', 'profile_updated' => 'Seu perfil foi atualizado.',
'inserted' => 'Usuário adicionado.', 'error_user_name_bad_length' => 'Usernames deve conter entre 2 e 64 caracteres.',
'profile' => 'Perfil', 'error_user_name_invalid' => ' pode conter caracteres alfabéticos (a-z, A-Z), dígitos (0-9), pontos (.) e
'profile_updated' => 'Seu perfil foi atualizado.', underscores (_).',
'error_user_name_bad_length' => 'Usernames deve conter entre 2 e 64 caracteres.', 'error_user_name_exists' => 'O nome de usuário(username) já existe no banco de dados',
'error_user_name_invalid' => 'Só pode conter caracteres alfabéticos (a-z, A-Z), dígitos (0-9), pontos (.) e underscores (_).', 'error_user_email_bad_length' => 'Email deve conter entre 5 e 255 caracteres.',
'error_user_name_exists' => 'O nome de usuário(username) já existe no banco de dados', 'error_user_email_invalid' => 'O endereço de email é inválido.',
'error_user_email_bad_length' => 'Email deve conter entre 5 e 255 caracteres.', 'error_user_level_invalid' => 'O Nível de usuário é inválido.',
'error_user_email_invalid' => 'O endereço de email é inválido.', 'error_user_no_match' => 'O usuário não pode ser encontrado no banco de dados.',
'error_user_level_invalid' => 'O Nível de usuário é inválido.', 'error_user_password_invalid' => 'A senha informada é inválida.',
'error_user_no_match' => 'O usuário não pode ser encontrado no banco de dados.', 'error_user_password_no_match' => 'A senha informada não combina.',
'error_user_password_invalid' => 'A senha informada é inválida.', ),
'error_user_password_no_match' => 'A senha informada não combina.', 'log' => array(
), 'title' => 'Entradas do Log',
'log' => array( 'type' => 'Tipo',
'title' => 'Entradas do Log', 'status' => 'Status',
'type' => 'Tipo', 'email' => 'Email',
'status' => 'Status', 'sms' => 'SMS',
'email' => 'Email', 'pushover' => 'Pushover',
'sms' => 'SMS', 'no_logs' => 'Sem logs',
'pushover' => 'Pushover', 'clear' => 'Log clara',
'no_logs' => 'Sem logs', 'delete_title' => 'Log clara',
'clear' => 'Log clara', 'delete_message' => 'Tem certeza de que deseja excluir <b>todos</b> os logs?',
'delete_title' => 'Log clara', ),
'delete_message' => 'Tem certeza de que deseja excluir <b>todos</b> os logs?', 'servers' => array(
), 'server' => 'Servidor',
'servers' => array( 'status' => 'Status',
'server' => 'Servidor', 'label' => 'Etiqueta',
'status' => 'Status', 'domain' => 'Domínio/IP',
'label' => 'Etiqueta', 'timeout' => 'Timeout',
'domain' => 'Domínio/IP', 'timeout_description' => 'Segundos para aguardar a resposta do servidor.',
'timeout' => 'Timeout', 'port' => 'Porta',
'timeout_description' => 'Segundos para aguardar a resposta do servidor.', 'type' => 'Tipo',
'port' => 'Porta', 'type_website' => 'Website',
'type' => 'Tipo', 'type_service' => 'Service',
'type_website' => 'Website', 'pattern' => 'Pesquisa palavra/padrão',
'type_service' => 'Service', 'pattern_description' => 'Se esse padrão não for encontrado no site, o servidor será marcado offline. As
'pattern' => 'Pesquisa palavra/padrão', expressões regulares são permitidas.',
'pattern_description' => 'Se esse padrão não for encontrado no site, o servidor será marcado offline. As expressões regulares são permitidas.', 'last_check' => 'Última verificação',
'last_check' => 'Última verificação', 'last_online' => 'Última vez online',
'last_online' => 'Última vez online', 'last_offline' => 'Última vez offline',
'last_offline' => 'Última vez offline', 'monitoring' => 'Monitoramento',
'monitoring' => 'Monitoramento', 'no_monitoring' => 'Sem monitoring',
'no_monitoring' => 'Sem monitoring', 'email' => 'Email',
'email' => 'Email', 'send_email' => 'Enviar Email',
'send_email' => 'Enviar Email', 'sms' => 'SMS',
'sms' => 'SMS', 'send_sms' => 'Enviar SMS',
'send_sms' => 'Enviar SMS', 'pushover' => 'Pushover',
'pushover' => 'Pushover', 'users' => 'Usuários',
'users' => 'Usuários', 'delete_title' => 'Exluir Servidor',
'delete_title' => 'Exluir Servidor', 'delete_message' => 'Tem certeza que deseja excluir o servidor \'%1\'?',
'delete_message' => 'Tem certeza que deseja excluir o servidor \'%1\'?', 'deleted' => 'Servidor excluído.',
'deleted' => 'Servidor excluído.', 'updated' => 'Servidor atualizado.',
'updated' => 'Servidor atualizado.', 'inserted' => 'Servidor adicionar.',
'inserted' => 'Servidor adicionar.', 'latency' => 'Tempo de resposta',
'latency' => 'Tempo de resposta', 'latency_max' => 'Latência (máxima)',
'latency_max' => 'Latência (máxima)', 'latency_min' => 'Latência (minima)',
'latency_min' => 'Latência (minima)', 'latency_avg' => 'Latência (média)',
'latency_avg' => 'Latência (média)', 'uptime' => 'Uptime',
'uptime' => 'Uptime', 'year' => 'Ano',
'year' => 'Ano', 'month' => 'Mês',
'month' => 'Mês', 'week' => 'Semana',
'week' => 'Semana', 'day' => 'Dia',
'day' => 'Dia', 'hour' => 'Hora',
'hour' => 'Hora', 'warning_threshold' => 'Limite de Aviso',
'warning_threshold' => 'Limite de Aviso', 'warning_threshold_description' => 'Número de verificações que falharam antes de ser marcado offline.',
'warning_threshold_description' => 'Número de verificações que falharam antes de ser marcado offline.', 'chart_last_week' => 'Última semana',
'chart_last_week' => 'Última semana', 'chart_history' => 'Histórico',
'chart_history' => 'Histórico', 'chart_day_format' => '%d/%m/%Y',
// Charts date format according jqPlot date format http://www.jqplot.com/docs/files/plugins/jqplot-dateAxisRenderer-js.html 'chart_long_date_format' => '%d/%m/%Y %H:%M:%S',
'chart_day_format' => '%d/%m/%Y', 'chart_short_date_format' => '%d/%m %H:%M',
'chart_long_date_format' => '%d/%m/%Y %H:%M:%S', 'chart_short_time_format' => '%H:%M',
'chart_short_date_format' => '%d/%m %H:%M', 'warning_notifications_disabled_sms' => 'Notificações SMS estão desabilitadas.',
'chart_short_time_format' => '%H:%M', 'warning_notifications_disabled_email' => 'Notificações por email estão desabilitadas.',
'warning_notifications_disabled_sms' => 'Notificações SMS estão desabilitadas.', 'warning_notifications_disabled_pushover' => 'Notificações por Pushover estão desabilitadas.',
'warning_notifications_disabled_email' => 'Notificações por email estão desabilitadas.', 'error_server_no_match' => 'Servidor não encontrado.',
'warning_notifications_disabled_pushover' => 'Notificações por Pushover estão desabilitadas.', 'error_server_label_bad_length' => 'A etiqueta deve ter entre 1 e 255 caracteres.',
'error_server_no_match' => 'Servidor não encontrado.', 'error_server_ip_bad_length' => 'O domínio / IP deve ter entre 1 e 255 caracteres.',
'error_server_label_bad_length' => 'A etiqueta deve ter entre 1 e 255 caracteres.', 'error_server_ip_bad_service' => 'O IP não é válido.',
'error_server_ip_bad_length' => 'O domínio / IP deve ter entre 1 e 255 caracteres.', 'error_server_ip_bad_website' => 'A URL não é válida.',
'error_server_ip_bad_service' => 'O IP não é válido.', 'error_server_type_invalid' => 'O tipo de servidor selecionado não é valido.',
'error_server_ip_bad_website' => 'A URL não é válida.', 'error_server_warning_threshold_invalid' => 'O limite de aviso deve ser um número inteiro maior que 0.',
'error_server_type_invalid' => 'O tipo de servidor selecionado não é valido.', ),
'error_server_warning_threshold_invalid' => 'O limite de aviso deve ser um número inteiro maior que 0.', 'config' => array(
), 'general' => 'Geral',
'config' => array( 'language' => 'Idioma',
'general' => 'Geral', 'show_update' => 'verificar atualizações semanalmente?',
'language' => 'Idioma', 'email_status' => 'Habilitar envio de email?',
'show_update' => 'verificar atualizações semanalmente?', 'email_from_email' => 'Endereço do envio de email',
'email_status' => 'Habilitar envio de email?', 'email_from_name' => 'Nome do envio de email',
'email_from_email' => 'Endereço do envio de email', 'email_smtp' => 'Enable SMTP',
'email_from_name' => 'Nome do envio de email', 'email_smtp_host' => 'SMTP host',
'email_smtp' => 'Enable SMTP', 'email_smtp_port' => 'SMTP port',
'email_smtp_host' => 'SMTP host', 'email_smtp_security' => 'SMTP security',
'email_smtp_port' => 'SMTP port', 'email_smtp_security_none' => 'None',
'email_smtp_security' => 'SMTP security', 'email_smtp_username' => 'SMTP username',
'email_smtp_security_none' => 'None', 'email_smtp_password' => 'SMTP password',
'email_smtp_username' => 'SMTP username', 'email_smtp_noauth' => 'Deixe em branco para nenhuma autenticação',
'email_smtp_password' => 'SMTP password', 'sms_status' => 'Habilitar o envio de mensagem de texto?',
'email_smtp_noauth' => 'Deixe em branco para nenhuma autenticação', 'sms_gateway' => 'Gateway para o uso de envio de mensagens',
'sms_status' => 'Habilitar o envio de mensagem de texto?', 'sms_gateway_username' => 'Usuário do Gateway',
'sms_gateway' => 'Gateway para o uso de envio de mensagens', 'sms_gateway_password' => 'Senha do Gateway',
'sms_gateway_username' => 'Usuário do Gateway', 'sms_from' => 'Número de telefone de envio',
'sms_gateway_password' => 'Senha do Gateway', 'pushover_status' => 'Habilitar envio de mensagens Pushover',
'sms_from' => 'Número de telefone de envio', 'pushover_description' => 'Pushover é um serviço de notificações em tempo real. Veja <a
'pushover_status' => 'Habilitar envio de mensagens Pushover', href="https://pushover.net/" target="_blank">o website</a> para mais informações.',
'pushover_description' => 'Pushover é um serviço de notificações em tempo real. Veja <a href="https://pushover.net/">o website</a> para mais informações.', 'pushover_clone_app' => 'Clique aqui para criar sua app Pushover',
'pushover_clone_app' => 'Clique aqui para criar sua app Pushover', 'pushover_api_token' => 'Pushover App API Token',
'pushover_api_token' => 'Pushover App API Token', 'pushover_api_token_description' => 'Before you can use Pushover, you need to <a href="%1$s" target="_blank"
'pushover_api_token_description' => 'Before you can use Pushover, you need to <a href="%1$s" target="_blank" rel="noopener">register an App</a> at their website and enter the App API Token here.', rel="noopener">register an App</a> at their website and enter the App API
'alert_type' => 'Selecione como você gostaria de ser notificado.', Token here.',
'alert_type_description' => '<b>Mudança de Status:</b> '. 'alert_type' => 'Selecione como você gostaria de ser notificado.',
'Você receberá uma notificação quando o seridor tive uma mudança de status. De online -> offline ou offline -> online.<br>'. 'alert_type_description' => '<b>Mudança de Status:</b> Você receberá uma notificação quando o seridor
'<br /><b>Offline:</b> '. tive uma mudança de status. De online -> offline ou offline -> online.<br><br
'Você receberá uma notificação quando o servidor fica OFFLINE (Pela primeira vez). Por exemplo, '. /><b>Offline:</b> Você receberá uma notificação quando o servidor fica
'A cronjob é a cada 15 minutos e seu servidor caiu em 1:00 e permanece offline até 6 am. '. OFFLINE (Pela primeira vez). Por exemplo, A cronjob é a cada 15 minutos e seu
'Você receberá uma notificação a 1:00 apenas<br>'. servidor caiu em 1:00 e permanece offline até 6 am. Você receberá uma
'<br><b>Sempre:</b> '. notificação a 1:00 apenas<br><br><b>Sempre:</b> Você receberá uma
'Você receberá uma notificação toda vez que o script é executado e um site esta offline, mesmo se o site tenha ficado offline por horas.', notificação toda vez que o script é executado e um site esta offline, mesmo se
'alert_type_status' => 'Mudança de Status', o site tenha ficado offline por horas.',
'alert_type_offline' => 'Offline', 'alert_type_status' => 'Mudança de Status',
'alert_type_always' => 'Sempre', 'alert_type_offline' => 'Offline',
'log_status' => 'Log status', 'alert_type_always' => 'Sempre',
'log_status_description' => 'Se o status de registro é definido como TRUE, o monitor irá registrar o evento sempre que as configurações de notificação forem passadas.', 'log_status' => 'Log status',
'log_email' => 'Registrar no Log os envios de email feitos pelo script?', 'log_status_description' => 'Se o status de registro é definido como TRUE, o monitor irá registrar o evento
'log_sms' => 'Registrar no Log os envios de mensagens de texto feitos pelo script?', sempre que as configurações de notificação forem passadas.',
'log_pushover' => 'Log pushover messages sent by the script', 'log_email' => 'Registrar no Log os envios de email feitos pelo script?',
'updated' => 'A configuração foi atualizada.', 'log_sms' => 'Registrar no Log os envios de mensagens de texto feitos pelo script?',
'tab_email' => 'Email', 'log_pushover' => 'Log pushover messages sent by the script',
'tab_sms' => 'Texto', 'updated' => 'A configuração foi atualizada.',
'tab_pushover' => 'Pushover', 'tab_email' => 'Email',
'settings_email' => 'Configuração de email', 'tab_sms' => 'Texto',
'settings_sms' => 'Configuração de mensagens de texto', 'tab_pushover' => 'Pushover',
'settings_pushover' => 'Pushover settings', 'settings_email' => 'Configuração de email',
'settings_notification' => 'Configuração de notificações', 'settings_sms' => 'Configuração de mensagens de texto',
'settings_log' => 'Configuração de Logs', 'settings_pushover' => 'Pushover settings',
'auto_refresh' => 'Atualizar automaticamente', 'settings_notification' => 'Configuração de notificações',
'auto_refresh_description' => 'settings_log' => 'Configuração de Logs',
'Atualizar automaticamente a página de servidores.<br>'. 'auto_refresh' => 'Atualizar automaticamente',
'<span class="small">'. 'auto_refresh_description' => 'Atualizar automaticamente a página de servidores.<br><span class="small">Tempo
'Tempo em segundos, Se 0 a página não será atualizada.'. em segundos, Se 0 a página não será atualizada.</span>',
'</span>', 'seconds' => 'segundos',
'seconds' => 'segundos', 'test' => 'Teste',
'test' => 'Teste', 'test_email' => 'Um e-mail será enviado para o endereço especificado em seu perfil de usuário.',
'test_email' => 'Um e-mail será enviado para o endereço especificado em seu perfil de usuário.', 'test_sms' => 'Um SMS será enviado para o número de telefone especificado em seu perfil de usuário.',
'test_sms' => 'Um SMS será enviado para o número de telefone especificado em seu perfil de usuário.', 'test_pushover' => 'A notificação Pushover será enviado para a chave de usuário / dispositivo especificado
'test_pushover' => 'A notificação Pushover será enviado para a chave de usuário / dispositivo especificado em seu perfil de usuário.', em seu perfil de usuário.',
'send' => 'Enviar', 'send' => 'Enviar',
'test_subject' => 'Teste', 'test_subject' => 'Teste',
'test_message' => 'Mensagem de Teste', 'test_message' => 'Mensagem de Teste',
'email_sent' => 'Email enviado', 'email_sent' => 'Email enviado',
'email_error' => 'Erro no envio do email', 'email_error' => 'Erro no envio do email',
'sms_sent' => 'Sms enviado', 'sms_sent' => 'Sms enviado',
'sms_error' => 'Error no envio do SMS. %s', 'sms_error' => 'Error no envio do SMS. %s',
'sms_error_nomobile' => 'Não foi possível enviar SMS de teste: nenhum número de telefone válido encontrado em seu perfil.', 'sms_error_nomobile' => 'Não foi possível enviar SMS de teste: nenhum número de telefone válido encontrado
'pushover_sent' => 'Notificação Pushover enviada', em seu perfil.',
'pushover_error' => 'Um erro foi encontrado ao enviar a notificação Pushover: %s', 'pushover_sent' => 'Notificação Pushover enviada',
'pushover_error_noapp' => 'Não foi possível enviar a notificação de teste: não foi encontrada a APP API token do Pushover na configuração global.', 'pushover_error' => 'Um erro foi encontrado ao enviar a notificação Pushover: %s',
'pushover_error_nokey' => 'Não foi possível enviar a notificação de teste: não foi encontrada a Pushover Key no seu perfil.', 'pushover_error_noapp' => 'Não foi possível enviar a notificação de teste: não foi encontrada a APP API
'log_retention_period' => 'Período de retenção do Log', token do Pushover na configuração global.',
'log_retention_period_description' => 'Número de dias para manter os registros de notificações e arquivos de tempo de atividade do servidor. Digite 0 para desativar a limpeza de registro.', 'pushover_error_nokey' => 'Não foi possível enviar a notificação de teste: não foi encontrada a Pushover
'log_retention_days' => 'dias', Key no seu perfil.',
), 'log_retention_period' => 'Período de retenção do Log',
// for newlines in the email messages use <br> 'log_retention_period_description' => 'Número de dias para manter os registros de notificações e arquivos
'notifications' => array( de tempo de atividade do servidor. Digite 0 para desativar a limpeza de
'off_sms' => 'Servidor \'%LABEL%\' está OFFLINE: ip=%IP%, porta=%PORT%. Erro=%ERROR%', registro.',
'off_email_subject' => 'IMPORTANTE: Servidor \'%LABEL%\' está OFFLINE', 'log_retention_days' => 'dias',
'off_email_body' => "Falha ao conectar ao servidor:<br><br>Servidor: %LABEL%<br>IP: %IP%<br>Porta: %PORT%<br>Erro: %ERROR%<br>Data: %DATE%", ),
'off_pushover_title' => 'Servidor \'%LABEL%\' está OFFLINE', 'notifications' => array(
'off_pushover_message' => "Falha ao conectar ao servidor:<br><br>Servidor: %LABEL%<br>IP: %IP%<br>Porta: %PORT%<br>Erro: %ERROR%<br>Data: %DATE%", 'off_sms' => 'Servidor \'%LABEL%\' está OFFLINE: ip=%IP%, porta=%PORT%. Erro=%ERROR%',
'on_sms' => 'Servidor \'%LABEL%\' esta ONLINE: ip=%IP%, porta=%PORT%, it was down for %LAST_OFFLINE_DURATION%', 'off_email_subject' => 'IMPORTANTE: Servidor \'%LABEL%\' está OFFLINE',
'on_email_subject' => 'IMPORTANTE: Servidor \'%LABEL%\' esta ONLINE', 'off_email_body' => 'Falha ao conectar ao servidor:<br><br>Servidor: %LABEL%<br>IP: %IP%<br>Porta:
'on_email_body' => "Servidor '%LABEL%' esta ONLINE novamente, it was down for %LAST_OFFLINE_DURATION%:<br><br>Servidor: %LABEL%<br>IP: %IP%<br>Porta: %PORT%<br>Data: %DATE%", %PORT%<br>Erro: %ERROR%<br>Data: %DATE%',
'on_pushover_title' => 'Servidor \'%LABEL%\' esta ONLINE', 'off_pushover_title' => 'Servidor \'%LABEL%\' está OFFLINE',
'on_pushover_message' => "Servidor '%LABEL%' esta ONLINE novamente, it was down for %LAST_OFFLINE_DURATION%:<br><br>Servidor: %LABEL%<br>IP: %IP%<br>Porta: %PORT%<br>Data: %DATE%", 'off_pushover_message' => 'Falha ao conectar ao servidor:<br><br>Servidor: %LABEL%<br>IP: %IP%<br>Porta:
), %PORT%<br>Erro: %ERROR%<br>Data: %DATE%',
'login' => array( 'on_sms' => 'Servidor \'%LABEL%\' esta ONLINE: ip=%IP%, porta=%PORT%, it was down for %LAST_OFFLINE_DURATION%',
'welcome_usermenu' => 'Bem vindo, %user_name%', 'on_email_subject' => 'IMPORTANTE: Servidor \'%LABEL%\' esta ONLINE',
'title_sign_in' => 'Por favor efetue login', 'on_email_body' => 'Servidor \'%LABEL%\' esta ONLINE novamente, it was down for
'title_forgot' => 'Perdeu sua senha?', %LAST_OFFLINE_DURATION%:<br><br>Servidor: %LABEL%<br>IP: %IP%<br>Porta: %PORT%<br>Data:
'title_reset' => 'Redefinir senha', %DATE%',
'submit' => 'Enviar', 'on_pushover_title' => 'Servidor \'%LABEL%\' esta ONLINE',
'remember_me' => 'Lembrar', 'on_pushover_message' => 'Servidor \'%LABEL%\' esta ONLINE novamente, it was down for
'login' => 'Login', %LAST_OFFLINE_DURATION%:<br><br>Servidor: %LABEL%<br>IP: %IP%<br>Porta:
'logout' => 'Logout', %PORT%<br>Data: %DATE%',
'username' => 'Username', ),
'password' => 'Senha', 'login' => array(
'password_repeat' => 'Repetir Senha', 'welcome_usermenu' => 'Bem vindo, %user_name%',
'password_forgot' => 'Perdeu a senha?', 'title_sign_in' => 'Por favor efetue login',
'password_reset' => 'Redefinir senha', 'title_forgot' => 'Perdeu sua senha?',
'password_reset_email_subject' => 'Redefinir sua senha para PHP Server Monitor', 'title_reset' => 'Redefinir senha',
'password_reset_email_body' => 'Por favor use o link para redefinir sua senha. Este link irá expirar em 1 hora.<br><br>%link%', 'submit' => 'Enviar',
'error_user_incorrect' => 'O username não pode ser encontrado.', 'remember_me' => 'Lembrar',
'error_login_incorrect' => 'As informações são incorretas.', 'login' => 'Login',
'error_login_passwords_nomatch' => 'A senha informada não é válida.', 'logout' => 'Logout',
'error_reset_invalid_link' => 'O link para redefinição de senha é inválido.', 'username' => 'Username',
'success_password_forgot' => 'Um email foi enviado para você com as instruções de redefinição de senha.', 'password' => 'Senha',
'success_password_reset' => 'Sua senha foi redefinida com sucesso. Por favor faça login.', 'password_repeat' => 'Repetir Senha',
), 'password_forgot' => 'Perdeu a senha?',
'error' => array( 'password_reset' => 'Redefinir senha',
'401_unauthorized' => 'Não autorizado', 'password_reset_email_subject' => 'Redefinir sua senha para PHP Server Monitor',
'401_unauthorized_description' => 'Você não tem autorização para ver esta página.', 'password_reset_email_body' => 'Por favor use o link para redefinir sua senha. Este link irá expirar em 1
), hora.<br><br>%link%',
'error_user_incorrect' => 'O username não pode ser encontrado.',
'error_login_incorrect' => 'As informações são incorretas.',
'error_login_passwords_nomatch' => 'A senha informada não é válida.',
'error_reset_invalid_link' => 'O link para redefinição de senha é inválido.',
'success_password_forgot' => 'Um email foi enviado para você com as instruções de redefinição de senha.',
'success_password_reset' => 'Sua senha foi redefinida com sucesso. Por favor faça login.',
),
'error' => array(
'401_unauthorized' => 'Não autorizado',
'401_unauthorized_description' => 'Você não tem autorização para ver esta página.',
),
); );

View File

@ -1,4 +1,5 @@
<?php <?php
/** /**
* PHP Server Monitor * PHP Server Monitor
* Monitor your servers and websites. * Monitor your servers and websites.
@ -27,343 +28,448 @@
**/ **/
$sm_lang = array( $sm_lang = array(
'name' => 'Русский - Russian', 'name' => 'Русский - Russian',
'locale' => array('ru_RU.UTF-8', 'ru_RU', 'russian', 'russian'), 'locale' => array(
'locale_tag' => 'ru', '0' => 'ru_RU.UTF-8',
'locale_dir' => 'ltr', '1' => 'ru_RU',
'system' => array( '2' => 'russian',
'title' => 'Сервер Мониторинг', '3' => 'russian',
'install' => 'Установка', ),
'action' => 'Действие', 'locale_tag' => 'ru',
'save' => 'Сохранить', 'locale_dir' => 'ltr',
'edit' => 'Редактировать', 'system' => array(
'delete' => 'Удалить', 'title' => 'Сервер Мониторинг',
'date' => 'Дата', 'install' => 'Установка',
'message' => 'Сообщение', 'action' => 'Действие',
'yes' => 'Да', 'save' => 'Сохранить',
'no' => 'Нет', 'edit' => 'Редактировать',
'insert' => 'Добавить', 'delete' => 'Удалить',
'add_new' => 'Добавить новый', 'date' => 'Дата',
'update_available' => 'Новая версия ({version}) доступна по адресу <a href="https://github.com/phpservermon/phpservermon/releases/latest" target="_blank" rel="noopener">http://www.phpservermonitor.org</a>.', 'message' => 'Сообщение',
'back_to_top' => 'Наверх', 'yes' => 'Да',
'go_back' => 'Вернуться', 'no' => 'Нет',
'ok' => 'OK', 'insert' => 'Добавить',
'cancel' => 'Отмена', 'add_new' => 'Добавить новый',
'activate' => 'Активировать', 'update_available' => 'Новая версия ({version}) доступна по адресу <a
// date/time format according the strftime php function format parameter http://php.net/manual/function.strftime.php href="https://github.com/phpservermon/phpservermon/releases/latest" target="_blank"
'short_day_format' => '%e %B', rel="noopener">http://www.phpservermonitor.org</a>.',
'long_day_format' => '%e %B %Y', 'back_to_top' => 'Наверх',
'yesterday_format' => 'Вчера в %k:%M', 'go_back' => 'Вернуться',
'other_day_format' => '%A в %k:%M', 'ok' => 'OK',
'never' => 'Никогда', 'cancel' => 'Отмена',
'hours_ago' => '%d часов назад', 'activate' => 'Активировать',
'an_hour_ago' => 'час назад', 'short_day_format' => '%e %B',
'minutes_ago' => '%d минут назад', 'long_day_format' => '%e %B %Y',
'a_minute_ago' => 'минуту назад', 'yesterday_format' => 'Вчера в %k:%M',
'seconds_ago' => '%d секунд назад', 'other_day_format' => '%A в %k:%M',
'a_second_ago' => 'секунду назад', 'never' => 'Никогда',
'year' => 'год', 'hours_ago' => '%d часов назад',
'years' => 'лет', 'an_hour_ago' => 'час назад',
'month' => 'месяц', 'minutes_ago' => '%d минут назад',
'months' => 'месяцев', 'a_minute_ago' => 'минуту назад',
'day' => 'день', 'seconds_ago' => '%d секунд назад',
'days' => 'дней', 'a_second_ago' => 'секунду назад',
'hour' => 'час', 'year' => 'год',
'hours' => 'часов', 'years' => 'лет',
'minute' => 'минута', 'month' => 'месяц',
'minutes' => 'минут', 'months' => 'месяцев',
'second' => 'секунда', 'day' => 'день',
'seconds' => 'секунд', 'days' => 'дней',
), 'hour' => 'час',
'menu' => array( 'hours' => 'часов',
'config' => 'Параметры', 'minute' => 'минута',
'server' => 'Серверы', 'minutes' => 'минут',
'server_log' => 'Лог', 'second' => 'секунда',
'server_status' => 'Статус', 'seconds' => 'секунд',
'server_update' => 'Обновить', ),
'user' => 'Пользователи', 'menu' => array(
'help' => 'Помощь', 'config' => 'Параметры',
), 'server' => 'Серверы',
'users' => array( 'server_log' => 'Лог',
'user' => 'Пользователь', 'server_status' => 'Статус',
'name' => 'Имя пользователя', 'server_update' => 'Обновить',
'user_name' => 'Логин', 'user' => 'Пользователи',
'password' => 'Пароль', 'help' => 'Помощь',
'password_repeat' => 'Повтор пароля', ),
'password_leave_blank' => 'Оставить пустым, если не меняется', 'users' => array(
'level' => 'Уровень', 'user' => 'Пользователь',
'level_10' => 'Администратор', 'name' => 'Имя пользователя',
'level_20' => 'Пользователь', 'user_name' => 'Логин',
'level_description' => '<b>Администраторы</b> имеют полный доступ: они могут управлять серверами, пользователями и изменять общую конфигурацию.<br><b>Пользователи</b> могут только просматривать и запускать проверку для серверов, которые были к ним прикреплены.', 'password' => 'Пароль',
'mobile' => 'Телефон', 'password_repeat' => 'Повтор пароля',
'email' => 'E-mail', 'password_leave_blank' => 'Оставить пустым, если не меняется',
'pushover' => 'Pushover', 'level' => 'Уровень',
'pushover_description' => 'Pushover - это сервис, который позволяет легко получать уведомления в режиме реального времени. Больше информации на <a href="https://pushover.net/">их веб-сайте</a>.', 'level_10' => 'Администратор',
'pushover_key' => 'Pushover ключ', 'level_20' => 'Пользователь',
'pushover_device' => 'Pushover устройство', 'level_description' => '<b>Администраторы</b> имеют полный доступ: они
'pushover_device_description' => 'Имя устройства, на которое будут отправляться уведомления. Оставьте пустым, что бы отправлять уведомления на все устройства.', могут управлять серверами, пользователями и
'telegram' => 'Telegram', изменять общую
'telegram_description' => '<a href="https://telegram.org/">Telegram</a> удобный мессенджер для получения уведомлений в реальном времени. Посетите <a href="http://docs.phpservermonitor.org/">раздел документации</a> для получения доп. информации и инструкций по установке.', конфигурацию.<br><b>Пользователи</b> могут только
'telegram_chat_id' => 'Telegram chat id', просматривать и запускать проверку для
'telegram_chat_id_description' => 'Сообщения будут отправляться на указанный идентификатор чата.', серверов, которые были к ним прикреплены.',
'telegram_get_chat_id' => 'Нажмите здесь чтобы получить ваш chat id', 'mobile' => 'Телефон',
'activate_telegram' => 'Активировать уведомления в Telegram', 'email' => 'E-mail',
'activate_telegram_description' => 'Разрешить отправку уведомлений на указанный идентификатор чата. Без этого разрешения Telegram не позволит нам отправлять вам уведомления.', 'pushover' => 'Pushover',
'telegram_bot_username_found' => 'Бот обнаружен!<br><a href="%s" target="_blank" rel="noopener"><button class="btn btn-primary">Следующий шаг</button></a> <br>Откроется чат с ботом. Здесь вам нужно нажать кнопку Start или отправить команду /start.', 'pushover_description' => 'Pushover - это сервис, который позволяет легко
'telegram_bot_username_error_token' => '401 - Unauthorized. Пожалуйста укажите действительный API токен..', получать уведомления в режиме реального
'telegram_bot_error' => 'Произошла ошибка при активации уведомления Telegram: %s', времени. Больше информации на <a
'delete_title' => 'Удалить пользователя', href="https://pushover.net/" target="_blank">их веб-сайте</a>.',
'delete_message' => 'Вы уверены что хотите удалить пользователя \'%1\'?', 'pushover_key' => 'Pushover ключ',
'deleted' => 'Пользователь удален.', 'pushover_device' => 'Pushover устройство',
'updated' => 'Пользователь обновлен.', 'pushover_device_description' => 'Имя устройства, на которое будут
'inserted' => 'Пользователь добавлен.', отправляться уведомления. Оставьте
'profile' => 'Профиль', пустым, что бы отправлять уведомления на
'profile_updated' => 'Ваш профиль был обновлен.', все устройства.',
'error_user_name_bad_length' => 'Логин должен содержать от 2 до 64 знаков.', 'telegram' => 'Telegram',
'error_user_name_invalid' => 'Имя пользователя может содержать только латинские символы (a-z, A-Z), цифры (0-9), точки (.) и подчеркивание (_).', 'telegram_description' => '<a href="https://telegram.org/" target="_blank">Telegram</a> удобный мессенджер
'error_user_name_exists' => 'Данный логин уже существует.', для получения уведомлений в реальном
'error_user_email_bad_length' => 'E-mail может содержать от 5 до 255 знаков.', времени. Посетите <a
'error_user_email_invalid' => 'E-mail указан неверно.', href="http://docs.phpservermonitor.org/" target="_blank">раздел документации</a>
'error_user_level_invalid' => 'Данный уровень пользователя недействителен.', для получения доп. информации и инструкций по
'error_user_no_match' => 'Данного пользователя нет в базе данных.', установке.',
'error_user_password_invalid' => 'Пароль указан неверно.', 'telegram_chat_id' => 'Telegram chat id',
'error_user_password_no_match' => 'Введенные пароли не совпадают.', 'telegram_chat_id_description' => 'Сообщения будут отправляться на
), указанный идентификатор чата.',
'log' => array( 'telegram_get_chat_id' => 'Нажмите здесь чтобы получить ваш chat id',
'title' => 'Запись', 'activate_telegram' => 'Активировать уведомления в Telegram',
'type' => 'Тип', 'activate_telegram_description' => 'Разрешить отправку уведомлений на
'status' => 'Статус', указанный идентификатор чата. Без этого
'email' => 'E-mail', разрешения Telegram не позволит нам
'sms' => 'SMS', отправлять вам уведомления.',
'pushover' => 'Pushover', 'telegram_bot_username_found' => 'Бот обнаружен!<br><a href="%s" target="_blank"
'telegram' => 'Telegram', rel="noopener"><button class="btn btn-primary">Следующий
'no_logs' => 'Записей нет', шаг</button></a> <br>Откроется чат с ботом. Здесь
'clear' => 'Очистить логи', вам нужно нажать кнопку Start или отправить
'delete_title' => 'Удаление логов', команду /start.',
'delete_message' => 'Вы уверены что хотите удалить <b>все</b> логи?', 'telegram_bot_username_error_token' => '401 - Unauthorized. Пожалуйста укажите
), действительный API токен..',
'servers' => array( 'telegram_bot_error' => 'Произошла ошибка при активации уведомления
'server' => 'Сервер', Telegram: %s',
'status' => 'Состояние', 'delete_title' => 'Удалить пользователя',
'label' => 'Название', 'delete_message' => 'Вы уверены что хотите удалить пользователя \'%1\'?',
'domain' => 'Домен/IP', 'deleted' => 'Пользователь удален.',
'timeout' => 'Тайм-аут', 'updated' => 'Пользователь обновлен.',
'timeout_description' => 'Количество секунд ожидания ответа сервера.', 'inserted' => 'Пользователь добавлен.',
'authentication_settings' => 'Настройки аутентификации', 'profile' => 'Профиль',
'optional' => 'необязательно', 'profile_updated' => 'Ваш профиль был обновлен.',
'website_username' => 'Имя пользователя', 'error_user_name_bad_length' => 'Логин должен содержать от 2 до 64 знаков.',
'website_username_description' => 'Имя пользователя для доступа к сайту. (Поддерживается только Apache authentication.)', 'error_user_name_invalid' => 'Имя пользователя может содержать только
'website_password' => 'Пароль', латинские символы (a-z, A-Z), цифры (0-9), точки (.)
'website_password_description' => 'пароль для доступа к сайту. Пароль будет храниться в зашифрованном виде.', и подчеркивание (_).',
'fieldset_monitoring' => 'Мониторинг', 'error_user_name_exists' => 'Данный логин уже существует.',
'fieldset_permissions' => 'Права доступа', 'error_user_email_bad_length' => 'E-mail может содержать от 5 до 255 знаков.',
'port' => 'Порт', 'error_user_email_invalid' => 'E-mail указан неверно.',
'custom_port' => 'Указать порт', 'error_user_level_invalid' => 'Данный уровень пользователя
'popular_ports' => 'Популярные порты', недействителен.',
'please_select' => 'Выберите', 'error_user_no_match' => 'Данного пользователя нет в базе данных.',
'type' => 'Тип', 'error_user_password_invalid' => 'Пароль указан неверно.',
'type_website' => 'Веб-сайт', 'error_user_password_no_match' => 'Введенные пароли не совпадают.',
'type_service' => 'Сервис', ),
'type_ping' => 'Пинг', 'log' => array(
'pattern' => 'Искать текст/шаблон', 'title' => 'Запись',
'pattern_description' => 'Если текст по шаблону не найден на сайте, сервер будет помечен как Оффлайн. Регулярные выражения допустимы.', 'type' => 'Тип',
'pattern_online' => 'Шаблон указывает что вебсайт:', 'status' => 'Статус',
'pattern_online_description' => 'Online: Если этот шаблон не найден на веб-сайте, сервер будет отмечен Онлайн. Offline: Если этот шаблон не найден на веб-сайте, сервер будет отмечен как Оффлайн.', 'email' => 'E-mail',
'header_name' => 'Название заголовка', 'sms' => 'SMS',
'header_value' => 'Значение заголовка', 'pushover' => 'Pushover',
'header_name_description' => 'с учетом регистра.', 'telegram' => 'Telegram',
'header_value_description' => 'Разрешены регулярные выражения.', 'no_logs' => 'Записей нет',
'last_check' => 'Последняя проверка', 'clear' => 'Очистить логи',
'last_online' => 'Был онлайн', 'delete_title' => 'Удаление логов',
'last_offline' => 'Был оффлайн', 'delete_message' => 'Вы уверены что хотите удалить <b>все</b> логи?',
'monitoring' => 'Мониторинг', ),
'no_monitoring' => 'Нет мониторинга', 'servers' => array(
'email' => 'E-mail', 'server' => 'Сервер',
'send_email' => 'Отправить E-mail', 'status' => 'Состояние',
'sms' => 'CMC', 'label' => 'Название',
'send_sms' => 'Отправить CMC', 'domain' => 'Домен/IP',
'pushover' => 'Pushover', 'timeout' => 'Тайм-аут',
'send_pushover' => 'Отправлять уведомления в Pushover', 'timeout_description' => 'Количество секунд ожидания ответа сервера.',
'telegram' => 'Telegram', 'authentication_settings' => 'Настройки аутентификации',
'send_telegram' => 'Отправлять уведомления в Telegram', 'optional' => 'необязательно',
'users' => 'Пользователи', 'website_username' => 'Имя пользователя',
'delete_title' => 'Удалить сервер', 'website_username_description' => 'Имя пользователя для доступа к сайту.
'delete_message' => 'Вы уверены что хотите удалить сервер \'%1\'?', (Поддерживается только Apache authentication.)',
'deleted' => 'Сервер удален.', 'website_password' => 'Пароль',
'updated' => 'Сервер обновлен.', 'website_password_description' => 'пароль для доступа к сайту. Пароль будет
'inserted' => 'Сервер добавлен.', храниться в зашифрованном виде.',
'latency' => 'Задержка', 'fieldset_monitoring' => 'Мониторинг',
'latency_max' => 'Задержка (максимальная)', 'fieldset_permissions' => 'Права доступа',
'latency_min' => 'Задержка (минимальная)', 'port' => 'Порт',
'latency_avg' => 'Задержка (средняя)', 'custom_port' => 'Указать порт',
'online' => 'онлайн', 'popular_ports' => 'Популярные порты',
'offline' => 'оффлайн', 'please_select' => 'Выберите',
'uptime' => 'Аптайм', 'type' => 'Тип',
'year' => 'Год', 'type_website' => 'Веб-сайт',
'month' => 'Месяц', 'type_service' => 'Сервис',
'week' => 'Неделя', 'type_ping' => 'Пинг',
'day' => 'День', 'pattern' => 'Искать текст/шаблон',
'hour' => 'Час', 'pattern_description' => 'Если текст по шаблону не найден на сайте,
'warning_threshold' => 'Порог предупреждения', сервер будет помечен как Оффлайн. Регулярные
'warning_threshold_description' => 'Количество неудачных проверок, требуемых чтобы сервер был помечен как Оффлайн.', выражения допустимы.',
'chart_last_week' => 'Прошлая неделя', 'pattern_online' => 'Шаблон указывает что вебсайт:',
'chart_history' => 'История', 'pattern_online_description' => 'Online: Если этот шаблон найден на веб-сайте,
// Charts date format according jqPlot date format http://www.jqplot.com/docs/files/plugins/jqplot-dateAxisRenderer-js.html сервер будет отмечен Онлайн. Offline: Если
'chart_day_format' => '%d.%m.%Y', этот шаблон не найден на веб-сайте, сервер
'chart_long_date_format' => '%d.%m.%Y %H:%M:%S', будет отмечен как Оффлайн.',
'chart_short_date_format' => '%d.%m %H:%M', 'header_name' => 'Название заголовка',
'chart_short_time_format' => '%H:%M', 'header_value' => 'Значение заголовка',
'warning_notifications_disabled_sms' => 'SMS уведомления отключены.', 'header_name_description' => 'с учетом регистра.',
'warning_notifications_disabled_email' => 'E-mail уведомления отключены.', 'header_value_description' => 'Разрешены регулярные выражения.',
'warning_notifications_disabled_pushover' => 'Pushover уведомления отключены.', 'last_check' => 'Последняя проверка',
'warning_notifications_disabled_telegram' => 'Уведомления в Telegram отключены.', 'last_online' => 'Был онлайн',
'error_server_no_match' => 'Сервер не найден.', 'last_offline' => 'Был оффлайн',
'error_server_label_bad_length' => 'Название должно содержать от 1 до 255 знаков.', 'monitoring' => 'Мониторинг',
'error_server_ip_bad_length' => 'Домен/IP должен содержать от 1 до 255 знаков', 'no_monitoring' => 'Нет мониторинга',
'error_server_ip_bad_service' => 'IP-адрес недействителен.', 'email' => 'E-mail',
'error_server_ip_bad_website' => 'Ссылка веб-страницы недействительна.', 'send_email' => 'Отправить E-mail',
'error_server_type_invalid' => 'Выбраный тип сервера недействителен.', 'sms' => 'CMC',
'error_server_warning_threshold_invalid' => 'Порог предупреждения должен иметь значение больше 0', 'send_sms' => 'Отправить CMC',
), 'pushover' => 'Pushover',
'config' => array( 'send_pushover' => 'Отправлять уведомления в Pushover',
'general' => 'Основные', 'telegram' => 'Telegram',
'language' => 'Язык', 'send_telegram' => 'Отправлять уведомления в Telegram',
'show_update' => 'Проверять обновления?', 'users' => 'Пользователи',
'password_encrypt_key' => 'Ключ шифрования пароля', 'delete_title' => 'Удалить сервер',
'password_encrypt_key_note' => 'Этот ключ используется для шифрования паролей, которые указаны на серверах (для доступа к веб-сайтам). Если ключ изменится, сохраненный пароль будет недействителен!', 'delete_message' => 'Вы уверены что хотите удалить сервер \'%1\'?',
'proxy' => 'Использовать прокси', 'deleted' => 'Сервер удален.',
'proxy_url' => 'Адрес прокси', 'updated' => 'Сервер обновлен.',
'proxy_user' => 'Имя пользователя прокси', 'inserted' => 'Сервер добавлен.',
'proxy_password' => 'Пароль прокси', 'latency' => 'Задержка',
'email_status' => 'Разрешить отправку email', 'latency_max' => 'Задержка (максимальная)',
'email_from_email' => 'Отправлять от адреса', 'latency_min' => 'Задержка (минимальная)',
'email_from_name' => 'Отправлять от имени', 'latency_avg' => 'Задержка (средняя)',
'email_smtp' => 'Использовать SMTP', 'online' => 'онлайн',
'email_smtp_host' => 'SMTP адрес', 'offline' => 'оффлайн',
'email_smtp_port' => 'SMTP порт', 'uptime' => 'Аптайм',
'email_smtp_security' => 'SMTP защита', 'year' => 'Год',
'email_smtp_security_none' => 'нет', 'month' => 'Месяц',
'email_smtp_username' => 'SMTP пользователь', 'week' => 'Неделя',
'email_smtp_password' => 'SMTP пароль', 'day' => 'День',
'email_smtp_noauth' => 'Оставить пустым, если без аутентификации', 'hour' => 'Час',
'sms_status' => 'Разрешить отправку SMS', 'warning_threshold' => 'Порог предупреждения',
'sms_gateway' => 'Шлюз для отправки SMS', 'warning_threshold_description' => 'Количество неудачных проверок,
'sms_gateway_username' => 'Пользователь', требуемых чтобы сервер был помечен как
'sms_gateway_password' => 'Пароль', Оффлайн.',
'sms_from' => 'Номер отправителя', 'chart_last_week' => 'Прошлая неделя',
'pushover_status' => 'Разрешить отправку Pushover сообщений', 'chart_history' => 'История',
'pushover_description' => 'Pushover - это сервис, который позволяет легко получать уведомления в режиме реального времени. Больше информации на <a href="https://pushover.net/">их веб-сайте</a>.', 'chart_day_format' => '%d.%m.%Y',
'pushover_clone_app' => 'Нажмите здесь чтобы создать ваш Pushover app', 'chart_long_date_format' => '%d.%m.%Y %H:%M:%S',
'pushover_api_token' => 'Pushover App API Token', 'chart_short_date_format' => '%d.%m %H:%M',
'pushover_api_token_description' => 'Прежде чем вы сможете начать пользоваться Pushover, вам необходимо зарегистрировать <a href="%1$s" target="_blank" rel="noopener">"App"</a> на их веб-сайте и ввести "App API Token" сюда.', 'chart_short_time_format' => '%H:%M',
'telegram_status' => 'Разрешить отправку уведомлений в Telegram', 'warning_notifications_disabled_sms' => 'SMS уведомления отключены.',
'telegram_description' => '<a href="https://telegram.org/">Telegram</a> удобный мессенджер для получения уведомлений в реальном времени. Посетите <a href="http://docs.phpservermonitor.org/">раздел документации</a> для получения доп. информации и инструкций по установке.', 'warning_notifications_disabled_email' => 'E-mail уведомления отключены.',
'telegram_api_token' => 'Telegram API Token', 'warning_notifications_disabled_pushover' => 'Pushover уведомления отключены.',
'telegram_api_token_description' => 'Прежде чем вы сможете начать пользоваться Telegram, вам необходимо получить API Token. Посетите <a href="http://docs.phpservermonitor.org/">раздел документации</a> для получения помощи.', 'warning_notifications_disabled_telegram' => 'Уведомления в Telegram отключены.',
'alert_type' => 'Тип уведомлений', 'error_server_no_match' => 'Сервер не найден.',
'alert_type_description' => '<b>Изменение статуса:</b> '. 'error_server_label_bad_length' => 'Название должно содержать от 1 до 255
'Вы получите уведомление об изменение статуса. Для онлайн -> оффлайн или офлайн -> онлайн.<br>'. знаков.',
'<br /><b>Оффлайн:</b> '. 'error_server_ip_bad_length' => 'Домен/IP должен содержать от 1 до 255 знаков',
'Вы получите уведомление только когда сервер перейдет в статус оффлайн. Например, '. 'error_server_ip_bad_service' => 'IP-адрес недействителен.',
'задание Cron выставлено на каждые 15 минут. Сервер перейдет в статус оффлайн в 1:00 и не измениться до 6:00. '. 'error_server_ip_bad_website' => 'Ссылка веб-страницы недействительна.',
'Вы получите 1 уведомление только в 1:00<br>'. 'error_server_type_invalid' => 'Выбраный тип сервера недействителен.',
'<br><b>Всегда:</b> '. 'error_server_warning_threshold_invalid' => 'Порог предупреждения должен иметь
'Вы будете получать уведомление при каждом запуске скрипта проверки, как только сервер перейдет в статус оффлайн, даже если сервер находится в этом статусе несколько часов.', значение больше 0',
'alert_type_status' => 'Изменение статуса', ),
'alert_type_offline' => 'Оффлайн', 'config' => array(
'alert_type_always' => 'Всегда', 'general' => 'Основные',
'alert_proxy' => 'Даже если включено, прокси никогда не используется для сервисов', 'language' => 'Язык',
'alert_proxy_url' => 'Формат: адрес:порт', 'show_update' => 'Проверять обновления?',
'log_status' => 'Лог статусов', 'password_encrypt_key' => 'Ключ шифрования пароля',
'log_status_description' => 'Если лог статусов включен, монитор будет логировать все события выбранные в типе уведомлений.', 'password_encrypt_key_note' => 'Этот ключ используется для шифрования
'log_email' => 'Логировать уведомления отправленые по E-mail', паролей, которые указаны на серверах (для
'log_sms' => 'Логировать уведомления отправленые по SMS', доступа к веб-сайтам). Если ключ изменится,
'log_pushover' => 'Логировать Pushover уведомления', сохраненный пароль будет недействителен!',
'log_telegram' => 'Логировать Telegram уведомления', 'proxy' => 'Использовать прокси',
'updated' => 'Настройки успешно сохранены.', 'proxy_url' => 'Адрес прокси',
'tab_email' => 'Email', 'proxy_user' => 'Имя пользователя прокси',
'tab_sms' => 'SMS', 'proxy_password' => 'Пароль прокси',
'tab_pushover' => 'Pushover', 'email_status' => 'Разрешить отправку email',
'tab_telegram' => 'Telegram', 'email_from_email' => 'Отправлять от адреса',
'settings_email' => 'Настройка E-mail', 'email_from_name' => 'Отправлять от имени',
'settings_sms' => 'Настройка SMS', 'email_smtp' => 'Использовать SMTP',
'settings_pushover' => 'Настройка Pushover', 'email_smtp_host' => 'SMTP адрес',
'settings_telegram' => 'Настройка Telegram', 'email_smtp_port' => 'SMTP порт',
'settings_notification' => 'Настройка уведомлений', 'email_smtp_security' => 'SMTP защита',
'settings_log' => 'Настройка логирования', 'email_smtp_security_none' => 'нет',
'settings_proxy' => 'Настройка прокси', 'email_smtp_username' => 'SMTP пользователь',
'auto_refresh' => 'Авто-обновление', 'email_smtp_password' => 'SMTP пароль',
'auto_refresh_description' => 'email_smtp_noauth' => 'Оставить пустым, если без аутентификации',
'Авто-обновление страницы статуса серверов.<br>'. 'sms_status' => 'Разрешить отправку SMS',
'<span class="small">'. 'sms_gateway' => 'Шлюз для отправки SMS',
'Время в секундах. Если указано 0, то страница не будет обновляться.'. 'sms_gateway_username' => 'Пользователь',
'</span>', 'sms_gateway_password' => 'Пароль',
'seconds' => 'секунд', 'sms_from' => 'Номер отправителя',
'test' => 'Проверка', 'pushover_status' => 'Разрешить отправку Pushover сообщений',
'test_email' => 'Сообщение будет отправлено на адрес указаный в профиле пользователя.', 'pushover_description' => 'Pushover - это сервис, который позволяет легко
'test_sms' => 'SMS будет отправлено на номер телефона указаный в профиле пользователя.', получать уведомления в режиме реального
'test_pushover' => 'Pushover уведомление будет отправленно на устройство указанное в профиле пользователя.', времени. Больше информации на <a
'test_telegram' => 'Уведомление Telegram будет отправлено на идентификатор чата, указанный в профиле пользователя.', href="https://pushover.net/" target="_blank">их веб-сайте</a>.',
'send' => 'Отправить', 'pushover_clone_app' => 'Нажмите здесь чтобы создать ваш Pushover app',
'test_subject' => 'Проверка', 'pushover_api_token' => 'Pushover App API Token',
'test_message' => 'Тестовое сообщение', 'pushover_api_token_description' => 'Прежде чем вы сможете начать
'email_sent' => 'Email отправлен', пользоваться Pushover, вам необходимо
'email_error' => 'Ошибка отправки email', зарегистрировать <a href="%1$s" target="_blank"
'sms_sent' => 'SMS отправлено', rel="noopener">"App"</a> на их веб-сайте и ввести "App
'sms_error' => 'При отправке SMS произошла ошибка: %s', API Token" сюда.',
'sms_error_nomobile' => 'Не удалось отправить тестовое SMS: действительный номер телефона не найден в вашем профиле.', 'telegram_status' => 'Разрешить отправку уведомлений в Telegram',
'pushover_sent' => 'Pushover уведомление отправлено', 'telegram_description' => '<a href="https://telegram.org/" target="_blank">Telegram</a> удобный мессенджер
'pushover_error' => 'Произошла ошибка во время отправки Pushover уведомления: %s', для получения уведомлений в реальном
'pushover_error_noapp' => 'Не удалось отправить тестовое уведомление: Pushover "App API token" не найден в основных настройках.', времени. Посетите <a
'pushover_error_nokey' => 'Не удалось отправить тестовое уведомление: Pushover ключ не найден в вашем профиле.', href="http://docs.phpservermonitor.org/" target="_blank">раздел документации</a>
'telegram_sent' => 'Уведомление в Telegram отправлено', для получения доп. информации и инструкций по
'telegram_error' => 'Произошла ошибка при отправке уведомления в Telegram: %s', установке.',
'telegram_error_notoken' => 'Не удалось отправить тестовое уведомление: Telegram API token не найден в основных настройках.', 'telegram_api_token' => 'Telegram API Token',
'telegram_error_noid' => 'Не удалось отправить тестовое уведомление: идентификатор чата не найден в вашем профиле.', 'telegram_api_token_description' => 'Прежде чем вы сможете начать
'log_retention_period' => 'Период хранения логов', пользоваться Telegram, вам необходимо
'log_retention_period_description' => 'Количество дней хранения логов уведомлений и архива аптайма серверов. Введите 0 для выключения очистки логов.', получить API Token. Посетите <a
'log_retention_days' => 'дней', href="http://docs.phpservermonitor.org/" target="_blank">раздел
), документации</a> для получения помощи.',
// for newlines in the email messages use <br> 'alert_type' => 'Тип уведомлений',
'notifications' => array( 'alert_type_description' => '<b>Изменение статуса:</b> Вы получите
'off_sms' => 'Сервер \'%LABEL%\' сейчас НЕДОСТУПЕН: IP=%IP%, Порт=%PORT%. Ошибка=%ERROR%', уведомление об изменение статуса. Для
'off_email_subject' => 'ВАЖНО: сервер \'%LABEL%\' сейчас НЕДОСТУПЕН', онлайн -> оффлайн или офлайн -> онлайн.<br><br
'off_email_body' => "Невозможно подключиться к следующему серверу:<br><br>Сервер: %LABEL%<br>IP: %IP%<br>Порт: %PORT%<br>Ошибка: %ERROR%<br>Дата: %DATE%", /><b>Оффлайн:</b> Вы получите уведомление
'off_pushover_title' => 'Cервер \'%LABEL%\' сейчас НЕДОСТУПЕН', только когда сервер перейдет в статус
'off_pushover_message' => "Невозможно подключиться к следующему серверу:<br><br>Сервер: %LABEL%<br>IP: %IP%<br>Порт: %PORT%<br>Ошибка: %ERROR%<br>Дата: %DATE%", оффлайн. Например, задание Cron выставлено на
'off_telegram_message' => "Невозможно подключиться к следующему серверу:<br><br>Сервер: %LABEL%<br>IP: %IP%<br>Порт: %PORT%<br>Ошибка: %ERROR%<br>Дата: %DATE%", каждые 15 минут. Сервер перейдет в статус
'on_sms' => 'Сервер \'%LABEL%\' снова ДОСТУПЕН: IP=%IP%, Порт=%PORT%. Был недоступен: %LAST_OFFLINE_DURATION%', оффлайн в 1:00 и не измениться до 6:00. Вы
'on_email_subject' => 'ВАЖНО: Сервер \'%LABEL%\' сейчас ДОСТУПЕН', получите 1 уведомление только в
'on_email_body' => "Сервер '%LABEL%' снова доступен.<br>Был недоступен: %LAST_OFFLINE_DURATION%<br><br>Сервер: %LABEL%<br>IP: %IP%<br>Порт: %PORT%<br>Дата: %DATE%", 1:00<br><br><b>Всегда:</b> Вы будете получать
'on_pushover_title' => 'Сервер \'%LABEL%\' сейчас ДОСТУПЕН', уведомление при каждом запуске скрипта
'on_pushover_message' => 'Сервер \'%LABEL%\' снова доступен.<br>Был недоступен: %LAST_OFFLINE_DURATION%<br><br>Сервер: %LABEL%<br>IP: %IP%<br>Порт: %PORT%<br>Дата: %DATE%', проверки, как только сервер перейдет в
'on_telegram_message' => 'Сервер \'%LABEL%\' снова доступен.<br>Был недоступен: %LAST_OFFLINE_DURATION%<br><br>Сервер: %LABEL%<br>IP: %IP%<br>Порт: %PORT%<br>Дата: %DATE%', статус оффлайн, даже если сервер находится в
), этом статусе несколько часов.',
'login' => array( 'alert_type_status' => 'Изменение статуса',
'welcome_usermenu' => 'Здравствуйте, %user_name%', 'alert_type_offline' => 'Оффлайн',
'title_sign_in' => 'Пожалуйста, авторизуйтесь', 'alert_type_always' => 'Всегда',
'title_forgot' => 'Забыли пароль?', 'alert_proxy' => 'Даже если включено, прокси никогда не
'title_reset' => 'Сбросить пароль', используется для сервисов',
'submit' => 'Подтвердить', 'alert_proxy_url' => 'Формат: адрес:порт',
'remember_me' => 'Запомнить меня', 'log_status' => 'Лог статусов',
'login' => 'Войти', 'log_status_description' => 'Если лог статусов включен, монитор будет
'logout' => 'Выйти', логировать все события выбранные в типе
'username' => 'Логин', уведомлений.',
'password' => 'Пароль', 'log_email' => 'Логировать уведомления отправленые по E-mail',
'password_repeat' => 'Повторить пароль', 'log_sms' => 'Логировать уведомления отправленые по SMS',
'password_forgot' => 'Забыли пароль?', 'log_pushover' => 'Логировать Pushover уведомления',
'password_reset' => 'Сбросить пароль', 'log_telegram' => 'Логировать Telegram уведомления',
'password_reset_email_subject' => 'Сброс пароля для PHP Server Monitor', 'updated' => 'Настройки успешно сохранены.',
'password_reset_email_body' => 'Пожалуйста, используйте следующую ссылку для сброса пароля. Ссылка действительна 1 час.<br><br>%link%', 'tab_email' => 'Email',
'error_user_incorrect' => 'Пользователь с указаными данными не найден.', 'tab_sms' => 'SMS',
'error_login_incorrect' => 'Информация указана неверно.', 'tab_pushover' => 'Pushover',
'error_login_passwords_nomatch' => 'Пароль указан неверно.', 'tab_telegram' => 'Telegram',
'error_reset_invalid_link' => 'Ссылка для сброса пароля недействительна.', 'settings_email' => 'Настройка E-mail',
'success_password_forgot' => 'Вам был отправлен email, с инструкциями по сбросу пароля.', 'settings_sms' => 'Настройка SMS',
'success_password_reset' => 'Ваш пароль был сброшен. Пожалуйста авторизуйтесь.', 'settings_pushover' => 'Настройка Pushover',
), 'settings_telegram' => 'Настройка Telegram',
'error' => array( 'settings_notification' => 'Настройка уведомлений',
'401_unauthorized' => 'Доступ закрыт', 'settings_log' => 'Настройка логирования',
'401_unauthorized_description' => 'У вас нет прав доступа к этой странице.', 'settings_proxy' => 'Настройка прокси',
), 'auto_refresh' => 'Авто-обновление',
'auto_refresh_description' => 'Авто-обновление страницы статуса
серверов.<br><span class="small">Время в секундах.
Если указано 0, то страница не будет
обновляться.</span>',
'seconds' => 'секунд',
'test' => 'Проверка',
'test_email' => 'Сообщение будет отправлено на адрес указаный в
профиле пользователя.',
'test_sms' => 'SMS будет отправлено на номер телефона указаный в
профиле пользователя.',
'test_pushover' => 'Pushover уведомление будет отправленно на
устройство указанное в профиле пользователя.',
'test_telegram' => 'Уведомление Telegram будет отправлено на
идентификатор чата, указанный в профиле
пользователя.',
'send' => 'Отправить',
'test_subject' => 'Проверка',
'test_message' => 'Тестовое сообщение',
'email_sent' => 'Email отправлен',
'email_error' => 'Ошибка отправки email',
'sms_sent' => 'SMS отправлено',
'sms_error' => 'При отправке SMS произошла ошибка: %s',
'sms_error_nomobile' => 'Не удалось отправить тестовое SMS:
действительный номер телефона не найден в
вашем профиле.',
'pushover_sent' => 'Pushover уведомление отправлено',
'pushover_error' => 'Произошла ошибка во время отправки Pushover
уведомления: %s',
'pushover_error_noapp' => 'Не удалось отправить тестовое уведомление:
Pushover "App API token" не найден в основных
настройках.',
'pushover_error_nokey' => 'Не удалось отправить тестовое уведомление:
Pushover ключ не найден в вашем профиле.',
'telegram_sent' => 'Уведомление в Telegram отправлено',
'telegram_error' => 'Произошла ошибка при отправке уведомления в
Telegram: %s',
'telegram_error_notoken' => 'Не удалось отправить тестовое уведомление:
Telegram API token не найден в основных настройках.',
'telegram_error_noid' => 'Не удалось отправить тестовое уведомление:
идентификатор чата не найден в вашем профиле.',
'log_retention_period' => 'Период хранения логов',
'log_retention_period_description' => 'Количество дней хранения логов
уведомлений и архива аптайма серверов.
Введите 0 для выключения очистки логов.',
'log_retention_days' => 'дней',
),
'notifications' => array(
'off_sms' => 'Сервер \'%LABEL%\' сейчас НЕДОСТУПЕН: IP=%IP%, Порт=%PORT%.
Ошибка=%ERROR%',
'off_email_subject' => 'ВАЖНО: сервер \'%LABEL%\' сейчас НЕДОСТУПЕН',
'off_email_body' => 'Невозможно подключиться к следующему
серверу:<br><br>Сервер: %LABEL%<br>IP: %IP%<br>Порт:
%PORT%<br>Ошибка: %ERROR%<br>Дата: %DATE%',
'off_pushover_title' => 'Cервер \'%LABEL%\' сейчас НЕДОСТУПЕН',
'off_pushover_message' => 'Невозможно подключиться к следующему
серверу:<br><br>Сервер: %LABEL%<br>IP: %IP%<br>Порт:
%PORT%<br>Ошибка: %ERROR%<br>Дата: %DATE%',
'off_telegram_message' => 'Невозможно подключиться к следующему
серверу:<br><br>Сервер: %LABEL%<br>IP: %IP%<br>Порт:
%PORT%<br>Ошибка: %ERROR%<br>Дата: %DATE%',
'on_sms' => 'Сервер \'%LABEL%\' снова ДОСТУПЕН: IP=%IP%, Порт=%PORT%. Был
недоступен: %LAST_OFFLINE_DURATION%',
'on_email_subject' => 'ВАЖНО: Сервер \'%LABEL%\' сейчас ДОСТУПЕН',
'on_email_body' => 'Сервер \'%LABEL%\' снова доступен.<br>Был недоступен:
%LAST_OFFLINE_DURATION%<br><br>Сервер: %LABEL%<br>IP: %IP%<br>Порт:
%PORT%<br>Дата: %DATE%',
'on_pushover_title' => 'Сервер \'%LABEL%\' сейчас ДОСТУПЕН',
'on_pushover_message' => 'Сервер \'%LABEL%\' снова доступен.<br>Был
недоступен: %LAST_OFFLINE_DURATION%<br><br>Сервер: %LABEL%<br>IP:
%IP%<br>Порт: %PORT%<br>Дата: %DATE%',
'on_telegram_message' => 'Сервер \'%LABEL%\' снова доступен.<br>Был
недоступен: %LAST_OFFLINE_DURATION%<br><br>Сервер: %LABEL%<br>IP:
%IP%<br>Порт: %PORT%<br>Дата: %DATE%',
),
'login' => array(
'welcome_usermenu' => 'Здравствуйте, %user_name%',
'title_sign_in' => 'Пожалуйста, авторизуйтесь',
'title_forgot' => 'Забыли пароль?',
'title_reset' => 'Сбросить пароль',
'submit' => 'Подтвердить',
'remember_me' => 'Запомнить меня',
'login' => 'Войти',
'logout' => 'Выйти',
'username' => 'Логин',
'password' => 'Пароль',
'password_repeat' => 'Повторить пароль',
'password_forgot' => 'Забыли пароль?',
'password_reset' => 'Сбросить пароль',
'password_reset_email_subject' => 'Сброс пароля для PHP Server Monitor',
'password_reset_email_body' => 'Пожалуйста, используйте следующую ссылку
для сброса пароля. Ссылка действительна 1
час.<br><br>%link%',
'error_user_incorrect' => 'Пользователь с указаными данными не найден.',
'error_login_incorrect' => 'Информация указана неверно.',
'error_login_passwords_nomatch' => 'Пароль указан неверно.',
'error_reset_invalid_link' => 'Ссылка для сброса пароля недействительна.',
'success_password_forgot' => 'Вам был отправлен email, с инструкциями по
сбросу пароля.',
'success_password_reset' => 'Ваш пароль был сброшен. Пожалуйста
авторизуйтесь.',
),
'error' => array(
'401_unauthorized' => 'Доступ закрыт',
'401_unauthorized_description' => 'У вас нет прав доступа к этой странице.',
),
); );

View File

@ -1,4 +1,5 @@
<?php <?php
/** /**
* PHP Server Monitor * PHP Server Monitor
* Monitor your servers and websites. * Monitor your servers and websites.
@ -26,284 +27,308 @@
**/ **/
$sm_lang = array( $sm_lang = array(
'name' => 'Slovensky - Slovak', 'name' => 'Slovensky - Slovak',
'locale' => array('sk_SK.UTF-8', 'sk_SK', 'slovak', 'slovak'), 'locale' => array(
'locale_tag' => 'sk', '0' => 'sk_SK.UTF-8',
'locale_dir' => 'ltr', '1' => 'sk_SK',
'system' => array( '2' => 'slovak',
'title' => 'Server Monitor', '3' => 'slovak',
'install' => 'Inštalácia', ),
'action' => 'Akcia', 'locale_tag' => 'sk',
'save' => 'Uložiť', 'locale_dir' => 'ltr',
'edit' => 'Upraviť', 'system' => array(
'delete' => 'Zmazať', 'title' => 'Server Monitor',
'date' => 'Dátum', 'install' => 'Inštalácia',
'message' => 'Správa', 'action' => 'Akcia',
'yes' => 'Áno', 'save' => 'Uložiť',
'no' => 'Nie', 'edit' => 'Upraviť',
'insert' => 'Vložiť', 'delete' => 'Zmazať',
'add_new' => 'Pridať', 'date' => 'Dátum',
'update_available' => 'Nová verzia - ({version}) je dostupná na <a href="https://github.com/phpservermon/phpservermon/releases/latest" target="_blank" rel="noopener">http://www.phpservermonitor.org</a>.', 'message' => 'Správa',
'back_to_top' => 'Späť na začiatok', 'yes' => 'Áno',
'go_back' => 'Späť', 'no' => 'Nie',
'ok' => 'OK', 'insert' => 'Vložiť',
'cancel' => 'Zrušiť', 'add_new' => 'Pridať',
// date/time format according the strftime php function format parameter http://php.net/manual/function.strftime.php 'update_available' => 'Nová verzia - ({version}) je dostupná na <a
'short_day_format' => '%B %e', href="https://github.com/phpservermon/phpservermon/releases/latest" target="_blank"
'long_day_format' => '%B %e, %Y', rel="noopener">http://www.phpservermonitor.org</a>.',
'yesterday_format' => 'Včera v %k:%M', 'back_to_top' => 'Späť na začiatok',
'other_day_format' => '%A v %k:%M', 'go_back' => 'Späť',
'never' => 'Nikdy', 'ok' => 'OK',
'hours_ago' => 'pred %d hodinami', 'cancel' => 'Zrušiť',
'an_hour_ago' => 'cca pred hodinou', 'short_day_format' => '%B %e',
'minutes_ago' => 'pred %d minútami', 'long_day_format' => '%B %e, %Y',
'a_minute_ago' => 'cca pred minútou', 'yesterday_format' => 'Včera v %k:%M',
'seconds_ago' => 'pred %d sekundami', 'other_day_format' => '%A v %k:%M',
'a_second_ago' => 'pred chvíľou', 'never' => 'Nikdy',
), 'hours_ago' => 'pred %d hodinami',
'menu' => array( 'an_hour_ago' => 'cca pred hodinou',
'config' => 'Konfigurácia', 'minutes_ago' => 'pred %d minútami',
'server' => 'Servery', 'a_minute_ago' => 'cca pred minútou',
'server_log' => 'Log', 'seconds_ago' => 'pred %d sekundami',
'server_status' => 'Stav', 'a_second_ago' => 'pred chvíľou',
'server_update' => 'Aktualizácia', ),
'user' => 'Užívateľ', 'menu' => array(
'help' => 'Nápoveda', 'config' => 'Konfigurácia',
), 'server' => 'Servery',
'users' => array( 'server_log' => 'Log',
'user' => 'Užívateľ', 'server_status' => 'Stav',
'name' => 'Meno', 'server_update' => 'Aktualizácia',
'user_name' => 'Užívateľské meno', 'user' => 'Užívateľ',
'password' => 'Heslo', 'help' => 'Nápoveda',
'password_repeat' => 'Rovnaké heslo (pre kontrolu)', ),
'password_leave_blank' => 'Nevyplňujte ak nechcete zmeniť.', 'users' => array(
'level' => 'Oprávnenie', 'user' => 'Užívateľ',
'level_10' => 'Administrátor', 'name' => 'Meno',
'level_20' => 'Užívateľ', 'user_name' => 'Užívateľské meno',
'level_description' => '<b>Administrátor</b> má plný prístup: môže spravovať servery, užívateľov a upraviť globálnu konfiguráciu.<br><b>Uživatel</b> má práva len na čítanie a spustiť aktualizáciu serverov, ktoré má priradené.', 'password' => 'Heslo',
'mobile' => 'Mobil', 'password_repeat' => 'Rovnaké heslo (pre kontrolu)',
'email' => 'E-mail', 'password_leave_blank' => 'Nevyplňujte ak nechcete zmeniť.',
'pushover' => 'Pushover', 'level' => 'Oprávnenie',
'pushover_description' => 'Pushover je služba umožňujúca jednoducho zasielať real-time upozornenia. Viac na <a href="https://pushover.net/">webe Pushover</a>', 'level_10' => 'Administrátor',
'pushover_key' => 'Pushover Token', 'level_20' => 'Užívateľ',
'pushover_device' => 'Pushover Zariadenie', 'level_description' => '<b>Administrátor</b> plný prístup: môže spravovať servery, užívateľov a
'pushover_device_description' => 'Název zariadenia, na ktoré má byť správa odoslaná. Ponechajte prázdne pre odoslanie na všetky zariadenia.', upraviť globálnu konfiguráciu.<br><b>Uživatel</b> práva len na čítanie a
'delete_title' => 'Zmazať užívateľa', spustiť aktualizáciu serverov, ktoré priradené.',
'delete_message' => 'Naozaj zmazať užívateľa \'%1\'?', 'mobile' => 'Mobil',
'deleted' => 'Užívateľ zmazaný.', 'email' => 'E-mail',
'updated' => 'Užívateľ aktualizovaný.', 'pushover' => 'Pushover',
'inserted' => 'Užívateľ pridaný.', 'pushover_description' => 'Pushover je služba umožňujúca jednoducho zasielať real-time upozornenia. Viac
'profile' => 'Profil', na <a href="https://pushover.net/">webe Pushover</a>',
'profile_updated' => 'Váš užívateľský profil bol upravený.', 'pushover_key' => 'Pushover Token',
'error_user_name_bad_length' => 'Užívateľské meno musí obsahovať 2 až 64 znakov.', 'pushover_device' => 'Pushover Zariadenie',
'error_user_name_invalid' => 'Užívateľské meno môže obsahovať iba písmena (a-z, A-Z), čísla (0-9), bodky (.) a podtržítka (_).', 'pushover_device_description' => 'Název zariadenia, na ktoré byť správa odoslaná. Ponechajte prázdne
'error_user_name_exists' => 'Zadané uživatelské jméno již existuje v databázi.', pre odoslanie na všetky zariadenia.',
'error_user_email_bad_length' => 'E-mailová adresa musí obsahovat 5 až 255 znaků .', 'delete_title' => 'Zmazať užívateľa',
'error_user_email_invalid' => 'E-mailová adresa je neplatná', 'delete_message' => 'Naozaj zmazať užívateľa \'%1\'?',
'error_user_level_invalid' => 'Zadané oprávnenie je neplatné.', 'deleted' => 'Užívateľ zmazaný.',
'error_user_no_match' => 'Užívateľ nebol najdený.', 'updated' => 'Užívateľ aktualizovaný.',
'error_user_password_invalid' => 'Zadané heslo je neplatné.', 'inserted' => 'Užívateľ pridaný.',
'error_user_password_no_match' => 'Zadaná heslá sa nezhodujú.', 'profile' => 'Profil',
), 'profile_updated' => 'Váš užívateľský profil bol upravený.',
'log' => array( 'error_user_name_bad_length' => 'Užívateľské meno musí obsahovať 2 až 64 znakov.',
'title' => 'Záznamy logu', 'error_user_name_invalid' => 'Užívateľské meno môže obsahovať iba písmena (a-z, A-Z), čísla (0-9),
'type' => 'Typ', bodky (.) a podtržítka (_).',
'status' => 'Stav', 'error_user_name_exists' => 'Zadané uživatelské jméno již existuje v databázi.',
'email' => 'E-mail', 'error_user_email_bad_length' => 'E-mailová adresa musí obsahovat 5 až 255 znaků .',
'sms' => 'SMS', 'error_user_email_invalid' => 'E-mailová adresa je neplatná',
'pushover' => 'Pushover', 'error_user_level_invalid' => 'Zadané oprávnenie je neplatné.',
'no_logs' => 'Žiadne záznamy', 'error_user_no_match' => 'Užívateľ nebol najdený.',
'clear' => 'Jasný protokol', 'error_user_password_invalid' => 'Zadané heslo je neplatné.',
'delete_title' => 'Jasný protokol', 'error_user_password_no_match' => 'Zadaná heslá sa nezhodujú.',
'delete_message' => 'Naozaj chcete odstrániť <b>všetky</b> záznamy?', ),
), 'log' => array(
'servers' => array( 'title' => 'Záznamy logu',
'server' => 'Server', 'type' => 'Typ',
'status' => 'Stav', 'status' => 'Stav',
'label' => 'Popis', 'email' => 'E-mail',
'domain' => 'Doména/IP', 'sms' => 'SMS',
'timeout' => 'Časový limit', 'pushover' => 'Pushover',
'timeout_description' => 'Počet sekúnd čakania na odpoveď serveru.', 'no_logs' => 'Žiadne záznamy',
'authentication_settings' => 'Nastavenie autentizacie', 'clear' => 'Jasný protokol',
'optional' => 'voliteľný', 'delete_title' => 'Jasný protokol',
'website_username' => 'Užívateľské meno', 'delete_message' => 'Naozaj chcete odstrániť <b>všetky</b> záznamy?',
'website_username_description' => 'Užívateľské meno pre prístup na stránku. (Len Apache autorizácia je podporovaná.)', ),
'website_password' => 'Heslo', 'servers' => array(
'website_password_description' => 'Heslo pre prístup na stránku. Heslo je v databázi šifrované.', 'server' => 'Server',
'fieldset_monitoring' => 'Monitoring', 'status' => 'Stav',
'fieldset_permissions' => 'Oprávnenie', 'label' => 'Popis',
'port' => 'Port', 'domain' => 'Doména/IP',
'custom_port' => 'Užívateľský Port', 'timeout' => 'Časový limit',
'popular_ports' => 'Populárne Porty', 'timeout_description' => 'Počet sekúnd čakania na odpoveď serveru.',
'please_select' => 'Prosím vyberte', 'authentication_settings' => 'Nastavenie autentizacie',
'type' => 'Typ', 'optional' => 'voliteľný',
'type_website' => 'Web', 'website_username' => 'Užívateľské meno',
'type_service' => 'Služba', 'website_username_description' => 'Užívateľské meno pre prístup na stránku. (Len Apache autorizácia je
'pattern' => 'Vyhledat reťazec/vzor', podporovaná.)',
'pattern_description' => 'Pokiaľ reťazec nebude na webe nájdený, bude server označený ako offline. Regulárne výrazy sú povolené.', 'website_password' => 'Heslo',
'last_check' => 'Posledná kontrola', 'website_password_description' => 'Heslo pre prístup na stránku. Heslo je v databázi šifrované.',
'last_online' => 'Naposledy online', 'fieldset_monitoring' => 'Monitoring',
'monitoring' => 'Monitoring', 'fieldset_permissions' => 'Oprávnenie',
'no_monitoring' => 'Žiadne monitorované služby', 'port' => 'Port',
'email' => 'E-mail', 'custom_port' => 'Užívateľský Port',
'send_email' => 'Odoslať e-mail', 'popular_ports' => 'Populárne Porty',
'sms' => 'SMS', 'please_select' => 'Prosím vyberte',
'send_sms' => 'Odoslať SMS', 'type' => 'Typ',
'pushover' => 'Pushover', 'type_website' => 'Web',
'users' => 'Užívatelia', 'type_service' => 'Služba',
'delete_title' => 'Zmazať server', 'pattern' => 'Vyhledat reťazec/vzor',
'delete_message' => 'Naozaj si prajete zmazať \'%1\'?', 'pattern_description' => 'Pokiaľ reťazec nebude na webe nájdený, bude server označený ako offline.
'deleted' => 'Server zmazaný.', Regulárne výrazy povolené.',
'updated' => 'Server aktualizovaný.', 'last_check' => 'Posledná kontrola',
'inserted' => 'Server pridaný.', 'last_online' => 'Naposledy online',
'latency' => 'Latencia', 'monitoring' => 'Monitoring',
'latency_max' => 'Latencia (maximum)', 'no_monitoring' => 'Žiadne monitorované služby',
'latency_min' => 'Latencia (minimum)', 'email' => 'E-mail',
'latency_avg' => 'Latencia (priemer)', 'send_email' => 'Odoslať e-mail',
'uptime' => 'Uptime', 'sms' => 'SMS',
'year' => 'Rok', 'send_sms' => 'Odoslať SMS',
'month' => 'Mesiac', 'pushover' => 'Pushover',
'week' => 'Týždeň', 'users' => 'Užívatelia',
'day' => 'Deň', 'delete_title' => 'Zmazať server',
'hour' => 'Hodina', 'delete_message' => 'Naozaj si prajete zmazať \'%1\'?',
'warning_threshold' => 'Stropná hranica varovania', 'deleted' => 'Server zmazaný.',
'warning_threshold_description' => 'Počet neúspešných pokusov pred označením serveru ako offline.', 'updated' => 'Server aktualizovaný.',
'chart_last_week' => 'Minulý týždeň', 'inserted' => 'Server pridaný.',
'chart_history' => 'História', 'latency' => 'Latencia',
// Charts date format according jqPlot date format http://www.jqplot.com/docs/files/plugins/jqplot-dateAxisRenderer-js.html 'latency_max' => 'Latencia (maximum)',
'chart_day_format' => '%Y-%m-%d', 'latency_min' => 'Latencia (minimum)',
'chart_long_date_format' => '%Y-%m-%d %H:%M:%S', 'latency_avg' => 'Latencia (priemer)',
'chart_short_date_format' => '%m/%d %H:%M', 'uptime' => 'Uptime',
'chart_short_time_format' => '%H:%M', 'year' => 'Rok',
'warning_notifications_disabled_sms' => 'SMS upozornenia sú vypnuté.', 'month' => 'Mesiac',
'warning_notifications_disabled_email' => 'E-mailové upozornenia sú vypnuté.', 'week' => 'Týždeň',
'warning_notifications_disabled_pushover' => 'Pushover upozornenia sú vypnuté.', 'day' => 'Deň',
'error_server_no_match' => 'Server nenájdený.', 'hour' => 'Hodina',
'error_server_label_bad_length' => 'Popisok musí obsahovať 1 až 255 znakov.', 'warning_threshold' => 'Stropná hranica varovania',
'error_server_ip_bad_length' => 'Doména/IP adresa musí obsahovať 1 až 255 znakov.', 'warning_threshold_description' => 'Počet neúspešných pokusov pred označením serveru ako offline.',
'error_server_ip_bad_service' => 'IP adresa nie je platná.', 'chart_last_week' => 'Minulý týždeň',
'error_server_ip_bad_website' => 'URL webu nie je platná.', 'chart_history' => 'História',
'error_server_type_invalid' => 'Zvolený typ serveru nie je platný', 'chart_day_format' => '%Y-%m-%d',
'error_server_warning_threshold_invalid' => 'Hranica varovania musí byť číslo väčšie ako 0.', 'chart_long_date_format' => '%Y-%m-%d %H:%M:%S',
), 'chart_short_date_format' => '%m/%d %H:%M',
'config' => array( 'chart_short_time_format' => '%H:%M',
'general' => 'Všeobecné', 'warning_notifications_disabled_sms' => 'SMS upozornenia sú vypnuté.',
'language' => 'Jazyk', 'warning_notifications_disabled_email' => 'E-mailové upozornenia sú vypnuté.',
'show_update' => 'Kontrolovať aktualizácie?', 'warning_notifications_disabled_pushover' => 'Pushover upozornenia sú vypnuté.',
'password_encrypt_key' => 'Šifrovací kľúč pre heslá', 'error_server_no_match' => 'Server nenájdený.',
'password_encrypt_key_note' => 'Týmto klúčom sa šifrujú heslá, ktoré sa ukladajú na serveroch pre prístup na webové stránky. Ak kľúč zmeníte, budú uložené heslá neplatné!', 'error_server_label_bad_length' => 'Popisok musí obsahovať 1 až 255 znakov.',
'email_status' => 'Povoliť odosielanie e-mailu', 'error_server_ip_bad_length' => 'Doména/IP adresa musí obsahovať 1 až 255 znakov.',
'email_from_email' => 'E-mailová adresa odosielateľa', 'error_server_ip_bad_service' => 'IP adresa nie je platná.',
'email_from_name' => 'Jméno odosielateľa', 'error_server_ip_bad_website' => 'URL webu nie je platná.',
'email_smtp' => 'Zapnúť SMTP', 'error_server_type_invalid' => 'Zvolený typ serveru nie je platný',
'email_smtp_host' => 'SMTP adresa', 'error_server_warning_threshold_invalid' => 'Hranica varovania musí byť číslo väčšie ako 0.',
'email_smtp_port' => 'SMTP port', ),
'email_smtp_security' => 'SMTP zabezpečenie', 'config' => array(
'email_smtp_security_none' => 'žiadne', 'general' => 'Všeobecné',
'email_smtp_username' => 'SMTP užívateľské meno', 'language' => 'Jazyk',
'email_smtp_password' => 'SMTP heslo', 'show_update' => 'Kontrolovať aktualizácie?',
'email_smtp_noauth' => 'Nechajte prázdne pre použitie SMTP bez hesla', 'password_encrypt_key' => 'Šifrovací kľúč pre heslá',
'sms_status' => 'Povoliť odosielanie textových správ', 'password_encrypt_key_note' => 'Týmto klúčom sa šifrujú heslá, ktoré sa ukladajú na serveroch pre
'sms_gateway' => 'Brána použitá pro odosielanie správ', prístup na webové stránky. Ak kľúč zmeníte, budú uložené heslá
'sms_gateway_username' => 'Užívateľské meno brány', neplatné!',
'sms_gateway_password' => 'Heslo brány', 'email_status' => 'Povoliť odosielanie e-mailu',
'sms_from' => 'Telefónne číslo odosielateľa', 'email_from_email' => 'E-mailová adresa odosielateľa',
'pushover_status' => 'Povoliť zasielanie Pushover správ', 'email_from_name' => 'Jméno odosielateľa',
'pushover_description' => 'Pushover je služba umožňujúca jednoducho zasielať real-time upozornenia. Viac na <a href="https://pushover.net/">webe Pushover</a>', 'email_smtp' => 'Zapnúť SMTP',
'pushover_clone_app' => 'Kliknite pre vytvorenie Pushover aplikácie', 'email_smtp_host' => 'SMTP adresa',
'pushover_api_token' => 'Pushover App API Token', 'email_smtp_port' => 'SMTP port',
'pushover_api_token_description' => 'Pred použitím Pushoveru sa musíte <a href="%1$s" target="_blank" rel="noopener">registrovať</a> a získať API Token.', 'email_smtp_security' => 'SMTP zabezpečenie',
'alert_type' => 'Zvoľte kedy si prajete byť upozornení.', 'email_smtp_security_none' => 'žiadne',
'alert_type_description' => '<b>Zmena stavu:</b> '. 'email_smtp_username' => 'SMTP užívateľské meno',
'Obdržíte upozornenie pri zmene stavu, teda: online -> offline alebo offline -> online.<br>'. 'email_smtp_password' => 'SMTP heslo',
'<br /><b>Offline:</b> '. 'email_smtp_noauth' => 'Nechajte prázdne pre použitie SMTP bez hesla',
'Obdržíte upozornenie, keď server prejde *PO PRVÝ KRÁT* do offline stavu. Napríklad, '. 'sms_status' => 'Povoliť odosielanie textových správ',
'pokiaľ je cron nastavený na 15 minút a sledovaný server bude offline mezi 01:00 a 06:00, '. 'sms_gateway' => 'Brána použitá pro odosielanie správ',
'tak obdržíte upozornenie iba o 01:00.<br>'. 'sms_gateway_username' => 'Užívateľské meno brány',
'<br><b>Vždy:</b> '. 'sms_gateway_password' => 'Heslo brány',
'Obdržíte upozornenie pri každom spustení kontroly, teda aj pokiaľ bude server offline niekoľko hodín.', 'sms_from' => 'Telefónne číslo odosielateľa',
'alert_type_status' => 'Zmena stavu', 'pushover_status' => 'Povoliť zasielanie Pushover správ',
'alert_type_offline' => 'Offline', 'pushover_description' => 'Pushover je služba umožňujúca jednoducho zasielať real-time upozornenia. Viac
'alert_type_always' => 'Vždy', na <a href="https://pushover.net/">webe Pushover</a>',
'log_status' => 'Log', 'pushover_clone_app' => 'Kliknite pre vytvorenie Pushover aplikácie',
'log_status_description' => 'Pokiaľ je Log nastavený na hodnotu TRUE, systém do neho zapíše všetky upozornenia.', 'pushover_api_token' => 'Pushover App API Token',
'log_email' => 'Logovať odoslané e-maily', 'pushover_api_token_description' => 'Pred použitím Pushoveru sa musíte <a href="%1$s" target="_blank"
'log_sms' => 'Logovať odoslané textové správy', rel="noopener">registrovať</a> a získať API Token.',
'log_pushover' => 'Logovať odoslané Pushover správy', 'alert_type' => 'Zvoľte kedy si prajete byť upozornení.',
'updated' => 'Nastavenie bolo aktualizované.', 'alert_type_description' => '<b>Zmena stavu:</b> Obdržíte upozornenie pri zmene stavu, teda: online ->
'tab_email' => 'E-mail', offline alebo offline -> online.<br><br /><b>Offline:</b> Obdržíte upozornenie,
'tab_sms' => 'SMS', keď server prejde *PO PRVÝ KRÁT* do offline stavu. Napríklad, pokiaľ je cron
'tab_pushover' => 'Pushover', nastavený na 15 minút a sledovaný server bude offline mezi 01:00 a 06:00, tak
'settings_email' => 'Nastavenie e-mailov', obdržíte upozornenie iba o 01:00.<br><br><b>Vždy:</b> Obdržíte upozornenie
'settings_sms' => 'Nastavenie textových správ', pri každom spustení kontroly, teda aj pokiaľ bude server offline niekoľko
'settings_pushover' => 'Nastavenie Pushover', hodín.',
'settings_notification' => 'Nastavenie upozornení', 'alert_type_status' => 'Zmena stavu',
'settings_log' => 'Nastavenie logu', 'alert_type_offline' => 'Offline',
'auto_refresh' => 'Automaticky obnoviť', 'alert_type_always' => 'Vždy',
'auto_refresh_description' => 'log_status' => 'Log',
'Automaticky obnoviť stránku Servery.<br>'. 'log_status_description' => 'Pokiaľ je Log nastavený na hodnotu TRUE, systém do neho zapíše všetky
'<span class="small">'. upozornenia.',
'Čas v sekundách, 0 pre vypnutie automatického obnovenia.'. 'log_email' => 'Logovať odoslané e-maily',
'</span>', 'log_sms' => 'Logovať odoslané textové správy',
'seconds' => 'sekúnd', 'log_pushover' => 'Logovať odoslané Pushover správy',
'test' => 'Test', 'updated' => 'Nastavenie bolo aktualizované.',
'test_email' => 'E-mail bude odoslaný na adresu uvedenú v užívateľskom profile.', 'tab_email' => 'E-mail',
'test_sms' => 'SMS bude odoslaná na telefónne číslo uvedené v užívateľskom profile.', 'tab_sms' => 'SMS',
'test_pushover' => 'Pushover upozornenie bude odoslané užívateľovi/zariadeniu podľa nastavení v užívateľskom profile.', 'tab_pushover' => 'Pushover',
'send' => 'Odoslať', 'settings_email' => 'Nastavenie e-mailov',
'test_subject' => 'Test', 'settings_sms' => 'Nastavenie textových správ',
'test_message' => 'Testovacia správa', 'settings_pushover' => 'Nastavenie Pushover',
'email_sent' => 'E-mail odoslaný', 'settings_notification' => 'Nastavenie upozornení',
'email_error' => 'Chyba pri odosielaní e-mailu', 'settings_log' => 'Nastavenie logu',
'sms_sent' => 'SMS odoslaná', 'auto_refresh' => 'Automaticky obnoviť',
'sms_error' => 'Chyba pri odosielaní SMS. %s', 'auto_refresh_description' => 'Automaticky obnoviť stránku Servery.<br><span class="small">Čas v
'sms_error_nomobile' => 'Nebolo možné odoslať SMS: v užívateľskom profile nebylo nájdené platné telefónne číslo.', sekundách, 0 pre vypnutie automatického obnovenia.</span>',
'pushover_sent' => 'Pushover upozornenie odoslané.', 'seconds' => 'sekúnd',
'pushover_error' => 'Nastala chyba pri odosielaní Pushover upozornenia: %s', 'test' => 'Test',
'pushover_error_noapp' => 'Nebolo možné odoslať testovacie upozornenie: v globálnom nastavení nebol nájdený žiaden API token.', 'test_email' => 'E-mail bude odoslaný na adresu uvedenú v užívateľskom profile.',
'pushover_error_nokey' => 'Nebylo možné odoslať testovacie upozornenie: ve vašom profile nie je definovaný Pushover key.', 'test_sms' => 'SMS bude odoslaná na telefónne číslo uvedené v užívateľskom profile.',
'log_retention_period' => 'Rotácia logu', 'test_pushover' => 'Pushover upozornenie bude odoslané užívateľovi/zariadeniu podľa nastavení v
'log_retention_period_description' => 'Počet dní po které budú uchované logy upozornení. Vložte 0 pre vypnutie autorotáce.', užívateľskom profile.',
'log_retention_days' => 'dní', 'send' => 'Odoslať',
), 'test_subject' => 'Test',
// for newlines in the email messages use <br> 'test_message' => 'Testovacia správa',
'notifications' => array( 'email_sent' => 'E-mail odoslaný',
'off_sms' => 'Server \'%LABEL%\' je offline: ip=%IP%, port=%PORT%. Chyba=%ERROR%', 'email_error' => 'Chyba pri odosielaní e-mailu',
'off_email_subject' => 'DÔLEŽITÉ: Server \'%LABEL%\' je offline', 'sms_sent' => 'SMS odoslaná',
'off_email_body' => 'Nebolo možné spojiť sa so serverom:<br><br>Server: %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>Chyba: %ERROR%<br>Dátum: %DATE%', 'sms_error' => 'Chyba pri odosielaní SMS. %s',
'off_pushover_title' => 'Server \'%LABEL%\' je offline', 'sms_error_nomobile' => 'Nebolo možné odoslať SMS: v užívateľskom profile nebylo nájdené platné
'off_pushover_message' => 'Nebolo možné spojiť sa so serverom:<br><br>Server: %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>Chyba: %ERROR%<br>Dátum: %DATE%', telefónne číslo.',
'on_sms' => 'Server \'%LABEL%\' je online: ip=%IP%, port=%PORT%, it was down for %LAST_OFFLINE_DURATION%', 'pushover_sent' => 'Pushover upozornenie odoslané.',
'on_email_subject' => 'DÔLEŽITÉ: Server \'%LABEL%\' je online', 'pushover_error' => 'Nastala chyba pri odosielaní Pushover upozornenia: %s',
'on_email_body' => "Server '%LABEL%' je opäť online, it was down for %LAST_OFFLINE_DURATION%:<br><br>Server: %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>Dátum: %DATE%", 'pushover_error_noapp' => 'Nebolo možné odoslať testovacie upozornenie: v globálnom nastavení nebol
'on_pushover_title' => 'Server \'%LABEL%\' je online', nájdený žiaden API token.',
'on_pushover_message' => 'Server \'%LABEL%\' je znovu online, it was down for %LAST_OFFLINE_DURATION%:<br><br>Server: %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>Dátum: %DATE%', 'pushover_error_nokey' => 'Nebylo možné odoslať testovacie upozornenie: ve vašom profile nie je
), definovaný Pushover key.',
'login' => array( 'log_retention_period' => 'Rotácia logu',
'welcome_usermenu' => 'Vitajte, %user_name%', 'log_retention_period_description' => 'Počet dní po které budú uchované logy upozornení. Vložte 0 pre
'title_sign_in' => 'Prosím prihláste sa', vypnutie autorotáce.',
'title_forgot' => 'Zabudnuté heslo?', 'log_retention_days' => 'dní',
'title_reset' => 'Obnova hesla', ),
'submit' => 'Odoslať', 'notifications' => array(
'remember_me' => 'Zapamätať údaje', 'off_sms' => 'Server \'%LABEL%\' je offline: ip=%IP%, port=%PORT%. Chyba=%ERROR%',
'login' => 'Prihlásiť', 'off_email_subject' => 'DÔLEŽITÉ: Server \'%LABEL%\' je offline',
'logout' => 'Odhlásiť', 'off_email_body' => 'Nebolo možné spojiť sa so serverom:<br><br>Server: %LABEL%<br>IP: %IP%<br>Port:
'username' => 'Užívateľské meno', %PORT%<br>Chyba: %ERROR%<br>Dátum: %DATE%',
'password' => 'Heslo', 'off_pushover_title' => 'Server \'%LABEL%\' je offline',
'password_repeat' => 'Opakujte heslo', 'off_pushover_message' => 'Nebolo možné spojiť sa so serverom:<br><br>Server: %LABEL%<br>IP: %IP%<br>Port:
'password_forgot' => 'Zabudnuté heslo?', %PORT%<br>Chyba: %ERROR%<br>Dátum: %DATE%',
'password_reset' => 'Obnoviť heslo', 'on_sms' => 'Server \'%LABEL%\' je online: ip=%IP%, port=%PORT%, it was down for %LAST_OFFLINE_DURATION%',
'password_reset_email_subject' => 'Obnoviť heslo pre PHP Server Monitor', 'on_email_subject' => 'DÔLEŽITÉ: Server \'%LABEL%\' je online',
'password_reset_email_body' => 'Použite následujúci odkaz pre obnovenie hesla. Odkaz je platný jednu hodinu.<br><br>%link%', 'on_email_body' => 'Server \'%LABEL%\' je opäť online, it was down for
'error_user_incorrect' => 'Zadané užívateľské meno nebolo nájdené.', %LAST_OFFLINE_DURATION%:<br><br>Server: %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>Dátum:
'error_login_incorrect' => 'Prihlásenie nebolo úspešné.', %DATE%',
'error_login_passwords_nomatch' => 'Zadané heslá sa nezhodujú.', 'on_pushover_title' => 'Server \'%LABEL%\' je online',
'error_reset_invalid_link' => 'Odkaz je neplatný.', 'on_pushover_message' => 'Server \'%LABEL%\' je znovu online, it was down for
'success_password_forgot' => 'Na vašu e-mailovú adresu bol zaslaný e-mail s informáciami pre obnovu hesla.', %LAST_OFFLINE_DURATION%:<br><br>Server: %LABEL%<br>IP: %IP%<br>Port:
'success_password_reset' => 'Vaše heslo bolo úspešne obnovené. Prosím prihláste sa.', %PORT%<br>Dátum: %DATE%',
), ),
'error' => array( 'login' => array(
'401_unauthorized' => 'Nedostatočné oprávnenia', 'welcome_usermenu' => 'Vitajte, %user_name%',
'401_unauthorized_description' => 'Nemáte oprávnenie zobraziť túto stránku.', 'title_sign_in' => 'Prosím prihláste sa',
), 'title_forgot' => 'Zabudnuté heslo?',
'title_reset' => 'Obnova hesla',
'submit' => 'Odoslať',
'remember_me' => 'Zapamätať údaje',
'login' => 'Prihlásiť',
'logout' => 'Odhlásiť',
'username' => 'Užívateľské meno',
'password' => 'Heslo',
'password_repeat' => 'Opakujte heslo',
'password_forgot' => 'Zabudnuté heslo?',
'password_reset' => 'Obnoviť heslo',
'password_reset_email_subject' => 'Obnoviť heslo pre PHP Server Monitor',
'password_reset_email_body' => 'Použite následujúci odkaz pre obnovenie hesla. Odkaz je platný jednu
hodinu.<br><br>%link%',
'error_user_incorrect' => 'Zadané užívateľské meno nebolo nájdené.',
'error_login_incorrect' => 'Prihlásenie nebolo úspešné.',
'error_login_passwords_nomatch' => 'Zadané heslá sa nezhodujú.',
'error_reset_invalid_link' => 'Odkaz je neplatný.',
'success_password_forgot' => 'Na vašu e-mailovú adresu bol zaslaný e-mail s informáciami pre obnovu hesla.',
'success_password_reset' => 'Vaše heslo bolo úspešne obnovené. Prosím prihláste sa.',
),
'error' => array(
'401_unauthorized' => 'Nedostatočné oprávnenia',
'401_unauthorized_description' => 'Nemáte oprávnenie zobraziť túto stránku.',
),
); );

View File

@ -1,4 +1,5 @@
<?php <?php
/** /**
* PHP Server Monitor * PHP Server Monitor
* Monitor your servers and websites. * Monitor your servers and websites.
@ -26,269 +27,296 @@
**/ **/
$sm_lang = array( $sm_lang = array(
'name' => 'Slovenščina - Slovenian', 'name' => 'Slovenščina - Slovenian',
'locale' => array('sl_SI.UTF-8', 'sl_SI', 'slovenščina', 'slovenščina'), 'locale' => array(
'system' => array( '0' => 'sl_SI.UTF-8',
'title' => 'Server Monitor', '1' => 'sl_SI',
'install' => 'Install', '2' => 'slovenščina',
'action' => 'Action', '3' => 'slovenščina',
'save' => 'Shrani', ),
'edit' => 'Uredi', 'system' => array(
'delete' => 'Izbriši', 'title' => 'Server Monitor',
'date' => 'Datum', 'install' => 'Install',
'message' => 'Sporočilo', 'action' => 'Action',
'yes' => 'da', 'save' => 'Shrani',
'no' => 'ne', 'edit' => 'Uredi',
'insert' => 'Vstavi', 'delete' => 'Izbriši',
'add_new' => 'Dodaj novega', 'date' => 'Datum',
'update_available' => 'Na voljo je nova različica ({version}); prenesti jo je mogoče iz <a href="https://github.com/phpservermon/phpservermon/releases/latest" target="_blank" rel="noopener">http://www.phpservermonitor.org</a>.', 'message' => 'Sporočilo',
'back_to_top' => 'Nazaj na vrh', 'yes' => 'da',
'go_back' => 'Nazaj', 'no' => 'ne',
'ok' => 'OK', 'insert' => 'Vstavi',
'cancel' => 'Prekini', 'add_new' => 'Dodaj novega',
// date/time format according the strftime php function format parameter http://php.net/manual/function.strftime.php 'update_available' => 'Na voljo je nova različica ({version}); prenesti jo je mogoče iz <a
'short_day_format' => '%B %e', href="https://github.com/phpservermon/phpservermon/releases/latest" target="_blank"
'long_day_format' => '%B %e, %Y', rel="noopener">http://www.phpservermonitor.org</a>.',
'yesterday_format' => 'včeraj ob %k:%M', 'back_to_top' => 'Nazaj na vrh',
'other_day_format' => '%A at %k:%M', 'go_back' => 'Nazaj',
'never' => 'nikoli', 'ok' => 'OK',
'hours_ago' => 'pred %d urami', 'cancel' => 'Prekini',
'an_hour_ago' => 'pred približno uro', 'short_day_format' => '%B %e',
'minutes_ago' => 'pred %d minutami', 'long_day_format' => '%B %e, %Y',
'a_minute_ago' => 'pred približno minuto', 'yesterday_format' => 'včeraj ob %k:%M',
'seconds_ago' => 'pred %d sekundami', 'other_day_format' => '%A at %k:%M',
'a_second_ago' => 'pred sekundo', 'never' => 'nikoli',
), 'hours_ago' => 'pred %d urami',
'menu' => array( 'an_hour_ago' => 'pred približno uro',
'config' => 'Nastavitve', 'minutes_ago' => 'pred %d minutami',
'server' => 'Strežniki', 'a_minute_ago' => 'pred približno minuto',
'server_log' => 'Dnevnik', 'seconds_ago' => 'pred %d sekundami',
'server_status' => 'Status', 'a_second_ago' => 'pred sekundo',
'server_update' => 'Posodobitev statusa', ),
'user' => 'Uporabniki', 'menu' => array(
'help' => 'Pomoč', 'config' => 'Nastavitve',
), 'server' => 'Strežniki',
'users' => array( 'server_log' => 'Dnevnik',
'user' => 'Uporabnik', 'server_status' => 'Status',
'name' => 'Ime', 'server_update' => 'Posodobitev statusa',
'user_name' => 'Uporabniško ime', 'user' => 'Uporabniki',
'password' => 'Geslo', 'help' => 'Pomoč',
'password_repeat' => 'Geslo (ponovno)', ),
'password_leave_blank' => 'Če ne želite spremeniti pustite prazno', 'users' => array(
'level' => 'Nivo dostopa', 'user' => 'Uporabnik',
'level_10' => 'Administrator', 'name' => 'Ime',
'level_20' => 'Uporabnik', 'user_name' => 'Uporabniško ime',
'level_description' => '<b>Administratorji</b> imajo poln dostop: lahko upravljajo strežnike, uporabnike in urejajo globalne nastavitve.<br><b>Uporabniki</b> lahko samo vidijo status in poganjajo posodobitev statusa za strežnike, ki so jim bili dodeljeni.', 'password' => 'Geslo',
'mobile' => 'Mobilni telefon', 'password_repeat' => 'Geslo (ponovno)',
'email' => 'E-pošta', 'password_leave_blank' => 'Če ne želite spremeniti pustite prazno',
'pushover' => 'Pushover', 'level' => 'Nivo dostopa',
'pushover_description' => 'Pushover je storitev, ki omogoča enostavno prejemanje obvestil v realnem času. Več informacij je na voljo <a href="https://pushover.net/">na njihovi spletni strani</a>.', 'level_10' => 'Administrator',
'pushover_key' => 'Pushover ključ', 'level_20' => 'Uporabnik',
'pushover_device' => 'Pushover naprava', 'level_description' => '<b>Administratorji</b> imajo poln dostop: lahko upravljajo strežnike, uporabnike in
'pushover_device_description' => 'Ime naprave na katero naj se pošlje obvestilo. Če želite obvestilo poslati na vse naprave, pustite prazno.', urejajo globalne nastavitve.<br><b>Uporabniki</b> lahko samo vidijo status in
'delete_title' => 'Izbriši uporabnika', poganjajo posodobitev statusa za strežnike, ki so jim bili dodeljeni.',
'delete_message' => 'Ste prepričani, da želite izbrisati uporabnika \'%1\'?', 'mobile' => 'Mobilni telefon',
'deleted' => 'Uporabnik izbrisan.', 'email' => 'E-pošta',
'updated' => 'Podatki uporabnika posodobljeni.', 'pushover' => 'Pushover',
'inserted' => 'Uporabnik dodan.', 'pushover_description' => 'Pushover je storitev, ki omogoča enostavno prejemanje obvestil v realnem času.
'profile' => 'Profil', Več informacij je na voljo <a href="https://pushover.net/" target="_blank">na njihovi spletni
'profile_updated' => 'Vaš profil je bil posodobljen.', strani</a>.',
'error_user_name_bad_length' => 'Uporabniško ime mora biti dolgo med 2 in 64 znakov.', 'pushover_key' => 'Pushover ključ',
'error_user_name_invalid' => 'Uporabniško ime lahko vsebuje samo črke (a-z, A-Z), številke (0-9), pike (.) in podčrtaje (_).', 'pushover_device' => 'Pushover naprava',
'error_user_name_exists' => 'Uporabniško ime v bazi podatkov že obstaja.', 'pushover_device_description' => 'Ime naprave na katero naj se pošlje obvestilo. Če želite obvestilo
'error_user_email_bad_length' => 'E-naslov mora biti med 5 in 255 znaki.', poslati na vse naprave, pustite prazno.',
'error_user_email_invalid' => 'E-naslov ni veljaven.', 'delete_title' => 'Izbriši uporabnika',
'error_user_level_invalid' => 'Izbrani nivo dostopa za uporabnika ni veljaven.', 'delete_message' => 'Ste prepričani, da želite izbrisati uporabnika \'%1\'?',
'error_user_no_match' => 'Uporabnika ne najdem v bazi podatkov.', 'deleted' => 'Uporabnik izbrisan.',
'error_user_password_invalid' => 'Vneseno geslo ni veljavno.', 'updated' => 'Podatki uporabnika posodobljeni.',
'error_user_password_no_match' => 'Gesli se ne ujemata.', 'inserted' => 'Uporabnik dodan.',
), 'profile' => 'Profil',
'log' => array( 'profile_updated' => 'Vaš profil je bil posodobljen.',
'title' => 'Dnevniški zapisi', 'error_user_name_bad_length' => 'Uporabniško ime mora biti dolgo med 2 in 64 znakov.',
'type' => 'Tip', 'error_user_name_invalid' => 'Uporabniško ime lahko vsebuje samo črke (a-z, A-Z), številke (0-9), pike (.)
'status' => 'Status', in podčrtaje (_).',
'email' => 'E-pošta', 'error_user_name_exists' => 'Uporabniško ime v bazi podatkov že obstaja.',
'sms' => 'SMS', 'error_user_email_bad_length' => 'E-naslov mora biti med 5 in 255 znaki.',
'pushover' => 'Pushover', 'error_user_email_invalid' => 'E-naslov ni veljaven.',
'no_logs' => 'ni dnevniških zapisov', 'error_user_level_invalid' => 'Izbrani nivo dostopa za uporabnika ni veljaven.',
'clear' => 'Počisti dnevnik', 'error_user_no_match' => 'Uporabnika ne najdem v bazi podatkov.',
'delete_title' => 'Brisanje dnevnika', 'error_user_password_invalid' => 'Vneseno geslo ni veljavno.',
'delete_message' => 'Ali ste prepričani, da želite izbrisati <b>vse</b> dnevnike?', 'error_user_password_no_match' => 'Gesli se ne ujemata.',
), ),
'servers' => array( 'log' => array(
'server' => 'Strežnik', 'title' => 'Dnevniški zapisi',
'status' => 'Status', 'type' => 'Tip',
'label' => 'Ime', 'status' => 'Status',
'domain' => 'Domena / IP naslov', 'email' => 'E-pošta',
'timeout' => 'Časovna omejitev', 'sms' => 'SMS',
'timeout_description' => 'Koliko sekund naj čakam na odgovor strežnika.', 'pushover' => 'Pushover',
'port' => 'Vrata', 'no_logs' => 'ni dnevniških zapisov',
'type' => 'Tip', 'clear' => 'Počisti dnevnik',
'type_website' => 'Spletna stran (website)', 'delete_title' => 'Brisanje dnevnika',
'type_service' => 'Storitev (service)', 'delete_message' => 'Ali ste prepričani, da želite izbrisati <b>vse</b> dnevnike?',
'pattern' => 'Iskani niz oz. vzorec', ),
'pattern_description' => 'Če ta vzorec ne bo najden na spletni strani, bo strežnik označen kot nedelujoč. Dovoljeni so regularni izrazi.', 'servers' => array(
'last_check' => 'Zadnje preverjanje', 'server' => 'Strežnik',
'last_online' => 'Nazadnje dostopen', 'status' => 'Status',
'monitoring' => 'Spremljanje', 'label' => 'Ime',
'no_monitoring' => 'Se ne spremlja', 'domain' => 'Domena / IP naslov',
'email' => 'E-pošta', 'timeout' => 'Časovna omejitev',
'send_email' => 'Pošlji e-pošto', 'timeout_description' => 'Koliko sekund naj čakam na odgovor strežnika.',
'sms' => 'SMS', 'port' => 'Vrata',
'send_sms' => 'Pošlji SMS', 'type' => 'Tip',
'pushover' => 'Pushover', 'type_website' => 'Spletna stran (website)',
'users' => 'Uporabniki', 'type_service' => 'Storitev (service)',
'delete_title' => 'Izbriši strežnik', 'pattern' => 'Iskani niz oz. vzorec',
'delete_message' => 'Ste prepričani, da želite izbrisati strežnik \'%1\'?', 'pattern_description' => 'Če ta vzorec ne bo najden na spletni strani, bo strežnik označen kot nedelujoč.
'deleted' => 'Strežnik izbrisan.', Dovoljeni so regularni izrazi.',
'updated' => 'Podatki o strežniku posodobljeni.', 'last_check' => 'Zadnje preverjanje',
'inserted' => 'Strežnik dodan.', 'last_online' => 'Nazadnje dostopen',
'latency' => 'Zakasnitev', 'monitoring' => 'Spremljanje',
'latency_max' => 'Zakasnitev (največja)', 'no_monitoring' => 'Se ne spremlja',
'latency_min' => 'Zakasnitev (najmanjša)', 'email' => 'E-pošta',
'latency_avg' => 'Zakasnitev (povprečna)', 'send_email' => 'Pošlji e-pošto',
'uptime' => 'Neprekinjeno delovanje', 'sms' => 'SMS',
'year' => 'leto', 'send_sms' => 'Pošlji SMS',
'month' => 'mesec', 'pushover' => 'Pushover',
'week' => 'teden', 'users' => 'Uporabniki',
'day' => 'dan', 'delete_title' => 'Izbriši strežnik',
'hour' => 'ura', 'delete_message' => 'Ste prepričani, da želite izbrisati strežnik \'%1\'?',
'warning_threshold' => 'Prag za opozorilo', 'deleted' => 'Strežnik izbrisan.',
'warning_threshold_description' => 'Število neuspešnih preverjanj preden je strežnik označen kot nedelujoč.', 'updated' => 'Podatki o strežniku posodobljeni.',
'chart_last_week' => 'prejšnji teden', 'inserted' => 'Strežnik dodan.',
'chart_history' => 'Zgodovina', 'latency' => 'Zakasnitev',
// Charts date format according jqPlot date format http://www.jqplot.com/docs/files/plugins/jqplot-dateAxisRenderer-js.html 'latency_max' => 'Zakasnitev (največja)',
'chart_day_format' => '%m. %d. %Y', 'latency_min' => 'Zakasnitev (najmanjša)',
'chart_long_date_format' => '%m. %d. %Y %H:%M:%S', 'latency_avg' => 'Zakasnitev (povprečna)',
'chart_short_date_format' => '%m/%d %H:%M', 'uptime' => 'Neprekinjeno delovanje',
'chart_short_time_format' => '%H:%M', 'year' => 'leto',
'warning_notifications_disabled_sms' => 'SMS obvestila so onemogočena.', 'month' => 'mesec',
'warning_notifications_disabled_email' => 'Obvestila po e-pošti so onemogočena.', 'week' => 'teden',
'warning_notifications_disabled_pushover' => 'Pushover obvestila so onemogočena.', 'day' => 'dan',
'error_server_no_match' => 'Strežnik ni najden.', 'hour' => 'ura',
'error_server_label_bad_length' => 'Ime mora biti med 1 in 255 znaki.', 'warning_threshold' => 'Prag za opozorilo',
'error_server_ip_bad_length' => 'Domena / IP naslov mora biti med 1 in 255 znaki.', 'warning_threshold_description' => 'Število neuspešnih preverjanj preden je strežnik označen kot
'error_server_ip_bad_service' => 'IP naslov ni veljaven.', nedelujoč.',
'error_server_ip_bad_website' => 'URL naslov spletne strani ni veljaven.', 'chart_last_week' => 'prejšnji teden',
'error_server_type_invalid' => 'Izbrani tip strežnika ni veljaven.', 'chart_history' => 'Zgodovina',
'error_server_warning_threshold_invalid' => 'Prag za opozorilo mora biti število večje od 0.', 'chart_day_format' => '%m. %d. %Y',
), 'chart_long_date_format' => '%m. %d. %Y %H:%M:%S',
'config' => array( 'chart_short_date_format' => '%m/%d %H:%M',
'general' => 'Splošno', 'chart_short_time_format' => '%H:%M',
'language' => 'Jezik', 'warning_notifications_disabled_sms' => 'SMS obvestila so onemogočena.',
'show_update' => 'Preverim za posodobitve?', 'warning_notifications_disabled_email' => 'Obvestila po e-pošti so onemogočena.',
'email_status' => 'Dovolim pošiljanje e-pošte', 'warning_notifications_disabled_pushover' => 'Pushover obvestila so onemogočena.',
'email_from_email' => 'E-poštni naslov pošiljatelja', 'error_server_no_match' => 'Strežnik ni najden.',
'email_from_name' => 'Ime pošiljatelja', 'error_server_label_bad_length' => 'Ime mora biti med 1 in 255 znaki.',
'email_smtp' => 'Enable SMTP', 'error_server_ip_bad_length' => 'Domena / IP naslov mora biti med 1 in 255 znaki.',
'email_smtp_host' => 'SMTP strežnik', 'error_server_ip_bad_service' => 'IP naslov ni veljaven.',
'email_smtp_port' => 'SMTP vrata', 'error_server_ip_bad_website' => 'URL naslov spletne strani ni veljaven.',
'email_smtp_security' => 'SMTP varnost', 'error_server_type_invalid' => 'Izbrani tip strežnika ni veljaven.',
'email_smtp_security_none' => 'brez', 'error_server_warning_threshold_invalid' => 'Prag za opozorilo mora biti število večje od 0.',
'email_smtp_username' => 'SMTP uporabniško ime', ),
'email_smtp_password' => 'SMTP geslo', 'config' => array(
'email_smtp_noauth' => 'Če ni potrebna overovitev, pustite prazno', 'general' => 'Splošno',
'sms_status' => 'Dovolim pošiljanje SMS sporočil?', 'language' => 'Jezik',
'sms_gateway' => 'Prehod za pošiljanje SMS sporočil', 'show_update' => 'Preverim za posodobitve?',
'sms_gateway_username' => 'Uporabniško ime SMS prehoda', 'email_status' => 'Dovolim pošiljanje e-pošte',
'sms_gateway_password' => 'Geslo SMS prehoda', 'email_from_email' => 'E-poštni naslov pošiljatelja',
'sms_from' => 'Telefonska številka pošiljatelja', 'email_from_name' => 'Ime pošiljatelja',
'pushover_status' => 'Dovolim pošiljanje Pushover sporočil', 'email_smtp' => 'Enable SMTP',
'pushover_description' => 'Pushover je storitev, ki omogoča enostavno prejemanje obvestil v realnem času. Več informacij je na voljo <a href="https://pushover.net/">na njihovi spletni strani</a>.', 'email_smtp_host' => 'SMTP strežnik',
'pushover_clone_app' => 'Kliknite za ustvarjanje vaše Pushover aplikacije', 'email_smtp_port' => 'SMTP vrata',
'pushover_api_token' => 'Pushover API žeton', 'email_smtp_security' => 'SMTP varnost',
'pushover_api_token_description' => 'Pred uporabo storitve Pushover, morate na njihovi spletni strani <a href="%1$s" target="_blank" rel="noopener">registrirati aplikacijo</a>, tukaj pa vnesti API žeton.', 'email_smtp_security_none' => 'brez',
'alert_type' => 'Izberite kdaj naj se vam pošljejo obvestila.', 'email_smtp_username' => 'SMTP uporabniško ime',
'alert_type_description' => '<b>Sprememba statusa:</b> '. 'email_smtp_password' => 'SMTP geslo',
'Obvestilo boste dobili ob vsaki spremembi statusa, torej iz delujoč -> nedelujoč ter nedelujoč -> delujoč.<br>'. 'email_smtp_noauth' => 'Če ni potrebna overovitev, pustite prazno',
'<br /><b>Nedelujoč:</b> '. 'sms_status' => 'Dovolim pošiljanje SMS sporočil?',
'Obvestilo boste dobili samo, ko se bo strežnik PRVIKRAT prenehal odzivati. Na primer:'. 'sms_gateway' => 'Prehod za pošiljanje SMS sporočil',
'nastavljeno imate preverjanje strežnikov vsakih 15 minut. Strežnik preneha delovati ob 13h in ostane nedelujoč do 18h. '. 'sms_gateway_username' => 'Uporabniško ime SMS prehoda',
'Dobili boste obvestilo samo ob 13h.<br>'. 'sms_gateway_password' => 'Geslo SMS prehoda',
'<br><b>Vedno:</b> '. 'sms_from' => 'Telefonska številka pošiljatelja',
'Obvestilo boste dobili vedno, ko se izvede skripta za preverjanje in strežnik ne deluje, pa čeprav bo strežnik nedelujoč več ur.', 'pushover_status' => 'Dovolim pošiljanje Pushover sporočil',
'alert_type_status' => 'Sprememba statusa', 'pushover_description' => 'Pushover je storitev, ki omogoča enostavno prejemanje obvestil v realnem času.
'alert_type_offline' => 'Nedelujoč', Več informacij je na voljo <a href="https://pushover.net/" target="_blank">na njihovi spletni
'alert_type_always' => 'Vedno', strani</a>.',
'log_status' => 'Beleženje statusa', 'pushover_clone_app' => 'Kliknite za ustvarjanje vaše Pushover aplikacije',
'log_status_description' => 'Če je beleženje statusa vključeno, se bodo beležili vsi dogodki povezani s pošiljanjem obvestil.', 'pushover_api_token' => 'Pushover API žeton',
'log_email' => 'Beleži e-pošto, ki jo pošilja aplikacija', 'pushover_api_token_description' => 'Pred uporabo storitve Pushover, morate na njihovi spletni strani <a
'log_sms' => 'Beleži SMS sporočila, ki jih pošilja aplikacija', href="%1$s" target="_blank" rel="noopener">registrirati aplikacijo</a>,
'log_pushover' => 'Beleži Pushover sporočila, ki jih pošilja aplikacija', tukaj pa vnesti API žeton.',
'updated' => 'Nastavitve so bile posodobljene.', 'alert_type' => 'Izberite kdaj naj se vam pošljejo obvestila.',
'tab_email' => 'E-pošta', 'alert_type_description' => '<b>Sprememba statusa:</b> Obvestilo boste dobili ob vsaki spremembi statusa,
'tab_sms' => 'SMS', torej iz delujoč -> nedelujoč ter nedelujoč -> delujoč.<br><br
'tab_pushover' => 'Pushover', /><b>Nedelujoč:</b> Obvestilo boste dobili samo, ko se bo strežnik PRVIKRAT
'settings_email' => 'Nastavitve e-pošte', prenehal odzivati. Na primer:nastavljeno imate preverjanje strežnikov vsakih 15
'settings_sms' => 'Nastavitve SMS sporočil', minut. Strežnik preneha delovati ob 13h in ostane nedelujoč do 18h. Dobili
'settings_pushover' => 'Nastavitve Pushover sporočil', boste obvestilo samo ob 13h.<br><br><b>Vedno:</b> Obvestilo boste dobili vedno,
'settings_notification' => 'Nastavitve obvestil', ko se izvede skripta za preverjanje in strežnik ne deluje, pa čeprav bo
'settings_log' => 'Hramba dnevniških zapisov', strežnik nedelujoč več ur.',
'auto_refresh' => 'Samodejno posodabljanje', 'alert_type_status' => 'Sprememba statusa',
'auto_refresh_description' => 'alert_type_offline' => 'Nedelujoč',
'Samodejno posodabljanje pregleda statusa strežnikov.<br>'. 'alert_type_always' => 'Vedno',
'<span class="small">'. 'log_status' => 'Beleženje statusa',
'Čas v sekundah. Če je vrednost 0 se stran ne bo samodejno posodabljala.'. 'log_status_description' => 'Če je beleženje statusa vključeno, se bodo beležili vsi dogodki povezani s
'</span>', pošiljanjem obvestil.',
'seconds' => 'sekund', 'log_email' => 'Beleži e-pošto, ki jo pošilja aplikacija',
'test' => 'Test', 'log_sms' => 'Beleži SMS sporočila, ki jih pošilja aplikacija',
'test_email' => 'Na naslov, ki ste ga določili v vašem profilu, bo poslano e-sporočilo.', 'log_pushover' => 'Beleži Pushover sporočila, ki jih pošilja aplikacija',
'test_sms' => 'Na telefonsko številko, ki ste jo določili v vašem profilu, bo poslan SMS.', 'updated' => 'Nastavitve so bile posodobljene.',
'test_pushover' => 'Na uporabniški ključ/napravo, ki ste ju določili v vašem profilu, bo poslano Pushover sporočilo.', 'tab_email' => 'E-pošta',
'send' => 'Pošlji', 'tab_sms' => 'SMS',
'test_subject' => 'Test', 'tab_pushover' => 'Pushover',
'test_message' => 'Testno sporočilo', 'settings_email' => 'Nastavitve e-pošte',
'email_sent' => 'E-pošta poslana', 'settings_sms' => 'Nastavitve SMS sporočil',
'email_error' => 'Napaka pri pošiljanju e-pošte', 'settings_pushover' => 'Nastavitve Pushover sporočil',
'sms_sent' => 'SMS sporočilo poslano', 'settings_notification' => 'Nastavitve obvestil',
'sms_error' => 'Napaka pri pošiljanju SMS sporočila. %s', 'settings_log' => 'Hramba dnevniških zapisov',
'sms_error_nomobile' => 'Ni mogoče poslati testnega SMS sporočila: v vašem profilu ni vpisana veljavna telefonska številka.', 'auto_refresh' => 'Samodejno posodabljanje',
'pushover_sent' => 'Pushover obvestilo poslano', 'auto_refresh_description' => 'Samodejno posodabljanje pregleda statusa strežnikov.<br><span
'pushover_error' => 'Napaka pri pošiljanju Pushover sporočila: %s', class="small">Čas v sekundah. Če je vrednost 0 se stran ne bo samodejno
'pushover_error_noapp' => 'Ni mogoče poslati testnega sporočila: med globalnimi nastavitvami ne najdem Pushover API žetona.', posodabljala.</span>',
'pushover_error_nokey' => 'Ni mogoče poslati testnega sporočila: med vašimi nastavitvami ne najdem Pushover ključa.', 'seconds' => 'sekund',
'log_retention_period' => 'Čas hrambe podatov', 'test' => 'Test',
'log_retention_period_description' => 'Število dni, ko naj se hranijo podatki o obvestilih in statusu strežnikov. Če želite podatke hraniti trajno, vnesite 0.', 'test_email' => 'Na naslov, ki ste ga določili v vašem profilu, bo poslano e-sporočilo.',
'log_retention_days' => 'dni', 'test_sms' => 'Na telefonsko številko, ki ste jo določili v vašem profilu, bo poslan SMS.',
), 'test_pushover' => 'Na uporabniški ključ/napravo, ki ste ju določili v vašem profilu, bo poslano Pushover
// for newlines in the email messages use <br> sporočilo.',
'notifications' => array( 'send' => 'Pošlji',
'off_sms' => 'Streznik \'%LABEL%\' NE deluje: IP=%IP%, vrata=%PORT%. Napaka=%ERROR%', 'test_subject' => 'Test',
'off_email_subject' => 'POMEMBNO: Strežnik \'%LABEL%\' NE deluje', 'test_message' => 'Testno sporočilo',
'off_email_body' => "Pri povezovanju na streznik je prislo do napake:<br><br>Streznik: %LABEL%<br>IP: %IP%<br>vrata: %PORT%<br>Napaka: %ERROR%<br>Datum: %DATE%", 'email_sent' => 'E-pošta poslana',
'off_pushover_title' => 'Streznik \'%LABEL%\' NE deluje', 'email_error' => 'Napaka pri pošiljanju e-pošte',
'off_pushover_message' => "Ni se mogoče povezati na naslednji streznik:<br><br>Streznik: %LABEL%<br>IP: %IP%<br>Vrata: %PORT%<br>Error: %ERROR%<br>Datum: %DATE%", 'sms_sent' => 'SMS sporočilo poslano',
'on_sms' => 'Streznik \'%LABEL%\' deluje: IP=%IP%, vrata=%PORT%, it was down for %LAST_OFFLINE_DURATION%', 'sms_error' => 'Napaka pri pošiljanju SMS sporočila. %s',
'on_email_subject' => 'OBVESTILO: Streznik \'%LABEL%\' ponovno deluje', 'sms_error_nomobile' => 'Ni mogoče poslati testnega SMS sporočila: v vašem profilu ni vpisana veljavna
'on_email_body' => "Streznik '%LABEL%' ponovno deluje, it was down for %LAST_OFFLINE_DURATION%:<br><br>Strežnik: %LABEL%<br>IP: %IP%<br>Vrata: %PORT%<br>Datum: %DATE%", telefonska številka.',
'on_pushover_title' => 'Streznik \'%LABEL%\' deluje', 'pushover_sent' => 'Pushover obvestilo poslano',
'on_pushover_message' => 'Streznik \'%LABEL%\' ponovno deluje, it was down for %LAST_OFFLINE_DURATION%:<br><br>Server: %LABEL%<br>IP: %IP%<br>Vrata: %PORT%<br>Datum: %DATE%', 'pushover_error' => 'Napaka pri pošiljanju Pushover sporočila: %s',
), 'pushover_error_noapp' => 'Ni mogoče poslati testnega sporočila: med globalnimi nastavitvami ne najdem
'login' => array( Pushover API žetona.',
'welcome_usermenu' => 'Pozdravljeni, %user_name%', 'pushover_error_nokey' => 'Ni mogoče poslati testnega sporočila: med vašimi nastavitvami ne najdem Pushover
'title_sign_in' => 'Prosimo, prijavite se', ključa.',
'title_forgot' => 'Ali ste pozabili geslo?', 'log_retention_period' => 'Čas hrambe podatov',
'title_reset' => 'Ponastavitev gesla', 'log_retention_period_description' => 'Število dni, ko naj se hranijo podatki o obvestilih in statusu
'submit' => 'Pošlji', strežnikov. Če želite podatke hraniti trajno, vnesite 0.',
'remember_me' => 'Zapomni si me', 'log_retention_days' => 'dni',
'login' => 'Prijava', ),
'logout' => 'Odjava', 'notifications' => array(
'username' => 'Uporabniško ime', 'off_sms' => 'Streznik \'%LABEL%\' NE deluje: IP=%IP%, vrata=%PORT%. Napaka=%ERROR%',
'password' => 'Geslo', 'off_email_subject' => 'POMEMBNO: Strežnik \'%LABEL%\' NE deluje',
'password_repeat' => 'Geslo (ponovno)', 'off_email_body' => 'Pri povezovanju na streznik je prislo do napake:<br><br>Streznik: %LABEL%<br>IP:
'password_forgot' => 'Pozabljeno geslo?', %IP%<br>vrata: %PORT%<br>Napaka: %ERROR%<br>Datum: %DATE%',
'password_reset' => 'Ponastavitev gesla', 'off_pushover_title' => 'Streznik \'%LABEL%\' NE deluje',
'password_reset_email_subject' => 'Ponastavite svoje geslo za PHP Server Monitor', 'off_pushover_message' => 'Ni se mogoče povezati na naslednji streznik:<br><br>Streznik: %LABEL%<br>IP:
'password_reset_email_body' => 'Za ponastavitev gesla uporabite spodnjo povezavo. Pomembno: povezava poteče v 1 uri.<br><br>%link%', %IP%<br>Vrata: %PORT%<br>Error: %ERROR%<br>Datum: %DATE%',
'error_user_incorrect' => 'Vpisanega uporabniškega imena ne najdem.', 'on_sms' => 'Streznik \'%LABEL%\' deluje: IP=%IP%, vrata=%PORT%, it was down for %LAST_OFFLINE_DURATION%',
'error_login_incorrect' => 'Podatki so napačni.', 'on_email_subject' => 'OBVESTILO: Streznik \'%LABEL%\' ponovno deluje',
'error_login_passwords_nomatch' => 'Vneseno geslo ni pravilno.', 'on_email_body' => 'Streznik \'%LABEL%\' ponovno deluje, it was down for
'error_reset_invalid_link' => 'Povezava za ponastavitev gesla, ki ste jo vnesli, ni pravilna.', %LAST_OFFLINE_DURATION%:<br><br>Strežnik: %LABEL%<br>IP: %IP%<br>Vrata: %PORT%<br>Datum:
'success_password_forgot' => 'Poslano vam je bilo sporočilo z navodili za ponastavitev vašega gesla.', %DATE%',
'success_password_reset' => 'Vaše geslo je bilo uspešno ponastavljeno. Prijavite se prosim.', 'on_pushover_title' => 'Streznik \'%LABEL%\' deluje',
), 'on_pushover_message' => 'Streznik \'%LABEL%\' ponovno deluje, it was down for
'error' => array( %LAST_OFFLINE_DURATION%:<br><br>Server: %LABEL%<br>IP: %IP%<br>Vrata:
'401_unauthorized' => 'Nepooblaščen dostop', %PORT%<br>Datum: %DATE%',
'401_unauthorized_description' => 'Nimate dovoljenja za ogled te strani.', ),
), 'login' => array(
'welcome_usermenu' => 'Pozdravljeni, %user_name%',
'title_sign_in' => 'Prosimo, prijavite se',
'title_forgot' => 'Ali ste pozabili geslo?',
'title_reset' => 'Ponastavitev gesla',
'submit' => 'Pošlji',
'remember_me' => 'Zapomni si me',
'login' => 'Prijava',
'logout' => 'Odjava',
'username' => 'Uporabniško ime',
'password' => 'Geslo',
'password_repeat' => 'Geslo (ponovno)',
'password_forgot' => 'Pozabljeno geslo?',
'password_reset' => 'Ponastavitev gesla',
'password_reset_email_subject' => 'Ponastavite svoje geslo za PHP Server Monitor',
'password_reset_email_body' => 'Za ponastavitev gesla uporabite spodnjo povezavo. Pomembno: povezava poteče v
1 uri.<br><br>%link%',
'error_user_incorrect' => 'Vpisanega uporabniškega imena ne najdem.',
'error_login_incorrect' => 'Podatki so napačni.',
'error_login_passwords_nomatch' => 'Vneseno geslo ni pravilno.',
'error_reset_invalid_link' => 'Povezava za ponastavitev gesla, ki ste jo vnesli, ni pravilna.',
'success_password_forgot' => 'Poslano vam je bilo sporočilo z navodili za ponastavitev vašega gesla.',
'success_password_reset' => 'Vaše geslo je bilo uspešno ponastavljeno. Prijavite se prosim.',
),
'error' => array(
'401_unauthorized' => 'Nepooblaščen dostop',
'401_unauthorized_description' => 'Nimate dovoljenja za ogled te strani.',
),
); );

View File

@ -1,4 +1,5 @@
<?php <?php
/** /**
* PHP Server Monitor * PHP Server Monitor
* Monitor your servers and websites. * Monitor your servers and websites.
@ -26,284 +27,291 @@
**/ **/
$sm_lang = array( $sm_lang = array(
'name' => 'Svenska - Swedish', 'name' => 'Svenska - Swedish',
'locale' => array('sv_SE.UTF-8', 'sv_SE', 'svenska', 'svenska-SE'), 'locale' => array(
'locale_tag' => 'sv', '0' => 'sv_SE.UTF-8',
'locale_dir' => 'ltr', '1' => 'sv_SE',
'system' => array( '2' => 'svenska',
'title' => 'Server Monitor', '3' => 'svenska-SE',
'install' => 'Installera', ),
'action' => 'Åtgärd', 'locale_tag' => 'sv',
'save' => 'Spara', 'locale_dir' => 'ltr',
'edit' => 'Redigera', 'system' => array(
'delete' => 'Radera', 'title' => 'Server Monitor',
'date' => 'Datum', 'install' => 'Installera',
'message' => 'Meddelande', 'action' => 'Åtgärd',
'yes' => 'Ja', 'save' => 'Spara',
'no' => 'Nej', 'edit' => 'Redigera',
'insert' => 'Infoga', 'delete' => 'Radera',
'add_new' => 'Lägg till', 'date' => 'Datum',
'update_available' => 'En ny version ({version}) finns tillgänglig från <a href="https://github.com/phpservermon/phpservermon/releases/latest" target="_blank" rel="noopener">http://www.phpservermonitor.org</a>.', 'message' => 'Meddelande',
'back_to_top' => 'Gå upp', 'yes' => 'Ja',
'go_back' => 'Gå tillbaka', 'no' => 'Nej',
'ok' => 'OK', 'insert' => 'Infoga',
'cancel' => 'Avbryt', 'add_new' => 'Lägg till',
// date/time format according the strftime php function format parameter http://php.net/manual/function.strftime.php 'update_available' => 'En ny version ({version}) finns tillgänglig från <a
'short_day_format' => '%B %e', href="https://github.com/phpservermon/phpservermon/releases/latest" target="_blank"
'long_day_format' => '%B %e, %Y', rel="noopener">http://www.phpservermonitor.org</a>.',
'yesterday_format' => 'Igår kl %k:%M', 'back_to_top' => 'Gå upp',
'other_day_format' => '%A kl %k:%M', 'go_back' => 'Gå tillbaka',
'never' => 'Aldrig', 'ok' => 'OK',
'hours_ago' => '%d timmar sedan', 'cancel' => 'Avbryt',
'an_hour_ago' => 'ungefär en timme sedan', 'short_day_format' => '%B %e',
'minutes_ago' => '%d minuter sedan', 'long_day_format' => '%B %e, %Y',
'a_minute_ago' => 'ungefär en minut sen', 'yesterday_format' => 'Igår kl %k:%M',
'seconds_ago' => '%d sekunder sedan', 'other_day_format' => '%A kl %k:%M',
'a_second_ago' => 'en sekund sedan', 'never' => 'Aldrig',
'year' => 'year', 'hours_ago' => '%d timmar sedan',
'years' => 'years', 'an_hour_ago' => 'ungefär en timme sedan',
'month' => 'month', 'minutes_ago' => '%d minuter sedan',
'months' => 'months', 'a_minute_ago' => 'ungefär en minut sen',
'day' => 'day', 'seconds_ago' => '%d sekunder sedan',
'days' => 'days', 'a_second_ago' => 'en sekund sedan',
'hour' => 'hour', ),
'hours' => 'hours', 'menu' => array(
'minute' => 'minute', 'config' => 'Inställningar',
'minutes' => 'minutes', 'server' => 'Servrar',
'second' => 'second', 'server_log' => 'Logg',
'seconds' => 'seconds', 'server_status' => 'Status',
), 'server_update' => 'Uppdatera',
'menu' => array( 'user' => 'Användare',
'config' => 'Inställningar', 'help' => 'Hjälp',
'server' => 'Servrar', ),
'server_log' => 'Logg', 'users' => array(
'server_status' => 'Status', 'user' => 'Användare',
'server_update' => 'Uppdatera', 'name' => 'Namn',
'user' => 'Användare', 'user_name' => 'Användarnamn',
'help' => 'Hjälp', 'password' => 'Lösenord',
), 'password_repeat' => 'Upprepa lösenord',
'users' => array( 'password_leave_blank' => 'Lämna blankt för att inte ändra ',
'user' => 'Användare', 'level' => 'Nivå',
'name' => 'Namn', 'level_10' => 'Administratör',
'user_name' => 'Användarnamn', 'level_20' => 'Användare',
'password' => 'Lösenord', 'level_description' => '<b>Administratörer</b> har fulla rättigheter: de kan hantera servrar, användare och
'password_repeat' => 'Upprepa lösenord', redigera gemensamma inställningar.<br><b>Användare</b> kan bara se och köra
'password_leave_blank' => 'Lämna blankt för att inte ändra ', uppdateraren för de servrar som de blivit tilldelade.',
'level' => 'Nivå', 'mobile' => 'Mobilnummer',
'level_10' => 'Administratör', 'email' => 'Email',
'level_20' => 'Användare', 'pushover' => 'Pushover',
'level_description' => '<b>Administratörer</b> har fulla rättigheter: de kan hantera servrar, användare och redigera gemensamma inställningar.<br><b>Användare</b> kan bara se och köra uppdateraren för de servrar som de blivit tilldelade.', 'pushover_description' => 'Pushover är en tjänst som skickar meddelande i realtid. Se <a
'mobile' => 'Mobilnummer', href="https://pushover.net/" target="_blank">deras webbsida</a> för mer information.',
'email' => 'Email', 'pushover_key' => 'Pushover Key',
'pushover' => 'Pushover', 'pushover_device' => 'Pushover Device',
'pushover_description' => 'Pushover är en tjänst som skickar meddelande i realtid. Se <a href="https://pushover.net/">deras webbsida</a> för mer information.', 'pushover_device_description' => 'Enhetsnman att skicka meddelande till. Lämna tomt för att skicka till alla
'pushover_key' => 'Pushover Key', enheter.',
'pushover_device' => 'Pushover Device', 'delete_title' => 'Radera användare',
'pushover_device_description' => 'Enhetsnman att skicka meddelande till. Lämna tomt för att skicka till alla enheter.', 'delete_message' => 'Är du säker att du vill radera användare \'%1\'?',
'delete_title' => 'Radera användare', 'deleted' => 'Användare raderad.',
'delete_message' => 'Är du säker att du vill radera användare \'%1\'?', 'updated' => 'Användare uppdaterad.',
'deleted' => 'Användare raderad.', 'inserted' => 'Användare tillagd.',
'updated' => 'Användare uppdaterad.', 'profile' => 'Profil',
'inserted' => 'Användare tillagd.', 'profile_updated' => 'Din profil har uppdaterats.',
'profile' => 'Profil', 'error_user_name_bad_length' => 'Användarnamn måste vara mellan 2 och 64 tecken.',
'profile_updated' => 'Din profil har uppdaterats.', 'error_user_name_invalid' => 'Användarnamnet får bara innehålla bokstäver (a-z, A-Z), siffror (0-9),
'error_user_name_bad_length' => 'Användarnamn måste vara mellan 2 och 64 tecken.', prickar (.) and understreck (_).',
'error_user_name_invalid' => 'Användarnamnet får bara innehålla bokstäver (a-z, A-Z), siffror (0-9), prickar (.) and understreck (_).', 'error_user_name_exists' => 'Användarnamnet används redan.',
'error_user_name_exists' => 'Användarnamnet används redan.', 'error_user_email_bad_length' => 'Email-adressen måste vara mellan 5 och 255 tecken.',
'error_user_email_bad_length' => 'Email-adressen måste vara mellan 5 och 255 tecken.', 'error_user_email_invalid' => 'Email-adressen är ogiltig.',
'error_user_email_invalid' => 'Email-adressen är ogiltig.', 'error_user_level_invalid' => 'Behörighetsnivån är ogiltig.',
'error_user_level_invalid' => 'Behörighetsnivån är ogiltig.', 'error_user_no_match' => 'Användaren kunde inte hittas i databasen.',
'error_user_no_match' => 'Användaren kunde inte hittas i databasen.', 'error_user_password_invalid' => 'Lösenordet är ogiltigt.',
'error_user_password_invalid' => 'Lösenordet är ogiltigt.', 'error_user_password_no_match' => 'Lösenorden stämmer inte överens.',
'error_user_password_no_match' => 'Lösenorden stämmer inte överens.', ),
), 'log' => array(
'log' => array( 'title' => 'Logg-poster',
'title' => 'Logg-poster', 'type' => 'Typ',
'type' => 'Typ', 'status' => 'Status',
'status' => 'Status', 'email' => 'Email',
'email' => 'Email', 'sms' => 'SMS',
'sms' => 'SMS', 'pushover' => 'Pushover',
'pushover' => 'Pushover', 'no_logs' => 'Inga loggar',
'no_logs' => 'Inga loggar', 'clear' => 'Tydlig logg',
'clear' => 'Tydlig logg', 'delete_title' => 'Tydlig logg',
'delete_title' => 'Tydlig logg', 'delete_message' => 'Är du säker på att du vill radera <b>alla</b> loggar?',
'delete_message' => 'Är du säker på att du vill radera <b>alla</b> loggar?', ),
), 'servers' => array(
'servers' => array( 'server' => 'Server',
'server' => 'Server', 'status' => 'Status',
'status' => 'Status', 'label' => 'Namn',
'label' => 'Namn', 'domain' => 'Domän/IP',
'domain' => 'Domän/IP', 'timeout' => 'Timeout',
'timeout' => 'Timeout', 'timeout_description' => 'Antal sekunder att vänta på svar.',
'timeout_description' => 'Antal sekunder att vänta på svar.', 'port' => 'Port',
'port' => 'Port', 'type' => 'Typ',
'type' => 'Typ', 'type_website' => 'Website',
'type_website' => 'Website', 'type_service' => 'Service',
'type_service' => 'Service', 'pattern' => 'Hitta sträng/mönster',
'pattern' => 'Hitta sträng/mönster', 'pattern_description' => 'Om detta mönster inte hittas i svaret kommer servern att markeras offline. "Regular
'pattern_description' => 'Om detta mönster inte hittas i svaret kommer servern att markeras offline. "Regular expressions" är tillåtna.', expressions" är tillåtna.',
'last_check' => 'Senaste kontroll', 'last_check' => 'Senaste kontroll',
'last_online' => 'Senast online', 'last_online' => 'Senast online',
'last_offline' => 'Senast offline', 'last_offline' => 'Senast offline',
'monitoring' => 'Övervakas', 'monitoring' => 'Övervakas',
'no_monitoring' => 'Övervakas inte', 'no_monitoring' => 'Övervakas inte',
'email' => 'Email', 'email' => 'Email',
'send_email' => 'Skicka Email', 'send_email' => 'Skicka Email',
'sms' => 'SMS', 'sms' => 'SMS',
'send_sms' => 'Skicka SMS', 'send_sms' => 'Skicka SMS',
'pushover' => 'Pushover', 'pushover' => 'Pushover',
'users' => 'Användare', 'users' => 'Användare',
'delete_title' => 'Radera server', 'delete_title' => 'Radera server',
'delete_message' => 'Är du säker att du vill radera server \'%1\'?', 'delete_message' => 'Är du säker att du vill radera server \'%1\'?',
'deleted' => 'Server raderad.', 'deleted' => 'Server raderad.',
'updated' => 'Server uppdaterad.', 'updated' => 'Server uppdaterad.',
'inserted' => 'Server tillagd.', 'inserted' => 'Server tillagd.',
'latency' => 'Fördröjning', 'latency' => 'Fördröjning',
'latency_max' => 'Fördröjning (maximum)', 'latency_max' => 'Fördröjning (maximum)',
'latency_min' => 'Fördröjning (minimum)', 'latency_min' => 'Fördröjning (minimum)',
'latency_avg' => 'Fördröjning (medel)', 'latency_avg' => 'Fördröjning (medel)',
'uptime' => 'Uptime', 'uptime' => 'Uptime',
'year' => 'År', 'year' => 'År',
'month' => 'Månad', 'month' => 'Månad',
'week' => 'Vecka', 'week' => 'Vecka',
'day' => 'Dag', 'day' => 'Dag',
'hour' => 'Timme', 'hour' => 'Timme',
'warning_threshold' => 'Varningströskel', 'warning_threshold' => 'Varningströskel',
'warning_threshold_description' => 'Antalet misslyckade kontroller innan server markeras som offline.', 'warning_threshold_description' => 'Antalet misslyckade kontroller innan server markeras som offline.',
'chart_last_week' => 'Senaste veckan', 'chart_last_week' => 'Senaste veckan',
'chart_history' => 'Historik', 'chart_history' => 'Historik',
// Charts date format according jqPlot date format http://www.jqplot.com/docs/files/plugins/jqplot-dateAxisRenderer-js.html 'chart_day_format' => '%Y-%m-%d',
'chart_day_format' => '%Y-%m-%d', 'chart_long_date_format' => '%Y-%m-%d %H:%M:%S',
'chart_long_date_format' => '%Y-%m-%d %H:%M:%S', 'chart_short_date_format' => '%m/%d %H:%M',
'chart_short_date_format' => '%m/%d %H:%M', 'chart_short_time_format' => '%H:%M',
'chart_short_time_format' => '%H:%M', 'warning_notifications_disabled_sms' => 'SMS-meddelande är avstängda.',
'warning_notifications_disabled_sms' => 'SMS-meddelande är avstängda.', 'warning_notifications_disabled_email' => 'Email-meddelande är avstängda.',
'warning_notifications_disabled_email' => 'Email-meddelande är avstängda.', 'warning_notifications_disabled_pushover' => 'Pushover-meddelande är avstängda.',
'warning_notifications_disabled_pushover' => 'Pushover-meddelande är avstängda.', 'error_server_no_match' => 'Server kan inte hittas.',
'error_server_no_match' => 'Server kan inte hittas.', 'error_server_label_bad_length' => 'Namn måste vara mellan 1 och 255 tecken.',
'error_server_label_bad_length' => 'Namn måste vara mellan 1 och 255 tecken.', 'error_server_ip_bad_length' => 'Domän / IP måste vara mellan 1 och 255 tecken.',
'error_server_ip_bad_length' => 'Domän / IP måste vara mellan 1 och 255 tecken.', 'error_server_ip_bad_service' => 'IP-adressen är ogiltig.',
'error_server_ip_bad_service' => 'IP-adressen är ogiltig.', 'error_server_ip_bad_website' => 'URL:en är ogiltig.',
'error_server_ip_bad_website' => 'URL:en är ogiltig.', 'error_server_type_invalid' => 'Vald servertyp är ogiltig.',
'error_server_type_invalid' => 'Vald servertyp är ogiltig.', 'error_server_warning_threshold_invalid' => 'Varningströskel skall vara ett heltal större än 0.',
'error_server_warning_threshold_invalid' => 'Varningströskel skall vara ett heltal större än 0.', ),
), 'config' => array(
'config' => array( 'general' => 'Allmänt',
'general' => 'Allmänt', 'language' => 'Språk',
'language' => 'Språk', 'show_update' => 'Sök efter uppdateringar?',
'show_update' => 'Sök efter uppdateringar?', 'email_status' => 'Tillåt email',
'email_status' => 'Tillåt email', 'email_from_email' => 'Email avsändaradress',
'email_from_email' => 'Email avsändaradress', 'email_from_name' => 'Email från namn',
'email_from_name' => 'Email från namn', 'email_smtp' => 'Aktivera SMTP',
'email_smtp' => 'Aktivera SMTP', 'email_smtp_host' => 'SMTP värd',
'email_smtp_host' => 'SMTP värd', 'email_smtp_port' => 'SMTP port',
'email_smtp_port' => 'SMTP port', 'email_smtp_security' => 'SMTP säkerhet',
'email_smtp_security' => 'SMTP säkerhet', 'email_smtp_security_none' => 'Ingen',
'email_smtp_security_none' => 'Ingen', 'email_smtp_username' => 'SMTP användarnamn',
'email_smtp_username' => 'SMTP användarnamn', 'email_smtp_password' => 'SMTP lösenord',
'email_smtp_password' => 'SMTP lösenord', 'email_smtp_noauth' => 'Lämna blank för att inte autentisera',
'email_smtp_noauth' => 'Lämna blank för att inte autentisera', 'sms_status' => 'Tillåt SMS',
'sms_status' => 'Tillåt SMS', 'sms_gateway' => 'Gateway för SMS',
'sms_gateway' => 'Gateway för SMS', 'sms_gateway_username' => 'Gateway användarnamn',
'sms_gateway_username' => 'Gateway användarnamn', 'sms_gateway_password' => 'Gateway lösenord',
'sms_gateway_password' => 'Gateway lösenord', 'sms_from' => 'Avsändarens telefonnummer',
'sms_from' => 'Avsändarens telefonnummer', 'pushover_status' => 'Tillåt Pushover-meddelande',
'pushover_status' => 'Tillåt Pushover-meddelande', 'pushover_description' => 'Pushover är en tjänst som skickar meddelande i realtid. Se <a
'pushover_description' => 'Pushover är en tjänst som skickar meddelande i realtid. Se <a href="https://pushover.net/">deras webbsida</a> för mer info.', href="https://pushover.net/" target="_blank">deras webbsida</a> för mer info.',
'pushover_clone_app' => 'Klicka här för att skapa din Pushover app', 'pushover_clone_app' => 'Klicka här för att skapa din Pushover app',
'pushover_api_token' => 'Pushover App API Token', 'pushover_api_token' => 'Pushover App API Token',
'pushover_api_token_description' => 'Innan du kan använda Pushover behöver du <a href="%1$s" target="_blank" rel="noopener">registrera en App</a> på deras webbsida och skriva in App API Token här.', 'pushover_api_token_description' => 'Innan du kan använda Pushover behöver du <a href="%1$s" target="_blank"
'alert_type' => 'Välj när du vill bli meddelad.', rel="noopener">registrera en App</a> deras webbsida och skriva in App
'alert_type_description' => '<b>Statusförändring:</b> '. API Token här.',
'Du får ett meddelande när status ändras. Så från online -> offline eller offline -> online.<br>'. 'alert_type' => 'Välj när du vill bli meddelad.',
'<br /><b>Offline:</b> '. 'alert_type_description' => '<b>Statusförändring:</b> Du får ett meddelande när status ändras. från
'Du får ett meddelande när en server går offline *FÖR FÖRSTA GÅNGEN* Exempelvis, '. online -> offline eller offline -> online.<br><br /><b>Offline:</b> Du får ett
'ditt cronjob körs var 15 minut och din server går ned kl 1 och är nere till kl 6. '. meddelande när en server går offline *FÖR FÖRSTA GÅNGEN* Exempelvis, ditt
'Du kommer få 1 meddelande kl 1 och inga mer.<br>'. cronjob körs var 15 minut och din server går ned kl 1 och är nere till kl 6.
'<br><b>Alltid:</b> '. Du kommer 1 meddelande kl 1 och inga mer.<br><br><b>Alltid:</b> Du kommer
'Du kommer få ett meddelande varje gång kontrollen görs, även om servern har varit offline under en längre tid.', ett meddelande varje gång kontrollen görs, även om servern har varit offline
'alert_type_status' => 'Statusförändring', under en längre tid.',
'alert_type_offline' => 'Offline', 'alert_type_status' => 'Statusförändring',
'alert_type_always' => 'Alltid', 'alert_type_offline' => 'Offline',
'log_status' => 'Statusloggning', 'alert_type_always' => 'Alltid',
'log_status_description' => 'Om statusloggning är TRUE, kommer alla händelser som triggar ett meddelande att loggas.', 'log_status' => 'Statusloggning',
'log_email' => 'Logga email', 'log_status_description' => 'Om statusloggning är TRUE, kommer alla händelser som triggar ett meddelande att
'log_sms' => 'Logga SMS', loggas.',
'log_pushover' => 'Logga Pushover-meddelande', 'log_email' => 'Logga email',
'updated' => 'Inställningarna har uppdaterats.', 'log_sms' => 'Logga SMS',
'tab_email' => 'Email', 'log_pushover' => 'Logga Pushover-meddelande',
'tab_sms' => 'SMS', 'updated' => 'Inställningarna har uppdaterats.',
'tab_pushover' => 'Pushover', 'tab_email' => 'Email',
'settings_email' => 'Email-inställningar', 'tab_sms' => 'SMS',
'settings_sms' => 'SMS-inställningar', 'tab_pushover' => 'Pushover',
'settings_pushover' => 'Pushover-inställningar', 'settings_email' => 'Email-inställningar',
'settings_notification' => 'Meddelande-inställningar', 'settings_sms' => 'SMS-inställningar',
'settings_log' => 'Logg-inställningar', 'settings_pushover' => 'Pushover-inställningar',
'auto_refresh' => 'Auto-uppdatera', 'settings_notification' => 'Meddelande-inställningar',
'auto_refresh_description' => 'settings_log' => 'Logg-inställningar',
'Auto-uppdatera status-sidan.<br>'. 'auto_refresh' => 'Auto-uppdatera',
'<span class="small">'. 'auto_refresh_description' => 'Auto-uppdatera status-sidan.<br><span class="small">Tid i sekunder, om "0"
'Tid i sekunder, om "0" så uppdateras sidan inte automatiskt.'. uppdateras sidan inte automatiskt.</span>',
'</span>', 'seconds' => 'sekunder',
'seconds' => 'sekunder', 'test' => 'Test',
'test' => 'Test', 'test_email' => 'Ett emial kommer skickas till adressen i din profil.',
'test_email' => 'Ett emial kommer skickas till adressen i din profil.', 'test_sms' => 'Ett SMS kommer skickas till mobilnumret i din profil.',
'test_sms' => 'Ett SMS kommer skickas till mobilnumret i din profil.', 'test_pushover' => 'Ett Pushover-meddelande kommer skickas till "user key/device" i din profil.',
'test_pushover' => 'Ett Pushover-meddelande kommer skickas till "user key/device" i din profil.', 'send' => 'Skicka',
'send' => 'Skicka', 'test_subject' => 'Test',
'test_subject' => 'Test', 'test_message' => 'Testmeddelande',
'test_message' => 'Testmeddelande', 'email_sent' => 'Email skickat',
'email_sent' => 'Email skickat', 'email_error' => 'Sändning av email misslyckades',
'email_error' => 'Sändning av email misslyckades', 'sms_sent' => 'Sms skickat',
'sms_sent' => 'Sms skickat', 'sms_error' => 'Sändning av SMS misslyckades. %s',
'sms_error' => 'Sändning av SMS misslyckades. %s', 'sms_error_nomobile' => 'Kan inte skicka test-SMS: det finns inget giltigt mobilnummer i din profil.',
'sms_error_nomobile' => 'Kan inte skicka test-SMS: det finns inget giltigt mobilnummer i din profil.', 'pushover_sent' => 'Pushover-meddelande skickat',
'pushover_sent' => 'Pushover-meddelande skickat', 'pushover_error' => 'Ett fel uppstod vid sändning av Pushover-meddelande: %s',
'pushover_error' => 'Ett fel uppstod vid sändning av Pushover-meddelande: %s', 'pushover_error_noapp' => 'Kan inte skicka test-meddelande: Ingen Pushover App API token hittades i gemensamma
'pushover_error_noapp' => 'Kan inte skicka test-meddelande: Ingen Pushover App API token hittades i gemensamma inställningar.', inställningar.',
'pushover_error_nokey' => 'Kan inte skicka test-meddelande: Ingen Pushover key finns i din profil.', 'pushover_error_nokey' => 'Kan inte skicka test-meddelande: Ingen Pushover key finns i din profil.',
'log_retention_period' => 'Loggar sparas', 'log_retention_period' => 'Loggar sparas',
'log_retention_period_description' => 'Antal dagar loggar över meddelande och uptime sparas. 0 innebär att loggrensning är avstängd.', 'log_retention_period_description' => 'Antal dagar loggar över meddelande och uptime sparas. 0 innebär att
'log_retention_days' => 'dagar', loggrensning är avstängd.',
), 'log_retention_days' => 'dagar',
// for newlines in the email messages use <br> ),
'notifications' => array( 'notifications' => array(
'off_sms' => 'Server \'%LABEL%\' är NERE: ip=%IP%, port=%PORT%. Fel=%ERROR%', 'off_sms' => 'Server \'%LABEL%\' är NERE: ip=%IP%, port=%PORT%. Fel=%ERROR%',
'off_email_subject' => 'VIKTIGT: Server \'%LABEL%\' är NERE', 'off_email_subject' => 'VIKTIGT: Server \'%LABEL%\' är NERE',
'off_email_body' => "Kunde inte ansluta till följande server:<br><br>Server: %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>Fel: %ERROR%<br>Tid: %DATE%", 'off_email_body' => 'Kunde inte ansluta till följande server:<br><br>Server: %LABEL%<br>IP: %IP%<br>Port:
'off_pushover_title' => 'Server \'%LABEL%\' är NERE', %PORT%<br>Fel: %ERROR%<br>Tid: %DATE%',
'off_pushover_message' => "Kunde inte ansluta till följande server:<br><br>Server: %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>Fel: %ERROR%<br>Tid: %DATE%", 'off_pushover_title' => 'Server \'%LABEL%\' är NERE',
'on_sms' => 'Server \'%LABEL%\' är UPPE: ip=%IP%, port=%PORT%, it was down for %LAST_OFFLINE_DURATION%', 'off_pushover_message' => 'Kunde inte ansluta till följande server:<br><br>Server: %LABEL%<br>IP:
'on_email_subject' => 'VIKTIGT: Server \'%LABEL%\' är UPPE', %IP%<br>Port: %PORT%<br>Fel: %ERROR%<br>Tid: %DATE%',
'on_email_body' => "Server '%LABEL%' är uppe igen, it was down for %LAST_OFFLINE_DURATION%:<br><br>Server: %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>Tid: %DATE%", 'on_sms' => 'Server \'%LABEL%\' är UPPE: ip=%IP%, port=%PORT%, it was down for %LAST_OFFLINE_DURATION%',
'on_pushover_title' => 'Server \'%LABEL%\' är UPPE', 'on_email_subject' => 'VIKTIGT: Server \'%LABEL%\' är UPPE',
'on_pushover_message' => 'Server \'%LABEL%\' är uppe igen, it was down for %LAST_OFFLINE_DURATION%:<br><br>Server: %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>Tid: %DATE%', 'on_email_body' => 'Server \'%LABEL%\' är uppe igen, it was down for %LAST_OFFLINE_DURATION%:<br><br>Server:
), %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>Tid: %DATE%',
'login' => array( 'on_pushover_title' => 'Server \'%LABEL%\' är UPPE',
'welcome_usermenu' => 'Välkommen, %user_name%', 'on_pushover_message' => 'Server \'%LABEL%\' är uppe igen, it was down for
'title_sign_in' => 'Logga in', %LAST_OFFLINE_DURATION%:<br><br>Server: %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>Tid:
'title_forgot' => 'Glömt ditt lösenord?', %DATE%',
'title_reset' => 'Återställ ditt lösenord', ),
'submit' => 'Skicka', 'login' => array(
'remember_me' => 'Kom ihåg mig', 'welcome_usermenu' => 'Välkommen, %user_name%',
'login' => 'Logga in', 'title_sign_in' => 'Logga in',
'logout' => 'Logga ut', 'title_forgot' => 'Glömt ditt lösenord?',
'username' => 'Användarnamn', 'title_reset' => 'Återställ ditt lösenord',
'password' => 'Lösenord', 'submit' => 'Skicka',
'password_repeat' => 'Upprepa lösenord', 'remember_me' => 'Kom ihåg mig',
'password_forgot' => 'Glömt lösenord?', 'login' => 'Logga in',
'password_reset' => 'Återställ lösenord', 'logout' => 'Logga ut',
'password_reset_email_subject' => 'Password reset for PHP Server Monitor', 'username' => 'Användarnamn',
'password_reset_email_body' => 'Anv&auml;nd f&ouml;ljande l&auml;nk f&ouml;r att &aring;terst&auml;lla ditt l&ouml;senord. T&auml;nk p&aring; att l&auml;nken bara &auml;r giltig 1 timme.<br><br>%link%', 'password' => 'Lösenord',
'error_user_incorrect' => 'Användaren kunde inte hittas.', 'password_repeat' => 'Upprepa lösenord',
'error_login_incorrect' => 'Informationen är felaktig.', 'password_forgot' => 'Glömt lösenord?',
'error_login_passwords_nomatch' => 'Lösenorden stämmer inte överens.', 'password_reset' => 'Återställ lösenord',
'error_reset_invalid_link' => 'Reset-länken är ogiltig.', 'password_reset_email_subject' => 'Password reset for PHP Server Monitor',
'success_password_forgot' => 'Ett email med information om hur du nollställer ditt lösenord har skickats.', 'password_reset_email_body' => 'Anv&auml;nd f&ouml;ljande l&auml;nk f&ouml;r att &aring;terst&auml;lla ditt
'success_password_reset' => 'Ditt lösenord har nollställts. Var god logga in.', l&ouml;senord. T&auml;nk p&aring; att l&auml;nken bara &auml;r giltig 1
), timme.<br><br>%link%',
'error' => array( 'error_user_incorrect' => 'Användaren kunde inte hittas.',
'401_unauthorized' => 'Unauthorized', 'error_login_incorrect' => 'Informationen är felaktig.',
'401_unauthorized_description' => 'You do not have the privileges to view this page.', 'error_login_passwords_nomatch' => 'Lösenorden stämmer inte överens.',
), 'error_reset_invalid_link' => 'Reset-länken är ogiltig.',
'success_password_forgot' => 'Ett email med information om hur du nollställer ditt lösenord har skickats.',
'success_password_reset' => 'Ditt lösenord har nollställts. Var god logga in.',
),
'error' => array(
'401_unauthorized' => 'Unauthorized',
'401_unauthorized_description' => 'You do not have the privileges to view this page.',
),
); );

View File

@ -1,4 +1,5 @@
<?php <?php
/** /**
* PHP Server Monitor * PHP Server Monitor
* Monitor your servers and websites. * Monitor your servers and websites.
@ -26,284 +27,295 @@
**/ **/
$sm_lang = array( $sm_lang = array(
'name' => 'Türkçe - Turkish', 'name' => 'Türkçe - Turkish',
'locale' => array('tr_TR.UTF-8', 'tr_TR', 'turkish', 'turkish-tr'), 'locale' => array(
'locale_tag' => 'tr', '0' => 'tr_TR.UTF-8',
'locale_dir' => 'ltr', '1' => 'tr_TR',
'system' => array( '2' => 'turkish',
'title' => 'Server Monitor', '3' => 'turkish-tr',
'install' => 'Yükle', ),
'action' => 'Aksiyon', 'locale_tag' => 'tr',
'save' => 'Kaydet', 'locale_dir' => 'ltr',
'edit' => 'Düzenle', 'system' => array(
'delete' => 'Sil', 'title' => 'Server Monitor',
'date' => 'Tarih', 'install' => 'Yükle',
'message' => 'Mesaj', 'action' => 'Aksiyon',
'yes' => 'Evet', 'save' => 'Kaydet',
'no' => 'Hayır', 'edit' => 'Düzenle',
'insert' => 'Ekle', 'delete' => 'Sil',
'add_new' => 'Yeni ekle', 'date' => 'Tarih',
'update_available' => '({version}) sürümü şu anda <a href="https://github.com/phpservermon/phpservermon/releases/latest" target="_blank" rel="noopener">http://www.phpservermonitor.org</a> adresindedir.', 'message' => 'Mesaj',
'back_to_top' => 'Başa Dön', 'yes' => 'Evet',
'go_back' => 'Geri Git', 'no' => 'Hayır',
'ok' => 'Tamam', 'insert' => 'Ekle',
'cancel' => 'İptal', 'add_new' => 'Yeni ekle',
// date/time format according the strftime php function format parameter http://php.net/manual/function.strftime.php 'update_available' => '({version}) sürümü şu anda <a
'short_day_format' => '%B %e', href="https://github.com/phpservermon/phpservermon/releases/latest" target="_blank"
'long_day_format' => '%B %e, %Y', rel="noopener">http://www.phpservermonitor.org</a> adresindedir.',
'yesterday_format' => 'Yesterday at %k:%M', 'back_to_top' => 'Başa Dön',
'other_day_format' => '%A at %k:%M', 'go_back' => 'Geri Git',
'never' => 'Hiç', 'ok' => 'Tamam',
'hours_ago' => '%d saat önce', 'cancel' => 'İptal',
'an_hour_ago' => 'yaklaşık bir saat önce', 'short_day_format' => '%B %e',
'minutes_ago' => '%d dakika önce', 'long_day_format' => '%B %e, %Y',
'a_minute_ago' => 'yaklaşık bir dakika önce', 'yesterday_format' => 'Yesterday at %k:%M',
'seconds_ago' => '%d saniye önce', 'other_day_format' => '%A at %k:%M',
'a_second_ago' => 'bir saniye önce', 'never' => 'Hiç',
'year' => 'year', 'hours_ago' => '%d saat önce',
'years' => 'years', 'an_hour_ago' => 'yaklaşık bir saat önce',
'month' => 'month', 'minutes_ago' => '%d dakika önce',
'months' => 'months', 'a_minute_ago' => 'yaklaşık bir dakika önce',
'day' => 'day', 'seconds_ago' => '%d saniye önce',
'days' => 'days', 'a_second_ago' => 'bir saniye önce',
'hour' => 'hour', ),
'hours' => 'hours', 'menu' => array(
'minute' => 'minute', 'config' => 'Ayarlar',
'minutes' => 'minutes', 'server' => 'Sunucular',
'second' => 'second', 'server_log' => 'Log',
'seconds' => 'seconds', 'server_status' => 'Durum',
), 'server_update' => 'Güncelle',
'menu' => array( 'user' => 'Kullanıcılar',
'config' => 'Ayarlar', 'help' => 'Yardım',
'server' => 'Sunucular', ),
'server_log' => 'Log', 'users' => array(
'server_status' => 'Durum', 'user' => 'Kullanıcı',
'server_update' => 'Güncelle', 'name' => 'İsim',
'user' => 'Kullanıcılar', 'user_name' => 'Kullanıcı adı',
'help' => 'Yardım', 'password' => 'Şifre',
), 'password_repeat' => 'Şifre tekrarı',
'users' => array( 'password_leave_blank' => 'Değiştirmemek için boş bırakın',
'user' => 'Kullanıcı', 'level' => 'Seviye',
'name' => 'İsim', 'level_10' => 'Yönetici',
'user_name' => 'Kullanıcı adı', 'level_20' => 'Kullanıcı',
'password' => 'Şifre', 'level_description' => '<b>Yöneticiler</b> tüm yetkilere sahiptir: Onlar sunucuları, kullanıcıları
'password_repeat' => 'Şifre tekrarı', yönetebilir genel ayarlamaları düzenleyebilirler.<br> <b>Kullanıcılar</b> sadece
'password_leave_blank' => 'Değiştirmemek için boş bırakın', görüntüleyebilir ve onlara atanmış sunucu güncelleyicileri
'level' => 'Seviye', çalıştırabilirler.',
'level_10' => 'Yönetici', 'mobile' => 'Mobil',
'level_20' => 'Kullanıcı', 'email' => 'E-posta',
'level_description' => '<b>Yöneticiler</b> tüm yetkilere sahiptir: Onlar sunucuları, kullanıcıları yönetebilir genel ayarlamaları düzenleyebilirler.<br> <b>Kullanıcılar</b> sadece görüntüleyebilir ve onlara atanmış sunucu güncelleyicileri çalıştırabilirler.', 'pushover' => 'Pushover',
'mobile' => 'Mobil', 'pushover_description' => 'Pushover gerçek zamanlı bildirim alabilmek için bir servistir. Daha fazla bilgi
'email' => 'E-posta', için <a href="https://pushover.net/" target="_blank">sitesine</a> bakabilirsiniz.',
'pushover' => 'Pushover', 'pushover_key' => 'Pushover Anahtarı',
'pushover_description' => 'Pushover gerçek zamanlı bildirim alabilmek için bir servistir. Daha fazla bilgi için <a href="https://pushover.net/">sitesine</a> bakabilirsiniz.', 'pushover_device' => 'Pushover Aracı',
'pushover_key' => 'Pushover Anahtarı', 'pushover_device_description' => 'Mesajın gönderileceği cihazın adı. Tüm cihazlara göndermek için boş
'pushover_device' => 'Pushover Aracı', bırakın.',
'pushover_device_description' => 'Mesajın gönderileceği cihazın adı. Tüm cihazlara göndermek için boş bırakın.', 'delete_title' => 'Kullanıcıyı Sil',
'delete_title' => 'Kullanıcıyı Sil', 'delete_message' => '\'%1\' kullanıcısını silmek istediğinize emin misiniz?',
'delete_message' => '\'%1\' kullanıcısını silmek istediğinize emin misiniz?', 'deleted' => 'Kullanıcı silindi.',
'deleted' => 'Kullanıcı silindi.', 'updated' => 'Kullanıcı güncellendi.',
'updated' => 'Kullanıcı güncellendi.', 'inserted' => 'Kullanıcı eklendi.',
'inserted' => 'Kullanıcı eklendi.', 'profile' => 'Profil',
'profile' => 'Profil', 'profile_updated' => 'Profiliniz güncellendi.',
'profile_updated' => 'Profiliniz güncellendi.', 'error_user_name_bad_length' => 'Kullanıcı adları en az 2 ve en fazla 64 karakter uzunluğunda olmalıdır.',
'error_user_name_bad_length' => 'Kullanıcı adları en az 2 ve en fazla 64 karakter uzunluğunda olmalıdır.', 'error_user_name_invalid' => 'Kullanıcı adları sadece harf (a-z, A-Z), sayı (0-9), noktalar (.) and alttan
'error_user_name_invalid' => 'Kullanıcı adları sadece harf (a-z, A-Z), sayı (0-9), noktalar (.) and alttan çizgi (_) karakterlerini içerebilir.', çizgi (_) karakterlerini içerebilir.',
'error_user_name_exists' => 'Bu kullanıcı adı daha önce alınmış.', 'error_user_name_exists' => 'Bu kullanıcı adı daha önce alınmış.',
'error_user_email_bad_length' => 'E-posta adresi en az 5 ve en fazla 255 karakter uzunluğunda olmalıdır.', 'error_user_email_bad_length' => 'E-posta adresi en az 5 ve en fazla 255 karakter uzunluğunda olmalıdır.',
'error_user_email_invalid' => 'Geçersiz e-posta adresi.', 'error_user_email_invalid' => 'Geçersiz e-posta adresi.',
'error_user_level_invalid' => 'Verilen kullanıcı seviyesi geçersiz.', 'error_user_level_invalid' => 'Verilen kullanıcı seviyesi geçersiz.',
'error_user_no_match' => 'Kullanıcı veritabanında bulunamadı.', 'error_user_no_match' => 'Kullanıcı veritabanında bulunamadı.',
'error_user_password_invalid' => 'Geçersiz bir şifre girdiniz.', 'error_user_password_invalid' => 'Geçersiz bir şifre girdiniz.',
'error_user_password_no_match' => 'Şifreler birbiri ile eşleşmedi.', 'error_user_password_no_match' => 'Şifreler birbiri ile eşleşmedi.',
), ),
'log' => array( 'log' => array(
'title' => 'Log Girdileri', 'title' => 'Log Girdileri',
'type' => 'Tip', 'type' => 'Tip',
'status' => 'Durum', 'status' => 'Durum',
'email' => 'E-posta', 'email' => 'E-posta',
'sms' => 'SMS', 'sms' => 'SMS',
'pushover' => 'Pushover', 'pushover' => 'Pushover',
'no_logs' => 'Kayıt yok.', 'no_logs' => 'Kayıt yok.',
'clear' => 'Günlüğü temizle', 'clear' => 'Günlüğü temizle',
'delete_title' => 'Günlüğü temizle', 'delete_title' => 'Günlüğü temizle',
'delete_message' => 'Tüm günlükleri silmek istediğinizden emin misiniz?', 'delete_message' => 'Tüm günlükleri silmek istediğinizden emin misiniz?',
), ),
'servers' => array( 'servers' => array(
'server' => 'Sunucu', 'server' => 'Sunucu',
'status' => 'Durum', 'status' => 'Durum',
'label' => 'Etiket', 'label' => 'Etiket',
'domain' => 'Domain/IP', 'domain' => 'Domain/IP',
'timeout' => 'Zaman Aşımı', 'timeout' => 'Zaman Aşımı',
'timeout_description' => 'Sunucunun cevap vermesini beklenecek saniye.', 'timeout_description' => 'Sunucunun cevap vermesini beklenecek saniye.',
'port' => 'Port', 'port' => 'Port',
'type' => 'Tip', 'type' => 'Tip',
'type_website' => 'Website', 'type_website' => 'Website',
'type_service' => 'Servis', 'type_service' => 'Servis',
'pattern' => 'String/Pattern ara', 'pattern' => 'String/Pattern ara',
'pattern_description' => 'Bu pattern web sitenizde bulunamaz ise, sunucu offline olarak işaretlenecek. Regular expression\'a izin verilmiştir.', 'pattern_description' => 'Bu pattern web sitenizde bulunamaz ise, sunucu offline olarak işaretlenecek.
'last_check' => 'Son kontrol', Regular expression\'a izin verilmiştir.',
'last_online' => 'Son çevrimiçi zamanı', 'last_check' => 'Son kontrol',
'last_offline' => 'Last offline', 'last_online' => 'Son çevrimiçi zamanı',
'monitoring' => 'Monitoring', 'last_offline' => 'Last offline',
'no_monitoring' => 'No monitoring', 'monitoring' => 'Monitoring',
'email' => 'E-posta', 'no_monitoring' => 'No monitoring',
'send_email' => 'E-posta Gönder', 'email' => 'E-posta',
'sms' => 'SMS', 'send_email' => 'E-posta Gönder',
'send_sms' => 'SMS Gönder', 'sms' => 'SMS',
'pushover' => 'Pushover', 'send_sms' => 'SMS Gönder',
'users' => 'Kullanıcılar', 'pushover' => 'Pushover',
'delete_title' => 'Sunucu Sil', 'users' => 'Kullanıcılar',
'delete_message' => '\'%1\' sunucusunu silmek istediğinize emin misiniz?', 'delete_title' => 'Sunucu Sil',
'deleted' => 'Sunucu silindi.', 'delete_message' => '\'%1\' sunucusunu silmek istediğinize emin misiniz?',
'updated' => 'Sunucu güncellendi.', 'deleted' => 'Sunucu silindi.',
'inserted' => 'Sunucu eklendi.', 'updated' => 'Sunucu güncellendi.',
'latency' => 'Gecikme', 'inserted' => 'Sunucu eklendi.',
'latency_max' => 'Gecikme (Azami)', 'latency' => 'Gecikme',
'latency_min' => 'Gecikme (Asgari)', 'latency_max' => 'Gecikme (Azami)',
'latency_avg' => 'Gecikme (Ortalama)', 'latency_min' => 'Gecikme (Asgari)',
'uptime' => 'Uptime', 'latency_avg' => 'Gecikme (Ortalama)',
'year' => 'Yıl', 'uptime' => 'Uptime',
'month' => 'Ay', 'year' => 'Yıl',
'week' => 'Hafta', 'month' => 'Ay',
'day' => 'Gün', 'week' => 'Hafta',
'hour' => 'Saat', 'day' => 'Gün',
'warning_threshold' => 'Uyarı Eşiği', 'hour' => 'Saat',
'warning_threshold_description' => 'Number of failed checks required before it is marked offline.', 'warning_threshold' => 'Uyarı Eşiği',
'chart_last_week' => 'Geçen Hafta', 'warning_threshold_description' => 'Number of failed checks required before it is marked offline.',
'chart_history' => 'Geçmiş', 'chart_last_week' => 'Geçen Hafta',
// Charts date format according jqPlot date format http://www.jqplot.com/docs/files/plugins/jqplot-dateAxisRenderer-js.html 'chart_history' => 'Geçmiş',
'chart_day_format' => '%Y-%m-%d', 'chart_day_format' => '%Y-%m-%d',
'chart_long_date_format' => '%Y-%m-%d %H:%M:%S', 'chart_long_date_format' => '%Y-%m-%d %H:%M:%S',
'chart_short_date_format' => '%m/%d %H:%M', 'chart_short_date_format' => '%m/%d %H:%M',
'chart_short_time_format' => '%H:%M', 'chart_short_time_format' => '%H:%M',
'warning_notifications_disabled_sms' => 'SMS bildirimi devre dışı.', 'warning_notifications_disabled_sms' => 'SMS bildirimi devre dışı.',
'warning_notifications_disabled_email' => 'E-posta bildirimi devre dışı.', 'warning_notifications_disabled_email' => 'E-posta bildirimi devre dışı.',
'warning_notifications_disabled_pushover' => 'Pushover bildirimi devre dışı.', 'warning_notifications_disabled_pushover' => 'Pushover bildirimi devre dışı.',
'error_server_no_match' => 'Sunucu bulunamadı.', 'error_server_no_match' => 'Sunucu bulunamadı.',
'error_server_label_bad_length' => 'Etiken en az 1 ve en çok 255 karakter olmalıdır.', 'error_server_label_bad_length' => 'Etiken en az 1 ve en çok 255 karakter olmalıdır.',
'error_server_ip_bad_length' => 'Alan adı / IP en az 1 ve en fazla 255 karakter olmalıdır.', 'error_server_ip_bad_length' => 'Alan adı / IP en az 1 ve en fazla 255 karakter olmalıdır.',
'error_server_ip_bad_service' => 'IP adresi geçerli değil.', 'error_server_ip_bad_service' => 'IP adresi geçerli değil.',
'error_server_ip_bad_website' => 'Site adresi geçerli değil.', 'error_server_ip_bad_website' => 'Site adresi geçerli değil.',
'error_server_type_invalid' => 'Seçilen sunucu tipi geçerli değil.', 'error_server_type_invalid' => 'Seçilen sunucu tipi geçerli değil.',
'error_server_warning_threshold_invalid' => 'Hata eşiği 0\'dan büyük bir tam sayı olmalıdır.', 'error_server_warning_threshold_invalid' => 'Hata eşiği 0\'dan büyük bir tam sayı olmalıdır.',
), ),
'config' => array( 'config' => array(
'general' => 'Genel', 'general' => 'Genel',
'language' => 'Dil', 'language' => 'Dil',
'show_update' => 'Güncellemeleri kontrol et?', 'show_update' => 'Güncellemeleri kontrol et?',
'email_status' => 'E-posta gönderimine izin ver', 'email_status' => 'E-posta gönderimine izin ver',
'email_from_email' => 'Gönderilen e-posta adresi', 'email_from_email' => 'Gönderilen e-posta adresi',
'email_from_name' => 'E-posta adresinde görünecek isim', 'email_from_name' => 'E-posta adresinde görünecek isim',
'email_smtp' => 'SMTP\'yi aktif et', 'email_smtp' => 'SMTP\'yi aktif et',
'email_smtp_host' => 'SMTP sunucusu', 'email_smtp_host' => 'SMTP sunucusu',
'email_smtp_port' => 'SMTP port', 'email_smtp_port' => 'SMTP port',
'email_smtp_security' => 'SMTP security', 'email_smtp_security' => 'SMTP security',
'email_smtp_security_none' => 'None', 'email_smtp_security_none' => 'None',
'email_smtp_username' => 'SMTP kullanıcı adı', 'email_smtp_username' => 'SMTP kullanıcı adı',
'email_smtp_password' => 'SMTP şifre', 'email_smtp_password' => 'SMTP şifre',
'email_smtp_noauth' => 'Doğrulama yapmamak için boş bırakın', 'email_smtp_noauth' => 'Doğrulama yapmamak için boş bırakın',
'sms_status' => 'SMS mesaj göndermeye izin ver', 'sms_status' => 'SMS mesaj göndermeye izin ver',
'sms_gateway' => 'Mesaj göndermek için servisi seçin', 'sms_gateway' => 'Mesaj göndermek için servisi seçin',
'sms_gateway_username' => 'Servis kullanıcı adı', 'sms_gateway_username' => 'Servis kullanıcı adı',
'sms_gateway_password' => 'Servis şifresi', 'sms_gateway_password' => 'Servis şifresi',
'sms_from' => 'Gönderen numarası', 'sms_from' => 'Gönderen numarası',
'pushover_status' => 'Pushover mesaj gönderimine izin ver', 'pushover_status' => 'Pushover mesaj gönderimine izin ver',
'pushover_description' => 'Pushover gerçek zamanlı bildirim alabilmek için bir servistir. Daha fazla bilgi için <a href="https://pushover.net/">sitesine</a> bakabilirsiniz.', 'pushover_description' => 'Pushover gerçek zamanlı bildirim alabilmek için bir servistir. Daha fazla bilgi
'pushover_clone_app' => 'Pushover uygulaması oluşturmak için buraya tıklayınız.', için <a href="https://pushover.net/" target="_blank">sitesine</a> bakabilirsiniz.',
'pushover_api_token' => 'Pushover Uygulaması API Token Bilgisi', 'pushover_clone_app' => 'Pushover uygulaması oluşturmak için buraya tıklayınız.',
'pushover_api_token_description' => 'Pushover kullanmadan önce, <a href="%1$s" target="_blank" rel="noopener">Pushover sitesi üzerinden</a> bir uygulama oluşturmalısınız ve API Token bilgilerini buraya yazmalısınız.', 'pushover_api_token' => 'Pushover Uygulaması API Token Bilgisi',
'alert_type' => 'Ne zaman uyarılmak istediğinizi seçin.', 'pushover_api_token_description' => 'Pushover kullanmadan önce, <a href="%1$s" target="_blank"
'alert_type_description' => '<b>Durum değişikliği:</b> '. rel="noopener">Pushover sitesi üzerinden</a> bir uygulama
'Sunucu durumu değişiklik durumunda bildirim alacaksınız. Sunucu çevrimiçi durumundan çevrimdışı durumuna veya çevrimdışı durumundan çevrim için durumuna geçtiğinde.<br>'. oluşturmalısınız ve API Token bilgilerini buraya yazmalısınız.',
'<br /><b>Çevrimdışı:</b> '. 'alert_type' => 'Ne zaman uyarılmak istediğinizi seçin.',
'Sunucu çevrim dışı duruma geçtiğinde bildirim alırsınız. *SADECE İLK GEÇTİĞİNDE*. Örneğin, '. 'alert_type_description' => '<b>Durum değişikliği:</b> Sunucu durumu değişiklik durumunda bildirim
'Cronjob her 15 dakikada bir çalışıyorsa ve sunucu 1\'de gidip 6\'ya kadar kapalı kalırsa. '. alacaksınız. Sunucu çevrimiçi durumundan çevrimdışı durumuna veya
'Sadece size saat 1\'de bildirim gönderilecektir.<br>'. çevrimdışı durumundan çevrim için durumuna geçtiğinde.<br><br
'<br><b>Daima:</b> '. /><b>Çevrimdışı:</b> Sunucu çevrim dışı duruma geçtiğinde bildirim
'Site çevrimdışı olduğu her zaman size bildirim gönderilecektir, site saatler boyunca kapalı kalse bile.', alırsınız. *SADECE İLK GEÇTİĞİNDE*. Örneğin, Cronjob her 15 dakikada
'alert_type_status' => 'Durum değişikliği', bir çalışıyorsa ve sunucu 1\'de gidip 6\'ya kadar kapalı kalırsa. Sadece
'alert_type_offline' => 'Çevrimdışı', size saat 1\'de bildirim gönderilecektir.<br><br><b>Daima:</b> Site
'alert_type_always' => 'Daima', çevrimdışı olduğu her zaman size bildirim gönderilecektir, site saatler
'log_status' => 'Log durumu', boyunca kapalı kalse bile.',
'log_status_description' => 'Eğer log durumu TRUE olarak işaretlenirse, bildirim ayarlarından geçen her olay log olarak tutulacaktır.', 'alert_type_status' => 'Durum değişikliği',
'log_email' => 'Log e-posta mesajı otomatik gönderilmiştir.', 'alert_type_offline' => 'Çevrimdışı',
'log_sms' => 'Log sms mesajı otomatik gönderilmiştir.', 'alert_type_always' => 'Daima',
'log_pushover' => 'Log pushover mesajı otomatik gönderilmiştir.', 'log_status' => 'Log durumu',
'updated' => 'Ayarlar güncellendi.', 'log_status_description' => 'Eğer log durumu TRUE olarak işaretlenirse, bildirim ayarlarından geçen her
'tab_email' => 'E-posta', olay log olarak tutulacaktır.',
'tab_sms' => 'SMS', 'log_email' => 'Log e-posta mesajı otomatik gönderilmiştir.',
'tab_pushover' => 'Pushover', 'log_sms' => 'Log sms mesajı otomatik gönderilmiştir.',
'settings_email' => 'E-posta ayarları', 'log_pushover' => 'Log pushover mesajı otomatik gönderilmiştir.',
'settings_sms' => 'Sms mesaj ayarları', 'updated' => 'Ayarlar güncellendi.',
'settings_pushover' => 'Pushover ayarları', 'tab_email' => 'E-posta',
'settings_notification' => 'Bildirim ayarları', 'tab_sms' => 'SMS',
'settings_log' => 'Log ayarları', 'tab_pushover' => 'Pushover',
'auto_refresh' => 'Otomatik Yenileme', 'settings_email' => 'E-posta ayarları',
'auto_refresh_description' => 'settings_sms' => 'Sms mesaj ayarları',
'Otomatik yenileme sunucu sayfası<br>'. 'settings_pushover' => 'Pushover ayarları',
'<span class="small">'. 'settings_notification' => 'Bildirim ayarları',
'Eğer sayfa yenilenmez ise.'. 'settings_log' => 'Log ayarları',
'</span>', 'auto_refresh' => 'Otomatik Yenileme',
'seconds' => 'saniye', 'auto_refresh_description' => 'Otomatik yenileme sunucu sayfası<br><span class="small">Eğer sayfa yenilenmez
'test' => 'Test', ise.</span>',
'test_email' => 'Profilinizde tanımladığınız e-posta adresinize bir e-posta gönderilecek.', 'seconds' => 'saniye',
'test_sms' => 'Profilinizde tanımladığınız numaranıza bir SMS mesajı gönderilecek.', 'test' => 'Test',
'test_pushover' => 'Profilinizde tanımladığını bilgiler üzerinden bir pushover bildirimi gönderilecek.', 'test_email' => 'Profilinizde tanımladığınız e-posta adresinize bir e-posta gönderilecek.',
'send' => 'Gönder', 'test_sms' => 'Profilinizde tanımladığınız numaranıza bir SMS mesajı gönderilecek.',
'test_subject' => 'Test', 'test_pushover' => 'Profilinizde tanımladığını bilgiler üzerinden bir pushover bildirimi gönderilecek.',
'test_message' => 'Test mesaj', 'send' => 'Gönder',
'email_sent' => 'E-posta gönderildi', 'test_subject' => 'Test',
'email_error' => 'E-posta gönderiminde hata.', 'test_message' => 'Test mesaj',
'sms_sent' => 'Sms gönderildi', 'email_sent' => 'E-posta gönderildi',
'sms_error' => 'SMS gönderiminde hata. %s', 'email_error' => 'E-posta gönderiminde hata.',
'sms_error_nomobile' => 'SMS gönderilemiyor: profilinizde geçerli bir telefon numarası yok.', 'sms_sent' => 'Sms gönderildi',
'pushover_sent' => 'Pushover bildirimi gönderildi', 'sms_error' => 'SMS gönderiminde hata. %s',
'pushover_error' => 'Pushover bildirimi gönderilirken bir hata meydana geldi: %s', 'sms_error_nomobile' => 'SMS gönderilemiyor: profilinizde geçerli bir telefon numarası yok.',
'pushover_error_noapp' => 'Test için bildirim gönderilemiyor: Pushover Uygulaması API token bilgisi bulunamadı.', 'pushover_sent' => 'Pushover bildirimi gönderildi',
'pushover_error_nokey' => 'Test için bildirim gönderilemiyor: Pushover key bilgisi profilinizde bulunamadı.', 'pushover_error' => 'Pushover bildirimi gönderilirken bir hata meydana geldi: %s',
'log_retention_period' => 'Log tutma süresi', 'pushover_error_noapp' => 'Test için bildirim gönderilemiyor: Pushover Uygulaması API token bilgisi
'log_retention_period_description' => 'Bildirim loglarının ve sunucunun çalışma zamanlarının arşivinin saklanması için gün sayısı. Logların temizlenmesini kapatmak için 0 giriniz.', bulunamadı.',
'log_retention_days' => 'gün', 'pushover_error_nokey' => 'Test için bildirim gönderilemiyor: Pushover key bilgisi profilinizde bulunamadı.',
), 'log_retention_period' => 'Log tutma süresi',
// for newlines in the email messages use <br> 'log_retention_period_description' => 'Bildirim loglarının ve sunucunun çalışma zamanlarının arşivinin
'notifications' => array( saklanması için gün sayısı. Logların temizlenmesini kapatmak
'off_sms' => '\'%LABEL%\' isimli sunucu KAPANDI: ip=%IP%, port=%PORT%. Error=%ERROR%', için 0 giriniz.',
'off_email_subject' => 'ÖNEMLİ: \'%LABEL%\' isimli sunucu KAPANDI.', 'log_retention_days' => 'gün',
'off_email_body' => "Aşağıdaki sunuculara erişim sağlanamıyor:<br><br>Sunucu: %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>Hata: %ERROR%<br>Tarih: %DATE%", ),
'off_pushover_title' => '\'%LABEL%\' isimli sunucu KAPANDI.', 'notifications' => array(
'off_pushover_message' => "Aşağıdaki nuculara erişim sağlanamıyor:<br><br>Sunucu: %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>Hata: %ERROR%<br>Tarih: %DATE%", 'off_sms' => '\'%LABEL%\' isimli sunucu KAPANDI: ip=%IP%, port=%PORT%. Error=%ERROR%',
'on_sms' => '\'%LABEL%\' isimli sunucu YAYINDA: ip=%IP%, port=%PORT%, it was down for %LAST_OFFLINE_DURATION%', 'off_email_subject' => 'ÖNEMLİ: \'%LABEL%\' isimli sunucu KAPANDI.',
'on_email_subject' => 'ÖNEMLİ:\'%LABEL%\' isimli sunucu YAYINDA.', 'off_email_body' => 'Aşağıdaki sunuculara erişim sağlanamıyor:<br><br>Sunucu: %LABEL%<br>IP:
'on_email_body' => "'%LABEL%' isimli sunucu tekrar yayında, it was down for %LAST_OFFLINE_DURATION%:<br><br>Sunucu: %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>Tarih: %DATE%", %IP%<br>Port: %PORT%<br>Hata: %ERROR%<br>Tarih: %DATE%',
'on_pushover_title' => '\'%LABEL%\' isimli sunucu YAYINDA', 'off_pushover_title' => '\'%LABEL%\' isimli sunucu KAPANDI.',
'on_pushover_message' => '\'%LABEL%\' isimli sunucu tekrar yayında, it was down for %LAST_OFFLINE_DURATION%:<br><br>Sunucu: %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>Tarih: %DATE%', 'off_pushover_message' => 'Aşağıdaki nuculara erişim sağlanamıyor:<br><br>Sunucu: %LABEL%<br>IP:
), %IP%<br>Port: %PORT%<br>Hata: %ERROR%<br>Tarih: %DATE%',
'login' => array( 'on_sms' => '\'%LABEL%\' isimli sunucu YAYINDA: ip=%IP%, port=%PORT%, it was down for %LAST_OFFLINE_DURATION%',
'welcome_usermenu' => 'Hoşgeldin, %user_name%', 'on_email_subject' => 'ÖNEMLİ:\'%LABEL%\' isimli sunucu YAYINDA.',
'title_sign_in' => 'Lütfen giriş yapın', 'on_email_body' => '\'%LABEL%\' isimli sunucu tekrar yayında, it was down for
'title_forgot' => 'Şifreni mi unuttun?', %LAST_OFFLINE_DURATION%:<br><br>Sunucu: %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>Tarih:
'title_reset' => 'Şifreni yenile', %DATE%',
'submit' => 'Gönder', 'on_pushover_title' => '\'%LABEL%\' isimli sunucu YAYINDA',
'remember_me' => 'Beni hatırla', 'on_pushover_message' => '\'%LABEL%\' isimli sunucu tekrar yayında, it was down for
'login' => 'Giriş yap', %LAST_OFFLINE_DURATION%:<br><br>Sunucu: %LABEL%<br>IP: %IP%<br>Port:
'logout' => ıkış yap', %PORT%<br>Tarih: %DATE%',
'username' => 'Kullanıcı adı', ),
'password' => 'Şifre', 'login' => array(
'password_repeat' => 'Şifre tekrarı', 'welcome_usermenu' => 'Hoşgeldin, %user_name%',
'password_forgot' => 'Şifreni mi unuttun?', 'title_sign_in' => 'Lütfen giriş yapın',
'password_reset' => 'Şifreni yenile', 'title_forgot' => 'Şifreni mi unuttun?',
'password_reset_email_subject' => 'PHP Server Monitor için şifreni yenile', 'title_reset' => 'Şifreni yenile',
'password_reset_email_body' => 'Aşağıdaki bağlantıyı kullanarak şifrenizi güncelleyiniz. Bağlantı 1 saat sonra geçerliliğini kaybedecektir.<br><br>%link%', 'submit' => 'Gönder',
'error_user_incorrect' => 'Kullanıcı adı bulunamadı.', 'remember_me' => 'Beni hatırla',
'error_login_incorrect' => 'Bilgi yanlış.', 'login' => 'Giriş yap',
'error_login_passwords_nomatch' => 'Şifreleriniz uyuşmuyor.', 'logout' => ıkış yap',
'error_reset_invalid_link' => 'Sağladığını sıfırlama bağlantısı geçersiz.', 'username' => 'Kullanıcı adı',
'success_password_forgot' => 'Şifrenizi yenilemeniz için gerekli bilgileri içeren bir e-posta gönderildi.', 'password' => 'Şifre',
'success_password_reset' => 'Şifreniz başarıyla yenilendi. Şimdi giriş yapın.', 'password_repeat' => 'Şifre tekrarı',
), 'password_forgot' => 'Şifreni mi unuttun?',
'error' => array( 'password_reset' => 'Şifreni yenile',
'401_unauthorized' => 'Yetkisiz', 'password_reset_email_subject' => 'PHP Server Monitor için şifreni yenile',
'401_unauthorized_description' => 'Bu sayfayı görüntülemek için yetkin yok.', 'password_reset_email_body' => 'Aşağıdaki bağlantıyı kullanarak şifrenizi güncelleyiniz. Bağlantı 1
), saat sonra geçerliliğini kaybedecektir.<br><br>%link%',
'error_user_incorrect' => 'Kullanıcı adı bulunamadı.',
'error_login_incorrect' => 'Bilgi yanlış.',
'error_login_passwords_nomatch' => 'Şifreleriniz uyuşmuyor.',
'error_reset_invalid_link' => 'Sağladığını sıfırlama bağlantısı geçersiz.',
'success_password_forgot' => 'Şifrenizi yenilemeniz için gerekli bilgileri içeren bir e-posta gönderildi.',
'success_password_reset' => 'Şifreniz başarıyla yenilendi. Şimdi giriş yapın.',
),
'error' => array(
'401_unauthorized' => 'Yetkisiz',
'401_unauthorized_description' => 'Bu sayfayı görüntülemek için yetkin yok.',
),
); );

537
src/lang/uk_UA.lang.php Normal file
View File

@ -0,0 +1,537 @@
<?php
/**
* PHP Server Monitor
* Monitor your servers and websites.
*
* This file is part of PHP Server Monitor.
* PHP Server Monitor is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* PHP Server Monitor is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with PHP Server Monitor. If not, see <http://www.gnu.org/licenses/>.
*
* @package phpservermon
* @author Oleksa Vyshnivsky <dying.escape@gmail.com>
* @copyright Copyright (c) 2008-2017 Pepijn Over <pep@mailbox.org>
* @license http://www.gnu.org/licenses/gpl.txt GNU GPL v3
* @version Release: @package_version@
* @link http://www.phpservermonitor.org/
**/
$sm_lang = array(
'name' => 'Українська — Ukrainian',
'locale' => array(
'0' => 'uk_UA.UTF-8',
'1' => 'uk_UA',
'2' => 'ukrainian',
),
'locale_tag' => 'uk',
'locale_dir' => 'ltr',
'system' => array(
'title' => 'Server Monitor',
'install' => 'Встановити',
'action' => 'Дія',
'save' => 'Зберегти',
'edit' => 'Редагувати',
'delete' => 'Видалити',
'view' => 'Перегляд',
'date' => 'Дата',
'message' => 'Повідомлення',
'yes' => 'Так',
'no' => 'Ні',
'insert' => 'Вставити',
'add_new' => 'Додати',
'update_available' => 'Доступна нова версія ({version}). Перейдіть <a
href="https://github.com/phpservermon/phpservermon/releases/latest" target="_blank"
rel="noopener">сюди</a> для завантаження оновлення.',
'back_to_top' => 'Нагору',
'go_back' => 'Назад',
'ok' => 'OK',
'bad' => 'погано',
'cancel' => 'Скасувати',
'none' => 'Жоден',
'activate' => 'Активувати',
'short_day_format' => '%e %b',
'long_day_format' => '%e %b %Y',
'yesterday_format' => 'Учора о %k:%M',
'other_day_format' => '%A о %k:%M',
'never' => 'Ніколи',
'hours_ago' => '%d годин тому',
'an_hour_ago' => 'близько години тому',
'minutes_ago' => '%d хвилин тому',
'a_minute_ago' => 'близько хвилини тому',
'seconds_ago' => '%d секунд тому',
'a_second_ago' => 'секунду тому',
'year' => 'рік',
'years' => 'років',
'month' => 'місяць',
'months' => 'місяців',
'day' => 'дні',
'days' => 'днів',
'hour' => 'година',
'hours' => 'годин',
'minute' => 'хвилина',
'minutes' => 'хвилин',
'second' => 'секунда',
'seconds' => 'секунд',
'current' => 'поточний',
'settings' => 'Налаштування',
'search' => 'Пошук',
),
'menu' => array(
'config' => 'Конфіг',
'server' => 'Сервери',
'server_log' => 'Лог',
'server_status' => 'Статус',
'server_update' => 'Оновити',
'user' => 'Користувачі',
'help' => 'Довідка',
),
'users' => array(
'user' => 'Користувач',
'name' => 'Ім’я',
'user_name' => 'Ім’я користувача',
'password' => 'Пароль',
'password_repeat' => 'Повторити пароль',
'password_leave_blank' => 'Залиште пустим, щоб не змінювати',
'level' => 'Рівень',
'level_10' => 'Адміністратор',
'level_20' => 'Користувач',
'level_description' => '<b>Адміністратори</b> мають повний доступ: вони
можуть керувати серверами, користувачами, а
також редагувати глобальні
налаштування.<br><b>Користувачі</b> можуть тільки
переглядати й запускати перевірку серверів, до
яких їм надали доступ.',
'mobile' => 'Мобільний',
'email' => 'Електронна пошта',
'pushover' => 'Pushover',
'pushover_description' => 'Pushover сервіс, що дозволяє легко отримувати
сповіщення у реальному часі. За деталями
перейдіть на <a href="https://pushover.net/" target="_blank">їхній
вебсайт</a>.',
'pushover_key' => 'Ключ Pushover',
'pushover_device' => 'Пристрій Pushover',
'pushover_device_description' => 'Ім’я пристрою, на який надсилати
повідомлення. Залиште пустим, щоб
надсилати на всі пристрої.',
'telegram' => 'Telegram',
'telegram_description' => '<a href="https://telegram.org/" target="_blank">Telegram</a> чат-застосунок, що
дозволяє легко отримувати сповіщення у
реальному часі. За деталями й інструкцією зі
встановлення зверніться до <a
href="http://docs.phpservermonitor.org/" target="_blank">документації</a>.',
'telegram_chat_id' => 'Ідентифікатор чату Telegram',
'telegram_chat_id_description' => 'Повідомлення буде надіслане у
відповідний чат.',
'telegram_get_chat_id' => 'Натисніть тут для отримання свого
ідентифікатора чату',
'activate_telegram' => 'Активувати сповіщення у Telegram',
'activate_telegram_description' => 'Дозволити надсилання Telegram-сповіщень на
визначений ідентифікатор чату. Без
цього дозволу Telegram не дозволить нам
надсилати вам сповіщення.',
'telegram_bot_username_found' => 'Бот знайдений!<br><a href="%s" target="_blank"
rel="noopener"><button class="btn btn-primary">Наступний
крок</button></a> <br>На ньому відкриється чат з
ботом. Там буде потрібно натиснути start або
набрати /start.',
'telegram_bot_username_error_token' => '401 - Несанкціоновано. Будь ласка,
перевірте, чи API-токен правильний.',
'telegram_bot_error' => 'Сталася помилка при активації Telegram-сповіщень:
%s',
'delete_title' => 'Видалити користувача',
'delete_message' => 'Ви дійсно хочете видалити користувача \'%1\'?',
'deleted' => 'Користувача видалено.',
'updated' => 'Користувача оновлено.',
'inserted' => 'Користувача додано.',
'profile' => 'Профіль',
'profile_updated' => 'Ваш профіль оновлено.',
'error_user_name_bad_length' => 'Імена користувачів мають бути довжиною
від 2 до 64 символів.',
'error_user_name_invalid' => 'Ім’я користувача може містити лише літери
(a-z, A-Z), цифри (0-9), крапки (.) і підкреслення (_).',
'error_user_name_exists' => 'Таке ім’я користувача уже існує у базі
даних.',
'error_user_email_bad_length' => 'Електронні адреси мають бути довжиною
від 5 до 255 символів.',
'error_user_email_invalid' => 'Неправильна електронна адреса.',
'error_user_level_invalid' => 'Неправильний рівень користувача.',
'error_user_no_match' => 'Користувача у базі даних не знайдено.',
'error_user_password_invalid' => 'Введено неправильний пароль.',
'error_user_password_no_match' => 'Введені паролі не збігаються.',
'error_user_admin_cant_be_deleted' => 'Останнього адміністратора видалити не
можна.',
),
'log' => array(
'title' => 'Записи у журналі',
'type' => 'Тип',
'status' => 'Статус',
'email' => 'Email',
'sms' => 'SMS',
'pushover' => 'Pushover',
'telegram' => 'Telegram',
'no_logs' => 'Немає журналів',
'clear' => 'Очистити журнали',
'delete_title' => 'Видалити журнал',
'delete_message' => 'Ви дійсно хочете видалити <b>усі</b> журнали?',
),
'servers' => array(
'server' => 'Сервер',
'status' => 'Статус',
'label' => 'Назва',
'domain' => 'Домен/IP',
'timeout' => 'Timeout',
'timeout_description' => 'Кількість секунд очікування на відповідь
сервера.',
'authentication_settings' => 'Налаштування автентифікації',
'optional' => 'Необов’язково',
'website_username' => 'Ім’я користувача',
'website_username_description' => 'Ім’я користувача для доступу до сайту.
(Підтримується лише Apache-автентифікація.)',
'website_password' => 'Пароль',
'website_password_description' => 'Пароль для доступу до сайту. У базі даних
пароль зберігається зашифрованим.',
'fieldset_monitoring' => 'Моніторинг',
'fieldset_permissions' => 'Дозволи',
'permissions' => 'Сервер можуть переглядати такі користувачі',
'port' => 'Порт',
'custom_port' => 'Власний порт',
'popular_ports' => 'Популярні порти',
'request_method' => 'Метод запиту',
'custom_request_method' => 'Власний метод запиту',
'popular_request_methods' => 'Популярні методи запиту',
'post_field' => 'Post-поле',
'post_field_description' => 'Дані будуть надіслані з використанням
вибраного вище методу.',
'please_select' => 'Будь ласка, виберіть',
'type' => 'Тип',
'type_website' => 'Вебсайт',
'type_service' => 'Сервіс',
'type_ping' => 'Пінг',
'pattern' => 'Шукати рядок/зразок',
'pattern_description' => 'Якщо цей зразок не знайдено на сайті, сервер
буде позначений як онлайн/офлайн. Регулярні
вирази дозволені.',
'pattern_online' => 'Зразок свідчить, що сайт — ',
'pattern_online_description' => 'Онлайн: Якщо цей зразок не знайдено на
сайті, сервер буде позначений як онлайн.
Офлайн: Якщо цей зразок не знайдено на
сайті, сервер буде позначений як офлайн.',
'redirect_check' => 'Переспрямування на інший домен —',
'redirect_check_description' => 'Переспрямування на інший домен зазвичай є
поганим знаком.',
'allow_http_status' => 'Дозволити код статусу HTTP',
'allow_http_status_description' => 'Позначити вебсайт як онлайн. Коди
статусів HTTP нижче ніж 400 позначаються як
онлайн за замовчуванням. Розділяти коди
символом |.',
'header_name' => 'Ім’я у заголовку',
'header_value' => 'Значення у заголовку',
'header_name_description' => 'З урахуванням регістру.',
'header_value_description' => 'Регулярні вирази дозволені.',
'last_check' => 'Остання перевірка',
'last_online' => 'Востаннє онлайн',
'last_offline' => 'Востаннє офлайн',
'last_output' => 'Остання позитивна відповідь',
'last_error' => 'Остання помилка',
'last_error_output' => 'Остання негативна відповідь',
'output' => 'Вивід',
'monitoring' => 'Моніторинг',
'no_monitoring' => 'Немає моніторингу',
'email' => 'Email',
'send_email' => 'Надсилати електронні листи',
'sms' => 'SMS',
'send_sms' => 'Надсилати SMS',
'pushover' => 'Pushover',
'send_pushover' => 'Надсилати Pushover-сповіщення',
'telegram' => 'Telegram',
'send_telegram' => 'Надсилати Telegram-сповіщення',
'users' => 'Користувачі',
'delete_title' => 'Видалити сервер',
'delete_message' => 'Ви дійсно хочете видалити сервер \'%1\'?',
'deleted' => 'Сервер видалено.',
'updated' => 'Сервер оновлено.',
'inserted' => 'Сервер додано.',
'latency' => 'Затримка',
'latency_max' => 'Затримка (максимум)',
'latency_min' => 'Затримка (мінімум)',
'latency_avg' => 'Затримка (середня)',
'online' => 'онлайн',
'offline' => 'офлайн',
'uptime' => 'Час роботи',
'year' => 'Років',
'month' => 'Місяць',
'week' => 'Тиждень',
'day' => 'День',
'hour' => 'Година',
'warning_threshold' => 'Поріг попередження',
'warning_threshold_description' => 'Кількість невдалих перевірок перед
виставленням статусу офлайн.',
'chart_last_week' => 'Останній тиждень',
'chart_history' => 'Історія',
'chart_day_format' => '%d/%m/%Y',
'chart_long_date_format' => '%d/%m/%Y %H:%M:%S',
'chart_short_date_format' => '%d/%m %H:%M',
'chart_short_time_format' => '%H:%M',
'warning_notifications_disabled_sms' => 'SMS-сповіщення вимкнено.',
'warning_notifications_disabled_email' => 'Email-сповіщення вимкнено.',
'warning_notifications_disabled_pushover' => 'Pushover-сповіщення вимкнено.',
'warning_notifications_disabled_telegram' => 'Telegram-сповіщення вимкнено.',
'error_server_no_match' => 'Сервер не знайдено.',
'error_server_label_bad_length' => 'Заголовок повинен бути довжиною від 1 до
255 символів.',
'error_server_ip_bad_length' => 'Домен/IP повинен бути довжиною від 1 до 255
символів.',
'error_server_ip_bad_service' => 'IP-адреса недійсна.',
'error_server_ip_bad_website' => 'URL вебсайту недійсний.',
'error_server_type_invalid' => 'Вибраний тип сервера недійсний.',
'error_server_warning_threshold_invalid' => 'Поріг попередження має бути цілим
числом більше 0.',
),
'config' => array(
'general' => 'Загальне',
'language' => 'Мова',
'show_update' => 'Перевіряти наявність оновлень?',
'password_encrypt_key' => 'Пароль ключа шифрування',
'password_encrypt_key_note' => 'Цей ключ використовується для шифрування
паролів доступу до вебсайтів, що
зберігаються на сервері. Якщо ключ буде
змінений, збережені паролі будуть
недійсними!',
'proxy' => 'Увімкнути проксі-сервер',
'proxy_url' => 'URL-адреса проксі-сервера',
'proxy_user' => 'Ім’я користувача проксі-сервера',
'proxy_password' => 'Пароль користувача проксі-сервера',
'email_status' => 'Дозволити надсилання електронної пошти',
'email_from_email' => 'Листи з адреси',
'email_from_name' => 'Листи від імені',
'email_smtp' => 'Увімкнути SMTP',
'email_smtp_host' => 'SMTP-хост',
'email_smtp_port' => 'SMTP-порт',
'email_smtp_security' => 'SMTP-безпека',
'email_smtp_security_none' => 'Немає',
'email_smtp_username' => 'Ім’я користувача SMTP',
'email_smtp_password' => 'Пароль користувача SMTP',
'email_smtp_noauth' => 'Залиште пустим, щоб не автентифікуватися',
'sms_status' => 'Дозволити надсилання текстових повідомлень',
'sms_gateway' => 'Шлюз для надсилання повідомлень',
'sms_gateway_username' => 'Ім’я користувача шлюзу',
'sms_gateway_password' => 'Пароль користувача шлюзу',
'sms_from' => 'Номер телефону відправника',
'pushover_status' => 'Дозволити надсилання Pushover-повідомлень',
'pushover_description' => 'Pushover сервіс, що дозволяє легко отримувати
сповіщення у реальному часі. За детальнішою
інформацію перейдіть на <a
href="https://pushover.net/" target="_blank">їхній вебсайт</a>.',
'pushover_clone_app' => 'Натисніть тут, щоб створити ваш Pushover-додаток',
'pushover_api_token' => 'Токен API Pushover-додатку',
'pushover_api_token_description' => 'Перед використанням Pushover ви маєте <a
href="%1$s" target="_blank" rel="noopener">зареєструвати
Додаток</a> на їхньому вебсайті та ввести
токен API Додатку тут.',
'telegram_status' => 'Дозволити надсилання Telegram-повідомлень',
'telegram_description' => '<a href="https://telegram.org/" target="_blank">Telegram</a> чат-застосунок, що
дозволяє легко отримувати сповіщення у
реальному часі. Детальніша інформація та
інструкція зі встановлення доступні у <a
href="http://docs.phpservermonitor.org/" target="_blank">документації</a>.',
'telegram_api_token' => 'Токен Telegram API',
'telegram_api_token_description' => 'Перед використанням Telegram ви маєте
отримати токен API. За довідкою
зверніться до <a
href="http://docs.phpservermonitor.org/" target="_blank">документації</a>.',
'alert_type' => 'Виберіть, коли б вам хотілося отримувати
сповіщення.',
'alert_type_description' => '<b>Зміна статусу:</b> Ви отримуватимете
сповіщення, коли змінюється статус сервера.
Тобто при переходах онлайн -> офлайн і офлайн
-> онлайн.<br><br><b>Офлайн:</b> Ви отримаєте
сповіщення, коли сервер переходить у офлайн
*ТІЛЬКИ ПЕРШИЙ РАЗ*. Наприклад, ваше
крон-завдання виконується кожні 15 хвилин і
ваш сервер лягає о 1-й годині ночі й лежить до
6-ї години ранку. Ви отримаєте тільки одне
сповіщення о 1-й годині
ночі.<br><br><b>Завжди:</b> Ви отримуватимете
сповіщення при кожному запуску сценарію,
коли сайт лежить, навіть якщо він лежить
годинами.',
'alert_type_status' => 'Зміна статусу',
'alert_type_offline' => 'Офлайн',
'alert_type_always' => 'Завжди',
'combine_notifications' => 'Об’єднувати сповіщення',
'combine_notifications_description' => 'Зменшує кількість сповіщень,
об’єднуючи їх в 1 єдине сповіщення. (Це
не стосується SMS-сповіщень.)',
'alert_proxy' => 'Навіть якщо увімкнений, проксі-сервер ніколи не
використовується для сервісів',
'alert_proxy_url' => 'Формат: хост:порт',
'log_status' => 'Статус журналу',
'log_status_description' => 'Якщо статус журналу TRUE, то монітор
записуватиме у журнал подію щоразу, коли
виконуватимуться умови надсилання
сповіщення.',
'log_email' => 'Записувати у журнал електронні листи, надіслані
сценарієм',
'log_sms' => 'Записувати у журнал текстові повідомлення,
надіслані сценарієм',
'log_pushover' => 'Записувати у журнал Pushover-повідомлення, надіслані
сценарієм',
'log_telegram' => 'Записувати у журнал Telegram-повідомлення, надіслані
сценарієм',
'updated' => 'Налаштування оновлено.',
'tab_email' => 'Електронна пошта',
'tab_sms' => 'SMS',
'tab_pushover' => 'Pushover',
'tab_telegram' => 'Telegram',
'settings_email' => 'Налаштування електронної пошти',
'settings_sms' => 'Налаштування текстових повідомлень',
'settings_pushover' => 'Налаштування Pushover',
'settings_telegram' => 'Налаштування Telegram',
'settings_notification' => 'Налаштування сповіщень',
'settings_log' => 'Налаштування логів',
'settings_proxy' => 'Налаштування проксі',
'auto_refresh' => 'Автооновлення',
'auto_refresh_description' => 'Сторінка автооновлення серверів.<br><span
class="small">Час у секундах; якщо 0, сторінка не
оновлюватиметься.</span>',
'seconds' => 'секунд',
'test' => 'Тест',
'test_email' => 'Електронний лист буде надісланий на адресу,
вказану у вашому профілі користувача.',
'test_sms' => 'SMS буде надіслане на номер телефону, вказаний у
вашому профілі користувача.',
'test_pushover' => 'Pushover-сповіщення буде надіслане на ключ/пристрій
користувача, заданий у вашому профілі
користувача.',
'test_telegram' => 'Telegram-сповіщення буде надіслане у чат,
ідентифікатор якого заданий у вашому профілі
користувача.',
'send' => 'Надіслати',
'test_subject' => 'Тест',
'test_message' => 'Тестове повідомлення',
'email_sent' => 'Електронний лист надіслано',
'email_error' => 'Помилка надсилання електронного листа',
'sms_sent' => 'SMS надіслане',
'sms_error' => 'При надсиланні SMS сталася помилка: %s',
'sms_error_nomobile' => 'Не можу надіслати тестове SMS: у вашому профілі
не знайдено дійсного номера телефону.',
'pushover_sent' => 'Pushover-сповіщення надіслане',
'pushover_error' => 'При надсиланні Pushover-сповіщення сталася помилка:
%s',
'pushover_error_noapp' => 'Не можу надіслати тестове сповіщення: у
глобальних налаштуваннях не знайдено токен
API Pushover-додатку.',
'pushover_error_nokey' => 'Не можу надіслати тестове сповіщення: у
вашому профілі не знайдено ключа Pushover.',
'telegram_sent' => 'Telegram-сповіщення надіслане',
'telegram_error' => 'При надсиланні Telegram-сповіщення сталася помилка:
%s',
'telegram_error_notoken' => 'Не можу надіслати тестове сповіщення: у
глобальних налаштуваннях не знайдено токен
Telegram API.',
'telegram_error_noid' => 'Не можу надіслати тестове сповіщення: у
вашому профілі не знайдено ідентифікатор
чату.',
'log_retention_period' => 'Період зберігання логів',
'log_retention_period_description' => 'Кількість днів зберігання журналів
сповіщень і архівів часу роботи
серверів. Введіть 0, щоб вимкнути
очищення журналів.',
'log_retention_days' => 'днів',
),
'notifications' => array(
'off_sms' => 'Сервер \'%LABEL%\' ЛЕЖИТЬ: ip=%IP%, порт=%PORT%. Помилка=%ERROR%',
'off_email_subject' => 'ВАЖЛИВО: Сервер \'%LABEL%\' ЛЕЖИТЬ',
'off_email_body' => 'Не вдалося під’єднатися до такого
сервера:<br><br>Сервер: %LABEL%<br>IP: %IP%<br>Порт:
%PORT%<br>Помилка: %ERROR%<br>Дата: %DATE%',
'off_pushover_title' => 'Сервер \'%LABEL%\' ЛЕЖИТЬ',
'off_pushover_message' => 'Не вдалося під’єднатися до такого
сервера:<br><br>Сервер: %LABEL%<br>IP: %IP%<br>Порт:
%PORT%<br>Помилка: %ERROR%<br>Дата: %DATE%',
'off_telegram_message' => 'Не вдалося під’єднатися до такого
сервера:<br><br>Сервер: %LABEL%<br>IP: %IP%<br>Порт:
%PORT%<br>Помилка: %ERROR%<br>Дата: %DATE%',
'on_sms' => 'Сервер \'%LABEL%\' ПРАЦЮЄ: ip=%IP%, порт=%PORT%, він лежав
протягом %LAST_OFFLINE_DURATION%',
'on_email_subject' => 'ВАЖЛИВО: Сервер \'%LABEL%\' ПРАЦЮЄ',
'on_email_body' => 'Сервер \'%LABEL%\' знову працює, він лежав протягом
%LAST_OFFLINE_DURATION%:<br><br>Сервер: %LABEL%<br>IP: %IP%<br>Порт:
%PORT%<br>Дата: %DATE%',
'on_pushover_title' => 'Сервер \'%LABEL%\' ПРАЦЮЄ',
'on_pushover_message' => 'Сервер \'%LABEL%\' знову працює, він лежав протягом
%LAST_OFFLINE_DURATION%:<br><br>Сервер: %LABEL%<br>IP: %IP%<br>Порт:
%PORT%<br>Дата: %DATE%',
'on_telegram_message' => 'Сервер \'%LABEL%\' знову працює, він лежав
протягом: %LAST_OFFLINE_DURATION%<br><br>Сервер: %LABEL%<br>IP:
%IP%<br>Порт: %PORT%<br>Дата: %DATE%',
'combi_off_email_message' => '<ul><li>Сервер: %LABEL%</li><li>IP: %IP%</li><li>Порт:
%PORT%</li><li>Помилка: %ERROR%</li><li>Дата: %DATE%</li></ul>',
'combi_off_pushover_message' => '<ul><li>Сервер: %LABEL%</li><li>IP: %IP%</li><li>Порт:
%PORT%</li><li>Помилка: %ERROR%</li><li>Дата: %DATE%</li></ul>',
'combi_off_telegram_message' => '- Сервер: %LABEL%<br>- IP: %IP%<br>- Порт: %PORT%<br>-
Помилка: %ERROR%<br>- Дата: %DATE%<br><br>',
'combi_on_email_message' => '<ul><li>Сервер: %LABEL%</li><li>IP: %IP%</li><li>Порт:
%PORT%</li><li>Час простою: %LAST_OFFLINE_DURATION%</li><li>Дата:
%DATE%</li></ul>',
'combi_on_pushover_message' => '<ul><li>Сервер: %LABEL%</li><li>IP: %IP%</li><li>Порт:
%PORT%</li><li>Час простою:
%LAST_OFFLINE_DURATION%</li><li>Дата: %DATE%</li></ul>',
'combi_on_telegram_message' => '- Сервер: %LABEL%<br>- IP: %IP%<br>- Порт: %PORT%<br>- Час
простою: %LAST_OFFLINE_DURATION%<br>- Дата: %DATE%<br><br>',
'combi_email_subject' => 'ВАЖЛИВО: \'%UP%\' серверів знову ПРАЦЮЮТЬ, \'%DOWN%\'
серверів ЛЕЖАТЬ',
'combi_pushover_subject' => '\'%UP%\' серверів знову ПРАЦЮЮТЬ, \'%DOWN%\'
серверів ЛЕЖАТЬ',
'combi_email_message' => '<b>Такі сервери лягли:</b><br>%DOWN_SERVERS%<br><b>Такі
сервери знову працюють:</b><br>%UP_SERVERS%',
'combi_pushover_message' => '<b>Такі сервери лягли:</b><br>%DOWN_SERVERS%<br><b>Такі
сервери знову працюють:</b><br>%UP_SERVERS%',
'combi_telegram_message' => '<b>Такі сервери лягли:</b><br>%DOWN_SERVERS%<br><b>Такі
сервери знову працюють:</b><br>%UP_SERVERS%',
),
'login' => array(
'welcome_usermenu' => 'Ласкаво просимо, %user_name%',
'title_sign_in' => 'Будь ласка, увійдіть',
'title_forgot' => 'Забули свій пароль?',
'title_reset' => 'Скинути пароль',
'submit' => 'Надіслати',
'remember_me' => 'Запам’ятати мене',
'login' => 'Вхід',
'logout' => 'Вихід',
'username' => 'Ім’я користувача',
'password' => 'Пароль',
'password_repeat' => 'Повторити пароль',
'password_forgot' => 'Забули пароль?',
'password_reset' => 'Скинути пароль',
'password_reset_email_subject' => 'Скинути свій пароль до PHP Server Monitor',
'password_reset_email_body' => 'Будь ласка, скористайтеся наступним
посиланням для скидання свого пароля. Будь
ласка, пам’ятайте, що воно діє протягом 1
години.<br><br>%link%',
'error_user_incorrect' => 'Не вдалося знайти вказане ім’я користувача.',
'error_login_incorrect' => 'Інформація неправильна.',
'error_login_passwords_nomatch' => 'Надані паролі не збігаються.',
'error_reset_invalid_link' => 'Надане посилання для скидання пароля
недійсне.',
'success_password_forgot' => 'Вам надіслано електронний лист із
інформацією про відновлення пароля.',
'success_password_reset' => 'Ваш пароль успішно скинутий. Будь ласка,
увійдіть.',
),
'error' => array(
'401_unauthorized' => 'Несанкціоновано',
'401_unauthorized_description' => 'Ви не маєте дозволу переглядати цю
сторінку.',
),
);

View File

@ -1,4 +1,5 @@
<?php <?php
/** /**
* PHP Server Monitor * PHP Server Monitor
* Monitor your servers and websites. * Monitor your servers and websites.
@ -26,269 +27,299 @@
**/ **/
$sm_lang = array( $sm_lang = array(
'name' => 'Tiếng Việt - Vietnamese', 'name' => 'Tiếng Việt - Vietnamese',
'locale' => array('vi_VN.UTF-8', 'vi_VN', 'Việt Nam'), 'locale' => array(
'system' => array( '0' => 'vi_VN.UTF-8',
'title' => 'Server Monitor', '1' => 'vi_VN',
'install' => 'Cài đặt', '2' => 'Việt Nam',
'action' => 'Hành động', ),
'save' => 'Lưu', 'system' => array(
'edit' => 'Sửa', 'title' => 'Server Monitor',
'delete' => 'Xóa', 'install' => 'Cài đặt',
'date' => 'Ngày', 'action' => 'Hành động',
'message' => 'Message', 'save' => 'Lưu',
'yes' => 'Yes', 'edit' => 'Sửa',
'no' => 'No', 'delete' => 'Xóa',
'insert' => 'Thêm mới', 'date' => 'Ngày',
'add_new' => 'Thêm mới', 'message' => 'Message',
'update_available' => 'Phiên bản mới ({version}) có săn trên <a href="https://github.com/phpservermon/phpservermon/releases/latest" target="_blank" rel="noopener">http://www.phpservermonitor.org</a>.', 'yes' => 'Yes',
'back_to_top' => 'Lên đầu trang', 'no' => 'No',
'go_back' => 'Quay lại', 'insert' => 'Thêm mới',
'ok' => 'OK', 'add_new' => 'Thêm mới',
'cancel' => 'Cancel', 'update_available' => 'Phiên bản mới ({version}) săn trên <a
// date/time format according the strftime php function format parameter http://php.net/manual/function.strftime.php href="https://github.com/phpservermon/phpservermon/releases/latest" target="_blank"
'short_day_format' => '%B %e', rel="noopener">http://www.phpservermonitor.org</a>.',
'long_day_format' => '%B %e, %Y', 'back_to_top' => 'Lên đầu trang',
'yesterday_format' => 'Yesterday at %k:%M', 'go_back' => 'Quay lại',
'other_day_format' => '%A at %k:%M', 'ok' => 'OK',
'never' => 'Never', 'cancel' => 'Cancel',
'hours_ago' => '%d giờ trước', 'short_day_format' => '%B %e',
'an_hour_ago' => 'khoảng một giờ trước', 'long_day_format' => '%B %e, %Y',
'minutes_ago' => '%d phút trước', 'yesterday_format' => 'Yesterday at %k:%M',
'a_minute_ago' => 'khoảng một phút trước', 'other_day_format' => '%A at %k:%M',
'seconds_ago' => '%d giây trước', 'never' => 'Never',
'a_second_ago' => 'một giây trước', 'hours_ago' => '%d giờ trước',
), 'an_hour_ago' => 'khoảng một giờ trước',
'menu' => array( 'minutes_ago' => '%d phút trước',
'config' => 'Cấu hình', 'a_minute_ago' => 'khoảng một phút trước',
'server' => 'Servers', 'seconds_ago' => '%d giây trước',
'server_log' => 'Log', 'a_second_ago' => 'một giây trước',
'server_status' => 'Trạng thái', ),
'server_update' => 'Cập nhật', 'menu' => array(
'user' => 'Người dùng', 'config' => 'Cấu hình',
'help' => 'Giúp đỡ', 'server' => 'Servers',
), 'server_log' => 'Log',
'users' => array( 'server_status' => 'Trạng thái',
'user' => 'Người dùng', 'server_update' => 'Cập nhật',
'name' => 'Tên', 'user' => 'Người dùng',
'user_name' => 'Tên đăng nhập', 'help' => 'Giúp đỡ',
'password' => 'Mật khẩu', ),
'password_repeat' => 'Nhập lại mật khẩu', 'users' => array(
'password_leave_blank' => 'Leave blank to keep unchanged', 'user' => 'Người dùng',
'level' => 'Cấp độ', 'name' => 'Tên',
'level_10' => 'Administrator', 'user_name' => 'Tên đăng nhập',
'level_20' => 'User', 'password' => 'Mật khẩu',
'level_description' => '<b>Administrators</b> có toàn quyền: họ có thể quản lý server, người dùng và chỉnh sửa cấu hình.<br><b>Users</b> chỉ xem và chạy cập nhật cho servers được giao cho họ.', 'password_repeat' => 'Nhập lại mật khẩu',
'mobile' => 'Di động', 'password_leave_blank' => 'Leave blank to keep unchanged',
'email' => 'Email', 'level' => 'Cấp độ',
'pushover' => 'Pushover', 'level_10' => 'Administrator',
'pushover_description' => 'Pushover là một dịch vụ dễ dàng nhận các thông báo theo thời gian thực. Xem <a href="https://pushover.net/">website của họ</a> để biết thêm thông tin.', 'level_20' => 'User',
'pushover_key' => 'Pushover Key', 'level_description' => '<b>Administrators</b> toàn quyền: họ thể quản server, người
'pushover_device' => 'Pushover Device', dùng chỉnh sửa cấu hình.<br><b>Users</b> chỉ xem chạy cập nhật
'pushover_device_description' => 'Tên thiết bị để gửi tin nhắn đến. Để trống để gửi cho tất cả các thiết bị.', cho servers được giao cho họ.',
'delete_title' => 'Xóa Người dùng', 'mobile' => 'Di động',
'delete_message' => 'Bạn có chắc chắn xóa người dùng \'%1\'?', 'email' => 'Email',
'deleted' => 'Đã xóa người dùng.', 'pushover' => 'Pushover',
'updated' => 'Đã cập nhật người dùng.', 'pushover_description' => 'Pushover một dịch vụ dễ dàng nhận các thông báo theo thời gian
'inserted' => 'Đã thêm người dùng.', thực. Xem <a href="https://pushover.net/" target="_blank">website của họ</a> để biết
'profile' => 'Hồ sơ', thêm thông tin.',
'profile_updated' => 'Hồ sơ của bạn đã được cập nhật.', 'pushover_key' => 'Pushover Key',
'error_user_name_bad_length' => 'Tên người dùng phải có từ 2 và 64 ký tự.', 'pushover_device' => 'Pushover Device',
'error_user_name_invalid' => 'Tên người dùng chỉ có thể chứa các chữ cái(a-z, A-Z), số (0-9), dấu chấm (.) và dấu gạch dưới (_).', 'pushover_device_description' => 'Tên thiết bị để gửi tin nhắn đến. Để trống để gửi
'error_user_name_exists' => 'Tên người dùng đã tồn tại trong cơ sở dữ liệu.', cho tất cả các thiết bị.',
'error_user_email_bad_length' => 'Địa chỉ email phải từ 5 đến 255 ký tự.', 'delete_title' => 'Xóa Người dùng',
'error_user_email_invalid' => 'Địa chỉ email không hợp lệ.', 'delete_message' => 'Bạn có chắc chắn xóa người dùng \'%1\'?',
'error_user_level_invalid' => 'Cấp độ người dùng không hợp lệ.', 'deleted' => 'Đã xóa người dùng.',
'error_user_no_match' => 'Người dùng không tìm thấy trong cơ sở dữ liệu.', 'updated' => 'Đã cập nhật người dùng.',
'error_user_password_invalid' => 'Đặt mật khẩu không hợp lệ.', 'inserted' => 'Đã thêm người dùng.',
'error_user_password_no_match' => 'Các mật khẩu không khớp.', 'profile' => 'Hồ sơ',
), 'profile_updated' => 'Hồ sơ của bạn đã được cập nhật.',
'log' => array( 'error_user_name_bad_length' => 'Tên người dùng phải có từ 2 và 64 ký tự.',
'title' => 'Log entries', 'error_user_name_invalid' => 'Tên người dùng chỉ thể chứa các chữ cái(a-z, A-Z), số
'type' => 'Loại', (0-9), dấu chấm (.) dấu gạch dưới (_).',
'status' => 'Trạng thái', 'error_user_name_exists' => 'Tên người dùng đã tồn tại trong cơ sở dữ liệu.',
'email' => 'Email', 'error_user_email_bad_length' => 'Địa chỉ email phải từ 5 đến 255 ký tự.',
'sms' => 'SMS', 'error_user_email_invalid' => 'Địa chỉ email không hợp lệ.',
'pushover' => 'Pushover', 'error_user_level_invalid' => 'Cấp độ người dùng không hợp lệ.',
'no_logs' => 'No logs', 'error_user_no_match' => 'Người dùng không tìm thấy trong cơ sở dữ liệu.',
'clear' => 'Xoá nhật ký', 'error_user_password_invalid' => 'Đặt mật khẩu không hợp lệ.',
'delete_title' => 'Xoá nhật ký', 'error_user_password_no_match' => 'Các mật khẩu không khớp.',
'delete_message' => 'Bạn có chắc chắn muốn xóa <b>tất</b> cả các bản ghi?', ),
), 'log' => array(
'servers' => array( 'title' => 'Log entries',
'server' => 'Server', 'type' => 'Loại',
'status' => 'Trạng thái', 'status' => 'Trạng thái',
'label' => 'Nhãn', 'email' => 'Email',
'domain' => 'Domain/IP', 'sms' => 'SMS',
'timeout' => 'Timeout', 'pushover' => 'Pushover',
'timeout_description' => 'Số giây để đợi máy chủ phản hồi.', 'no_logs' => 'No logs',
'port' => 'Cổng', 'clear' => 'Xoá nhật ký',
'type' => 'Loại', 'delete_title' => 'Xoá nhật ký',
'type_website' => 'Website', 'delete_message' => 'Bạn có chắc chắn muốn xóa <b>tất</b> cả các bản ghi?',
'type_service' => 'Dịch vụ', ),
'pattern' => 'Tìm kiếm chuỗi/mẫu', 'servers' => array(
'pattern_description' => 'Nếu mẫu không tìm thấy trên website, server sẽ được đánh dấu là offline. Biểu thức chính quy (Regular expressions) được cho phép.', 'server' => 'Server',
'last_check' => 'Kiểm tra lần cuối', 'status' => 'Trạng thái',
'last_online' => 'Trực tuyến lần cuối', 'label' => 'Nhãn',
'monitoring' => 'Giám sát', 'domain' => 'Domain/IP',
'no_monitoring' => 'Không giám sát', 'timeout' => 'Timeout',
'email' => 'Email', 'timeout_description' => 'Số giây để đợi máy chủ phản hồi.',
'send_email' => 'Gửi Email', 'port' => 'Cổng',
'sms' => 'SMS', 'type' => 'Loại',
'send_sms' => 'Gửi SMS', 'type_website' => 'Website',
'pushover' => 'Pushover', 'type_service' => 'Dịch vụ',
'users' => 'Người dùng', 'pattern' => 'Tìm kiếm chuỗi/mẫu',
'delete_title' => 'Xóa server', 'pattern_description' => 'Nếu mẫu không tìm thấy trên website, server sẽ được đánh dấu
'delete_message' => 'Bạn có chắt chắn xóa server \'%1\'?', offline. Biểu thức chính quy (Regular expressions) được cho phép.',
'deleted' => 'Đã xóa server.', 'last_check' => 'Kiểm tra lần cuối',
'updated' => 'Đã cập nhật server.', 'last_online' => 'Trực tuyến lần cuối',
'inserted' => 'Đã thêm server.', 'monitoring' => 'Giám sát',
'latency' => 'Độ trễ', 'no_monitoring' => 'Không giám sát',
'latency_max' => 'Độ trễ (cao nhất)', 'email' => 'Email',
'latency_min' => 'Độ trễ (thấp nhất)', 'send_email' => 'Gửi Email',
'latency_avg' => 'Độ trễ (trung bình)', 'sms' => 'SMS',
'uptime' => 'Thời gian hoạt động', 'send_sms' => 'Gửi SMS',
'year' => 'Năm', 'pushover' => 'Pushover',
'month' => 'Tháng', 'users' => 'Người dùng',
'week' => 'Tuần', 'delete_title' => 'Xóa server',
'day' => 'Ngày', 'delete_message' => 'Bạn có chắt chắn xóa server \'%1\'?',
'hour' => 'Giờ', 'deleted' => 'Đã xóa server.',
'warning_threshold' => 'Ngưỡng cảnh báo', 'updated' => 'Đã cập nhật server.',
'warning_threshold_description' => 'Số lần kiểm tra thất bại trước khi đánh đấu là offline.', 'inserted' => 'Đã thêm server.',
'chart_last_week' => 'Tuần trước', 'latency' => 'Độ trễ',
'chart_history' => 'Lịch sử', 'latency_max' => 'Độ trễ (cao nhất)',
// Charts date format according jqPlot date format http://www.jqplot.com/docs/files/plugins/jqplot-dateAxisRenderer-js.html 'latency_min' => 'Độ trễ (thấp nhất)',
'chart_day_format' => '%Y-%m-%d', 'latency_avg' => 'Độ trễ (trung bình)',
'chart_long_date_format' => '%Y-%m-%d %H:%M:%S', 'uptime' => 'Thời gian hoạt động',
'chart_short_date_format' => '%m/%d %H:%M', 'year' => 'Năm',
'chart_short_time_format' => '%H:%M', 'month' => 'Tháng',
'warning_notifications_disabled_sms' => 'SMS thông báo bị vô hiệu hóa.', 'week' => 'Tuần',
'warning_notifications_disabled_email' => 'Email thông báo bị vô hiệu hóa.', 'day' => 'Ngày',
'warning_notifications_disabled_pushover' => 'Pushover thông báo bị vô hiệu hóa.', 'hour' => 'Giờ',
'error_server_no_match' => 'Không tìm thấy server.', 'warning_threshold' => 'Ngưỡng cảnh báo',
'error_server_label_bad_length' => 'Nhãn phải có từ 1 đến 255 ký tự.', 'warning_threshold_description' => 'Số lần kiểm tra thất bại trước khi đánh đấu là offline.',
'error_server_ip_bad_length' => 'The domain / IP Nhãn phải có từ 1 đến 255 ký tự.', 'chart_last_week' => 'Tuần trước',
'error_server_ip_bad_service' => 'Địa chỉ IP không hợp lệ.', 'chart_history' => 'Lịch sử',
'error_server_ip_bad_website' => 'URL website không hợp lệ.', 'chart_day_format' => '%Y-%m-%d',
'error_server_type_invalid' => 'Chọn loại server không hợp lệ.', 'chart_long_date_format' => '%Y-%m-%d %H:%M:%S',
'error_server_warning_threshold_invalid' => 'Ngưỡng cảnh báo phải là một số nguyên có giá trị lớn hơn 0.', 'chart_short_date_format' => '%m/%d %H:%M',
), 'chart_short_time_format' => '%H:%M',
'config' => array( 'warning_notifications_disabled_sms' => 'SMS thông báo bị vô hiệu hóa.',
'general' => 'Tổng quát', 'warning_notifications_disabled_email' => 'Email thông báo bị vô hiệu hóa.',
'language' => 'Ngôn ngữ', 'warning_notifications_disabled_pushover' => 'Pushover thông báo bị vô hiệu hóa.',
'show_update' => 'Kiểm tra cập nhật?', 'error_server_no_match' => 'Không tìm thấy server.',
'email_status' => 'Cho phép gửi email', 'error_server_label_bad_length' => 'Nhãn phải có từ 1 đến 255 ký tự.',
'email_from_email' => 'Gửi email từ địa chỉ', 'error_server_ip_bad_length' => 'The domain / IP Nhãn phải có từ 1 đến 255 ký tự.',
'email_from_name' => 'Tên địa chỉ mail', 'error_server_ip_bad_service' => 'Địa chỉ IP không hợp lệ.',
'email_smtp' => 'Enable SMTP', 'error_server_ip_bad_website' => 'URL website không hợp lệ.',
'email_smtp_host' => 'SMTP host', 'error_server_type_invalid' => 'Chọn loại server không hợp lệ.',
'email_smtp_port' => 'SMTP port', 'error_server_warning_threshold_invalid' => 'Ngưỡng cảnh báo phải một số nguyên giá
'email_smtp_security' => 'SMTP security', trị lớn hơn 0.',
'email_smtp_security_none' => 'None', ),
'email_smtp_username' => 'SMTP username', 'config' => array(
'email_smtp_password' => 'SMTP password', 'general' => 'Tổng quát',
'email_smtp_noauth' => 'Để trống nếu không có chứng thực', 'language' => 'Ngôn ngữ',
'sms_status' => 'Cho phép gửi tin nhắn văn bản', 'show_update' => 'Kiểm tra cập nhật?',
'sms_gateway' => 'Gateway sử dụng để gửi tin nhắn', 'email_status' => 'Cho phép gửi email',
'sms_gateway_username' => 'Gateway username', 'email_from_email' => 'Gửi email từ địa chỉ',
'sms_gateway_password' => 'Gateway password', 'email_from_name' => 'Tên địa chỉ mail',
'sms_from' => 'Số điện thoại của người gửi', 'email_smtp' => 'Enable SMTP',
'pushover_status' => 'Cho phép gửi tin nhắn bằng Pushover', 'email_smtp_host' => 'SMTP host',
'pushover_description' => 'Pushover là một dịch vụ dễ dàng nhận các thông báo theo thời gian thực. Xem <a href="https://pushover.net/">website của họ</a> để biết thêm thông tin.', 'email_smtp_port' => 'SMTP port',
'pushover_clone_app' => 'Nhấn vào đây để tạo ứng dụng Pushover của bạn', 'email_smtp_security' => 'SMTP security',
'pushover_api_token' => 'Pushover App API Token', 'email_smtp_security_none' => 'None',
'pushover_api_token_description' => 'Trước khi bạn có thể sử dụng Pushover, bạn cần phải <a href="%1$s" target="_blank" rel="noopener">đăng ký một ứng dụng</a> tại trang web của họ và nhập Token App API ở đây.', 'email_smtp_username' => 'SMTP username',
'alert_type' => 'Chọn khi bạn muốn được thông báo.', 'email_smtp_password' => 'SMTP password',
'alert_type_description' => '<b>Thay đổi trạng thái:</b> '. 'email_smtp_noauth' => 'Để trống nếu không có chứng thực',
'Bạn sẽ nhận được thông báo khi một máy chủ có một sự thay đổi trạng thái. Từ online -> offline hoặc offline -> online.<br>'. 'sms_status' => 'Cho phép gửi tin nhắn văn bản',
'<br /><b>Offline:</b> '. 'sms_gateway' => 'Gateway sử dụng để gửi tin nhắn',
'Bạn sẽ nhận được thông báo khi một máy chủ offline *MỘT LẦN DUY NHẤT*. Ví dụ, '. 'sms_gateway_username' => 'Gateway username',
'cronjob của bạn hoạt động mỗi 15 phút và server của bạn down tại 01h00 cho đến 6h00. '. 'sms_gateway_password' => 'Gateway password',
'Bạn sẽ nhận được 1 thông báo lúc 01h00 và đó là nó.<br>'. 'sms_from' => 'Số điện thoại của người gửi',
'<br><b>Always:</b> '. 'pushover_status' => 'Cho phép gửi tin nhắn bằng Pushover',
'Bạn sẽ nhận được thông báo mỗi khi chạy đoạn script và một trang web tắt, ngay cả khi trang web đã được offline trong nhiều giờ.', 'pushover_description' => 'Pushover một dịch vụ dễ dàng nhận các thông báo theo thời gian
'alert_type_status' => 'Thay đổi trạng thái', thực. Xem <a href="https://pushover.net/" target="_blank">website của họ</a> để biết
'alert_type_offline' => 'Offline', thêm thông tin.',
'alert_type_always' => 'Always', 'pushover_clone_app' => 'Nhấn vào đây để tạo ứng dụng Pushover của bạn',
'log_status' => 'Log status', 'pushover_api_token' => 'Pushover App API Token',
'log_status_description' => 'Nếu log status được đặt là TRUE, màn hình sẽ đăng sự kiện này bất cứ khi nào các thiết lập thông báo được truyền.', 'pushover_api_token_description' => 'Trước khi bạn thể sử dụng Pushover, bạn cần phải <a
'log_email' => 'Log emails gửi bởi script', href="%1$s" target="_blank" rel="noopener">đăng một ứng
'log_sms' => 'Log Tin nhăn văn bản gửi bởi script', dụng</a> tại trang web của họ nhập Token App API đây.',
'log_pushover' => 'Log tin nhắn pushover gửi bởi script', 'alert_type' => 'Chọn khi bạn muốn được thông báo.',
'updated' => 'Cấu hình đã được cập nhật.', 'alert_type_description' => '<b>Thay đổi trạng thái:</b> Bạn sẽ nhận được thông báo khi
'tab_email' => 'Email', một máy chủ một sự thay đổi trạng thái. Từ online -> offline
'tab_sms' => 'SMS', hoặc offline -> online.<br><br /><b>Offline:</b> Bạn sẽ nhận được
'tab_pushover' => 'Pushover', thông báo khi một máy chủ offline *MỘT LẦN DUY NHẤT*. dụ,
'settings_email' => 'Thiết lặp email', cronjob của bạn hoạt động mỗi 15 phút server của bạn down
'settings_sms' => 'Thiết lập tin nhăn văn bản', tại 01h00 cho đến 6h00. Bạn sẽ nhận được 1 thông báo lúc 01h00
'settings_pushover' => 'Thiết lặp Pushover', đó .<br><br><b>Always:</b> Bạn sẽ nhận được thông báo
'settings_notification' => 'Thiết lặp thông báo', mỗi khi chạy đoạn script một trang web tắt, ngay cả khi trang
'settings_log' => 'Thiết lặp Log', web đã được offline trong nhiều giờ.',
'auto_refresh' => 'Tự động làm mới', 'alert_type_status' => 'Thay đổi trạng thái',
'auto_refresh_description' => 'alert_type_offline' => 'Offline',
'Tự động làm mới servers page.<br>'. 'alert_type_always' => 'Always',
'<span class="small">'. 'log_status' => 'Log status',
'Trong vài giây, nếu 0 trang sẽ không làm mới.'. 'log_status_description' => 'Nếu log status được đặt TRUE, màn hình sẽ đăng sự kiện
'</span>', này bất cứ khi nào các thiết lập thông báo được truyền.',
'seconds' => 'giây', 'log_email' => 'Log emails gửi bởi script',
'test' => 'Thử', 'log_sms' => 'Log Tin nhăn văn bản gửi bởi script',
'test_email' => 'Một email sẽ được gửi đến địa chỉ được xác định trong hồ sơ người dùng của bạn.', 'log_pushover' => 'Log tin nhắn pushover gửi bởi script',
'test_sms' => 'Một SMS sẽ được gửi đến địa chỉ được xác định trong hồ sơ người dùng của bạn.', 'updated' => 'Cấu hình đã được cập nhật.',
'test_pushover' => 'Một thông báo Pushover sẽ được gửi đến địa chỉ được xác định trong hồ sơ người dùng của bạn.', 'tab_email' => 'Email',
'send' => 'Gửi', 'tab_sms' => 'SMS',
'test_subject' => 'Thử nghiệm', 'tab_pushover' => 'Pushover',
'test_message' => 'tin nhắn thử nghiệm', 'settings_email' => 'Thiết lặp email',
'email_sent' => 'Gửi email', 'settings_sms' => 'Thiết lập tin nhăn văn bản',
'email_error' => 'Lỗi trong khi gửi mail', 'settings_pushover' => 'Thiết lặp Pushover',
'sms_sent' => 'Gửi SMS', 'settings_notification' => 'Thiết lặp thông báo',
'sms_error' => 'Lỗi trong khi gửi sms. %s', 'settings_log' => 'Thiết lặp Log',
'sms_error_nomobile' => 'Không thể gửi thử SMS: không có số điện thoại hợp lệ được tìm thấy trong hồ sơ của bạn.', 'auto_refresh' => 'Tự động làm mới',
'pushover_sent' => 'Gửi thông báo Pushover', 'auto_refresh_description' => 'Tự động làm mới servers page.<br><span class="small">Trong vài giây,
'pushover_error' => 'Một lỗi đã xảy ra trong khi gửi thông báo Pushover: %s', nếu 0 trang sẽ không làm mới.</span>',
'pushover_error_noapp' => 'Không thể gửi thử thông báo: không tìm thấy Pushover App API token trong cấu hình.', 'seconds' => 'giây',
'pushover_error_nokey' => 'Không thể gửi thử thông báo: không tìm thấy Pushover key trong hồ sơ của bạn.', 'test' => 'Thử',
'log_retention_period' => 'Thời gian lưu giữ log', 'test_email' => 'Một email sẽ được gửi đến địa chỉ được xác định trong hồ
'log_retention_period_description' => 'Số ngày để giữ các bản ghi của các thông báo và tài liệu lưu trữ của thời gian hoạt động máy chủ. Nhập 0 để vô hiệu hóa dọn dẹp log.', người dùng của bạn.',
'log_retention_days' => 'ngày', 'test_sms' => 'Một SMS sẽ được gửi đến địa chỉ được xác định trong hồ người
), dùng của bạn.',
// for newlines in the email messages use <br> 'test_pushover' => 'Một thông báo Pushover sẽ được gửi đến địa chỉ được xác định
'notifications' => array( trong hồ người dùng của bạn.',
'off_sms' => 'Server \'%LABEL%\' is DOWN: ip=%IP%, cổng=%PORT%. Lỗi=%ERROR%', 'send' => 'Gửi',
'off_email_subject' => 'IMPORTANT: Server \'%LABEL%\' is DOWN', 'test_subject' => 'Thử nghiệm',
'off_email_body' => "Không thể kết nối đến máy chủ sau:<br><br>Server: %LABEL%<br>IP: %IP%<br>Cổng: %PORT%<br>Lỗi: %ERROR%<br>Thời gian: %DATE%", 'test_message' => 'tin nhắn thử nghiệm',
'off_pushover_title' => 'Server \'%LABEL%\' is DOWN', 'email_sent' => 'Gửi email',
'off_pushover_message' => "Không thể kết nối đến máy chủ:<br><br>Server: %LABEL%<br>IP: %IP%<br>Cổng: %PORT%<br>Lỗi: %ERROR%<br>Thời gian: %DATE%", 'email_error' => 'Lỗi trong khi gửi mail',
'on_sms' => 'Server \'%LABEL%\' is RUNNING: ip=%IP%, port=%PORT%, it was down for %LAST_OFFLINE_DURATION%', 'sms_sent' => 'Gửi SMS',
'on_email_subject' => 'IMPORTANT: Server \'%LABEL%\' hoạt động', 'sms_error' => 'Lỗi trong khi gửi sms. %s',
'on_email_body' => "Server '%LABEL%' hoạt động lại, it was down for %LAST_OFFLINE_DURATION%:<br><br>Server: %LABEL%<br>IP: %IP%<br>Cổng: %PORT%<br>Thời gian: %DATE%", 'sms_error_nomobile' => 'Không thể gửi thử SMS: không số điện thoại hợp lệ được
'on_pushover_title' => 'Server \'%LABEL%\' hoạt động', tìm thấy trong hồ của bạn.',
'on_pushover_message' => 'Server \'%LABEL%\' hoạt động lại, it was down for %LAST_OFFLINE_DURATION%:<br><br>Server: %LABEL%<br>IP: %IP%<br>Cổng: %PORT%<br>Thời gian: %DATE%', 'pushover_sent' => 'Gửi thông báo Pushover',
), 'pushover_error' => 'Một lỗi đã xảy ra trong khi gửi thông báo Pushover: %s',
'login' => array( 'pushover_error_noapp' => 'Không thể gửi thử thông báo: không tìm thấy Pushover App API token
'welcome_usermenu' => 'Chào mừng, %user_name%', trong cấu hình.',
'title_sign_in' => 'Vui lòng đăng nhập', 'pushover_error_nokey' => 'Không thể gửi thử thông báo: không tìm thấy Pushover key trong hồ
'title_forgot' => 'Quên mật khẩu?', của bạn.',
'title_reset' => 'Khôi phục mật khẩu', 'log_retention_period' => 'Thời gian lưu giữ log',
'submit' => 'Gửi', 'log_retention_period_description' => 'Số ngày để giữ các bản ghi của các thông báo tài
'remember_me' => 'Ghi nhớ tôi', liệu lưu trữ của thời gian hoạt động máy chủ. Nhập 0
'login' => 'Đăng nhập', để hiệu hóa dọn dẹp log.',
'logout' => 'Đăng xuất', 'log_retention_days' => 'ngày',
'username' => 'Tên đăng nhập', ),
'password' => 'Mật khẩu', 'notifications' => array(
'password_repeat' => 'Nhập lại mật khẩu', 'off_sms' => 'Server \'%LABEL%\' is DOWN: ip=%IP%, cổng=%PORT%. Lỗi=%ERROR%',
'password_forgot' => 'Quên mật khẩu?', 'off_email_subject' => 'IMPORTANT: Server \'%LABEL%\' is DOWN',
'password_reset' => 'Khôi phục mật khẩu', 'off_email_body' => 'Không thể kết nối đến máy chủ sau:<br><br>Server: %LABEL%<br>IP:
'password_reset_email_subject' => 'Khôi phục lại mật khẩu của bạn cho PHP Server Monitor', %IP%<br>Cổng: %PORT%<br>Lỗi: %ERROR%<br>Thời gian: %DATE%',
'password_reset_email_body' => 'Vui lòng sử dụng liên kết sau đây để thiết lập lại mật khẩu của bạn. Xin lưu ý nó hết hạn trong 1 giờ.<br><br>%link%', 'off_pushover_title' => 'Server \'%LABEL%\' is DOWN',
'error_user_incorrect' => 'Tên người dùng cung cấp không thể tìm thấy.', 'off_pushover_message' => 'Không thể kết nối đến máy chủ:<br><br>Server: %LABEL%<br>IP:
'error_login_incorrect' => 'Thông tin không đúng.', %IP%<br>Cổng: %PORT%<br>Lỗi: %ERROR%<br>Thời gian: %DATE%',
'error_login_passwords_nomatch' => 'Mật khẩu được cung cấp không phù hợp.', 'on_sms' => 'Server \'%LABEL%\' is RUNNING: ip=%IP%, port=%PORT%, it was down for %LAST_OFFLINE_DURATION%',
'error_reset_invalid_link' => 'Liên kết đặt lại mà bạn cung cấp không hợp lệ.', 'on_email_subject' => 'IMPORTANT: Server \'%LABEL%\' hoạt động',
'success_password_forgot' => 'Một email đã được gửi đến bạn với thông tin làm thế nào để khôi phục lại mật khẩu của bạn.', 'on_email_body' => 'Server \'%LABEL%\' hoạt động lại, it was down for
'success_password_reset' => 'Mật khẩu bạn được khôi phục thành công. Vui lòng đăng nhập.', %LAST_OFFLINE_DURATION%:<br><br>Server: %LABEL%<br>IP: %IP%<br>Cổng: %PORT%<br>Thời
), gian: %DATE%',
'error' => array( 'on_pushover_title' => 'Server \'%LABEL%\' hoạt động',
'401_unauthorized' => 'Không được phép', 'on_pushover_message' => 'Server \'%LABEL%\' hoạt động lại, it was down for
'401_unauthorized_description' => 'Bạn không có quyền xem trang này.', %LAST_OFFLINE_DURATION%:<br><br>Server: %LABEL%<br>IP: %IP%<br>Cổng:
), %PORT%<br>Thời gian: %DATE%',
),
'login' => array(
'welcome_usermenu' => 'Chào mừng, %user_name%',
'title_sign_in' => 'Vui lòng đăng nhập',
'title_forgot' => 'Quên mật khẩu?',
'title_reset' => 'Khôi phục mật khẩu',
'submit' => 'Gửi',
'remember_me' => 'Ghi nhớ tôi',
'login' => 'Đăng nhập',
'logout' => 'Đăng xuất',
'username' => 'Tên đăng nhập',
'password' => 'Mật khẩu',
'password_repeat' => 'Nhập lại mật khẩu',
'password_forgot' => 'Quên mật khẩu?',
'password_reset' => 'Khôi phục mật khẩu',
'password_reset_email_subject' => 'Khôi phục lại mật khẩu của bạn cho PHP Server Monitor',
'password_reset_email_body' => 'Vui lòng sử dụng liên kết sau đây để thiết lập lại mật
khẩu của bạn. Xin lưu ý hết hạn trong 1 giờ.<br><br>%link%',
'error_user_incorrect' => 'Tên người dùng cung cấp không thể tìm thấy.',
'error_login_incorrect' => 'Thông tin không đúng.',
'error_login_passwords_nomatch' => 'Mật khẩu được cung cấp không phù hợp.',
'error_reset_invalid_link' => 'Liên kết đặt lại mà bạn cung cấp không hợp lệ.',
'success_password_forgot' => 'Một email đã được gửi đến bạn với thông tin làm thế nào
để khôi phục lại mật khẩu của bạn.',
'success_password_reset' => 'Mật khẩu bạn được khôi phục thành công. Vui lòng đăng nhập.',
),
'error' => array(
'401_unauthorized' => 'Không được phép',
'401_unauthorized_description' => 'Bạn không có quyền xem trang này.',
),
); );

View File

@ -1,4 +1,5 @@
<?php <?php
/** /**
* PHP Server Monitor * PHP Server Monitor
* Monitor your servers and websites. * Monitor your servers and websites.
@ -26,304 +27,303 @@
**/ **/
$sm_lang = array( $sm_lang = array(
'name' => '中文 - Chinese', 'name' => '中文 - Chinese',
'locale' => array('zh_CN.UTF-8', 'zh_CN', 'chinese', 'chinese-cn'), 'locale' => array(
'locale_tag' => 'zh', '0' => 'zh_CN.UTF-8',
'locale_dir' => 'ltr', '1' => 'zh_CN',
'system' => array( '2' => 'chinese',
'title' => 'Server Monitor', '3' => 'chinese-cn',
'install' => '安装', ),
'action' => '操作', 'locale_tag' => 'zh',
'save' => '保存', 'locale_dir' => 'ltr',
'edit' => '编辑', 'system' => array(
'delete' => '删除', 'title' => 'Server Monitor',
'date' => '日期', 'install' => '安装',
'message' => '消息', 'action' => '操作',
'yes' => '是', 'save' => '保存',
'no' => '否', 'edit' => '编辑',
'insert' => '新增', 'delete' => '删除',
'add_new' => '添加', 'date' => '日期',
'update_available' => '发现新版本({version}) <a href="https://github.com/phpservermon/phpservermon/releases/latest" target="_blank" rel="noopener">http://www.phpservermonitor.org</a>.', 'message' => '消息',
'back_to_top' => '返回顶部', 'yes' => '是',
'go_back' => '后退', 'no' => '否',
'ok' => '确认', 'insert' => '新增',
'cancel' => '取消', 'add_new' => '添加',
// date/time format according the strftime php function format parameter http://php.net/manual/function.strftime.php 'update_available' => '发现新版本({version}) <a
'short_day_format' => '%B %e', href="https://github.com/phpservermon/phpservermon/releases/latest" target="_blank"
'long_day_format' => '%B %e, %Y', rel="noopener">http://www.phpservermonitor.org</a>.',
'yesterday_format' => '昨日 %k:%M', 'back_to_top' => '返回顶部',
'other_day_format' => '%A %k:%M', 'go_back' => '后退',
'never' => '从未', 'ok' => '确认',
'hours_ago' => '%d 小时前', 'cancel' => '取消',
'an_hour_ago' => '1小时前', 'short_day_format' => '%B %e',
'minutes_ago' => '%d 分钟前', 'long_day_format' => '%B %e, %Y',
'a_minute_ago' => '1分钟前', 'yesterday_format' => '昨日 %k:%M',
'seconds_ago' => '%d 秒前', 'other_day_format' => '%A %k:%M',
'a_second_ago' => '刚刚', 'never' => '从未',
'year' => 'year', 'hours_ago' => '%d 小时前',
'years' => 'years', 'an_hour_ago' => '1小时前',
'month' => 'month', 'minutes_ago' => '%d 分钟前',
'months' => 'months', 'a_minute_ago' => '1分钟前',
'day' => 'day', 'seconds_ago' => '%d 秒前',
'days' => 'days', 'a_second_ago' => '刚刚',
'hour' => 'hour', ),
'hours' => 'hours', 'menu' => array(
'minute' => 'minute', 'config' => '设置',
'minutes' => 'minutes', 'server' => '监控',
'second' => 'second', 'server_log' => '日志',
'seconds' => 'seconds', 'server_status' => '状态',
), 'server_update' => '刷新',
'menu' => array( 'user' => '用户',
'config' => '设置', 'help' => '帮助',
'server' => '监控', ),
'server_log' => '日志', 'users' => array(
'server_status' => '状态', 'user' => '用户',
'server_update' => '刷新', 'name' => '名称',
'user' => '用户', 'user_name' => '用户名',
'help' => '帮助', 'password' => '密码',
), 'password_repeat' => '重复密码',
'users' => array( 'password_leave_blank' => '留空为不修改',
'user' => '用户', 'level' => '等级',
'name' => '名称', 'level_10' => '超级管理员',
'user_name' => '用户名', 'level_20' => '普通用户',
'password' => '密码', 'level_description' => '<b>超级管理员</b> 拥有所有权限: 管理服务器, 用户
'password_repeat' => '重复密码', 以及修改设置.<br><b>普通用户</b>
'password_leave_blank' => '留空为不修改', 只能查看及更新自己名下所属的服务器.',
'level' => '等级', 'mobile' => '手机',
'level_10' => '超级管理员', 'email' => '邮件',
'level_20' => '普通用户', 'pushover' => 'Pushover',
'level_description' => '<b>超级管理员</b> 拥有所有权限: 管理服务器, 用户 以及修改设置.<br><b>普通用户</b> 只能查看及更新自己名下所属的服务器.', 'pushover_description' => 'Pushover 是第三方用于实时通知的服务(收费). 详情见 <a
'mobile' => '手机', href="https://pushover.net/" target="_blank" rel="noopener">Pushover 官网</a>.',
'email' => '邮件', 'pushover_key' => 'Pushover Key',
'pushover' => 'Pushover', 'pushover_device' => 'Pushover Device',
'pushover_description' => 'Pushover 是第三方用于实时通知的服务(收费). 详情见 <a href="https://pushover.net/" target="_blank" rel="noopener">Pushover 官网</a>.', 'pushover_device_description' => '要发送信息的设备名. 留空则发送到所有设备.',
'pushover_key' => 'Pushover Key', 'delete_title' => '删除用户',
'pushover_device' => 'Pushover Device', 'delete_message' => '确认删除用户 \'%1\'?',
'pushover_device_description' => '要发送信息的设备名. 留空则发送到所有设备.', 'deleted' => '用户已删除.',
'delete_title' => '删除用户', 'updated' => '用户已更新.',
'delete_message' => '确认删除用户 \'%1\'?', 'inserted' => '用户已添加.',
'deleted' => '用户已删除.', 'profile' => '个人资料',
'updated' => '用户已更新.', 'profile_updated' => '个人资料已更新.',
'inserted' => '用户已添加.', 'error_user_name_bad_length' => '用户名长度必须为2-64个字符.',
'profile' => '个人资料', 'error_user_name_invalid' => '用户名只允许使用字母 (a-z, A-Z), 数字 (0-9), 點(。)
'profile_updated' => '个人资料已更新.', 及下划线 (_).',
'error_user_name_bad_length' => '用户名长度必须为2-64个字符.', 'error_user_name_exists' => '该用户名已存在.',
'error_user_name_invalid' => '用户名只允许使用字母 (a-z, A-Z), 数字 (0-9), 點(。) 及下划线 (_).', 'error_user_email_bad_length' => '电子邮箱长度必须为5-255个字符.',
'error_user_name_exists' => '该用户名已存在.', 'error_user_email_invalid' => '无效的邮箱地址.',
'error_user_email_bad_length' => '电子邮箱长度必须为5-255个字符.', 'error_user_level_invalid' => '该用户等级无效.',
'error_user_email_invalid' => '无效的邮箱地址.', 'error_user_no_match' => '该用户名不存在.',
'error_user_level_invalid' => '该用户等级无效.', 'error_user_password_invalid' => '密码无效.',
'error_user_no_match' => '该用户名不存在.', 'error_user_password_no_match' => '密码不符.',
'error_user_password_invalid' => '密码无效.', ),
'error_user_password_no_match' => '密码不符.', 'log' => array(
), 'title' => '日志概览',
'log' => array( 'type' => '类型',
'title' => '日志概览', 'status' => '状态',
'type' => '类型', 'email' => '邮件',
'status' => '状态', 'sms' => '短信',
'email' => '邮件', 'pushover' => 'Pushover',
'sms' => '短信', 'no_logs' => '没有日志',
'pushover' => 'Pushover', ),
'no_logs' => '没有日志', 'servers' => array(
'clear' => 'Clear log', 'server' => '业务',
'delete_title' => 'Delete log', 'status' => '状态',
'delete_message' => 'Are you sure you want to delete <b>all</b> logs?', 'label' => '标签',
), 'domain' => 'URL/IP',
'servers' => array( 'timeout' => '超时时间',
'server' => '业务', 'timeout_description' => '等待服务器响应的时间.',
'status' => '状态', 'authentication_settings' => '访问权限设置',
'label' => '标签', 'optional' => '可选',
'domain' => 'URL/IP', 'website_username' => '用户名',
'timeout' => '超时时间', 'website_username_description' => '网站分配的用户名.',
'timeout_description' => '等待服务器响应的时间.', 'website_password' => '密码',
'authentication_settings' => '访问权限设置', 'website_password_description' => '网站分配的密码,密码将会加密存放',
'optional' => '可选', 'fieldset_monitoring' => '通知',
'website_username' => '用户名', 'fieldset_permissions' => '权限',
'website_username_description' => '网站分配的用户名.', 'port' => '端口',
'website_password' => '密码', 'custom_port' => '指定端口',
'website_password_description' => '网站分配的密码,密码将会加密存放', 'popular_ports' => '默认端口',
'fieldset_monitoring' => '通知', 'please_select' => '请选择',
'fieldset_permissions' => '权限', 'type' => '类型',
'port' => '端口', 'type_website' => '网站',
'custom_port' => '指定端口', 'type_service' => '服务',
'popular_ports' => '默认端口', 'pattern' => '字符串/正则匹配',
'please_select' => '请选择', 'pattern_description' => '如果在网站上未找到对应匹配内容, 则标记该网站为离线.
'type' => '类型', 支持正则表达式.',
'type_website' => '网站', 'last_check' => '最后检查',
'type_service' => '服务', 'last_online' => '最后在线',
'pattern' => '字符串/正则匹配', 'last_offline' => 'Last offline',
'pattern_description' => '如果在网站上未找到对应匹配内容, 则标记该网站为离线. 支持正则表达式.', 'monitoring' => '监控',
'last_check' => '最后检查', 'no_monitoring' => '未监控',
'last_online' => '最后在线', 'email' => '邮件',
'last_offline' => 'Last offline', 'send_email' => '发送邮件',
'monitoring' => '监控', 'sms' => '短信',
'no_monitoring' => '未监控', 'send_sms' => '发送短信',
'email' => '邮件', 'pushover' => 'Pushover',
'send_email' => '发送邮件', 'users' => '用户',
'sms' => '短信', 'delete_title' => '删除服务器',
'send_sms' => '发送短信', 'delete_message' => '确认删除服务器 \'%1\'?',
'pushover' => 'Pushover', 'deleted' => '服务器已删除.',
'users' => '用户', 'updated' => '服务器已更新.',
'delete_title' => '删除服务器', 'inserted' => '服务器已添加.',
'delete_message' => '确认删除服务器 \'%1\'?', 'latency' => '延迟',
'deleted' => '服务器已删除.', 'latency_max' => '最大延迟',
'updated' => '服务器已更新.', 'latency_min' => '最小延迟',
'inserted' => '服务器已添加.', 'latency_avg' => '平均延迟',
'latency' => '延迟', 'uptime' => '在线时长',
'latency_max' => '最大延迟', 'year' => '年',
'latency_min' => '最小延迟', 'month' => '月',
'latency_avg' => '平均延迟', 'week' => '周',
'uptime' => '在线时长', 'day' => '日',
'year' => '年', 'hour' => '小时',
'month' => '月', 'warning_threshold' => '报警阈值',
'week' => '周', 'warning_threshold_description' => '失败达到多少次数则标记为离线.',
'day' => '日', 'chart_last_week' => '上周',
'hour' => '小时', 'chart_history' => '更早',
'warning_threshold' => '报警阈值', 'chart_day_format' => '%Y-%m-%d',
'warning_threshold_description' => '失败达到多少次数则标记为离线.', 'chart_long_date_format' => '%Y-%m-%d %H:%M:%S',
'chart_last_week' => '上周', 'chart_short_date_format' => '%m/%d %H:%M',
'chart_history' => '更早', 'chart_short_time_format' => '%H:%M',
// Charts date format according jqPlot date format http://www.jqplot.com/docs/files/plugins/jqplot-dateAxisRenderer-js.html 'warning_notifications_disabled_sms' => '短信通知不可用.',
'chart_day_format' => '%Y-%m-%d', 'warning_notifications_disabled_email' => 'Email 通知不可用.',
'chart_long_date_format' => '%Y-%m-%d %H:%M:%S', 'warning_notifications_disabled_pushover' => 'Pushover 通知不可用.',
'chart_short_date_format' => '%m/%d %H:%M', 'error_server_no_match' => '服务器不存在.',
'chart_short_time_format' => '%H:%M', 'error_server_label_bad_length' => '标签 长度要求 1 ~ 255 字符.',
'warning_notifications_disabled_sms' => '短信通知不可用.', 'error_server_ip_bad_length' => 'URL / IP 长度要求 1 ~ 255 字符.',
'warning_notifications_disabled_email' => 'Email 通知不可用.', 'error_server_ip_bad_service' => '非法 IP.',
'warning_notifications_disabled_pushover' => 'Pushover 通知不可用.', 'error_server_ip_bad_website' => '非法 URL.',
'error_server_no_match' => '服务器不存在.', 'error_server_type_invalid' => '非法选项.',
'error_server_label_bad_length' => '标签 长度要求 1 ~ 255 字符.', 'error_server_warning_threshold_invalid' => '报警阈值为大于 0 的数字.',
'error_server_ip_bad_length' => 'URL / IP 长度要求 1 ~ 255 字符.', ),
'error_server_ip_bad_service' => '非法 IP.', 'config' => array(
'error_server_ip_bad_website' => '非法 URL.', 'general' => '通用',
'error_server_type_invalid' => '非法选项.', 'language' => '语言',
'error_server_warning_threshold_invalid' => '报警阈值为大于 0 的数字.', 'show_update' => '每周检查更新?',
), 'password_encrypt_key' => '加密密钥',
'config' => array( 'password_encrypt_key_note' => '该密钥用于加密访问 URL 时的用户名和密码.
'general' => '通用', 如果需要修改密钥,请同步修改以前的监控业务,确认密钥匹配!',
'language' => '语言', 'proxy' => '使用代理',
'show_update' => '每周检查更新?', 'proxy_url' => '代理IP',
'password_encrypt_key' => '加密密钥', 'proxy_user' => '用户名',
'password_encrypt_key_note' => '该密钥用于加密访问 URL 时的用户名和密码. 如果需要修改密钥,请同步修改以前的监控业务,确认密钥匹配!', 'proxy_password' => '密码',
'proxy' => '使用代理', 'email_status' => '允许发送邮件?',
'proxy_url' => '代理IP', 'email_from_email' => '发件人地址',
'proxy_user' => '用户名', 'email_from_name' => '发件人名称',
'proxy_password' => '密码', 'email_smtp' => '使用SMTP发送',
'email_status' => '允许发送邮件?', 'email_smtp_host' => 'SMTP主机',
'email_from_email' => '发件人地址', 'email_smtp_port' => 'SMTP端口',
'email_from_name' => '发件人名称', 'email_smtp_security' => 'SMTP 设置',
'email_smtp' => '使用SMTP发送', 'email_smtp_security_none' => '空',
'email_smtp_host' => 'SMTP主机', 'email_smtp_username' => 'SMTP用户名',
'email_smtp_port' => 'SMTP端口', 'email_smtp_password' => 'SMTP密码',
'email_smtp_security' => 'SMTP 设置', 'email_smtp_noauth' => '留空为无验证',
'email_smtp_security_none' => '空', 'sms_status' => '允许发送短信SMS?',
'email_smtp_username' => 'SMTP用户名', 'sms_gateway' => '短信SMS发送网关',
'email_smtp_password' => 'SMTP密码', 'sms_gateway_username' => 'SMS网关用户名',
'email_smtp_noauth' => '留空为无验证', 'sms_gateway_password' => 'SMS网关密码',
'sms_status' => '允许发送短信SMS?', 'sms_from' => '发信人电话号',
'sms_gateway' => '短信SMS发送网关', 'pushover_status' => '允许 Pushover 通知',
'sms_gateway_username' => 'SMS网关用户名', 'pushover_description' => 'Pushover 是第三方用于实时通知的服务(收费). 详情见 <a
'sms_gateway_password' => 'SMS网关密码', href="https://pushover.net/" target="_blank" rel="noopener">Pushover 官网</a>.',
'sms_from' => '发信人电话号', 'pushover_clone_app' => '点此创建 Pushover App',
'pushover_status' => '允许 Pushover 通知', 'pushover_api_token' => 'Pushover API Token',
'pushover_description' => 'Pushover 是第三方用于实时通知的服务(收费). 详情见 <a href="https://pushover.net/" target="_blank" rel="noopener">Pushover 官网</a>.', 'pushover_api_token_description' => '请先 <a href="%1$s" target="_blank" rel="noopener">注册Pushover</a>
'pushover_clone_app' => '点此创建 Pushover App', 并获取 Api Token.',
'pushover_api_token' => 'Pushover API Token', 'alert_type' => '如果想要收到提醒请选中此项.',
'pushover_api_token_description' => '请先 <a href="%1$s" target="_blank" rel="noopener">注册Pushover</a> 并获取 Api Token.', 'alert_type_description' => '<b>状态变化:</b> 业务 online -> offline offline -> online
'alert_type' => '如果想要收到提醒请选中此项.', 的状态变化将会收到提醒.<br><br /><b>离线状态:</b>
'alert_type_description' => '<b>状态变化:</b> '. 服务器首次发生离线状态将会收到提醒 cronjob
'业务 online -> offline 或 offline -> online 的状态变化将会收到提醒.<br>'. 设定为15分钟执行一次
'<br /><b>离线状态:</b> '. 服务器从1:00-6:00一直处于当状态那么你将于1:00首次发现脱机时收到一条提醒,之后不会重复提醒.<br><br><b>总是提醒:</b>
'服务器首次发生离线状态将会收到提醒 ,如:'. 每次脚本执行或站点离线(即使站点离线很久已提醒过)均发送提醒.',
'cronjob 设定为15分钟执行一次 服务器从1:00-6:00一直处于当状态'. 'alert_type_status' => '状态变化',
'那么你将于1:00首次发现脱机时收到一条提醒之后不会重复提醒.<br>'. 'alert_type_offline' => '离线状态',
'<br><b>总是提醒:</b> '. 'alert_type_always' => '总是提醒',
'每次脚本执行或站点离线(即使站点离线很久已提醒过)均发送提醒.', 'alert_proxy' => '代理只用于 URL 监控,如没有用户名密码,请留空',
'alert_type_status' => '状态变化', 'alert_proxy_url' => '格式: Host:Port',
'alert_type_offline' => '离线状态', 'log_status' => '状态记录',
'alert_type_always' => '总是提醒', 'log_status_description' => '如果状态记录设置为开, 提醒发送时均会保存记录.',
'alert_proxy' => '代理只用于 URL 监控,如没有用户名密码,请留空', 'log_email' => '记录脚本所发邮件?',
'alert_proxy_url' => '格式: Host:Port', 'log_sms' => '记录脚本所发短信?',
'log_status' => '状态记录', 'log_pushover' => '记录脚本所发pushover消息?',
'log_status_description' => '如果状态记录设置为开, 提醒发送时均会保存记录.', 'updated' => '设置已更新.',
'log_email' => '记录脚本所发邮件?', 'tab_email' => '邮件发送设置',
'log_sms' => '记录脚本所发短信?', 'tab_sms' => '短信发送设置',
'log_pushover' => '记录脚本所发pushover消息?', 'tab_pushover' => 'Pushover',
'updated' => '设置已更新.', 'settings_email' => '邮件发送设置',
'tab_email' => '邮件发送设置', 'settings_sms' => '短信发送设置',
'tab_sms' => '短信发送设置', 'settings_pushover' => 'Pushover 设置',
'tab_pushover' => 'Pushover', 'settings_notification' => '提醒设置',
'settings_email' => '邮件发送设置', 'settings_log' => '日志设置',
'settings_sms' => '短信发送设置', 'settings_proxy' => '代理设置',
'settings_pushover' => 'Pushover 设置', 'auto_refresh' => '自动刷新',
'settings_notification' => '提醒设置', 'auto_refresh_description' => '自动刷新服务器页.<br><span class="small">单位为秒, 设置为 0
'settings_log' => '日志设置', 则不自动刷新.</span>',
'settings_proxy' => '代理设置', 'seconds' => '秒',
'auto_refresh' => '自动刷新', 'test' => '测试',
'auto_refresh_description' => 'test_email' => '将发送一封邮件到您账户设置的邮件地址.',
'自动刷新服务器页.<br>'. 'test_sms' => '将发送一封短信到您账户设置的手机号码.',
'<span class="small">'. 'test_pushover' => '将发送一条 Pushover 通知到您账户设置的 key/device 设备上.',
'单位为秒, 设置为 0 则不自动刷新.'. 'send' => '发送',
'</span>', 'test_subject' => '测试',
'seconds' => '秒', 'test_message' => '测试信息',
'test' => '测试', 'email_sent' => '发送邮件',
'test_email' => '将发送一封邮件到您账户设置的邮件地址.', 'email_error' => '发送出错',
'test_sms' => '将发送一封短信到您账户设置的手机号码.', 'sms_sent' => '发送短信',
'test_pushover' => '将发送一条 Pushover 通知到您账户设置的 key/device 设备上.', 'sms_error' => '短信发送出错 %s',
'send' => '发送', 'sms_error_nomobile' => '无法发送短信: 您的账号未设置有效手机号码.',
'test_subject' => '测试', 'pushover_sent' => '发送Pushover通知',
'test_message' => '测试信息', 'pushover_error' => 'Pushover通知发送出错: %s',
'email_sent' => '发送邮件', 'pushover_error_noapp' => 'Pushover通知发送出错: no Pushover App API token found in the global
'email_error' => '发送出错', configuration.',
'sms_sent' => '发送短信', 'pushover_error_nokey' => 'Pushover通知无法发送: no Pushover key found in your profile.',
'sms_error' => '短信发送出错 %s', 'log_retention_period' => '日志保留时长',
'sms_error_nomobile' => '无法发送短信: 您的账号未设置有效手机号码.', 'log_retention_period_description' => '日志存档保留时间0为禁用日志清理',
'pushover_sent' => '发送Pushover通知', 'log_retention_days' => '天',
'pushover_error' => 'Pushover通知发送出错: %s', ),
'pushover_error_noapp' => 'Pushover通知发送出错: no Pushover App API token found in the global configuration.', 'notifications' => array(
'pushover_error_nokey' => 'Pushover通知无法发送: no Pushover key found in your profile.', 'off_sms' => '监控项 \'%LABEL%:%PORT%\' 异常. %ERROR% %IP%',
'log_retention_period' => '日志保留时长', 'off_email_subject' => 'IMPORTANT: 服务器 \'%LABEL%\' 宕机',
'log_retention_period_description' => '日志存档保留时间0为禁用日志清理', 'off_email_body' => '无法连接到以下服务器:<br><br>服务器: %LABEL%<br>IP: %IP%<br>Port:
'log_retention_days' => '天', %PORT%<br>错误: %ERROR%<br>日期: %DATE%',
), 'off_pushover_title' => '服务器 \'%LABEL%\' 宕机',
// for newlines in the email messages use <br> 'off_pushover_message' => '无法连接到以下服务器:<br><br>服务器: %LABEL%<br>IP: %IP%<br>Port:
'notifications' => array( %PORT%<br>错误: %ERROR%<br>日期: %DATE%',
'off_sms' => '监控项 \'%LABEL%:%PORT%\' 异常. %ERROR% %IP%', 'on_sms' => '服务器 \'%LABEL%\' 运行中: ip=%IP%, port=%PORT%, it was down for %LAST_OFFLINE_DURATION%',
'off_email_subject' => 'IMPORTANT: 服务器 \'%LABEL%\' 宕机', 'on_email_subject' => 'IMPORTANT: 服务器 \'%LABEL%\' 运行中',
'off_email_body' => "无法连接到以下服务器:<br><br>服务器: %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>错误: %ERROR%<br>日期: %DATE%", 'on_email_body' => '服务器 \'%LABEL%\' 恢复运行, it was down for
'off_pushover_title' => '服务器 \'%LABEL%\' 宕机', %LAST_OFFLINE_DURATION%:<br><br>服务器: %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>日期:
'off_pushover_message' => "无法连接到以下服务器:<br><br>服务器: %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>错误: %ERROR%<br>日期: %DATE%", %DATE%',
'on_sms' => '服务器 \'%LABEL%\' 运行中: ip=%IP%, port=%PORT%, it was down for %LAST_OFFLINE_DURATION%', 'on_pushover_title' => '服务器 \'%LABEL%\' 运行中',
'on_email_subject' => 'IMPORTANT: 服务器 \'%LABEL%\' 运行中', 'on_pushover_message' => '服务器 \'%LABEL%\' 恢复运行, it was down for
'on_email_body' => "服务器 '%LABEL%' 恢复运行, it was down for %LAST_OFFLINE_DURATION%:<br><br>服务器: %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>日期: %DATE%", %LAST_OFFLINE_DURATION%:<br><br>服务器: %LABEL%<br>IP: %IP%<br>Port:
'on_pushover_title' => '服务器 \'%LABEL%\' 运行中', %PORT%<br>日期: %DATE%',
'on_pushover_message' => "服务器 '%LABEL%' 恢复运行, it was down for %LAST_OFFLINE_DURATION%:<br><br>服务器: %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>日期: %DATE%", ),
), 'login' => array(
'login' => array( 'welcome_usermenu' => '欢迎, %user_name%',
'welcome_usermenu' => '欢迎, %user_name%', 'title_sign_in' => '请登录',
'title_sign_in' => '请登录', 'title_forgot' => '忘记密码?',
'title_forgot' => '忘记密码?', 'title_reset' => '重设密码',
'title_reset' => '重设密码', 'submit' => '提交',
'submit' => '提交', 'remember_me' => '记住我',
'remember_me' => '记住我', 'login' => '登录',
'login' => '登录', 'logout' => '注销',
'logout' => '注销', 'username' => '用户名',
'username' => '用户名', 'password' => '密码',
'password' => '密码', 'password_repeat' => '重复密码',
'password_repeat' => '重复密码', 'password_forgot' => '忘记密码?',
'password_forgot' => '忘记密码?', 'password_reset' => '重设密码',
'password_reset' => '重设密码', 'password_reset_email_subject' => '重设你的密码',
'password_reset_email_subject' => '重设你的密码', 'password_reset_email_body' => '点击以下链接重设密码. 链接1小时内有效.<br><br>%link%',
'password_reset_email_body' => '点击以下链接重设密码. 链接1小时内有效.<br><br>%link%', 'error_user_incorrect' => '该用户不存在.',
'error_user_incorrect' => '该用户不存在.', 'error_login_incorrect' => '登录信息不正确.',
'error_login_incorrect' => '登录信息不正确.', 'error_login_passwords_nomatch' => '密码不符.',
'error_login_passwords_nomatch' => '密码不符.', 'error_reset_invalid_link' => '重设密码链接无效.',
'error_reset_invalid_link' => '重设密码链接无效.', 'success_password_forgot' => '密码重设邮件已发送.',
'success_password_forgot' => '密码重设邮件已发送.', 'success_password_reset' => '密码重设成功.请登录.',
'success_password_reset' => '密码重设成功.请登录.', ),
), 'error' => array(
'error' => array( '401_unauthorized' => '未授权的请求',
'401_unauthorized' => '未授权的请求', '401_unauthorized_description' => '未授权的请求.',
'401_unauthorized_description' => '未授权的请求.', ),
),
); );

367
src/lang/zh_TW.lang.php Normal file
View File

@ -0,0 +1,367 @@
<?php
/**
* PHP Server Monitor
* Monitor your servers and websites.
*
* This file is part of PHP Server Monitor.
* PHP Server Monitor is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* PHP Server Monitor is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with PHP Server Monitor. If not, see <http://www.gnu.org/licenses/>.
*
* @package phpservermon
* @author Jason Cheng <https://github.com/jasoncheng7115>
* @copyright Copyright (c) 2008-2014 Pepijn Over <pep@neanderthal-technology.com>
* @license http://www.gnu.org/licenses/gpl.txt GNU GPL v3
* @version Release: v3.1.1
* @link http://www.phpservermonitor.org/
**/
$sm_lang = array(
'name' => '繁體中文 - Traditional Chinese',
'locale' => array(
'0' => 'zh_TW.UTF-8',
'1' => 'zh_TW',
'2' => 'chinese',
'3' => 'chinese-tw',
),
'locale_tag' => 'zh_TW',
'locale_dir' => 'ltr',
'system' => array(
'title' => 'Server Monitor',
'install' => '安裝',
'action' => '動作',
'save' => '儲存',
'edit' => '編輯',
'delete' => '刪除',
'date' => '日期',
'message' => '訊息',
'yes' => '是',
'no' => '否',
'insert' => '插入',
'add_new' => '增加',
'back_to_top' => '回到最上層',
'go_back' => '返回',
'ok' => '確定',
'cancel' => '取消',
'activate' => '啟用',
'short_day_format' => '%B %e',
'long_day_format' => '%B %e, %Y',
'yesterday_format' => '昨日 %k:%M',
'other_day_format' => '%A %k:%M',
'never' => '從未',
'hours_ago' => '%d小時前',
'an_hour_ago' => '1小時前',
'minutes_ago' => '%d分鐘前',
'a_minute_ago' => '1分鐘前',
'seconds_ago' => '%d秒前',
'a_second_ago' => '剛剛',
'year' => '年',
'years' => '年',
'month' => '月',
'months' => '月',
'day' => '日',
'days' => '日',
'hour' => '時',
'hours' => '時',
'minute' => '分',
'minutes' => '分',
'second' => '秒',
'seconds' => '秒',
),
'menu' => array(
'config' => '設定',
'server' => '伺服器',
'server_log' => '記錄',
'server_status' => '狀態',
'server_update' => '更新',
'user' => '使用者',
'help' => '說明',
),
'users' => array(
'user' => '使用者',
'name' => '顯示名稱',
'user_name' => '使用者名稱',
'password' => '密碼',
'password_repeat' => '再次輸入密碼',
'password_leave_blank' => '若密碼欄位保持空白,表示不做修改',
'level' => '等級',
'level_10' => '超級管理員',
'level_20' => '一般使用者',
'level_description' => '<b>超級管理員</b>
具備所有伺服器的管理權限,可管理使用者以及修改系統設定。<br/><b>一般使用者</b>
僅能查看以及更新自己所負責的伺服器。',
'mobile' => '行動電話',
'email' => '電子郵件',
'pushover' => 'Pushover 通知',
'pushover_description' => 'Pushover
是一種雲端服務,讓你可以很方便的收到即時訊息通知,您可以到<a
href="https://pushover.net/">網站</a>了解更多的內容。',
'pushover_key' => 'Pushover 金鑰',
'pushover_device' => 'Pushover 裝置',
'pushover_device_description' => '發送訊息的裝置名稱,若保留空白,將會發送到所有的裝置。',
'telegram' => 'Telegram 通知',
'telegram_description' => '<a href="https://telegram.org/" target="_blank">Telegram</a>
是一種聊天應用程式,它提供很容易使用的的即時通知能力。您可以到
<a href="http://docs.phpservermonitor.org/" target="_blank">documentation</a>
了解更多的內容。',
'telegram_chat_id' => 'Telegram Chat ID',
'telegram_chat_id_description' => '將訊息發送到指定的聊天室',
'telegram_get_chat_id' => '點選這裡可以取得您的 Chat ID',
'activate_telegram' => '啟用 Telegram 通知',
'activate_telegram_description' => '允許 Telegram 將訊息發送到指定的 Chat
ID。若沒有啟用此項目Telegram
將不允許我們發送通知給您。',
'telegram_bot_username_error_token' => '401 - 未授權,請確認您的 API Token 是有效的。',
'telegram_bot_error' => '啟用 Telegram 通知時發生錯誤:%s',
'delete_title' => '刪除使用者',
'delete_message' => '您確定要刪除使用者 \'%1\'?',
'deleted' => '已刪除使用者。',
'updated' => '已更新使用者。',
'inserted' => '已增加使用者。',
'profile' => '個人資料',
'profile_updated' => '個人資料已經更新。',
'error_user_name_bad_length' => '使用者名稱長度必須為2-64個字元。',
'error_user_name_invalid' => '使用者名稱只允許英文字母(a-z、A-Z)、數字(0-9)以及底線(_)。',
'error_user_name_exists' => '這個使用者名稱已存在。',
'error_user_email_bad_length' => '電子郵件長度為5-255個字元。',
'error_user_email_invalid' => '無效的電子郵件。',
'error_user_level_invalid' => '無效的使用者等級。',
'error_user_no_match' => '這個使用者名稱不存在。',
'error_user_password_invalid' => '無效的密碼。',
'error_user_password_no_match' => '密碼不符。',
),
'log' => array(
'title' => '記錄概覽',
'type' => '類型',
'status' => '狀態',
'email' => '電子郵件通知',
'sms' => '簡訊通知',
'pushover' => 'Pushover 通知',
'telegram' => 'Telegram 通知',
'no_logs' => '沒有記錄',
'clear' => '清除記錄',
'delete_title' => '刪除記錄',
'delete_message' => '您確定要刪除 <b>所有</b> 記錄?',
),
'servers' => array(
'server' => '伺服器',
'status' => '狀態',
'label' => '標籤',
'domain' => '網域/IP',
'timeout' => '逾時',
'timeout_description' => '等待伺服器回應的秒數。',
'authentication_settings' => '驗證設定 (非必要)',
'website_username' => '使用者',
'website_username_description' => '存取這個網站的使用者。(只支援 Apache 驗證)',
'website_password' => '密碼',
'website_password_description' => '存取這個網站的使用者。(密碼將會以加密形式存放在資料庫)',
'fieldset_monitoring' => '監視',
'fieldset_permissions' => '權限',
'port' => '連接埠',
'custom_port' => '自訂連接埠',
'popular_ports' => '常用連接埠',
'please_select' => '請選擇',
'type' => '類型',
'type_website' => '網站',
'type_service' => '服務',
'type_ping' => 'Ping',
'pattern' => '字串',
'pattern_description' => '如果在網站上沒有找到符合的字串,則將網站標示為離線。',
'pattern_online' => '指明網站上的字串',
'pattern_online_description' => '線上:如果在網站上沒有找到符合的字串,則將網站標示為線上。',
'header_name_description' => '標頭名稱 (區分大小寫)',
'header_value_description' => '標頭的值,可以使用正則表示式。',
'last_check' => '最後一次檢查',
'last_online' => '最後一次上線',
'last_offline' => '最後一次離線',
'monitoring' => '監控中',
'no_monitoring' => '未監控',
'email' => '電子郵件通知',
'send_email' => '發送電子郵件',
'sms' => '簡訊通知',
'send_sms' => '發送簡訊',
'pushover' => 'Pushover 通知',
'send_pushover' => '發送 Pushover 通知',
'telegram' => 'Telegram 通知',
'send_telegram' => '發送 Telegram 通知',
'users' => '使用者',
'delete_title' => '刪除伺服器',
'delete_message' => '您確定要刪除這個伺服器 \'%1\'?',
'deleted' => '伺服器已刪除。',
'updated' => '伺服器已更新。',
'inserted' => '伺服器已增加。',
'latency' => '延遲',
'latency_max' => '延遲 (最大)',
'latency_min' => '延遲 (最小)',
'latency_avg' => '延遲 (平均)',
'uptime' => '上線時間',
'year' => '年',
'month' => '月',
'week' => '週',
'day' => '日',
'hour' => '小時',
'warning_threshold' => '警報臨界值',
'warning_threshold_description' => '失敗達到多少次數則標示為離線。',
'chart_last_week' => '上週',
'chart_history' => '更早',
'chart_day_format' => '%Y-%m-%d',
'chart_long_date_format' => '%Y-%m-%d %H:%M:%S',
'chart_short_date_format' => '%m/%d %H:%M',
'chart_short_time_format' => '%H:%M',
'warning_notifications_disabled_sms' => '簡訊通知已關閉。',
'warning_notifications_disabled_email' => '電子郵件通知已關閉。',
'warning_notifications_disabled_pushover' => 'Pushover 通知已關閉。',
'warning_notifications_disabled_telegram' => 'Telegram 通知已關閉。',
'error_server_no_match' => '找不到伺服器。',
'error_server_label_bad_length' => '標籤必須在1到255間的字元。',
'error_server_ip_bad_length' => '網域/IP必須在1到255間的字元。',
'error_server_ip_bad_service' => '無效的 IP 位址。',
'error_server_ip_bad_website' => '無效的網址。',
'error_server_type_invalid' => '無效的的伺服器型態',
'error_server_warning_threshold_invalid' => '警報臨界值必須是大於 0 的有效整數。',
),
'config' => array(
'general' => '一般',
'language' => '語言',
'show_update' => '檢查更新',
'password_encrypt_key' => '加密金鑰',
'password_encrypt_key_note' => '這個加密金鑰將用於保護您登入這個網站的密碼,如果修改了此金鑰,原本已經存在的密碼將無法使用!',
'proxy' => '啟用 Proxy',
'proxy_url' => 'Proxy URL',
'proxy_user' => 'Proxy 使用者名稱',
'proxy_password' => 'Proxy 密碼',
'email_status' => '啟用電子郵件通知',
'email_from_email' => '寄件者信箱',
'email_from_name' => '寄件者名稱',
'email_smtp' => '使用SMTP發信',
'email_smtp_host' => 'SMTP主機',
'email_smtp_port' => 'SMTP連接埠口',
'email_smtp_security' => 'SMTP安全性',
'email_smtp_security_none' => '無',
'email_smtp_username' => 'SMTP使用者名稱',
'email_smtp_password' => 'SMTP使用者密碼',
'email_smtp_noauth' => '留空白表示不做帳號驗證',
'sms_status' => '啟用簡訊通知',
'sms_gateway' => '簡訊服務提供者',
'sms_gateway_username' => '簡訊閘道使用者名稱',
'sms_gateway_password' => '簡訊閘道使用者密碼',
'sms_from' => '發送人電話號碼',
'pushover_status' => '啟用Pushover通知',
'pushover_description' => 'Pushover是線上服務讓您可以方便的收到即時通知請參考 <a
href="https://pushover.net/" target="_blank"> 網站</a> 可以得到更詳細的資訊。</a> ',
'pushover_clone_app' => '點選這裡可快速建立Pushover App',
'pushover_api_token_description' => '在您使用 Pushover 通知之前,需要先到這裡-><a href="%1$s"
target="_blank" rel="noopener">註冊Pushover App帳號</a>
接著在這個網頁輸入你的的Pushover App API Token號碼。',
'telegram_status' => '允許發送 Telegram 訊息',
'telegram_description' => '<a href="https://telegram.org/" target="_blank">Telegram</a>
是一種聊天應用程式,它提供很容易使用的即時通知服務。請參考
<a href="http://docs.phpservermonitor.org/" target="_blank">文件庫</a>
可以取得更多資訊與安裝說明。',
'telegram_api_token_description' => '使用 Telegram 通知之前,您必需先取得 API Token。請到 <a
href="http://docs.phpservermonitor.org/" target="_blank">文件庫</a> 取得說明。',
'alert_type' => '需要提醒的類別',
'alert_type_description' => '<b>狀態改變:</b> 伺服器 連線 -> 離線或連線 ->
連線的狀態變化將會收到提醒通知。<br/><br /><b>離線:</b>
伺服器首次發生離線狀態將會收到提醒設定為15分鐘執行一次伺服器從1:00-6:00一直處於離線狀態那麼你將會在1:00首次收到一則提醒通知,之後便不會在收到重覆的提醒通知。<br/><br><b>全部:</b>
每次執行當伺服器離線(即使伺服器離線很久已提醒過了)均發送提醒通知。',
'alert_type_status' => '狀態改變',
'alert_type_offline' => '離線',
'alert_type_always' => '全部',
'alert_proxy_url' => '<b>格式:</b> Host:Port',
'log_status' => '狀態記錄',
'log_status_description' => '如果啟用狀態記錄,則每一筆提醒通知都會保留記錄。',
'log_email' => '保留電子郵件通知發送記錄',
'log_sms' => '保留簡訊通知發送記錄',
'log_pushover' => '保留 pushover 通知發送記錄',
'log_telegram' => '保留 telegram 通知發送記錄',
'updated' => '已更新設定。',
'tab_email' => '電子郵件發送設定',
'tab_sms' => '簡訊發送設定',
'tab_pushover' => 'Pushover 通知',
'tab_telegram' => 'Telegram 通知',
'settings_email' => '電子郵件發送設定',
'settings_sms' => '簡訊發送設定',
'settings_pushover' => 'Pushover 發送設定',
'settings_telegram' => 'Telegram 發送設定',
'settings_notification' => '提醒設定',
'settings_log' => '記錄設定',
'settings_proxy' => 'Proxy 設定',
'auto_refresh' => '自動更新',
'seconds' => '秒',
'test' => '測試',
'test_email' => '電子郵件將發送到您在使用者設定內指定的電子郵件信箱。',
'test_sms' => '簡訊將發送到您在使用者設定內指定的行動電話號碼。',
'test_pushover' => 'Pushover 通知將發送到您在使用者設定的裝置。',
'test_telegram' => 'Telegram 通知將發送到您在使用者設定的 Chat ID。',
'send' => '傳送',
'test_subject' => '標題',
'test_message' => '訊息',
'email_sent' => '傳送',
'email_error' => '電子郵件傳送發生錯誤',
'sms_sent' => '簡訊發送',
'sms_error' => '簡訊發送發生錯誤',
'sms_error_nomobile' => '無法傳送 SMS 簡訊測試:您設定的電話號碼無效或無法找到。',
'pushover_sent' => '傳送 Pushover 通知',
'pushover_error' => '傳送 Pushover 通知發生錯誤: %s',
'pushover_error_noapp' => '無法傳送 Pushover 通知: 在系統設定找不到 Pushover App API token。',
'pushover_error_nokey' => '無法傳送 Pushover 通知: 在系統設定找不到 Pushover key found 。',
'telegram_sent' => '傳送 Telegram 通知',
'telegram_error' => '傳送 Telegram 通知發生錯誤: %s',
'telegram_error_notoken' => '無法傳送 Telegram 通知: 在系統設定找不到 Telegram API token。',
'telegram_error_noid' => '無法傳送 Telegram 通知: 在您的個人資料找不到 Chat ID。',
'log_retention_period' => '記錄保留期限',
'log_retention_period_description' => '保留伺服器運作時間和記錄歸檔的天數輸入0可以防止記錄被清除',
'log_retention_days' => '日',
),
'notifications' => array(
'off_sms' => '伺服器 \'%LABEL%\' 關機: ip=%IP%, port=%PORT%. Error=%ERROR%',
'off_email_subject' => 'IMPORTANT: 服務器 \'%LABEL%\' 關機',
'off_email_body' => '無法連線到以下伺服器:<br/><br/>伺服器: %LABEL%<br/>IP: %IP%<br/>Port:
%PORT%<br/>錯誤: %ERROR%<br/>日期: %DATE%',
'off_pushover_title' => '伺服器 \'%LABEL%\' 關機',
'off_pushover_message' => '無法連線到以下伺服器:<br/><br/>伺服器: %LABEL%<br/>IP: %IP%<br/>Port:
%PORT%<br/>錯誤: %ERROR%<br/>日期: %DATE%',
'off_telegram_message' => '無法連線到以下伺服器:<br/><br/>伺服器: %LABEL%<br/>IP: %IP%<br/>Port:
%PORT%<br/>錯誤: %ERROR%<br/>日期: %DATE%',
'on_email_subject' => 'IMPORTANT: 伺服器 \'%LABEL%\' 運行中',
'on_pushover_title' => '伺服器 \'%LABEL%\' 運作中',
),
'login' => array(
'welcome_usermenu' => '歡迎,%user_name%',
'title_sign_in' => '請登入',
'title_forgot' => '忘記密碼',
'title_reset' => '密碼重置',
'submit' => '送出',
'remember_me' => '記住我',
'login' => '登入',
'logout' => '登出',
'username' => '使用者名稱',
'password' => '密碼',
'password_repeat' => '再次輸入密碼',
'password_forgot' => '忘記密碼',
'password_reset' => '重設密碼',
'password_reset_email_subject' => '重設您的密碼',
'password_reset_email_body' => '點選以下連結來重設密碼這個連結於1小時後失效。<br/><br/>%link%',
'error_user_incorrect' => '使用者不存在。',
'error_login_incorrect' => '登入資料不正確。',
'error_login_passwords_nomatch' => '密碼不符合。',
'error_reset_invalid_link' => '重設密碼連結無效。',
'success_password_forgot' => '重設密碼電子郵件已發送。',
'success_password_reset' => '密碼重設成功,請登入。',
),
'error' => array(
'401_unauthorized' => '驗證失敗',
'401_unauthorized_description' => '您没有權限進入這個頁面。',
),
);

View File

@ -1,4 +1,5 @@
<?php <?php
/** /**
* PHP Server Monitor * PHP Server Monitor
* Monitor your servers and websites. * Monitor your servers and websites.
@ -26,480 +27,509 @@
**/ **/
namespace psm\Module; namespace psm\Module;
use psm\Service\Database; use psm\Service\Database;
use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\DependencyInjection\ContainerAwareTrait; use Symfony\Component\DependencyInjection\ContainerAwareTrait;
abstract class AbstractController implements ControllerInterface { abstract class AbstractController implements ControllerInterface
{
use ContainerAwareTrait;
use ContainerAwareTrait; /**
* Current action
* @var string $action
*/
protected $action;
/** /**
* Current action * Default action
* @var string $action * @var string $action_default
*/ * @see setActions()
protected $action; */
protected $action_default;
/** /**
* Default action * Actions available for this module
* @var string $action_default * @var array $actions
* @see setActions() * @see setActions()
*/ * @see getAction()
protected $action_default; */
protected $actions = array();
/** /**
* Actions available for this module * Add footer to page?
* @var array $actions * @var boolean $add_footer
* @see setActions() * @see addFooter()
* @see getAction() */
*/ protected $add_footer = true;
protected $actions = array();
/** /**
* Add footer to page? * Add menu to page?
* @var boolean $add_footer * @var boolean $add_menu
* @see addFooter() * @see addMenu()
*/ */
protected $add_footer = true; protected $add_menu = true;
/** /**
* Add menu to page? * @var string $csrf_key
* @var boolean $add_menu */
* @see addMenu() protected $csrf_key;
*/
protected $add_menu = true;
/** /**
* @var string $csrf_key * Messages to show the user
*/ * @var array $messages
protected $csrf_key; * @see addMessage()
*/
protected $messages = array();
/** /**
* Messages to show the user * Sidebar to add
* @var array $messages * @var \psm\Util\Module\Sidebar $sidebar
* @see addMessage() */
*/ protected $sidebar;
protected $messages = array();
/** /**
* Sidebar to add * array of Modal to add
* @var \psm\Util\Module\Sidebar $sidebar * @var \psm\Util\Module\ModalInterface[] $modal
*/ */
protected $sidebar; protected $modal = array();
/** /**
* array of Modal to add * html code of header accessories
* @var \psm\Util\Module\ModalInterface[] $modal * @var string $header_accessories
*/ */
protected $modal = array(); protected $header_accessories;
/** /**
* html code of header accessories * Database object
* @var string $header_accessories * @var \psm\Service\Database $db
*/ */
protected $header_accessories; protected $db;
/** /**
* Database object * Twig object
* @var \psm\Service\Database $db * @var \Twig_Environment $twig
*/ */
protected $db; protected $twig;
/** /**
* Twig object * User service
* @var \Twig_Environment $twig * @var \psm\Service\User $user
*/ */
protected $twig; protected $user;
/** /**
* User service * Required user level for this module
* @var \psm\Service\User $user * @var int $user_level_required
*/ * @see setMinUserLevelRequired()
protected $user; */
protected $user_level_required = PSM_USER_USER;
/** /**
* Required user level for this module * Required user level for certain actions
* @var int $user_level_required * @var int $user_level_required_actions
* @see setMinUserLevelRequired() * @see setMinUserLevelRequiredForAction()
*/ */
protected $user_level_required = PSM_USER_USER; protected $user_level_required_actions = array();
/** /*
* Required user level for certain actions * Required using black background layout
* @var int $user_level_required_actions * @var boolean $black_background
* @see setMinUserLevelRequiredForAction() */
*/ protected $black_background = false;
protected $user_level_required_actions = array();
/* /**
* Required using black background layout * XHR mode?
* @var boolean $black_background * @var boolean $xhr
*/ * @see isXHR()
protected $black_background = false; */
protected $xhr = false;
/** public function __construct(Database $db, \Twig_Environment $twig)
* XHR mode? {
* @var boolean $xhr $this->db = $db;
* @see isXHR() $this->twig = $twig;
*/ }
protected $xhr = false;
function __construct(Database $db, \Twig_Environment $twig) { /**
$this->db = $db; * Run the controller.
$this->twig = $twig; *
} * @param string $action if NULL, the action will be retrieved from user input (GET/POST)
* @return \Symfony\Component\HttpFoundation\Response
*/
public function run($action = null)
{
if ($action === null) {
$action = psm_GET('action', psm_POST('action', $this->action_default));
}
$this->xhr = (bool) psm_GET('xhr', psm_POST('xhr', false));
/** $result = $this->runAction($action);
* Run the controller.
*
* @param string $action if NULL, the action will be retrieved from user input (GET/POST)
* @return \Symfony\Component\HttpFoundation\Response
*/
public function run($action = null) {
if ($action === null) {
$action = psm_GET('action', psm_POST('action', $this->action_default));
}
$this->xhr = (bool) psm_GET('xhr', psm_POST('xhr', false));
if (!in_array($action, $this->actions) || !($result = $this->runAction($action))) { if (!in_array($action, $this->actions) || !$result) {
$result = $this->runAction($this->action_default); $result = $this->runAction($this->action_default);
} }
if ($result instanceof Response) { if ($result instanceof Response) {
return $result; return $result;
} }
// no response returned from execute, create regular HTML // no response returned from execute, create regular HTML
return $this->createHTML($result); return $this->createHTML($result);
} }
/** /**
* Run a specified action * Run a specified action
* *
* For it to run, the "execute$action" method must exist. * For it to run, the "execute$action" method must exist.
* @param string $action * @param string $action
* @return mixed FALSE when action couldnt be initialized, response otherwise * @return mixed FALSE when action couldnt be initialized, response otherwise
*/ */
protected function runAction($action) { protected function runAction($action)
if (isset($this->user_level_required_actions[$action])) { {
if ($this->getUser()->getUserLevel() > $this->user_level_required_actions[$action]) { if (isset($this->user_level_required_actions[$action])) {
// user is not allowed to access this action.. if ($this->getUser()->getUserLevel() > $this->user_level_required_actions[$action]) {
return false; // user is not allowed to access this action..
} return false;
} }
$method = 'execute'.ucfirst($action); }
if (method_exists($this, $method)) { $method = 'execute' . ucfirst($action);
$this->action = $action; if (method_exists($this, $method)) {
$result = $this->$method(); $this->action = $action;
// if result from execute is null, no return value given so return true to indicate a successful execute $result = $this->$method();
return ($result === null) ? true : $result; // if result from execute is null, no return value given so return true to indicate a successful execute
} return ($result === null) ? true : $result;
return false; }
} return false;
}
/** /**
* Create the HTML code for the module. * Create the HTML code for the module.
* *
* If XHR is on, no main template will be added. * If XHR is on, no main template will be added.
* *
* @param string $html HTML code to add to the main body * @param string $html HTML code to add to the main body
* @return \Symfony\Component\HttpFoundation\Response * @return \Symfony\Component\HttpFoundation\Response
*/ */
protected function createHTML($html = null) { protected function createHTML($html = null)
if (!$this->xhr) { {
// in XHR mode, we will not add the main template if (!$this->xhr) {
$tpl_data = array( // in XHR mode, we will not add the main template
'title' => strtoupper(psm_get_lang('system', 'title')), $tpl_data = array(
'label_back_to_top' => psm_get_lang('system', 'back_to_top'), 'title' => strtoupper(psm_get_lang('system', 'title')),
'add_footer' => $this->add_footer, 'label_back_to_top' => psm_get_lang('system', 'back_to_top'),
'version' => 'v'.PSM_VERSION, 'add_footer' => $this->add_footer,
'messages' => $this->getMessages(), 'version' => 'v' . PSM_VERSION,
'html_content' => $html, 'messages' => $this->getMessages(),
); 'html_content' => $html,
);
// add menu to page? // add menu to page?
if ($this->add_menu) { if ($this->add_menu) {
$tpl_data['html_menu'] = $this->createHTMLMenu(); $tpl_data['html_menu'] = $this->createHTMLMenu();
} }
// add header accessories to page ? // add header accessories to page ?
if ($this->header_accessories) { if ($this->header_accessories) {
$tpl_data['header_accessories'] = $this->header_accessories; $tpl_data['header_accessories'] = $this->header_accessories;
} }
// add modal dialog to page ? // add modal dialog to page ?
if (sizeof($this->modal)) { if (sizeof($this->modal)) {
$html_modal = ''; $html_modal = '';
foreach ($this->modal as $modal) { foreach ($this->modal as $modal) {
$html_modal .= $modal->createHTML(); $html_modal .= $modal->createHTML();
} }
$tpl_data['html_modal'] = $html_modal; $tpl_data['html_modal'] = $html_modal;
} }
// add sidebar to page? // add sidebar to page?
if ($this->sidebar !== null) { if ($this->sidebar !== null) {
$tpl_data['html_sidebar'] = $this->sidebar->createHTML(); $tpl_data['html_sidebar'] = $this->sidebar->createHTML();
} }
if (psm_update_available()) { if (psm_update_available()) {
$tpl_data['update_available'] = str_replace('{version}', 'v'.psm_get_conf('version_update_check'), psm_get_lang('system', 'update_available')); $tpl_data['update_available'] = str_replace(
} '{version}',
'v' .
psm_get_conf('version_update_check'),
psm_get_lang('system', 'update_available')
);
}
if ($this->black_background) { if ($this->black_background) {
$tpl_data['body_class'] = 'black_background'; $tpl_data['body_class'] = 'black_background';
} }
$html = $this->twig->render('main/body.tpl.html', $tpl_data); $html = $this->twig->render('main/body.tpl.html', $tpl_data);
} }
$response = new Response($html); $response = new Response($html);
return $response; return $response;
} }
/** /**
* Create HTML code for the menu * Create HTML code for the menu
* @return string * @return string
*/ */
protected function createHTMLMenu() { protected function createHTMLMenu()
$ulvl = $this->getUser()->getUserLevel(); {
$ulvl = $this->getUser()->getUserLevel();
$tpl_data = array( $tpl_data = array(
'label_help' => psm_get_lang('menu', 'help'), 'label_help' => psm_get_lang('menu', 'help'),
'label_profile' => psm_get_lang('users', 'profile'), 'label_profile' => psm_get_lang('users', 'profile'),
'label_logout' => psm_get_lang('login', 'logout'), 'label_logout' => psm_get_lang('login', 'logout'),
'url_profile' => psm_build_url(array('mod' => 'user_profile')), 'url_profile' => psm_build_url(array('mod' => 'user_profile')),
'url_logout' => psm_build_url(array('logout' => 1)), 'url_logout' => psm_build_url(array('logout' => 1)),
'label_current' => psm_get_lang('system', 'current'), 'label_current' => psm_get_lang('system', 'current'),
); );
switch ($ulvl) { switch ($ulvl) {
case PSM_USER_ADMIN: case PSM_USER_ADMIN:
$items = array('server_status', 'server', 'server_log', 'user', 'config', 'server_update'); $items = array('server_status', 'server', 'server_log', 'user', 'config', 'server_update');
break; break;
case PSM_USER_USER: case PSM_USER_USER:
$items = array('server_status', 'server', 'server_log', 'server_update'); $items = array('server_status', 'server', 'server_log', 'server_update');
break; break;
default: default:
$items = array(); $items = array();
break; break;
} }
$tpl_data['menu'] = array(); $tpl_data['menu'] = array();
foreach ($items as $key) { foreach ($items as $key) {
$tpl_data['menu'][] = array( $tpl_data['menu'][] = array(
'active' => ($key == psm_GET('mod')) ? 'active' : '', 'active' => ($key == psm_GET('mod')) ? 'active' : '',
'url' => psm_build_url(array('mod' => $key)), 'url' => psm_build_url(array('mod' => $key)),
'label' => psm_get_lang('menu', $key), 'label' => psm_get_lang('menu', $key),
); );
} }
if ($ulvl != PSM_USER_ANONYMOUS) { if ($ulvl != PSM_USER_ANONYMOUS) {
$user = $this->getUser()->getUser(); $user = $this->getUser()->getUser();
$tpl_data['label_usermenu'] = str_replace( $tpl_data['label_usermenu'] = str_replace(
'%user_name%', '%user_name%',
$user->name, $user->name,
psm_get_lang('login', 'welcome_usermenu') psm_get_lang('login', 'welcome_usermenu')
); );
} }
return $this->twig->render('main/menu.tpl.html', $tpl_data); return $this->twig->render('main/menu.tpl.html', $tpl_data);
} }
/** /**
* Hide or show the footer of the page * Hide or show the footer of the page
* @param boolean $value * @param boolean $value
*/ */
protected function addFooter($value) { protected function addFooter($value)
$this->add_footer = $value; {
} $this->add_footer = $value;
}
/** /**
* Hide or show the menu of the page * Hide or show the menu of the page
* @param boolean $value * @param boolean $value
*/ */
protected function addMenu($value) { protected function addMenu($value)
$this->add_menu = $value; {
} $this->add_menu = $value;
}
/** /**
* Set actions available * Set actions available
* @param string|array $actions * @param string|array $actions
* @param string $default default action * @param string $default default action
* @param boolean $append if TRUE, the actions will be added to the current actions * @param boolean $append if TRUE, the actions will be added to the current actions
* @return psm\Module\AbstractModule * @return psm\Module\AbstractModule
* @see getAction() * @see getAction()
*/ */
protected function setActions($actions, $default = null, $append = true) { protected function setActions($actions, $default = null, $append = true)
if (!is_array($actions)) { {
$actions = array($actions); if (!is_array($actions)) {
} $actions = array($actions);
if ($append) { }
$this->actions = array_merge($actions); if ($append) {
} else { $this->actions = array_merge($actions);
$this->actions = $actions; } else {
} $this->actions = $actions;
if ($default !== null) { }
$this->action_default = $default; if ($default !== null) {
} $this->action_default = $default;
return $this; }
} return $this;
}
/** /**
* Get the current action * Get the current action
* @return string * @return string
* @see setActions() * @see setActions()
*/ */
public function getAction() { public function getAction()
return $this->action; {
} return $this->action;
}
/** /**
* Add one or multiple message to the stack to be displayed to the user * Add one or multiple message to the stack to be displayed to the user
* @param string|array $msg * @param string|array $msg
* @param string $shortcode primary/success/warning/danger * @param string $shortcode primary/success/warning/danger
* @return \psm\Module\ControllerInterface * @return \psm\Module\ControllerInterface
* @see getMessages() * @see getMessages()
*/ */
public function addMessage($msg, $shortcode = 'primary') { public function addMessage($msg, $shortcode = 'primary')
if (!is_array($msg)) { {
$msg = array($msg); if (!is_array($msg)) {
} $msg = array($msg);
$class= $shortcode; }
switch ($shortcode) { $class = $shortcode;
case 'error': switch ($shortcode) {
$icon = 'exclamation-circle'; case 'error':
$class= 'danger'; $icon = 'exclamation-circle';
break; $class = 'danger';
case 'success': break;
$icon = 'check-circle'; case 'success':
break; $icon = 'check-circle';
case 'warning': break;
$icon = 'exclamation-triangle'; case 'warning':
break; $icon = 'exclamation-triangle';
case 'primary': break;
default: case 'primary':
$icon = 'info-circle'; default:
$shortcode = 'info'; $icon = 'info-circle';
break; $shortcode = 'info';
} break;
}
foreach ($msg as $m) { foreach ($msg as $m) {
$this->messages[] = array( $this->messages[] = array(
'message' => $m, 'message' => $m,
'shortcode' => $shortcode, 'shortcode' => $shortcode,
'class' => $class, 'class' => $class,
'icon' => $icon, 'icon' => $icon,
); );
} }
return $this; return $this;
} }
/** /**
* Get all messages (and optionally clear them) * Get all messages (and optionally clear them)
* @param boolean $clear * @param boolean $clear
* @return array * @return array
* @see addMessage() * @see addMessage()
*/ */
public function getMessages($clear = true) { public function getMessages($clear = true)
$msgs = $this->messages; {
if ($clear) { $msgs = $this->messages;
$this->messages = array(); if ($clear) {
} $this->messages = array();
return $msgs; }
} return $msgs;
}
/** /**
* Set the minimum required user level for this controller * Set the minimum required user level for this controller
* @param int $level * @param int $level
* @return \psm\Module\AbstractController * @return \psm\Module\AbstractController
*/ */
public function setMinUserLevelRequired($level) { public function setMinUserLevelRequired($level)
$this->user_level_required = intval($level); {
return $this; $this->user_level_required = intval($level);
} return $this;
}
/** /**
* Get the minimum required user level for this controller * Get the minimum required user level for this controller
* @return int * @return int
*/ */
public function getMinUserLevelRequired() { public function getMinUserLevelRequired()
return $this->user_level_required; {
} return $this->user_level_required;
}
/** /**
* Set the minimum required user level for a certain action. * Set the minimum required user level for a certain action.
* *
* Use this only if one of the access is more restricted than the entire controller * Use this only if one of the access is more restricted than the entire controller
* @param int $level * @param int $level
* @param string|array $actions one or more actions to set this level for * @param string|array $actions one or more actions to set this level for
* @return \psm\Module\AbstractController * @return \psm\Module\AbstractController
* @see setMinUserLevelRequired() * @see setMinUserLevelRequired()
*/ */
public function setMinUserLevelRequiredForAction($level, $actions) { public function setMinUserLevelRequiredForAction($level, $actions)
if (!is_array($actions)) { {
$actions = array($actions); if (!is_array($actions)) {
} $actions = array($actions);
foreach ($actions as $action) { }
$this->user_level_required_actions[$action] = intval($level); foreach ($actions as $action) {
} $this->user_level_required_actions[$action] = intval($level);
return $this; }
} return $this;
}
/** /**
* Add a sidebar to the page * Add a sidebar to the page
* @param \psm\Util\Module\SidebarInterface $sidebar * @param \psm\Util\Module\SidebarInterface $sidebar
* @return \psm\Module\ControllerInterface * @return \psm\Module\ControllerInterface
*/ */
public function setSidebar(\psm\Util\Module\SidebarInterface $sidebar) { public function setSidebar(\psm\Util\Module\SidebarInterface $sidebar)
$this->sidebar = $sidebar; {
return $this; $this->sidebar = $sidebar;
} return $this;
}
/** /**
* Add a modal dialog to the page * Add a modal dialog to the page
* @param \psm\Util\Module\ModalInterface $modal * @param \psm\Util\Module\ModalInterface $modal
* @return \psm\Module\ControllerInterface * @return \psm\Module\ControllerInterface
*/ */
public function addModal(\psm\Util\Module\ModalInterface $modal) { public function addModal(\psm\Util\Module\ModalInterface $modal)
$this->modal[$modal->getModalID()] = $modal; {
return $this; $this->modal[$modal->getModalID()] = $modal;
} return $this;
}
/** /**
* Set the html code of the header accessories * Set the html code of the header accessories
* @param string $html * @param string $html
*/ */
public function setHeaderAccessories($html) { public function setHeaderAccessories($html)
$this->header_accessories = $html; {
} $this->header_accessories = $html;
}
/** /**
* Check if XHR is on * Check if XHR is on
* @return boolean * @return boolean
*/ */
public function isXHR() { public function isXHR()
return $this->xhr; {
} return $this->xhr;
}
/** /**
* Get user service * Get user service
* @return \psm\Service\User * @return \psm\Service\User
*/ */
public function getUser() { public function getUser()
return $this->container->get('user'); {
} return $this->container->get('user');
}
/** /**
* Get custom key for CSRF validation * Get custom key for CSRF validation
* @return string * @return string
*/ */
public function getCSRFKey() { public function getCSRFKey()
return $this->csrf_key; {
} return $this->csrf_key;
}
/** /**
* Set CSRF key for validation * Set CSRF key for validation
* @param string $key * @param string $key
* @return \psm\Module\ControllerInterface * @return \psm\Module\ControllerInterface
*/ */
protected function setCSRFKey($key) { protected function setCSRFKey($key)
$this->csrf_key = $key; {
$this->twig->addGlobal('csrf_key', $key); $this->csrf_key = $key;
return $this; $this->twig->addGlobal('csrf_key', $key);
} return $this;
}
} }

View File

@ -1,4 +1,5 @@
<?php <?php
/** /**
* PHP Server Monitor * PHP Server Monitor
* Monitor your servers and websites. * Monitor your servers and websites.
@ -23,7 +24,7 @@
* @license http://www.gnu.org/licenses/gpl.txt GNU GPL v3 * @license http://www.gnu.org/licenses/gpl.txt GNU GPL v3
* @version Release: @package_version@ * @version Release: @package_version@
* @link http://www.phpservermonitor.org/ * @link http://www.phpservermonitor.org/
* @since phpservermon 3.0 * @since phpservermon 3.0
**/ **/
namespace psm\Module\Config; namespace psm\Module\Config;
@ -31,16 +32,17 @@ namespace psm\Module\Config;
use psm\Module\ModuleInterface; use psm\Module\ModuleInterface;
use Symfony\Component\DependencyInjection\ContainerBuilder; use Symfony\Component\DependencyInjection\ContainerBuilder;
class ConfigModule implements ModuleInterface { class ConfigModule implements ModuleInterface
{
public function load(ContainerBuilder $container) { public function load(ContainerBuilder $container)
{
}
} public function getControllers()
{
public function getControllers() { return array(
return array( 'config' => __NAMESPACE__ . '\Controller\ConfigController',
'config' => __NAMESPACE__.'\Controller\ConfigController', );
); }
}
} }

View File

@ -1,4 +1,5 @@
<?php <?php
/** /**
* PHP Server Monitor * PHP Server Monitor
* Monitor your servers and websites. * Monitor your servers and websites.
@ -26,411 +27,496 @@
**/ **/
namespace psm\Module\Config\Controller; namespace psm\Module\Config\Controller;
use psm\Module\AbstractController; use psm\Module\AbstractController;
use psm\Service\Database; use psm\Service\Database;
class ConfigController extends AbstractController { class ConfigController extends AbstractController
{
/** /**
* Checkboxes * Checkboxes
* @var array $checkboxes * @var array $checkboxes
*/ */
protected $checkboxes = array( protected $checkboxes = array(
'proxy', 'proxy',
'email_status', 'email_status',
'email_smtp', 'email_smtp',
'sms_status', 'sms_status',
'pushover_status', 'pushover_status',
'telegram_status', 'telegram_status',
'log_status', 'jabber_status',
'log_email', 'log_status',
'log_sms', 'log_email',
'log_pushover', 'log_sms',
'log_telegram', 'log_pushover',
'show_update', 'log_telegram',
'log_jabber',
'show_update',
'combine_notifications', 'combine_notifications',
); );
/**
* Fields for saving
* @var array $fields
*/
protected $fields = array(
'proxy_url',
'proxy_user',
'proxy_password',
'email_from_name',
'email_from_email',
'email_smtp_host',
'email_smtp_port',
'email_smtp_username',
'sms_gateway_username',
'sms_gateway_password',
'sms_from',
'pushover_api_token',
'telegram_api_token',
'jabber_host',
'jabber_port',
'jabber_username',
'jabber_domain'
);
/**
* Fields for saving encrypted.
* @var array
*/
protected $encryptedFields = [
'email_smtp_password',
'jabber_password'
];
private $default_tab = 'general';
public function __construct(Database $db, \Twig_Environment $twig)
{
parent::__construct($db, $twig);
$this->setMinUserLevelRequired(PSM_USER_ADMIN);
$this->setCSRFKey('config');
$this->setActions(array(
'index', 'save',
), 'index');
}
/**
* Populate all the config fields with values from the database
*
* @return string
*/
protected function executeIndex()
{
$this->twig->addGlobal('subtitle', psm_get_lang('menu', 'config'));
$tpl_data = $this->getLabels();
$config_db = $this->db->select(
PSM_DB_PREFIX . 'config',
null,
array('key', 'value')
);
$config = array();
foreach ($config_db as $entry) {
$config[$entry['key']] = $entry['value'];
}
// generate language array
$lang_keys = psm_get_langs();
$tpl_data['language_current'] = (isset($config['language']))
? $config['language']
: 'en_US';
$tpl_data['languages'] = array();
foreach ($lang_keys as $key => $label) {
$tpl_data['languages'][] = array(
'value' => $key,
'label' => $label,
);
}
// generate sms_gateway array
$sms_gateways = psm_get_sms_gateways();
$tpl_data['sms_gateway'] = array();
foreach ($sms_gateways as $sms_gateway => $label) {
$tpl_data['sms_gateway'][] = array(
'value' => $sms_gateway,
'label' => $label,
);
}
foreach (array("status", "offline", "always") as $alert_type) {
$tpl_data['alert_type'][] = array(
'value' => $alert_type,
'label' => psm_get_lang('config', 'alert_type_' . $alert_type),
);
}
$tpl_data['email_smtp_security'] = array(
array(
'value' => '',
'label' => psm_get_lang('config', 'email_smtp_security_none')
),
array(
'value' => 'ssl',
'label' => 'SSL'
),
array(
'value' => 'tls',
'label' => 'TLS'
)
);
$tpl_data['sms_gateway_selected'] = isset($config['sms_gateway']) ?
$config['sms_gateway'] : current($sms_gateways);
$tpl_data['alert_type_selected'] = isset($config['alert_type']) ?
$config['alert_type'] : '';
$tpl_data['email_smtp_security_selected'] = isset($config['email_smtp_security']) ?
$config['email_smtp_security'] : '';
$tpl_data['auto_refresh_servers'] = isset($config['auto_refresh_servers']) ?
$config['auto_refresh_servers'] : '0';
$tpl_data['log_retention_period'] = isset($config['log_retention_period']) ?
$config['log_retention_period'] : '365';
$tpl_data['password_encrypt_key'] = isset($config['password_encrypt_key']) ?
$config['password_encrypt_key'] : sha1(microtime());
foreach ($this->checkboxes as $input_key) {
$tpl_data[$input_key . '_checked'] =
(isset($config[$input_key]) && (int) $config[$input_key] == 1)
? 'checked="checked"'
: '';
}
foreach ($this->fields as $input_key) {
$tpl_data[$input_key] = (isset($config[$input_key])) ? $config[$input_key] : '';
}
// encrypted fields
foreach ($this->encryptedFields as $encryptedField) {
$tpl_data[$encryptedField] = '';
}
$tpl_data[$this->default_tab . '_active'] = 'active';
$testmodals = array('email', 'sms', 'pushover', 'telegram', 'jabber');
foreach ($testmodals as $modal_id) {
$modal = new \psm\Util\Module\Modal(
$this->twig,
'test' . ucfirst($modal_id),
\psm\Util\Module\Modal::MODAL_TYPE_OKCANCEL
);
$this->addModal($modal);
$modal->setTitle(psm_get_lang('servers', 'send_' . $modal_id));
$modal->setMessage(psm_get_lang('config', 'test_' . $modal_id));
$modal->setOKButtonLabel(psm_get_lang('config', 'send'));
}
return $this->twig->render('module/config/config.tpl.html', $tpl_data);
}
/**
* If a post has been done, gather all the posted data
* and save it to the database
*/
protected function executeSave()
{
if (!empty($_POST)) {
// save new config
$clean = array(
'language' => $_POST['language'],
'sms_gateway' => $_POST['sms_gateway'],
'alert_type' => $_POST['alert_type'],
'email_smtp_security' =>
in_array($_POST['email_smtp_security'], array('', 'ssl', 'tls'))
? $_POST['email_smtp_security']
: '',
'auto_refresh_servers' => intval(psm_POST('auto_refresh_servers', 0)),
'log_retention_period' => intval(psm_POST('log_retention_period', 365)),
'password_encrypt_key' => psm_POST('password_encrypt_key', sha1(microtime()))
);
foreach ($this->checkboxes as $input_key) {
$clean[$input_key] = (isset($_POST[$input_key])) ? '1' : '0';
}
foreach ($this->fields as $input_key) {
if (isset($_POST[$input_key])) {
$clean[$input_key] = $_POST[$input_key];
}
}
foreach ($this->encryptedFields as $encryptedField) {
$value = filter_input(INPUT_POST, $encryptedField);
if ($value !== null && $value !== '') {
$clean[$encryptedField] = psm_password_encrypt(psm_get_conf('password_encrypt_key'), $value);
}
// else { leave as is }
}
$language_refresh = ($clean['language'] != psm_get_conf('language'));
foreach ($clean as $key => $value) {
psm_update_conf($key, $value);
}
$this->addMessage(psm_get_lang('config', 'updated'), 'success');
if (!empty($_POST['test_email'])) {
$this->testEmail();
} elseif (!empty($_POST['test_sms'])) {
$this->testSMS();
} elseif (!empty($_POST['test_pushover'])) {
$this->testPushover();
} elseif (!empty($_POST['test_telegram'])) {
$this->testTelegram();
} elseif (!empty($_POST['test_jabber'])) {
$this->testJabber();
}
if ($language_refresh) {
header('Location: ' . psm_build_url(array('mod' => 'config'), true, false));
die();
}
if (isset($_POST['general_submit'])) {
$this->default_tab = 'general';
} elseif (isset($_POST['email_submit']) || !empty($_POST['test_email'])) {
$this->default_tab = 'email';
} elseif (isset($_POST['sms_submit']) || !empty($_POST['test_sms'])) {
$this->default_tab = 'sms';
} elseif (isset($_POST['pushover_submit']) || !empty($_POST['test_pushover'])) {
$this->default_tab = 'pushover';
} elseif (isset($_POST['telegram_submit']) || !empty($_POST['test_telegram'])) {
$this->default_tab = 'telegram';
} elseif (isset($_POST['jabber_submit']) || !empty($_POST['test_jabber'])) {
$this->default_tab = 'jabber';
}
}
return $this->runAction('index');
}
/**
* Execute email test
*
* @todo move test to separate class
*/
protected function testEmail()
{
$mail = psm_build_mail();
$message = psm_get_lang('config', 'test_message');
$mail->Subject = psm_get_lang('config', 'test_subject');
$mail->Priority = 1;
$mail->Body = $message;
$mail->AltBody = str_replace('<br/>', "\n", $message);
$user = $this->getUser()->getUser();
$mail->AddAddress($user->email, $user->name);
if ($mail->Send()) {
$this->addMessage(psm_get_lang('config', 'email_sent'), 'success');
} else {
$this->addMessage(psm_get_lang('config', 'email_error') . ': ' . $mail->ErrorInfo, 'error');
}
}
/**
* Execute SMS test
*
* @todo move test to separate class
*/
protected function testSMS()
{
$sms = psm_build_sms();
if ($sms) {
$user = $this->getUser()->getUser();
if (empty($user->mobile)) {
$this->addMessage(psm_get_lang('config', 'sms_error_nomobile'), 'error');
} else {
$sms->addRecipients($user->mobile);
$result = $sms->sendSMS(psm_get_lang('config', 'test_message'));
if ($result === 1) {
$this->addMessage(psm_get_lang('config', 'sms_sent'), 'success');
} else {
$this->addMessage(sprintf(psm_get_lang('config', 'sms_error'), $result), 'error');
}
}
}
}
/**
* Execute pushover test
*
* @todo move test to separate class
*/
protected function testPushover()
{
$pushover = psm_build_pushover();
$pushover->setDebug(true);
$user = $this->getUser()->getUser();
$apiToken = psm_get_conf('pushover_api_token');
if (empty($apiToken)) {
$this->addMessage(psm_get_lang('config', 'pushover_error_noapp'), 'error');
} elseif (empty($user->pushover_key)) {
$this->addMessage(psm_get_lang('config', 'pushover_error_nokey'), 'error');
} else {
$pushover->setPriority(0);
$pushover->setTitle(psm_get_lang('config', 'test_subject'));
$pushover->setMessage(psm_get_lang('config', 'test_message'));
$pushover->setUser($user->pushover_key);
if ($user->pushover_device != '') {
$pushover->setDevice($user->pushover_device);
}
$result = $pushover->send();
if (isset($result['output']->status) && $result['output']->status == 1) {
$this->addMessage(psm_get_lang('config', 'pushover_sent'), 'success');
} else {
if (isset($result['output']->errors->error)) {
$error = $result['output']->errors->error;
} else {
$error = 'Unknown';
}
$this->addMessage(sprintf(psm_get_lang('config', 'pushover_error'), $error), 'error');
}
}
}
/**
* Execute telegram test
*
* @todo move test to separate class
*/
protected function testTelegram()
{
$telegram = psm_build_telegram();
$user = $this->getUser()->getUser();
$apiToken = psm_get_conf('telegram_api_token');
if (empty($apiToken)) {
$this->addMessage(psm_get_lang('config', 'telegram_error_notoken'), 'error');
} elseif (empty($user->telegram_id)) {
$this->addMessage(psm_get_lang('config', 'telegram_error_noid'), 'error');
} else {
$telegram->setMessage(psm_get_lang('config', 'test_message'));
$telegram->setUser($user->telegram_id);
$result = $telegram->send();
if (isset($result['ok']) && $result['ok'] != false) {
$this->addMessage(psm_get_lang('config', 'telegram_sent'), 'success');
} else {
if (isset($result['description'])) {
$error = $result['description'];
} else {
$error = 'Unknown';
}
$this->addMessage(sprintf(psm_get_lang('config', 'telegram_error'), $error), 'error');
}
}
}
/** /**
* Fields for saving * Test Jabber.
* @var array $fields
*/ */
protected $fields = array( protected function testJabber()
'proxy_url', {
'proxy_user', $user = $this->getUser()->getUser();
'proxy_password', psm_jabber_send_message(
'email_from_name', psm_get_conf('jabber_host'),
'email_from_email', psm_get_conf('jabber_username'),
'email_smtp_host', psm_password_decrypt(psm_get_conf('password_encrypt_key'), psm_get_conf('jabber_password')),
'email_smtp_port', [$user->jabber],
'email_smtp_username', psm_get_lang('config', 'test_message'),
'email_smtp_password', (trim(psm_get_conf('jabber_port')) !== '' ? (int)psm_get_conf('jabber_port') : null),
'sms_gateway_username', (trim(psm_get_conf('jabber_domain')) !== '' ? psm_get_conf('jabber_domain') : null)
'sms_gateway_password', );
'sms_from', // no message - async ... so just info
'pushover_api_token', $this->addMessage(psm_get_lang('config', 'jabber_check'), 'info');
'telegram_api_token', // @todo possible to set message via ajax with callback ...
); }
private $default_tab = 'general'; protected function getLabels()
{
function __construct(Database $db, \Twig_Environment $twig) { return array(
parent::__construct($db, $twig); 'label_tab_email' => psm_get_lang('config', 'tab_email'),
'label_tab_sms' => psm_get_lang('config', 'tab_sms'),
$this->setMinUserLevelRequired(PSM_USER_ADMIN); 'label_tab_pushover' => psm_get_lang('config', 'tab_pushover'),
$this->setCSRFKey('config'); 'label_tab_telegram' => psm_get_lang('config', 'tab_telegram'),
'label_tab_jabber' => psm_get_lang('config', 'tab_jabber'),
$this->setActions(array( 'label_settings_email' => psm_get_lang('config', 'settings_email'),
'index', 'save', 'label_settings_sms' => psm_get_lang('config', 'settings_sms'),
), 'index'); 'label_settings_pushover' => psm_get_lang('config', 'settings_pushover'),
} 'label_settings_telegram' => psm_get_lang('config', 'settings_telegram'),
'label_settings_jabber' => psm_get_lang('config', 'settings_jabber'),
/** 'label_settings_notification' => psm_get_lang('config', 'settings_notification'),
* Populate all the config fields with values from the database 'label_settings_log' => psm_get_lang('config', 'settings_log'),
* 'label_settings_proxy' => psm_get_lang('config', 'settings_proxy'),
* @return string 'label_general' => psm_get_lang('config', 'general'),
*/ 'label_language' => psm_get_lang('config', 'language'),
protected function executeIndex() { 'label_show_update' => psm_get_lang('config', 'show_update'),
$this->twig->addGlobal('subtitle', psm_get_lang('menu', 'config')); 'label_password_encrypt_key' => psm_get_lang('config', 'password_encrypt_key'),
$tpl_data = $this->getLabels(); 'label_password_encrypt_key_note' => psm_get_lang('config', 'password_encrypt_key_note'),
'label_proxy' => psm_get_lang('config', 'proxy'),
$config_db = $this->db->select( 'label_proxy_url' => psm_get_lang('config', 'proxy_url'),
PSM_DB_PREFIX.'config', 'label_proxy_user' => psm_get_lang('config', 'proxy_user'),
null, 'label_proxy_password' => psm_get_lang('config', 'proxy_password'),
array('key', 'value') 'label_email_status' => psm_get_lang('config', 'email_status'),
); 'label_email_from_email' => psm_get_lang('config', 'email_from_email'),
'label_email_from_name' => psm_get_lang('config', 'email_from_name'),
$config = array(); 'label_email_smtp' => psm_get_lang('config', 'email_smtp'),
foreach ($config_db as $entry) { 'label_email_smtp_host' => psm_get_lang('config', 'email_smtp_host'),
$config[$entry['key']] = $entry['value']; 'label_email_smtp_port' => psm_get_lang('config', 'email_smtp_port'),
} 'label_email_smtp_security' => psm_get_lang('config', 'email_smtp_security'),
'label_email_smtp_username' => psm_get_lang('config', 'email_smtp_username'),
// generate language array 'label_email_smtp_password' => psm_get_lang('config', 'email_smtp_password'),
$lang_keys = psm_get_langs(); 'label_email_smtp_noauth' => psm_get_lang('config', 'email_smtp_noauth'),
$tpl_data['language_current'] = (isset($config['language'])) 'label_sms_status' => psm_get_lang('config', 'sms_status'),
? $config['language'] 'label_sms_gateway' => psm_get_lang('config', 'sms_gateway'),
: 'en_US'; 'label_sms_gateway_username' => psm_get_lang('config', 'sms_gateway_username'),
$tpl_data['languages'] = array(); 'label_sms_gateway_password' => psm_get_lang('config', 'sms_gateway_password'),
foreach ($lang_keys as $key => $label) { 'label_sms_from' => psm_get_lang('config', 'sms_from'),
$tpl_data['languages'][] = array( 'label_pushover_description' => psm_get_lang('config', 'pushover_description'),
'value' => $key, 'label_pushover_status' => psm_get_lang('config', 'pushover_status'),
'label' => $label, 'label_pushover_clone_app' => psm_get_lang('config', 'pushover_clone_app'),
); 'pushover_clone_url' => PSM_PUSHOVER_CLONE_URL,
} 'label_pushover_api_token' => psm_get_lang('config', 'pushover_api_token'),
'label_pushover_api_token_description' => sprintf(
// generate sms_gateway array psm_get_lang('config', 'pushover_api_token_description'),
$sms_gateways = psm_get_sms_gateways(); PSM_PUSHOVER_CLONE_URL
$tpl_data['sms_gateway'] = array(); ),
foreach ($sms_gateways as $sms_gateway => $label) { 'label_telegram_description' => psm_get_lang('config', 'telegram_description'),
$tpl_data['sms_gateway'][] = array( 'label_telegram_status' => psm_get_lang('config', 'telegram_status'),
'value' => $sms_gateway, 'label_telegram_api_token' => psm_get_lang('config', 'telegram_api_token'),
'label' => $label, 'label_telegram_api_token_description' => psm_get_lang('config', 'telegram_api_token_description'),
); 'label_jabber_status' => psm_get_lang('config', 'jabber_status'),
} 'label_jabber_description' => psm_get_lang('config', 'jabber_description'),
'label_jabber_host' => psm_get_lang('config', 'jabber_host'),
foreach (array("status", "offline", "always") as $alert_type) { 'label_jabber_host_description' => psm_get_lang('config', 'jabber_host_description'),
$tpl_data['alert_type'][] = array( 'label_jabber_port' => psm_get_lang('config', 'jabber_port'),
'value' => $alert_type, 'label_jabber_port_description' => psm_get_lang('config', 'jabber_port_description'),
'label' => psm_get_lang('config', 'alert_type_'.$alert_type), 'label_jabber_username' => psm_get_lang('config', 'jabber_username'),
); 'label_jabber_username_description' => psm_get_lang('config', 'jabber_username_description'),
} 'label_jabber_domain' => psm_get_lang('config', 'jabber_domain'),
'label_jabber_domain_description' => psm_get_lang('config', 'jabber_domain_description'),
$tpl_data['email_smtp_security'] = array( 'label_jabber_password' => psm_get_lang('config', 'jabber_password'),
array( 'label_jabber_password_description' => psm_get_lang('config', 'jabber_password_description'),
'value' => '', 'label_alert_type' => psm_get_lang('config', 'alert_type'),
'label' => psm_get_lang('config', 'email_smtp_security_none') 'label_alert_type_description' => psm_get_lang('config', 'alert_type_description'),
), 'label_combine_notifications' => psm_get_lang('config', 'combine_notifications'),
array(
'value' => 'ssl',
'label' => 'SSL'
),
array(
'value' => 'tls',
'label' => 'TLS'
)
);
$tpl_data['sms_gateway_selected'] = isset($config['sms_gateway']) ? $config['sms_gateway'] : current($sms_gateways);
$tpl_data['alert_type_selected'] = isset($config['alert_type']) ? $config['alert_type'] : '';
$tpl_data['email_smtp_security_selected'] = isset($config['email_smtp_security']) ? $config['email_smtp_security'] : '';
$tpl_data['auto_refresh_servers'] = isset($config['auto_refresh_servers']) ? $config['auto_refresh_servers'] : '0';
$tpl_data['log_retention_period'] = isset($config['log_retention_period']) ? $config['log_retention_period'] : '365';
$tpl_data['password_encrypt_key'] = isset($config['password_encrypt_key']) ? $config['password_encrypt_key'] : sha1(microtime());
foreach ($this->checkboxes as $input_key) {
$tpl_data[$input_key.'_checked'] =
(isset($config[$input_key]) && (int) $config[$input_key] == 1)
? 'checked="checked"'
: '';
}
foreach ($this->fields as $input_key) {
$tpl_data[$input_key] = (isset($config[$input_key])) ? $config[$input_key] : '';
}
$tpl_data[$this->default_tab.'_active'] = 'active';
$testmodals = array('email', 'sms', 'pushover', 'telegram');
foreach ($testmodals as $modal_id) {
$modal = new \psm\Util\Module\Modal($this->twig, 'test'.ucfirst($modal_id), \psm\Util\Module\Modal::MODAL_TYPE_OKCANCEL);
$this->addModal($modal);
$modal->setTitle(psm_get_lang('servers', 'send_'.$modal_id));
$modal->setMessage(psm_get_lang('config', 'test_'.$modal_id));
$modal->setOKButtonLabel(psm_get_lang('config', 'send'));
}
return $this->twig->render('module/config/config.tpl.html', $tpl_data);
}
/**
* If a post has been done, gather all the posted data
* and save it to the database
*/
protected function executeSave() {
if (!empty($_POST)) {
// save new config
$clean = array(
'language' => $_POST['language'],
'sms_gateway' => $_POST['sms_gateway'],
'alert_type' => $_POST['alert_type'],
'email_smtp_security' =>
in_array($_POST['email_smtp_security'], array('', 'ssl', 'tls'))
? $_POST['email_smtp_security']
: '',
'auto_refresh_servers' => intval(psm_POST('auto_refresh_servers', 0)),
'log_retention_period' => intval(psm_POST('log_retention_period', 365)),
'password_encrypt_key' => psm_POST('password_encrypt_key', sha1(microtime())),
);
foreach ($this->checkboxes as $input_key) {
$clean[$input_key] = (isset($_POST[$input_key])) ? '1' : '0';
}
foreach ($this->fields as $input_key) {
if (isset($_POST[$input_key])) {
$clean[$input_key] = $_POST[$input_key];
}
}
$language_refresh = ($clean['language'] != psm_get_conf('language'));
foreach ($clean as $key => $value) {
psm_update_conf($key, $value);
}
$this->addMessage(psm_get_lang('config', 'updated'), 'success');
if (!empty($_POST['test_email'])) {
$this->testEmail();
} elseif (!empty($_POST['test_sms'])) {
$this->testSMS();
} elseif (!empty($_POST['test_pushover'])) {
$this->testPushover();
} elseif (!empty($_POST['test_telegram'])) {
$this->testTelegram();
}
if ($language_refresh) {
header('Location: '.psm_build_url(array('mod' => 'config'), true, false));
trigger_error("Redirect failed.", E_USER_ERROR);
}
if (isset($_POST['general_submit'])) {
$this->default_tab = 'general';
} elseif (isset($_POST['email_submit']) || !empty($_POST['test_email'])) {
$this->default_tab = 'email';
} elseif (isset($_POST['sms_submit']) || !empty($_POST['test_sms'])) {
$this->default_tab = 'sms';
} elseif (isset($_POST['pushover_submit']) || !empty($_POST['test_pushover'])) {
$this->default_tab = 'pushover';
} elseif (isset($_POST['telegram_submit']) || !empty($_POST['test_telegram'])) {
$this->default_tab = 'telegram';
}
}
return $this->runAction('index');
}
/**
* Execute email test
*
* @todo move test to separate class
*/
protected function testEmail() {
$mail = psm_build_mail();
$message = psm_get_lang('config', 'test_message');
$mail->Subject = psm_get_lang('config', 'test_subject');
$mail->Priority = 1;
$mail->Body = $message;
$mail->AltBody = str_replace('<br/>', "\n", $message);
$user = $this->getUser()->getUser();
$mail->AddAddress($user->email, $user->name);
if ($mail->Send()) {
$this->addMessage(psm_get_lang('config', 'email_sent'), 'success');
} else {
$this->addMessage(psm_get_lang('config', 'email_error').': '.$mail->ErrorInfo, 'error');
}
}
/**
* Execute SMS test
*
* @todo move test to separate class
*/
protected function testSMS() {
$sms = psm_build_sms();
if ($sms) {
$user = $this->getUser()->getUser();
if (empty($user->mobile)) {
$this->addMessage(psm_get_lang('config', 'sms_error_nomobile'), 'error');
} else {
$sms->addRecipients($user->mobile);
$result = $sms->sendSMS(psm_get_lang('config', 'test_message'));
if ($result === 1) {
$this->addMessage(psm_get_lang('config', 'sms_sent'), 'success');
} else {
$this->addMessage(sprintf(psm_get_lang('config', 'sms_error'), $result), 'error');
}
}
}
}
/**
* Execute pushover test
*
* @todo move test to separate class
*/
protected function testPushover() {
$pushover = psm_build_pushover();
$pushover->setDebug(true);
$user = $this->getUser()->getUser();
$apiToken = psm_get_conf('pushover_api_token');
if (empty($apiToken)) {
$this->addMessage(psm_get_lang('config', 'pushover_error_noapp'), 'error');
} elseif (empty($user->pushover_key)) {
$this->addMessage(psm_get_lang('config', 'pushover_error_nokey'), 'error');
} else {
$pushover->setPriority(0);
$pushover->setTitle(psm_get_lang('config', 'test_subject'));
$pushover->setMessage(psm_get_lang('config', 'test_message'));
$pushover->setUser($user->pushover_key);
if ($user->pushover_device != '') {
$pushover->setDevice($user->pushover_device);
}
$result = $pushover->send();
if (isset($result['output']->status) && $result['output']->status == 1) {
$this->addMessage(psm_get_lang('config', 'pushover_sent'), 'success');
} else {
if (isset($result['output']->errors->error)) {
$error = $result['output']->errors->error;
} else {
$error = 'Unknown';
}
$this->addMessage(sprintf(psm_get_lang('config', 'pushover_error'), $error), 'error');
}
}
}
/**
* Execute telegram test
*
* @todo move test to separate class
*/
protected function testTelegram() {
$telegram = psm_build_telegram();
$user = $this->getUser()->getUser();
$apiToken = psm_get_conf('telegram_api_token');
if (empty($apiToken)) {
$this->addMessage(psm_get_lang('config', 'telegram_error_notoken'), 'error');
} elseif (empty($user->telegram_id)) {
$this->addMessage(psm_get_lang('config', 'telegram_error_noid'), 'error');
} else {
$telegram->setMessage(psm_get_lang('config', 'test_message'));
$telegram->setUser($user->telegram_id);
$result = $telegram->send();
if (isset($result['ok']) && $result['ok'] != false) {
$this->addMessage(psm_get_lang('config', 'telegram_sent'), 'success');
} else {
if (isset($result['description'])) {
$error = $result['description'];
} else {
$error = 'Unknown';
}
$this->addMessage(sprintf(psm_get_lang('config', 'telegram_error'), $error), 'error');
}
}
}
protected function getLabels() {
return array(
'label_tab_email' => psm_get_lang('config', 'tab_email'),
'label_tab_sms' => psm_get_lang('config', 'tab_sms'),
'label_tab_pushover' => psm_get_lang('config', 'tab_pushover'),
'label_tab_telegram' => psm_get_lang('config', 'tab_telegram'),
'label_settings_email' => psm_get_lang('config', 'settings_email'),
'label_settings_sms' => psm_get_lang('config', 'settings_sms'),
'label_settings_pushover' => psm_get_lang('config', 'settings_pushover'),
'label_settings_telegram' => psm_get_lang('config', 'settings_telegram'),
'label_settings_notification' => psm_get_lang('config', 'settings_notification'),
'label_settings_log' => psm_get_lang('config', 'settings_log'),
'label_settings_proxy' => psm_get_lang('config', 'settings_proxy'),
'label_general' => psm_get_lang('config', 'general'),
'label_language' => psm_get_lang('config', 'language'),
'label_show_update' => psm_get_lang('config', 'show_update'),
'label_password_encrypt_key' => psm_get_lang('config', 'password_encrypt_key'),
'label_password_encrypt_key_note' => psm_get_lang('config', 'password_encrypt_key_note'),
'label_proxy' => psm_get_lang('config', 'proxy'),
'label_proxy_url' => psm_get_lang('config', 'proxy_url'),
'label_proxy_user' => psm_get_lang('config', 'proxy_user'),
'label_proxy_password' => psm_get_lang('config', 'proxy_password'),
'label_email_status' => psm_get_lang('config', 'email_status'),
'label_email_from_email' => psm_get_lang('config', 'email_from_email'),
'label_email_from_name' => psm_get_lang('config', 'email_from_name'),
'label_email_smtp' => psm_get_lang('config', 'email_smtp'),
'label_email_smtp_host' => psm_get_lang('config', 'email_smtp_host'),
'label_email_smtp_port' => psm_get_lang('config', 'email_smtp_port'),
'label_email_smtp_security' => psm_get_lang('config', 'email_smtp_security'),
'label_email_smtp_username' => psm_get_lang('config', 'email_smtp_username'),
'label_email_smtp_password' => psm_get_lang('config', 'email_smtp_password'),
'label_email_smtp_noauth' => psm_get_lang('config', 'email_smtp_noauth'),
'label_sms_status' => psm_get_lang('config', 'sms_status'),
'label_sms_gateway' => psm_get_lang('config', 'sms_gateway'),
'label_sms_gateway_username' => psm_get_lang('config', 'sms_gateway_username'),
'label_sms_gateway_password' => psm_get_lang('config', 'sms_gateway_password'),
'label_sms_from' => psm_get_lang('config', 'sms_from'),
'label_pushover_description' => psm_get_lang('config', 'pushover_description'),
'label_pushover_status' => psm_get_lang('config', 'pushover_status'),
'label_pushover_clone_app' => psm_get_lang('config', 'pushover_clone_app'),
'pushover_clone_url' => PSM_PUSHOVER_CLONE_URL,
'label_pushover_api_token' => psm_get_lang('config', 'pushover_api_token'),
'label_pushover_api_token_description' => sprintf(
psm_get_lang('config', 'pushover_api_token_description'),
PSM_PUSHOVER_CLONE_URL
),
'label_telegram_description' => psm_get_lang('config', 'telegram_description'),
'label_telegram_status' => psm_get_lang('config', 'telegram_status'),
'label_telegram_api_token' => psm_get_lang('config', 'telegram_api_token'),
'label_telegram_api_token_description' => psm_get_lang('config', 'telegram_api_token_description'),
'label_alert_type' => psm_get_lang('config', 'alert_type'),
'label_alert_type_description' => psm_get_lang('config', 'alert_type_description'),
'label_combine_notifications' => psm_get_lang('config', 'combine_notifications'),
'label_combine_notifications_description' => psm_get_lang('config', 'combine_notifications_description'), 'label_combine_notifications_description' => psm_get_lang('config', 'combine_notifications_description'),
'label_log_status' => psm_get_lang('config', 'log_status'), 'label_log_status' => psm_get_lang('config', 'log_status'),
'label_log_status_description' => psm_get_lang('config', 'log_status_description'), 'label_log_status_description' => psm_get_lang('config', 'log_status_description'),
'label_log_email' => psm_get_lang('config', 'log_email'), 'label_log_email' => psm_get_lang('config', 'log_email'),
'label_log_sms' => psm_get_lang('config', 'log_sms'), 'label_log_sms' => psm_get_lang('config', 'log_sms'),
'label_log_pushover' => psm_get_lang('config', 'log_pushover'), 'label_log_pushover' => psm_get_lang('config', 'log_pushover'),
'label_log_telegram' => psm_get_lang('config', 'log_telegram'), 'label_log_telegram' => psm_get_lang('config', 'log_telegram'),
'label_alert_proxy' => psm_get_lang('config', 'alert_proxy'), 'label_log_jabber' => psm_get_lang('config', 'log_jabber'),
'label_alert_proxy_url' => psm_get_lang('config', 'alert_proxy_url'), 'label_alert_proxy' => psm_get_lang('config', 'alert_proxy'),
'label_auto_refresh' => psm_get_lang('config', 'auto_refresh'), 'label_alert_proxy_url' => psm_get_lang('config', 'alert_proxy_url'),
'label_auto_refresh_description' => psm_get_lang('config', 'auto_refresh_description'), 'label_auto_refresh' => psm_get_lang('config', 'auto_refresh'),
'label_seconds' => psm_get_lang('config', 'seconds'), 'label_auto_refresh_description' => psm_get_lang('config', 'auto_refresh_description'),
'label_save' => psm_get_lang('system', 'save'), 'label_seconds' => psm_get_lang('config', 'seconds'),
'label_test' => psm_get_lang('config', 'test'), 'label_save' => psm_get_lang('system', 'save'),
'label_log_retention_period' => psm_get_lang('config', 'log_retention_period'), 'label_test' => psm_get_lang('config', 'test'),
'label_log_retention_period_description' => psm_get_lang('config', 'log_retention_period_description'), 'label_log_retention_period' => psm_get_lang('config', 'log_retention_period'),
'label_log_retention_days' => psm_get_lang('config', 'log_retention_days'), 'label_log_retention_period_description' => psm_get_lang('config', 'log_retention_period_description'),
'label_days' => psm_get_lang('config', 'log_retention_days'), 'label_log_retention_days' => psm_get_lang('config', 'log_retention_days'),
'label_days' => psm_get_lang('config', 'log_retention_days'),
'label_leave_blank' => psm_get_lang('users', 'password_leave_blank'),
); );
} }
} }

View File

@ -1,4 +1,5 @@
<?php <?php
/** /**
* PHP Server Monitor * PHP Server Monitor
* Monitor your servers and websites. * Monitor your servers and websites.
@ -23,31 +24,33 @@
* @license http://www.gnu.org/licenses/gpl.txt GNU GPL v3 * @license http://www.gnu.org/licenses/gpl.txt GNU GPL v3
* @version Release: @package_version@ * @version Release: @package_version@
* @link http://www.phpservermonitor.org/ * @link http://www.phpservermonitor.org/
* @since phpservermon 2.1 * @since phpservermon 2.1
**/ **/
namespace psm\Module; namespace psm\Module;
use psm\Service\Database; use psm\Service\Database;
use Symfony\Component\DependencyInjection\ContainerAwareInterface; use Symfony\Component\DependencyInjection\ContainerAwareInterface;
interface ControllerInterface extends ContainerAwareInterface { interface ControllerInterface extends ContainerAwareInterface
{
public function __construct(Database $db, \Twig_Environment $twig); public function __construct(Database $db, \Twig_Environment $twig);
/** /**
* Run the controller * Run the controller
*/ */
public function run(); public function run();
/** /**
* Get the minimum required user level for this controller * Get the minimum required user level for this controller
* @return int * @return int
*/ */
public function getMinUserLevelRequired(); public function getMinUserLevelRequired();
/** /**
* Get custom key for CSRF validation * Get custom key for CSRF validation
* @return string * @return string
*/ */
public function getCSRFKey(); public function getCSRFKey();
} }

View File

@ -1,4 +1,5 @@
<?php <?php
/** /**
* PHP Server Monitor * PHP Server Monitor
* Monitor your servers and websites. * Monitor your servers and websites.
@ -27,30 +28,34 @@
**/ **/
namespace psm\Module\Error\Controller; namespace psm\Module\Error\Controller;
use psm\Module\AbstractController; use psm\Module\AbstractController;
use psm\Service\Database; use psm\Service\Database;
class ErrorController extends AbstractController { class ErrorController extends AbstractController
{
function __construct(Database $db, \Twig_Environment $twig) { public function __construct(Database $db, \Twig_Environment $twig)
parent::__construct($db, $twig); {
parent::__construct($db, $twig);
$this->setMinUserLevelRequired(PSM_USER_ANONYMOUS); $this->setMinUserLevelRequired(PSM_USER_ANONYMOUS);
$this->setActions(array( $this->setActions(array(
'401', '401',
), '401'); ), '401');
} }
/** /**
* 401 error page * 401 error page
* *
* @return string * @return string
*/ */
protected function execute401() { protected function execute401()
return $this->twig->render('module/error/401.tpl.html', array( {
'label_title' => psm_get_lang('error', '401_unauthorized'), return $this->twig->render('module/error/401.tpl.html', array(
'label_description' => psm_get_lang('error', '401_unauthorized_description'), 'label_title' => psm_get_lang('error', '401_unauthorized'),
)); 'label_description' => psm_get_lang('error', '401_unauthorized_description'),
} ));
}
} }

View File

@ -1,4 +1,5 @@
<?php <?php
/** /**
* PHP Server Monitor * PHP Server Monitor
* Monitor your servers and websites. * Monitor your servers and websites.
@ -31,16 +32,17 @@ namespace psm\Module\Error;
use psm\Module\ModuleInterface; use psm\Module\ModuleInterface;
use Symfony\Component\DependencyInjection\ContainerBuilder; use Symfony\Component\DependencyInjection\ContainerBuilder;
class ErrorModule implements ModuleInterface { class ErrorModule implements ModuleInterface
{
public function load(ContainerBuilder $container) { public function load(ContainerBuilder $container)
{
}
} public function getControllers()
{
public function getControllers() { return array(
return array( 'error' => __NAMESPACE__ . '\Controller\ErrorController',
'error' => __NAMESPACE__.'\Controller\ErrorController', );
); }
}
} }

View File

@ -1,4 +1,5 @@
<?php <?php
/** /**
* PHP Server Monitor * PHP Server Monitor
* Monitor your servers and websites. * Monitor your servers and websites.
@ -23,356 +24,392 @@
* @license http://www.gnu.org/licenses/gpl.txt GNU GPL v3 * @license http://www.gnu.org/licenses/gpl.txt GNU GPL v3
* @version Release: @package_version@ * @version Release: @package_version@
* @link http://www.phpservermonitor.org/ * @link http://www.phpservermonitor.org/
* @since phpservermon 2.1.0 * @since phpservermon 2.1.0
**/ **/
namespace psm\Module\Install\Controller; namespace psm\Module\Install\Controller;
use psm\Module\AbstractController; use psm\Module\AbstractController;
use psm\Service\Database; use psm\Service\Database;
class InstallController extends AbstractController { class InstallController extends AbstractController
{
/** /**
* Full path to config file * Full path to config file
* @var string $path_config * @var string $path_config
*/ */
protected $path_config; protected $path_config;
/** /**
* Full path to old config file (2.0) * Full path to old config file (2.0)
* @var string $path_config_old * @var string $path_config_old
*/ */
protected $path_config_old; protected $path_config_old;
function __construct(Database $db, \Twig_Environment $twig) { public function __construct(Database $db, \Twig_Environment $twig)
parent::__construct($db, $twig); {
parent::__construct($db, $twig);
$this->setMinUserLevelRequired(PSM_USER_ANONYMOUS); $this->setMinUserLevelRequired(PSM_USER_ANONYMOUS);
$this->setCSRFKey('install'); $this->setCSRFKey('install');
$this->addMenu(false); $this->addMenu(false);
$this->path_config = PSM_PATH_SRC.'../config.php'; $this->path_config = PSM_PATH_SRC . '../config.php';
$this->path_config_old = PSM_PATH_SRC.'../config.inc.php'; $this->path_config_old = PSM_PATH_SRC . '../config.inc.php';
$this->setActions(array( $this->setActions(array(
'index', 'config', 'install' 'index', 'config', 'install'
), 'index'); ), 'index');
$this->twig->addGlobal('subtitle', psm_get_lang('system', 'install')); $this->twig->addGlobal('subtitle', psm_get_lang('system', 'install'));
} }
/** /**
* Say hi to our new user * Say hi to our new user
*/ */
protected function executeIndex() { protected function executeIndex()
// build prerequisites {
$errors = 0; // build prerequisites
$errors = 0;
$phpv = phpversion(); $phpv = phpversion();
if (version_compare($phpv, '5.5.9', '<') || (version_compare($phpv, '7.0.8', '<') && version_compare($phpv, '7.0.0', '>='))) { if (
$errors++; version_compare($phpv, '5.6.0', '<') ||
$this->addMessage('PHP 5.5.9+ or 7.0.8+ is required to run PHP Server Monitor. You\'re using '.$phpv.'.', 'error'); (version_compare($phpv, '7.0.8', '<') && version_compare($phpv, '7.0.0', '>='))
} else { ) {
$this->addMessage('PHP version: '.$phpv, 'success'); $errors++;
} $this->addMessage('PHP 5.6.0+ or 7.0.8+ is required to run PHP Server Monitor. You\'re using ' .
if (version_compare(PHP_RELEASE_VERSION, '7', '<')) { $phpv . '.', 'error');
$this->addMessage('PHP 5 reaches the end of life (January 1, 2019), please update to PHP 7. PHP supported versions can be found <a href="https://secure.php.net/supported-versions.php" target="_blank" rel="noopener">here</a>.', 'warning'); } else {
} $this->addMessage('PHP version: ' . $phpv, 'success');
if (!function_exists('curl_init')) { }
$this->addMessage('PHP is installed without the cURL module. Please install cURL.', 'warning'); if (version_compare(PHP_RELEASE_VERSION, '7', '<')) {
} else { $this->addMessage(
$this->addMessage('PHP cURL module found', 'success'); 'PHP 5 reaches the end of life (January 1, 2019), please update to PHP 7.
} PHP supported versions can be found
if (!in_array('mysql', \PDO::getAvailableDrivers())) { <a href="https://secure.php.net/supported-versions.php" target="_blank"
$errors++; rel="noopener">here</a>.',
$this->addMessage('The PDO MySQL driver needs to be installed.', 'error'); 'warning'
} );
if (!ini_get('date.timezone')) { }
$this->addMessage('You should set a timezone in your php.ini file (e.g. \'date.timezone = UTC\'). See <a href="http://www.php.net/manual/en/timezones.php" target="_blank" rel="noopener">this page</a> for more info.', 'warning'); if (!function_exists('curl_init')) {
} $this->addMessage('PHP is installed without the cURL module. Please install cURL.', 'warning');
} else {
$this->addMessage('PHP cURL module found', 'success');
}
if (!in_array('mysql', \PDO::getAvailableDrivers())) {
$errors++;
$this->addMessage('The PDO MySQL driver needs to be installed.', 'error');
}
if (!ini_get('date.timezone')) {
$this->addMessage(
'You should set a timezone in your php.ini file (e.g. \'date.timezone = UTC\').
See <a href="http://www.php.net/manual/en/timezones.php" target="_blank" rel="noopener">this page</a>
for more info.',
'warning'
);
}
if ($errors > 0) { if ($errors > 0) {
$this->addMessage($errors.' error(s) have been encountered. Please fix them and refresh this page.', 'error'); $this->addMessage(
} $errors . ' error(s) have been encountered. Please fix them and refresh this page.',
'error'
);
}
return $this->twig->render('module/install/index.tpl.html', array( return $this->twig->render('module/install/index.tpl.html', array(
'messages' => $this->getMessages() 'messages' => $this->getMessages()
)); ));
} }
/** /**
* Help the user create a new config file * Help the user create a new config file
*/ */
protected function executeConfig() { protected function executeConfig()
$tpl_name = 'module/install/config_new.tpl.html'; {
$tpl_data = array(); $tpl_name = 'module/install/config_new.tpl.html';
$tpl_data = array();
if (!defined('PSM_DB_PREFIX')) { if (!defined('PSM_DB_PREFIX')) {
// first detect "old" config file (2.0) // first detect "old" config file (2.0)
if (file_exists($this->path_config_old)) { if (file_exists($this->path_config_old)) {
// oldtimer huh // oldtimer huh
$this->addMessage('Configuration file for v2.0 found.', 'success'); $this->addMessage('Configuration file for v2.0 found.', 'success');
$this->addMessage( $this->addMessage(
'The location of the config file has been changed since v2.0.<br/>'. 'The location of the config file has been changed since v2.0.<br/>' .
'We will attempt to create a new config file for you.' 'We will attempt to create a new config file for you.',
, 'warning'); 'warning'
$values = $this->parseConfig20(); );
} else { $values = $this->parseConfig20();
// fresh install } else {
$values = $_POST; // fresh install
} $values = $_POST;
}
$config = array( $config = array(
'db_host' => 'localhost', 'db_host' => 'localhost',
'db_port' => '', 'db_port' => '',
'db_name' => '', 'db_name' => '',
'db_user' => '', 'db_user' => '',
'db_pass' => '', 'db_pass' => '',
'db_prefix' => 'psm_', 'db_prefix' => 'psm_',
'base_url' => $this->getBaseUrl(), 'base_url' => $this->getBaseUrl(),
); );
$changed = false; $changed = false;
foreach ($config as $ckey => &$cvalue) { foreach ($config as $ckey => &$cvalue) {
if (isset($values[$ckey])) { if (isset($values[$ckey])) {
$changed = true; $changed = true;
$cvalue = $values[$ckey]; $cvalue = $values[$ckey];
} }
} }
// add config to template data for prefilling the form // add config to template data for prefilling the form
$tpl_data = $config; $tpl_data = $config;
if ($changed) { if ($changed) {
// test db connection // test db connection
$this->db = new \psm\Service\Database( $this->db = new \psm\Service\Database(
$config['db_host'], $config['db_host'],
$config['db_user'], $config['db_user'],
$config['db_pass'], $config['db_pass'],
$config['db_name'], $config['db_name'],
$config['db_port'] $config['db_port']
); );
if ($this->db->status()) { if ($this->db->status()) {
$this->addMessage('Connection to MySQL successful.', 'success'); $this->addMessage('Connection to MySQL successful.', 'success');
$config_php = $this->writeConfigFile($config); $config_php = $this->writeConfigFile($config);
if ($config_php === true) { if ($config_php === true) {
$this->addMessage('Configuration file written successfully.', 'success'); $this->addMessage('Configuration file written successfully.', 'success');
} else { } else {
$this->addMessage('Config file is not writable, we cannot save it for you.', 'error'); $this->addMessage('Config file is not writable, we cannot save it for you.', 'error');
$tpl_data['include_config_new_copy'] = true; $tpl_data['include_config_new_copy'] = true;
$tpl_data['php_config'] = $config_php; $tpl_data['php_config'] = $config_php;
} }
} else { } else {
$this->addMessage('Unable to connect to MySQL. Please check your information.', 'error'); $this->addMessage('Unable to connect to MySQL. Please check your information.', 'error');
} }
} }
} }
if (defined('PSM_DB_PREFIX')) { if (defined('PSM_DB_PREFIX')) {
if ($this->db->status()) { if ($this->db->status()) {
if ($this->isUpgrade()) { if ($this->isUpgrade()) {
// upgrade // upgrade
$version_from = $this->getPreviousVersion(); $version_from = $this->getPreviousVersion();
if (version_compare($version_from, '3.0.0', '<')) { if (version_compare($version_from, '3.0.0', '<')) {
// upgrade from before 3.0, does not have passwords yet.. create new user first // upgrade from before 3.0, does not have passwords yet.. create new user first
$this->addMessage('Your current version does not have an authentication system, but since v3.0 access to the monitor is restricted by user accounts. Please set up a new account to be able to login after the upgrade, and which you can use to change the passwords for your other accounts.'); $this->addMessage(
$tpl_name = 'module/install/config_new_user.tpl.html'; 'Your current version does not have an authentication system,
} but since v3.0 access to the monitor is restricted by user accounts.
elseif (version_compare($version_from, PSM_VERSION, '=')) { Please set up a new account to be able to login after the upgrade,
$this->addMessage('Your installation is already at the latest version.', 'success'); and which you can use to change the passwords for your other accounts.'
$tpl_name = 'module/install/success.tpl.html'; );
} $tpl_name = 'module/install/config_new_user.tpl.html';
else { } elseif (version_compare($version_from, PSM_VERSION, '=')) {
$this->addMessage('We have discovered a previous version.'); $this->addMessage('Your installation is already at the latest version.', 'success');
$tpl_name = 'module/install/config_upgrade.tpl.html'; $tpl_name = 'module/install/success.tpl.html';
$tpl_data['version'] = PSM_VERSION; } else {
} $this->addMessage('We have discovered a previous version.');
} else { $tpl_name = 'module/install/config_upgrade.tpl.html';
// fresh install ahead $tpl_data['version'] = PSM_VERSION;
$tpl_name = 'module/install/config_new_user.tpl.html'; }
} else {
// fresh install ahead
$tpl_name = 'module/install/config_new_user.tpl.html';
$tpl_data['username'] = (isset($_POST['username'])) ? $_POST['username'] : ''; $tpl_data['username'] = (isset($_POST['username'])) ? $_POST['username'] : '';
$tpl_data['email'] = (isset($_POST['email'])) ? $_POST['email'] : ''; $tpl_data['email'] = (isset($_POST['email'])) ? $_POST['email'] : '';
} }
} else { } else {
$this->addMessage('Configuration file found, but unable to connect to MySQL. Please check your information.', 'error'); $this->addMessage(
} 'Configuration file found, but unable to connect to MySQL. Please check your information.',
} 'error'
$tpl_data['messages'] = $this->getMessages(); );
return $this->twig->render($tpl_name, $tpl_data); }
} }
$tpl_data['messages'] = $this->getMessages();
return $this->twig->render($tpl_name, $tpl_data);
}
/** /**
* Execute the install and upgrade process to a newer version * Execute the install and upgrade process to a newer version
*/ */
protected function executeInstall() { protected function executeInstall()
if (!defined('PSM_DB_PREFIX') || !$this->db->status()) { {
return $this->executeConfig(); if (!defined('PSM_DB_PREFIX') || !$this->db->status()) {
} return $this->executeConfig();
$add_user = false; }
$add_user = false;
// check if user submitted username + password in previous step // check if user submitted username + password in previous step
// this would only be the case for new installs, and install from // this would only be the case for new installs, and install from
// before 3.0 // before 3.0
$new_user = array( $new_user = array(
'user_name' => psm_POST('username'), 'user_name' => psm_POST('username'),
'name' => psm_POST('username'), 'name' => psm_POST('username'),
'password' => psm_POST('password'), 'password' => psm_POST('password'),
'password_repeat' => psm_POST('password_repeat'), 'password_repeat' => psm_POST('password_repeat'),
'email' => psm_POST('email', ''), 'email' => psm_POST('email', ''),
'mobile' => '', 'mobile' => '',
'level' => PSM_USER_ADMIN, 'level' => PSM_USER_ADMIN,
'pushover_key' => '', 'pushover_key' => '',
'pushover_device' => '', 'pushover_device' => '',
'telegram_id' => '', 'telegram_id' => '',
); 'jabber' => ''
);
$validator = $this->container->get('util.user.validator'); $validator = $this->container->get('util.user.validator');
$logger = array($this, 'addMessage'); $logger = array($this, 'addMessage');
$installer = new \psm\Util\Install\Installer($this->db, $logger); $installer = new \psm\Util\Install\Installer($this->db, $logger);
if ($this->isUpgrade()) { if ($this->isUpgrade()) {
$this->addMessage('Upgrade process started.'); $this->addMessage('Upgrade process started.');
$version_from = $this->getPreviousVersion(); $version_from = $this->getPreviousVersion();
if ($version_from === false) { if ($version_from === false) {
$this->addMessage('Unable to locate your previous version. Please run a fresh install.', 'error'); $this->addMessage('Unable to locate your previous version. Please run a fresh install.', 'error');
} else { } else {
if (version_compare($version_from, PSM_VERSION, '=')) { if (version_compare($version_from, PSM_VERSION, '=')) {
$this->addMessage('Your installation is already at the latest version.', 'success'); $this->addMessage('Your installation is already at the latest version.', 'success');
} elseif (version_compare($version_from, PSM_VERSION, '>')) { } elseif (version_compare($version_from, PSM_VERSION, '>')) {
$this->addMessage('This installer does not support downgrading, sorry.', 'error'); $this->addMessage('This installer does not support downgrading, sorry.', 'error');
} else { } else {
$this->addMessage('Upgrading from '.$version_from.' to '.PSM_VERSION); $this->addMessage('Upgrading from ' . $version_from . ' to ' . PSM_VERSION);
$installer->upgrade($version_from, PSM_VERSION); $installer->upgrade($version_from, PSM_VERSION);
}
if (version_compare($version_from, '3.0.0', '<')) {
$add_user = true;
}
}
} else {
// validate the lot
try {
$validator->usernameNew($new_user['user_name']);
$validator->email($new_user['email']);
$validator->password($new_user['password'], $new_user['password_repeat']);
} catch (\InvalidArgumentException $e) {
$this->addMessage(psm_get_lang('users', 'error_' . $e->getMessage()), 'error');
return $this->executeConfig();
}
} $this->addMessage('Installation process started.', 'success');
if (version_compare($version_from, '3.0.0', '<')) { $installer->install();
$add_user = true; // add user
} $add_user = true;
} }
} else {
// validate the lot
try {
$validator->username_new($new_user['user_name']);
$validator->email($new_user['email']);
$validator->password($new_user['password'], $new_user['password_repeat']);
} catch (\InvalidArgumentException $e) {
$this->addMessage(psm_get_lang('users', 'error_'.$e->getMessage()), 'error');
return $this->executeConfig();
}
$this->addMessage('Installation process started.', 'success'); if ($add_user) {
$installer->install(); unset($new_user['password_repeat']);
// add user $user_id = $this->db->save(PSM_DB_PREFIX . 'users', $new_user);
$add_user = true; if (intval($user_id) > 0) {
} $this->getUser()->changePassword($user_id, $new_user['password']);
$this->addMessage('User account has been created successfully.', 'success');
} else {
$this->addMessage('There was an error adding your user account.', 'error');
}
}
if ($add_user) { return $this->twig->render('module/install/success.tpl.html', array(
unset($new_user['password_repeat']); 'messages' => $this->getMessages()
$user_id = $this->db->save(PSM_DB_PREFIX.'users', $new_user); ));
if (intval($user_id) > 0) { }
$this->getUser()->changePassword($user_id, $new_user['password']);
$this->addMessage('User account has been created successfully.', 'success');
} else {
$this->addMessage('There was an error adding your user account.', 'error');
}
}
return $this->twig->render('module/install/success.tpl.html', array( /**
'messages' => $this->getMessages() * Write config file with db variables
)); * @param array $array_config prefix,user,pass,name,host
} * @return boolean|string TRUE on success, string with config otherwise
*/
protected function writeConfigFile($array_config)
{
$config = "<?php" . PHP_EOL;
/** foreach ($array_config as $key => $value) {
* Write config file with db variables $line = "define('PSM_{key}', '{value}');" . PHP_EOL;
* @param array $array_config prefix,user,pass,name,host $line = str_replace(
* @return boolean|string TRUE on success, string with config otherwise array('{key}', '{value}'),
*/ array(strtoupper($key), $value),
protected function writeConfigFile($array_config) { $line
$config = "<?php".PHP_EOL; );
$config .= $line;
}
if (is_writeable($this->path_config)) {
file_put_contents($this->path_config, $config);
return true;
} else {
return $config;
}
}
foreach ($array_config as $key => $value) { /**
$line = "define('PSM_{key}', '{value}');".PHP_EOL; * Parse the 2.0 config file for prefilling
$line = str_replace( * @return array
array('{key}', '{value}'), */
array(strtoupper($key), $value), protected function parseConfig20()
$line {
); $config_old = file_get_contents($this->path_config_old);
$config .= $line; $vars = array(
} 'prefix' => '',
if (is_writeable($this->path_config)) { 'user' => '',
file_put_contents($this->path_config, $config); 'pass' => '',
return true; 'name' => '',
} else { 'host' => '',
return $config; 'port' => ''
} );
} $pattern = "/define\('SM_{key}', '(.*?)'/u";
/** foreach ($vars as $key => $value) {
* Parse the 2.0 config file for prefilling $pattern_key = str_replace('{key}', strtoupper($key), $pattern);
* @return array preg_match($pattern_key, $config_old, $value_matches);
*/ $vars[$key] = (isset($value_matches[1])) ? $value_matches[1] : '';
protected function parseConfig20() { }
$config_old = file_get_contents($this->path_config_old);
$vars = array(
'prefix' => '',
'user' => '',
'pass' => '',
'name' => '',
'host' => '',
'port' => ''
);
$pattern = "/define\('SM_{key}', '(.*?)'/u";
foreach ($vars as $key => $value) { return $vars;
$pattern_key = str_replace('{key}', strtoupper($key), $pattern); }
preg_match($pattern_key, $config_old, $value_matches);
$vars[$key] = (isset($value_matches[1])) ? $value_matches[1] : '';
}
return $vars; /**
} * Is it an upgrade or install?
*/
protected function isUpgrade()
{
if (!$this->db->status()) {
return false;
}
return $this->db->ifTableExists(PSM_DB_PREFIX . 'config');
}
/** /**
* Is it an upgrade or install? * Get the previous version from the config table
*/ * @return boolean|string FALSE on failure, string otherwise
protected function isUpgrade() { */
if (!$this->db->status()) { protected function getPreviousVersion()
return false; {
} if (!$this->isUpgrade()) {
return $this->db->ifTableExists(PSM_DB_PREFIX.'config'); return false;
} }
$version_conf = $this->db->selectRow(PSM_DB_PREFIX . 'config', array('key' => 'version'), array('value'));
if (empty($version_conf)) {
return false;
} else {
$version_from = $version_conf['value'];
if (strpos($version_from, '.') === false) {
// yeah, my bad.. previous version did not follow proper naming scheme
$version_from = rtrim(chunk_split($version_from, 1, '.'), '.');
}
return $version_from;
}
}
/** /**
* Get the previous version from the config table * Get base url of the current application
* @return boolean|string FALSE on failure, string otherwise * @return string
*/ */
protected function getPreviousVersion() { protected function getBaseUrl()
if (!$this->isUpgrade()) { {
return false; $sym_request = \Symfony\Component\HttpFoundation\Request::createFromGlobals();
}
$version_conf = $this->db->selectRow(PSM_DB_PREFIX.'config', array('key' => 'version'), array('value'));
if (empty($version_conf)) {
return false;
} else {
$version_from = $version_conf['value'];
if (strpos($version_from, '.') === false) {
// yeah, my bad.. previous version did not follow proper naming scheme
$version_from = rtrim(chunk_split($version_from, 1, '.'), '.');
}
return $version_from;
}
}
/** return $sym_request->getSchemeAndHttpHost() . $sym_request->getBasePath();
* Get base url of the current application }
* @return string
*/
protected function getBaseUrl() {
$sym_request = \Symfony\Component\HttpFoundation\Request::createFromGlobals();
return $sym_request->getSchemeAndHttpHost().$sym_request->getBasePath();
}
} }

View File

@ -1,4 +1,5 @@
<?php <?php
/** /**
* PHP Server Monitor * PHP Server Monitor
* Monitor your servers and websites. * Monitor your servers and websites.
@ -23,7 +24,7 @@
* @license http://www.gnu.org/licenses/gpl.txt GNU GPL v3 * @license http://www.gnu.org/licenses/gpl.txt GNU GPL v3
* @version Release: @package_version@ * @version Release: @package_version@
* @link http://www.phpservermonitor.org/ * @link http://www.phpservermonitor.org/
* @since phpservermon 3.0 * @since phpservermon 3.0
**/ **/
namespace psm\Module\Install; namespace psm\Module\Install;
@ -31,16 +32,17 @@ namespace psm\Module\Install;
use psm\Module\ModuleInterface; use psm\Module\ModuleInterface;
use Symfony\Component\DependencyInjection\ContainerBuilder; use Symfony\Component\DependencyInjection\ContainerBuilder;
class InstallModule implements ModuleInterface { class InstallModule implements ModuleInterface
{
public function load(ContainerBuilder $container) { public function load(ContainerBuilder $container)
{
}
} public function getControllers()
{
public function getControllers() { return array(
return array( 'install' => __NAMESPACE__ . '\Controller\InstallController',
'install' => __NAMESPACE__.'\Controller\InstallController', );
); }
}
} }

View File

@ -1,4 +1,5 @@
<?php <?php
/** /**
* PHP Server Monitor * PHP Server Monitor
* Monitor your servers and websites. * Monitor your servers and websites.
@ -23,15 +24,17 @@
* @license http://www.gnu.org/licenses/gpl.txt GNU GPL v3 * @license http://www.gnu.org/licenses/gpl.txt GNU GPL v3
* @version Release: @package_version@ * @version Release: @package_version@
* @link http://www.phpservermonitor.org/ * @link http://www.phpservermonitor.org/
* @since phpservermon 3.0 * @since phpservermon 3.0
**/ **/
namespace psm\Module; namespace psm\Module;
use Symfony\Component\DependencyInjection\ContainerBuilder; use Symfony\Component\DependencyInjection\ContainerBuilder;
interface ModuleInterface { interface ModuleInterface
{
public function load(ContainerBuilder $container); public function load(ContainerBuilder $container);
public function getControllers(); public function getControllers();
} }

View File

@ -1,4 +1,5 @@
<?php <?php
/** /**
* PHP Server Monitor * PHP Server Monitor
* Monitor your servers and websites. * Monitor your servers and websites.
@ -23,41 +24,40 @@
* @license http://www.gnu.org/licenses/gpl.txt GNU GPL v3 * @license http://www.gnu.org/licenses/gpl.txt GNU GPL v3
* @version Release: @package_version@ * @version Release: @package_version@
* @link http://www.phpservermonitor.org/ * @link http://www.phpservermonitor.org/
* @since phpservermon 3.0.0 * @since phpservermon 3.0.0
**/ **/
namespace psm\Module\Server\Controller; namespace psm\Module\Server\Controller;
use psm\Module\AbstractController; use psm\Module\AbstractController;
use psm\Service\Database; use psm\Service\Database;
abstract class AbstractServerController extends AbstractController { abstract class AbstractServerController extends AbstractController
{
function __construct(Database $db, \Twig_Environment $twig) { /**
parent::__construct($db, $twig); * Get all servers for the current user
} * @param Countable|array|\PDOStatement $server_id (int) if true only that server will be retrieved.
* @return array
*/
public function getServers($server_id = null)
{
$sql_join = '';
$sql_where = '';
/** if ($this->getUser()->getUserLevel() > PSM_USER_ADMIN) {
* Get all servers for the current user // restrict by user_id
* @param Countable|array|\PDOStatement $server_id (int) if true only that server will be retrieved. $sql_join = "JOIN `" . PSM_DB_PREFIX . "users_servers` AS `us` ON (
* @return array
*/
public function getServers($server_id = null) {
$sql_join = '';
$sql_where = '';
if ($this->getUser()->getUserLevel() > PSM_USER_ADMIN) {
// restrict by user_id
$sql_join = "JOIN `".PSM_DB_PREFIX."users_servers` AS `us` ON (
`us`.`user_id`={$this->getUser()->getUserId()} `us`.`user_id`={$this->getUser()->getUserId()}
AND `us`.`server_id`=`s`.`server_id` AND `us`.`server_id`=`s`.`server_id`
)"; )";
} }
if ($server_id !== null) { if ($server_id !== null) {
$server_id = intval($server_id); $server_id = intval($server_id);
$sql_where = "WHERE `s`.`server_id`={$server_id} "; $sql_where = "WHERE `s`.`server_id`={$server_id} ";
} }
$sql = "SELECT $sql = "SELECT
`s`.`server_id`, `s`.`server_id`,
`s`.`ip`, `s`.`ip`,
`s`.`port`, `s`.`port`,
@ -83,63 +83,76 @@ abstract class AbstractServerController extends AbstractController {
`s`.`sms`, `s`.`sms`,
`s`.`pushover`, `s`.`pushover`,
`s`.`telegram`, `s`.`telegram`,
`s`.`jabber`,
`s`.`warning_threshold`, `s`.`warning_threshold`,
`s`.`warning_threshold_counter`, `s`.`warning_threshold_counter`,
`s`.`ssl_cert_expiry_days`,
`s`.`ssl_cert_expired_time`,
`s`.`timeout`, `s`.`timeout`,
`s`.`website_username`, `s`.`website_username`,
`s`.`website_password`, `s`.`website_password`,
`s`.`last_error`, `s`.`last_error`,
`s`.`last_error_output`, `s`.`last_error_output`,
`s`.`last_output` `s`.`last_output`
FROM `".PSM_DB_PREFIX."servers` AS `s` FROM `" . PSM_DB_PREFIX . "servers` AS `s`
{$sql_join} {$sql_join}
{$sql_where} {$sql_where}
ORDER BY `active` ASC, `status` DESC, `label` ASC"; ORDER BY `active` ASC, `status` DESC, `label` ASC";
$servers = $this->db->query($sql); $servers = $this->db->query($sql);
if ($server_id !== null && count($servers) == 1) { if ($server_id !== null && count($servers) == 1) {
$servers = $servers[0]; $servers = $servers[0];
} }
return $servers; return $servers;
} }
/** /**
* Format server data for display * Format server data for display
* @param array $server * @param array $server
* @return array * @return array
*/ */
protected function formatServer($server) { protected function formatServer($server)
$server['rtime'] = round((float) $server['rtime'], 4); {
$server['last_online'] = psm_timespan($server['last_online']); $server['rtime'] = round((float) $server['rtime'], 4);
$server['last_offline'] = psm_timespan($server['last_offline']); $server['last_online'] = psm_timespan($server['last_online']);
if ($server['last_offline'] != psm_get_lang('system', 'never')) { $server['last_offline'] = psm_timespan($server['last_offline']);
$server['last_offline_duration'] = is_null($server['last_offline_duration']) ? if ($server['last_offline'] != psm_get_lang('system', 'never')) {
null : "(".$server['last_offline_duration'].")"; $server['last_offline_duration'] = is_null($server['last_offline_duration']) ?
} null : "(" . $server['last_offline_duration'] . ")";
$server['last_check'] = psm_timespan($server['last_check']); }
$server['last_check'] = psm_timespan($server['last_check']);
if ($server['status'] == 'on' && $server['warning_threshold_counter'] > 0) { if (
$server['status'] = 'warning'; (
} $server['status'] == 'on' &&
$server['warning_threshold_counter'] > 0
) || (
$server['status'] == 'on' &&
$server['ssl_cert_expired_time'] !== null &&
$server['ssl_cert_expiry_days'] > 0
)
) {
$server['status'] = 'warning';
}
$server['error'] = htmlentities($server['error']); $server['error'] = htmlentities($server['error']);
$server['type'] = psm_get_lang('servers', 'type_'.$server['type']); $server['type'] = psm_get_lang('servers', 'type_' . $server['type']);
$server['timeout'] = ($server['timeout'] > 0) ? $server['timeout'] : PSM_CURL_TIMEOUT; $server['timeout'] = ($server['timeout'] > 0) ? $server['timeout'] : PSM_CURL_TIMEOUT;
$server['last_error'] = htmlentities($server['last_error']); $server['last_error'] = htmlentities($server['last_error']);
$server['last_error_output'] = htmlentities($server['last_error_output']); $server['last_error_output'] = htmlentities($server['last_error_output']);
$server['last_output'] = htmlentities($server['last_output']); $server['last_output'] = htmlentities($server['last_output']);
$url_actions = array('delete', 'edit', 'view'); $url_actions = array('delete', 'edit', 'view');
foreach ($url_actions as $action) { foreach ($url_actions as $action) {
$server['url_'.$action] = psm_build_url(array( $server['url_' . $action] = psm_build_url(array(
'mod' => 'server', 'mod' => 'server',
'action' => $action, 'action' => $action,
'id' => $server['server_id'], 'id' => $server['server_id'],
)); ));
} }
return $server; return $server;
} }
} }

View File

@ -1,4 +1,5 @@
<?php <?php
/** /**
* PHP Server Monitor * PHP Server Monitor
* Monitor your servers and websites. * Monitor your servers and websites.
@ -26,172 +27,180 @@
**/ **/
namespace psm\Module\Server\Controller; namespace psm\Module\Server\Controller;
use psm\Service\Database; use psm\Service\Database;
/** /**
* Log module. Create the page to view previous log messages * Log module. Create the page to view previous log messages
*/ */
class LogController extends AbstractServerController { class LogController extends AbstractServerController
{
function __construct(Database $db, \Twig_Environment $twig) { public function __construct(Database $db, \Twig_Environment $twig)
parent::__construct($db, $twig); {
parent::__construct($db, $twig);
$this->setActions(array( $this->setActions(array(
'index', 'delete', 'index', 'delete',
), 'index'); ), 'index');
} }
/** /**
* Prepare the template with a list of all log entries * Prepare the template with a list of all log entries
*/ */
protected function executeIndex() { protected function executeIndex()
$this->twig->addGlobal('subtitle', psm_get_lang('menu', 'server_log')); {
$tpl_data = array( $this->twig->addGlobal('subtitle', psm_get_lang('menu', 'server_log'));
'label_status' => psm_get_lang('log', 'status'), $tpl_data = array(
'label_email' => psm_get_lang('log', 'email'), 'label_status' => psm_get_lang('log', 'status'),
'label_sms' => psm_get_lang('log', 'sms'), 'label_email' => psm_get_lang('log', 'email'),
'label_pushover' => psm_get_lang('log', 'pushover'), 'label_sms' => psm_get_lang('log', 'sms'),
'label_telegram' => psm_get_lang('log', 'telegram'), 'label_pushover' => psm_get_lang('log', 'pushover'),
'label_title' => psm_get_lang('log', 'title'), 'label_telegram' => psm_get_lang('log', 'telegram'),
'label_server' => psm_get_lang('servers', 'server'), 'label_jabber' => psm_get_lang('log', 'jabber'),
'label_type' => psm_get_lang('log', 'type'), 'label_title' => psm_get_lang('log', 'title'),
'label_message' => psm_get_lang('system', 'message'), 'label_server' => psm_get_lang('servers', 'server'),
'label_date' => psm_get_lang('system', 'date'), 'label_type' => psm_get_lang('log', 'type'),
'label_users' => ucfirst(psm_get_lang('menu', 'user')), 'label_message' => psm_get_lang('system', 'message'),
'label_no_logs' => psm_get_lang('log', 'no_logs'), 'label_date' => psm_get_lang('system', 'date'),
'tabs' => array(), 'label_users' => ucfirst(psm_get_lang('menu', 'user')),
); 'label_no_logs' => psm_get_lang('log', 'no_logs'),
'tabs' => array(),
);
$sidebar = new \psm\Util\Module\Sidebar($this->twig); $sidebar = new \psm\Util\Module\Sidebar($this->twig);
$this->setSidebar($sidebar); $this->setSidebar($sidebar);
if ($this->getUser()->getUserLevel() == PSM_USER_ADMIN) { if ($this->getUser()->getUserLevel() == PSM_USER_ADMIN) {
$modal = new \psm\Util\Module\Modal($this->twig, 'delete', \psm\Util\Module\Modal::MODAL_TYPE_DANGER); $modal = new \psm\Util\Module\Modal($this->twig, 'delete', \psm\Util\Module\Modal::MODAL_TYPE_DANGER);
$this->addModal($modal); $this->addModal($modal);
$modal->setTitle(psm_get_lang('log', 'delete_title')); $modal->setTitle(psm_get_lang('log', 'delete_title'));
$modal->setMessage(psm_get_lang('log', 'delete_message')); $modal->setMessage(psm_get_lang('log', 'delete_message'));
$modal->setOKButtonLabel(psm_get_lang('system', 'delete')); $modal->setOKButtonLabel(psm_get_lang('system', 'delete'));
$sidebar->addButton( $sidebar->addButton(
'clear_logn', 'clear_logn',
psm_get_lang('log', 'clear'), psm_get_lang('log', 'clear'),
psm_build_url(array('mod' => 'server_log', 'action' => 'delete')), psm_build_url(array('mod' => 'server_log', 'action' => 'delete')),
'trash', 'trash',
'danger show-modal', 'danger show-modal',
psm_get_lang('log', 'delete_title'), psm_get_lang('log', 'delete_title'),
'delete' 'delete'
); );
} }
$log_types = array('status', 'email', 'sms', 'pushover', 'telegram'); $log_types = array('status', 'email', 'sms', 'pushover', 'telegram', 'jabber');
foreach ($log_types as $key) { foreach ($log_types as $key) {
$records = $this->getEntries($key); $records = $this->getEntries($key);
$log_count = count($records); $log_count = count($records);
$tab_data = array( $tab_data = array(
'id' => $key, 'id' => $key,
'label' => psm_get_lang('log', $key), 'label' => psm_get_lang('log', $key),
'has_users' => ($key == 'status') ? false : true, 'has_users' => ($key == 'status') ? false : true,
'no_logs' => ($log_count == 0) ? true : false, 'no_logs' => ($log_count == 0) ? true : false,
'tab_active' => ($key == 'status') ? 'active' : '', 'tab_active' => ($key == 'status') ? 'active' : '',
); );
for ($x = 0; $x < $log_count; $x++) { for ($x = 0; $x < $log_count; $x++) {
$record = &$records[$x]; $record = &$records[$x];
$record['users'] = ''; $record['users'] = '';
if($key == 'status'){ if ($key == 'status') {
$record['server'] = $record['label']; $record['server'] = $record['label'];
$record['type_icon'] = ($record['server_type'] == 'website') ? 'globe-americas' : 'cogs'; $record['type_icon'] = ($record['server_type'] == 'website') ? 'globe-americas' : 'cogs';
$record['type_title'] = psm_get_lang('servers', 'type_'.$record['server_type']); $record['type_title'] = psm_get_lang('servers', 'type_' . $record['server_type']);
$ip = '('.$record['ip']; $ip = '(' . $record['ip'];
if (!empty($record['port']) && (($record['server_type'] != 'website') || ($record['port'] != 80))) { if (!empty($record['port']) && (($record['server_type'] != 'website') || ($record['port'] != 80))) {
$ip .= ':'.$record['port']; $ip .= ':' . $record['port'];
} }
$ip .= ')'; $ip .= ')';
$record['ip'] = $ip; $record['ip'] = $ip;
} }
$record['datetime_format'] = psm_date($record['datetime']); $record['datetime_format'] = psm_date($record['datetime']);
// fix up user list // fix up user list
$users = $this->getLogUsers($record['log_id']); $users = $this->getLogUsers($record['log_id']);
if (!empty($users)) { if (!empty($users)) {
$names = array(); $names = array();
foreach ($users as $user) { foreach ($users as $user) {
$names[] = $user['name']; $names[] = $user['name'];
} }
$record['users'] = implode('<br/>', $names); $record['users'] = implode('<br/>', $names);
$record['user_list'] = implode('&nbsp;&bull; ', $names); $record['user_list'] = implode('&nbsp;&bull; ', $names);
} }
} }
$tab_data['entries'] = $records; $tab_data['entries'] = $records;
$tpl_data['tabs'][] = $tab_data; $tpl_data['tabs'][] = $tab_data;
} }
return $this->twig->render('module/server/log.tpl.html', $tpl_data); return $this->twig->render('module/server/log.tpl.html', $tpl_data);
} }
protected function executeDelete() { protected function executeDelete()
/** {
* Empty table log and log_users. /**
* Only when user is admin. * Empty table log and log_users.
*/ * Only when user is admin.
if ($this->getUser()->getUserLevel() == PSM_USER_ADMIN) { */
$archiver = new \psm\Util\Server\Archiver\LogsArchiver($this->db); if ($this->getUser()->getUserLevel() == PSM_USER_ADMIN) {
$archiver->cleanupall(); $archiver = new \psm\Util\Server\Archiver\LogsArchiver($this->db);
} $archiver->cleanupall();
return $this->runAction('index'); }
} return $this->runAction('index');
}
/** /**
* Get all the log entries for a specific $type * Get all the log entries for a specific $type
* *
* @param string $type status/email/sms * @param string $type status/email/sms
* @return \PDOStatement array * @return \PDOStatement array
*/ */
public function getEntries($type) { public function getEntries($type)
$sql_join = ''; {
if ($this->getUser()->getUserLevel() > PSM_USER_ADMIN) { $sql_join = '';
// restrict by user_id if ($this->getUser()->getUserLevel() > PSM_USER_ADMIN) {
$sql_join = "JOIN `".PSM_DB_PREFIX."users_servers` AS `us` ON ( // restrict by user_id
$sql_join = "JOIN `" . PSM_DB_PREFIX . "users_servers` AS `us` ON (
`us`.`user_id`={$this->getUser()->getUserId()} `us`.`user_id`={$this->getUser()->getUserId()}
AND `us`.`server_id`=`servers`.`server_id` AND `us`.`server_id`=`servers`.`server_id`
)"; )";
} }
$entries = $this->db->query( $entries = $this->db->query(
'SELECT '. 'SELECT ' .
'`servers`.`label`, '. '`servers`.`label`, ' .
'`servers`.`ip`, '. '`servers`.`ip`, ' .
'`servers`.`port`, '. '`servers`.`port`, ' .
'`servers`.`type` AS server_type, '. '`servers`.`type` AS server_type, ' .
'`log`.`log_id`, '. '`log`.`log_id`, ' .
'`log`.`type`, '. '`log`.`type`, ' .
'`log`.`message`, '. '`log`.`message`, ' .
'`log`.`datetime` '. '`log`.`datetime` ' .
'FROM `'.PSM_DB_PREFIX.'log` AS `log` '. 'FROM `' . PSM_DB_PREFIX . 'log` AS `log` ' .
'JOIN `'.PSM_DB_PREFIX.'servers` AS `servers` ON (`servers`.`server_id`=`log`.`server_id`) '. 'JOIN `' . PSM_DB_PREFIX . 'servers` AS `servers` ON (`servers`.`server_id`=`log`.`server_id`) ' .
$sql_join. $sql_join .
'WHERE `log`.`type`=\''.$type.'\' '. 'WHERE `log`.`type`=\'' . $type . '\' ' .
'ORDER BY `datetime` DESC '. 'ORDER BY `datetime` DESC ' .
'LIMIT 0,20' 'LIMIT 0,20'
); );
return $entries; return $entries;
} }
/** /**
* Get all the user entries for a specific $log_id * Get all the user entries for a specific $log_id
* *
* @param $log_id * @param $log_id
* @return \PDOStatement array * @return \PDOStatement array
*/ */
protected function getLogUsers($log_id) { protected function getLogUsers($log_id)
return $this->db->query( {
"SELECT return $this->db->query(
"SELECT
u.`user_id`, u.`user_id`,
u.`name` u.`name`
FROM `".PSM_DB_PREFIX."log_users` AS lu FROM `" . PSM_DB_PREFIX . "log_users` AS lu
LEFT JOIN `".PSM_DB_PREFIX."users` AS u ON lu.`user_id` = u.`user_id` LEFT JOIN `" . PSM_DB_PREFIX . "users` AS u ON lu.`user_id` = u.`user_id`
WHERE lu.`log_id` = ".(int) $log_id." WHERE lu.`log_id` = " . (int) $log_id . "
ORDER BY u.`name` ASC" ORDER BY u.`name` ASC"
); );
} }
} }

File diff suppressed because it is too large Load Diff

View File

@ -1,4 +1,5 @@
<?php <?php
/** /**
* PHP Server Monitor * PHP Server Monitor
* Monitor your servers and websites. * Monitor your servers and websites.
@ -27,102 +28,111 @@
**/ **/
namespace psm\Module\Server\Controller; namespace psm\Module\Server\Controller;
use psm\Service\Database; use psm\Service\Database;
/** /**
* Status module * Status module
*/ */
class StatusController extends AbstractServerController { class StatusController extends AbstractServerController
{
function __construct(Database $db, \Twig_Environment $twig) { public function __construct(Database $db, \Twig_Environment $twig)
parent::__construct($db, $twig); {
parent::__construct($db, $twig);
$this->setCSRFKey('status'); $this->setCSRFKey('status');
$this->setActions(array('index', 'saveLayout'), 'index'); $this->setActions(array('index', 'saveLayout'), 'index');
} }
/** /**
* Prepare the template to show a list of all servers * Prepare the template to show a list of all servers
*/ */
protected function executeIndex() { protected function executeIndex()
// set background color to black {
$this->black_background = true; // set background color to black
$this->twig->addGlobal('subtitle', psm_get_lang('menu', 'server_status')); $this->black_background = true;
$this->twig->addGlobal('subtitle', psm_get_lang('menu', 'server_status'));
// add header accessories // add header accessories
$layout = $this->getUser()->getUserPref('status_layout', 0); $layout = $this->getUser()->getUserPref('status_layout', 0);
$layout_data = array( $layout_data = array(
'label_none' => psm_get_lang('system', 'none'), 'label_none' => psm_get_lang('system', 'none'),
'label_last_check' => psm_get_lang('servers', 'last_check'), 'label_last_check' => psm_get_lang('servers', 'last_check'),
'label_last_online' => psm_get_lang('servers', 'last_online'), 'label_last_online' => psm_get_lang('servers', 'last_online'),
'label_last_offline' => psm_get_lang('servers', 'last_offline'), 'label_last_offline' => psm_get_lang('servers', 'last_offline'),
'label_online' => psm_get_lang('servers', 'online'), 'label_online' => psm_get_lang('servers', 'online'),
'label_offline' => psm_get_lang('servers', 'offline'), 'label_offline' => psm_get_lang('servers', 'offline'),
'label_rtime' => psm_get_lang('servers', 'latency'), 'label_rtime' => psm_get_lang('servers', 'latency'),
'block_layout_active' => ($layout == 0) ? 'active' : '', 'block_layout_active' => ($layout == 0) ? 'active' : '',
'list_layout_active' => ($layout != 0) ? 'active' : '', 'list_layout_active' => ($layout != 0) ? 'active' : '',
'label_add_server' => psm_get_lang('system', 'add_new'), 'label_add_server' => psm_get_lang('system', 'add_new'),
'layout' => $layout, 'layout' => $layout,
'url_save' => psm_build_url(array('mod' => 'server', 'action' => 'edit')), 'url_save' => psm_build_url(array('mod' => 'server', 'action' => 'edit')),
); );
$this->setHeaderAccessories($this->twig->render('module/server/status/header.tpl.html', $layout_data)); $this->setHeaderAccessories($this->twig->render('module/server/status/header.tpl.html', $layout_data));
$this->addFooter(false); $this->addFooter(false);
// get the active servers from database // get the active servers from database
$servers = $this->getServers(); $servers = $this->getServers();
$layout_data['servers_offline'] = array(); $layout_data['servers_offline'] = array();
$layout_data['servers_online'] = array(); $layout_data['servers_warning'] = array();
$layout_data['servers_online'] = array();
foreach ($servers as $server) { foreach ($servers as $server) {
if ($server['active'] == 'no') { if ($server['active'] == 'no') {
continue; continue;
} }
$server['last_checked_nice'] = psm_timespan($server['last_check']); $server['last_checked_nice'] = psm_timespan($server['last_check']);
$server['last_online_nice'] = psm_timespan($server['last_online']); $server['last_online_nice'] = psm_timespan($server['last_online']);
$server['last_offline_nice'] = psm_timespan($server['last_offline']); $server['last_offline_nice'] = psm_timespan($server['last_offline']);
$server['last_offline_duration_nice'] = ""; $server['last_offline_duration_nice'] = "";
if ($server['last_offline_nice'] != psm_get_lang('system', 'never')) { if ($server['last_offline_nice'] != psm_get_lang('system', 'never')) {
$server['last_offline_duration_nice'] = "(".$server['last_offline_duration'].")"; $server['last_offline_duration_nice'] = "(" . $server['last_offline_duration'] . ")";
} }
$server['url_view'] = psm_build_url(array('mod' => 'server', 'action' => 'view', 'id' => $server['server_id'], 'back_to' => 'server_status')); $server['url_view'] = psm_build_url(
array('mod' => 'server', 'action' => 'view', 'id' => $server['server_id'], 'back_to' => 'server_status')
);
if ($server['status'] == "off") { if ($server['status'] == "off") {
$layout_data['servers_offline'][] = $server; $layout_data['servers_offline'][] = $server;
} elseif ($server['warning_threshold_counter'] > 0) { } elseif ($server['warning_threshold_counter'] > 0) {
$server['class_warning'] = 'warning'; $layout_data['servers_warning'][] = $server;
$layout_data['servers_offline'][] = $server; } elseif ($server['ssl_cert_expired_time'] !== null && $server['ssl_cert_expiry_days'] > 0) {
} else { $layout_data['servers_warning'][] = $server;
$layout_data['servers_online'][] = $server; } else {
} $layout_data['servers_online'][] = $server;
} }
}
$auto_refresh_seconds = psm_get_conf('auto_refresh_servers'); $auto_refresh_seconds = psm_get_conf('auto_refresh_servers');
if (intval($auto_refresh_seconds) > 0) { if (intval($auto_refresh_seconds) > 0) {
$this->twig->addGlobal('auto_refresh', true); $this->twig->addGlobal('auto_refresh', true);
$this->twig->addGlobal('auto_refresh_seconds', $auto_refresh_seconds); $this->twig->addGlobal('auto_refresh_seconds', $auto_refresh_seconds);
} }
if ($this->isXHR() || isset($_SERVER["HTTP_X_REQUESTED_WITH"])) { if ($this->isXHR() || isset($_SERVER["HTTP_X_REQUESTED_WITH"])) {
$this->xhr = true; $this->xhr = true;
//disable auto refresh in ajax return html //disable auto refresh in ajax return html
$layout_data["auto_refresh"] = 0; $layout_data["auto_refresh"] = 0;
} }
return $this->twig->render('module/server/status/index.tpl.html', $layout_data); return $this->twig->render('module/server/status/index.tpl.html', $layout_data);
} }
protected function executeSaveLayout() { protected function executeSaveLayout()
if ($this->isXHR()) { {
$layout = psm_POST('layout', 0); if ($this->isXHR()) {
$this->getUser()->setUserPref('status_layout', $layout); $layout = psm_POST('layout', 0);
$this->getUser()->setUserPref('status_layout', $layout);
$response = new \Symfony\Component\HttpFoundation\JsonResponse(); $response = new \Symfony\Component\HttpFoundation\JsonResponse();
$response->setData(array( $response->setData(array(
'layout' => $layout, 'layout' => $layout,
)); ));
return $response; return $response;
} }
} }
} }

View File

@ -1,4 +1,5 @@
<?php <?php
/** /**
* PHP Server Monitor * PHP Server Monitor
* Monitor your servers and websites. * Monitor your servers and websites.
@ -24,29 +25,32 @@
* @license http://www.gnu.org/licenses/gpl.txt GNU GPL v3 * @license http://www.gnu.org/licenses/gpl.txt GNU GPL v3
* @version Release: @package_version@ * @version Release: @package_version@
* @link http://www.phpservermonitor.org/ * @link http://www.phpservermonitor.org/
* @since phpservermon 3.0.0 * @since phpservermon 3.0.0
**/ **/
namespace psm\Module\Server\Controller; namespace psm\Module\Server\Controller;
use psm\Module\AbstractController; use psm\Module\AbstractController;
use psm\Service\Database; use psm\Service\Database;
class UpdateController extends AbstractController { class UpdateController extends AbstractController
{
function __construct(Database $db, \Twig_Environment $twig) { public function __construct(Database $db, \Twig_Environment $twig)
parent::__construct($db, $twig); {
parent::__construct($db, $twig);
$this->setActions('index', 'index'); $this->setActions('index', 'index');
} }
protected function executeIndex() { protected function executeIndex()
$autorun = $this->container->get('util.server.updatemanager'); {
$autorun->run(); $autorun = $this->container->get('util.server.updatemanager');
$autorun->run();
header('Location: '.psm_build_url(array(
'mod' => 'server_status'
), true, false));
trigger_error("Redirect failed.", E_USER_ERROR);
}
header('Location: ' . psm_build_url(array(
'mod' => 'server_status'
), true, false));
die();
}
} }

View File

@ -1,4 +1,5 @@
<?php <?php
/** /**
* PHP Server Monitor * PHP Server Monitor
* Monitor your servers and websites. * Monitor your servers and websites.
@ -23,7 +24,7 @@
* @license http://www.gnu.org/licenses/gpl.txt GNU GPL v3 * @license http://www.gnu.org/licenses/gpl.txt GNU GPL v3
* @version Release: @package_version@ * @version Release: @package_version@
* @link http://www.phpservermonitor.org/ * @link http://www.phpservermonitor.org/
* @since phpservermon 3.0 * @since phpservermon 3.0
**/ **/
namespace psm\Module\Server; namespace psm\Module\Server;
@ -31,19 +32,20 @@ namespace psm\Module\Server;
use psm\Module\ModuleInterface; use psm\Module\ModuleInterface;
use Symfony\Component\DependencyInjection\ContainerBuilder; use Symfony\Component\DependencyInjection\ContainerBuilder;
class ServerModule implements ModuleInterface { class ServerModule implements ModuleInterface
{
public function load(ContainerBuilder $container) { public function load(ContainerBuilder $container)
{
}
} public function getControllers()
{
public function getControllers() { return array(
return array( 'server' => __NAMESPACE__ . '\Controller\ServerController',
'server' => __NAMESPACE__.'\Controller\ServerController', 'log' => __NAMESPACE__ . '\Controller\LogController',
'log' => __NAMESPACE__.'\Controller\LogController', 'status' => __NAMESPACE__ . '\Controller\StatusController',
'status' => __NAMESPACE__.'\Controller\StatusController', 'update' => __NAMESPACE__ . '\Controller\UpdateController',
'update' => __NAMESPACE__.'\Controller\UpdateController', );
); }
}
} }

View File

@ -1,4 +1,5 @@
<?php <?php
/** /**
* PHP Server Monitor * PHP Server Monitor
* Monitor your servers and websites. * Monitor your servers and websites.
@ -27,151 +28,161 @@
**/ **/
namespace psm\Module\User\Controller; namespace psm\Module\User\Controller;
use psm\Module\AbstractController; use psm\Module\AbstractController;
use psm\Service\Database; use psm\Service\Database;
class LoginController extends AbstractController { class LoginController extends AbstractController
{
function __construct(Database $db, \Twig_Environment $twig) { public function __construct(Database $db, \Twig_Environment $twig)
parent::__construct($db, $twig); {
parent::__construct($db, $twig);
$this->setMinUserLevelRequired(PSM_USER_ANONYMOUS); $this->setMinUserLevelRequired(PSM_USER_ANONYMOUS);
$this->setActions(array( $this->setActions(array(
'login', 'forgot', 'reset', 'login', 'forgot', 'reset',
), 'login'); ), 'login');
$this->addMenu(false); $this->addMenu(false);
} }
protected function executeLogin() { protected function executeLogin()
if (isset($_POST['user_name']) && isset($_POST['user_password'])) { {
$rememberme = (isset($_POST['user_rememberme'])) ? true : false; if (isset($_POST['user_name']) && isset($_POST['user_password'])) {
$result = $this->getUser()->loginWithPostData( $rememberme = (isset($_POST['user_rememberme'])) ? true : false;
$_POST['user_name'], $result = $this->getUser()->loginWithPostData(
$_POST['user_password'], $_POST['user_name'],
$rememberme $_POST['user_password'],
); $rememberme
);
if ($result) { if ($result) {
// success login, redirect // success login, redirect
header('Location: '.psm_build_url($_SERVER['QUERY_STRING'])); header('Location: ' .
trigger_error("Redirect failed.", E_USER_ERROR); psm_build_url(
} else { empty($_SERVER["QUERY_STRING"]) ? null : $_SERVER["QUERY_STRING"]
$this->addMessage(psm_get_lang('login', 'error_login_incorrect'), 'error'); ));
} die();
} } else {
$this->addMessage(psm_get_lang('login', 'error_login_incorrect'), 'error');
}
}
$tpl_data = array( $tpl_data = array(
'title_sign_in' => psm_get_lang('login', 'title_sign_in'), 'title_sign_in' => psm_get_lang('login', 'title_sign_in'),
'label_username' => psm_get_lang('login', 'username'), 'label_username' => psm_get_lang('login', 'username'),
'label_password' => psm_get_lang('login', 'password'), 'label_password' => psm_get_lang('login', 'password'),
'label_remember_me' => psm_get_lang('login', 'remember_me'), 'label_remember_me' => psm_get_lang('login', 'remember_me'),
'label_login' => psm_get_lang('login', 'login'), 'label_login' => psm_get_lang('login', 'login'),
'label_password_forgot' => psm_get_lang('login', 'password_forgot'), 'label_password_forgot' => psm_get_lang('login', 'password_forgot'),
'value_user_name' => (isset($_POST['user_name'])) ? $_POST['user_name'] : '', 'value_user_name' => (isset($_POST['user_name'])) ? $_POST['user_name'] : '',
'value_rememberme' => (isset($rememberme) && $rememberme) ? 'checked="checked"' : '', 'value_rememberme' => (isset($rememberme) && $rememberme) ? 'checked="checked"' : '',
); );
return $this->twig->render('module/user/login/login.tpl.html', $tpl_data); return $this->twig->render('module/user/login/login.tpl.html', $tpl_data);
} }
/** /**
* Show/process the password forgot form (before the mail) * Show/process the password forgot form (before the mail)
* *
* @return string * @return string
*/ */
protected function executeForgot() { protected function executeForgot()
if (isset($_POST['user_name'])) { {
$user = $this->getUser()->getUserByUsername($_POST['user_name']); if (isset($_POST['user_name'])) {
$user = $this->getUser()->getUserByUsername($_POST['user_name']);
if (!empty($user)) { if (!empty($user)) {
$token = $this->getUser()->generatePasswordResetToken($user->user_id); $token = $this->getUser()->generatePasswordResetToken($user->user_id);
// we have a token, send it along // we have a token, send it along
$this->sendPasswordForgotMail( $this->sendPasswordForgotMail(
$user->user_id, $user->user_id,
$user->email, $user->email,
$token $token
); );
$this->addMessage(psm_get_lang('login', 'success_password_forgot'), 'success'); $this->addMessage(psm_get_lang('login', 'success_password_forgot'), 'success');
return $this->executeLogin(); return $this->executeLogin();
} else { } else {
$this->addMessage(psm_get_lang('login', 'error_user_incorrect'), 'error'); $this->addMessage(psm_get_lang('login', 'error_user_incorrect'), 'error');
} }
} }
$tpl_data = array( $tpl_data = array(
'title_forgot' => psm_get_lang('login', 'title_forgot'), 'title_forgot' => psm_get_lang('login', 'title_forgot'),
'label_username' => psm_get_lang('login', 'username'), 'label_username' => psm_get_lang('login', 'username'),
'label_submit' => psm_get_lang('login', 'submit'), 'label_submit' => psm_get_lang('login', 'submit'),
'label_go_back' => psm_get_lang('system', 'go_back'), 'label_go_back' => psm_get_lang('system', 'go_back'),
); );
return $this->twig->render('module/user/login/forgot.tpl.html', $tpl_data); return $this->twig->render('module/user/login/forgot.tpl.html', $tpl_data);
} }
/** /**
* Show/process the password reset form (after the mail) * Show/process the password reset form (after the mail)
*/ */
protected function executeReset() { protected function executeReset()
$service_user = $this->getUser(); {
$user_id = (isset($_GET['user_id'])) ? intval($_GET['user_id']) : 0; $service_user = $this->getUser();
$token = (isset($_GET['token'])) ? $_GET['token'] : ''; $user_id = (isset($_GET['user_id'])) ? intval($_GET['user_id']) : 0;
$token = (isset($_GET['token'])) ? $_GET['token'] : '';
if (!$service_user->verifyPasswordResetToken($user_id, $token)) { if (!$service_user->verifyPasswordResetToken($user_id, $token)) {
$this->addMessage(psm_get_lang('login', 'error_reset_invalid_link'), 'error'); $this->addMessage(psm_get_lang('login', 'error_reset_invalid_link'), 'error');
return $this->executeLogin(); return $this->executeLogin();
} }
if (!empty($_POST['user_password_new']) && !empty($_POST['user_password_repeat'])) { if (!empty($_POST['user_password_new']) && !empty($_POST['user_password_repeat'])) {
if ($_POST['user_password_new'] !== $_POST['user_password_repeat']) { if ($_POST['user_password_new'] !== $_POST['user_password_repeat']) {
$this->addMessage(psm_get_lang('login', 'error_login_passwords_nomatch'), 'error'); $this->addMessage(psm_get_lang('login', 'error_login_passwords_nomatch'), 'error');
} else { } else {
$result = $service_user->changePassword($user_id, $_POST['user_password_new']); $result = $service_user->changePassword($user_id, $_POST['user_password_new']);
if ($result) { if ($result) {
$this->addMessage(psm_get_lang('login', 'success_password_reset'), 'success'); $this->addMessage(psm_get_lang('login', 'success_password_reset'), 'success');
return $this->executeLogin(); return $this->executeLogin();
} else { } else {
$this->addMessage(psm_get_lang('login', 'error_login_incorrect'), 'error'); $this->addMessage(psm_get_lang('login', 'error_login_incorrect'), 'error');
} }
} }
} }
$user = $service_user->getUser($user_id); $user = $service_user->getUser($user_id);
$tpl_data = array( $tpl_data = array(
'title_reset' => psm_get_lang('login', 'title_reset'), 'title_reset' => psm_get_lang('login', 'title_reset'),
'label_username' => psm_get_lang('login', 'username'), 'label_username' => psm_get_lang('login', 'username'),
'label_password' => psm_get_lang('login', 'password'), 'label_password' => psm_get_lang('login', 'password'),
'label_password_repeat' => psm_get_lang('login', 'password_repeat'), 'label_password_repeat' => psm_get_lang('login', 'password_repeat'),
'label_reset' => psm_get_lang('login', 'password_reset'), 'label_reset' => psm_get_lang('login', 'password_reset'),
'label_go_back' => psm_get_lang('system', 'go_back'), 'label_go_back' => psm_get_lang('system', 'go_back'),
'value_user_name' => $user->user_name, 'value_user_name' => $user->user_name,
); );
return $this->twig->render('module/user/login/reset.tpl.html', $tpl_data); return $this->twig->render('module/user/login/reset.tpl.html', $tpl_data);
} }
/** /**
* Sends the password-reset-email. * Sends the password-reset-email.
* @param int $user_id * @param int $user_id
* @param string $user_email * @param string $user_email
* @param string $user_password_reset_hash * @param string $user_password_reset_hash
*/ */
protected function sendPasswordForgotMail($user_id, $user_email, $user_password_reset_hash) { protected function sendPasswordForgotMail($user_id, $user_email, $user_password_reset_hash)
$mail = psm_build_mail(); {
$mail->Subject = psm_get_lang('login', 'password_reset_email_subject'); $mail = psm_build_mail();
$mail->Subject = psm_get_lang('login', 'password_reset_email_subject');
$url = psm_build_url(array( $url = psm_build_url(array(
'action' => 'reset', 'action' => 'reset',
'user_id' => $user_id, 'user_id' => $user_id,
'token' => $user_password_reset_hash, 'token' => $user_password_reset_hash,
), true, false); ), true, false);
$body = psm_get_lang('login', 'password_reset_email_body'); $body = psm_get_lang('login', 'password_reset_email_body');
$body = str_replace('%link%', $url, $body); $body = str_replace('%link%', $url, $body);
$mail->Body = $body; $mail->Body = $body;
$mail->AltBody = str_replace('<br/>', "\n", $body); $mail->AltBody = str_replace('<br/>', "\n", $body);
$mail->AddAddress($user_email); $mail->AddAddress($user_email);
$mail->Send(); $mail->Send();
} }
} }

View File

@ -1,4 +1,5 @@
<?php <?php
/** /**
* PHP Server Monitor * PHP Server Monitor
* Monitor your servers and websites. * Monitor your servers and websites.
@ -26,160 +27,173 @@
**/ **/
namespace psm\Module\User\Controller; namespace psm\Module\User\Controller;
use psm\Module\AbstractController; use psm\Module\AbstractController;
use psm\Service\Database; use psm\Service\Database;
class ProfileController extends AbstractController { class ProfileController extends AbstractController
{
/** /**
* Editable fields for the profile * Editable fields for the profile
* @var array $profile_fields * @var array $profile_fields
*/ */
protected $profile_fields = array('name', 'user_name', 'email', 'mobile', 'pushover_key', 'pushover_device', 'telegram_id'); protected $profile_fields =
array('name', 'user_name', 'email', 'mobile', 'pushover_key', 'pushover_device', 'telegram_id', 'jabber');
function __construct(Database $db, \Twig_Environment $twig) { public function __construct(Database $db, \Twig_Environment $twig)
parent::__construct($db, $twig); {
parent::__construct($db, $twig);
$this->setActions(array( $this->setActions(array(
'index', 'save', 'index', 'save',
), 'index'); ), 'index');
$this->setCSRFKey('profile'); $this->setCSRFKey('profile');
} }
/** /**
* Show the profile page * Show the profile page
* @return string * @return string
*/ */
protected function executeIndex() { protected function executeIndex()
$this->twig->addGlobal('subtitle', psm_get_lang('users', 'profile')); {
$user = $this->getUser()->getUser(null, true); $this->twig->addGlobal('subtitle', psm_get_lang('users', 'profile'));
$user = $this->getUser()->getUser(null, true);
$modal = new \psm\Util\Module\Modal($this->twig, 'activate' . ucfirst('telegram'), \psm\Util\Module\Modal::MODAL_TYPE_OKCANCEL); $modal = new \psm\Util\Module\Modal(
$this->addModal($modal); $this->twig,
$modal->setTitle(psm_get_lang('users', 'activate_telegram')); 'activate' . ucfirst('telegram'),
$modal->setMessage(psm_get_lang('users', 'activate_telegram_description')); \psm\Util\Module\Modal::MODAL_TYPE_OKCANCEL
$modal->setOKButtonLabel(psm_get_lang('system', 'activate')); );
$this->addModal($modal);
$modal->setTitle(psm_get_lang('users', 'activate_telegram'));
$modal->setMessage(psm_get_lang('users', 'activate_telegram_description'));
$modal->setOKButtonLabel(psm_get_lang('system', 'activate'));
$tpl_data = array( $tpl_data = array(
'label_general' => psm_get_lang('config', 'general'), 'label_general' => psm_get_lang('config', 'general'),
'label_name' => psm_get_lang('users', 'name'), 'label_name' => psm_get_lang('users', 'name'),
'label_user_name' => psm_get_lang('users', 'user_name'), 'label_user_name' => psm_get_lang('users', 'user_name'),
'label_password' => psm_get_lang('users', 'password'), 'label_password' => psm_get_lang('users', 'password'),
'label_password_repeat' => psm_get_lang('users', 'password_repeat'), 'label_password_repeat' => psm_get_lang('users', 'password_repeat'),
'label_level' => psm_get_lang('users', 'level'), 'label_level' => psm_get_lang('users', 'level'),
'label_mobile' => psm_get_lang('users', 'mobile'), 'label_mobile' => psm_get_lang('users', 'mobile'),
'label_pushover' => psm_get_lang('users', 'pushover'), 'label_pushover' => psm_get_lang('users', 'pushover'),
'label_pushover_description' => psm_get_lang('users', 'pushover_description'), 'label_pushover_description' => psm_get_lang('users', 'pushover_description'),
'label_pushover_key' => psm_get_lang('users', 'pushover_key'), 'label_pushover_key' => psm_get_lang('users', 'pushover_key'),
'label_pushover_device' => psm_get_lang('users', 'pushover_device'), 'label_pushover_device' => psm_get_lang('users', 'pushover_device'),
'label_pushover_device_description' => psm_get_lang('users', 'pushover_device_description'), 'label_pushover_device_description' => psm_get_lang('users', 'pushover_device_description'),
'label_telegram' => psm_get_lang('users', 'telegram'), 'label_telegram' => psm_get_lang('users', 'telegram'),
'label_telegram_description' => psm_get_lang('users', 'telegram_description'), 'label_telegram_description' => psm_get_lang('users', 'telegram_description'),
'label_telegram_chat_id' => psm_get_lang('users', 'telegram_chat_id'), 'label_telegram_chat_id' => psm_get_lang('users', 'telegram_chat_id'),
'label_telegram_chat_id_description' => psm_get_lang('users', 'telegram_chat_id_description'), 'label_telegram_chat_id_description' => psm_get_lang('users', 'telegram_chat_id_description'),
'label_activate_telegram' => psm_get_lang('users', 'activate_telegram'), 'label_activate_telegram' => psm_get_lang('users', 'activate_telegram'),
'label_telegram_get_chat_id' => psm_get_lang('users', 'telegram_get_chat_id'), 'label_telegram_get_chat_id' => psm_get_lang('users', 'telegram_get_chat_id'),
'telegram_get_chat_id_url' => PSM_TELEGRAM_GET_ID_URL, 'telegram_get_chat_id_url' => PSM_TELEGRAM_GET_ID_URL,
'label_email' => psm_get_lang('users', 'email'), 'label_jabber' => psm_get_lang('users', 'jabber'),
'label_save' => psm_get_lang('system', 'save'), 'label_jabber_description' => psm_get_lang('users', 'jabber_description'),
'form_action' => psm_build_url(array( 'label_email' => psm_get_lang('users', 'email'),
'mod' => 'user_profile', 'label_save' => psm_get_lang('system', 'save'),
'action' => 'save', 'form_action' => psm_build_url(array(
)), 'mod' => 'user_profile',
'level' => psm_get_lang('users', 'level_' . $user->level), 'action' => 'save',
'placeholder_password' => psm_get_lang('users', 'password_leave_blank'), )),
); 'level' => psm_get_lang('users', 'level_' . $user->level),
foreach ($this->profile_fields as $field) { 'placeholder_password' => psm_get_lang('users', 'password_leave_blank'),
$tpl_data[$field] = (isset($user->$field)) ? $user->$field : ''; );
} foreach ($this->profile_fields as $field) {
return $this->twig->render('module/user/profile.tpl.html', $tpl_data); $tpl_data[$field] = (isset($user->$field)) ? $user->$field : '';
} }
return $this->twig->render('module/user/profile.tpl.html', $tpl_data);
}
/** /**
* Save the profile * Save the profile
*/ */
protected function executeSave() { protected function executeSave()
if (empty($_POST)) { {
// dont process anything if no data has been posted if (empty($_POST)) {
return $this->executeIndex(); // dont process anything if no data has been posted
} return $this->executeIndex();
$validator = $this->container->get('util.user.validator'); }
$fields = $this->profile_fields; $validator = $this->container->get('util.user.validator');
$fields[] = 'password'; $fields = $this->profile_fields;
$fields[] = 'password_repeat'; $fields[] = 'password';
$fields[] = 'password_repeat';
$clean = array(); $clean = array();
foreach ($fields as $field) { foreach ($fields as $field) {
if (isset($_POST[$field])) { if (isset($_POST[$field])) {
$clean[$field] = trim(strip_tags($_POST[$field])); $clean[$field] = trim(strip_tags($_POST[$field]));
} else { } else {
$clean[$field] = ''; $clean[$field] = '';
} }
} }
// validate the lot // validate the lot
try { try {
$validator->username($clean['user_name'], $this->getUser()->getUserId()); $validator->username($clean['user_name'], $this->getUser()->getUserId());
$validator->email($clean['email']); $validator->email($clean['email']);
// always validate password for new users, // always validate password for new users,
// but only validate it for existing users when they change it. // but only validate it for existing users when they change it.
if ($clean['password'] != '') { if ($clean['password'] != '') {
$validator->password($clean['password'], $clean['password_repeat']); $validator->password($clean['password'], $clean['password_repeat']);
} }
} catch (\InvalidArgumentException $e) { } catch (\InvalidArgumentException $e) {
$this->addMessage(psm_get_lang('users', 'error_' . $e->getMessage()), 'error'); $this->addMessage(psm_get_lang('users', 'error_' . $e->getMessage()), 'error');
return $this->executeIndex(); return $this->executeIndex();
} }
if (!empty($clean['password'])) { if (!empty($clean['password'])) {
$password = $clean['password']; $password = $clean['password'];
} }
unset($clean['password']); unset($clean['password']);
unset($clean['password_repeat']); unset($clean['password_repeat']);
$this->db->save(PSM_DB_PREFIX . 'users', $clean, array('user_id' => $this->getUser()->getUserId())); $this->db->save(PSM_DB_PREFIX . 'users', $clean, array('user_id' => $this->getUser()->getUserId()));
$this->container->get('event')->dispatch( $this->container->get('event')->dispatch(
\psm\Module\User\UserEvents::USER_EDIT, \psm\Module\User\UserEvents::USER_EDIT,
new \psm\Module\User\Event\UserEvent($this->getUser()->getUserId()) new \psm\Module\User\Event\UserEvent($this->getUser()->getUserId())
); );
if (isset($password)) { if (isset($password)) {
$this->getUser()->changePassword($this->getUser()->getUserId(), $password); $this->getUser()->changePassword($this->getUser()->getUserId(), $password);
} }
$this->addMessage(psm_get_lang('users', 'profile_updated'), 'success'); $this->addMessage(psm_get_lang('users', 'profile_updated'), 'success');
if (!empty($_POST['activate_telegram'])) { if (!empty($_POST['activate_telegram'])) {
$this->activateTelegram(); $this->activateTelegram();
} }
return $this->executeIndex(); return $this->executeIndex();
} }
/** /**
* Allow the bot to send notifications to chat_id * Allow the bot to send notifications to chat_id
* *
*/ */
protected function activateTelegram() { protected function activateTelegram()
$telegram = psm_build_telegram(); {
$apiToken = psm_get_conf('telegram_api_token'); $telegram = psm_build_telegram();
$apiToken = psm_get_conf('telegram_api_token');
if (empty($apiToken)) { if (empty($apiToken)) {
$this->addMessage(psm_get_lang('config', 'telegram_error_notoken'), 'error'); $this->addMessage(psm_get_lang('config', 'telegram_error_notoken'), 'error');
return; return;
} }
$result = $telegram->getBotUsername(); $result = $telegram->getBotUsername();
if (isset($result['ok']) && $result['ok'] != false) { if (isset($result['ok']) && $result['ok'] != false) {
$url = "https://t.me/" . $result["result"]["username"]; $url = "https://t.me/" . $result["result"]["username"];
$this->addMessage(sprintf(psm_get_lang('users', 'telegram_bot_username_found'), $url), 'success'); $this->addMessage(sprintf(psm_get_lang('users', 'telegram_bot_username_found'), $url), 'success');
return; return;
} }
if (isset($result['error_code']) && $result['error_code'] == 401) { if (isset($result['error_code']) && $result['error_code'] == 401) {
$error = psm_get_lang('users', 'telegram_bot_username_error_token'); $error = psm_get_lang('users', 'telegram_bot_username_error_token');
} elseif (isset($result['description'])) { } elseif (isset($result['description'])) {
$error = $result['description']; $error = $result['description'];
} else { } else {
$error = 'Unknown'; $error = 'Unknown';
} }
$this->addMessage(sprintf(psm_get_lang('users', 'telegram_bot_error'), $error), 'error'); $this->addMessage(sprintf(psm_get_lang('users', 'telegram_bot_error'), $error), 'error');
} }
} }

View File

@ -1,4 +1,5 @@
<?php <?php
/** /**
* PHP Server Monitor * PHP Server Monitor
* Monitor your servers and websites. * Monitor your servers and websites.
@ -26,6 +27,7 @@
**/ **/
namespace psm\Module\User\Controller; namespace psm\Module\User\Controller;
use psm\Module\AbstractController; use psm\Module\AbstractController;
use psm\Service\Database; use psm\Service\Database;
@ -33,345 +35,401 @@ use psm\Service\Database;
* User module. Add, edit and delete users, or assign * User module. Add, edit and delete users, or assign
* servers to users. * servers to users.
*/ */
class UserController extends AbstractController { class UserController extends AbstractController
public $servers = array(); {
public $servers = array();
function __construct(Database $db, \Twig_Environment $twig) { public function __construct(Database $db, \Twig_Environment $twig)
parent::__construct($db, $twig); {
parent::__construct($db, $twig);
$this->setMinUserLevelRequired(PSM_USER_ADMIN); $this->setMinUserLevelRequired(PSM_USER_ADMIN);
$this->setCSRFKey('user'); $this->setCSRFKey('user');
$this->setActions(array( $this->setActions(array(
'index', 'edit', 'delete', 'save', 'index', 'edit', 'delete', 'save',
), 'index'); ), 'index');
$this->twig->addGlobal('subtitle', psm_get_lang('menu', 'user')); $this->twig->addGlobal('subtitle', psm_get_lang('menu', 'user'));
} }
public function run($action = NULL) { public function run($action = null)
$servers = $this->db->select(PSM_DB_PREFIX.'servers', null, array('server_id', 'label'), '', "ORDER BY `label` ASC"); {
// change the indexes to reflect their server ids $servers = $this->db->select(
foreach ($servers as $server) { PSM_DB_PREFIX . 'servers',
$this->servers[$server['server_id']] = $server; null,
} array('server_id', 'label'),
'',
"ORDER BY `label` ASC"
);
// change the indexes to reflect their server ids
foreach ($servers as $server) {
$this->servers[$server['server_id']] = $server;
}
return parent::run($action); return parent::run($action);
} }
/** /**
* Create HTML to show a list of all users * Create HTML to show a list of all users
* *
* @return string * @return string
*/ */
protected function executeIndex() { protected function executeIndex()
$sidebar = new \psm\Util\Module\Sidebar($this->twig); {
$this->setSidebar($sidebar); $sidebar = new \psm\Util\Module\Sidebar($this->twig);
$this->setSidebar($sidebar);
$sidebar->addButton( $sidebar->addButton(
'add_new', 'add_new',
psm_get_lang('system', 'add_new'), psm_get_lang('system', 'add_new'),
psm_build_url(array('mod' => 'user', 'action' => 'edit')), psm_build_url(array('mod' => 'user', 'action' => 'edit')),
'plus icon-white', 'plus icon-white',
'success', 'success',
psm_get_lang('system', 'add_new') psm_get_lang('system', 'add_new')
); );
$modal = new \psm\Util\Module\Modal($this->twig, 'delete', \psm\Util\Module\Modal::MODAL_TYPE_DANGER); $modal = new \psm\Util\Module\Modal($this->twig, 'delete', \psm\Util\Module\Modal::MODAL_TYPE_DANGER);
$this->addModal($modal); $this->addModal($modal);
$modal->setTitle(psm_get_lang('users', 'delete_title')); $modal->setTitle(psm_get_lang('users', 'delete_title'));
$modal->setMessage(psm_get_lang('users', 'delete_message')); $modal->setMessage(psm_get_lang('users', 'delete_message'));
$modal->setOKButtonLabel(psm_get_lang('system', 'delete')); $modal->setOKButtonLabel(psm_get_lang('system', 'delete'));
// build label array for the next loop // build label array for the next loop
$servers_labels = array(); $servers_labels = array();
foreach ($this->servers as $server) { foreach ($this->servers as $server) {
$servers_labels[$server['server_id']] = $server['label']; $servers_labels[$server['server_id']] = $server['label'];
} }
$users = $this->db->select( $users = $this->db->select(
PSM_DB_PREFIX.'users', PSM_DB_PREFIX . 'users',
null, null,
array('user_id', 'user_name', 'level', 'name', 'mobile', 'email'), array('user_id', 'user_name', 'level', 'name', 'mobile', 'email'),
null, null,
array('name') array('name')
); );
foreach ($users as $x => &$user) { foreach ($users as $x => &$user) {
$user_servers = $this->getUserServers($user['user_id']); $user_servers = $this->getUserServers($user['user_id']);
$user['class'] = ($x & 1) ? 'odd' : 'even'; $user['class'] = ($x & 1) ? 'odd' : 'even';
$user['level_text'] = psm_get_lang('users', 'level_'.$user['level']); $user['level_text'] = psm_get_lang('users', 'level_' . $user['level']);
$user['emp_servers'] = array(); $user['emp_servers'] = array();
// fix server list // fix server list
foreach ($user_servers as $server_id) { foreach ($user_servers as $server_id) {
if (!isset($servers_labels[$server_id])) { if (!isset($servers_labels[$server_id])) {
continue; continue;
} }
$user['emp_servers'][] = array( $user['emp_servers'][] = array(
'label' => $servers_labels[$server_id], 'label' => $servers_labels[$server_id],
'url' => psm_build_url(array('mod' => 'server', 'action' => 'view', 'id' => $server_id, 'back_to' => 'user')) 'url' => psm_build_url(
); array('mod' => 'server', 'action' => 'view', 'id' => $server_id, 'back_to' => 'user')
} )
sort($user['emp_servers']); );
}
sort($user['emp_servers']);
$user['url_delete'] = psm_build_url(array( $user['url_delete'] = psm_build_url(array(
'mod' => 'user', 'mod' => 'user',
'action' => 'delete', 'action' => 'delete',
'id' => $user['user_id'], 'id' => $user['user_id'],
)); ));
$user['url_edit'] = psm_build_url(array( $user['url_edit'] = psm_build_url(array(
'mod' => 'user', 'mod' => 'user',
'action' => 'edit', 'action' => 'edit',
'id' => $user['user_id'], 'id' => $user['user_id'],
)); ));
} }
$tpl_data = $this->getLabels(); $tpl_data = $this->getLabels();
$tpl_data['users'] = $users; $tpl_data['users'] = $users;
return $this->twig->render('module/user/user/list.tpl.html', $tpl_data); return $this->twig->render('module/user/user/list.tpl.html', $tpl_data);
} }
/** /**
* Crate HTML for the update screen for a user * Crate HTML for the update screen for a user
* *
* @return string * @return string
*/ */
protected function executeEdit() { protected function executeEdit()
$user_id = isset($_GET['id']) ? intval($_GET['id']) : 0; {
$fields_prefill = array('name', 'user_name', 'mobile', 'pushover_key', 'pushover_device', 'telegram_id', 'email'); $user_id = isset($_GET['id']) ? intval($_GET['id']) : 0;
$fields_prefill = array(
'name',
'user_name',
'mobile',
'pushover_key',
'pushover_device',
'telegram_id',
'jabber',
'email'
);
if ($user_id == 0) { if ($user_id == 0) {
// insert mode // insert mode
$title = psm_get_lang('system', 'insert'); $title = psm_get_lang('system', 'insert');
$placeholder_password = ''; $placeholder_password = '';
$lvl_selected = PSM_USER_USER; // default level is regular user $lvl_selected = PSM_USER_USER; // default level is regular user
// attempt to prefill previously posted fields // attempt to prefill previously posted fields
$edit_user = new \stdClass(); $edit_user = new \stdClass();
foreach ($fields_prefill as $field) { foreach ($fields_prefill as $field) {
$edit_user->$field = (isset($_POST[$field])) ? $_POST[$field] : ''; $edit_user->$field = (isset($_POST[$field])) ? $_POST[$field] : '';
} }
// add inactive class to all servers // add inactive class to all servers
foreach ($this->servers as &$server) { foreach ($this->servers as &$server) {
$server['class'] = 'inactive'; $server['class'] = 'inactive';
} }
} else { } else {
// edit mode // edit mode
try { try {
$this->container->get('util.user.validator')->userId($user_id); $this->container->get('util.user.validator')->userId($user_id);
} catch (\InvalidArgumentException $e) { } catch (\InvalidArgumentException $e) {
$this->addMessage(psm_get_lang('users', 'error_'.$e->getMessage()), 'error'); $this->addMessage(psm_get_lang('users', 'error_' . $e->getMessage()), 'error');
return $this->executeIndex(); return $this->executeIndex();
} }
$edit_user = $this->getUser()->getUser($user_id); $edit_user = $this->getUser()->getUser($user_id);
$title = psm_get_lang('system', 'edit').' '.$edit_user->name; $title = psm_get_lang('system', 'edit') . ' ' . $edit_user->name;
$placeholder_password = psm_get_lang('users', 'password_leave_blank'); $placeholder_password = psm_get_lang('users', 'password_leave_blank');
$lvl_selected = $edit_user->level; $lvl_selected = $edit_user->level;
// select servers for this user // select servers for this user
$user_servers = $this->getUserServers($user_id); $user_servers = $this->getUserServers($user_id);
foreach ($this->servers as &$server) { foreach ($this->servers as &$server) {
$this->servers[$server['server_id']]['id'] = $server['server_id']; $this->servers[$server['server_id']]['id'] = $server['server_id'];
if (in_array($server['server_id'], $user_servers)) { if (in_array($server['server_id'], $user_servers)) {
$server['edit_selected'] = 'selected="selected"'; $server['edit_selected'] = 'selected="selected"';
$server['class'] = 'active'; $server['class'] = 'active';
} }
} }
} }
$tpl_data = array( $tpl_data = array(
'titlemode' => $title, 'titlemode' => $title,
'placeholder_password' => $placeholder_password, 'placeholder_password' => $placeholder_password,
'edit_user_id' => $user_id, 'edit_user_id' => $user_id,
'url_save' => psm_build_url(array( 'url_save' => psm_build_url(array(
'mod' => 'user', 'mod' => 'user',
'action' => 'save', 'action' => 'save',
'id' => $user_id, 'id' => $user_id,
)), )),
'servers' => $this->servers, 'servers' => $this->servers,
'user_level' => $lvl_selected, 'user_level' => $lvl_selected,
); );
foreach ($fields_prefill as $field) { foreach ($fields_prefill as $field) {
if (isset($edit_user->$field)) { if (isset($edit_user->$field)) {
$tpl_data['edit_value_'.$field] = $edit_user->$field; $tpl_data['edit_value_' . $field] = $edit_user->$field;
} }
} }
$tpl_data['levels'] = array(); $tpl_data['levels'] = array();
foreach ($this->container->get('util.user.validator')->getUserLevels() as $lvl) { foreach ($this->container->get('util.user.validator')->getUserLevels() as $lvl) {
$tpl_data['levels'][] = array( $tpl_data['levels'][] = array(
'value' => $lvl, 'value' => $lvl,
'label' => psm_get_lang('users', 'level_'.$lvl), 'label' => psm_get_lang('users', 'level_' . $lvl),
); );
} }
$tpl_data = array_merge($this->getLabels(), $tpl_data); $tpl_data = array_merge($this->getLabels(), $tpl_data);
return $this->twig->render('module/user/user/update.tpl.html', $tpl_data); return $this->twig->render('module/user/user/update.tpl.html', $tpl_data);
} }
/** /**
* Executes the saving of a user * Executes the saving of a user
*/ */
protected function executeSave() { protected function executeSave()
if (empty($_POST)) { {
// dont process anything if no data has been posted if (empty($_POST)) {
return $this->executeIndex(); // dont process anything if no data has been posted
} return $this->executeIndex();
$user_id = (isset($_GET['id'])) ? intval($_GET['id']) : 0; }
$user_id = (isset($_GET['id'])) ? intval($_GET['id']) : 0;
$fields = array('name', 'user_name', 'password', 'password_repeat', 'level', 'mobile', 'pushover_key', 'pushover_device', 'telegram_id', 'email'); $fields = array(
$clean = array(); 'name',
foreach ($fields as $field) { 'user_name',
if (isset($_POST[$field])) { 'password',
$clean[$field] = trim(strip_tags($_POST[$field])); 'password_repeat',
} else { 'level',
$clean[$field] = ''; 'mobile',
} 'pushover_key',
} 'pushover_device',
'telegram_id',
'jabber',
'email'
);
$clean = array();
foreach ($fields as $field) {
if (isset($_POST[$field])) {
$clean[$field] = trim(strip_tags($_POST[$field]));
} else {
$clean[$field] = '';
}
}
$user_validator = $this->container->get('util.user.validator'); $user_validator = $this->container->get('util.user.validator');
try { try {
$user_validator->username($clean['user_name'], $user_id); $user_validator->username($clean['user_name'], $user_id);
$user_validator->email($clean['email']); $user_validator->email($clean['email']);
$user_validator->level($clean['level']); $user_validator->level($clean['level']);
// always validate password for new users, // always validate password for new users,
// but only validate it for existing users when they change it. // but only validate it for existing users when they change it.
if ($user_id == 0 || ($user_id > 0 && $clean['password'] != '')) { if ($user_id == 0 || ($user_id > 0 && $clean['password'] != '')) {
$user_validator->password($clean['password'], $clean['password_repeat']); $user_validator->password($clean['password'], $clean['password_repeat']);
} }
if ($user_id > 0) { if ($user_id > 0) {
$user_validator->userId($user_id); $user_validator->userId($user_id);
} }
} catch (\InvalidArgumentException $e) { } catch (\InvalidArgumentException $e) {
$this->addMessage(psm_get_lang('users', 'error_'.$e->getMessage()), 'error'); $this->addMessage(psm_get_lang('users', 'error_' . $e->getMessage()), 'error');
return $this->executeEdit(); return $this->executeEdit();
} }
if (!empty($clean['password'])) { if (!empty($clean['password'])) {
$password = $clean['password']; $password = $clean['password'];
} }
unset($clean['password_repeat']); unset($clean['password_repeat']);
if ($user_id > 0) { if ($user_id > 0) {
// edit user // edit user
unset($clean['password']); // password update is executed separately unset($clean['password']); // password update is executed separately
$this->db->save(PSM_DB_PREFIX.'users', $clean, array('user_id' => $user_id)); $admins = $this->db->select(PSM_DB_PREFIX . 'users', array('level' => PSM_USER_ADMIN));
$this->addMessage(psm_get_lang('users', 'updated'), 'success'); if (
(int) count($admins) === (int) 1 &&
(int) $admins[0]['user_id'] === (int) $user_id &&
(int) $clean['level'] === (int) PSM_USER_USER
) {
$this->addMessage(psm_get_lang('users', 'error_user_admin_cant_be_deleted'), 'warning');
$clean['level'] = PSM_USER_ADMIN;
}
$this->db->save(PSM_DB_PREFIX . 'users', $clean, array('user_id' => $user_id));
$this->addMessage(psm_get_lang('users', 'updated'), 'success');
$event = \psm\Module\User\UserEvents::USER_EDIT; $event = \psm\Module\User\UserEvents::USER_EDIT;
} else { } else {
// add user // add user
$clean['password'] = ''; // password update is executed separately $clean['password'] = ''; // password update is executed separately
$user_id = $this->db->save(PSM_DB_PREFIX.'users', $clean); $user_id = $this->db->save(PSM_DB_PREFIX . 'users', $clean);
$this->addMessage(psm_get_lang('users', 'inserted'), 'success'); $this->addMessage(psm_get_lang('users', 'inserted'), 'success');
$event = \psm\Module\User\UserEvents::USER_ADD; $event = \psm\Module\User\UserEvents::USER_ADD;
} }
$this->container->get('event')->dispatch( $this->container->get('event')->dispatch(
$event, $event,
new \psm\Module\User\Event\UserEvent($user_id, $this->getUser()->getUserId()) new \psm\Module\User\Event\UserEvent($user_id, $this->getUser()->getUserId())
); );
if (isset($password)) { if (isset($password)) {
$this->getUser()->changePassword($user_id, $password); $this->getUser()->changePassword($user_id, $password);
} }
// update servers // update servers
$server_idc = psm_POST('server_id', array()); $server_idc = psm_POST('server_id', array());
$server_idc_save = array(); $server_idc_save = array();
foreach ($server_idc as $server_id) { foreach ($server_idc as $server_id) {
$server_idc_save[] = array( $server_idc_save[] = array(
'user_id' => $user_id, 'user_id' => $user_id,
'server_id' => intval($server_id), 'server_id' => intval($server_id),
); );
} }
// delete all existing records // delete all existing records
$this->db->delete(PSM_DB_PREFIX.'users_servers', array('user_id' => $user_id)); $this->db->delete(PSM_DB_PREFIX . 'users_servers', array('user_id' => $user_id));
if (!empty($server_idc_save)) { if (!empty($server_idc_save)) {
// add all new servers // add all new servers
$this->db->insertMultiple(PSM_DB_PREFIX.'users_servers', $server_idc_save); $this->db->insertMultiple(PSM_DB_PREFIX . 'users_servers', $server_idc_save);
} }
return $this->executeIndex(); return $this->executeIndex();
} }
/** /**
* Executes the deletion of a user * Executes the deletion of a user
*/ */
protected function executeDelete() { protected function executeDelete()
$id = (isset($_GET['id'])) ? intval($_GET['id']) : 0; {
$id = (isset($_GET['id'])) ? intval($_GET['id']) : 0;
try { try {
$this->container->get('util.user.validator')->userId($id); $this->container->get('util.user.validator')->userId($id);
$this->db->delete(PSM_DB_PREFIX.'users', array('user_id' => $id,)); $admins = $this->db->select(PSM_DB_PREFIX . 'users', array('level' => PSM_USER_ADMIN));
$this->db->delete(PSM_DB_PREFIX.'users_servers', array('user_id' => $id)); if (
(int) count($admins) === (int) 1 &&
(int) $admins[0]['user_id'] === (int) $id
) {
$this->addMessage(psm_get_lang('users', 'error_user_admin_cant_be_deleted'), 'error');
} else {
$this->db->delete(PSM_DB_PREFIX . 'users', array('user_id' => $id,));
$this->db->delete(PSM_DB_PREFIX . 'users_servers', array('user_id' => $id));
$this->container->get('event')->dispatch( $this->container->get('event')->dispatch(
\psm\Module\User\UserEvents::USER_DELETE, \psm\Module\User\UserEvents::USER_DELETE,
new \psm\Module\User\Event\UserEvent($id, $this->getUser()->getUserId()) new \psm\Module\User\Event\UserEvent($id, $this->getUser()->getUserId())
); );
$this->addMessage(psm_get_lang('users', 'deleted'), 'success'); $this->addMessage(psm_get_lang('users', 'deleted'), 'success');
} catch (\InvalidArgumentException $e) { }
$this->addMessage(psm_get_lang('users', 'error_'.$e->getMessage()), 'error'); } catch (\InvalidArgumentException $e) {
} $this->addMessage(psm_get_lang('users', 'error_' . $e->getMessage()), 'error');
}
return $this->executeIndex(); return $this->executeIndex();
} }
protected function getLabels() { protected function getLabels()
return array( {
'label_users' => psm_get_lang('menu', 'user'), return array(
'label_user' => psm_get_lang('users', 'user'), 'label_users' => psm_get_lang('menu', 'user'),
'label_name' => psm_get_lang('users', 'name'), 'label_user' => psm_get_lang('users', 'user'),
'label_user_name' => psm_get_lang('users', 'user_name'), 'label_name' => psm_get_lang('users', 'name'),
'label_password' => psm_get_lang('users', 'password'), 'label_user_name' => psm_get_lang('users', 'user_name'),
'label_password_repeat' => psm_get_lang('users', 'password_repeat'), 'label_password' => psm_get_lang('users', 'password'),
'label_level' => psm_get_lang('users', 'level'), 'label_password_repeat' => psm_get_lang('users', 'password_repeat'),
'label_level_description' => psm_get_lang('users', 'level_description'), 'label_level' => psm_get_lang('users', 'level'),
'label_mobile' => psm_get_lang('users', 'mobile'), 'label_level_description' => psm_get_lang('users', 'level_description'),
'label_pushover' => psm_get_lang('users', 'pushover'), 'label_mobile' => psm_get_lang('users', 'mobile'),
'label_pushover_description' => psm_get_lang('users', 'pushover_description'), 'label_pushover' => psm_get_lang('users', 'pushover'),
'label_pushover_key' => psm_get_lang('users', 'pushover_key'), 'label_pushover_description' => psm_get_lang('users', 'pushover_description'),
'label_pushover_device' => psm_get_lang('users', 'pushover_device'), 'label_pushover_key' => psm_get_lang('users', 'pushover_key'),
'label_pushover_device_description' => psm_get_lang('users', 'pushover_device_description'), 'label_pushover_device' => psm_get_lang('users', 'pushover_device'),
'label_telegram' => psm_get_lang('users', 'telegram'), 'label_pushover_device_description' => psm_get_lang('users', 'pushover_device_description'),
'label_telegram_description' => psm_get_lang('users', 'telegram_description'), 'label_telegram' => psm_get_lang('users', 'telegram'),
'label_telegram_id' => psm_get_lang('users', 'telegram_chat_id'), 'label_telegram_id' => psm_get_lang('users', 'telegram_chat_id'),
'label_telegram_id_description' => psm_get_lang('users', 'telegram_chat_id_description'), 'label_telegram_id_description' => psm_get_lang('users', 'telegram_chat_id_description'),
'label_email' => psm_get_lang('users', 'email'), 'label_jabber' => psm_get_lang('users', 'jabber'),
'label_servers' => psm_get_lang('menu', 'server'), 'label_jabber_description' => psm_get_lang('users', 'jabber_description'),
'label_save' => psm_get_lang('system', 'save'), 'label_email' => psm_get_lang('users', 'email'),
'label_go_back' => psm_get_lang('system', 'go_back'), 'label_servers' => psm_get_lang('menu', 'server'),
'label_edit' => psm_get_lang('system', 'edit'), 'label_save' => psm_get_lang('system', 'save'),
'label_delete' => psm_get_lang('system', 'delete'), 'label_go_back' => psm_get_lang('system', 'go_back'),
'label_add_new' => psm_get_lang('system', 'add_new'), 'label_edit' => psm_get_lang('system', 'edit'),
'label_search' => psm_get_lang('system', 'search'), 'label_delete' => psm_get_lang('system', 'delete'),
); 'label_add_new' => psm_get_lang('system', 'add_new'),
} 'label_search' => psm_get_lang('system', 'search'),
);
}
/** /**
* Get all server ids for a user * Get all server ids for a user
* @param int $user_id * @param int $user_id
* @return array with ids only * @return array with ids only
* @todo we should probably find a central place for this kind of stuff * @todo we should probably find a central place for this kind of stuff
*/ */
protected function getUserServers($user_id) { protected function getUserServers($user_id)
$servers = $this->db->select( {
PSM_DB_PREFIX.'users_servers', $servers = $this->db->select(
array('user_id' => $user_id), PSM_DB_PREFIX . 'users_servers',
array('server_id') array('user_id' => $user_id),
); array('server_id')
$result = array(); );
foreach ($servers as $server) { $result = array();
$result[] = $server['server_id']; foreach ($servers as $server) {
} $result[] = $server['server_id'];
return $result; }
} return $result;
}
} }

View File

@ -1,4 +1,5 @@
<?php <?php
/** /**
* PHP Server Monitor * PHP Server Monitor
* Monitor your servers and websites. * Monitor your servers and websites.
@ -30,22 +31,26 @@ namespace psm\Module\User\Event;
use Symfony\Component\EventDispatcher\Event; use Symfony\Component\EventDispatcher\Event;
class UserEvent extends Event { class UserEvent extends Event
{
protected $user_id; protected $user_id;
protected $user_id_by; protected $user_id_by;
public function __construct($user_id, $user_id_by = null) { public function __construct($user_id, $user_id_by = null)
$this->user_id = $user_id; {
$this->user_id_by = $user_id_by; $this->user_id = $user_id;
} $this->user_id_by = $user_id_by;
}
public function getUserId() { public function getUserId()
return $this->user_id; {
} return $this->user_id;
}
public function getUserIdBy() { public function getUserIdBy()
return $this->user_id_by; {
} return $this->user_id_by;
} }
}

View File

@ -1,4 +1,5 @@
<?php <?php
/** /**
* PHP Server Monitor * PHP Server Monitor
* Monitor your servers and websites. * Monitor your servers and websites.
@ -32,22 +33,27 @@ use psm\Module\User\UserEvents;
use psm\Module\User\Event\UserEvent; use psm\Module\User\Event\UserEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface; use Symfony\Component\EventDispatcher\EventSubscriberInterface;
class UserSubscriber implements EventSubscriberInterface { class UserSubscriber implements EventSubscriberInterface
{
public static function getSubscribedEvents() { public static function getSubscribedEvents()
return array( {
UserEvents::USER_ADD => array('onUserAdd', 0), return array(
UserEvents::USER_EDIT => array('onUserEdit', 0), UserEvents::USER_ADD => array('onUserAdd', 0),
UserEvents::USER_DELETE => array('onUserDelete', 0), UserEvents::USER_EDIT => array('onUserEdit', 0),
); UserEvents::USER_DELETE => array('onUserDelete', 0),
} );
}
public function onUserAdd(UserEvent $event) { public function onUserAdd(UserEvent $event)
} {
}
public function onUserEdit(UserEvent $event) { public function onUserEdit(UserEvent $event)
} {
}
public function onUserDelete(UserEvent $event) { public function onUserDelete(UserEvent $event)
} {
} }
}

View File

@ -1,4 +1,5 @@
<?php <?php
/** /**
* PHP Server Monitor * PHP Server Monitor
* Monitor your servers and websites. * Monitor your servers and websites.
@ -28,21 +29,21 @@
namespace psm\Module\User; namespace psm\Module\User;
final class UserEvents { final class UserEvents
{
/** /**
* @var string * @var string
*/ */
const USER_ADD = 'user.add'; public const USER_ADD = 'user.add';
/** /**
* @var string * @var string
*/ */
const USER_EDIT = 'user.edit'; public const USER_EDIT = 'user.edit';
/** /**
* @var string * @var string
*/ */
const USER_DELETE = 'user.delete'; public const USER_DELETE = 'user.delete';
}
}

View File

@ -1,4 +1,5 @@
<?php <?php
/** /**
* PHP Server Monitor * PHP Server Monitor
* Monitor your servers and websites. * Monitor your servers and websites.
@ -23,7 +24,7 @@
* @license http://www.gnu.org/licenses/gpl.txt GNU GPL v3 * @license http://www.gnu.org/licenses/gpl.txt GNU GPL v3
* @version Release: @package_version@ * @version Release: @package_version@
* @link http://www.phpservermonitor.org/ * @link http://www.phpservermonitor.org/
* @since phpservermon 3.0 * @since phpservermon 3.0
**/ **/
namespace psm\Module\User; namespace psm\Module\User;
@ -31,19 +32,21 @@ namespace psm\Module\User;
use psm\Module\ModuleInterface; use psm\Module\ModuleInterface;
use Symfony\Component\DependencyInjection\ContainerBuilder; use Symfony\Component\DependencyInjection\ContainerBuilder;
class UserModule implements ModuleInterface { class UserModule implements ModuleInterface
{
public function load(ContainerBuilder $container) { public function load(ContainerBuilder $container)
$event = $container->get('event'); {
$event->addSubscriber(new EventListener\UserSubscriber); $event = $container->get('event');
} $event->addSubscriber(new EventListener\UserSubscriber());
}
public function getControllers() { public function getControllers()
return array( {
'user' => __NAMESPACE__.'\Controller\UserController', return array(
'login' => __NAMESPACE__.'\Controller\LoginController', 'user' => __NAMESPACE__ . '\Controller\UserController',
'profile' => __NAMESPACE__.'\Controller\ProfileController', 'login' => __NAMESPACE__ . '\Controller\LoginController',
); 'profile' => __NAMESPACE__ . '\Controller\ProfileController',
);
} }
} }

View File

@ -1,4 +1,5 @@
<?php <?php
/** /**
* PHP Server Monitor * PHP Server Monitor
* Monitor your servers and websites. * Monitor your servers and websites.
@ -27,6 +28,7 @@
**/ **/
namespace psm; namespace psm;
use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Config\FileLocator; use Symfony\Component\Config\FileLocator;
@ -42,196 +44,207 @@ use Symfony\Component\DependencyInjection\Loader\XmlFileLoader;
* the module config. If the controller part is absent, it will always try to load * the module config. If the controller part is absent, it will always try to load
* the controller with the same name as the module. * the controller with the same name as the module.
*/ */
class Router { class Router
{
/** /**
* Service container * Service container
* @var \Symfony\Component\DependencyInjection\ContainerBuilder $container * @var \Symfony\Component\DependencyInjection\ContainerBuilder $container
*/ */
protected $container; protected $container;
public function __construct() { public function __construct()
$this->container = $this->buildServiceContainer(); {
$this->container = $this->buildServiceContainer();
$mods = $this->container->getParameter('modules'); $mods = $this->container->getParameter('modules');
foreach ($mods as $mod) { foreach ($mods as $mod) {
$mod_loader = $this->container->get($mod); $mod_loader = $this->container->get($mod);
$mod_loader->load($this->container); $mod_loader->load($this->container);
} }
} }
/** /**
* Run a module. * Run a module.
* *
* The $mod param is in the format $module_$controller. * The $mod param is in the format $module_$controller.
* If the "_$controller" part is omitted, it will attempt to load * If the "_$controller" part is omitted, it will attempt to load
* the controller with the same name as the module. * the controller with the same name as the module.
* *
* @param string $mod * @param string $mod
* @throws \InvalidArgumentException * @throws \InvalidArgumentException
* @throws \LogicException * @throws \LogicException
*/ */
public function run($mod) { public function run($mod)
if (strpos($mod, '_') !== false) { {
list($mod, $controller) = explode('_', $mod); if (strpos($mod, '_') !== false) {
} else { list($mod, $controller) = explode('_', $mod);
$controller = $mod; } else {
} $controller = $mod;
$this->buildTwigEnvironment(); }
$this->buildTwigEnvironment();
$controller = $this->getController($mod, $controller); $controller = $this->getController($mod, $controller);
$action = null; $action = null;
try { try {
$this->validateRequest($controller); $this->validateRequest($controller);
} catch (\InvalidArgumentException $ex) { } catch (\InvalidArgumentException $ex) {
switch ($ex->getMessage()) { switch ($ex->getMessage()) {
case 'login_required': case 'login_required':
$controller = $this->getController('user', 'login'); $controller = $this->getController('user', 'login');
break; break;
case 'invalid_csrf_token': case 'invalid_csrf_token':
case 'invalid_user_level': case 'invalid_user_level':
default: default:
$controller = $this->getController('error'); $controller = $this->getController('error');
$action = '401'; $action = '401';
break; break;
} }
} }
$response = $controller->run($action); $response = $controller->run($action);
if (!($response instanceof Response)) { if (!($response instanceof Response)) {
throw new \LogicException('Controller did not return a Response object.'); throw new \LogicException('Controller did not return a Response object.');
} }
$response->send(); $response->send();
} }
/** /**
* Get an instance of the requested controller. * Get an instance of the requested controller.
* @param string $module_id * @param string $module_id
* @param string $controller_id if NULL, default controller will be used * @param string $controller_id if NULL, default controller will be used
* @return \psm\Module\ControllerInterface * @return \psm\Module\ControllerInterface
* @throws \InvalidArgumentException * @throws \InvalidArgumentException
*/ */
public function getController($module_id, $controller_id = null) { public function getController($module_id, $controller_id = null)
if ($controller_id === null) { {
// by default, we use the controller with the same id as the module. if ($controller_id === null) {
$controller_id = $module_id; // by default, we use the controller with the same id as the module.
} $controller_id = $module_id;
}
$module = $this->container->get('module.'.$module_id); $module = $this->container->get('module.' . $module_id);
$controllers = $module->getControllers(); $controllers = $module->getControllers();
if (!isset($controllers[$controller_id]) || !class_exists($controllers[$controller_id])) { if (!isset($controllers[$controller_id]) || !class_exists($controllers[$controller_id])) {
throw new \InvalidArgumentException('Controller "'.$controller_id.'" is not registered or does not exist.'); throw new \InvalidArgumentException('Controller "' . $controller_id . '"
} is not registered or does not exist.');
$controller = new $controllers[$controller_id]( }
$this->container->get('db'), $controller = new $controllers[$controller_id](
$this->container->get('twig') $this->container->get('db'),
); $this->container->get('twig')
);
if (!$controller instanceof \psm\Module\ControllerInterface) { if (!$controller instanceof \psm\Module\ControllerInterface) {
throw new \Exception('Controller does not implement ControllerInterface'); throw new \Exception('Controller does not implement ControllerInterface');
} }
$controller->setContainer($this->container); $controller->setContainer($this->container);
return $controller; return $controller;
} }
/** /**
* Get service from container * Get service from container
* @param string $id * @param string $id
* @return mixed FALSE on failure, service otherwise * @return mixed FALSE on failure, service otherwise
* @throws \InvalidArgumentException * @throws \InvalidArgumentException
*/ */
public function getService($id) { public function getService($id)
return $this->container->get($id); {
} return $this->container->get($id);
}
/** /**
* Validate requets before heading to a controller * Validate requets before heading to a controller
* @param \psm\Module\ControllerInterface $controller * @param \psm\Module\ControllerInterface $controller
* @throws \InvalidArgumentException * @throws \InvalidArgumentException
*/ */
protected function validateRequest(\psm\Module\ControllerInterface $controller) { protected function validateRequest(\psm\Module\ControllerInterface $controller)
$request = Request::createFromGlobals(); {
$request = Request::createFromGlobals();
if ($request->getMethod() == 'POST') { if ($request->getMethod() == 'POST') {
// require CSRF token for all POST calls // require CSRF token for all POST calls
$session = $this->container->get('user')->getSession(); $session = $this->container->get('user')->getSession();
$token_in = $request->request->get('csrf', ''); $token_in = $request->request->get('csrf', '');
$csrf_key = $controller->getCSRFKey(); $csrf_key = $controller->getCSRFKey();
if (empty($csrf_key)) { if (empty($csrf_key)) {
if (!hash_equals($session->get('csrf_token'), $token_in)) { if (!hash_equals($session->get('csrf_token'), $token_in)) {
throw new \InvalidArgumentException('invalid_csrf_token'); throw new \InvalidArgumentException('invalid_csrf_token');
} }
} else { } else {
if (!hash_equals( if (
hash_hmac('sha256', $csrf_key, $session->get('csrf_token2')), !hash_equals(
$token_in hash_hmac('sha256', $csrf_key, $session->get('csrf_token2')),
)) { $token_in
throw new \InvalidArgumentException('invalid_csrf_token'); )
} ) {
} throw new \InvalidArgumentException('invalid_csrf_token');
} }
}
}
// get min required level for this controller and make sure the user matches // get min required level for this controller and make sure the user matches
$min_lvl = $controller->getMinUserLevelRequired(); $min_lvl = $controller->getMinUserLevelRequired();
if ($min_lvl < PSM_USER_ANONYMOUS) { if ($min_lvl < PSM_USER_ANONYMOUS) {
// if user is not logged in, load login module // if user is not logged in, load login module
if (!$this->container->get('user')->isUserLoggedIn()) { if (!$this->container->get('user')->isUserLoggedIn()) {
throw new \InvalidArgumentException('login_required'); throw new \InvalidArgumentException('login_required');
} elseif ($this->container->get('user')->getUserLevel() > $min_lvl) { } elseif ($this->container->get('user')->getUserLevel() > $min_lvl) {
throw new \InvalidArgumentException('invalid_user_level'); throw new \InvalidArgumentException('invalid_user_level');
} }
} }
} }
/** /**
* Build a new service container * Build a new service container
* @return \Symfony\Component\DependencyInjection\ContainerBuilder * @return \Symfony\Component\DependencyInjection\ContainerBuilder
* @throws \InvalidArgumentException * @throws \InvalidArgumentException
*/ */
protected function buildServiceContainer() { protected function buildServiceContainer()
$builder = new ContainerBuilder(); {
$loader = new XmlFileLoader($builder, new FileLocator(PSM_PATH_CONFIG)); $builder = new ContainerBuilder();
$loader->load('services.xml'); $loader = new XmlFileLoader($builder, new FileLocator(PSM_PATH_CONFIG));
$loader->load('services.xml');
return $builder; return $builder;
} }
/** /**
* Prepare twig environment * Prepare twig environment
* @return \Twig_Environment * @return \Twig_Environment
*/ */
protected function buildTwigEnvironment() { protected function buildTwigEnvironment()
$twig = $this->container->get('twig'); {
$session = $this->container->get('user')->getSession(); $twig = $this->container->get('twig');
if (!$session->has('csrf_token')) { $session = $this->container->get('user')->getSession();
$session->set('csrf_token', bin2hex(random_bytes(32))); if (!$session->has('csrf_token')) {
} $session->set('csrf_token', bin2hex(random_bytes(32)));
if (!$session->has('csrf_token2')) { }
$session->set('csrf_token2', random_bytes(32)); if (!$session->has('csrf_token2')) {
} $session->set('csrf_token2', random_bytes(32));
}
$twig->addFunction( $twig->addFunction(
new \Twig_SimpleFunction( new \Twig_SimpleFunction(
'csrf_token', 'csrf_token',
function($lock_to = null) use ($session) { function ($lock_to = null) use ($session) {
if (empty($lock_to)) { if (empty($lock_to)) {
return $session->get('csrf_token'); return $session->get('csrf_token');
} }
return hash_hmac('sha256', $lock_to, $session->get('csrf_token2')); return hash_hmac('sha256', $lock_to, $session->get('csrf_token2'));
} }
) )
); );
$twig->addGlobal('direction_current', psm_get_lang('locale_dir')); $twig->addGlobal('direction_current', psm_get_lang('locale_dir'));
$twig->addGlobal('language_current', psm_get_lang('locale_tag')); $twig->addGlobal('language_current', psm_get_lang('locale_tag'));
$twig->addGlobal('language', psm_get_lang('locale')[1]); $twig->addGlobal('language', psm_get_lang('locale')[1]);
return $twig; return $twig;
} }
} }

File diff suppressed because it is too large Load Diff

View File

@ -1,4 +1,5 @@
<?php <?php
/** /**
* PHP Server Monitor * PHP Server Monitor
* Monitor your servers and websites. * Monitor your servers and websites.
@ -28,6 +29,7 @@
**/ **/
namespace psm\Service; namespace psm\Service;
use Symfony\Component\HttpFoundation\Session\Session; use Symfony\Component\HttpFoundation\Session\Session;
use Symfony\Component\HttpFoundation\Session\SessionInterface; use Symfony\Component\HttpFoundation\Session\SessionInterface;
@ -42,465 +44,501 @@ use Symfony\Component\HttpFoundation\Session\SessionInterface;
* @link https://github.com/panique/php-login-advanced/ * @link https://github.com/panique/php-login-advanced/
* @license http://opensource.org/licenses/MIT MIT License * @license http://opensource.org/licenses/MIT MIT License
*/ */
class User { class User
{
/** /**
* The database connection * The database connection
* @var \PDO $db_connection * @var \PDO $db_connection
*/ */
protected $db_connection = null; protected $db_connection = null;
/** /**
* Local cache of user data * Local cache of user data
* @var array $user_data * @var array $user_data
*/ */
protected $user_data = array(); protected $user_data = array();
/** /**
* Session object * Session object
* @var \Symfony\Component\HttpFoundation\Session\Session $session * @var \Symfony\Component\HttpFoundation\Session\Session $session
*/ */
protected $session; protected $session;
/** /**
* Current user id * Current user id
* @var int $user_id * @var int $user_id
*/ */
protected $user_id; protected $user_id;
/** /**
*Current user preferences *Current user preferences
* @var array $user_preferences * @var array $user_preferences
*/ */
protected $user_preferences; protected $user_preferences;
/** /**
* The user's login status * The user's login status
* @var boolean $user_is_logged_in * @var boolean $user_is_logged_in
*/ */
protected $user_is_logged_in = false; protected $user_is_logged_in = false;
/** /**
* Open a new user service * Open a new user service
* *
* @param \psm\Service\Database $db * @param \psm\Service\Database $db
* @param \Symfony\Component\HttpFoundation\Session\SessionInterface $session if NULL, one will be created * @param \Symfony\Component\HttpFoundation\Session\SessionInterface $session if NULL, one will be created
*/ */
public function __construct(Database $db, SessionInterface $session = null) { public function __construct(Database $db, SessionInterface $session = null)
$this->db_connection = $db->pdo(); {
$this->db_connection = $db->pdo();
if (!psm_is_cli()) { if (!psm_is_cli()) {
if ($session == null) { if ($session == null) {
$session = new Session(); $session = new Session();
$session->start(); $session->start();
} }
$this->session = $session; $this->session = $session;
if ((!defined('PSM_INSTALL') || !PSM_INSTALL)) { if ((!defined('PSM_INSTALL') || !PSM_INSTALL)) {
// check the possible login actions: // check the possible login actions:
// 1. login via session data (happens each time user opens a page on your php project AFTER he has successfully logged in via the login form) // 1. login via session data (happens each time user opens a page on your php project AFTER
// 2. login via cookie // he has successfully logged in via the login form)
// 2. login via cookie
// if user has an active session on the server // if user has an active session on the server
if (!$this->loginWithSessionData()) { if (!$this->loginWithSessionData()) {
$this->loginWithCookieData(); $this->loginWithCookieData();
} }
} }
} }
} }
/** /**
* Get user by id, or get current user. * Get user by id, or get current user.
* @param int $user_id if null it will attempt current user id * @param int $user_id if null it will attempt current user id
* @param boolean $flush if TRUE it will query db regardless of whether we already have the data * @param boolean $flush if TRUE it will query db regardless of whether we already have the data
* @return object|boolean FALSE if user not found, object otherwise * @return object|boolean FALSE if user not found, object otherwise
*/ */
public function getUser($user_id = null, $flush = false) { public function getUser($user_id = null, $flush = false)
if ($user_id == null) { {
if (!$this->isUserLoggedIn()) { if ($user_id == null) {
return false; if (!$this->isUserLoggedIn()) {
} else { return false;
$user_id = $this->getUserId(); } else {
} $user_id = $this->getUserId();
} }
}
if (!isset($this->user_data[$user_id]) || $flush) { if (!isset($this->user_data[$user_id]) || $flush) {
$query_user = $this->db_connection->prepare('SELECT * FROM '.PSM_DB_PREFIX.'users WHERE user_id = :user_id'); $query_user = $this->db_connection->prepare('SELECT * FROM ' .
$query_user->bindValue(':user_id', $user_id, \PDO::PARAM_INT); PSM_DB_PREFIX . 'users WHERE user_id = :user_id');
$query_user->execute(); $query_user->bindValue(':user_id', $user_id, \PDO::PARAM_INT);
// get result row (as an object) $query_user->execute();
$this->user_data[$user_id] = $query_user->fetchObject(); // get result row (as an object)
} $this->user_data[$user_id] = $query_user->fetchObject();
return $this->user_data[$user_id]; }
} return $this->user_data[$user_id];
}
/** /**
* Search into database for the user data of user_name specified as parameter * Search into database for the user data of user_name specified as parameter
* @return object|boolean user data as an object if existing user * @return object|boolean user data as an object if existing user
*/ */
public function getUserByUsername($user_name) { public function getUserByUsername($user_name)
// database query, getting all the info of the selected user {
$query_user = $this->db_connection->prepare('SELECT * FROM '.PSM_DB_PREFIX.'users WHERE user_name = :user_name'); // database query, getting all the info of the selected user
$query_user->bindValue(':user_name', $user_name, \PDO::PARAM_STR); $query_user = $this->db_connection->prepare('SELECT * FROM ' .
$query_user->execute(); PSM_DB_PREFIX . 'users WHERE user_name = :user_name');
// get result row (as an object) $query_user->bindValue(':user_name', $user_name, \PDO::PARAM_STR);
return $query_user->fetchObject(); $query_user->execute();
} // get result row (as an object)
return $query_user->fetchObject();
}
/** /**
* Logs in with SESSION data. * Logs in with SESSION data.
* *
* @return boolean * @return boolean
*/ */
protected function loginWithSessionData() { protected function loginWithSessionData()
if (!$this->session->has('user_id')) { {
return false; if (!$this->session->has('user_id')) {
} return false;
$user = $this->getUser($this->session->get('user_id')); }
$user = $this->getUser($this->session->get('user_id'));
if (!empty($user)) { if (!empty($user)) {
$this->setUserLoggedIn($user->user_id); $this->setUserLoggedIn($user->user_id);
return true; return true;
} else { } else {
// user no longer exists in database // user no longer exists in database
// call logout to clean up session vars // call logout to clean up session vars
$this->doLogout(); $this->doLogout();
return false; return false;
} }
} }
/** /**
* Logs in via the Cookie * Logs in via the Cookie
* @return bool success state of cookie login * @return bool success state of cookie login
*/ */
private function loginWithCookieData() { private function loginWithCookieData()
if (isset($_COOKIE['rememberme'])) { {
// extract data from the cookie if (isset($_COOKIE['rememberme'])) {
list ($user_id, $token, $hash) = explode(':', $_COOKIE['rememberme']); // extract data from the cookie
// check cookie hash validity list ($user_id, $token, $hash) = explode(':', $_COOKIE['rememberme']);
if ($hash == hash('sha256', $user_id.':'.$token.PSM_LOGIN_COOKIE_SECRET_KEY) && !empty($token)) { // check cookie hash validity
// cookie looks good, try to select corresponding user if ($hash == hash('sha256', $user_id . ':' . $token . PSM_LOGIN_COOKIE_SECRET_KEY) && !empty($token)) {
// get real token from database (and all other data) // cookie looks good, try to select corresponding user
$user = $this->getUser($user_id); // get real token from database (and all other data)
$user = $this->getUser($user_id);
if (!empty($user) && $token === $user->rememberme_token) { if (!empty($user) && $token === $user->rememberme_token) {
$this->setUserLoggedIn($user->user_id, true); $this->setUserLoggedIn($user->user_id, true);
// Cookie token usable only once // Cookie token usable only once
$this->newRememberMeCookie(); $this->newRememberMeCookie();
return true; return true;
} }
} }
// call logout to remove invalid cookie // call logout to remove invalid cookie
$this->doLogout(); $this->doLogout();
} }
return false; return false;
} }
/** /**
* Logs in with the data provided in $_POST, coming from the login form * Logs in with the data provided in $_POST, coming from the login form
* @param string $user_name * @param string $user_name
* @param string $user_password * @param string $user_password
* @param boolean $user_rememberme * @param boolean $user_rememberme
* @return boolean * @return boolean
*/ */
public function loginWithPostData($user_name, $user_password, $user_rememberme = false) { public function loginWithPostData($user_name, $user_password, $user_rememberme = false)
$user_name = trim($user_name); {
$user_password = trim($user_password); $user_name = trim($user_name);
$user_password = trim($user_password);
if (empty($user_name) && empty($user_password)) { if (empty($user_name) && empty($user_password)) {
return false; return false;
} }
$user = $this->getUserByUsername($user_name); $user = $this->getUserByUsername($user_name);
// using PHP 5.5's password_verify() function to check if the provided passwords fits to the hash of that user's password // using PHP 5.5's password_verify() function to check if the provided passwords
if (!isset($user->user_id)) { // fits to the hash of that user's password
password_verify($user_password, 'dummy_call_against_timing'); if (!isset($user->user_id)) {
return false; password_verify($user_password, 'dummy_call_against_timing');
} else if (!password_verify($user_password, $user->password)) { return false;
return false; } elseif (!password_verify($user_password, $user->password)) {
} return false;
}
$this->setUserLoggedIn($user->user_id, true); $this->setUserLoggedIn($user->user_id, true);
// if user has check the "remember me" checkbox, then generate token and write cookie // if user has check the "remember me" checkbox, then generate token and write cookie
if ($user_rememberme) { if ($user_rememberme) {
$this->newRememberMeCookie(); $this->newRememberMeCookie();
} }
// recalculate the user's password hash // recalculate the user's password hash
// DELETE this if-block if you like, it only exists to recalculate users's hashes when you provide a cost factor, // DELETE this if-block if you like, it only exists to recalculate
// by default the script will use a cost factor of 10 and never change it. // users's hashes when you provide a cost factor,
// check if the have defined a cost factor in config/hashing.php // by default the script will use a cost factor of 10 and never change it.
if (defined('PSM_LOGIN_HASH_COST_FACTOR')) { // check if the have defined a cost factor in config/hashing.php
// check if the hash needs to be rehashed if (defined('PSM_LOGIN_HASH_COST_FACTOR')) {
if (password_needs_rehash($user->password, PASSWORD_DEFAULT, array('cost' => PSM_LOGIN_HASH_COST_FACTOR))) { // check if the hash needs to be rehashed
$this->changePassword($user->user_id, $user_password); if (password_needs_rehash($user->password, PASSWORD_DEFAULT, array('cost' => PSM_LOGIN_HASH_COST_FACTOR))) {
} $this->changePassword($user->user_id, $user_password);
} }
return true; }
} return true;
}
/** /**
* Set the user logged in * Set the user logged in
* @param int $user_id * @param int $user_id
* @param boolean $regenerate regenerate session id against session fixation? * @param boolean $regenerate regenerate session id against session fixation?
*/ */
protected function setUserLoggedIn($user_id, $regenerate = false) { protected function setUserLoggedIn($user_id, $regenerate = false)
if ($regenerate) { {
$this->session->invalidate(); if ($regenerate) {
} $this->session->invalidate();
$this->session->set('user_id', $user_id); }
$this->session->set('user_logged_in', 1); $this->session->set('user_id', $user_id);
$this->session->set('user_logged_in', 1);
// declare user id, set the login status to true // declare user id, set the login status to true
$this->user_id = $user_id; $this->user_id = $user_id;
$this->user_is_logged_in = true; $this->user_is_logged_in = true;
} }
/** /**
* Create all data needed for remember me cookie connection on client and server side * Create all data needed for remember me cookie connection on client and server side
*/ */
protected function newRememberMeCookie() { protected function newRememberMeCookie()
// generate 64 char random string and store it in current user data {
$random_token_string = hash('sha256', mt_rand()); // generate 64 char random string and store it in current user data
$sth = $this->db_connection->prepare('UPDATE '.PSM_DB_PREFIX.'users SET rememberme_token = :user_rememberme_token WHERE user_id = :user_id'); $random_token_string = hash('sha256', mt_rand());
$sth->execute(array(':user_rememberme_token' => $random_token_string, ':user_id' => $this->getUserId())); $sth = $this->db_connection->prepare('UPDATE ' .
PSM_DB_PREFIX . 'users SET rememberme_token = :user_rememberme_token WHERE user_id = :user_id');
$sth->execute(array(':user_rememberme_token' => $random_token_string, ':user_id' => $this->getUserId()));
// generate cookie string that consists of userid, randomstring and combined hash of both // generate cookie string that consists of userid, randomstring and combined hash of both
$cookie_string_first_part = $this->getUserId().':'.$random_token_string; $cookie_string_first_part = $this->getUserId() . ':' . $random_token_string;
$cookie_string_hash = hash('sha256', $cookie_string_first_part.PSM_LOGIN_COOKIE_SECRET_KEY); $cookie_string_hash = hash('sha256', $cookie_string_first_part . PSM_LOGIN_COOKIE_SECRET_KEY);
$cookie_string = $cookie_string_first_part.':'.$cookie_string_hash; $cookie_string = $cookie_string_first_part . ':' . $cookie_string_hash;
// set cookie // set cookie
setcookie('rememberme', $cookie_string, time() + PSM_LOGIN_COOKIE_RUNTIME, "/", PSM_LOGIN_COOKIE_DOMAIN); setcookie('rememberme', $cookie_string, time() + PSM_LOGIN_COOKIE_RUNTIME, "/", PSM_LOGIN_COOKIE_DOMAIN);
} }
/** /**
* Delete all data needed for remember me cookie connection on client and server side * Delete all data needed for remember me cookie connection on client and server side
*/ */
protected function deleteRememberMeCookie() { protected function deleteRememberMeCookie()
// Reset rememberme token {
if ($this->session->has('user_id')) { // Reset rememberme token
$sth = $this->db_connection->prepare('UPDATE '.PSM_DB_PREFIX.'users SET rememberme_token = NULL WHERE user_id = :user_id'); if ($this->session->has('user_id')) {
$sth->execute(array(':user_id' => $this->session->get('user_id'))); $sth = $this->db_connection->prepare('UPDATE ' .
} PSM_DB_PREFIX . 'users SET rememberme_token = NULL WHERE user_id = :user_id');
$sth->execute(array(':user_id' => $this->session->get('user_id')));
}
// set the rememberme-cookie to ten years ago (3600sec * 365 days * 10). // set the rememberme-cookie to ten years ago (3600sec * 365 days * 10).
// that's obivously the best practice to kill a cookie via php // that's obivously the best practice to kill a cookie via php
// @see http://stackoverflow.com/a/686166/1114320 // @see http://stackoverflow.com/a/686166/1114320
setcookie('rememberme', false, time() - (3600 * 3650), '/', PSM_LOGIN_COOKIE_DOMAIN); setcookie('rememberme', false, time() - (3600 * 3650), '/', PSM_LOGIN_COOKIE_DOMAIN);
} }
/** /**
* Perform the logout, resetting the session * Perform the logout, resetting the session
*/ */
public function doLogout() { public function doLogout()
$this->deleteRememberMeCookie(); {
$this->deleteRememberMeCookie();
$this->session->clear(); $this->session->clear();
$this->session->invalidate(); $this->session->invalidate();
$this->user_is_logged_in = false; $this->user_is_logged_in = false;
} }
/** /**
* Simply return the current state of the user's login * Simply return the current state of the user's login
* @return bool user's login status * @return bool user's login status
*/ */
public function isUserLoggedIn() { public function isUserLoggedIn()
return $this->user_is_logged_in; {
} return $this->user_is_logged_in;
}
/** /**
* Sets a random token into the database (that will verify the user when he/she comes back via the link * Sets a random token into the database (that will verify the user when he/she comes back via the link
* in the email) and returns it * in the email) and returns it
* @param int $user_id * @param int $user_id
* @return string|boolean FALSE on error, string otherwise * @return string|boolean FALSE on error, string otherwise
*/ */
public function generatePasswordResetToken($user_id) { public function generatePasswordResetToken($user_id)
$user_id = intval($user_id); {
$user_id = intval($user_id);
if ($user_id == 0) { if ($user_id == 0) {
return false; return false;
} }
// generate timestamp (to see when exactly the user (or an attacker) requested the password reset mail) // generate timestamp (to see when exactly the user (or an attacker) requested the password reset mail)
$temporary_timestamp = time(); $temporary_timestamp = time();
// generate random hash for email password reset verification (40 char string) // generate random hash for email password reset verification (40 char string)
$user_password_reset_hash = sha1(uniqid(mt_rand(), true)); $user_password_reset_hash = sha1(uniqid(mt_rand(), true));
$query_update = $this->db_connection->prepare('UPDATE '.PSM_DB_PREFIX.'users SET password_reset_hash = :user_password_reset_hash, $query_update = $this->db_connection->prepare('UPDATE ' .
password_reset_timestamp = :user_password_reset_timestamp PSM_DB_PREFIX . 'users SET password_reset_hash = :user_password_reset_hash,
WHERE user_id = :user_id'); password_reset_timestamp = :user_password_reset_timestamp
$query_update->bindValue(':user_password_reset_hash', $user_password_reset_hash, \PDO::PARAM_STR); WHERE user_id = :user_id');
$query_update->bindValue(':user_password_reset_timestamp', $temporary_timestamp, \PDO::PARAM_INT); $query_update->bindValue(':user_password_reset_hash', $user_password_reset_hash, \PDO::PARAM_STR);
$query_update->bindValue(':user_id', $user_id, \PDO::PARAM_INT); $query_update->bindValue(':user_password_reset_timestamp', $temporary_timestamp, \PDO::PARAM_INT);
$query_update->execute(); $query_update->bindValue(':user_id', $user_id, \PDO::PARAM_INT);
$query_update->execute();
// check if exactly one row was successfully changed: // check if exactly one row was successfully changed:
if ($query_update->rowCount() == 1) { if ($query_update->rowCount() == 1) {
return $user_password_reset_hash; return $user_password_reset_hash;
} else { } else {
return false; return false;
} }
} }
/** /**
* Checks if the verification string in the account verification mail is valid and matches to the user. * Checks if the verification string in the account verification mail is valid and matches to the user.
* *
* Please note it is valid for 1 hour. * Please note it is valid for 1 hour.
* @param int $user_id * @param int $user_id
* @param string $token * @param string $token
* @return boolean * @return boolean
*/ */
public function verifyPasswordResetToken($user_id, $token) { public function verifyPasswordResetToken($user_id, $token)
$user_id = intval($user_id); {
$user_id = intval($user_id);
if (empty($user_id) || empty($token)) { if (empty($user_id) || empty($token)) {
return false; return false;
} }
$user = $this->getUser($user_id); $user = $this->getUser($user_id);
if (isset($user->user_id) && $user->password_reset_hash == $token) { if (isset($user->user_id) && $user->password_reset_hash == $token) {
$runtime = (defined('PSM_LOGIN_RESET_RUNTIME')) ? PSM_LOGIN_RESET_RUNTIME : 3600; $runtime = (defined('PSM_LOGIN_RESET_RUNTIME')) ? PSM_LOGIN_RESET_RUNTIME : 3600;
$timestamp_max_interval = time() - $runtime; $timestamp_max_interval = time() - $runtime;
if ($user->password_reset_timestamp > $timestamp_max_interval) { if ($user->password_reset_timestamp > $timestamp_max_interval) {
return true; return true;
} }
} }
return false; return false;
} }
/** /**
* Change the password of a user * Change the password of a user
* @param int|\PDOStatement $user_id * @param int|\PDOStatement $user_id
* @param string $password * @param string $password
* @return boolean TRUE on success, FALSE on failure * @return boolean TRUE on success, FALSE on failure
*/ */
public function changePassword($user_id, $password) { public function changePassword($user_id, $password)
$user_id = intval($user_id); {
$user_id = intval($user_id);
if (empty($user_id) || empty($password)) { if (empty($user_id) || empty($password)) {
return false; return false;
} }
// now it gets a little bit crazy: check if we have a constant PSM_LOGIN_HASH_COST_FACTOR defined (in src/includes/psmconfig.inc.php), // now it gets a little bit crazy: check if we have a constant
// if so: put the value into $hash_cost_factor, if not, make $hash_cost_factor = null // PSM_LOGIN_HASH_COST_FACTOR defined (in src/includes/psmconfig.inc.php),
$hash_cost_factor = (defined('PSM_LOGIN_HASH_COST_FACTOR') ? PSM_LOGIN_HASH_COST_FACTOR : null); // if so: put the value into $hash_cost_factor, if not, make $hash_cost_factor = null
$hash_cost_factor = (defined('PSM_LOGIN_HASH_COST_FACTOR') ? PSM_LOGIN_HASH_COST_FACTOR : null);
// crypt the user's password with the PHP 5.5's password_hash() function, results in a 60 character hash string // crypt the user's password with the PHP 5.5's password_hash() function, results in a 60 character hash string
// the PASSWORD_DEFAULT constant is defined by the PHP 5.5, or if you are using PHP 5.3/5.4, by the password hashing // the PASSWORD_DEFAULT constant is defined by the PHP 5.5,
// compatibility library. the third parameter looks a little bit shitty, but that's how those PHP 5.5 functions // or if you are using PHP 5.3/5.4, by the password hashing
// want the parameter: as an array with, currently only used with 'cost' => XX. // compatibility library. the third parameter looks a little bit shitty, but that's how those PHP 5.5 functions
$user_password_hash = password_hash($password, PASSWORD_DEFAULT, array('cost' => $hash_cost_factor)); // want the parameter: as an array with, currently only used with 'cost' => XX.
$user_password_hash = password_hash($password, PASSWORD_DEFAULT, array('cost' => $hash_cost_factor));
// write users new hash into database // write users new hash into database
$query_update = $this->db_connection->prepare('UPDATE '.PSM_DB_PREFIX.'users SET password = :user_password_hash, $query_update = $this->db_connection->prepare('UPDATE ' .
password_reset_hash = NULL, password_reset_timestamp = NULL PSM_DB_PREFIX . 'users SET password = :user_password_hash,
WHERE user_id = :user_id'); password_reset_hash = NULL, password_reset_timestamp = NULL
$query_update->bindValue(':user_password_hash', $user_password_hash, \PDO::PARAM_STR); WHERE user_id = :user_id');
$query_update->bindValue(':user_id', $user_id, \PDO::PARAM_STR); $query_update->bindValue(':user_password_hash', $user_password_hash, \PDO::PARAM_STR);
$query_update->execute(); $query_update->bindValue(':user_id', $user_id, \PDO::PARAM_STR);
$query_update->execute();
// check if exactly one row was successfully changed: // check if exactly one row was successfully changed:
if ($query_update->rowCount() == 1) { if ($query_update->rowCount() == 1) {
return true; return true;
} else { } else {
return false; return false;
} }
} }
/** /**
* Gets the user id * Gets the user id
* @return int * @return int
*/ */
public function getUserId() { public function getUserId()
return $this->user_id; {
} return $this->user_id;
}
/** /**
* Gets the username * Gets the username
* @return string * @return string
*/ */
public function getUsername() { public function getUsername()
$user = $this->getUser(); {
return (isset($user->user_name) ? $user->user_name : null); $user = $this->getUser();
} return (isset($user->user_name) ? $user->user_name : null);
}
/** /**
* Gets the user level * Gets the user level
* @return int * @return int
*/ */
public function getUserLevel() { public function getUserLevel()
$user = $this->getUser(); {
$user = $this->getUser();
if (isset($user->level)) { if (isset($user->level)) {
return $user->level; return $user->level;
} else { } else {
return PSM_USER_ANONYMOUS; return PSM_USER_ANONYMOUS;
} }
} }
/** /**
* read current user preferences from the database * read current user preferences from the database
* @return boolean return false is user not connected * @return boolean return false is user not connected
*/ */
protected function loadPreferences() { protected function loadPreferences()
if ($this->user_preferences === null) { {
if (!$this->getUser()) { if ($this->user_preferences === null) {
return false; if (!$this->getUser()) {
} return false;
}
$this->user_preferences = array(); $this->user_preferences = array();
foreach ($this->db_connection->query('SELECT `key`,`value` FROM `'.PSM_DB_PREFIX.'users_preferences` WHERE `user_id` = '.$this->user_id) as $row) { foreach (
$this->user_preferences[$row['key']] = $row['value']; $this->db_connection->query('SELECT `key`,`value` FROM `' .
} PSM_DB_PREFIX . 'users_preferences` WHERE `user_id` = ' . $this->user_id) as $row
} ) {
return true; $this->user_preferences[$row['key']] = $row['value'];
} }
}
return true;
}
/** /**
* Get a user preference value * Get a user preference value
* @param string $key * @param string $key
* @param mixed $default * @param mixed $default
* @return mixed * @return mixed
*/ */
public function getUserPref($key, $default = '') { public function getUserPref($key, $default = '')
if (!$this->loadPreferences() || !isset($this->user_preferences[$key])) { {
return $default; if (!$this->loadPreferences() || !isset($this->user_preferences[$key])) {
} return $default;
}
$value = $this->user_preferences[$key]; $value = $this->user_preferences[$key];
settype($value, gettype($default)); settype($value, gettype($default));
return $value; return $value;
} }
/** /**
* Set a user preference value * Set a user preference value
* @param string $key * @param string $key
* @param mixed $value * @param mixed $value
*/ */
public function setUserPref($key, $value) { public function setUserPref($key, $value)
if ($this->loadPreferences()) { {
if (isset($this->user_preferences[$key])) { if ($this->loadPreferences()) {
if ($this->user_preferences[$key] == $value) { if (isset($this->user_preferences[$key])) {
return; // no change if ($this->user_preferences[$key] == $value) {
} return; // no change
$sql = 'UPDATE `'.PSM_DB_PREFIX.'users_preferences` SET `key` = ?, `value` = ? WHERE `user_id` = ?'; }
} else { $sql = 'UPDATE `' . PSM_DB_PREFIX . 'users_preferences` SET `key` = ?, `value` = ? WHERE `user_id` = ?';
$sql = 'INSERT INTO `'.PSM_DB_PREFIX.'users_preferences` SET `key` = ?, `value` = ?, `user_id` = ?'; } else {
} $sql = 'INSERT INTO `' . PSM_DB_PREFIX . 'users_preferences` SET `key` = ?, `value` = ?, `user_id` = ?';
$sth = $this->db_connection->prepare($sql); }
$sth->execute(array($key, $value, $this->user_id)); $sth = $this->db_connection->prepare($sql);
$this->user_preferences[$key] = $value; $sth->execute(array($key, $value, $this->user_id));
} $this->user_preferences[$key] = $value;
} }
}
/** /**
* Get session object * Get session object
* @return \Symfony\Component\HttpFoundation\Session\SessionInterface * @return \Symfony\Component\HttpFoundation\Session\SessionInterface
*/ */
public function getSession() { public function getSession()
return $this->session; {
} return $this->session;
}
} }

View File

@ -1,4 +1,5 @@
<?php <?php
/** /**
* PHP Server Monitor * PHP Server Monitor
* Monitor your servers and websites. * Monitor your servers and websites.
@ -17,13 +18,13 @@
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with PHP Server Monitor. If not, see <http://www.gnu.org/licenses/>. * along with PHP Server Monitor. If not, see <http://www.gnu.org/licenses/>.
* *
* @package phpservermon * @package phpservermon
* @author Axel Wehner <mail@axelwehner.de> * @author Axel Wehner <mail@axelwehner.de>
* @copyright Copyright (c) 2008-2017 Pepijn Over <pep@mailbox.org> * @copyright Copyright (c) 2008-2017 Pepijn Over <pep@mailbox.org>
* @license http://www.gnu.org/licenses/gpl.txt GNU GPL v3 * @license http://www.gnu.org/licenses/gpl.txt GNU GPL v3
* @version Release: @package_version@ * @version Release: @package_version@
* @link http://www.phpservermonitor.org/ * @link http://www.phpservermonitor.org/
* @since phpservermon 3.2.1 * @since phpservermon 3.2.1
**/ **/
namespace psm\Txtmsg; namespace psm\Txtmsg;
@ -36,195 +37,200 @@ namespace psm\Txtmsg;
* *
* Requirements: cURL v7.18.1+ and OpenSSL 0.9.8j+ * Requirements: cURL v7.18.1+ and OpenSSL 0.9.8j+
*/ */
class CMBulkSMS extends Core { class CMBulkSMS extends Core
/** @var bool True when cURL request succeeded */ {
public $result = true; /** @var bool True when cURL request succeeded */
public $result = true;
/** @var string Contains error message if cURL request failed */ /** @var string Contains error message if cURL request failed */
public $error = ''; public $error = '';
/** @var bool Set to true for debug output/logging */ /** @var bool Set to true for debug output/logging */
protected $debug = false; protected $debug = false;
/** @var bool Set to false if your operator isn't able to handle multipart messages */ /** @var bool Set to false if your operator isn't able to handle multipart messages */
protected $multipartMessage = true; protected $multipartMessage = true;
/** @var string|null Gateway API URL uses const GATEWAY_URL_XML or GATEWAY_URL_JSON */ /** @var string|null Gateway API URL uses const GATEWAY_URL_XML or GATEWAY_URL_JSON */
protected $apiUrl; protected $apiUrl;
/** @var string Gateway API Type: Use 'json' (default) or 'xml' */ /** @var string Gateway API Type: Use 'json' (default) or 'xml' */
protected $apiType = 'json'; protected $apiType = 'json';
/** @var string|null JSON or XML message for cURL request */ /** @var string|null JSON or XML message for cURL request */
protected $request; protected $request;
/** @var string|null HTTP Content-Type for cURL request */ /** @var string|null HTTP Content-Type for cURL request */
protected $contentType; protected $contentType;
/** @var string|null Raw sms text message */ /** @var string|null Raw sms text message */
protected $messageBody; protected $messageBody;
/** @var string JSON Gateway API URL */ /** @var string JSON Gateway API URL */
const GATEWAY_URL_JSON = "https://gw.cmtelecom.com/v1.0/message"; public const GATEWAY_URL_JSON = "https://gw.cmtelecom.com/v1.0/message";
/** @var string XML Gateway API URL */ /** @var string XML Gateway API URL */
const GATEWAY_URL_XML = "https://sgw01.cm.nl/gateway.ashx"; public const GATEWAY_URL_XML = "https://sgw01.cm.nl/gateway.ashx";
/** /**
* Build the message and send cURL request to the sms gateway * Build the message and send cURL request to the sms gateway
* *
* @see https://docs.cmtelecom.com/bulk-sms/v1.0#/send_a_message%7Csample_requests * @see https://docs.cmtelecom.com/bulk-sms/v1.0#/send_a_message%7Csample_requests
* @param string $message Your text message * @param string $message Your text message
* @return bool|string true when cURL request was successful, otherwise string with error message * @return bool|string true when cURL request was successful, otherwise string with error message
*/ */
public function sendSMS($message) { public function sendSMS($message)
// Check if recipient and text message are available {
if (count($this->recipients) < 1 || empty($message)) { // Check if recipient and text message are available
return false; if (count($this->recipients) < 1 || empty($message)) {
} return false;
}
// Prepare the message in CM's XML or JSON format // Prepare the message in CM's XML or JSON format
switch ($this->apiType) { switch ($this->apiType) {
case 'xml': case 'xml':
$this->request = $this->buildMessageXml(); $this->request = $this->buildMessageXml();
$this->contentType = 'Content-Type: application/xml'; $this->contentType = 'Content-Type: application/xml';
$this->apiUrl = self::GATEWAY_URL_XML; $this->apiUrl = self::GATEWAY_URL_XML;
break; break;
case 'json': case 'json':
default: default:
$this->request = $this->buildMessageJson(); $this->request = $this->buildMessageJson();
$this->contentType = 'Content-Type: application/json'; $this->contentType = 'Content-Type: application/json';
$this->apiUrl = self::GATEWAY_URL_JSON; $this->apiUrl = self::GATEWAY_URL_JSON;
break; break;
} }
$request = $this->executeCurlRequest(); $request = $this->executeCurlRequest();
return $request; return $request;
} }
/** /**
* Create a JSON batch sms message using CM's format * Create a JSON batch sms message using CM's format
* *
* @see https://docs.cmtelecom.com/bulk-sms/v1.0#/send_a_message%7Cbatch_messages * @see https://docs.cmtelecom.com/bulk-sms/v1.0#/send_a_message%7Cbatch_messages
* @see https://docs.cmtelecom.com/bulk-sms/v1.0#/send_a_message%7Csample_requests * @see https://docs.cmtelecom.com/bulk-sms/v1.0#/send_a_message%7Csample_requests
* @see https://docs.cmtelecom.com/bulk-sms/v1.0#/send_a_message%7Cmultipart * @see https://docs.cmtelecom.com/bulk-sms/v1.0#/send_a_message%7Cmultipart
* @return string JSON message object * @return string JSON message object
*/ */
protected function buildMessageJson() { protected function buildMessageJson()
// Prepare recipient array for batch message {
$recipients = array(); // Prepare recipient array for batch message
foreach ($this->recipients as $recipient) { $recipients = array();
$recipients[] = array('number' => $recipient); foreach ($this->recipients as $recipient) {
} $recipients[] = array('number' => $recipient);
}
// Build message array in CM's Bulk SMS format // Build message array in CM's Bulk SMS format
$msgArray = array( $msgArray = array(
'messages' => array( 'messages' => array(
'authentication' => array( 'authentication' => array(
'producttoken' => $this->password 'producttoken' => $this->password
), ),
'msg' => array( 'msg' => array(
array( array(
'from' => substr($this->originator, 0, 11), 'from' => substr($this->originator, 0, 15),
'to' => $recipients, 'to' => $recipients,
'body' => array( 'body' => array(
'content' => $message 'content' => $message
) )
) )
) )
) )
); );
// Multipart message // Multipart message
if ($this->multipartMessage) { if ($this->multipartMessage) {
$msgArray['messages']['msg'][0]['minimumNumberOfMessageParts'] = 1; $msgArray['messages']['msg'][0]['minimumNumberOfMessageParts'] = 1;
$msgArray['messages']['msg'][0]['maximumNumberOfMessageParts'] = 8; $msgArray['messages']['msg'][0]['maximumNumberOfMessageParts'] = 8;
} }
// Convert array in JSON object // Convert array in JSON object
return json_encode($msgArray); return json_encode($msgArray);
} }
/** /**
* Create a XML batch sms message in CM's format * Create a XML batch sms message in CM's format
* *
* @see https://docs.cmtelecom.com/bulk-sms/v1.0#/send_a_message%7Cbatch_messages * @see https://docs.cmtelecom.com/bulk-sms/v1.0#/send_a_message%7Cbatch_messages
* @see https://docs.cmtelecom.com/bulk-sms/v1.0#/send_a_message%7Csample_requests * @see https://docs.cmtelecom.com/bulk-sms/v1.0#/send_a_message%7Csample_requests
* @see https://docs.cmtelecom.com/bulk-sms/v1.0#/send_a_message%7Cmultipart * @see https://docs.cmtelecom.com/bulk-sms/v1.0#/send_a_message%7Cmultipart
* @return string XML message * @return string XML message
*/ */
protected function buildMessageXml() { protected function buildMessageXml()
// Create XML string {
$xml = new \SimpleXMLElement('<MESSAGES/>'); // Create XML string
$xml = new \SimpleXMLElement('<MESSAGES/>');
// API-Token // API-Token
$auth = $xml->addChild('AUTHENTICATION'); $auth = $xml->addChild('AUTHENTICATION');
$auth->addChild('PRODUCTTOKEN', $this->password); $auth->addChild('PRODUCTTOKEN', $this->password);
// Message // Message
$msg = $xml->addChild('MSG'); $msg = $xml->addChild('MSG');
// From // From
$msg->addChild('FROM', substr($this->originator, 0, 11)); $msg->addChild('FROM', substr($this->originator, 0, 15));
// Recipients // Recipients
foreach ($this->recipients as $recipient) { foreach ($this->recipients as $recipient) {
$msg->addChild('TO', $recipient); $msg->addChild('TO', $recipient);
} }
// Multipart message // Multipart message
if ($this->multipartMessage) { if ($this->multipartMessage) {
$msg->addChild('MINIMUMNUMBEROFMESSAGEPARTS', 1); $msg->addChild('MINIMUMNUMBEROFMESSAGEPARTS', 1);
$msg->addChild('MAXIMUMNUMBEROFMESSAGEPARTS', 8); $msg->addChild('MAXIMUMNUMBEROFMESSAGEPARTS', 8);
} }
// Add body text // Add body text
$msg->addChild('BODY', $message); $msg->addChild('BODY', $message);
return $xml->asXML(); return $xml->asXML();
} }
/** /**
* Create and execute the curl request * Create and execute the curl request
* *
* @return boolean|string boolean if message is sent, else string * @return boolean|string boolean if message is sent, else string
*/ */
protected function executeCurlRequest() { protected function executeCurlRequest()
$cr = curl_init(); {
curl_setopt_array($cr, array( $cr = curl_init();
CURLOPT_URL => $this->apiUrl, curl_setopt_array($cr, array(
CURLOPT_HTTPHEADER => array($this->contentType), CURLOPT_URL => $this->apiUrl,
CURLOPT_POST => true, CURLOPT_HTTPHEADER => array($this->contentType),
CURLOPT_POSTFIELDS => $this->request, CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true, CURLOPT_POSTFIELDS => $this->request,
CURLOPT_FAILONERROR => true CURLOPT_RETURNTRANSFER => true,
) CURLOPT_FAILONERROR => true
); ));
// execute curl request and fetch the response/error // execute curl request and fetch the response/error
$cResponse = curl_exec($cr); $cResponse = curl_exec($cr);
$cError = curl_error($cr); $cError = curl_error($cr);
$cErrorCode = curl_errno($cr); $cErrorCode = curl_errno($cr);
curl_close($cr); curl_close($cr);
// set result and log error if needed // set result and log error if needed
if ($cError) { if ($cError) {
$this->error = 'Response: CM SMS API:'.$cResponse.' cURL Error Code: '.$cErrorCode.'"'.$cError.'"'; $this->error = 'Response: CM SMS API:' . $cResponse . ' cURL Error Code: ' .
error_log($this->error, E_USER_ERROR); $cErrorCode . '"' . $cError . '"';
$this->result = false; error_log($this->error, E_USER_ERROR);
} $this->result = false;
}
// Debug output // Debug output
// Note: CM's XML gateway gives no response when message is sent successfully :/ // Note: CM's XML gateway gives no response when message is sent successfully :/
if ($this->debug || PSM_DEBUG) { if ($this->debug || PSM_DEBUG) {
$debug = '<pre>Request: '.$this->request.'<br>Response: '.$cResponse.'</pre>'; $debug = '<pre>Request: ' . $this->request . '<br>Response: ' . $cResponse . '</pre>';
error_log("Request: $this->request\r\nResponse: $cResponse", E_USER_NOTICE); error_log("Request: $this->request\r\nResponse: $cResponse", E_USER_NOTICE);
echo $debug; echo $debug;
} }
return $this->result ? $this->result : $this->error; return $this->result ? $this->result : $this->error;
} }
} }

View File

@ -1,4 +1,5 @@
<?php <?php
/** /**
* PHP Server Monitor * PHP Server Monitor
* Monitor your servers and websites. * Monitor your servers and websites.
@ -17,81 +18,84 @@
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with PHP Server Monitor. If not, see <http://www.gnu.org/licenses/>. * along with PHP Server Monitor. If not, see <http://www.gnu.org/licenses/>.
* *
* @package phpservermon * @package phpservermon
* @author Ward Pieters <ward@wardpieters.nl> * @author Ward Pieters <ward@wardpieters.nl>
* @author Tim Zandbergen <Tim@Xervion.nl> * @author Tim Zandbergen <Tim@Xervion.nl>
* @copyright Copyright (c) 2008-2017 Pepijn Over <pep@mailbox.org> * @copyright Copyright (c) 2008-2017 Pepijn Over <pep@mailbox.org>
* @license http://www.gnu.org/licenses/gpl.txt GNU GPL v3 * @license http://www.gnu.org/licenses/gpl.txt GNU GPL v3
* @version Release: @package_version@ * @version Release: @package_version@
* @link http://www.phpservermonitor.org/ * @link http://www.phpservermonitor.org/
* @since phpservermon 3.3.0 * @since phpservermon 3.3.0
**/ **/
namespace psm\Txtmsg; namespace psm\Txtmsg;
class Callr extends Core { class Callr extends Core
{
/** /**
* Send sms using the Callr API * Send sms using the Callr API
* *
* @var string $message * @var string $message
* @var string $this->password * @var string $this->password
* @var array $this->recipients * @var array $this->recipients
* @var array $this->originator * @var array $this->originator
* @var string $recipient * @var string $recipient
* *
* @var mixed $result * @var mixed $result
* @var array $headers * @var array $headers
* *
* @var resource $curl * @var resource $curl
* @var string $err * @var string $err
* *
* @var int $success * @var int $success
* @var string $error * @var string $error
* *
* @return bool|string * @return bool|string
*/ */
public function sendSMS($message) { public function sendSMS($message)
$error = ""; {
$success = 1; $error = "";
$success = 1;
foreach ($this->recipients as $recipient) {
$curl = curl_init(); foreach ($this->recipients as $recipient) {
curl_setopt_array($curl, array( $curl = curl_init();
CURLOPT_URL => "https://api.callr.com/rest/v1.1/sms", curl_setopt_array($curl, array(
CURLOPT_RETURNTRANSFER => true, CURLOPT_URL => "https://api.callr.com/rest/v1.1/sms",
CURLOPT_MAXREDIRS => 10, CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 30, CURLOPT_MAXREDIRS => 10,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_TIMEOUT => 30,
CURLOPT_CUSTOMREQUEST => "POST", CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_POSTFIELDS => json_encode( CURLOPT_CUSTOMREQUEST => "POST",
array( CURLOPT_POSTFIELDS => json_encode(
"to" => $recipient, array(
"from" => $this->originator, "to" => $recipient,
"body" => urlencode($message), "from" => $this->originator,
"options" => null, "body" => urlencode($message),
) "options" => null,
), )
CURLOPT_HTTPHEADER => array( ),
"authorization: Basic ".base64_encode($this->username.":".$this->password), CURLOPT_HTTPHEADER => array(
"content-type: application/json" "authorization: Basic " . base64_encode($this->username . ":" . $this->password),
), "content-type: application/json"
)); ),
));
$result = json_decode(curl_exec($curl), true);
$httpcode = curl_getinfo($curl, CURLINFO_HTTP_CODE); $result = json_decode(curl_exec($curl), true);
$err = curl_errno($curl); $httpcode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
$err = curl_errno($curl);
if ($err != 0 || $httpcode != 200 || $result['status'] == "error") { if ($err != 0 || $httpcode != 200 || $result['status'] == "error") {
$success = 0; $success = 0;
$error = "HTTP_code: ".$httpcode.".\ncURL error (".$err."): ".curl_strerror($err).". Result: ".$result['data']['code']." - ".$result['data']['message']; $error = "HTTP_code: " . $httpcode . ".\ncURL error (" . $err . "): " . curl_strerror($err) .
} ". Result: " . $result['data']['code'] . " - " . $result['data']['message'];
curl_close($curl); }
} curl_close($curl);
if ($success) { }
return 1; if ($success) {
} return 1;
return $error; }
} return $error;
} }
}

View File

@ -1,4 +1,5 @@
<?php <?php
/** /**
* PHP Server Monitor * PHP Server Monitor
* Monitor your servers and websites. * Monitor your servers and websites.
@ -28,74 +29,80 @@
namespace psm\Txtmsg; namespace psm\Txtmsg;
class ClickSend extends Core { class ClickSend extends Core
{
/**
* Send sms using the SMSgw.NET API /**
* * Send sms using the SMSgw.NET API
* @var string $message *
* @var string $this->password * @var string $message
* @var array $this->recipients * @var string $this->password
* @var array $this->originator * @var array $this->recipients
* @var string $recipients * @var array $this->originator
* * @var string $recipients
* @var resource $curl *
* @var string $err * @var resource $curl
* @var mixed $result * @var string $err
* * @var mixed $result
* @var int $success *
* @var string $error * @var int $success
* * @var string $error
* @return bool|string *
*/ * @return bool|string
*/
public function sendSMS($message) {
$error = ""; public function sendSMS($message)
$success = 1; {
$error = "";
if (empty($this->recipients)) { $success = 1;
return false;
} if (empty($this->recipients)) {
return false;
$data = array('messages' => array()); }
foreach ($this->recipients as $recipient) {
$data['messages'][] = array( $data = array('messages' => array());
'source' => 'phpservermon', foreach ($this->recipients as $recipient) {
'from' => substr($this->originator, 0, 11), $data['messages'][] = array(
'to' => $recipient, 'source' => 'phpservermon',
'body' => $message, 'from' => substr($this->originator, 0, 15),
); 'to' => $recipient,
} 'body' => $message,
);
$curl = curl_init(); }
curl_setopt_array($curl, array(
CURLOPT_URL => "https://rest.clicksend.com/v3/sms/send", $curl = curl_init();
CURLOPT_RETURNTRANSFER => true, curl_setopt_array($curl, array(
CURLOPT_ENCODING => "", CURLOPT_URL => "https://rest.clicksend.com/v3/sms/send",
CURLOPT_MAXREDIRS => 10, CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 30, CURLOPT_ENCODING => "",
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_MAXREDIRS => 10,
CURLOPT_CUSTOMREQUEST => "POST", CURLOPT_TIMEOUT => 30,
CURLOPT_POSTFIELDS => json_encode($data), CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_HTTPHEADER => array( CURLOPT_CUSTOMREQUEST => "POST",
"authorization: Basic ".base64_encode($this->username.":".$this->password), CURLOPT_POSTFIELDS => json_encode($data),
"content-type: application/json" CURLOPT_HTTPHEADER => array(
), "authorization: Basic " . base64_encode($this->username . ":" . $this->password),
)); "content-type: application/json"
),
$result = json_decode(curl_exec($curl), true); ));
$httpcode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
$err = curl_errno($curl); $result = json_decode(curl_exec($curl), true);
$httpcode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
if ($err != 0 || ($httpcode != '200' && $httpcode != '201' && $httpcode != '202' && $result['response_code'] != "SUCCESS")) { $err = curl_errno($curl);
$success = 0;
$error = "HTTP_code: ".$httpcode.".\ncURL error (".$err."): ".curl_strerror($err).". Result: ".$result.""; if (
} $err != 0 ||
curl_close($curl); ($httpcode != '200' && $httpcode != '201' && $httpcode != '202' && $result['response_code'] != "SUCCESS")
) {
if ($success) { $success = 0;
return 1; $error = "HTTP_code: " . $httpcode . ".\ncURL error (" . $err . "): " .
} curl_strerror($err) . ". Result: " . $result . "";
return $error; }
} curl_close($curl);
}
if ($success) {
return 1;
}
return $error;
}
}

View File

@ -1,4 +1,5 @@
<?php <?php
/** /**
* PHP Server Monitor * PHP Server Monitor
* Monitor your servers and websites. * Monitor your servers and websites.
@ -17,55 +18,58 @@
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with PHP Server Monitor. If not, see <http://www.gnu.org/licenses/>. * along with PHP Server Monitor. If not, see <http://www.gnu.org/licenses/>.
* *
* @package phpservermon * @package phpservermon
* @author Pepijn Over <pep@mailbox.org> * @author Pepijn Over <pep@mailbox.org>
* @author Tim Zandbergen <Tim@Xervion.nl> * @author Tim Zandbergen <Tim@Xervion.nl>
* @copyright Copyright (c) 2008-2018 Pepijn Over <pep@mailbox.org> * @copyright Copyright (c) 2008-2018 Pepijn Over <pep@mailbox.org>
* @license http://www.gnu.org/licenses/gpl.txt GNU GPL v3 * @license http://www.gnu.org/licenses/gpl.txt GNU GPL v3
* @version Release: @package_version@ * @version Release: @package_version@
* @link https://www.phpservermonitor.org/ * @link https://www.phpservermonitor.org/
**/ **/
namespace psm\Txtmsg; namespace psm\Txtmsg;
class Clickatell extends Core { class Clickatell extends Core
{
/** /**
* Send sms using the Clickatell API * Send sms using the Clickatell API
* @var string $message * @var string $message
* @var array $this->recipients * @var array $this->recipients
* @var string $recipient * @var string $recipient
* @var string $this->password * @var string $this->password
* @var string $this->originator * @var string $this->originator
* *
* @var int $success * @var int $success
* @var string $error * @var string $error
* *
* @return bool|string * @return bool|string
*/ */
public function sendSMS($message) { public function sendSMS($message)
$success = 1; {
$error = ''; $success = 1;
foreach ($this->recipients as $recipient) { $error = '';
$ch = curl_init(); foreach ($this->recipients as $recipient) {
curl_setopt($ch, CURLOPT_URL, "https://platform.clickatell.com/messages/http/send?apiKey=".urlencode($this->password)."&to=".urlencode($recipient)."&content=".urlencode($message)); $ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_URL, "https://platform.clickatell.com/messages/http/send?apiKey=" .
$headers = array(); urlencode($this->password) . "&to=" . urlencode($recipient) . "&content=" . urlencode($message));
$headers[] = "Content-Type: application/x-www-form-urlencoded"; curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); $headers = array();
$result = curl_exec($ch); $headers[] = "Content-Type: application/x-www-form-urlencoded";
curl_close($ch); curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$result = curl_exec($ch);
curl_close($ch);
// Check on error // Check on error
if (strpos($result, ",\"errorCode\":null,\"error\":null,\"errorDescription\":null") === False) { if (strpos($result, ",\"errorCode\":null,\"error\":null,\"errorDescription\":null") === false) {
$error = $result; $error = $result;
$success = 0; $success = 0;
} }
} }
if ($success) { if ($success) {
return 1; return 1;
} }
return $error; return $error;
} }
} }

View File

@ -1,4 +1,5 @@
<?php <?php
/** /**
* PHP Server Monitor * PHP Server Monitor
* Monitor your servers and websites. * Monitor your servers and websites.
@ -27,38 +28,42 @@
namespace psm\Txtmsg; namespace psm\Txtmsg;
abstract class Core implements TxtmsgInterface { abstract class Core implements TxtmsgInterface
protected $originator; {
protected $password; protected $originator;
protected $recipients = array(); protected $password;
protected $username; protected $recipients = array();
protected $username;
/** /**
* Define login information for the gateway * Define login information for the gateway
* *
* @param string $username * @param string $username
* @param string $password * @param string $password
*/ */
public function setLogin($username, $password) { public function setLogin($username, $password)
$this->username = $username; {
$this->password = $password; $this->username = $username;
} $this->password = $password;
}
/** /**
* Set the mobile number the text message will be send from * Set the mobile number the text message will be send from
* *
* @param string $originator * @param string $originator
*/ */
public function setOriginator($originator) { public function setOriginator($originator)
$this->originator = $originator; {
} $this->originator = $originator;
}
/** /**
* Add new recipient to the list * Add new recipient to the list
* *
* @param string|int $recipient * @param string|int $recipient
*/ */
public function addRecipients($recipient) { public function addRecipients($recipient)
array_push($this->recipients, $recipient); {
} array_push($this->recipients, $recipient);
}
} }

View File

@ -1,4 +1,5 @@
<?php <?php
/** /**
* PHP Server Monitor * PHP Server Monitor
* Monitor your servers and websites. * Monitor your servers and websites.
@ -27,52 +28,53 @@
namespace psm\Txtmsg; namespace psm\Txtmsg;
class FreeMobileSMS extends Core { class FreeMobileSMS extends Core
{
/**
* Send sms using the FreeMobileSMS API /**
* * Send sms using the FreeMobileSMS API
* @var string $message *
* @var string $this->password * @var string $message
* @var string $this->username * @var string $this->password
* * @var string $this->username
* @var resource $curl *
* @var string $err * @var resource $curl
* @var int $success * @var string $err
* @var string $error * @var int $success
* @var string $http_code * @var string $error
* * @var string $http_code
* @return bool|string *
*/ * @return bool|string
*/
public function sendSMS($message) {
$success = 1; public function sendSMS($message)
$error = ""; {
$success = 1;
$curl = curl_init(); $error = "";
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_URL, "https://smsapi.free-mobile.fr/sendmsg?".http_build_query( $curl = curl_init();
array( curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
"user" => $this->username, curl_setopt($curl, CURLOPT_URL, "https://smsapi.free-mobile.fr/sendmsg?" . http_build_query(
"pass" => $this->password, array(
"msg" => urlencode($message), "user" => $this->username,
) "pass" => $this->password,
) "msg" => urlencode($message),
); )
));
$result = curl_exec($curl); $result = curl_exec($curl);
$httpcode = curl_getinfo($curl, CURLINFO_HTTP_CODE); $httpcode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
$err = curl_errno($curl); $err = curl_errno($curl);
if ($err != 0 || $httpcode != 200) { if ($err != 0 || $httpcode != 200) {
$success = 0; $success = 0;
$error = "HTTP_code: ".$httpcode.".\ncURL error (".$err."): ".curl_strerror($err); $error = "HTTP_code: " . $httpcode . ".\ncURL error (" . $err . "): " . curl_strerror($err);
} }
curl_close($curl); curl_close($curl);
if ($success) { if ($success) {
return 1; return 1;
} }
return $error; return $error;
} }
} }

127
src/psm/Txtmsg/FreeVoipDeal.php Executable file → Normal file
View File

@ -1,4 +1,5 @@
<?php <?php
/** /**
* PHP Server Monitor * PHP Server Monitor
* Monitor your servers and websites. * Monitor your servers and websites.
@ -17,71 +18,71 @@
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with PHP Server Monitor. If not, see <http://www.gnu.org/licenses/>. * along with PHP Server Monitor. If not, see <http://www.gnu.org/licenses/>.
* *
* @package phpservermon * @package phpservermon
* @author Ward Pieters <ward@wardpieters.nl> * @author Ward Pieters <ward@wardpieters.nl>
* @copyright Copyright (c) 2008-2017 Pepijn Over <pep@mailbox.org> * @copyright Copyright (c) 2008-2017 Pepijn Over <pep@mailbox.org>
* @license http://www.gnu.org/licenses/gpl.txt GNU GPL v3 * @license http://www.gnu.org/licenses/gpl.txt GNU GPL v3
* @version Release: @package_version@ * @version Release: @package_version@
* @link http://www.phpservermonitor.org/ * @link http://www.phpservermonitor.org/
* @since phpservermon 3.1 * @since phpservermon 3.1
**/ **/
namespace psm\Txtmsg; namespace psm\Txtmsg;
class FreeVoipDeal extends Core { class FreeVoipDeal extends Core
{
/**
* Send sms using the FreeVoipDeal API /**
* @var string $message * Send sms using the FreeVoipDeal API
* @var string $this->password * @var string $message
* @var array $this->recipients * @var string $this->password
* @var array $this->originator * @var array $this->recipients
* * @var array $this->originator
* @var resource $curl *
* @var string $err * @var resource $curl
* @var string $recipient * @var string $err
* @var string $from * @var string $recipient
* @var mixed $result * @var string $from
* @var int $success * @var mixed $result
* @var string $error * @var int $success
* * @var string $error
* @return bool|string *
*/ * @return bool|string
*/
public function sendSMS($message) {
$error = ""; public function sendSMS($message)
$success = 1; {
$error = "";
$message = rawurlencode($message); $success = 1;
foreach ($this->recipients as $recipient) { $message = rawurlencode($message);
$curl = curl_init(); foreach ($this->recipients as $recipient) {
curl_setopt($curl, CURLOPT_URL, "https://www.freevoipdeal.com/myaccount/sendsms.php?".http_build_query( $curl = curl_init();
array( curl_setopt($curl, CURLOPT_URL, "https://www.freevoipdeal.com/myaccount/sendsms.php?" . http_build_query(
"username" => $this->username, array(
"password" => $this->password, "username" => $this->username,
"from" => substr($this->originator, 0, 11), "password" => $this->password,
"to" => $recipient, "from" => substr($this->originator, 0, 15),
"text" => $message, "to" => $recipient,
) "text" => $message,
) )
); ));
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($curl); $result = curl_exec($curl);
$err = curl_errno($curl); $err = curl_errno($curl);
curl_close($curl); curl_close($curl);
if ($err != 0 || is_numeric(strpos($result, "failure"))) { if ($err != 0 || is_numeric(strpos($result, "failure"))) {
$success = 0; $success = 0;
$error = $result; $error = $result;
} }
} }
if ($success) { if ($success) {
return 1; return 1;
} }
return $error; return $error;
} }
} }

View File

@ -1,4 +1,5 @@
<?php <?php
/** /**
* PHP Server Monitor * PHP Server Monitor
* Monitor your servers and websites. * Monitor your servers and websites.
@ -17,76 +18,78 @@
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with PHP Server Monitor. If not, see <http://www.gnu.org/licenses/>. * along with PHP Server Monitor. If not, see <http://www.gnu.org/licenses/>.
* *
* @package phpservermon * @package phpservermon
* @author Ward Pieters <ward@wardpieters.nl> * @author Ward Pieters <ward@wardpieters.nl>
* @author Tim Zandbergen <Tim@Xervion.nl> * @author Tim Zandbergen <Tim@Xervion.nl>
* @copyright Copyright (c) 2008-2017 Pepijn Over <pep@mailbox.org> * @copyright Copyright (c) 2008-2017 Pepijn Over <pep@mailbox.org>
* @license http://www.gnu.org/licenses/gpl.txt GNU GPL v3 * @license http://www.gnu.org/licenses/gpl.txt GNU GPL v3
* @version Release: @package_version@ * @version Release: @package_version@
* @link http://www.phpservermonitor.org/ * @link http://www.phpservermonitor.org/
* @since phpservermon 3.3.0 * @since phpservermon 3.3.0
**/ **/
namespace psm\Txtmsg; namespace psm\Txtmsg;
class GatewayAPI extends Core { class GatewayAPI extends Core
{
/** /**
* Send sms using the GatewayAPI API * Send sms using the GatewayAPI API
* *
* @var string $message * @var string $message
* @var string $this->password * @var string $this->password
* @var array $this->recipients * @var array $this->recipients
* @var array $this->originator * @var array $this->originator
* @var string $recipient * @var string $recipient
* @var mixed $result * @var mixed $result
* *
* @var resource $curl * @var resource $curl
* @var string $err * @var string $err
* @var int $success * @var int $success
* @var string $error * @var string $error
* *
* @return bool|string * @return bool|string
*/ */
public function sendSMS($message) { public function sendSMS($message)
$error = ""; {
$success = 1; $error = "";
$success = 1;
if (empty($this->recipients)) { if (empty($this->recipients)) {
return false; return false;
} }
$json = [ $json = [
'sender' => isset($this->originator) ? $this->originator : "PHPServerMon", 'sender' => isset($this->originator) ? $this->originator : "PHPServerMon",
'message' => $message, 'message' => $message,
'recipients' => [], 'recipients' => [],
]; ];
foreach ($this->recipients as $recipient) { foreach ($this->recipients as $recipient) {
$json['recipients'][] = ['msisdn' => $recipient]; $json['recipients'][] = ['msisdn' => $recipient];
} }
$curl = curl_init(); $curl = curl_init();
curl_setopt($curl, CURLOPT_URL, "https://gatewayapi.com/rest/mtsms"); curl_setopt($curl, CURLOPT_URL, "https://gatewayapi.com/rest/mtsms");
curl_setopt($curl, CURLOPT_HTTPHEADER, array("Content-Type: application/json")); curl_setopt($curl, CURLOPT_HTTPHEADER, array("Content-Type: application/json"));
curl_setopt($curl, CURLOPT_USERPWD, $this->password.":"); curl_setopt($curl, CURLOPT_USERPWD, $this->password . ":");
curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($json)); curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($json));
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
$result = json_decode(curl_exec($curl), true); $result = json_decode(curl_exec($curl), true);
$httpcode = curl_getinfo($curl, CURLINFO_HTTP_CODE); $httpcode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
$err = curl_errno($curl); $err = curl_errno($curl);
curl_close($curl); curl_close($curl);
if ($err != 0 || $httpcode != 200) { if ($err != 0 || $httpcode != 200) {
$success = 0; $success = 0;
$error = $result['code']." - ".$result['message']; $error = $result['code'] . " - " . $result['message'];
} }
if ($success) { if ($success) {
return 1; return 1;
} }
return $error; return $error;
} }
} }

View File

@ -1,4 +1,5 @@
<?php <?php
/** /**
* PHP Server Monitor * PHP Server Monitor
* Monitor your servers and websites. * Monitor your servers and websites.
@ -17,82 +18,85 @@
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with PHP Server Monitor. If not, see <http://www.gnu.org/licenses/>. * along with PHP Server Monitor. If not, see <http://www.gnu.org/licenses/>.
* *
* @package phpservermon * @package phpservermon
* @author Ward Pieters <ward@wardpieters.nl> * @author Ward Pieters <ward@wardpieters.nl>
* @author Tim Zandbergen <Tim@Xervion.nl> * @author Tim Zandbergen <Tim@Xervion.nl>
* @copyright Copyright (c) 2008-2017 Pepijn Over <pep@mailbox.org> * @copyright Copyright (c) 2008-2017 Pepijn Over <pep@mailbox.org>
* @license http://www.gnu.org/licenses/gpl.txt GNU GPL v3 * @license http://www.gnu.org/licenses/gpl.txt GNU GPL v3
* @version Release: @package_version@ * @version Release: @package_version@
* @link http://www.phpservermonitor.org/ * @link http://www.phpservermonitor.org/
**/ **/
namespace psm\Txtmsg; namespace psm\Txtmsg;
class Inetworx extends Core { class Inetworx extends Core
{
/** /**
* Send sms using the Inetworx API * Send sms using the Inetworx API
* *
* @var string $message * @var string $message
* @var string $this->password * @var string $this->password
* @var array $this->recipients * @var array $this->recipients
* @var array $this->originator * @var array $this->originator
* *
* @var resource $curl * @var resource $curl
* @var string $err * @var string $err
* @var string $recipient * @var string $recipient
* @var mixed $result * @var mixed $result
* *
* @var int $success * @var int $success
* @var string $error * @var string $error
* *
* @return bool|string * @return bool|string
*/ */
public function sendSMS($message) { public function sendSMS($message)
$error = ""; {
$success = 1; $error = "";
$success = 1;
foreach ($this->recipients as $recipient) { foreach ($this->recipients as $recipient) {
$curl = curl_init(); $curl = curl_init();
curl_setopt_array($curl, array( curl_setopt_array($curl, array(
CURLOPT_URL => "https://sms.inetworx.ch/smsapp/sendsms.php", CURLOPT_URL => "https://sms.inetworx.ch/smsapp/sendsms.php",
CURLOPT_RETURNTRANSFER => true, CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "", CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10, CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30, CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST", CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => http_build_query( CURLOPT_POSTFIELDS => http_build_query(
array( array(
"user" => $this->username, "user" => $this->username,
"pass" => $this->password, "pass" => $this->password,
"sender" => $this->originator, "sender" => $this->originator,
"rcpt" => $recipient, "rcpt" => $recipient,
"msgbody" => $message, "msgbody" => $message,
) )
), ),
CURLOPT_HTTPHEADER => array( CURLOPT_HTTPHEADER => array(
"authorization: Basic ".base64_encode("inetworxag:conn2smsapp"), "authorization: Basic " . base64_encode("inetworxag:conn2smsapp"),
"content-type: application/x-www-form-urlencoded" "content-type: application/x-www-form-urlencoded"
), ),
)); ));
$result = curl_exec($curl); $result = curl_exec($curl);
$err = curl_errno($curl); $err = curl_errno($curl);
$httpcode = curl_getinfo($curl, CURLINFO_HTTP_CODE); $httpcode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
if ($err != 0 || $httpcode != 200 || strpos($result, "200") === false) { if ($err != 0 || $httpcode != 200 || strpos($result, "200") === false) {
$success = 0; $success = 0;
$error = "HTTP_code: ".$httpcode.".\ncURL error (".$err."): ".curl_strerror($err).". \nResult: ".$result; $error = "HTTP_code: " . $httpcode . ".\ncURL error (" . $err . "): " .
} curl_strerror($err) . ". \nResult: " . $result;
curl_close($curl); }
} curl_close($curl);
}
if ($success) { if ($success) {
return 1; return 1;
} }
return $error; return $error;
} }
} }

View File

@ -1,4 +1,5 @@
<?php <?php
/** /**
* PHP Server Monitor * PHP Server Monitor
* Monitor your servers and websites. * Monitor your servers and websites.
@ -29,57 +30,62 @@
namespace psm\Txtmsg; namespace psm\Txtmsg;
class Messagebird extends Core { class Messagebird extends Core
{
/** /**
* Send sms using the Messagebird API * Send sms using the Messagebird API
* @var string $message * @var string $message
* @var array $this->recipients * @var array $this->recipients
* @var array $this->originator (Max 11 characters) * @var array $this->originator (Max 11 characters)
* @var array $recipients_chunk * @var array $recipients_chunk
* @var string $this->password * @var string $this->password
* *
* @var mixed $result * @var mixed $result
* @var array $headers * @var array $headers
* *
* @var int $success * @var int $success
* @var string $error * @var string $error
* *
* @return bool|string * @return bool|string
*/ */
public function sendSMS($message) { public function sendSMS($message)
$success = 1; {
$error = ''; $success = 1;
$error = '';
// Maximum of 50 users a time. // Maximum of 50 users a time.
$recipients_chunk = array_chunk($this->recipients, ceil(count($this->recipients) / 50)); $recipients_chunk = array_chunk($this->recipients, ceil(count($this->recipients) / 50));
foreach ($recipients_chunk as $recipients) { foreach ($recipients_chunk as $recipients) {
$ch = curl_init(); $ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://rest.messagebird.com/messages"); curl_setopt($ch, CURLOPT_URL, "https://rest.messagebird.com/messages");
curl_setopt($ch, CURLOPT_POSTFIELDS, curl_setopt(
"originator=".urlencode($this->originator == '' ? 'PSM' : $this->originator). $ch,
"&body=".urlencode($message). CURLOPT_POSTFIELDS,
"&recipients=".implode(",", $recipients)); "originator=" . urlencode($this->originator == '' ? 'PSM' : $this->originator) .
curl_setopt($ch, CURLOPT_POST, 1); "&body=" . urlencode($message) .
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); "&recipients=" . implode(",", $recipients)
$headers = array(); );
$headers[] = "Authorization: AccessKey ".$this->password; curl_setopt($ch, CURLOPT_POST, 1);
$headers[] = "Content-Type: application/x-www-form-urlencoded"; curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); $headers = array();
$result = curl_exec($ch); $headers[] = "Authorization: AccessKey " . $this->password;
curl_close($ch); $headers[] = "Content-Type: application/x-www-form-urlencoded";
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$result = curl_exec($ch);
curl_close($ch);
// Check on error // Check on error
if (is_numeric(strpos($result, "{\"errors\":"))) { if (is_numeric(strpos($result, "{\"errors\":"))) {
$error = $result; $error = $result;
$success = 0; $success = 0;
} }
} }
if ($success) { if ($success) {
return 1; return 1;
} }
return $error; return $error;
} }
} }

View File

@ -1,4 +1,5 @@
<?php <?php
/** /**
* PHP Server Monitor * PHP Server Monitor
* Monitor your servers and websites. * Monitor your servers and websites.
@ -17,74 +18,73 @@
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with PHP Server Monitor. If not, see <http://www.gnu.org/licenses/>. * along with PHP Server Monitor. If not, see <http://www.gnu.org/licenses/>.
* *
* @package phpservermon * @package phpservermon
* @author Ward Pieters <ward@wardpieters.nl> * @author Ward Pieters <ward@wardpieters.nl>
* @copyright Copyright (c) 2008-2017 Pepijn Over <pep@mailbox.org> * @copyright Copyright (c) 2008-2017 Pepijn Over <pep@mailbox.org>
* @license http://www.gnu.org/licenses/gpl.txt GNU GPL v3 * @license http://www.gnu.org/licenses/gpl.txt GNU GPL v3
* @version Release: @package_version@ * @version Release: @package_version@
* @link http://www.phpservermonitor.org/ * @link http://www.phpservermonitor.org/
* @since phpservermon 2.1 * @since phpservermon 2.1
**/ **/
namespace psm\Txtmsg; namespace psm\Txtmsg;
class Mosms extends Core { class Mosms extends Core
{
/** /**
* Send sms using the Mosms API * Send sms using the Mosms API
* *
* @var string $message * @var string $message
* @var array $this->username * @var array $this->username
* @var string $this->password * @var string $this->password
* @var array $this->recipients * @var array $this->recipients
* @var string $recipient * @var string $recipient
* @var array $this->originator (Max 11 characters) * @var array $this->originator (Max 11 characters)
* *
* @var resource $curl * @var resource $curl
* @var string $err * @var string $err
* @var int $success * @var int $success
* @var string $error * @var string $error
* *
* @return bool|string * @return bool|string
*/ */
public function sendSMS($message) { public function sendSMS($message)
$error = ""; {
$success = 1; $error = "";
$success = 1;
$message = rawurlencode($message);
$message = rawurlencode($message);
foreach ($this->recipients as $recipient) {
foreach ($this->recipients as $recipient) {
$curl = curl_init(); $curl = curl_init();
curl_setopt($curl, CURLOPT_URL, "https://www.mosms.com/se/sms-send.php?".http_build_query( curl_setopt($curl, CURLOPT_URL, "https://www.mosms.com/se/sms-send.php?" . http_build_query(
array( array(
"username" => $this->username, "username" => $this->username,
"password" => $this->password, "password" => $this->password,
"customsender" => substr($this->originator, 0, 11), "customsender" => substr($this->originator, 0, 15),
"nr" => $recipient, "nr" => $recipient,
"type" => "text", "type" => "text",
"data" => $message, "data" => $message,
) )
) ));
); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); $httpcode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
$httpcode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
$result = curl_exec($curl);
$result = curl_exec($curl); $err = curl_errno($curl);
$err = curl_errno($curl);
if ($err != 0 || $httpcode != 200 || $result == 2 || $result == 5) {
if ($err != 0 || $httpcode != 200 || $result == 2 || $result == 5) { $success = 0;
$success = 0; $error = "HTTP_code: " . $httpcode . ".\ncURL error (" . $err . "): " . $err . ". \nResult: " . $result;
$error = "HTTP_code: ".$httpcode.".\ncURL error (".$err."): ".$err.". \nResult: ".$result; }
} curl_close($curl);
curl_close($curl); }
} if ($success) {
return 1;
if ($success) { }
return 1; return $error;
} }
return $error; }
}
}

View File

@ -1,4 +1,5 @@
<?php <?php
/** /**
* PHP Server Monitor * PHP Server Monitor
* Monitor your servers and websites. * Monitor your servers and websites.
@ -17,73 +18,73 @@
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with PHP Server Monitor. If not, see <http://www.gnu.org/licenses/>. * along with PHP Server Monitor. If not, see <http://www.gnu.org/licenses/>.
* *
* @package phpservermon * @package phpservermon
* @author Ward Pieters <ward@wardpieters.nl> * @author Ward Pieters <ward@wardpieters.nl>
* @copyright Copyright (c) 2008-2017 Pepijn Over <pep@mailbox.org> * @copyright Copyright (c) 2008-2017 Pepijn Over <pep@mailbox.org>
* @license http://www.gnu.org/licenses/gpl.txt GNU GPL v3 * @license http://www.gnu.org/licenses/gpl.txt GNU GPL v3
* @version Release: @package_version@ * @version Release: @package_version@
* @link http://www.phpservermonitor.org/ * @link http://www.phpservermonitor.org/
* @since phpservermon 3.1.1 * @since phpservermon 3.1.1
**/ **/
namespace psm\Txtmsg; namespace psm\Txtmsg;
class Nexmo extends Core { class Nexmo extends Core
{
/**
* Send sms using the GatewayAPI API /**
* * Send sms using the GatewayAPI API
* @var string $message *
* @var string $this->password * @var string $message
* @var array $this->recipients * @var string $this->password
* @var array $this->originator * @var array $this->recipients
* @var string $recipient * @var array $this->originator
* * @var string $recipient
* @var resource $curl *
* @var string $err * @var resource $curl
* @var mixed $result * @var string $err
* * @var mixed $result
* @var int $success *
* @var string $error * @var int $success
* * @var string $error
* @return bool|string *
*/ * @return bool|string
*/
public function sendSMS($message) {
$success = 1; public function sendSMS($message)
$error = ""; {
$success = 1;
$error = "";
foreach ($this->recipients as $recipient) { foreach ($this->recipients as $recipient) {
$curl = curl_init();
$curl = curl_init(); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); curl_setopt($curl, CURLOPT_URL, "https://rest.nexmo.com/sms/json?" . http_build_query(
curl_setopt($curl, CURLOPT_URL, "https://rest.nexmo.com/sms/json?".http_build_query( array(
array( "api_key" => $this->username,
"api_key" => $this->username, "api_secret" => $this->password,
"api_secret" => $this->password, "from" => $this->originator,
"from" => $this->originator, "to" => $recipient,
"to" => $recipient, "text" => $message,
"text" => $message, )
) ));
)
); $result = json_decode(curl_exec($curl), true);
$httpcode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
$result = json_decode(curl_exec($curl), true); $err = curl_errno($curl);
$httpcode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
$err = curl_errno($curl); if ($err != 0 || $httpcode != 200 || $result['messages'][0]['status'] != "0") {
$success = 0;
if ($err != 0 || $httpcode != 200 || $result['messages'][0]['status'] != "0") { $error = "HTTP_code: " . $httpcode . ".\ncURL error (" . $err . "): " . curl_strerror($err) .
$success = 0; ". \nResult: " . $result['messages'][0]['error-text'];
$error = "HTTP_code: ".$httpcode.".\ncURL error (".$err."): ".curl_strerror($err).". \nResult: ".$result['messages'][0]['error-text']; }
} curl_close($curl);
curl_close($curl); }
} if ($success) {
return 1;
if ($success) { }
return 1; return $error;
} }
return $error; }
}
}

View File

@ -1,4 +1,5 @@
<?php <?php
/** /**
* PHP Server Monitor * PHP Server Monitor
* Monitor your servers and websites. * Monitor your servers and websites.
@ -17,79 +18,82 @@
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with PHP Server Monitor. If not, see <http://www.gnu.org/licenses/>. * along with PHP Server Monitor. If not, see <http://www.gnu.org/licenses/>.
* *
* @package phpservermon * @package phpservermon
* @author Alexis Urien <Alexis.urien@free.fr> * @author Alexis Urien <Alexis.urien@free.fr>
* @Author Tim Zandbergen <Tim@Xervion.nl> * @Author Tim Zandbergen <Tim@Xervion.nl>
* @author Ward Pieters <ward@wardpieters.nl> * @author Ward Pieters <ward@wardpieters.nl>
* @copyright Copyright (c) 2016 Alexis Urien <alexis.urien@free.fr> * @copyright Copyright (c) 2016 Alexis Urien <alexis.urien@free.fr>
* @license http://www.gnu.org/licenses/gpl.txt GNU GPL v3 * @license http://www.gnu.org/licenses/gpl.txt GNU GPL v3
* @version Release: @package_version@ * @version Release: @package_version@
* @link http://www.phpservermonitor.org/ * @link http://www.phpservermonitor.org/
* @since phpservermon 2.1 * @since phpservermon 2.1
**/ **/
namespace psm\Txtmsg; namespace psm\Txtmsg;
class Octopush extends Core { class Octopush extends Core
{
/**
* Send sms using the Octopush API /**
* @var string $message * Send sms using the Octopush API
* @var string $this->username * @var string $message
* @var string $this->password * @var string $this->username
* @var array $this->recipients * @var string $this->password
* @var array $this->originator * @var array $this->recipients
* * @var array $this->originator
* @var resource $curl *
* @var SimpleXMLElement $xmlResults * @var resource $curl
* @var string $err * @var SimpleXMLElement $xmlResults
* @var string $recipient * @var string $err
* @var string $smsType * @var string $recipient
* @var mixed $result * @var string $smsType
* * @var mixed $result
* @var int $success *
* @var string $error * @var int $success
* * @var string $error
* @return bool|string *
*/ * @return bool|string
*/
public function sendSMS($message) {
$error = ""; public function sendSMS($message)
$success = 1; {
$smsType = "XXX"; //FR = premium, WWW = world, XXX = Low cost $error = "";
$success = 1;
$recipients = join(',', $this->recipients); $smsType = "XXX"; //FR = premium, WWW = world, XXX = Low cost
$message = ($smsType == "FR") ? urlencode($message." STOP au XXXX") : urlencode($message); $recipients = join(',', $this->recipients);
$message = ($smsType == "FR") ? urlencode($message . " STOP au XXXX") : urlencode($message);
$curl = curl_init(); $curl = curl_init();
curl_setopt($curl, CURLOPT_URL, "http://www.octopush-dm.com/api/sms/?".http_build_query( curl_setopt($curl, CURLOPT_URL, "http://www.octopush-dm.com/api/sms/?" . http_build_query(
array( array(
"user_login" => $this->username, "user_login" => $this->username,
"api_key" => $this->password, "api_key" => $this->password,
"sms_recipients" => $recipients, "sms_recipients" => $recipients,
"sms_type" => $smsType, "sms_type" => $smsType,
"sms_sender" => substr($this->originator, 0, 11), "sms_sender" => substr($this->originator, 0, 15),
"sms_text" => $message, "sms_text" => $message,
) )
) ));
); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($curl);
$result = curl_exec($curl); $httpcode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
$httpcode = curl_getinfo($curl, CURLINFO_HTTP_CODE); $xmlResults = simplexml_load_string($result);
$xmlResults = simplexml_load_string($result); $err = curl_errno($curl);
$err = curl_errno($curl);
if ($err != 0 || $httpcode != 200 || $xmlResults === false || $xmlResults->error_code != '000') { if ($err != 0 || $httpcode != 200 || $xmlResults === false || $xmlResults->error_code != '000') {
$success = 0; $success = 0;
$error = "HTTP_code: ".$httpcode.".\ncURL error (".$err."): ".curl_strerror($err).". \nResult: ".$xmlResults->error_code.". Look at http://www.octopush-dm.com/en/errors for the error description."; $error = "HTTP_code: " . $httpcode . ".\ncURL error (" . $err . "): " . curl_strerror($err) .
} ". \nResult: " . $xmlResults->error_code .
curl_close($curl); ". Look at http://www.octopush-dm.com/en/errors for the error description.";
}
if ($success) { curl_close($curl);
return 1;
} if ($success) {
return $error; return 1;
} }
} return $error;
}
}

View File

@ -1,4 +1,5 @@
<?php <?php
/** /**
* PHP Server Monitor * PHP Server Monitor
* Monitor your servers and websites. * Monitor your servers and websites.
@ -17,82 +18,85 @@
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with PHP Server Monitor. If not, see <http://www.gnu.org/licenses/>. * along with PHP Server Monitor. If not, see <http://www.gnu.org/licenses/>.
* *
* @package phpservermon * @package phpservermon
* @author Tim Zandbergen <Tim@Xervion.nl> * @author Tim Zandbergen <Tim@Xervion.nl>
* @author Ward Pieters <ward@wardpieters.nl> * @author Ward Pieters <ward@wardpieters.nl>
* @copyright Copyright (c) 2008-2017 Pepijn Over <pep@mailbox.org> * @copyright Copyright (c) 2008-2017 Pepijn Over <pep@mailbox.org>
* @license http://www.gnu.org/licenses/gpl.txt GNU GPL v3 * @license http://www.gnu.org/licenses/gpl.txt GNU GPL v3
* @version Release: @package_version@ * @version Release: @package_version@
* @link http://www.phpservermonitor.org/ * @link http://www.phpservermonitor.org/
* @since phpservermon 3.3.0 * @since phpservermon 3.3.0
**/ **/
namespace psm\Txtmsg; namespace psm\Txtmsg;
class Plivo extends Core { class Plivo extends Core
{
/**
* Send sms using the Plivo API /**
* * Send sms using the Plivo API
* @var string $message *
* @var string $this->password * @var string $message
* @var array $this->recipients * @var string $this->password
* @var array $this->originator * @var array $this->recipients
* @var string $recipients * @var array $this->originator
* * @var string $recipients
* @var resource $curl *
* @var string $err * @var resource $curl
* @var int $success * @var string $err
* @var string $error * @var int $success
* * @var string $error
* @return bool|string *
*/ * @return bool|string
*/
public function sendSMS($message) {
$error = ""; public function sendSMS($message)
$success = 1; {
$error = "";
if (empty($this->recipients)) { $success = 1;
return false;
} if (empty($this->recipients)) {
return false;
$recipients = join('<', $this->recipients); }
$curl = curl_init(); $recipients = join('<', $this->recipients);
curl_setopt_array($curl, array(
CURLOPT_URL => "https://api.plivo.com/v1/Account/".$this->username."/Message/", $curl = curl_init();
CURLOPT_RETURNTRANSFER => true, curl_setopt_array($curl, array(
CURLOPT_ENCODING => "", CURLOPT_URL => "https://api.plivo.com/v1/Account/" . $this->username . "/Message/",
CURLOPT_MAXREDIRS => 10, CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 30, CURLOPT_ENCODING => "",
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_MAXREDIRS => 10,
CURLOPT_CUSTOMREQUEST => "POST", CURLOPT_TIMEOUT => 30,
CURLOPT_POSTFIELDS => json_encode( CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
array( CURLOPT_CUSTOMREQUEST => "POST",
"src" => $this->originator, CURLOPT_POSTFIELDS => json_encode(
"dst" => $recipients, array(
"text" => urlencode($message) "src" => $this->originator,
) "dst" => $recipients,
), "text" => urlencode($message)
CURLOPT_HTTPHEADER => array( )
"authorization: Basic ".base64_encode($this->username.":".$this->password), ),
"content-type: application/json" CURLOPT_HTTPHEADER => array(
), "authorization: Basic " . base64_encode($this->username . ":" . $this->password),
)); "content-type: application/json"
),
$result = curl_exec($curl); ));
$httpcode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
$err = curl_errno($curl); $result = curl_exec($curl);
$httpcode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
if ($err != 0 || ($httpcode != '200' && $httpcode != '201' && $httpcode != '202')) { $err = curl_errno($curl);
$success = 0;
$error = "HTTP_code: ".$httpcode.".\ncURL error (".$err."): ".curl_strerror($err).". Result: ".$result.""; if ($err != 0 || ($httpcode != '200' && $httpcode != '201' && $httpcode != '202')) {
} $success = 0;
curl_close($curl); $error = "HTTP_code: " . $httpcode . ".\ncURL error (" . $err . "): " .
curl_strerror($err) . ". Result: " . $result . "";
if ($success) { }
return 1; curl_close($curl);
}
return $error; if ($success) {
} return 1;
} }
return $error;
}
}

View File

@ -1,4 +1,5 @@
<?php <?php
/** /**
* PHP Server Monitor * PHP Server Monitor
* Monitor your servers and websites. * Monitor your servers and websites.
@ -17,77 +18,80 @@
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with PHP Server Monitor. If not, see <http://www.gnu.org/licenses/>. * along with PHP Server Monitor. If not, see <http://www.gnu.org/licenses/>.
* *
* @package phpservermon * @package phpservermon
* @author Ward Pieters <ward@wardpieters.nl> * @author Ward Pieters <ward@wardpieters.nl>
* @copyright Copyright (c) 2008-2017 Pepijn Over <pep@mailbox.org> * @copyright Copyright (c) 2008-2017 Pepijn Over <pep@mailbox.org>
* @license http://www.gnu.org/licenses/gpl.txt GNU GPL v3 * @license http://www.gnu.org/licenses/gpl.txt GNU GPL v3
* @version Release: @package_version@ * @version Release: @package_version@
* @link http://www.phpservermonitor.org/ * @link http://www.phpservermonitor.org/
* @since phpservermon 3.1 * @since phpservermon 3.1
**/ **/
namespace psm\Txtmsg; namespace psm\Txtmsg;
class Smsglobal extends Core { class Smsglobal extends Core
{
/** /**
* Send sms using the Smsglobal API * Send sms using the Smsglobal API
* @var string $message * @var string $message
* @var string $this->password * @var string $this->password
* @var array $this->recipients * @var array $this->recipients
* @var array $this->originator * @var array $this->originator
* *
* @var resource $curl * @var resource $curl
* @var string $err * @var string $err
* @var string $recipient * @var string $recipient
* @var string $from * @var string $from
* @var mixed $result * @var mixed $result
* *
* @var int $success * @var int $success
* @var string $error * @var string $error
* *
* @return bool|string * @return bool|string
*/ */
public function sendSMS($message) { public function sendSMS($message)
$error = ""; {
$success = 1; $error = "";
$success = 1;
$recipients = join(',', $this->recipients);
$recipients = join(',', $this->recipients);
$from = substr($this->originator, 0, 11); // Max 11 Characters
$message = substr(rawurlencode($message), 0, 153); $from = substr($this->originator, 0, 15); // Max 15 Characters
$message = substr(rawurlencode($message), 0, 153);
$curl = curl_init();
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); $curl = curl_init();
curl_setopt($curl, CURLOPT_TIMEOUT, 30); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_URL, "https://www.smsglobal.com/http-api.php?".http_build_query( curl_setopt($curl, CURLOPT_TIMEOUT, 30);
array( curl_setopt($curl, CURLOPT_URL, "https://www.smsglobal.com/http-api.php?" . http_build_query(
"action" => "sendsms", array(
"user" => $this->username, "action" => "sendsms",
"password" => $this->password, "user" => $this->username,
"from" => $from, "password" => $this->password,
"to" => $recipients, "from" => $from,
"clientcharset" => "ISO-8859-1", "to" => $recipients,
"text" => $message, "clientcharset" => "ISO-8859-1",
) "text" => $message,
)); )
));
$result = curl_exec($curl);
$httpcode = curl_getinfo($curl, CURLINFO_HTTP_CODE); $result = curl_exec($curl);
$httpcode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
$err = curl_errno($curl);
$err = curl_errno($curl);
if ($err != 0 || substr($result, 0, 5) != "OK: 0") {
$success = 0; if ($err != 0 || substr($result, 0, 5) != "OK: 0") {
$result = ($result == '') ? 'Wrong input, please check if all values are correct!' : $result; $success = 0;
$error = "HTTP_code: ".$httpcode.".\ncURL error (".$err."): ".curl_strerror($err).". \nResult: ".$result; $result = ($result == '') ? 'Wrong input, please check if all values are correct!' : $result;
} $error = "HTTP_code: " . $httpcode . ".\ncURL error (" . $err . "): " .
curl_close($curl); curl_strerror($err) . ". \nResult: " . $result;
}
if ($success) { curl_close($curl);
return 1;
} if ($success) {
return $error; return 1;
} }
} return $error;
}
}

View File

@ -1,4 +1,5 @@
<?php <?php
/** /**
* PHP Server Monitor * PHP Server Monitor
* Monitor your servers and websites. * Monitor your servers and websites.
@ -29,62 +30,65 @@
namespace psm\Txtmsg; namespace psm\Txtmsg;
class Smsgw extends Core { class Smsgw extends Core
{
/** /**
* Send sms using the SMSgw.NET API * Send sms using the SMSgw.NET API
* *
* @var string $message * @var string $message
* @var string $this->password * @var string $this->password
* @var array $this->recipients * @var array $this->recipients
* @var array $this->originator * @var array $this->originator
* @var string $recipients * @var string $recipients
* *
* @var resource $curl * @var resource $curl
* @var string $err * @var string $err
* @var int $success * @var int $success
* @var string $error * @var string $error
* *
* @return bool|string * @return bool|string
*/ */
public function sendSMS($message) { public function sendSMS($message)
$error = ""; {
$success = 1; $error = "";
$success = 1;
$recipients = join(';', $this->recipients); $recipients = join(';', $this->recipients);
$curl = curl_init(); $curl = curl_init();
curl_setopt_array($curl, array( curl_setopt_array($curl, array(
CURLOPT_URL => "https://api.smsgw.net/SendBulkSMS", CURLOPT_URL => "https://api.smsgw.net/SendBulkSMS",
CURLOPT_RETURNTRANSFER => true, CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "", CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10, CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30, CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST", CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => array( CURLOPT_POSTFIELDS => array(
'strUserName' => $this->username, 'strUserName' => $this->username,
'strPassword' => $this->password, 'strPassword' => $this->password,
"strTagName" => $this->originator, "strTagName" => $this->originator,
"strRecepientNumbers" => $recipients, "strRecepientNumbers" => $recipients,
"strMessage" => urlencode($message), "strMessage" => urlencode($message),
), ),
)); ));
$result = curl_exec($curl); $result = curl_exec($curl);
$httpcode = curl_getinfo($curl, CURLINFO_HTTP_CODE); $httpcode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
$err = curl_errno($curl); $err = curl_errno($curl);
if ($err != 0 || ($httpcode != '200' && $httpcode != '201' && $httpcode != '202' && $result != "1")) { if ($err != 0 || ($httpcode != '200' && $httpcode != '201' && $httpcode != '202' && $result != "1")) {
$success = 0; $success = 0;
$error = "HTTP_code: ".$httpcode.".\ncURL error (".$err."): ".curl_strerror($err).". Result: ".$result.""; $error = "HTTP_code: " . $httpcode . ".\ncURL error (" . $err . "): " .
} curl_strerror($err) . ". Result: " . $result . "";
curl_close($curl); }
curl_close($curl);
if ($success) { if ($success) {
return 1; return 1;
} }
return $error; return $error;
} }
} }

View File

@ -1,4 +1,5 @@
<?php <?php
/** /**
* PHP Server Monitor * PHP Server Monitor
* Monitor your servers and websites. * Monitor your servers and websites.
@ -17,69 +18,69 @@
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with PHP Server Monitor. If not, see <http://www.gnu.org/licenses/>. * along with PHP Server Monitor. If not, see <http://www.gnu.org/licenses/>.
* *
* @package phpservermon * @package phpservermon
* @author Ward Pieters <ward@wardpieters.nl> * @author Ward Pieters <ward@wardpieters.nl>
* @copyright Copyright (c) 2008-2017 Pepijn Over <pep@mailbox.org> * @copyright Copyright (c) 2008-2017 Pepijn Over <pep@mailbox.org>
* @license http://www.gnu.org/licenses/gpl.txt GNU GPL v3 * @license http://www.gnu.org/licenses/gpl.txt GNU GPL v3
* @version Release: @package_version@ * @version Release: @package_version@
* @link http://www.phpservermonitor.org/ * @link http://www.phpservermonitor.org/
* @since phpservermon 3.1 * @since phpservermon 3.1
**/ **/
namespace psm\Txtmsg; namespace psm\Txtmsg;
class Smsit extends Core { class Smsit extends Core
{
/**
* Send sms using the Smsit API /**
* * Send sms using the Smsit API
* @var string $message *
* @var string $this->password * @var string $message
* @var array $this->recipients * @var string $this->password
* @var array $this->originator * @var array $this->recipients
* * @var array $this->originator
* @var resource $curl *
* @var string $err * @var resource $curl
* @var String $recipient * @var string $err
* @var mixed $result * @var String $recipient
* * @var mixed $result
* @var int $success *
* @var string $error * @var int $success
* * @var string $error
* @return bool|string *
*/ * @return bool|string
*/
public function sendSMS($message) {
$success = 1; public function sendSMS($message)
$error = ""; {
$success = 1;
foreach ($this->recipients as $recipient) { $error = "";
$curl = curl_init(); foreach ($this->recipients as $recipient) {
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); $curl = curl_init();
curl_setopt($curl, CURLOPT_URL, "https://www.smsit.dk/api/v2?".http_build_query( curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
array( curl_setopt($curl, CURLOPT_URL, "https://www.smsit.dk/api/v2?" . http_build_query(
"apiKey" => $this->password, array(
"mobile" => $recipient, "apiKey" => $this->password,
"message" => urlencode($message), "mobile" => $recipient,
"senderId" => substr($this->originator, 0, 11), "message" => urlencode($message),
) "senderId" => substr($this->originator, 0, 15),
) )
); ));
$result = curl_exec($curl); $result = curl_exec($curl);
$err = curl_errno($curl); $err = curl_errno($curl);
curl_close($curl); curl_close($curl);
if ($err != 0 || is_numeric(strpos($result, "{\"errors\":[{\"code\":"))) { if ($err != 0 || is_numeric(strpos($result, "{\"errors\":[{\"code\":"))) {
$success = 0; $success = 0;
$error = $result; $error = $result;
} }
} }
if ($success) { if ($success) {
return 1; return 1;
} }
return $error; return $error;
} }
} }

View File

@ -1,4 +1,5 @@
<?php <?php
/** /**
* PHP Server Monitor * PHP Server Monitor
* Monitor your servers and websites. * Monitor your servers and websites.
@ -17,72 +18,74 @@
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with PHP Server Monitor. If not, see <http://www.gnu.org/licenses/>. * along with PHP Server Monitor. If not, see <http://www.gnu.org/licenses/>.
* *
* @package phpservermon * @package phpservermon
* @author Ward Pieters <ward@wardpieters.nl> * @author Ward Pieters <ward@wardpieters.nl>
* @author Tim Zandbergen <Tim@Xervion.nl> * @author Tim Zandbergen <Tim@Xervion.nl>
* @copyright Copyright (c) 2008-2017 Pepijn Over <pep@mailbox.org> * @copyright Copyright (c) 2008-2017 Pepijn Over <pep@mailbox.org>
* @license http://www.gnu.org/licenses/gpl.txt GNU GPL v3 * @license http://www.gnu.org/licenses/gpl.txt GNU GPL v3
* @version Release: @package_version@ * @version Release: @package_version@
* @link http://www.phpservermonitor.org/ * @link http://www.phpservermonitor.org/
* @since phpservermon 3.3.0 * @since phpservermon 3.3.0
**/ **/
namespace psm\Txtmsg; namespace psm\Txtmsg;
class SolutionsInfini extends Core { class SolutionsInfini extends Core
{
/** /**
* Send sms using the SolutionsInfini API * Send sms using the SolutionsInfini API
* *
* @var string $message * @var string $message
* @var string $this->password * @var string $this->password
* @var array $this->recipients * @var array $this->recipients
* @var string $recipients * @var string $recipients
* @var array $this->originator (Max 11 characters) * @var array $this->originator (Max 11 characters)
* *
* @var resource $curl * @var resource $curl
* @var string $err * @var string $err
* *
* @var int $success * @var int $success
* @var string $error * @var string $error
* *
* @return bool|string * @return bool|string
*/ */
public function sendSMS($message) { public function sendSMS($message)
$error = ""; {
$success = 1; $error = "";
$success = 1;
$message = urlencode($message); $message = urlencode($message);
$recipients = join(',', $this->recipients); $recipients = join(',', $this->recipients);
$curl = curl_init(); $curl = curl_init();
curl_setopt($curl, CURLOPT_URL, "https://api-alerts.solutionsinfini.com/v4/?".http_build_query( curl_setopt($curl, CURLOPT_URL, "https://api-alerts.solutionsinfini.com/v4/?" . http_build_query(
array( array(
"api_key" => $this->password, "api_key" => $this->password,
"method" => "sms", "method" => "sms",
"to" => $recipients, "to" => $recipients,
"sender" => substr($this->originator, 0, 11), "sender" => substr($this->originator, 0, 15),
"message" => $message, "message" => $message,
) )
) ));
); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
$result = json_decode(curl_exec($curl), true); $result = json_decode(curl_exec($curl), true);
$httpcode = curl_getinfo($curl, CURLINFO_HTTP_CODE); $httpcode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
$err = curl_errno($curl); $err = curl_errno($curl);
if ($err != 0 || $httpcode != 200 || $result['status'] != "OK") { if ($err != 0 || $httpcode != 200 || $result['status'] != "OK") {
$success = 0; $success = 0;
$error = "HTTP_code: ".$httpcode.".\ncURL error (".$err."): ".curl_strerror($err).". Result: ".$result['status']." - ".$result['message']."."; $error = "HTTP_code: " . $httpcode . ".\ncURL error (" . $err . "): " .
} curl_strerror($err) . ". Result: " . $result['status'] . " - " . $result['message'] . ".";
curl_close($curl); }
if ($success) { curl_close($curl);
return 1; if ($success) {
} return 1;
return $error; }
} return $error;
} }
}

View File

@ -1,4 +1,5 @@
<?php <?php
/** /**
* PHP Server Monitor * PHP Server Monitor
* Monitor your servers and websites. * Monitor your servers and websites.
@ -17,50 +18,61 @@
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with PHP Server Monitor. If not, see <http://www.gnu.org/licenses/>. * along with PHP Server Monitor. If not, see <http://www.gnu.org/licenses/>.
* *
* @package phpservermon * @package phpservermon
* @author Pepijn Over <pep@mailbox.org> * @author Pepijn Over <pep@mailbox.org>
* @copyright Copyright (c) 2008-2017 Pepijn Over <pep@mailbox.org> * @copyright Copyright (c) 2008-2017 Pepijn Over <pep@mailbox.org>
* @license http://www.gnu.org/licenses/gpl.txt GNU GPL v3 * @license http://www.gnu.org/licenses/gpl.txt GNU GPL v3
* @version Release: @package_version@ * @version Release: @package_version@
* @link http://www.phpservermonitor.org/ * @link http://www.phpservermonitor.org/
**/ **/
namespace psm\Txtmsg; namespace psm\Txtmsg;
class Spryng extends Core { class Spryng extends Core
{
/** /**
* Send sms using the Spryngsms API * Send sms using the Spryngsms API
* @var string $message * @var string $message
* @var array $this->recipients * @var array $this->recipients
* @var string $this->username * @var string $this->username
* @var string $this->password * @var string $this->password
* @var string $this->originator * @var string $this->originator
* @var mixed $result * @var mixed $result
* @var array $headers * @var array $headers
* *
* @var int $success * @var int $success
* @var string $error * @var string $error
* *
* @return bool|string * @return bool|string
*/ */
public function sendSMS($message) { public function sendSMS($message)
$recipients = implode(",", $this->recipients); {
$recipients = implode(",", $this->recipients);
$ch = curl_init(); $ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://api.spryngsms.com/api/send.php?OPERATION=send&USERNAME=".urlencode($this->username)."&PASSWORD=".urlencode($this->password)."&DESTINATION=".urlencode($recipients)."&SENDER=".urlencode($this->originator)."&BODY=".urlencode($message)."&SMSTYPE=BUSINESS"); curl_setopt(
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $ch,
$headers = array(); CURLOPT_URL,
$headers[] = "Content-Type: application/x-www-form-urlencoded"; "https://api.spryngsms.com/api/send.php?OPERATION=send&USERNAME=" .
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); urlencode($this->username) .
$result = curl_exec($ch); "&PASSWORD=" . urlencode($this->password) .
curl_close($ch); "&DESTINATION=" . urlencode($recipients) .
"&SENDER=" . urlencode($this->originator) .
"&BODY=" . urlencode($message) . "&SMSTYPE=BUSINESS"
);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$headers = array();
$headers[] = "Content-Type: application/x-www-form-urlencoded";
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$result = curl_exec($ch);
curl_close($ch);
// Check on error // Check on error
if ($result != 1) { if ($result != 1) {
return "Error ".$result.": see http://www.spryng.nl/en/developers/http-api/ for the description."; return "Error " . $result . ": see http://www.spryng.nl/en/developers/http-api/ for the description.";
} }
return 1; return 1;
} }
} }

View File

@ -1,4 +1,5 @@
<?php <?php
/** /**
* PHP Server Monitor * PHP Server Monitor
* Monitor your servers and websites. * Monitor your servers and websites.
@ -17,59 +18,68 @@
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with PHP Server Monitor. If not, see <http://www.gnu.org/licenses/>. * along with PHP Server Monitor. If not, see <http://www.gnu.org/licenses/>.
* *
* @package phpservermon * @package phpservermon
* @author Perri Vardy-Mason * @author Perri Vardy-Mason
* @author Tim Zandbergen <Tim@Xervion.nl> * @author Tim Zandbergen <Tim@Xervion.nl>
* @copyright Copyright (c) 2008-2017 Pepijn Over <pep@mailbox.org> * @copyright Copyright (c) 2008-2017 Pepijn Over <pep@mailbox.org>
* @license http://www.gnu.org/licenses/gpl.txt GNU GPL v3 * @license http://www.gnu.org/licenses/gpl.txt GNU GPL v3
* @version Release: @package_version@ * @version Release: @package_version@
* @link http://www.phpservermonitor.org/ * @link http://www.phpservermonitor.org/
* @since phpservermon 2.1 * @since phpservermon 2.1
**/ **/
namespace psm\Txtmsg; namespace psm\Txtmsg;
class Textmarketer extends Core { class Textmarketer extends Core
{
/** /**
* Send sms using the Textmarketer API * Send sms using the Textmarketer API
* @var string $message * @var string $message
* @var array $this->recipients * @var array $this->recipients
* @var string $recipient * @var string $recipient
* @var string $this->username * @var string $this->username
* @var string $this->password * @var string $this->password
* @var mixed $result * @var mixed $result
* @var array $headers * @var array $headers
* *
* @var int $success * @var int $success
* @var string $error * @var string $error
* *
* @return bool|string * @return bool|string
*/ */
public function sendSMS($message) { public function sendSMS($message)
$success = 1; {
$error = ''; $success = 1;
foreach ($this->recipients as $recipient) { $error = '';
foreach ($this->recipients as $recipient) {
$ch = curl_init();
curl_setopt(
$ch,
CURLOPT_URL,
"https://api.textmarketer.co.uk/gateway/?username=" . $this->username .
"&password=" . $this->password .
"&to=" . $recipient .
"&message=" . urlencode($message) .
"&orig=SERVERALERT"
);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$headers = array();
$headers[] = "Content-Type: application/x-www-form-urlencoded";
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$result = curl_exec($ch);
curl_close($ch);
$ch = curl_init(); // Check on error
curl_setopt($ch, CURLOPT_URL, "https://api.textmarketer.co.uk/gateway/?username=".$this->username."&password=".$this->password."&to=".$recipient."&message=".urlencode($message)."&orig=SERVERALERT"); if (is_numeric(strpos($result, "FAILED"))) {
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $error = $result;
$headers = array(); $success = 0;
$headers[] = "Content-Type: application/x-www-form-urlencoded"; }
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); }
$result = curl_exec($ch); if ($success == 1) {
curl_close($ch); return 1;
}
// Check on error return $error;
if (is_numeric(strpos($result, "FAILED"))) { }
$error = $result;
$success = 0;
}
}
if ($success == 1) {
return 1;
}
return $error;
}
} }

Some files were not shown because too many files have changed in this diff Show More