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

5
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": [

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": [],

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

@ -6,3 +6,4 @@ 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,7 +26,11 @@
* @link http://www.phpservermonitor.org/ * @link http://www.phpservermonitor.org/
**/ **/
namespace {
// include main configuration and functionality // include main configuration and functionality
use psm\Router;
use psm\Util\Server\UpdateManager;
require_once __DIR__ . '/../src/bootstrap.php'; require_once __DIR__ . '/../src/bootstrap.php';
if (!psm_is_cli()) { if (!psm_is_cli()) {
@ -39,9 +44,20 @@ if (!psm_is_cli()) {
$data = @unserialize(PSM_CRON_ALLOW); $data = @unserialize(PSM_CRON_ALLOW);
$allow = $data === false ? PSM_CRON_ALLOW : $data; $allow = $data === false ? PSM_CRON_ALLOW : $data;
if (!in_array($_SERVER['REMOTE_ADDR'], $allow) && !in_array($_SERVER["HTTP_X_FORWARDED_FOR"], $allow)) { 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'); 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>'); 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"; echo "OK";
} }
@ -71,20 +87,79 @@ if (!empty($_SERVER['argv'])) {
// 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
$status = null;
if (PHP_SAPI === 'cli') {
$shortOptions = 's:'; // status
$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(); $time = time();
if ( if (
psm_get_conf('cron_running') == 1 psm_get_conf($confPrefix . 'running') == 1
&& $cron_timeout > 0 && $cron_timeout > 0
&& ($time - psm_get_conf('cron_running_time') < $cron_timeout) && ($time - psm_get_conf($confPrefix . 'running_time') < $cron_timeout)
) { ) {
die('Cron is already running. Exiting.'); die('Cron is already running. Exiting.');
} }
if (!defined('PSM_DEBUG') || !PSM_DEBUG) { if (!defined('PSM_DEBUG') || !PSM_DEBUG) {
psm_update_conf('cron_running', 1); psm_update_conf($confPrefix . 'running', 1);
} }
psm_update_conf('cron_running_time', $time); psm_update_conf($confPrefix . 'running_time', $time);
/** @var Router $router */
/** @var UpdateManager $autorun */
$autorun = $router->getService('util.server.updatemanager'); $autorun = $router->getService('util.server.updatemanager');
$autorun->run(true);
psm_update_conf('cron_running', 0); 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
@ -169,10 +173,9 @@ The following people have contributed to the translation of PHP Server Monitor:
* Haydar Kulekci - https://github.com/hkulekci * Haydar Kulekci - https://github.com/hkulekci
* Catalan * Ukrainian
* caos30 - https://github.com/caos30
* Oleksa Vyshnivsky - https://github.com/oleksavyshnivsky
Vendors Vendors
+++++++ +++++++

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.

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/
**/ **/
namespace {
define('PSM_INSTALL', true); 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,6 +27,7 @@
* @since phpservermon 2.1.0 * @since phpservermon 2.1.0
**/ **/
namespace {
// Include paths // Include paths
define('PSM_PATH_SRC', __DIR__ . DIRECTORY_SEPARATOR); define('PSM_PATH_SRC', __DIR__ . DIRECTORY_SEPARATOR);
define('PSM_PATH_CONFIG', PSM_PATH_SRC . 'config' . DIRECTORY_SEPARATOR); define('PSM_PATH_CONFIG', PSM_PATH_SRC . 'config' . DIRECTORY_SEPARATOR);
@ -62,14 +64,20 @@ if (!defined('PSM_CRON_ALLOW')) {
define('PSM_CRON_ALLOW', serialize(array())); define('PSM_CRON_ALLOW', serialize(array()));
} }
$vendor_autoload = PSM_PATH_SRC.'..'.DIRECTORY_SEPARATOR.'vendor'.DIRECTORY_SEPARATOR.'autoload.php'; $vendor_autoload = PSM_PATH_SRC . '..' . DIRECTORY_SEPARATOR . 'vendor' .
DIRECTORY_SEPARATOR . 'autoload.php';
if (!file_exists($vendor_autoload)) { 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); 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; require_once $vendor_autoload;
$router = new psm\Router(); $router = new psm\Router();
// this may seem insignificant, but right now lots of functions depend on the following global var definition: // this may seem insignificant, but right now lots of functions
// depend on the following global var definition:
$db = $router->getService('db'); $db = $router->getService('db');
// sanity check! // sanity check!
@ -77,7 +85,7 @@ if (!defined('PSM_INSTALL') || !PSM_INSTALL) {
if ($db->getDbHost() === null) { if ($db->getDbHost() === null) {
// no config file has been loaded, redirect the user to the install // no config file has been loaded, redirect the user to the install
header('Location: install.php'); 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); die();
} }
// config file has been loaded, check if we have a connection // config file has been loaded, check if we have a connection
if (!$db->status()) { if (!$db->status()) {
@ -87,14 +95,19 @@ if (!defined('PSM_INSTALL') || !PSM_INSTALL) {
if (!psm_load_conf()) { if (!psm_load_conf()) {
// unable to load from config table // unable to load from config table
header('Location: install.php'); 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); die();
} }
// config load OK, make sure database version is up to date // config load OK, make sure database version is up to date
$installer = new \psm\Util\Install\Installer($db); $installer = new \psm\Util\Install\Installer($db);
if ($installer->isUpgradeRequired()) { 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); 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'); $lang = psm_get_conf('language', 'en_US');
psm_load_lang($lang); psm_load_lang($lang);
}

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,6 +26,8 @@
* @link http://www.phpservermonitor.org/ * @link http://www.phpservermonitor.org/
**/ **/
namespace {
############################################### ###############################################
# #
# Language functions # Language functions
@ -38,7 +41,8 @@
* @return string|bool * @return string|bool
* @see psm_load_lang() * @see psm_load_lang()
*/ */
function psm_get_lang() { function psm_get_lang()
{
$args = func_get_args(); $args = func_get_args();
if (empty($args)) { if (empty($args)) {
@ -75,21 +79,27 @@ function psm_get_lang() {
* @param string $lang language * @param string $lang language
* @see psm_get_lang() * @see psm_get_lang()
*/ */
function psm_load_lang($lang) { function psm_load_lang($lang)
{
// load default language - English (en_US) // load default language - English (en_US)
// this will also fill in every part that is not translated in other translation files // this will also fill in every part that is not translated in other translation files
$default_lang_file = PSM_PATH_LANG . 'en_US.lang.php'; $default_lang_file = PSM_PATH_LANG . 'en_US.lang.php';
file_exists($default_lang_file) ? require $default_lang_file : trigger_error("English translation needs to be installed at all time!", E_USER_ERROR); file_exists($default_lang_file) ? require $default_lang_file :
isset($sm_lang) ? $GLOBALS['sm_lang_default'] = $sm_lang : trigger_error("\$sm_lang not found in English translation!", E_USER_ERROR); trigger_error("English translation needs to be installed at all time!", E_USER_ERROR);
isset($sm_lang) ? $GLOBALS['sm_lang_default'] = $sm_lang :
trigger_error("\$sm_lang not found in English translation!", E_USER_ERROR);
unset($sm_lang); unset($sm_lang);
// load translation is the selected language is not English (en_US) // load translation is the selected language is not English (en_US)
if ($lang != "en_US") { if ($lang != "en_US") {
$lang_file = PSM_PATH_LANG . $lang . '.lang.php'; $lang_file = PSM_PATH_LANG . $lang . '.lang.php';
file_exists($lang_file) ? require $lang_file : trigger_error("Translation file could not be found! Default language will be used.", E_USER_WARNING); file_exists($lang_file) ? require $lang_file :
trigger_error("Translation file could not be found! Default language will be used.", E_USER_WARNING);
isset($sm_lang) ? $GLOBALS['sm_lang'] = $sm_lang : trigger_error("\$sm_lang not found in translation file! Default language will be used.", E_USER_WARNING); isset($sm_lang) ? $GLOBALS['sm_lang'] = $sm_lang :
isset($sm_lang['locale']) ? setlocale(LC_TIME, $sm_lang['locale']) : trigger_error("locale could not ben found in translation file.", E_USER_WARNING); trigger_error("\$sm_lang not found in translation file! Default language will be used.", E_USER_WARNING);
isset($sm_lang['locale']) ? setlocale(LC_TIME, $sm_lang['locale']) :
trigger_error("locale could not ben found in translation file.", E_USER_WARNING);
} }
} }
@ -99,7 +109,8 @@ function psm_load_lang($lang) {
* @return array * @return array
* @see psm_load_lang() * @see psm_load_lang()
*/ */
function psm_get_langs() { function psm_get_langs()
{
$fn_ext = '.lang.php'; $fn_ext = '.lang.php';
$lang_files = glob(PSM_PATH_LANG . '*' . $fn_ext); $lang_files = glob(PSM_PATH_LANG . '*' . $fn_ext);
$langs = array(); $langs = array();
@ -127,7 +138,8 @@ function psm_get_langs() {
* *
* @return array * @return array
*/ */
function psm_get_sms_gateways() { function psm_get_sms_gateways()
{
$sms_gateway_files = glob(PSM_PATH_SMS_GATEWAY . '*.php'); $sms_gateway_files = glob(PSM_PATH_SMS_GATEWAY . '*.php');
$sms_gateways = array(); $sms_gateways = array();
@ -151,7 +163,8 @@ function psm_get_sms_gateways() {
* @return string * @return string
* @see psm_load_conf() * @see psm_load_conf()
*/ */
function psm_get_conf($key, $alt = null) { function psm_get_conf($key, $alt = null)
{
if (!isset($GLOBALS['sm_config'])) { if (!isset($GLOBALS['sm_config'])) {
psm_load_conf(); psm_load_conf();
} }
@ -167,7 +180,8 @@ function psm_get_conf($key, $alt = null) {
* @return boolean * @return boolean
* @see psm_get_conf() * @see psm_get_conf()
*/ */
function psm_load_conf() { function psm_load_conf()
{
global $db; global $db;
$GLOBALS['sm_config'] = array(); $GLOBALS['sm_config'] = array();
@ -198,7 +212,8 @@ function psm_load_conf() {
* @param string $key * @param string $key
* @param string $value * @param string $value
*/ */
function psm_update_conf($key, $value) { function psm_update_conf($key, $value)
{
global $db; global $db;
// check if key exists // check if key exists
@ -238,7 +253,8 @@ function psm_update_conf($key, $value) {
* *
* @return int log_id * @return int log_id
*/ */
function psm_add_log($server_id, $type, $message) { function psm_add_log($server_id, $type, $message)
{
global $db; global $db;
return $db->save( return $db->save(
@ -257,7 +273,8 @@ function psm_add_log($server_id, $type, $message) {
* @param $log_id * @param $log_id
* @param $user_id * @param $user_id
*/ */
function psm_add_log_user($log_id, $user_id) { function psm_add_log_user($log_id, $user_id)
{
global $db; global $db;
$db->save( $db->save(
@ -276,7 +293,8 @@ function psm_add_log_user($log_id, $user_id) {
* @param int $status * @param int $status
* @param string $latency * @param string $latency
*/ */
function psm_log_uptime($server_id, $status, $latency) { function psm_log_uptime($server_id, $status, $latency)
{
global $db; global $db;
$db->save( $db->save(
@ -296,15 +314,34 @@ function psm_log_uptime($server_id, $status, $latency) {
* @param DateInterval $interval * @param DateInterval $interval
* @return string * @return string
*/ */
function psm_format_interval(DateInterval $interval) { function psm_format_interval(DateInterval $interval)
{
$result = ""; $result = "";
if ($interval->y) { $result .= $interval->format("%y ").(($interval->y == 1) ? psm_get_lang('system', 'year') : psm_get_lang('system', 'years'))." "; } if ($interval->y) {
if ($interval->m) { $result .= $interval->format("%m ").(($interval->m == 1) ? psm_get_lang('system', 'month') : psm_get_lang('system', 'months'))." "; } $result .= $interval->format("%y ") . (($interval->y == 1) ?
if ($interval->d) { $result .= $interval->format("%d ").(($interval->d == 1) ? psm_get_lang('system', 'day') : psm_get_lang('system', 'days'))." "; } psm_get_lang('system', 'year') : psm_get_lang('system', 'years')) . " ";
if ($interval->h) { $result .= $interval->format("%h ").(($interval->h == 1) ? psm_get_lang('system', 'hour') : psm_get_lang('system', 'hours'))." "; } }
if ($interval->i) { $result .= $interval->format("%i ").(($interval->i == 1) ? psm_get_lang('system', 'minute') : psm_get_lang('system', 'minutes'))." "; } if ($interval->m) {
if ($interval->s) { $result .= $interval->format("%s ").(($interval->s == 1) ? psm_get_lang('system', 'second') : psm_get_lang('system', 'seconds'))." "; } $result .= $interval->format("%m ") . (($interval->m == 1) ?
psm_get_lang('system', 'month') : psm_get_lang('system', 'months')) . " ";
}
if ($interval->d) {
$result .= $interval->format("%d ") . (($interval->d == 1) ?
psm_get_lang('system', 'day') : psm_get_lang('system', 'days')) . " ";
}
if ($interval->h) {
$result .= $interval->format("%h ") . (($interval->h == 1) ?
psm_get_lang('system', 'hour') : psm_get_lang('system', 'hours')) . " ";
}
if ($interval->i) {
$result .= $interval->format("%i ") . (($interval->i == 1) ?
psm_get_lang('system', 'minute') : psm_get_lang('system', 'minutes')) . " ";
}
if ($interval->s) {
$result .= $interval->format("%s ") . (($interval->s == 1) ?
psm_get_lang('system', 'second') : psm_get_lang('system', 'seconds')) . " ";
}
return $result; return $result;
} }
@ -314,11 +351,13 @@ function psm_log_uptime($server_id, $status, $latency) {
* *
* @param boolean|null $status * @param boolean|null $status
* @param string $type is either 'sms', 'email', 'pushover_title', 'pushover_message' or 'telegram_message' * @param string $type is either 'sms', 'email', 'pushover_title', 'pushover_message' or 'telegram_message'
* @param array $vars server information about the server which may be placed in a message: %KEY% will be replaced by your value * @param array $vars server information about the server which may be placed in a message:
* %KEY% will be replaced by your value
* @param boolean $combi parse other message if notifications need to be send combined * @param boolean $combi parse other message if notifications need to be send combined
* @return string parsed message * @return string parsed message
*/ */
function psm_parse_msg($status, $type, $vars, $combi = false) { function psm_parse_msg($status, $type, $vars, $combi = false)
{
if (is_bool($status)) { if (is_bool($status)) {
$status = ($status === true) ? 'on_' : 'off_'; $status = ($status === true) ? 'on_' : 'off_';
} }
@ -351,10 +390,20 @@ function psm_parse_msg($status, $type, $vars, $combi = false) {
* @param string|bool $website_password Password website * @param string|bool $website_password Password website
* @param string|null $request_method Request method like GET, POST etc. * @param string|null $request_method Request method like GET, POST etc.
* @param string|null $post_field POST data * @param string|null $post_field POST data
* @return string cURL result * @return array cURL result
*/ */
function psm_curl_get($href, $header = false, $body = true, $timeout = null, $add_agent = true, $website_username = false, $website_password = false, $request_method = null, $post_field = null) { function psm_curl_get(
$timeout = $timeout == null ? PSM_CURL_TIMEOUT : intval($timeout); $href,
$header = false,
$body = true,
$timeout = null,
$add_agent = true,
$website_username = false,
$website_password = false,
$request_method = null,
$post_field = null
) {
($timeout === null || $timeout > 0) ? PSM_CURL_TIMEOUT : intval($timeout);
$ch = curl_init(); $ch = curl_init();
if (defined('PSM_DEBUG') && PSM_DEBUG === true && psm_is_cli()) { if (defined('PSM_DEBUG') && PSM_DEBUG === true && psm_is_cli()) {
@ -369,6 +418,7 @@ function psm_curl_get($href, $header = false, $body = true, $timeout = null, $ad
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
curl_setopt($ch, CURLOPT_TIMEOUT, $timeout); curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
curl_setopt($ch, CURLOPT_ENCODING, ''); curl_setopt($ch, CURLOPT_ENCODING, '');
curl_setopt($ch, CURLOPT_CERTINFO, 1);
if (!empty($request_method)) { if (!empty($request_method)) {
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $request_method); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $request_method);
@ -378,10 +428,17 @@ function psm_curl_get($href, $header = false, $body = true, $timeout = null, $ad
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_field); curl_setopt($ch, CURLOPT_POSTFIELDS, $post_field);
} }
if ($website_username !== false && $website_password !== false && !empty($website_username) && !empty($website_password)) { if (
$website_username !== false &&
$website_password !== false &&
!empty($website_username) &&
!empty($website_password)
) {
curl_setopt($ch, CURLOPT_USERPWD, $website_username . ":" . $website_password); curl_setopt($ch, CURLOPT_USERPWD, $website_username . ":" . $website_password);
} }
$href = preg_replace('/(.*)(%cachebuster%)/', '$0' . time(), $href);
curl_setopt($ch, CURLOPT_URL, $href); curl_setopt($ch, CURLOPT_URL, $href);
$proxy_url = psm_get_conf('proxy_url', ''); $proxy_url = psm_get_conf('proxy_url', '');
@ -395,16 +452,21 @@ function psm_curl_get($href, $header = false, $body = true, $timeout = null, $ad
} }
if ($add_agent) { if ($add_agent) {
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (compatible; phpservermon/'.PSM_VERSION.'; +https://github.com/phpservermon/phpservermon)'); curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (compatible; phpservermon/' .
PSM_VERSION . '; +https://github.com/phpservermon/phpservermon)');
} }
$result = curl_exec($ch); $result['exec'] = curl_exec($ch);
$result['info'] = curl_getinfo($ch);
curl_close($ch); curl_close($ch);
if (defined('PSM_DEBUG') && PSM_DEBUG === true && psm_is_cli()) { if (defined('PSM_DEBUG') && PSM_DEBUG === true && psm_is_cli()) {
echo PHP_EOL.'==============cURL Result for: '.$href.'==========================================='.PHP_EOL; echo PHP_EOL .
'==============cURL Result for: ' . $href . '===========================================' . PHP_EOL;
print_r($result); print_r($result);
echo PHP_EOL.'==============END cURL Resul for: '.$href.'==========================================='.PHP_EOL; echo PHP_EOL .
'==============END cURL Resul for: ' . $href . '===========================================' . PHP_EOL;
} }
return $result; return $result;
@ -417,13 +479,17 @@ function psm_curl_get($href, $header = false, $body = true, $timeout = null, $ad
* @param string $time * @param string $time
* @return string * @return string
*/ */
function psm_timespan($time) { function psm_timespan($time)
{
if (empty($time) || $time == '0000-00-00 00:00:00') { if (empty($time) || $time == '0000-00-00 00:00:00') {
return psm_get_lang('system', 'never'); return psm_get_lang('system', 'never');
} }
if ($time !== intval($time)) { $time = strtotime($time); } if ($time !== intval($time)) {
$time = strtotime($time);
}
if ($time < strtotime(date('Y-m-d 00:00:00')) - 60 * 60 * 24 * 3) { if ($time < strtotime(date('Y-m-d 00:00:00')) - 60 * 60 * 24 * 3) {
$format = psm_get_lang('system', (date('Y') !== date('Y', $time)) ? 'long_day_format' : 'short_day_format'); $format = psm_get_lang('system', (date('Y') !== date('Y', $time)) ?
'long_day_format' : 'short_day_format');
// Check for Windows to find and replace the %e // Check for Windows to find and replace the %e
// modifier correctly // modifier correctly
if (strtoupper(substr(PHP_OS, 0, 3)) == 'WIN') { if (strtoupper(substr(PHP_OS, 0, 3)) == 'WIN') {
@ -433,14 +499,25 @@ function psm_timespan($time) {
} }
$d = time() - $time; $d = time() - $time;
if ($d >= 60 * 60 * 24) { if ($d >= 60 * 60 * 24) {
$format = psm_get_lang('system', (date('l', time() - 60 * 60 * 24) == date('l', $time)) ? 'yesterday_format' : 'other_day_format'); $format = psm_get_lang('system', (date('l', time() - 60 * 60 * 24) == date('l', $time)) ?
'yesterday_format' : 'other_day_format');
return strftime($format, $time); return strftime($format, $time);
} }
if ($d >= 60 * 60 * 2) { return sprintf(psm_get_lang('system', 'hours_ago'), intval($d / (60 * 60))); } if ($d >= 60 * 60 * 2) {
if ($d >= 60 * 60) { return psm_get_lang('system', 'an_hour_ago'); } return sprintf(psm_get_lang('system', 'hours_ago'), intval($d / (60 * 60)));
if ($d >= 60 * 2) { return sprintf(psm_get_lang('system', 'minutes_ago'), intval($d / 60)); } }
if ($d >= 60) { return psm_get_lang('system', 'a_minute_ago'); } if ($d >= 60 * 60) {
if ($d >= 2) { return sprintf(psm_get_lang('system', 'seconds_ago'), intval($d)); } return psm_get_lang('system', 'an_hour_ago');
}
if ($d >= 60 * 2) {
return sprintf(psm_get_lang('system', 'minutes_ago'), intval($d / 60));
}
if ($d >= 60) {
return psm_get_lang('system', 'a_minute_ago');
}
if ($d >= 2) {
return sprintf(psm_get_lang('system', 'seconds_ago'), intval($d));
}
return psm_get_lang('system', 'a_second_ago'); return psm_get_lang('system', 'a_second_ago');
} }
@ -450,7 +527,8 @@ function psm_timespan($time) {
* @param string $time * @param string $time
* @return string * @return string
*/ */
function psm_date($time) { function psm_date($time)
{
if (empty($time) || $time == '0000-00-00 00:00:00') { if (empty($time) || $time == '0000-00-00 00:00:00') {
return psm_get_lang('system', 'never'); return psm_get_lang('system', 'never');
} }
@ -463,7 +541,8 @@ function psm_date($time) {
* Will only check for new version if user turned updates on in config. * Will only check for new version if user turned updates on in config.
* @return boolean * @return boolean
*/ */
function psm_update_available() { function psm_update_available()
{
if (!psm_get_conf('show_update')) { if (!psm_get_conf('show_update')) {
// user does not want updates, fair enough. // user does not want updates, fair enough.
return false; return false;
@ -476,22 +555,31 @@ function psm_update_available() {
// update last check date // update last check date
psm_update_conf('last_update_check', time()); psm_update_conf('last_update_check', time());
$latest = psm_curl_get(PSM_UPDATE_URL); $latest = psm_curl_get(PSM_UPDATE_URL);
// extract latest version from Github. if ($latest['info'] === false || (int)$latest['info']['http_code'] >= 300) {
preg_match('/"tag_name":"[v](([\d][.][\d][.][\d])(-?\w*))"/', $latest, $latest); // error
// add latest version to database
if ($latest[2] !== false && strlen($latest[2]) < 15) {
psm_update_conf('version_update_check', $latest[2]);
}
} else {
$latest[2] = psm_get_conf('version_update_check');
}
if ($latest[2] !== false) {
$current = psm_get_conf('version');
return version_compare($latest[2], $current, '>');
} else {
return false; return false;
} }
// extract latest version from Github.
$githubInfo = json_decode($latest['exec']);
if (property_exists($githubInfo, 'tag_name') === false) {
// version not found
return false;
}
$tagName = $githubInfo->tag_name;
$latestVersion = str_replace('v', '', $tagName);
// check from old version ... maybe has reason but I don't think so ...
if (empty($latestVersion) === true || strlen($latestVersion) >= 15) {
// weird version
return false;
}
// add latest version to database
psm_update_conf('version_update_check', $latestVersion);
} else {
$latestVersion = psm_get_conf('version_update_check');
}
$current = psm_get_conf('version');
return version_compare($latestVersion, $current, '>');
} }
/** /**
@ -502,7 +590,8 @@ function psm_update_available() {
* @param string $from_email * @param string $from_email
* @return \PHPMailer\PHPMailer\PHPMailer * @return \PHPMailer\PHPMailer\PHPMailer
*/ */
function psm_build_mail($from_name = null, $from_email = null) { function psm_build_mail($from_name = null, $from_email = null)
{
$phpmailer = new \PHPMailer\PHPMailer\PHPMailer(); $phpmailer = new \PHPMailer\PHPMailer\PHPMailer();
$phpmailer->Encoding = "base64"; $phpmailer->Encoding = "base64";
$phpmailer->CharSet = 'UTF-8'; $phpmailer->CharSet = 'UTF-8';
@ -515,7 +604,10 @@ function psm_build_mail($from_name = null, $from_email = null) {
$phpmailer->SMTPSecure = psm_get_conf('email_smtp_security'); $phpmailer->SMTPSecure = psm_get_conf('email_smtp_security');
$smtp_user = psm_get_conf('email_smtp_username'); $smtp_user = psm_get_conf('email_smtp_username');
$smtp_pass = psm_get_conf('email_smtp_password'); $smtp_pass = psm_password_decrypt(
psm_get_conf('password_encrypt_key'),
psm_get_conf('email_smtp_password')
);
if ($smtp_user != '' && $smtp_pass != '') { if ($smtp_user != '' && $smtp_pass != '') {
$phpmailer->SMTPAuth = true; $phpmailer->SMTPAuth = true;
@ -541,7 +633,8 @@ function psm_build_mail($from_name = null, $from_email = null) {
* *
* @return \Pushover * @return \Pushover
*/ */
function psm_build_pushover() { function psm_build_pushover()
{
$pushover = new \Pushover(); $pushover = new \Pushover();
$pushover->setToken(psm_get_conf('pushover_api_token')); $pushover->setToken(psm_get_conf('pushover_api_token'));
@ -552,19 +645,75 @@ function psm_build_pushover() {
* *
* @return \Telegram * @return \Telegram
*/ */
function psm_build_telegram() { function psm_build_telegram()
{
$telegram = new \Telegram(); $telegram = new \Telegram();
$telegram->setToken(psm_get_conf('telegram_api_token')); $telegram->setToken(psm_get_conf('telegram_api_token'));
return $telegram; return $telegram;
} }
/**
* Send message via XMPP.
*
* @param string $host
* @param string $username
* @param string $password
* @param array $receivers
* @param string $message
* @param int|null $port
* @param string|null $domain
*/
function psm_jabber_send_message($host, $username, $password, $receivers, $message, $port = null, $domain = null)
{
$options = [
'jid' => $username, // incl. gmail.com
'pass' => $password,
'domain' => $domain, // gmail.com or null
'host' => $host, // talk.google.com
'port' => $port, // talk.google.com needs to have 5223 ... 5222 - CN problem - gmail.com vs talk.google.com
'log_path' => __DIR__ . '/../../logs/jaxl.log', // own log
// force tls
'force_tls' => PSM_JABBER_FORCE_TLS,
// (required) perform X-OAUTH2
'auth_type' => PSM_JABBER_AUTH_TYPE, //'X-OAUTH2', // auth failure with this option :( so just PLAIN ...
'log_level' => PSM_JABBER_DEBUG_LEVEL
];
try {
$client = new JAXL($options);
// Add Callbacks
$client->add_cb('on_auth_success', function () use ($client, $receivers, $message) {
JAXLLogger::info('got on_auth_success cb');
foreach ($receivers as $receiver) {
$client->send_chat_msg($receiver, $message);
}
$client->send_end_stream();
});
$client->add_cb('on_auth_failure', function ($reason) use ($client) {
$client->send_end_stream();
JAXLLogger::info('got on_auth_failure cb with reason: ' . $reason);
});
$client->add_cb('on_disconnect', function () use ($client) {
JAXLLogger::info('got on_disconnect cb');
});
$client->start();
} catch (Exception $ex) {
JAXLLogger::error('Exception: ' . $ex->getMessage());
}
}
/** /**
* Prepare a new SMS util. * Prepare a new SMS util.
* *
* @return \psm\Txtmsg\TxtmsgInterface * @return \psm\Txtmsg\TxtmsgInterface
*/ */
function psm_build_sms() { function psm_build_sms()
{
$sms = null; $sms = null;
// open the right class // open the right class
@ -648,11 +797,13 @@ function psm_build_sms() {
* @param boolean $htmlentities use entities in url? * @param boolean $htmlentities use entities in url?
* @return string * @return string
*/ */
function psm_build_url($params = array(), $urlencode = true, $htmlentities = true) { function psm_build_url($params = array(), $urlencode = true, $htmlentities = true)
{
if (defined('PSM_BASE_URL') && PSM_BASE_URL !== null) { if (defined('PSM_BASE_URL') && PSM_BASE_URL !== null) {
$url = PSM_BASE_URL; $url = PSM_BASE_URL;
} else { } else {
$url = ((isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] != 'off') || $_SERVER['SERVER_PORT'] == 443 ? 'https' : 'http').'://'.$_SERVER['HTTP_HOST']; $url = ((isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] != 'off') ||
$_SERVER['SERVER_PORT'] == 443 ? 'https' : 'http') . '://' . $_SERVER['HTTP_HOST'];
// on Windows, dirname() adds both back- and forward slashes (http://php.net/dirname). // on Windows, dirname() adds both back- and forward slashes (http://php.net/dirname).
// for urls, we only want the forward slashes. // for urls, we only want the forward slashes.
$url .= dirname($_SERVER['SCRIPT_NAME']); $url .= dirname($_SERVER['SCRIPT_NAME']);
@ -685,7 +836,8 @@ function psm_build_url($params = array(), $urlencode = true, $htmlentities = tru
* @param string $alt * @param string $alt
* @return mixed * @return mixed
*/ */
function psm_GET($key, $alt = null) { function psm_GET($key, $alt = null)
{
if (isset($_GET[$key])) { if (isset($_GET[$key])) {
return $_GET[$key]; return $_GET[$key];
} else { } else {
@ -699,7 +851,8 @@ function psm_GET($key, $alt = null) {
* @param string|array|bool $alt * @param string|array|bool $alt
* @return mixed * @return mixed
*/ */
function psm_POST($key, $alt = null) { function psm_POST($key, $alt = null)
{
if (isset($_POST[$key])) { if (isset($_POST[$key])) {
return $_POST[$key]; return $_POST[$key];
} else { } else {
@ -713,7 +866,8 @@ function psm_POST($key, $alt = null) {
* Note, php_sapi cannot be used because cgi-fcgi returns both for web and cli. * Note, php_sapi cannot be used because cgi-fcgi returns both for web and cli.
* @return boolean * @return boolean
*/ */
function psm_is_cli() { function psm_is_cli()
{
return (!isset($_SERVER['SERVER_SOFTWARE']) || php_sapi_name() == 'cli'); return (!isset($_SERVER['SERVER_SOFTWARE']) || php_sapi_name() == 'cli');
} }
@ -728,7 +882,8 @@ function psm_is_cli() {
* *
* @param mixed $arr * @param mixed $arr
*/ */
function pre($arr = null) { function pre($arr = null)
{
echo "<pre>"; echo "<pre>";
if ($arr === null) { if ($arr === null) {
debug_print_backtrace(); debug_print_backtrace();
@ -740,7 +895,8 @@ function pre($arr = null) {
/** /**
* Send headers to the browser to avoid caching * Send headers to the browser to avoid caching
*/ */
function psm_no_cache() { function psm_no_cache()
{
header("Expires: Mon, 20 Dec 1998 01:00:00 GMT"); header("Expires: Mon, 20 Dec 1998 01:00:00 GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: no-cache, must-revalidate"); header("Cache-Control: no-cache, must-revalidate");
@ -755,7 +911,6 @@ function psm_no_cache() {
* @return string * @return string
* @author Pavel Laupe Dvorak <pavel@pavel-dvorak.cz> * @author Pavel Laupe Dvorak <pavel@pavel-dvorak.cz>
*/ */
// TODO change to working function
function psm_password_encrypt($key, $password) function psm_password_encrypt($key, $password)
{ {
if (empty($password)) { if (empty($password)) {
@ -766,19 +921,17 @@ function psm_password_encrypt($key, $password)
throw new \InvalidArgumentException('invalid_encryption_key'); throw new \InvalidArgumentException('invalid_encryption_key');
} }
// TODO rewrite // using open ssl
$iv = mcrypt_create_iv( $cipher = "AES-256-CBC";
mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC), $ivlen = openssl_cipher_iv_length($cipher);
MCRYPT_DEV_URANDOM $iv = openssl_random_pseudo_bytes($ivlen);
);
$encrypted = base64_encode( $encrypted = base64_encode(
$iv . $iv .
mcrypt_encrypt( openssl_encrypt(
MCRYPT_RIJNDAEL_128,
hash('sha256', $key, true),
$password, $password,
MCRYPT_MODE_CBC, $cipher,
hash('sha256', $key, true),
OPENSSL_RAW_DATA, // OPENSSL_ZERO_PADDING OPENSSL_RAW_DATA
$iv $iv
) )
); );
@ -804,18 +957,17 @@ function psm_password_decrypt($key, $encryptedString)
throw new \InvalidArgumentException('invalid_encryption_key'); throw new \InvalidArgumentException('invalid_encryption_key');
} }
// using open ssl
$data = base64_decode($encryptedString); $data = base64_decode($encryptedString);
$iv = substr($data, 0, mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC)); $cipher = "AES-256-CBC";
$ivlen = openssl_cipher_iv_length($cipher);
$decrypted = rtrim( $iv = substr($data, 0, $ivlen);
mcrypt_decrypt( $decrypted = openssl_decrypt(
MCRYPT_RIJNDAEL_128, substr($data, $ivlen),
$cipher,
hash('sha256', $key, true), hash('sha256', $key, true),
substr($data, mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC)), OPENSSL_RAW_DATA,
MCRYPT_MODE_CBC,
$iv $iv
),
"\0"
); );
return $decrypted; return $decrypted;
@ -827,30 +979,34 @@ function psm_password_decrypt($key, $encryptedString)
* @return string * @return string
* @author Tim Zandbergen <tim@xervion.nl> * @author Tim Zandbergen <tim@xervion.nl>
*/ */
class telegram class Telegram
{ {
private $_token; private $token;
private $_user; private $user;
private $_message; private $message;
private $_url; private $url;
public function setToken($token) { public function setToken($token)
$this->_token = (string) $token; {
$this->token = (string) $token;
} }
public function setUser($user) { public function setUser($user)
$this->_user = (string) $user; {
$this->user = (string) $user;
} }
public function setMessage($message) { public function setMessage($message)
{
$message = str_replace("<ul>", "", $message); $message = str_replace("<ul>", "", $message);
$message = str_replace("</ul>", "\n", $message); $message = str_replace("</ul>", "\n", $message);
$message = str_replace("<li>", "- ", $message); $message = str_replace("<li>", "- ", $message);
$message = str_replace("</li>", "\n", $message); $message = str_replace("</li>", "\n", $message);
$message = str_replace("<br>", "\n", $message); $message = str_replace("<br>", "\n", $message);
$message = str_replace("<br/>", "\n", $message); $message = str_replace("<br/>", "\n", $message);
$this->_message = (string) $message; $this->message = (string) $message;
} }
public function sendurl() { public function sendurl()
$con = curl_init($this->_url); {
$con = curl_init($this->url);
curl_setopt($con, CURLOPT_RETURNTRANSFER, true); curl_setopt($con, CURLOPT_RETURNTRANSFER, true);
curl_setopt($con, CURLOPT_CONNECTTIMEOUT, 5); curl_setopt($con, CURLOPT_CONNECTTIMEOUT, 5);
curl_setopt($con, CURLOPT_TIMEOUT, 60); curl_setopt($con, CURLOPT_TIMEOUT, 60);
@ -858,19 +1014,22 @@ class telegram
$response = json_decode($response, true); $response = json_decode($response, true);
return $response; return $response;
} }
public function send() { public function send()
if (!Empty($this->_token) && !Empty($this->_user) && !Empty($this->_message)) { {
$this->_url = 'https://api.telegram.org/bot'.urlencode($this->_token). if (!empty($this->token) && !empty($this->user) && !empty($this->message)) {
'/sendMessage?chat_id='.urlencode($this->_user).'&text='. $this->url = 'https://api.telegram.org/bot' . urlencode($this->token) .
urlencode($this->_message).'&parse_mode=HTML'; '/sendMessage?chat_id=' . urlencode($this->user) . '&text=' .
urlencode($this->message) . '&parse_mode=HTML&disable_web_page_preview=True';
} }
return $this->sendurl(); return $this->sendurl();
} }
// Get the bots username // Get the bots username
public function getBotUsername() { public function getBotUsername()
if (!Empty($this->_token)) { {
$this->_url = 'https://api.telegram.org/bot'.urlencode($this->_token).'/getMe'; if (!empty($this->token)) {
$this->url = 'https://api.telegram.org/bot' . urlencode($this->token) . '/getMe';
} }
return $this->sendurl(); return $this->sendurl();
} }
} }
}

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,7 +36,6 @@
*/ */
if (!defined('PASSWORD_DEFAULT')) { if (!defined('PASSWORD_DEFAULT')) {
define('PASSWORD_BCRYPT', 1); define('PASSWORD_BCRYPT', 1);
define('PASSWORD_DEFAULT', PASSWORD_BCRYPT); define('PASSWORD_DEFAULT', PASSWORD_BCRYPT);
@ -48,7 +48,8 @@ if (!defined('PASSWORD_DEFAULT')) {
* *
* @return string|false The hashed password, or false on error. * @return string|false The hashed password, or false on error.
*/ */
function password_hash($password, $algo, array $options = array()) { function password_hash($password, $algo, array $options = array())
{
if (!function_exists('crypt')) { if (!function_exists('crypt')) {
trigger_error("Crypt must be loaded for password_hash to function", E_USER_WARNING); trigger_error("Crypt must be loaded for password_hash to function", E_USER_WARNING);
return null; return null;
@ -58,7 +59,8 @@ if (!defined('PASSWORD_DEFAULT')) {
return null; return null;
} }
if (!is_int($algo)) { if (!is_int($algo)) {
trigger_error("password_hash() expects parameter 2 to be long, ".gettype($algo)." given", E_USER_WARNING); trigger_error("password_hash() expects parameter 2 to be long, " . gettype($algo) .
" given", E_USER_WARNING);
return null; return null;
} }
switch ($algo) { switch ($algo) {
@ -68,7 +70,10 @@ if (!defined('PASSWORD_DEFAULT')) {
if (isset($options['cost'])) { if (isset($options['cost'])) {
$cost = $options['cost']; $cost = $options['cost'];
if ($cost < 4 || $cost > 31) { if ($cost < 4 || $cost > 31) {
trigger_error(sprintf("password_hash(): Invalid bcrypt cost parameter specified: %d", $cost), E_USER_WARNING); trigger_error(
sprintf("password_hash(): Invalid bcrypt cost parameter specified: %d", $cost),
E_USER_WARNING
);
return null; return null;
} }
} }
@ -79,7 +84,10 @@ if (!defined('PASSWORD_DEFAULT')) {
$hash_format = sprintf("$2y$%02d$", $cost); $hash_format = sprintf("$2y$%02d$", $cost);
break; break;
default: default:
trigger_error(sprintf("password_hash(): Unknown password hashing algorithm: %s", $algo), E_USER_WARNING); trigger_error(
sprintf("password_hash(): Unknown password hashing algorithm: %s", $algo),
E_USER_WARNING
);
return null; return null;
} }
if (isset($options['salt'])) { if (isset($options['salt'])) {
@ -96,6 +104,7 @@ if (!defined('PASSWORD_DEFAULT')) {
$salt = (string) $options['salt']; $salt = (string) $options['salt'];
break; break;
} }
// no break
case 'array': case 'array':
case 'resource': case 'resource':
default: default:
@ -103,7 +112,14 @@ if (!defined('PASSWORD_DEFAULT')) {
return null; return null;
} }
if (strlen($salt) < $required_salt_len) { 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); trigger_error(
sprintf(
"password_hash(): Provided salt is too short: %d expecting %d",
strlen($salt),
$required_salt_len
),
E_USER_WARNING
);
return null; return null;
} elseif (0 == preg_match('#^[a-zA-Z0-9./]+$#D', $salt)) { } elseif (0 == preg_match('#^[a-zA-Z0-9./]+$#D', $salt)) {
$salt = str_replace('+', '.', base64_encode($salt)); $salt = str_replace('+', '.', base64_encode($salt));
@ -176,7 +192,8 @@ if (!defined('PASSWORD_DEFAULT')) {
* *
* @return array The array of information about the hash. * @return array The array of information about the hash.
*/ */
function password_get_info($hash) { function password_get_info($hash)
{
$return = array( $return = array(
'algo' => 0, 'algo' => 0,
'algoName' => 'unknown', 'algoName' => 'unknown',
@ -202,7 +219,8 @@ if (!defined('PASSWORD_DEFAULT')) {
* *
* @return boolean True if the password needs to be rehashed. * @return boolean True if the password needs to be rehashed.
*/ */
function password_needs_rehash($hash, $algo, array $options = array()) { function password_needs_rehash($hash, $algo, array $options = array())
{
$info = password_get_info($hash); $info = password_get_info($hash);
if ($info['algo'] != $algo) { if ($info['algo'] != $algo) {
return true; return true;
@ -226,7 +244,8 @@ if (!defined('PASSWORD_DEFAULT')) {
* *
* @return boolean If the password matches the hash * @return boolean If the password matches the hash
*/ */
function password_verify($password, $hash) { function password_verify($password, $hash)
{
if (!function_exists('crypt')) { if (!function_exists('crypt')) {
trigger_error("Crypt must be loaded for password_verify to function", E_USER_WARNING); trigger_error("Crypt must be loaded for password_verify to function", E_USER_WARNING);
return false; return false;

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.
@ -129,3 +130,15 @@ if (!defined('PSM_MODULE_DEFAULT')) {
*/ */
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.
@ -27,7 +28,11 @@
$sm_lang = array( $sm_lang = array(
'name' => 'Български - Bulgarian', 'name' => 'Български - Bulgarian',
'locale' => array('bg_BG.UTF-8', 'bg_BG', 'bulgarian'), 'locale' => array(
'0' => 'bg_BG.UTF-8',
'1' => 'bg_BG',
'2' => 'bulgarian',
),
'locale_tag' => 'bg', 'locale_tag' => 'bg',
'locale_dir' => 'ltr', 'locale_dir' => 'ltr',
'system' => array( 'system' => array(
@ -43,12 +48,13 @@ $sm_lang = array(
'no' => 'Не', 'no' => 'Не',
'insert' => 'Добавяне', 'insert' => 'Добавяне',
'add_new' => 'Добави нов', 'add_new' => 'Добави нов',
'update_available' => 'Налична е нова версия: ({version}). Може да я свалите от <a href="https://github.com/phpservermon/phpservermon/releases/latest" target="_blank" rel="noopener">тук</a>.', 'update_available' => 'Налична е нова версия: ({version}). Може да я свалите
от <a href="https://github.com/phpservermon/phpservermon/releases/latest"
target="_blank" rel="noopener">тук</a>.',
'back_to_top' => 'Нагоре', 'back_to_top' => 'Нагоре',
'go_back' => 'Назад', 'go_back' => 'Назад',
'ok' => 'Ок', 'ok' => 'Ок',
'cancel' => 'Отказ', 'cancel' => 'Отказ',
// date/time са във формат според параметъра strftime PHP функцията http://php.net/manual/function.strftime.php
'short_day_format' => '%B %e', 'short_day_format' => '%B %e',
'long_day_format' => '%B %e, %Y', 'long_day_format' => '%B %e, %Y',
'yesterday_format' => 'Вчера в %k:%M', 'yesterday_format' => 'Вчера в %k:%M',
@ -60,18 +66,6 @@ $sm_lang = array(
'a_minute_ago' => 'преди минута', 'a_minute_ago' => 'преди минута',
'seconds_ago' => 'преди %d секунди', 'seconds_ago' => 'преди %d секунди',
'a_second_ago' => 'преди секунда', 'a_second_ago' => 'преди секунда',
'year' => 'year',
'years' => 'years',
'month' => 'month',
'months' => 'months',
'day' => 'day',
'days' => 'days',
'hour' => 'hour',
'hours' => 'hours',
'minute' => 'minute',
'minutes' => 'minutes',
'second' => 'second',
'seconds' => 'seconds',
), ),
'menu' => array( 'menu' => array(
'config' => 'Настройки', 'config' => 'Настройки',
@ -88,29 +82,46 @@ $sm_lang = array(
'user_name' => 'Потребител', 'user_name' => 'Потребител',
'password' => 'Парола', 'password' => 'Парола',
'password_repeat' => 'Повторете паролата', 'password_repeat' => 'Повторете паролата',
'password_leave_blank' => 'Оставете празно, за да не бъде променена паролата', 'password_leave_blank' => 'Оставете празно, за да не бъде променена
паролата',
'level' => 'Ниво на достъп', 'level' => 'Ниво на достъп',
'level_10' => 'Администратор', 'level_10' => 'Администратор',
'level_20' => 'Потребител', 'level_20' => 'Потребител',
'level_description' => '<b>Администраторите</b> имат пълен достъп: могат да управляват сървърите, потребителите и да редактират глобалните настройки.<br><b>Потребителите</b> могат само да виждат статуса на сървърите и да обнояват информацията за даден сървър, за който им е разрешен достъп.', '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 е услуга, която улеснява получаването на
известия в реално време. Посетете <a
href="https://pushover.net/" target="_blank">техния сайт</a> за
повече информация.',
'pushover_key' => 'Pushover Ключ', 'pushover_key' => 'Pushover Ключ',
'pushover_device' => 'Pushover Устройство', 'pushover_device' => 'Pushover Устройство',
'pushover_device_description' => 'Име на устройство, което да получава съобщение. Оставете празно, за изпращане до всички устройства.', 'pushover_device_description' => 'Име на устройство, което да получава
съобщение. Оставете празно, за изпращане
до всички устройства.',
'delete_title' => 'Изтриване на потребител', 'delete_title' => 'Изтриване на потребител',
'delete_message' => 'Сигурни ли сте, че искате да изтриете потребител \'%1\'?', 'delete_message' => 'Сигурни ли сте, че искате да изтриете потребител
\'%1\'?',
'deleted' => 'Потребителят е изтрит успешно.', 'deleted' => 'Потребителят е изтрит успешно.',
'updated' => 'Информацията за потребителя е обновена.', 'updated' => 'Информацията за потребителя е обновена.',
'inserted' => 'Потребителят е добавен.', 'inserted' => 'Потребителят е добавен.',
'profile' => 'Профил', 'profile' => 'Профил',
'profile_updated' => 'Профилът е обновен успешно', 'profile_updated' => 'Профилът е обновен успешно',
'error_user_name_bad_length' => 'Потребителското име трябва да съдържа между 2 и 64 символа', 'error_user_name_bad_length' => 'Потребителското име трябва да съдържа
'error_user_name_invalid' => 'Може да съдържа само латински букви (a-z, A-Z), цифри (0-9), точка (.) и долна черта (_).', между 2 и 64 символа',
'error_user_name_exists' => 'Вече съществува акаунт с това потребителско име.', 'error_user_name_invalid' => 'Може да съдържа само латински букви (a-z, A-Z),
'error_user_email_bad_length' => 'Имейл адреса трябва да съдържа между 5 и 255 символа.', цифри (0-9), точка (.) и долна черта (_).',
'error_user_name_exists' => 'Вече съществува акаунт с това потребителско
име.',
'error_user_email_bad_length' => 'Имейл адреса трябва да съдържа между 5 и 255
символа.',
'error_user_email_invalid' => 'Въведения имейл адрес е грешен.', 'error_user_email_invalid' => 'Въведения имейл адрес е грешен.',
'error_user_level_invalid' => 'Избраното ниво на достъп е грешно.', 'error_user_level_invalid' => 'Избраното ниво на достъп е грешно.',
'error_user_no_match' => 'Потребителят не може да бъде намерен.', 'error_user_no_match' => 'Потребителят не може да бъде намерен.',
@ -127,7 +138,8 @@ $sm_lang = array(
'no_logs' => 'Няма налични логове', 'no_logs' => 'Няма налични логове',
'clear' => 'Изчистване на дневника', 'clear' => 'Изчистване на дневника',
'delete_title' => 'Изтриване на дневника', 'delete_title' => 'Изтриване на дневника',
'delete_message' => 'Наистина ли искате да изтриете <b>всички</b> дневници?', 'delete_message' => 'Наистина ли искате да изтриете <b>всички</b>
дневници?',
), ),
'servers' => array( 'servers' => array(
'server' => 'Сървър', 'server' => 'Сървър',
@ -135,13 +147,17 @@ $sm_lang = array(
'label' => 'Име', 'label' => 'Име',
'domain' => 'Хост', 'domain' => 'Хост',
'timeout' => 'Изчакване', 'timeout' => 'Изчакване',
'timeout_description' => 'Брой секунди, който да изчака отговор от сървъра', 'timeout_description' => 'Брой секунди, който да изчака отговор от
сървъра',
'port' => 'Порт', 'port' => 'Порт',
'type' => 'Тип', 'type' => 'Тип',
'type_website' => 'Сайт', 'type_website' => 'Сайт',
'type_service' => 'Услуга', 'type_service' => 'Услуга',
'pattern' => 'Търсене на стринг/образец', 'pattern' => 'Търсене на стринг/образец',
'pattern_description' => 'Ако този текст не е намерен в интернет страницата (когато имате добавен сайт), той ще бъде маркиран като Офлайн. Регулярните изрази са разрешени.', 'pattern_description' => 'Ако този текст не е намерен в интернет
страницата (когато имате добавен сайт), той ще
бъде маркиран като Офлайн. Регулярните изрази
са разрешени.',
'last_check' => 'Последна проверка', 'last_check' => 'Последна проверка',
'last_online' => 'Последно на линия', 'last_online' => 'Последно на линия',
'last_offline' => 'Last offline', 'last_offline' => 'Last offline',
@ -169,10 +185,11 @@ $sm_lang = array(
'day' => 'Ден', 'day' => 'Ден',
'hour' => 'Час', 'hour' => 'Час',
'warning_threshold' => 'Предупредителен праг', 'warning_threshold' => 'Предупредителен праг',
'warning_threshold_description' => 'Брой неуспешни проверки, преди сървъра или сайта да бъдат маркирани като Офлайн.', 'warning_threshold_description' => 'Брой неуспешни проверки, преди сървъра
или сайта да бъдат маркирани като
Офлайн.',
'chart_last_week' => 'Последната седмица', 'chart_last_week' => 'Последната седмица',
'chart_history' => 'История', 'chart_history' => 'История',
// Charts формат на датата според jqPlot 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',
@ -182,11 +199,15 @@ $sm_lang = array(
'warning_notifications_disabled_pushover' => 'Pushover известията са изключени.', 'warning_notifications_disabled_pushover' => 'Pushover известията са изключени.',
'error_server_no_match' => 'Сървърът не е намерен.', 'error_server_no_match' => 'Сървърът не е намерен.',
'error_server_label_bad_length' => 'Името трябва да е между 1 и 255 символа.', 'error_server_label_bad_length' => 'Името трябва да е между 1 и 255 символа.',
'error_server_ip_bad_length' => 'Хоста/IP адреса трябва да е между 1 и 255 символа.', 'error_server_ip_bad_length' => 'Хоста/IP адреса трябва да е между 1 и 255
символа.',
'error_server_ip_bad_service' => 'IP адреса е невалиден.', 'error_server_ip_bad_service' => 'IP адреса е невалиден.',
'error_server_ip_bad_website' => 'Сайта е невалиден.', 'error_server_ip_bad_website' => 'Сайта е невалиден.',
'error_server_type_invalid' => 'Избраният тип сървър е невалиден.', 'error_server_type_invalid' => 'Избраният тип сървър е невалиден.',
'error_server_warning_threshold_invalid' => 'Броя неуспешни проверки, преди сървъра или сайта да бъдат маркирани като Офлайн трябва да е цифра по-голяма от 0.', 'error_server_warning_threshold_invalid' => 'Броя неуспешни проверки, преди
сървъра или сайта да бъдат
маркирани като Офлайн трябва да е
цифра по-голяма от 0.',
), ),
'config' => array( 'config' => array(
'general' => 'Основни настройки', 'general' => 'Основни настройки',
@ -209,26 +230,43 @@ $sm_lang = array(
'sms_gateway_password' => 'Парола', 'sms_gateway_password' => 'Парола',
'sms_from' => 'Номер на изпращача', 'sms_from' => 'Номер на изпращача',
'pushover_status' => 'Позволява изпращането на Pushover съобщения', 'pushover_status' => 'Позволява изпращането на Pushover съобщения',
'pushover_description' => 'Pushover е услуга, която улеснява получаването на известия в реално време. Посетете <a href="https://pushover.net/">техния сайт</a> за повече информация.', 'pushover_description' => 'Pushover е услуга, която улеснява получаването на
известия в реално време. Посетете <a
href="https://pushover.net/" target="_blank">техния сайт</a> за
повече информация.',
'pushover_clone_app' => 'Кликнете тук за да създаване на вашият Pushover App', 'pushover_clone_app' => 'Кликнете тук за да създаване на вашият Pushover App',
'pushover_api_token' => 'Pushover App API Token', 'pushover_api_token' => 'Pushover App API Token',
'pushover_api_token_description' => 'Преди да използвате Pushover, трябва да <a href="%1$s" target="_blank" rel="noopener">регистрирате свой App</a> в техния сайт и въведете вашия App API Token тук.', 'pushover_api_token_description' => 'Преди да използвате Pushover, трябва да <a
href="%1$s" target="_blank" rel="noopener">регистрирате
свой App</a> в техния сайт и въведете вашия
App API Token тук.',
'alert_type' => 'Изберете кога желаете да получавате известия', 'alert_type' => 'Изберете кога желаете да получавате известия',
'alert_type_description' => '<b>Промяна на сатуса:</b><br>'. 'alert_type_description' => '<b>Промяна на сатуса:</b><br>Ще получавате
'Ще получавате известие когато има промяна със връзката на даден някой от описаните сървър или сайт. От Онлайн -> Офлайн и от Офлайн -> Онлайн.<br>'. известие когато има промяна със връзката на
'<br><b>Офлайн</b><br>'. даден някой от описаните сървър или сайт. От
'Ще получите известие когато връзката до сървъра е изгубена за *ПЪРВИ ПЪТ*. Например, '. Онлайн -> Офлайн и от Офлайн ->
'вашия cron скрипт проверява всеки 15 минути и връзката до сървъра е изгубена в 1 часа през нощта и не работи до 6 часа сутринта '. Онлайн.<br><br><b>Офлайн</b><br>Ще получите
'Вие ще получите едно известие в 1 часа за това<br>'. известие когато връзката до сървъра е
'<br><b>Винаги:</b><br> '. изгубена за *ПЪРВИ ПЪТ*. Например, вашия cron
'Ще получавате известие при всяка проверка на Вашия крон скрипт дори когато връзката до даден сървър или сайт е била прекъсната в продължение на часове.', скрипт проверява всеки 15 минути и връзката
до сървъра е изгубена в 1 часа през нощта и не
работи до 6 часа сутринта Вие ще получите
едно известие в 1 часа за
това<br><br><b>Винаги:</b><br> Ще получавате
известие при всяка проверка на Вашия крон
скрипт дори когато връзката до даден сървър
или сайт е била прекъсната в продължение на
часове.',
'alert_type_status' => 'Промяна на статуса', 'alert_type_status' => 'Промяна на статуса',
'alert_type_offline' => 'Офлайн', 'alert_type_offline' => 'Офлайн',
'alert_type_always' => 'Винаги', 'alert_type_always' => 'Винаги',
'log_status' => 'Статус на логовете', 'log_status' => 'Статус на логовете',
'log_status_description' => 'Ако е отметнато, системата ще записва всяка промяна.', 'log_status_description' => 'Ако е отметнато, системата ще записва всяка
'log_email' => 'Да се пази ли лог на изпратените имейли от системата', промяна.',
'log_sms' => 'Да се пази ли лог на изпратените SMS съобщения от системата', 'log_email' => 'Да се пази ли лог на изпратените имейли от
системата',
'log_sms' => 'Да се пази ли лог на изпратените SMS съобщения от
системата',
'log_pushover' => 'Log pushover messages sent by the script', 'log_pushover' => 'Log pushover messages sent by the script',
'updated' => 'Настройките са обновени успешно.', 'updated' => 'Настройките са обновени успешно.',
'tab_email' => 'Имейл', 'tab_email' => 'Имейл',
@ -240,44 +278,61 @@ $sm_lang = array(
'settings_notification' => 'Настройки на известията', 'settings_notification' => 'Настройки на известията',
'settings_log' => 'Настройки на логовете', 'settings_log' => 'Настройки на логовете',
'auto_refresh' => 'Автоматично опресняване', 'auto_refresh' => 'Автоматично опресняване',
'auto_refresh_description' => 'auto_refresh_description' => 'Автоматично опресняване на
'Автоматично опресняване на страницата.<br>'. страницата.<br><span class="small">Времето е в
'<span class="small">'. секунди, ако е 0 страницата няма да се
'Времето е в секунди, ако е 0 страницата няма да се обновява.'. обновява.</span>',
'</span>',
'seconds' => 'секунди', 'seconds' => 'секунди',
'test' => 'Тест', 'test' => 'Тест',
'test_email' => 'Ще бъде изпратенo тестово съобщение до имейл адреса, който сте задали в профила си.', 'test_email' => 'Ще бъде изпратенo тестово съобщение до имейл
'test_sms' => 'Ще бъде изпратен тестово SMS съобщение до телефонния номер, който сте задали в профила си.', адреса, който сте задали в профила си.',
'test_pushover' => 'Pushover известоята ще бъдат изпратени до потребителски ключ/устройство посочено във вашият профил.', 'test_sms' => 'Ще бъде изпратен тестово SMS съобщение до телефонния
номер, който сте задали в профила си.',
'test_pushover' => 'Pushover известоята ще бъдат изпратени до
потребителски ключ/устройство посочено във
вашият профил.',
'send' => 'Изпрати', 'send' => 'Изпрати',
'test_subject' => 'Тестово съобщение', 'test_subject' => 'Тестово съобщение',
'test_message' => 'Тестово съобщение изпртено от PHP Сървър мониторинг', 'test_message' => 'Тестово съобщение изпртено от PHP Сървър
мониторинг',
'email_sent' => 'Тестовия имейл е изпратен успешно.', 'email_sent' => 'Тестовия имейл е изпратен успешно.',
'email_error' => 'Възникна грешка при изпращането на тесовия имейл', 'email_error' => 'Възникна грешка при изпращането на тесовия имейл',
'sms_sent' => 'Тестовото SMS съобщение е изпратеното успешно.', 'sms_sent' => 'Тестовото SMS съобщение е изпратеното успешно.',
'sms_error' => 'Възникна грешка при изпращането на тестовия SMS. %s', 'sms_error' => 'Възникна грешка при изпращането на тестовия SMS. %s',
'sms_error_nomobile' => 'Неуспешно изпращане на тестов SMS: не е намерен валиден телефонен номер във вашия профил.', 'sms_error_nomobile' => 'Неуспешно изпращане на тестов SMS: не е намерен
валиден телефонен номер във вашия профил.',
'pushover_sent' => 'Pushover тестово известие', 'pushover_sent' => 'Pushover тестово известие',
'pushover_error' => 'Възникна грешка при изпращане на тестово Pushover известие: %s', 'pushover_error' => 'Възникна грешка при изпращане на тестово Pushover
'pushover_error_noapp' => 'Unable to send test notification: не е зададен валиден Pushover App API token в настройките.', известие: %s',
'pushover_error_nokey' => 'Unable to send test notification: не е зададен валиден Pushover ключ във вашия профил.', 'pushover_error_noapp' => 'Unable to send test notification: не е зададен валиден Pushover
App API token в настройките.',
'pushover_error_nokey' => 'Unable to send test notification: не е зададен валиден Pushover
ключ във вашия профил.',
'log_retention_period' => 'Период на съхранение на логовете', 'log_retention_period' => 'Период на съхранение на логовете',
'log_retention_period_description' => 'Какъв брой дни да се пазят логовете от известията и архиви за ъптайм на сървърите. Въведете 0 ако желаете логовете да не се трият.', 'log_retention_period_description' => 'Какъв брой дни да се пазят логовете от
известията и архиви за ъптайм на
сървърите. Въведете 0 ако желаете
логовете да не се трият.',
'log_retention_days' => 'дни', 'log_retention_days' => 'дни',
), ),
// За нов ред в имейл съобщението, моля използвайте тага <br>
'notifications' => array( 'notifications' => array(
'off_sms' => 'Сървър \'%LABEL%\' е Офлайн: ip=%IP%, port=%PORT%. Greshka=%ERROR%', 'off_sms' => 'Сървър \'%LABEL%\' е Офлайн: ip=%IP%, port=%PORT%. Greshka=%ERROR%',
'off_email_subject' => 'Връзката до \'%LABEL%\' е ИЗГУБЕНА', 'off_email_subject' => 'Връзката до \'%LABEL%\' е ИЗГУБЕНА',
'off_email_body' => "Неуспешно свързване:<br><br>Сървър: %LABEL%<br>IP адрес: %IP%<br>Порт: %PORT%<br>Грешка: %ERROR%<br>Днес: %DATE%", 'off_email_body' => 'Неуспешно свързване:<br><br>Сървър: %LABEL%<br>IP адрес:
%IP%<br>Порт: %PORT%<br>Грешка: %ERROR%<br>Днес: %DATE%',
'off_pushover_title' => 'Връзката до \'%LABEL%\' е ИЗГУБЕНА', 'off_pushover_title' => 'Връзката до \'%LABEL%\' е ИЗГУБЕНА',
'off_pushover_message' => "Неуспешно свързване:<br><br>Сървър: %LABEL%<br>IP адрес: %IP%<br>Порт: %PORT%<br>Грешка: %ERROR%<br>Днес: %DATE%", 'off_pushover_message' => 'Неуспешно свързване:<br><br>Сървър: %LABEL%<br>IP
'on_sms' => 'Сървър \'%LABEL%\' е Онлайн: ip=%IP%, port=%PORT%, it was down for %LAST_OFFLINE_DURATION%', адрес: %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_subject' => 'Връзката до \'%LABEL%\' е ВЪЗСТАНОВЕНА',
'on_email_body' => "Връзката до '%LABEL%' беше ВЪЗСТАНОВЕНА, it was down for %LAST_OFFLINE_DURATION%:<br><br>Сървър: %LABEL%<br>IP адрес: %IP%<br>Порт: %PORT%<br>Днес: %DATE%", '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_title' => 'Връзката до \'%LABEL%\' е ВЪЗСТАНОВЕНА',
'on_pushover_message' => "Връзката до '%LABEL%' беше ВЪЗСТАНОВЕНА, it was down for %LAST_OFFLINE_DURATION%:<br><br>Сървър: %LABEL%<br>IP адрес: %IP%<br>Порт: %PORT%<br>Днес: %DATE%", 'on_pushover_message' => 'Връзката до \'%LABEL%\' беше ВЪЗСТАНОВЕНА, it was down for
%LAST_OFFLINE_DURATION%:<br><br>Сървър: %LABEL%<br>IP адрес:
%IP%<br>Порт: %PORT%<br>Днес: %DATE%',
), ),
'login' => array( 'login' => array(
'welcome_usermenu' => 'Добре дошъл, %user_name%', 'welcome_usermenu' => 'Добре дошъл, %user_name%',
@ -293,17 +348,24 @@ $sm_lang = array(
'password_repeat' => 'Повторете паролата', 'password_repeat' => 'Повторете паролата',
'password_forgot' => 'Забравили сте паролата си?', 'password_forgot' => 'Забравили сте паролата си?',
'password_reset' => 'Възстановяване на паролата', 'password_reset' => 'Възстановяване на паролата',
'password_reset_email_subject' => 'Възстановяване на парола за PHP Сървър Мониторинг', 'password_reset_email_subject' => 'Възстановяване на парола за PHP Сървър
'password_reset_email_body' => 'За да възстановите паролата си е нужно да кликнете на линка по-долу. Валидността на линка е един час.<br><br>%link%', Мониторинг',
'password_reset_email_body' => 'За да възстановите паролата си е нужно да
кликнете на линка по-долу. Валидността на
линка е един час.<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_reset' => 'Вашата парола е променена успешно. Моля, влезте в системата.', 'success_password_forgot' => 'Изпратен е имейл с информация за
възстановяване на паролата.',
'success_password_reset' => 'Вашата парола е променена успешно. Моля,
влезте в системата.',
), ),
'error' => array( 'error' => array(
'401_unauthorized' => 'Неоторизиран достъп', '401_unauthorized' => 'Неоторизиран достъп',
'401_unauthorized_description' => 'Нямате нужното ниво на достъп за да прегледате тази страница.', '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.
@ -48,7 +49,9 @@ $sm_lang = array(
'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
href="https://github.com/phpservermon/phpservermon/releases/latest" target="_blank"
rel="noopener">https://github.com/phpservermon</a>.',
'back_to_top' => 'Tornar a dalt', 'back_to_top' => 'Tornar a dalt',
'go_back' => 'Enrere', 'go_back' => 'Enrere',
'ok' => 'OK', 'ok' => 'OK',
@ -56,7 +59,6 @@ $sm_lang = array(
'cancel' => 'Cancel·lar', 'cancel' => 'Cancel·lar',
'none' => 'Cap', 'none' => 'Cap',
'activate' => 'Activar', 'activate' => 'Activar',
'advanced' => 'Avançat',
'short_day_format' => '%e %B', 'short_day_format' => '%e %B',
'long_day_format' => '%e %B %Y', 'long_day_format' => '%e %B %Y',
'yesterday_format' => 'Ahir a les %k:%M', 'yesterday_format' => 'Ahir a les %k:%M',
@ -80,8 +82,6 @@ $sm_lang = array(
'minutes' => 'minuts', 'minutes' => 'minuts',
'second' => 'segon', 'second' => 'segon',
'seconds' => 'segons', 'seconds' => 'segons',
'online' => 'en línia',
'offline' => 'fora de línia',
), ),
'menu' => array( 'menu' => array(
'config' => 'Configuració', 'config' => 'Configuració',
@ -102,22 +102,35 @@ $sm_lang = array(
'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 editar la configuració general.<br/>Els <b>usuaris</b> només poden engegar actualitzacions dels servidors que els han estat assignats.', '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.',
'mobile' => 'Mòbil', 'mobile' => 'Mòbil',
'email' => 'Correu', 'email' => 'Correu',
'pushover' => 'Pushover', 'pushover' => 'Pushover',
'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_description' => 'Pushover és un servei que fa fàcil obtenir notificacions en temps real. Veieu <a
href="https://pushover.net/" target="_blank">la seva web</a> per a més
informació.',
'pushover_key' => 'Clau Pushover', 'pushover_key' => 'Clau Pushover',
'pushover_device' => 'Dispositiu Pushover', 'pushover_device' => 'Dispositiu Pushover',
'pushover_device_description' => 'Nom del dispositiu al qual enviar els missatges. Deixau en blanc per enviar a tots els dispositius.', 'pushover_device_description' => 'Nom del dispositiu al qual enviar els missatges. Deixau en blanc per enviar
a tots els dispositius.',
'telegram' => 'Telegram', 'telegram' => 'Telegram',
'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.', 'telegram_description' => '<a href="https://telegram.org/" target="_blank">Telegram</a> és una app de
missatgeria que facilita el rebre notificacions en temps real. Consulteu la <a
href="http://docs.phpservermonitor.org/" target="_blank">documentació</a> per a
més informació i per saber com instal·lar-ho.',
'telegram_chat_id' => 'Codi ID del xat a Telegram', 'telegram_chat_id' => 'Codi ID del xat a Telegram',
'telegram_chat_id_description' => 'Els missatges seran enviats al xat de Telegram amb aquest ID.', 'telegram_chat_id_description' => 'Els missatges seran enviats al xat de Telegram amb aquest ID.',
'telegram_get_chat_id' => 'Premeu aquí per a obtenir el codi ID del vostre xat', 'telegram_get_chat_id' => 'Premeu aquí per a obtenir el codi ID del vostre xat',
'activate_telegram' => 'Activar notificacions de Telegram', 'activate_telegram' => 'Activar notificacions de Telegram',
'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ó.', 'activate_telegram_description' => 'Permetre a Telegram enviar notificacions al xat amb aquest ID. Sense
'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.', aquest permís, Telegram rebutjarà qualsevol missatge enviat des
d\'aquesta aplicació.',
'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.',
'telegram_bot_username_error_token' => '401 - No autoritzat. Assegureu-vos que el token de la API és vàlid.', 'telegram_bot_username_error_token' => '401 - No autoritzat. Assegureu-vos que el token de la API és vàlid.',
'telegram_bot_error' => 'Ha succeït un error mentre s\'intentava activar les notificacions amb Telegram: %s', 'telegram_bot_error' => 'Ha succeït un error mentre s\'intentava activar les notificacions amb Telegram: %s',
'delete_title' => 'Esborrar usuari', 'delete_title' => 'Esborrar usuari',
@ -128,7 +141,8 @@ $sm_lang = array(
'profile' => 'Perfil', 'profile' => 'Perfil',
'profile_updated' => 'El vostre perfil ha estat actualitzat.', 'profile_updated' => 'El vostre perfil ha estat actualitzat.',
'error_user_name_bad_length' => 'El nom d\'usuari ha de tenir entre 2 i 64 caràcters.', 'error_user_name_bad_length' => 'El nom d\'usuari ha de tenir entre 2 i 64 caràcters.',
'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 (_).', '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 (_).',
'error_user_name_exists' => 'Aquest nom d\'usuari ja existeix. Esculliu un altre.', 'error_user_name_exists' => 'Aquest nom d\'usuari ja existeix. Esculliu un altre.',
'error_user_email_bad_length' => 'L\'adreça de correu ha de tenir entre 5 i 255 caràcters.', 'error_user_email_bad_length' => 'L\'adreça de correu ha de tenir entre 5 i 255 caràcters.',
'error_user_email_invalid' => 'L\'adreça de correu no és correcta.', 'error_user_email_invalid' => 'L\'adreça de correu no és correcta.',
@ -159,9 +173,11 @@ $sm_lang = array(
'timeout_description' => 'Nombre de segons que cal esperar a que el servidor respongui.', 'timeout_description' => 'Nombre de segons que cal esperar a que el servidor respongui.',
'authentication_settings' => 'Opcions d\'autenticació (opcional)', 'authentication_settings' => 'Opcions d\'autenticació (opcional)',
'website_username' => 'Nom d\'usuari', 'website_username' => 'Nom d\'usuari',
'website_username_description' => 'Nom d\'usuari per accedir al portal web (només està soportada l\'autenticació d\'Apache).', 'website_username_description' => 'Nom d\'usuari per accedir al portal web (només està soportada
l\'autenticació d\'Apache).',
'website_password' => 'Contrasenya', 'website_password' => 'Contrasenya',
'website_password_description' => 'Contrasenya per accedir al portal web. La contrasenya es desa encriptada a la base de dades.', 'website_password_description' => 'Contrasenya per accedir al portal web. La contrasenya es desa encriptada a
la base de dades.',
'fieldset_monitoring' => 'Monitorització', 'fieldset_monitoring' => 'Monitorització',
'fieldset_permissions' => 'Permisos', 'fieldset_permissions' => 'Permisos',
'port' => 'Port', 'port' => 'Port',
@ -171,21 +187,26 @@ $sm_lang = array(
'custom_request_method' => 'Mètode de crida personalitzat', 'custom_request_method' => 'Mètode de crida personalitzat',
'popular_request_methods' => 'Mètodes de crida habituals', 'popular_request_methods' => 'Mètodes de crida habituals',
'post_field' => 'Camp POST', 'post_field' => 'Camp POST',
'post_field_description' => 'Els camps de dades que seran enviats emprant el mètode de crida de dalt. Exemple: param1=val1&amp;param2=val2&...', 'post_field_description' => 'Els camps de dades que seran enviats emprant el mètode de crida de dalt.
Exemple: param1=val1&amp;param2=val2&...',
'please_select' => 'Seleccioneu', 'please_select' => 'Seleccioneu',
'type' => 'Tipus', 'type' => 'Tipus',
'type_website' => 'Website', 'type_website' => 'Website',
'type_service' => 'Servei', 'type_service' => 'Servei',
'type_ping' => 'Ping', 'type_ping' => 'Ping',
'pattern' => 'cercar cadena/patrò', 'pattern' => 'cercar cadena/patrò',
'pattern_description' => 'Si aquest patró no es troba al lloc web, el servidor es marcarà fora de línia. Es permeten expressions regulars.', 'pattern_description' => 'Si aquest patró no es troba al lloc web, el servidor es marcarà fora de línia. Es
permeten expressions regulars.',
'pattern_online' => 'El patró indica que el website és', 'pattern_online' => 'El patró indica que el website és',
'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.', '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.',
'redirect_check' => 'El redireccionament cap a un altre domini és', 'redirect_check' => 'El redireccionament cap a un altre domini és',
'redirect_check_description' => 'El redireccionament cap a un altre domini habitualment és un mal senyal.', 'redirect_check_description' => 'El redireccionament cap a un altre domini habitualment és un mal senyal.',
'allow_http_status' => 'Permetre codi d\'estat HTTP', 'allow_http_status' => 'Permetre codi d\'estat HTTP',
'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.', 'allow_http_status_description' => 'Marcar el website com en línia. Els codis d\'estat HTTP inferiors a 400
'header' => 'Capçalera', són marcats com en línia per defecte. Empreu el símbol | per separar
més d\'un estat. Exemple: 401|403.',
'header_name_description' => 'Nom de la capçalera (sensible a majúscules)', 'header_name_description' => 'Nom de la capçalera (sensible a majúscules)',
'header_value_description' => 'Valor de la capçalera. Es permeten expressions regulars.', 'header_value_description' => 'Valor de la capçalera. Es permeten expressions regulars.',
'last_check' => 'Darrera comprovació', 'last_check' => 'Darrera comprovació',
@ -221,7 +242,8 @@ $sm_lang = array(
'day' => 'Dia', 'day' => 'Dia',
'hour' => 'Hora', 'hour' => 'Hora',
'warning_threshold' => 'Llindar \'advertència', 'warning_threshold' => 'Llindar \'advertència',
'warning_threshold_description' => 'Nombre de comprovacions fallides necessàries abans de considerar el servidor fóra de línia.', 'warning_threshold_description' => 'Nombre de comprovacions fallides necessàries abans de considerar el
servidor fóra de línia.',
'chart_last_week' => 'Darrera setmana', 'chart_last_week' => 'Darrera setmana',
'chart_history' => 'Historial', 'chart_history' => 'Historial',
'chart_day_format' => '%Y-%m-%d', 'chart_day_format' => '%Y-%m-%d',
@ -245,7 +267,9 @@ $sm_lang = array(
'language' => 'Idioma', 'language' => 'Idioma',
'show_update' => 'Comprovar actualitzacions?', 'show_update' => 'Comprovar actualitzacions?',
'password_encrypt_key' => 'La clau per xifrar contrasenyes', 'password_encrypt_key' => 'La clau per xifrar contrasenyes',
'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!', '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!',
'proxy' => 'Habilitar proxy', 'proxy' => 'Habilitar proxy',
'proxy_url' => 'URL del proxy', 'proxy_url' => 'URL del proxy',
'proxy_user' => 'Usuari del proxy', 'proxy_user' => 'Usuari del proxy',
@ -267,25 +291,43 @@ $sm_lang = array(
'sms_gateway_password' => 'Contrasenya del Gateway', 'sms_gateway_password' => 'Contrasenya del Gateway',
'sms_from' => 'Numero de telèfon de qui envia', 'sms_from' => 'Numero de telèfon de qui envia',
'pushover_status' => 'Permetre l\'enviament de missatges per Pushover', 'pushover_status' => 'Permetre l\'enviament de missatges per Pushover',
'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ó.', '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ó.',
'pushover_clone_app' => 'premeu aquí per a crear la vostra app Pushover', 'pushover_clone_app' => 'premeu aquí per a crear la vostra app Pushover',
'pushover_api_token' => 'Token de la API de la App Pushover', 'pushover_api_token' => 'Token de la API de la App Pushover',
'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.', '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.',
'telegram_status' => 'Permetre l\'enviament de missatges per Telegram', 'telegram_status' => 'Permetre l\'enviament de missatges per Telegram',
'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.', 'telegram_description' => '<a href="https://telegram.org/" target="_blank">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/" target="_blank">documentació</a> per
saber més i saber com activar-ho.',
'telegram_api_token' => 'Token de l\'API de Telegram', 'telegram_api_token' => 'Token de l\'API de Telegram',
'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.', 'telegram_api_token_description' => 'Abans de poder emprar Telegram necessiteu obtenir un token de l\'API.
Consulteu la <a href="http://docs.phpservermonitor.org/"
target="_blank">documentació</a> per saber més.',
'alert_type' => 'Seleccioneu quan voleu ser notificats.', 'alert_type' => 'Seleccioneu quan voleu ser notificats.',
'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.', '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.',
'alert_type_status' => 'Canvi \'estat', 'alert_type_status' => 'Canvi \'estat',
'alert_type_offline' => 'Fora de línia', 'alert_type_offline' => 'Fora de línia',
'alert_type_always' => 'Sempre', 'alert_type_always' => 'Sempre',
'combine_notifications' => 'Combinar notificacions', 'combine_notifications' => 'Combinar notificacions',
'combine_notifications_description' => 'Redueix el nombre de notificacions en combinar-les en una de sola. (Això no afecta a les notificacions per SMS.)', 'combine_notifications_description' => 'Redueix el nombre de notificacions en combinar-les en una de sola.
(Això no afecta a les notificacions per SMS.)',
'alert_proxy' => 'Encara que s\'habiliti, el proxy no és emprat mai per als serveis', 'alert_proxy' => 'Encara que s\'habiliti, el proxy no és emprat mai per als serveis',
'alert_proxy_url' => '<b>Format:</b> Servidor:Port', 'alert_proxy_url' => '<b>Format:</b> Servidor:Port',
'log_status' => 'LOG d\'estat', 'log_status' => 'LOG d\'estat',
'log_status_description' => 'Si el LOG d\'estat es configura a SÍ, l\'aplicació enregistrarà aquells events que disparin les notificacions.', 'log_status_description' => 'Si el LOG d\'estat es configura a , l\'aplicació enregistrarà aquells events
que disparin les notificacions.',
'log_email' => 'Enregistrar els correus enviats per l\'aplicació', 'log_email' => 'Enregistrar els correus enviats per l\'aplicació',
'log_sms' => 'Enregistrar els SMS enviats per l\'aplicació', 'log_sms' => 'Enregistrar els SMS enviats per l\'aplicació',
'log_pushover' => 'Enregistrar els missatges enviats a Pushover per l\'aplicació', 'log_pushover' => 'Enregistrar els missatges enviats a Pushover per l\'aplicació',
@ -303,13 +345,16 @@ $sm_lang = array(
'settings_log' => 'Preferències de LOG', 'settings_log' => 'Preferències de LOG',
'settings_proxy' => 'Preferències de Proxy', 'settings_proxy' => 'Preferències de Proxy',
'auto_refresh' => 'Auto-recàrrega', 'auto_refresh' => 'Auto-recàrrega',
'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>', '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>',
'seconds' => 'segons', 'seconds' => 'segons',
'test' => 'Provar', 'test' => 'Provar',
'test_email' => 'S\'enviarà un correu a l\'adreça que teniu al vostre perfil d\'usuari.', 'test_email' => 'S\'enviarà un correu a l\'adreça que teniu al vostre perfil d\'usuari.',
'test_sms' => 'S\'enviarà un SMS al telèfon que teniu al vostre perfil d\'usuari.', 'test_sms' => 'S\'enviarà un SMS al telèfon que teniu al vostre perfil d\'usuari.',
'test_pushover' => 'S\'enviarà una notificació per Pushover a la clau d\'usuari/dispositiu que teniu al vostre perfil d\'usuari.', 'test_pushover' => 'S\'enviarà una notificació per Pushover a la clau d\'usuari/dispositiu que teniu al
'test_telegram' => 'S\'enviarà una notificació per Telegram al xat amb l\'ID que teniu al vostre perfil d\'usuari.', vostre perfil d\'usuari.',
'test_telegram' => 'S\'enviarà una notificació per Telegram al xat amb l\'ID que teniu al vostre perfil
d\'usuari.',
'send' => 'Enviar', 'send' => 'Enviar',
'test_subject' => 'Provar', 'test_subject' => 'Provar',
'test_message' => 'Missatge de prova', 'test_message' => 'Missatge de prova',
@ -317,43 +362,69 @@ $sm_lang = array(
'email_error' => 'Hi ha hagut un error provant d\'enviar el correu', 'email_error' => 'Hi ha hagut un error provant d\'enviar el correu',
'sms_sent' => 'Sms enviat', 'sms_sent' => 'Sms enviat',
'sms_error' => 'Hi ha hagut un error provant d\'enviar el SMS', 'sms_error' => 'Hi ha hagut un error provant d\'enviar el SMS',
'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.', '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.',
'pushover_sent' => 'Notificació enviada per Pushover', 'pushover_sent' => 'Notificació enviada per Pushover',
'pushover_error' => 'Ha succeït un error provant d\'enviar la notificació Pushover: %s', 'pushover_error' => 'Ha succeït un error provant d\'enviar la notificació Pushover: %s',
'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.', 'pushover_error_noapp' => 'No ha estat posible enviar la notificació de prova: no s\'ha trobat cap token
'pushover_error_nokey' => 'No ha estat posible enviar la notificació de prova: no s\'ha trobat cap clau Pushover al vostre perfil d\'usuari.', d\'API d\'una App Pushover a la configuració general.',
'pushover_error_nokey' => 'No ha estat posible enviar la notificació de prova: no s\'ha trobat cap clau
Pushover al vostre perfil d\'usuari.',
'telegram_sent' => 'Notificació enviada per Telegram', 'telegram_sent' => 'Notificació enviada per Telegram',
'telegram_error' => 'Ha succeït un error provant d\'enviar la notificació per Telegram: %s', 'telegram_error' => 'Ha succeït un error provant d\'enviar la notificació per Telegram: %s',
'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.', 'telegram_error_notoken' => 'No ha estat posible enviar la notificació de prova: no s\'ha trobat cap token
'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.', d\'API de Telegram a la configuració general.',
'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_retention_period' => 'Període de retenció al LOG', 'log_retention_period' => 'Període de retenció al LOG',
'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_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_retention_days' => 'dies', 'log_retention_days' => 'dies',
), ),
'notifications' => array( 'notifications' => array(
'off_sms' => 'El servidor \'%LABEL%\' NO RESPON: IP=%IP%, Port=%PORT%. Error=%ERROR%', 'off_sms' => 'El servidor \'%LABEL%\' NO RESPON: IP=%IP%, Port=%PORT%. Error=%ERROR%',
'off_email_subject' => 'IMPORTANT: El servidor \'%LABEL%\' NO RESPON', '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_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_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_pushover_message' => 'Ha fallat la connexió amb aquest servidor:<br/><br/>Servidor: %LABEL%<br/>IP:
'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%', %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%', '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_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_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_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_pushover_message' => 'El servidor \'%LABEL%\' TORNA A FUNCIONAR:<br/><br/>Servidor: %LABEL%<br/>IP:
'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%', %IP%<br/>Port: %PORT%<br/>Data: %DATE%<br/>Temps fóra de línia:
'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>', %LAST_OFFLINE_DURATION%',
'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>', 'on_telegram_message' => 'El servidor \'%LABEL%\' TORNA A FUNCIONAR:<br/><br/>Servidor: %LABEL%<br/>IP:
'combi_off_telegram_message' => '- Servidor: %LABEL%<br/>- IP: %IP%<br/>- Port: %PORT%<br/>- Error: %ERROR%<br/>- Data: %DATE%<br/><br/>', %IP%<br/>Port: %PORT%<br/>Data: %DATE%<br/>Temps fóra de línia:
'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>', %LAST_OFFLINE_DURATION%',
'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_off_email_message' => '<ul><li>Servidor: %LABEL%</li><li>IP: %IP%</li><li>Port: %PORT%</li><li>Error:
'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/>', %ERROR%</li><li>Data: %DATE%</li></ul>',
'combi_email_subject' => 'IMPORTANT: els servidors \'%UP%\' TORNEN A FUNCIONAR, els servidors \'%DOWN%\' NO RESPONEN', '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_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_email_message' => '<b>Aquests servidors NO RESPONEN:</b><br/>%DOWN_SERVERS%<br/><b>Aquests servidors
'combi_pushover_message' => '<b>Aquests servidors NO RESPONEN:</b><br/>%DOWN_SERVERS%<br/><b>Aquests servidors TORNEN A FUNCIONAR:</b><br/>%UP_SERVERS%', 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%', '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( 'login' => array(
'welcome_usermenu' => 'Benvingut(a), %user_name%', 'welcome_usermenu' => 'Benvingut(a), %user_name%',
@ -370,7 +441,8 @@ $sm_lang = array(
'password_forgot' => 'Heu oblidat la contrasenya?', 'password_forgot' => 'Heu oblidat la contrasenya?',
'password_reset' => 'Restablir la contrasenya', 'password_reset' => 'Restablir la contrasenya',
'password_reset_email_subject' => 'Restablir la vostra contrasenya per accedir a PHP Server Monitor', '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%', '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_user_incorrect' => 'No s\'ha trobat l\'usuari especificat.',
'error_login_incorrect' => 'Aquestes credencials no són vàlides.', 'error_login_incorrect' => 'Aquestes credencials no són vàlides.',
'error_login_passwords_nomatch' => 'Les dues contrasenyes no coincideixen.', 'error_login_passwords_nomatch' => 'Les dues contrasenyes no coincideixen.',
@ -380,6 +452,7 @@ $sm_lang = array(
), ),
'error' => array( 'error' => array(
'401_unauthorized' => 'No-autoritzat', '401_unauthorized' => 'No-autoritzat',
'401_unauthorized_description' => 'No teniu els privilegis per veure aquesta plana o potser la vostra sessió ha expirat.', '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.
@ -28,7 +29,12 @@
$sm_lang = array( $sm_lang = array(
'name' => 'Česky - Czech', 'name' => 'Česky - Czech',
'locale' => array('cs_CZ.UTF-8', 'cs_CZ', 'czech', 'czech'), 'locale' => array(
'0' => 'cs_CZ.UTF-8',
'1' => 'cs_CZ',
'2' => 'czech',
'3' => 'czech',
),
'locale_tag' => 'cs', 'locale_tag' => 'cs',
'locale_dir' => 'ltr', 'locale_dir' => 'ltr',
'system' => array( 'system' => array(
@ -44,12 +50,13 @@ $sm_lang = array(
'no' => 'Ne', 'no' => 'Ne',
'insert' => 'Vložit', 'insert' => 'Vložit',
'add_new' => 'Přidat', 'add_new' => 'Přidat',
'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>.', '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>.',
'back_to_top' => 'Zpět na začátek', 'back_to_top' => 'Zpět na začátek',
'go_back' => 'Zpět', 'go_back' => 'Zpět',
'ok' => 'OK', 'ok' => 'OK',
'cancel' => 'Zrušit', 'cancel' => 'Zrušit',
// date/time format according the strftime php function format parameter http://php.net/manual/function.strftime.php
'short_day_format' => '%B %e', 'short_day_format' => '%B %e',
'long_day_format' => '%B %e, %Y', 'long_day_format' => '%B %e, %Y',
'yesterday_format' => 'Včera v %k:%M', 'yesterday_format' => 'Včera v %k:%M',
@ -61,18 +68,6 @@ $sm_lang = array(
'a_minute_ago' => 'cca před minutou', 'a_minute_ago' => 'cca před minutou',
'seconds_ago' => 'před %d vteřinami', 'seconds_ago' => 'před %d vteřinami',
'a_second_ago' => 'před chvílí', 'a_second_ago' => 'před chvílí',
'year' => 'year',
'years' => 'years',
'month' => 'month',
'months' => 'months',
'day' => 'day',
'days' => 'days',
'hour' => 'hour',
'hours' => 'hours',
'minute' => 'minute',
'minutes' => 'minutes',
'second' => 'second',
'seconds' => 'seconds',
), ),
'menu' => array( 'menu' => array(
'config' => 'Konfigurace', 'config' => 'Konfigurace',
@ -93,14 +88,18 @@ $sm_lang = array(
'level' => 'Oprávnění', 'level' => 'Oprávnění',
'level_10' => 'Administrátor', 'level_10' => 'Administrátor',
'level_20' => 'Uživatel', 'level_20' => 'Uživatel',
'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.', 'level_description' => '<b>Administrátor</b> plný přístup: může spravovat servery, uživatele a
upravit globální konfiguraci.<br><b>Uživatel</b> práva pouze na čtení a
spustit aktualizaci serverů, které přiřazeny.',
'mobile' => 'Mobil', 'mobile' => 'Mobil',
'email' => 'E-mail', 'email' => 'E-mail',
'pushover' => 'Pushover', 'pushover' => 'Pushover',
'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_description' => 'Pushover je služba umožňující jednoduše zasílat real-time upozornění.
Více na <a href="https://pushover.net/" target="_blank">webu Pushover</a>',
'pushover_key' => 'Pushover Token', 'pushover_key' => 'Pushover Token',
'pushover_device' => 'Pushover Zařízení', 'pushover_device' => 'Pushover Zařízení',
'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í.', 'pushover_device_description' => 'Název zařízení, na které být zráva odeslána. Ponechte prázdné
pro odeslání na všechna zařízení.',
'delete_title' => 'Smazat uživatele', 'delete_title' => 'Smazat uživatele',
'delete_message' => 'Opravdu smazat uživatele \'%1\'?', 'delete_message' => 'Opravdu smazat uživatele \'%1\'?',
'deleted' => 'Uživatel smazán.', 'deleted' => 'Uživatel smazán.',
@ -109,7 +108,8 @@ $sm_lang = array(
'profile' => 'Profil', 'profile' => 'Profil',
'profile_updated' => 'Váš uživatelský profil byl upraven.', 'profile_updated' => 'Váš uživatelský profil byl upraven.',
'error_user_name_bad_length' => 'Uživatelské jméno musí obsahovat 2 až 64 znaků.', 'error_user_name_bad_length' => 'Uživatelské jméno musí obsahovat 2 až 64 znaků.',
'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_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á',
@ -140,7 +140,8 @@ $sm_lang = array(
'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 podporovaná.)', 'website_username_description' => 'Uživatelské jméno pro přístup na stránku. (Pouze Apache autorizace je
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',
@ -153,7 +154,8 @@ $sm_lang = array(
'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í
výrazy jsou povoleny.',
'last_check' => 'Poslední kontrola', 'last_check' => 'Poslední kontrola',
'last_online' => 'Naposledy online', 'last_online' => 'Naposledy online',
'last_offline' => 'Naposledy offline', 'last_offline' => 'Naposledy offline',
@ -184,7 +186,6 @@ $sm_lang = array(
'warning_threshold_description' => 'Počet neúspěšných pokusů před označením serveru jako offline.', 'warning_threshold_description' => 'Počet neúspěšných pokusů před označením serveru jako offline.',
'chart_last_week' => 'Minulý týden', 'chart_last_week' => 'Minulý týden',
'chart_history' => 'Historie', 'chart_history' => 'Historie',
// 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',
@ -205,7 +206,9 @@ $sm_lang = array(
'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
přístup na webové stránky. Pokud klíč změníte budou uložená hesla
neplatná!',
'email_status' => 'Povolit odesílání e-mailu', 'email_status' => 'Povolit odesílání e-mailu',
'email_from_email' => 'E-mailová adresa odesilatele', 'email_from_email' => 'E-mailová adresa odesilatele',
'email_from_name' => 'Jméno odesilatele', 'email_from_name' => 'Jméno odesilatele',
@ -223,22 +226,25 @@ $sm_lang = array(
'sms_gateway_password' => 'Heslo brány', 'sms_gateway_password' => 'Heslo brány',
'sms_from' => 'Telefonní číslo odesilatele', 'sms_from' => 'Telefonní číslo odesilatele',
'pushover_status' => 'Povolit zasílání Pushover zpráv', 'pushover_status' => 'Povolit zasílání Pushover zpráv',
'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_description' => 'Pushover je služba umožňující jednoduše zasílat real-time upozornění.
Více na <a href="https://pushover.net/" target="_blank">webu Pushover</a>',
'pushover_clone_app' => 'Klikněte pro vytvoření Pushover aplikace', 'pushover_clone_app' => 'Klikněte pro vytvoření Pushover aplikace',
'pushover_api_token' => 'Pushover App API Token', 'pushover_api_token' => 'Pushover App API Token',
'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.', '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.',
'alert_type' => 'Zvolte kdy si přejete být upozorněni.', 'alert_type' => 'Zvolte kdy si přejete být upozorněni.',
'alert_type_description' => '<b>Změna stavu:</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 změně stavu, tedy:online -> offline nebo offline -> online.<br>'. offline nebo offline -> online.<br><br /><b>Offline:</b> Obdržíte upozornění,
'<br /><b>Offline:</b> '. kdy server přejde poprvé do offline stavu. Například, pokud je cron nastaven
'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>'. na 15 minut a sledovaný server bude offline mezi 01:00 a 06:00. Obdržíte
'<br><b>Vždy:</b> '. upozornění pouze v 01:00. <br><br><b>Vždy:</b> Obdržíte upozornění při
'Obdržíte upozornění při každém spuštění kontroly, tedy i pokud bude server offline několik hodin.', každém spuštění kontroly, tedy i pokud bude server offline několik hodin.',
'alert_type_status' => 'Změna stavu', 'alert_type_status' => 'Změna stavu',
'alert_type_offline' => 'Offline', 'alert_type_offline' => 'Offline',
'alert_type_always' => 'Vždy', 'alert_type_always' => 'Vždy',
'log_status' => 'Log', 'log_status' => 'Log',
'log_status_description' => 'Pokud je Log nastaven na hodnotu TRUE, systém do něj zapíše veškerá provedená upozornění.', 'log_status_description' => 'Pokud je Log nastaven na hodnotu TRUE, systém do něj zapíše veškerá
provedená upozornění.',
'log_email' => 'Logovat odeslané e-maily', 'log_email' => 'Logovat odeslané e-maily',
'log_sms' => 'Logovat odeslané textové zprávy', 'log_sms' => 'Logovat odeslané textové zprávy',
'log_pushover' => 'Logovat odeslané Pushover zprávy', 'log_pushover' => 'Logovat odeslané Pushover zprávy',
@ -252,16 +258,14 @@ $sm_lang = array(
'settings_notification' => 'Nastavení upozornění', 'settings_notification' => 'Nastavení upozornění',
'settings_log' => 'Nastavení logu', 'settings_log' => 'Nastavení logu',
'auto_refresh' => 'Automaticky obnovit', 'auto_refresh' => 'Automaticky obnovit',
'auto_refresh_description' => 'auto_refresh_description' => 'Automaticky obnovit stránku Servery.<br><span class="small">Čas v sekundách,
'Automaticky obnovit stránku Servery.<br>'. 0 pro vypnutí automatického obnovení.</span>',
'<span class="small">'.
'Čas v sekundách, 0 pro vypnutí automatického obnovení.'.
'</span>',
'seconds' => 'sekund', 'seconds' => 'sekund',
'test' => 'Test', 'test' => 'Test',
'test_email' => 'E-mail bude odeslán na adresu uvedenou v uživatelském profilu.', 'test_email' => 'E-mail bude odeslán na adresu uvedenou v uživatelském profilu.',
'test_sms' => 'SMS bude odeslána na telefonní číslo uvedené v uživatelském profilu.', 'test_sms' => 'SMS bude odeslána na telefonní číslo uvedené v uživatelském profilu.',
'test_pushover' => 'Pushover upozornění bude odesláno uživateli/zařízení dle nastavení v uživatelském profilu.', 'test_pushover' => 'Pushover upozornění bude odesláno uživateli/zařízení dle nastavení v
uživatelském profilu.',
'send' => 'Odeslat', 'send' => 'Odeslat',
'test_subject' => 'Test', 'test_subject' => 'Test',
'test_message' => 'Testovací zpráva', 'test_message' => 'Testovací zpráva',
@ -269,27 +273,36 @@ $sm_lang = array(
'email_error' => 'Chyba při odeslání e-mailu', 'email_error' => 'Chyba při odeslání e-mailu',
'sms_sent' => 'SMS odeslána', 'sms_sent' => 'SMS odeslána',
'sms_error' => 'Chyba při odeslání SMS. %s', 'sms_error' => 'Chyba při odeslání SMS. %s',
'sms_error_nomobile' => 'Nebylo možné odeslat SMS: v uživatelském profilu nebylo nalezeno platné telefonní číslo.', 'sms_error_nomobile' => 'Nebylo možné odeslat SMS: v uživatelském profilu nebylo nalezeno platné
telefonní číslo.',
'pushover_sent' => 'Pushover upozornění odesláno.', 'pushover_sent' => 'Pushover upozornění odesláno.',
'pushover_error' => 'Nastala chyba při odesílání Pushover upozornění: %s', 'pushover_error' => 'Nastala chyba při odesílání Pushover upozornění: %s',
'pushover_error_noapp' => 'Nebylo možné odeslat testovací upozornění: v globálním nastavení nebyl nalezen žádný API token.', 'pushover_error_noapp' => 'Nebylo možné odeslat testovací upozornění: v globálním nastavení nebyl
'pushover_error_nokey' => 'Nebylo možné odeslat testovací upozornění: ve vašem profilu není definován Pushover key.', nalezen žádný API token.',
'pushover_error_nokey' => 'Nebylo možné odeslat testovací upozornění: ve vašem profilu není definován
Pushover key.',
'log_retention_period' => 'Rotace logu', 'log_retention_period' => 'Rotace logu',
'log_retention_period_description' => 'Počet dnů po které budou zachovány logy upozornění. Vložte 0 pro vypnutí autorotace.', 'log_retention_period_description' => 'Počet dnů po které budou zachovány logy upozornění. Vložte 0 pro
vypnutí autorotace.',
'log_retention_days' => 'dnů', 'log_retention_days' => 'dnů',
), ),
// for newlines in the email messages use <br>
'notifications' => array( 'notifications' => array(
'off_sms' => 'Server \'%LABEL%\' je offline: ip=%IP%, port=%PORT%. Chyba=%ERROR%', 'off_sms' => 'Server \'%LABEL%\' je offline: ip=%IP%, port=%PORT%. Chyba=%ERROR%',
'off_email_subject' => 'DŮLEŽITÉ: Server \'%LABEL%\' je offline', 'off_email_subject' => 'DŮLEŽITÉ: Server \'%LABEL%\' je offline',
'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%', '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%',
'off_pushover_title' => 'Server \'%LABEL%\' je offline', 'off_pushover_title' => 'Server \'%LABEL%\' je offline',
'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%', '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%', 'on_sms' => 'Server \'%LABEL%\' je online: ip=%IP%, port=%PORT%, it was down for %LAST_OFFLINE_DURATION%',
'on_email_subject' => 'DŮLEŽITÉ: Server \'%LABEL%\' je online', 'on_email_subject' => 'DŮLEŽITÉ: Server \'%LABEL%\' je online',
'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%", '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%',
'on_pushover_title' => 'Server \'%LABEL%\' je online', 'on_pushover_title' => 'Server \'%LABEL%\' je online',
'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%', '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%',
), ),
'login' => array( 'login' => array(
'welcome_usermenu' => 'Vítejte, %user_name%', 'welcome_usermenu' => 'Vítejte, %user_name%',
@ -306,7 +319,8 @@ $sm_lang = array(
'password_forgot' => 'Zapomenuté heslo?', 'password_forgot' => 'Zapomenuté heslo?',
'password_reset' => 'Obnovit heslo', 'password_reset' => 'Obnovit heslo',
'password_reset_email_subject' => 'Obnovit heslo pro PHP Server Monitor', '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%', '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_user_incorrect' => 'Zadané uživatelské jméno nebylo nalezeno.',
'error_login_incorrect' => 'Přihlášení nebylo úspěšné.', 'error_login_incorrect' => 'Přihlášení nebylo úspěšné.',
'error_login_passwords_nomatch' => 'Zadaná hesla neodpovídají.', 'error_login_passwords_nomatch' => 'Zadaná hesla neodpovídají.',

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,7 +28,12 @@
$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(
'0' => 'da_DK.UTF-8',
'1' => 'da_DK',
'2' => 'danish',
'3' => 'danish-dk',
),
'system' => array( 'system' => array(
'title' => 'Server Monitor', 'title' => 'Server Monitor',
'install' => 'Installér', 'install' => 'Installér',
@ -41,12 +47,13 @@ $sm_lang = array(
'no' => 'Nej', 'no' => 'Nej',
'insert' => 'Indsæt', 'insert' => 'Indsæt',
'add_new' => 'Tilføj ny', 'add_new' => 'Tilføj ny',
'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>.', 'update_available' => 'En ny version ({version}) er tilgængelig <a
href="https://github.com/phpservermon/phpservermon/releases/latest" target="_blank"
rel="noopener">http://www.phpservermonitor.org</a>.',
'back_to_top' => 'Til toppen', 'back_to_top' => 'Til toppen',
'go_back' => 'Tilbage', 'go_back' => 'Tilbage',
'ok' => 'OK', 'ok' => 'OK',
'cancel' => 'Annullér', 'cancel' => 'Annullér',
// date/time format according the strftime php function format parameter http://php.net/manual/function.strftime.php
'short_day_format' => '%B %e', 'short_day_format' => '%B %e',
'long_day_format' => '%B %e, %Y', 'long_day_format' => '%B %e, %Y',
'yesterday_format' => 'Igår %k:%M', 'yesterday_format' => 'Igår %k:%M',
@ -58,18 +65,6 @@ $sm_lang = array(
'a_minute_ago' => 'omkring et minut siden', 'a_minute_ago' => 'omkring et minut siden',
'seconds_ago' => '%d sekunder siden', 'seconds_ago' => '%d sekunder siden',
'a_second_ago' => 'et sekund siden', 'a_second_ago' => 'et sekund siden',
'year' => 'year',
'years' => 'years',
'month' => 'month',
'months' => 'months',
'day' => 'day',
'days' => 'days',
'hour' => 'hour',
'hours' => 'hours',
'minute' => 'minute',
'minutes' => 'minutes',
'second' => 'second',
'seconds' => 'seconds',
), ),
'menu' => array( 'menu' => array(
'config' => 'Indstillinger', 'config' => 'Indstillinger',
@ -90,14 +85,19 @@ $sm_lang = array(
'level' => 'Niveau', 'level' => 'Niveau',
'level_10' => 'Administrator', 'level_10' => 'Administrator',
'level_20' => 'Bruger', 'level_20' => 'Bruger',
'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.', '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.',
'mobile' => 'Mobil', 'mobile' => 'Mobil',
'email' => 'E-mail', 'email' => 'E-mail',
'pushover' => 'Pushover', 'pushover' => 'Pushover',
'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_description' => 'Pushover er en service der gør det let at modtage real-time notifikationer. Se <a
href="https://pushover.net/" target="_blank">deres website</a> for mere
information.',
'pushover_key' => 'Pushover nøgle', 'pushover_key' => 'Pushover nøgle',
'pushover_device' => 'Pushover enhed', 'pushover_device' => 'Pushover enhed',
'pushover_device_description' => 'Navnet på enheden som beskeden skal sendes til. Lad denne være tom hvis alle skal modtage beskeden.', 'pushover_device_description' => 'Navnet 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.',
@ -106,7 +106,8 @@ $sm_lang = array(
'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 må kun indholde alfabetiske tegn (a-z, A-Z), tal (0-9), prikker (.) og (_).', 'error_user_name_invalid' => 'Brugernavn kun indholde alfabetiske tegn (a-z, A-Z), tal (0-9), prikker (.)
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.',
@ -139,7 +140,8 @@ $sm_lang = array(
'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
værende offline. Regulære udtryk er tilladt.',
'last_check' => 'Sidst kontrolleret', 'last_check' => 'Sidst kontrolleret',
'last_online' => 'Sidst online', 'last_online' => 'Sidst online',
'last_offline' => 'Sidst offline', 'last_offline' => 'Sidst offline',
@ -170,7 +172,6 @@ $sm_lang = array(
'warning_threshold_description' => 'Antallet af fejl, før status skifter til offline.', 'warning_threshold_description' => 'Antallet af fejl, før status skifter til offline.',
'chart_last_week' => 'Sidste uge', 'chart_last_week' => 'Sidste uge',
'chart_history' => 'Historie', 'chart_history' => 'Historie',
// 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',
@ -207,24 +208,28 @@ $sm_lang = array(
'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
href="https://pushover.net/" target="_blank">deres website</a> for yderligere
information.',
'pushover_clone_app' => 'Klik her for at oprette din Pushover app', 'pushover_clone_app' => 'Klik her for at oprette din Pushover app',
'pushover_api_token' => 'Pushover App API Token', 'pushover_api_token' => 'Pushover App API Token',
'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_api_token_description' => 'Før du kan benytte Pushover, skal du <a href="%1$s" target="_blank"
rel="noopener">registrere en app</a> deres website og indtaste en App
API Token her.',
'alert_type' => 'Vælg hvornår du vil modtage beskeden', 'alert_type' => 'Vælg hvornår du vil modtage beskeden',
'alert_type_description' => '<b>Status ændring:</b> '. 'alert_type_description' => '<b>Status ændring:</b> Du vil modtage en notifkation når en server har en
'Du vil modtage en notifkation når en server har en ændring i status. Fra online -> offline eller offline -> online.<br>'. ændring i status. Fra online -> offline eller offline -> online.<br><br
'<br /><b>Offline:</b> '. /><b>Offline:</b> Du vil modtage en meddelelse, når en server går offline for
'Du vil modtage en meddelelse, når en server går offline for første gang. Eksempelvis '. første gang. Eksempelvis hvis dit cronjob kører hvert kvarter, og din server
'hvis dit cronjob kører hvert kvarter, og din server går ned kl 01 og kommer først op kl 06, '. går ned kl 01 og kommer først op kl 06, vil du kun modtage en mail kl
' vil du kun modtage en mail kl 01.<br>'. 01.<br><br><b>Altid:</b> Du vil modtage en besked, hver gang scriptet kører og
'<br><b>Altid:</b> '. et websted er nede, selvom site har været offline i flere timer.',
'Du vil modtage en besked, hver gang scriptet kører og et websted er nede, selvom site har været offline i flere timer.',
'alert_type_status' => 'Status ændret', 'alert_type_status' => 'Status ændret',
'alert_type_offline' => 'Offline', 'alert_type_offline' => 'Offline',
'alert_type_always' => 'Altid', 'alert_type_always' => 'Altid',
'log_status' => 'Log status', 'log_status' => 'Log status',
'log_status_description' => 'Hvis log status er sat til TRUE, vil monitoren logge hændelsen hver gang status ændre sig.', 'log_status_description' => 'Hvis log status er sat til TRUE, vil monitoren logge hændelsen hver gang status
ændre sig.',
'log_email' => 'Log e-mails sendt af systemet', 'log_email' => 'Log e-mails sendt af systemet',
'log_sms' => 'Log SMS sendt af systemet', 'log_sms' => 'Log SMS sendt af systemet',
'log_pushover' => 'Log pushover messages sent by the script', 'log_pushover' => 'Log pushover messages sent by the script',
@ -238,16 +243,14 @@ $sm_lang = array(
'settings_notification' => 'Meddelelse indstillinger', 'settings_notification' => 'Meddelelse indstillinger',
'settings_log' => 'Log indstillinger', 'settings_log' => 'Log indstillinger',
'auto_refresh' => 'Genopfrisk automatisk', 'auto_refresh' => 'Genopfrisk automatisk',
'auto_refresh_description' => 'auto_refresh_description' => 'Genopfrisk automatisk serversider.<br><span class="small">Tid i sekunder. Hvis
'Genopfrisk automatisk serversider.<br>'. 0 vil siden ikke genopfriske automatisk</span>',
'<span class="small">'.
'Tid i sekunder. Hvis 0 vil siden ikke genopfriske automatisk'.
'</span>',
'seconds' => 'sekunder', 'seconds' => 'sekunder',
'test' => 'Test', 'test' => 'Test',
'test_email' => 'En e-mail vil blive sendt til den adresse, der er angivet i din brugerprofil.', 'test_email' => 'En e-mail vil blive sendt til den adresse, der er angivet i din brugerprofil.',
'test_sms' => 'En SMS vil blive sendt til det nummer, der er angivet i din brugerprofil.', 'test_sms' => 'En SMS vil blive sendt til det nummer, der er angivet i din brugerprofil.',
'test_pushover' => 'En Pushover notifikation vil blive sendt til brugerens enhed, specificeret i brugerprofilen.', 'test_pushover' => 'En Pushover notifikation vil blive sendt til brugerens enhed, specificeret i
brugerprofilen.',
'send' => 'Send', 'send' => 'Send',
'test_subject' => 'Test', 'test_subject' => 'Test',
'test_message' => 'Test besked', 'test_message' => 'Test besked',
@ -258,24 +261,30 @@ $sm_lang = array(
'sms_error_nomobile' => 'Ikke muligt at sende SMS: Intet gyldigt telefonnummer blev fundet i din profil.', 'sms_error_nomobile' => 'Ikke muligt at sende SMS: Intet gyldigt telefonnummer blev fundet i din profil.',
'pushover_sent' => 'Pushover notifikation blev sendt', 'pushover_sent' => 'Pushover notifikation blev sendt',
'pushover_error' => 'En fejl opstod under afsendelse af Pushover notifikation: %s', 'pushover_error' => 'En fejl opstod under afsendelse af Pushover notifikation: %s',
'pushover_error_noapp' => 'Ikke muligt at sende test notifikation: Intet Pushover App API token fundet i den globale konfiguration.', 'pushover_error_noapp' => 'Ikke muligt at sende test notifikation: Intet Pushover App API token fundet i den
globale konfiguration.',
'pushover_error_nokey' => 'Ikke muligt at sende test notifikation: Ingen Pushover key fundet i din profil.', 'pushover_error_nokey' => 'Ikke muligt at sende test notifikation: Ingen Pushover key fundet i din profil.',
'log_retention_period' => 'Logs gemmes', 'log_retention_period' => 'Logs gemmes',
'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.', '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.',
'log_retention_days' => 'dage', 'log_retention_days' => 'dage',
), ),
// for newlines in the email messages use <br>
'notifications' => array( 'notifications' => array(
'off_sms' => 'Serveren \'%LABEL%\' er NEDE: ip=%IP%, port=%PORT%. Fejl=%ERROR%', 'off_sms' => 'Serveren \'%LABEL%\' er NEDE: ip=%IP%, port=%PORT%. Fejl=%ERROR%',
'off_email_subject' => 'VIGTIGT: Server \'%LABEL%\' er NEDE', '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%", '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%',
'off_pushover_title' => 'Serveren \'%LABEL%\' er NEDE', 'off_pushover_title' => 'Serveren \'%LABEL%\' er NEDE',
'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_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%',
'on_sms' => 'Serveren \'%LABEL%\' KØRER: ip=%IP%, port=%PORT%, it was down for %LAST_OFFLINE_DURATION%', 'on_sms' => 'Serveren \'%LABEL%\' KØRER: ip=%IP%, port=%PORT%, it was down for %LAST_OFFLINE_DURATION%',
'on_email_subject' => 'VIGTIGT: Serveren \'%LABEL%\' KØRER', 'on_email_subject' => 'VIGTIGT: Serveren \'%LABEL%\' KØRER',
'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%", '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%',
'on_pushover_title' => 'Serveren \'%LABEL%\' KØRER', 'on_pushover_title' => 'Serveren \'%LABEL%\' KØRER',
'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%", '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%',
), ),
'login' => array( 'login' => array(
'welcome_usermenu' => 'Velkommen, %user_name%', 'welcome_usermenu' => 'Velkommen, %user_name%',
@ -292,12 +301,14 @@ $sm_lang = array(
'password_forgot' => 'Glemt adgangskode?', 'password_forgot' => 'Glemt adgangskode?',
'password_reset' => 'Nulstil adgangskode', 'password_reset' => 'Nulstil adgangskode',
'password_reset_email_subject' => 'Nulstil din adgangskode for PHP Server Monitor', 'password_reset_email_subject' => 'Nulstil din adgangskode for PHP Server Monitor',
'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%', '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%',
'error_user_incorrect' => 'Det angivet brugernavn kunne ikke findes.', 'error_user_incorrect' => 'Det angivet brugernavn kunne ikke findes.',
'error_login_incorrect' => 'Oplysningerne stemmer ikke overens.', 'error_login_incorrect' => 'Oplysningerne stemmer ikke overens.',
'error_login_passwords_nomatch' => 'De angivne adgangskoder er ikke ens.', 'error_login_passwords_nomatch' => 'De angivne adgangskoder er ikke ens.',
'error_reset_invalid_link' => 'Følgende link er ugyldigt.', '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_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.', 'success_password_reset' => 'Din adgangskode er blevet nulstillet. Log venligst ind igen.',
), ),
'error' => array( 'error' => array(

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,7 +28,11 @@
$sm_lang = array( $sm_lang = array(
'name' => 'Deutsch - German', 'name' => 'Deutsch - German',
'locale' => array('de_DE.UTF-8', 'de_DE', 'german'), 'locale' => array(
'0' => 'de_DE.UTF-8',
'1' => 'de_DE',
'2' => 'german',
),
'locale_tag' => 'de', 'locale_tag' => 'de',
'locale_dir' => 'ltr', 'locale_dir' => 'ltr',
'system' => array( 'system' => array(
@ -43,12 +48,13 @@ $sm_lang = array(
'no' => 'Nein', 'no' => 'Nein',
'insert' => 'Einfügen', 'insert' => 'Einfügen',
'add_new' => 'Neuen Eintrag erstellen', 'add_new' => 'Neuen Eintrag erstellen',
'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>.', '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>.',
'back_to_top' => 'nach oben', 'back_to_top' => 'nach oben',
'go_back' => 'Zurück', 'go_back' => 'Zurück',
'ok' => 'OK', 'ok' => 'OK',
'cancel' => 'Abbrechen', 'cancel' => 'Abbrechen',
// date/time format according the strftime php function format parameter http://php.net/manual/function.strftime.php
'short_day_format' => '%B %e', 'short_day_format' => '%B %e',
'long_day_format' => '%B %e, %Y', 'long_day_format' => '%B %e, %Y',
'yesterday_format' => 'Gestern um %k:%M Uhr', 'yesterday_format' => 'Gestern um %k:%M Uhr',
@ -60,18 +66,6 @@ $sm_lang = array(
'a_minute_ago' => 'vor über einer Minute', 'a_minute_ago' => 'vor über einer Minute',
'seconds_ago' => 'vor %d Sekunden', 'seconds_ago' => 'vor %d Sekunden',
'a_second_ago' => 'vor über einer Sekunde', 'a_second_ago' => 'vor über einer Sekunde',
'year' => 'year',
'years' => 'years',
'month' => 'month',
'months' => 'months',
'day' => 'day',
'days' => 'days',
'hour' => 'hour',
'hours' => 'hours',
'minute' => 'minute',
'minutes' => 'minutes',
'second' => 'second',
'seconds' => 'seconds',
), ),
'menu' => array( 'menu' => array(
'config' => 'Einstellungen', 'config' => 'Einstellungen',
@ -92,14 +86,19 @@ $sm_lang = array(
'level' => 'Berechtigungsstufe', 'level' => 'Berechtigungsstufe',
'level_10' => 'Administrator', 'level_10' => 'Administrator',
'level_20' => 'Benutzer', 'level_20' => 'Benutzer',
'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.', '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.',
'mobile' => 'Mobil', 'mobile' => 'Mobil',
'email' => 'E-Mail', 'email' => 'E-Mail',
'pushover' => 'Pushover', 'pushover' => 'Pushover',
'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_description' => 'Pushover ist ein Dienst, der es stark vereinfacht, Statusbenachrichtigungen in
Echtzeit zu erhalten. Besuchen Sie <a href="https://pushover.net/"
target="_blank">pushover.net</a> für weitere Informationen.',
'pushover_key' => 'Pushover Key/Schlüssel', 'pushover_key' => 'Pushover Key/Schlüssel',
'pushover_device' => 'Pushover Gerät', 'pushover_device' => 'Pushover Gerät',
'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.', '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_title' => 'Benutzer löschen', 'delete_title' => 'Benutzer löschen',
'delete_message' => 'Sind Sie sicher, dass Sie den Benutzer \'%1\' löschen wollen?', 'delete_message' => 'Sind Sie sicher, dass Sie den Benutzer \'%1\' löschen wollen?',
'deleted' => 'Benutzer gelöscht.', 'deleted' => 'Benutzer gelöscht.',
@ -108,7 +107,8 @@ $sm_lang = array(
'profile' => 'Profileinstellungen', 'profile' => 'Profileinstellungen',
'profile_updated' => 'Ihr Profil wurde aktualisiert.', 'profile_updated' => 'Ihr Profil wurde aktualisiert.',
'error_user_name_bad_length' => 'Benutzernamen müssen zwischen 2 und 64 Zeichen lang sein.', 'error_user_name_bad_length' => 'Benutzernamen müssen zwischen 2 und 64 Zeichen lang sein.',
'error_user_name_invalid' => 'Der Benutzername darf nur alphanumerische Zeichen (a-z, A-Z), Zahlen (0-9), 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.',
@ -142,7 +142,8 @@ $sm_lang = array(
'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 markiert. Reguläre Ausdrücke sind erlaubt.', 'pattern_description' => 'Wenn das gesuchte Muster nicht in der Webseite ist, wird die Seite als offline
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',
@ -170,10 +171,10 @@ $sm_lang = array(
'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
markiert wird.',
'chart_last_week' => 'Letzte Woche', 'chart_last_week' => 'Letzte Woche',
'chart_history' => 'Historie', 'chart_history' => 'Historie',
// 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 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',
@ -187,7 +188,8 @@ $sm_lang = array(
'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( 'config' => array(
'general' => 'Allgemein', 'general' => 'Allgemein',
@ -210,24 +212,27 @@ $sm_lang = array(
'sms_gateway_password' => 'Gateway Passwort', 'sms_gateway_password' => 'Gateway Passwort',
'sms_from' => 'SMS-Sendernummer', 'sms_from' => 'SMS-Sendernummer',
'pushover_status' => 'Ermögliche das Senden von Pushover-Nachrichten', 'pushover_status' => 'Ermögliche das Senden von Pushover-Nachrichten',
'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_description' => 'Pushover ist ein Dienst, der es stark vereinfacht, Statusbenachrichtigungen in
Echtzeit zu erhalten. Besuchen Sie <a href="https://pushover.net/"
target="_blank">pushover.net</a> für weitere Informationen.',
'pushover_clone_app' => 'Klicken Sie hier, um Ihre Pushover-Anwendung zu erstellen', 'pushover_clone_app' => 'Klicken Sie hier, um Ihre Pushover-Anwendung zu erstellen',
'pushover_api_token' => 'Pushover-Anwendungs-API-Token', 'pushover_api_token' => 'Pushover-Anwendungs-API-Token',
'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.', '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.',
'alert_type' => 'Wann möchten Sie benachrichtigt werden?', 'alert_type' => 'Wann möchten Sie benachrichtigt werden?',
'alert_type_description' => '<b>Status geändert:</b> '. 'alert_type_description' => '<b>Status geändert:</b> ... wenn sich der Status ändert<br>z. B. online ->
'... wenn sich der Status ändert<br>'. offline oder offline -> online.<br><br><b>Offline: </b>Sie bekommen eine
'z. B. online -> offline oder offline -> online.<br>'. Benachrichtigung, wenn ein Server offline ist.<br>Es wird nur eine Mitteilung
'<br><b>Offline: </b>'. versendet.<br><br><b>Immer: </b>Sie erhalten jedes Mal eine Benachrichtigung,
'Sie bekommen eine Benachrichtigung, wenn ein Server offline ist.<br>'. sobald der CronJob oder das Skript ausgeführt werden, auch wenn der Dienst
'Es wird nur eine Mitteilung versendet.<br>'. mehrere Stunden offline sein sollte.',
'<br><b>Immer: </b>'.
'Sie erhalten jedes Mal eine Benachrichtigung, sobald der CronJob oder das Skript ausgeführt werden, auch wenn der Dienst mehrere Stunden offline sein sollte.',
'alert_type_status' => 'Status geändert', 'alert_type_status' => 'Status geändert',
'alert_type_offline' => 'Offline', 'alert_type_offline' => 'Offline',
'alert_type_always' => 'Immer', 'alert_type_always' => 'Immer',
'log_status' => 'Protokollierung aktivieren?', 'log_status' => 'Protokollierung aktivieren?',
'log_status_description' => 'Ist die Protokollierung aktiviert (d.h. ist ein Haken gesetzt), wird jeder Status und jede Meldung vom System protokolliert.', 'log_status_description' => 'Ist die Protokollierung aktiviert (d.h. ist ein Haken gesetzt), wird jeder Status
und jede Meldung vom System protokolliert.',
'log_email' => 'E-Mail-Versand protokollieren?', 'log_email' => 'E-Mail-Versand protokollieren?',
'log_sms' => 'SMS-Versand protokollieren?', 'log_sms' => 'SMS-Versand protokollieren?',
'log_pushover' => 'Pushover-Versand protokollieren?', 'log_pushover' => 'Pushover-Versand protokollieren?',
@ -241,16 +246,15 @@ $sm_lang = array(
'settings_notification' => 'Benachrichtigungseinstellungen', 'settings_notification' => 'Benachrichtigungseinstellungen',
'settings_log' => 'Protokollierungseinstellungen', 'settings_log' => 'Protokollierungseinstellungen',
'auto_refresh' => 'Automatische Aktualisierung', 'auto_refresh' => 'Automatische Aktualisierung',
'auto_refresh_description' => 'auto_refresh_description' => 'Automatische Aktualisierung der Server-Übersichtsseite<br><span
'Automatische Aktualisierung der Server-Übersichtsseite<br>'. class="small">Zeit in Sekunden - die Ziffer \'0\' deaktiviert die automatische
'<span class="small">'. Aktualisierung.</span>',
'Zeit in Sekunden - die Ziffer \'0\' deaktiviert die automatische Aktualisierung.'.
'</span>',
'seconds' => 'Sekunden', 'seconds' => 'Sekunden',
'test' => 'Test', 'test' => 'Test',
'test_email' => 'Eine E-Mail wird an die E-Mail-Adresse gesendet, die in Ihrem Profil hinterlegt ist.', 'test_email' => 'Eine E-Mail wird an die E-Mail-Adresse gesendet, die in Ihrem Profil hinterlegt ist.',
'test_sms' => 'Eine SMS wird an die Telefonnummer gesendet, die in Ihrem Profil hinterlegt ist.', 'test_sms' => 'Eine SMS wird an die Telefonnummer gesendet, die in Ihrem Profil hinterlegt ist.',
'test_pushover' => 'Eine Pushover-Benachrichtigung wird an den Schlüssel/das Gerät gesendet, welche(s) in Ihrem Profil hinterlegt ist.', 'test_pushover' => 'Eine Pushover-Benachrichtigung wird an den Schlüssel/das Gerät gesendet, welche(s) in
Ihrem Profil hinterlegt ist.',
'send' => 'Senden', 'send' => 'Senden',
'test_subject' => 'Test', 'test_subject' => 'Test',
'test_message' => 'Testnachricht', 'test_message' => 'Testnachricht',
@ -258,27 +262,40 @@ $sm_lang = array(
'email_error' => 'Beim Versand der E-Mail trat ein Fehler auf.', 'email_error' => 'Beim Versand der E-Mail trat ein Fehler auf.',
'sms_sent' => 'SMS-Nachricht gesendet.', 'sms_sent' => 'SMS-Nachricht gesendet.',
'sms_error' => 'Beim Versand der SMS-Nachricht trat ein Fehler auf. %s', 'sms_error' => 'Beim Versand der SMS-Nachricht trat ein Fehler auf. %s',
'sms_error_nomobile' => 'Versand der SMS-Nachricht nicht möglich: Es wurde keine gültige Telefonnummer in Ihrem Profil hinterlegt.', 'sms_error_nomobile' => 'Versand der SMS-Nachricht nicht möglich: Es wurde keine gültige Telefonnummer in
Ihrem Profil hinterlegt.',
'pushover_sent' => 'Pushover-Benachrichtigung versendet', 'pushover_sent' => 'Pushover-Benachrichtigung versendet',
'pushover_error' => 'Beim Versand der Pushover-Benachrichtigung trat ein Fehler auf: %s', 'pushover_error' => 'Beim Versand der Pushover-Benachrichtigung trat ein Fehler auf: %s',
'pushover_error_noapp' => 'Es konnte keine Testbenachrichtigung versendet werden: Kein Pushover-Anwendungs-API-Token in den allgemeinen Einstellungen hinterlegt.', 'pushover_error_noapp' => 'Es konnte keine Testbenachrichtigung versendet werden: Kein
'pushover_error_nokey' => 'Es konnte keine Testbenachrichtigung versendet werden: Es wurde kein Pushover Key/Schlüssel in Ihrem Profil hinterlegt.', Pushover-Anwendungs-API-Token in den allgemeinen Einstellungen hinterlegt.',
'pushover_error_nokey' => 'Es konnte keine Testbenachrichtigung versendet werden: Es wurde kein Pushover
Key/Schlüssel in Ihrem Profil hinterlegt.',
'log_retention_period' => 'Protokollierungszeitraum', 'log_retention_period' => 'Protokollierungszeitraum',
'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.', '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.',
'log_retention_days' => 'Tage', 'log_retention_days' => 'Tage',
), ),
// for newlines in the email messages use <br>
'notifications' => array( 'notifications' => array(
'off_sms' => 'Dienst/Webseite \'%LABEL%\' ist offline: ip=%IP%, port=%PORT%. Fehler=%ERROR%', 'off_sms' => 'Dienst/Webseite \'%LABEL%\' ist offline: ip=%IP%, port=%PORT%. Fehler=%ERROR%',
'off_email_subject' => 'Warnung: Dienst/Webseite \'%LABEL%\' ist offline.', 'off_email_subject' => 'Warnung: Dienst/Webseite \'%LABEL%\' ist offline.',
'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", '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',
'off_pushover_title' => 'Dienst/Webseite \'%LABEL%\' ist offline.', 'off_pushover_title' => 'Dienst/Webseite \'%LABEL%\' ist offline.',
'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", 'off_pushover_message' => 'Kann keine funktionierende Verbindung zum Dienst bzw. der Webseite
'on_sms' => 'Dienst/Webseite \'%LABEL%\' ist wieder online: ip=%IP%, port=%PORT%, it was down for %LAST_OFFLINE_DURATION%', aufbauen:<br><br>Dienst/Webseite: %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>Fehler:
%ERROR%<br>Datum: %DATE% Uhr',
'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.', 'on_email_subject' => 'Hinweis: Dienst/Webseite \'%LABEL%\' ist wieder online.',
'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", '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',
'on_pushover_title' => 'Dienst/Webseite \'%LABEL%\' ist wieder online.', 'on_pushover_title' => 'Dienst/Webseite \'%LABEL%\' ist wieder online.',
'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", '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',
), ),
'login' => array( 'login' => array(
'welcome_usermenu' => '%user_name%', 'welcome_usermenu' => '%user_name%',
@ -295,16 +312,20 @@ $sm_lang = array(
'password_forgot' => 'Passwort vergessen?', 'password_forgot' => 'Passwort vergessen?',
'password_reset' => 'Passwort zurücksetzen', 'password_reset' => 'Passwort zurücksetzen',
'password_reset_email_subject' => 'Setzen Sie Ihr Zugangspasswort für den Server Monitor', '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%', '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_user_incorrect' => 'Der angegebene Benutzername konnte nicht gefunden werden.',
'error_login_incorrect' => 'Die angegebenen Informationen sind leider nicht korrekt.', 'error_login_incorrect' => 'Die angegebenen Informationen sind leider nicht korrekt.',
'error_login_passwords_nomatch' => 'Die angegebenen Passwörter stimmen nicht überein.', '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.', '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_forgot' => 'Eine Nachricht wurde an Ihre E-Mail-Adresse versendet. Sie beschreibt, wie Sie
'success_password_reset' => 'Ihr Passwort wurde erfolgreich zurückgesetzt. Bitte versuchen Sie, sich erneut anzumelden.', Ihr Passwort zurücksetzen können.',
'success_password_reset' => 'Ihr Passwort wurde erfolgreich zurückgesetzt. Bitte versuchen Sie, sich erneut
anzumelden.',
), ),
'error' => array( 'error' => array(
'401_unauthorized' => 'Nicht autorisiert', '401_unauthorized' => 'Nicht autorisiert',
'401_unauthorized_description' => 'Sie haben nicht die erforderlichen Zugriffsrechte, um diese Seite aufzurufen.', '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.
@ -27,7 +28,12 @@
$sm_lang = array( $sm_lang = array(
'name' => 'English', 'name' => 'English',
'locale' => array('en_US.UTF-8', 'en_US', 'american', 'english-us'), 'locale' => array(
'0' => 'en_US.UTF-8',
'1' => 'en_US',
'2' => 'american',
'3' => 'english-us',
),
'locale_tag' => 'en', 'locale_tag' => 'en',
'locale_dir' => 'ltr', 'locale_dir' => 'ltr',
'system' => array( 'system' => array(
@ -44,7 +50,9 @@ $sm_lang = array(
'no' => 'No', 'no' => 'No',
'insert' => 'Insert', 'insert' => 'Insert',
'add_new' => 'Add new', 'add_new' => 'Add new',
'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.', '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.',
'back_to_top' => 'Back to top', 'back_to_top' => 'Back to top',
'go_back' => 'Go back', 'go_back' => 'Go back',
'ok' => 'OK', 'ok' => 'OK',
@ -52,7 +60,6 @@ $sm_lang = array(
'cancel' => 'Cancel', 'cancel' => 'Cancel',
'none' => 'None', 'none' => 'None',
'activate' => 'Activate', 'activate' => 'Activate',
// date/time format according the strftime php function format parameter http://php.net/manual/function.strftime.php
'short_day_format' => '%B %e', 'short_day_format' => '%B %e',
'long_day_format' => '%B %e, %Y', 'long_day_format' => '%B %e, %Y',
'yesterday_format' => 'Yesterday at %k:%M', 'yesterday_format' => 'Yesterday at %k:%M',
@ -78,7 +85,7 @@ $sm_lang = array(
'seconds' => 'seconds', 'seconds' => 'seconds',
'current' => 'current', 'current' => 'current',
'settings' => 'Settings', 'settings' => 'Settings',
'search' => 'Search' 'search' => 'Search',
), ),
'menu' => array( 'menu' => array(
'config' => 'Config', 'config' => 'Config',
@ -99,24 +106,36 @@ $sm_lang = array(
'level' => 'Level', 'level' => 'Level',
'level_10' => 'Administrator', 'level_10' => 'Administrator',
'level_20' => 'User', 'level_20' => 'User',
'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.', '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.',
'mobile' => 'Mobile', 'mobile' => 'Mobile',
'email' => 'Email', 'email' => 'Email',
'pushover' => 'Pushover', 'pushover' => 'Pushover',
'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_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_key' => 'Pushover Key', 'pushover_key' => 'Pushover Key',
'pushover_device' => 'Pushover Device', 'pushover_device' => 'Pushover Device',
'pushover_device_description' => 'Device name to send the message to. Leave empty to send it to all devices.', 'pushover_device_description' => 'Device name to send the message to. Leave empty to send it to all devices.',
'telegram' => 'Telegram', 'telegram' => 'Telegram',
'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.', '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_chat_id' => 'Telegram chat id', 'telegram_chat_id' => 'Telegram chat id',
'telegram_chat_id_description' => 'The message will be send to the corresponding chat.', 'telegram_chat_id_description' => 'The message will be send to the corresponding chat.',
'telegram_get_chat_id' => 'Click here to get your chat id', 'telegram_get_chat_id' => 'Click here to get your chat id',
'activate_telegram' => 'Activate Telegram notifications', 'activate_telegram' => 'Activate Telegram notifications',
'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.', 'activate_telegram_description' => 'Allow Telegram notifications to be sent to the specified chat id. Without
'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.', this permission, Telegram doesn\'t allow us to send notifications to you.',
'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 or type /start.',
'telegram_bot_username_error_token' => '401 - Unauthorized. Please make sure that the API token is valid.', 'telegram_bot_username_error_token' => '401 - Unauthorized. Please make sure that the API token is valid.',
'telegram_bot_error' => 'An error has occurred while activating Telegram notification: %s', 'telegram_bot_error' => 'An error has occurred while activating Telegram notification: %s',
'jabber' => 'Jabber',
'jabber_label' => 'Jabber',
'jabber_description' => 'You Jabber account',
'delete_title' => 'Delete User', 'delete_title' => 'Delete User',
'delete_message' => 'Are you sure you want to delete user \'%1\'?', 'delete_message' => 'Are you sure you want to delete user \'%1\'?',
'deleted' => 'User deleted.', 'deleted' => 'User deleted.',
@ -125,7 +144,8 @@ $sm_lang = array(
'profile' => 'Profile', 'profile' => 'Profile',
'profile_updated' => 'Your profile has been updated.', 'profile_updated' => 'Your profile has been updated.',
'error_user_name_bad_length' => 'Usernames must be between 2 and 64 characters.', 'error_user_name_bad_length' => 'Usernames must be between 2 and 64 characters.',
'error_user_name_invalid' => 'The username may only contain alphabetic characters (a-z, A-Z), digits (0-9), dots (.) and underscores (_).', 'error_user_name_invalid' => 'The username may only contain alphabetic characters (a-z, A-Z), digits (0-9),
dots (.) and underscores (_).',
'error_user_name_exists' => 'The given username already exists in the database.', '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.', 'error_user_email_bad_length' => 'Email addresses must be between 5 and 255 characters.',
'error_user_email_invalid' => 'The email address is invalid.', 'error_user_email_invalid' => 'The email address is invalid.',
@ -133,6 +153,7 @@ $sm_lang = array(
'error_user_no_match' => 'The user could not be found in the database.', 'error_user_no_match' => 'The user could not be found in the database.',
'error_user_password_invalid' => 'The entered password is invalid.', 'error_user_password_invalid' => 'The entered password is invalid.',
'error_user_password_no_match' => 'The entered passwords do not match.', 'error_user_password_no_match' => 'The entered passwords do not match.',
'error_user_admin_cant_be_deleted' => 'You can\'t remove the last administrator.',
), ),
'log' => array( 'log' => array(
'title' => 'Log entries', 'title' => 'Log entries',
@ -142,6 +163,7 @@ $sm_lang = array(
'sms' => 'SMS', 'sms' => 'SMS',
'pushover' => 'Pushover', 'pushover' => 'Pushover',
'telegram' => 'Telegram', 'telegram' => 'Telegram',
'jabber' => 'Jabber',
'no_logs' => 'No logs', 'no_logs' => 'No logs',
'clear' => 'Clear log', 'clear' => 'Clear log',
'delete_title' => 'Delete log', 'delete_title' => 'Delete log',
@ -177,13 +199,17 @@ $sm_lang = array(
'type_service' => 'Service', 'type_service' => 'Service',
'type_ping' => 'Ping', 'type_ping' => 'Ping',
'pattern' => 'Search string/pattern', 'pattern' => 'Search string/pattern',
'pattern_description' => 'If this pattern is not found on the website, the server will be marked online/offline. Regular expressions are allowed.', 'pattern_description' => 'If this pattern is not found on the website, the server will be marked
online/offline. Regular expressions are allowed.',
'pattern_online' => 'Pattern indicates website is', 'pattern_online' => 'Pattern indicates website is',
'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.', 'pattern_online_description' => 'Online: If this pattern was found on the website, the server will be marked
online. Offline: If this pattern was not found on the website, the server
will be marked offline.',
'redirect_check' => 'Redirecting to another domain is', 'redirect_check' => 'Redirecting to another domain is',
'redirect_check_description' => 'Redirect to another domain is usually a bad sign.', 'redirect_check_description' => 'Redirect to another domain is usually a bad sign.',
'allow_http_status' => 'Allow HTTP status code', 'allow_http_status' => 'Allow HTTP status code',
'allow_http_status_description' => 'Mark website as online. HTTP Status codes lower then 400 are marked as online by default. Seperate with |.', 'allow_http_status_description' => 'Mark website as online. HTTP Status codes lower then 400 are marked as
online by default. Seperate with |.',
'header_name' => 'Header name', 'header_name' => 'Header name',
'header_value' => 'Header value', 'header_value' => 'Header value',
'header_name_description' => 'Case-sensitive.', 'header_name_description' => 'Case-sensitive.',
@ -205,6 +231,8 @@ $sm_lang = array(
'send_pushover' => 'Send Pushover notification', 'send_pushover' => 'Send Pushover notification',
'telegram' => 'Telegram', 'telegram' => 'Telegram',
'send_telegram' => 'Send Telegram notification', 'send_telegram' => 'Send Telegram notification',
'jabber' => 'Jabber',
'send_jabber' => 'Send Jabber notification',
'users' => 'Users', 'users' => 'Users',
'delete_title' => 'Delete server', 'delete_title' => 'Delete server',
'delete_message' => 'Are you sure you want to delete server \'%1\'?', 'delete_message' => 'Are you sure you want to delete server \'%1\'?',
@ -225,9 +253,13 @@ $sm_lang = array(
'hour' => 'Hour', 'hour' => 'Hour',
'warning_threshold' => 'Warning threshold', 'warning_threshold' => 'Warning threshold',
'warning_threshold_description' => 'Number of failed checks required before it is marked offline.', 'warning_threshold_description' => 'Number of failed checks required before it is marked offline.',
'ssl_cert_expiry_days' => 'SSL Certificate Validity',
'ssl_cert_expiry_days_description' => 'The minimum remaining days the SSL certificate is still valid. Use 0 to
disable check.',
'ssl_cert_expired' => 'SSL certificate expired since',
'ssl_cert_expiring' => 'SSL certificate expiring:',
'chart_last_week' => 'Last week', 'chart_last_week' => 'Last week',
'chart_history' => 'History', '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_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',
@ -236,6 +268,7 @@ $sm_lang = array(
'warning_notifications_disabled_email' => 'Email notifications are disabled.', 'warning_notifications_disabled_email' => 'Email notifications are disabled.',
'warning_notifications_disabled_pushover' => 'Pushover notifications are disabled.', 'warning_notifications_disabled_pushover' => 'Pushover notifications are disabled.',
'warning_notifications_disabled_telegram' => 'Telegram notifications are disabled.', 'warning_notifications_disabled_telegram' => 'Telegram notifications are disabled.',
'warning_notifications_disabled_jabber' => 'Jabber notifications are disabled.',
'error_server_no_match' => 'Server not found.', 'error_server_no_match' => 'Server not found.',
'error_server_label_bad_length' => 'The label must be between 1 and 255 characters.', '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_length' => 'The domain / IP must be between 1 and 255 characters.',
@ -243,13 +276,16 @@ $sm_lang = array(
'error_server_ip_bad_website' => 'The website URL 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_type_invalid' => 'The selected server type is invalid.',
'error_server_warning_threshold_invalid' => 'The warning threshold must be a valid integer greater than 0.', 'error_server_warning_threshold_invalid' => 'The warning threshold must be a valid integer greater than 0.',
'error_server_ssl_cert_expiry_days' => 'The remaining days for SSL certificate validity must be a valid
integer greater than or equal to 0.',
), ),
'config' => array( 'config' => array(
'general' => 'General', 'general' => 'General',
'language' => 'Language', 'language' => 'Language',
'show_update' => 'Check for updates?', 'show_update' => 'Check for updates?',
'password_encrypt_key' => 'The encryption key password', 'password_encrypt_key' => 'The encryption key password',
'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!', '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!',
'proxy' => 'Enable proxy', 'proxy' => 'Enable proxy',
'proxy_url' => 'Proxy URL', 'proxy_url' => 'Proxy URL',
'proxy_user' => 'Proxy username', 'proxy_user' => 'Proxy username',
@ -271,60 +307,86 @@ $sm_lang = array(
'sms_gateway_password' => 'Gateway password', 'sms_gateway_password' => 'Gateway password',
'sms_from' => 'Sender\'s phone number', 'sms_from' => 'Sender\'s phone number',
'pushover_status' => 'Allow sending Pushover messages', '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_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_clone_app' => 'Click here to create your Pushover app',
'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" rel="noopener">register an App</a> at their website and enter the App API Token here.', '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_status' => 'Allow sending Telegram messages',
'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.', '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' => '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.', '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' => 'Select when you\'d like to be notified.',
'alert_type_description' => '<b>Status change:</b> '. 'alert_type_description' => '<b>Status change:</b> You will receive a notification when a server has a change
'You will receive a notification when a server has a change in status. So from online -> offline or offline -> online.<br>'. in status. So from online -> offline or offline -> online.<br><br><b>Offline:</b>
'<br><b>Offline:</b> '. You will receive a notification when a server goes offline for the *FIRST TIME
'You will receive a notification when a server goes offline for the *FIRST TIME ONLY*. For example, '. ONLY*. For example, your cronjob is every 15 minutes and your server goes down at
'your cronjob is every 15 minutes and your server goes down at 1 am and stays down till 6 am. '. 1 am and stays down till 6 am. You will get 1 notification at 1 am and that\'s
'You will get 1 notification at 1 am and that\'s it.<br>'. it.<br><br><b>Always:</b> You will receive a notification every time the script
'<br><b>Always:</b> '. runs and a site is down, even if the site has been offline for hours.',
'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_status' => 'Status change',
'alert_type_offline' => 'Offline', 'alert_type_offline' => 'Offline',
'alert_type_always' => 'Always', '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
1 single notification. (This does not affect SMS notifications.)',
'alert_proxy' => 'Even if enabled, proxy is never used for services', 'alert_proxy' => 'Even if enabled, proxy is never used for services',
'alert_proxy_url' => 'Format: host:port', 'alert_proxy_url' => 'Format: host:port',
'log_status' => 'Log status', 'log_status' => 'Log status',
'log_status_description' => 'If log status is set to TRUE, the monitor will log the event whenever the notification settings are passed.', 'log_status_description' => 'If log status is set to TRUE, the monitor will log the event whenever the
notification settings are passed.',
'log_email' => 'Log emails sent by the script', 'log_email' => 'Log emails sent by the script',
'log_sms' => 'Log text messages sent by the script', 'log_sms' => 'Log text messages sent by the script',
'log_pushover' => 'Log pushover messages sent by the script', 'log_pushover' => 'Log pushover messages sent by the script',
'log_telegram' => 'Log Telegram messages sent by the script', 'log_telegram' => 'Log Telegram messages sent by the script',
'log_jabber' => 'Log Jabber messages sent by the script',
'updated' => 'The configuration has been updated.', 'updated' => 'The configuration has been updated.',
'tab_email' => 'Email', 'tab_email' => 'Email',
'tab_sms' => 'SMS', 'tab_sms' => 'SMS',
'tab_pushover' => 'Pushover', 'tab_pushover' => 'Pushover',
'tab_telegram' => 'Telegram', 'tab_telegram' => 'Telegram',
'tab_jabber' => 'Jabber',
'settings_email' => 'Email settings', 'settings_email' => 'Email settings',
'settings_sms' => 'Text message settings', 'settings_sms' => 'Text message settings',
'settings_pushover' => 'Pushover settings', 'settings_pushover' => 'Pushover settings',
'settings_telegram' => 'Telegram settings', 'settings_telegram' => 'Telegram settings',
'settings_jabber' => 'Jabber settings',
'settings_notification' => 'Notification settings', 'settings_notification' => 'Notification settings',
'settings_log' => 'Log settings', 'settings_log' => 'Log settings',
'settings_proxy' => 'Proxy settings', 'settings_proxy' => 'Proxy settings',
'auto_refresh' => 'Auto-refresh', 'auto_refresh' => 'Auto-refresh',
'auto_refresh_description' => 'auto_refresh_description' => 'Auto-refresh servers page.<br><span class="small">Time in seconds, if 0 the
'Auto-refresh servers page.<br>'. page won\'t refresh.</span>',
'<span class="small">'.
'Time in seconds, if 0 the page won\'t refresh.'.
'</span>',
'seconds' => 'seconds', 'seconds' => 'seconds',
'test' => 'Test', 'test' => 'Test',
'test_email' => 'An email will be sent to the address specified in your user profile.', '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_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.', 'test_pushover' => 'A Pushover notification will be sent to the user key/device specified in your user
profile.',
'test_telegram' => 'A Telegram notification will be sent to the chat id specified in your user profile.', 'test_telegram' => 'A Telegram notification will be sent to the chat id specified in your user profile.',
'test_jabber' => 'A Jabber notification will be sent to the jabber account specified in your user profile.',
'send' => 'Send', 'send' => 'Send',
'test_subject' => 'Test', 'test_subject' => 'Test',
'test_message' => 'Test message', 'test_message' => 'Test message',
@ -335,41 +397,78 @@ $sm_lang = array(
'sms_error_nomobile' => 'Unable to send test SMS: no valid phone number found in your profile.', 'sms_error_nomobile' => 'Unable to send test SMS: no valid phone number found in your profile.',
'pushover_sent' => 'Pushover notification sent', 'pushover_sent' => 'Pushover notification sent',
'pushover_error' => 'An error has occurred while sending the Pushover notification: %s', '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_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.', 'pushover_error_nokey' => 'Unable to send test notification: no Pushover key found in your profile.',
'telegram_sent' => 'Telegram notification sent', 'telegram_sent' => 'Telegram notification sent',
'telegram_error' => 'An error has occurred while sending the Telegram notification: %s', '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 configuration.', 'telegram_error_notoken' => 'Unable to send test notification: no Telegram API token found in the global
configuration.',
'telegram_error_noid' => 'Unable to send test notification: no chat id found in your profile.', 'telegram_error_noid' => 'Unable to send test notification: no chat id found in your profile.',
'jabber_sent' => 'Telegram notification sent',
'jabber_error' => 'An error has occurred while sending the Telegram notification: %s',
'jabber_error_noconfig' => 'Unable to send test notification: no Jabber account set in the global
configuration.',
'jabber_error_noaccount' => 'Unable to send test notification: no Jabber account found in your profile.',
'log_retention_period' => 'Log retention period', '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_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', 'log_retention_days' => 'days',
), ),
// for newlines in the email messages use <br>
'notifications' => array( 'notifications' => array(
'off_sms' => 'Server \'%LABEL%\' is DOWN: ip=%IP%, port=%PORT%. Error=%ERROR%', 'off_sms' => 'Server \'%LABEL%\' is DOWN: ip=%IP%, port=%PORT%. Error=%ERROR%',
'off_email_subject' => 'IMPORTANT: Server \'%LABEL%\' is DOWN', 'off_email_subject' => 'IMPORTANT: Server \'%LABEL%\' is DOWN',
'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%", '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%',
'off_pushover_title' => 'Server \'%LABEL%\' is DOWN', 'off_pushover_title' => 'Server \'%LABEL%\' is DOWN',
'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%", 'off_pushover_message' => 'Failed to connect to the following server:<br><br>Server: %LABEL%<br>IP:
'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%", %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_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_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_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_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_pushover_message' => 'Server \'%LABEL%\' is running again, it was down for
'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%', %LAST_OFFLINE_DURATION%:<br><br>Server: %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>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>", %DATE%',
'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>", 'on_telegram_message' => 'Server \'%LABEL%\' is running again, it was down for:
'combi_off_telegram_message' => "- Server: %LABEL%<br>- IP: %IP%<br>- Port: %PORT%<br>- Error: %ERROR%<br>- Date: %DATE%<br><br>", %LAST_OFFLINE_DURATION%<br><br>Server: %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>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>", %DATE%',
'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>', 'on_jabber_message' => 'Server \'%LABEL%\' is running again, it was down for:
'combi_on_telegram_message' => '- Server: %LABEL%<br>- IP: %IP%<br>- Port: %PORT%<br>- Downtime: %LAST_OFFLINE_DURATION%<br>- Date: %DATE%<br><br>', %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%',
'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_jabber_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( 'login' => array(
'welcome_usermenu' => 'Welcome, %user_name%', 'welcome_usermenu' => 'Welcome, %user_name%',
@ -386,7 +485,8 @@ $sm_lang = array(
'password_forgot' => 'Forgot password?', 'password_forgot' => 'Forgot password?',
'password_reset' => 'Reset password', 'password_reset' => 'Reset password',
'password_reset_email_subject' => 'Reset your password for PHP Server Monitor', '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%', '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_user_incorrect' => 'The provided username could not be found.',
'error_login_incorrect' => 'The information is incorrect.', 'error_login_incorrect' => 'The information is incorrect.',
'error_login_passwords_nomatch' => 'The provided passwords do not match.', 'error_login_passwords_nomatch' => 'The provided passwords do not match.',

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 @@
* @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(
@ -51,7 +53,9 @@ $sm_lang = array(
'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
href="https://github.com/phpservermon/phpservermon/releases/latest" target="_blank"
rel="noopener">http://www.phpservermonitor.org</a>.',
'back_to_top' => 'Volver arriba', 'back_to_top' => 'Volver arriba',
'go_back' => 'Volver', 'go_back' => 'Volver',
'ok' => 'Bueno', 'ok' => 'Bueno',
@ -105,22 +109,34 @@ $sm_lang = array(
'level' => 'Nivel', 'level' => 'Nivel',
'level_10' => 'Administrador', 'level_10' => 'Administrador',
'level_20' => 'Usuarios', 'level_20' => 'Usuarios',
'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_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.',
'mobile' => 'Móvil', 'mobile' => 'Móvil',
'email' => 'Email', 'email' => 'Email',
'pushover' => 'Pushover', 'pushover' => 'Pushover',
'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.', 'pushover_description' => 'Pushover es un servicio que hace que sea fácil de obtener notificaciones en tiempo
real. Vea <a href="https://pushover.net/" target="_blank"> su página web </a> para
más información.',
'pushover_key' => 'Clave Pushover', 'pushover_key' => 'Clave Pushover',
'pushover_device' => 'Dispositivo Pushover', 'pushover_device' => 'Dispositivo Pushover',
'pushover_device_description' => 'Nombre del dispositivo para enviar el mensaje. Dejar en blanco para enviarlo a todos los dispositivos.', 'pushover_device_description' => 'Nombre del dispositivo para enviar el mensaje. Dejar en blanco para enviarlo
a todos los dispositivos.',
'telegram' => 'Telegram', 'telegram' => 'Telegram',
'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.', '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_chat_id' => 'Telegram chat id', 'telegram_chat_id' => 'Telegram chat id',
'telegram_chat_id_description' => 'El mensaje será enviado al chat correspondiente.', 'telegram_chat_id_description' => 'El mensaje será enviado al chat correspondiente.',
'telegram_get_chat_id' => 'Haga click aquí para obtener su chat id', 'telegram_get_chat_id' => 'Haga click aquí para obtener su chat id',
'activate_telegram' => 'Activar las notificaciones de Telegram', 'activate_telegram' => 'Activar las notificaciones de Telegram',
'activate_telegram_description' => 'Permitir a Telegram enviar notificaciones al chat id especificado. Sin este permiso, Telegram no podrá enviarle mensajes.', 'activate_telegram_description' => 'Permitir a Telegram enviar notificaciones al chat id especificado. Sin
'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.', este permiso, Telegram no podrá enviarle mensajes.',
'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_bot_username_error_token' => '401 - No autorizado. Por favor asegúrese que el Token es válido.', 'telegram_bot_username_error_token' => '401 - No autorizado. Por favor asegúrese que el Token es válido.',
'telegram_bot_error' => 'Ocurrió un error activando las notificaciones de Telegram: %s', 'telegram_bot_error' => 'Ocurrió un error activando las notificaciones de Telegram: %s',
'delete_title' => 'Eliminar usuario', 'delete_title' => 'Eliminar usuario',
@ -131,7 +147,8 @@ $sm_lang = array(
'profile' => 'Perfil', 'profile' => 'Perfil',
'profile_updated' => 'Su perfil ha sido actualizado.', 'profile_updated' => 'Su perfil ha sido actualizado.',
'error_user_name_bad_length' => 'Los nombres de usuario deben tener entre 2 y 64 caracteres.', 'error_user_name_bad_length' => 'Los nombres de usuario deben tener entre 2 y 64 caracteres.',
'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 (_).', '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 (_).',
'error_user_name_exists' => 'El nombre de usuario dado ya existe en la base de datos.', 'error_user_name_exists' => 'El nombre de usuario dado ya existe en la base de datos.',
'error_user_email_bad_length' => 'Direcciones de correo electrónico deben estar entre 5 y 255 caracteres.', 'error_user_email_bad_length' => 'Direcciones de correo electrónico deben estar entre 5 y 255 caracteres.',
'error_user_email_invalid' => 'La dirección de correo electrónico no es válida.', 'error_user_email_invalid' => 'La dirección de correo electrónico no es válida.',
@ -163,9 +180,11 @@ $sm_lang = array(
'authentication_settings' => 'Configuración de autenticación', 'authentication_settings' => 'Configuración de autenticación',
'optional' => 'Opcional', 'optional' => 'Opcional',
'website_username' => 'Nombre de usuario', 'website_username' => 'Nombre de usuario',
'website_username_description' => 'Nombre de usuario para acceder al sitio. (Solo se soporta la autenticación de Apache.)', 'website_username_description' => 'Nombre de usuario para acceder al sitio. (Solo se soporta la autenticación
de Apache.)',
'website_password' => 'Contraseña', 'website_password' => 'Contraseña',
'website_password_description' => 'Contraseña para acceder al sitio. La contraseña se almacenará encriptada en la base de datos.', 'website_password_description' => 'Contraseña para acceder al sitio. La contraseña se almacenará encriptada
en la base de datos.',
'fieldset_monitoring' => 'Monitoreo', 'fieldset_monitoring' => 'Monitoreo',
'fieldset_permissions' => 'Permisos', 'fieldset_permissions' => 'Permisos',
'permissions' => 'El servidor será visible para los siguientes usuarios', 'permissions' => 'El servidor será visible para los siguientes usuarios',
@ -183,13 +202,17 @@ $sm_lang = array(
'type_service' => 'Servicio', 'type_service' => 'Servicio',
'type_ping' => 'Ping', 'type_ping' => 'Ping',
'pattern' => 'Patrón/texto de búsqueda', 'pattern' => 'Patrón/texto de búsqueda',
'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.', '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.',
'pattern_online' => 'El patrón indica si el servidor está:', 'pattern_online' => 'El patrón indica si el servidor está:',
'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.', 'pattern_online_description' => 'En línea: Si el patrón encuentra 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.',
'redirect_check' => 'Redirigir a otra dirección es:', 'redirect_check' => 'Redirigir a otra dirección es:',
'redirect_check_description' => 'Redirigir normalmente es una mala señal.', 'redirect_check_description' => 'Redirigir normalmente es una mala señal.',
'allow_http_status' => 'Permitir revisar el código de estado HTTP', 'allow_http_status' => 'Permitir revisar el código de estado HTTP',
'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 |.', '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 |.',
'header_name' => 'Nombre del encabezado', 'header_name' => 'Nombre del encabezado',
'header_value' => 'Valor del encabezado', 'header_value' => 'Valor del encabezado',
'header_name_description' => 'Respetar mayúsculas y minúsculas.', 'header_name_description' => 'Respetar mayúsculas y minúsculas.',
@ -230,7 +253,8 @@ $sm_lang = array(
'day' => 'Día', 'day' => 'Día',
'hour' => 'Hora', 'hour' => 'Hora',
'warning_threshold' => 'Umbral de advertencia', 'warning_threshold' => 'Umbral de advertencia',
'warning_threshold_description' => 'Número de controles fallidos necesarios antes de que se marque como fuera de línea.', 'warning_threshold_description' => 'Número de controles fallidos necesarios antes de que se marque como fuera
de línea.',
'chart_last_week' => 'Última semana', 'chart_last_week' => 'Última semana',
'chart_history' => 'Historial', 'chart_history' => 'Historial',
'chart_day_format' => '%Y-%m-%d', 'chart_day_format' => '%Y-%m-%d',
@ -254,7 +278,8 @@ $sm_lang = array(
'language' => 'Idioma', 'language' => 'Idioma',
'show_update' => '¿Comprobar actualizaciones?', 'show_update' => '¿Comprobar actualizaciones?',
'password_encrypt_key' => 'Clave cripográfica', 'password_encrypt_key' => 'Clave cripográfica',
'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!', '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!',
'proxy' => 'Activar Proxy', 'proxy' => 'Activar Proxy',
'proxy_url' => 'URL del proxy', 'proxy_url' => 'URL del proxy',
'proxy_user' => 'Usuario', 'proxy_user' => 'Usuario',
@ -276,21 +301,36 @@ $sm_lang = array(
'sms_gateway_password' => 'Contraseña', 'sms_gateway_password' => 'Contraseña',
'sms_from' => 'Número origen del SMS', 'sms_from' => 'Número origen del SMS',
'pushover_status' => '¿Habilitar el envío de mensajes Pushover?', 'pushover_status' => '¿Habilitar el envío de mensajes Pushover?',
'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.', 'pushover_description' => 'Pushover es un servicio que hace que sea fácil de obtener notificaciones en tiempo
real. Vea <a href="https://pushover.net/" target="_blank"> su página web </a> para
más información.',
'pushover_clone_app' => 'Haga clic aquí para crear tu aplicación Pushover', 'pushover_clone_app' => 'Haga clic aquí para crear tu aplicación Pushover',
'pushover_api_token' => 'Token API de Pushover', 'pushover_api_token' => 'Token API de Pushover',
'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.', '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.',
'telegram_status' => '¿Habilitar el envío de mensajes de Telegram?', 'telegram_status' => '¿Habilitar el envío de mensajes de Telegram?',
'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.', 'telegram_description' => '<a href="https://telegram.org/" target="_blank">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/" target="_blank">documentación</a>
para una guía mas detallada.',
'telegram_api_token' => 'Token API de Telegram', 'telegram_api_token' => 'Token API de Telegram',
'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.', 'telegram_api_token_description' => 'Antes de utilizar Telegram, necesita un Token de API. Visite la <a
href="http://docs.phpservermonitor.org/"
target="_blank">documentación</a> para más información.',
'alert_type' => '¿Cuándo desea recibir notificaciones?', 'alert_type' => '¿Cuándo desea recibir notificaciones?',
'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.', '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.',
'alert_type_status' => 'Cambio de estado', 'alert_type_status' => 'Cambio de estado',
'alert_type_offline' => 'Fuera de Línea', 'alert_type_offline' => 'Fuera de Línea',
'alert_type_always' => 'Siempre', 'alert_type_always' => 'Siempre',
'combine_notifications' => 'Combinar notificaciones', 'combine_notifications' => 'Combinar notificaciones',
'combine_notifications_description' => 'Reduce la cantidad de notificaciones combinando los mensajes en una sola notificación. (Esto no afecta a las notificaciones por SMS.)', 'combine_notifications_description' => 'Reduce la cantidad de notificaciones combinando los mensajes en una
sola notificación. (Esto no afecta a las notificaciones por SMS.)',
'alert_proxy' => 'Incluso si está activo, los proxy no se utilizarán para los servicios.', 'alert_proxy' => 'Incluso si está activo, los proxy no se utilizarán para los servicios.',
'alert_proxy_url' => 'Formato: host:puerto', 'alert_proxy_url' => 'Formato: host:puerto',
'log_status' => 'Registro de estados', 'log_status' => 'Registro de estados',
@ -312,13 +352,16 @@ $sm_lang = array(
'settings_log' => 'Configuración de registros', 'settings_log' => 'Configuración de registros',
'settings_proxy' => 'Configuración del proxy', 'settings_proxy' => 'Configuración del proxy',
'auto_refresh' => 'Auto-actualizar', 'auto_refresh' => 'Auto-actualizar',
'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>', '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>',
'seconds' => 'segundos', 'seconds' => 'segundos',
'test' => 'Prueba', 'test' => 'Prueba',
'test_email' => 'Un correo electrónico será enviado a la dirección especificada en su perfil de usuario.', 'test_email' => 'Un correo electrónico será enviado a la dirección especificada en su perfil de usuario.',
'test_sms' => 'Un SMS se enviará al número de teléfono especificado en su perfil de usuario.', 'test_sms' => 'Un SMS se enviará al número de teléfono especificado en su perfil de usuario.',
'test_pushover' => 'Una notificación Pushover será enviada a la clave de usuario / dispositivo especificado en su perfil de usuario.', 'test_pushover' => 'Una notificación Pushover será enviada a la clave de usuario / dispositivo especificado
'test_telegram' => 'Una notificación de Telegram será enviada al chat id especificado en su perfil de usuario.', en su perfil de usuario.',
'test_telegram' => 'Una notificación de Telegram será enviada al chat id especificado en su perfil de
usuario.',
'send' => 'Enviar', 'send' => 'Enviar',
'test_subject' => 'Prueba', 'test_subject' => 'Prueba',
'test_message' => 'Mensaje de prueba', 'test_message' => 'Mensaje de prueba',
@ -326,43 +369,73 @@ $sm_lang = array(
'email_error' => 'Error al enviar el correo', 'email_error' => 'Error al enviar el correo',
'sms_sent' => 'SMS enviado', 'sms_sent' => 'SMS enviado',
'sms_error' => 'Error al enviar el SMS: %s', 'sms_error' => 'Error al enviar el SMS: %s',
'sms_error_nomobile' => 'Imposible enviar el SMS: no se encontró un número de teléfono válido en su perfil.', 'sms_error_nomobile' => 'Imposible enviar el SMS: no se encontró un número de teléfono válido en su
perfil.',
'pushover_sent' => 'Notificación de Pushover enviada', 'pushover_sent' => 'Notificación de Pushover enviada',
'pushover_error' => 'Ocurrió un error enviado la notificación de Pushover: %s', 'pushover_error' => 'Ocurrió un error enviado la notificación de Pushover: %s',
'pushover_error_noapp' => 'No se puede enviar una notificación de prueba: no existe un token API de Pushover en la configuración global.', 'pushover_error_noapp' => 'No se puede enviar una notificación de prueba: no existe un token API de Pushover
'pushover_error_nokey' => 'No se puede enviar una notificación de prueba: no existe ninguna clave de Pushover en su perfil.', en la configuración global.',
'pushover_error_nokey' => 'No se puede enviar una notificación de prueba: no existe ninguna clave de Pushover
en su perfil.',
'telegram_sent' => 'Notificación de Telegram enviada', 'telegram_sent' => 'Notificación de Telegram enviada',
'telegram_error' => 'Ocurrió un error enviado la notificación de Telegram: %s', 'telegram_error' => 'Ocurrió un error enviado la notificación de Telegram: %s',
'telegram_error_notoken' => 'Imposible enviar la notificación: No se encontró un Token de API en la configuración global.', 'telegram_error_notoken' => 'Imposible enviar la notificación: No se encontró un Token de API en la
configuración global.',
'telegram_error_noid' => 'Imposible enviar la notificación: No se encontró un chat id en su perfil.', 'telegram_error_noid' => 'Imposible enviar la notificación: No se encontró un chat id en su perfil.',
'log_retention_period' => 'Período de retención del registro', 'log_retention_period' => 'Período de retención del 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_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_retention_days' => 'días', 'log_retention_days' => 'días',
), ),
'notifications' => array( 'notifications' => array(
'off_sms' => 'Servidor \'%LABEL%\' está fuera de línea: ip=%IP%, puerto=%PORT%. error=%ERROR%', 'off_sms' => 'Servidor \'%LABEL%\' está fuera de línea: ip=%IP%, puerto=%PORT%. error=%ERROR%',
'off_email_subject' => 'Importante: Servidor \'%LABEL%\' está fuera de línea', 'off_email_subject' => 'Importante: Servidor \'%LABEL%\' está fuera de línea',
'off_email_body' => 'Imposible conectar al servidor:<br/><br/>Servidor: %LABEL%<br/>IP: %IP%<br/>Puerto: %PORT%<br/>Error: %ERROR%<br/>Fecha: %DATE%', '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_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_pushover_message' => 'No posible conectar al servidor:<br/><br/>Servidor: %LABEL%<br/>IP:
'off_telegram_message' => 'No posible conectar al servidor:<br/><br/>Servidor: %LABEL%<br/>IP: %IP%<br/>Puerto: %PORT%<br/>Error: %ERROR%<br/>Fecha: %DATE%', %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%', '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_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_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_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_pushover_message' => 'Servidor \'%LABEL%\' ya está funcionando en línea de nuevo, la duración de la
'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%', caída fue de %LAST_OFFLINE_DURATION%:<br/><br/>Servidor: %LABEL%<br/>IP:
'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>', %IP%<br/>Puerto: %PORT%<br/>Fecha: %DATE%',
'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>', 'on_telegram_message' => 'Servidor \'%LABEL%\' ya está funcionando en línea de nuevo, la duración de la
'combi_off_telegram_message' => '- Servidor: %LABEL%<br>- IP: %IP%<br>- Puerto: %PORT%<br>- Error: %ERROR%<br>- Fecha: %DATE%<br><br>', caída fue de %LAST_OFFLINE_DURATION%:<br/><br/>Servidor: %LABEL%<br/>IP:
'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>', %IP%<br/>Puerto: %PORT%<br/>Fecha: %DATE%',
'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_off_email_message' => '<ul><li>Servidor: %LABEL%</li><li>IP: %IP%</li><li>Puerto: %PORT%</li><li>Error:
'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>', %ERROR%</li><li>Fecha: %DATE%</li></ul>',
'combi_email_subject' => 'IMPORTANTE: %UP% servidores están en línea, %DOWN% servidores están ahora fuera de línea', '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_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_email_message' => '<b>Los siguentes servidores están fuera de línea:</b><br>%DOWN_SERVERS%<br><b>Los
'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%', 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%', '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( 'login' => array(
'welcome_usermenu' => '%user_name%', 'welcome_usermenu' => '%user_name%',
@ -379,12 +452,14 @@ $sm_lang = array(
'password_forgot' => '¿Has olvidado tu contraseña?', 'password_forgot' => '¿Has olvidado tu contraseña?',
'password_reset' => 'Perdí mi contraseña', 'password_reset' => 'Perdí mi contraseña',
'password_reset_email_subject' => 'Restablecer la contraseña para PHP Server Monitor', '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%', '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_user_incorrect' => 'El nombre de usuario proporcionado no se pudo encontrar.',
'error_login_incorrect' => 'La información es incorrecta.', 'error_login_incorrect' => 'La información es incorrecta.',
'error_login_passwords_nomatch' => 'Las contraseñas proporcionadas no coinciden.', '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.', '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_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.', 'success_password_reset' => 'Su contraseña ha sido restablecida correctamente. Por favor, inicia sesión.',
), ),
'error' => array( 'error' => array(

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,7 +28,11 @@
$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(
'0' => 'et_ET.UTF-8',
'1' => 'et_ET',
'2' => 'estonian',
),
'locale_tag' => 'et', 'locale_tag' => 'et',
'locale_dir' => 'ltr', 'locale_dir' => 'ltr',
'system' => array( 'system' => array(
@ -43,12 +48,13 @@ $sm_lang = array(
'no' => 'Ei', 'no' => 'Ei',
'insert' => 'Sisesta', 'insert' => 'Sisesta',
'add_new' => 'Lisa uus', 'add_new' => 'Lisa uus',
'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>.', '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>.',
'back_to_top' => 'Tagasi üles', 'back_to_top' => 'Tagasi üles',
'go_back' => 'Mine tagasi', 'go_back' => 'Mine tagasi',
'ok' => 'OK', 'ok' => 'OK',
'cancel' => 'Tühista', 'cancel' => 'Tühista',
// date/time format according the strftime php function format parameter http://php.net/manual/function.strftime.php
'short_day_format' => '%B %e', 'short_day_format' => '%B %e',
'long_day_format' => '%B %e, %Y', 'long_day_format' => '%B %e, %Y',
'yesterday_format' => 'Eile kell %k:%M', 'yesterday_format' => 'Eile kell %k:%M',
@ -80,11 +86,15 @@ $sm_lang = array(
'level' => 'Tase', 'level' => 'Tase',
'level_10' => 'Administraator', 'level_10' => 'Administraator',
'level_20' => 'Kasutaja', 'level_20' => 'Kasutaja',
'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.', '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.',
'mobile' => 'Mobiil', 'mobile' => 'Mobiil',
'email' => 'Email', 'email' => 'Email',
'pushover' => 'Pushover', 'pushover' => 'Pushover',
'pushover_description' => 'Pushover on teenus, mis teeb reaalaja teavitused imelihtsaks. Vaata <a href="https://pushover.net/">nende kodulehte</a> rohkema info jaoks.', 'pushover_description' => 'Pushover on teenus, mis teeb reaalaja teavitused imelihtsaks. Vaata <a
href="https://pushover.net/" target="_blank">nende kodulehte</a> rohkema info
jaoks.',
'pushover_key' => 'Pushoveri Võti', 'pushover_key' => 'Pushoveri Võti',
'pushover_device' => 'Pushoveri Seade', 'pushover_device' => 'Pushoveri Seade',
'pushover_device_description' => 'Seadme nimi, kuhu teavitus saata. Jäta tühjaks, et saata igale seadmele.', 'pushover_device_description' => 'Seadme nimi, kuhu teavitus saata. Jäta tühjaks, et saata igale seadmele.',
@ -96,7 +106,8 @@ $sm_lang = array(
'profile' => 'Profiil', 'profile' => 'Profiil',
'profile_updated' => 'Sinu profiil on uuendatud.', 'profile_updated' => 'Sinu profiil on uuendatud.',
'error_user_name_bad_length' => 'Kasutajanimi peab olema 2 kuni 64 tähemärki pikk.', 'error_user_name_bad_length' => 'Kasutajanimi peab olema 2 kuni 64 tähemärki pikk.',
'error_user_name_invalid' => 'Kasutajanimi võib koosneda ainult tähenumbrilistest kombinatsioonidest (a-z, A-Z), numbritest (0-9), punktid (.) ja alakriipsust (_).', 'error_user_name_invalid' => 'Kasutajanimi võib koosneda ainult tähenumbrilistest kombinatsioonidest (a-z,
A-Z), numbritest (0-9), punktid (.) ja alakriipsust (_).',
'error_user_name_exists' => 'Antud kasutaja juba eksisteerib andmebaasis.', 'error_user_name_exists' => 'Antud kasutaja juba eksisteerib andmebaasis.',
'error_user_email_bad_length' => 'Email võib olla 5 kuni 255 tähemärki pikk.', 'error_user_email_bad_length' => 'Email võib olla 5 kuni 255 tähemärki pikk.',
'error_user_email_invalid' => 'Emaili aadress on kehtetu.', 'error_user_email_invalid' => 'Emaili aadress on kehtetu.',
@ -129,7 +140,8 @@ $sm_lang = array(
'type_website' => 'Veebileht', 'type_website' => 'Veebileht',
'type_service' => 'Teenus', 'type_service' => 'Teenus',
'pattern' => 'Otsi nööri/mudelit', 'pattern' => 'Otsi nööri/mudelit',
'pattern_description' => 'Kui seda mudelit serverist ei leita, siis server märgitakse võrgustväljas. Tavapärased väljendid on lubatud.', 'pattern_description' => 'Kui seda mudelit serverist ei leita, siis server märgitakse võrgustväljas.
Tavapärased väljendid on lubatud.',
'last_check' => 'Viimane kontroll', 'last_check' => 'Viimane kontroll',
'last_online' => 'Viimati oli võrgus', 'last_online' => 'Viimati oli võrgus',
'monitoring' => 'Jälgib', 'monitoring' => 'Jälgib',
@ -159,7 +171,6 @@ $sm_lang = array(
'warning_threshold_description' => 'Arv ebaõnnestunud kontrolle enne võrgustväljas märkimist.', 'warning_threshold_description' => 'Arv ebaõnnestunud kontrolle enne võrgustväljas märkimist.',
'chart_last_week' => 'Eelmine nädal', 'chart_last_week' => 'Eelmine nädal',
'chart_history' => 'Ajalugu', 'chart_history' => 'Ajalugu',
// 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' => '%d/%m %H:%M', 'chart_short_date_format' => '%d/%m %H:%M',
@ -196,24 +207,28 @@ $sm_lang = array(
'sms_gateway_password' => 'Värava parool', 'sms_gateway_password' => 'Värava parool',
'sms_from' => 'Saatja telefoni number', 'sms_from' => 'Saatja telefoni number',
'pushover_status' => 'Luba Pushoveri sõnumite saatmine', 'pushover_status' => 'Luba Pushoveri sõnumite saatmine',
'pushover_description' => 'Pushover on teenus, mis teeb reaalaja teavitused imelihtsaks. Vaata <a href="https://pushover.net/">nende kodulehte</a> rohkema info jaoks.', 'pushover_description' => 'Pushover on teenus, mis teeb reaalaja teavitused imelihtsaks. Vaata <a
href="https://pushover.net/" target="_blank">nende kodulehte</a> rohkema info
jaoks.',
'pushover_clone_app' => 'Kliki siia, et teha oma Pushover äpp', 'pushover_clone_app' => 'Kliki siia, et teha oma Pushover äpp',
'pushover_api_token' => 'Pushover Äppi API Žetoon', 'pushover_api_token' => 'Pushover Äppi API Žetoon',
'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.', '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.',
'alert_type' => 'Vali, millal sa sooviksid olla teavitatud.', 'alert_type' => 'Vali, millal sa sooviksid olla teavitatud.',
'alert_type_description' => '<b>Staatuse muutus:</b> '. 'alert_type_description' => '<b>Staatuse muutus:</b> Saate teavituse kui serveri staatuses toimub muudatusi.
'Saate teavituse kui serveri staatuses toimub muudatusi. Seega kättesaadav -> võrgust väljas või võrgust väljas -> kättesaadav.<br>'. Seega kättesaadav -> võrgust väljas või võrgust väljas ->
'<br /><b>Võrgust väljas:</b> '. kättesaadav.<br><br /><b>Võrgust väljas:</b> Saate teavituse kui server läheb
'Saate teavituse kui server läheb võrgust välja *ESIMEST KORDA*. Näiteks, '. võrgust välja *ESIMEST KORDA*. Näiteks, sinu cronjob on iga 15 minuti tagant
'sinu cronjob on iga 15 minuti tagant ja sulgub kell 1 öösel kuni kella 6ni hommikul. '. ja sulgub kell 1 öösel kuni kella 6ni hommikul. Saate 1 teavituse kell 1
'Saate 1 teavituse kell 1 öösel ja see on kõik.<br>'. öösel ja see on kõik.<br><br><b>Alati:</b> Saate teavituse iga kord kui
'<br><b>Alati:</b> '. staatust uuendatakse, isegi kui leht on olnud maas juba tunde.',
'Saate teavituse iga kord kui staatust uuendatakse, isegi kui leht on olnud maas juba tunde.',
'alert_type_status' => 'Staatuse muutus', 'alert_type_status' => 'Staatuse muutus',
'alert_type_offline' => 'Võrgust väljas', 'alert_type_offline' => 'Võrgust väljas',
'alert_type_always' => 'Alati', 'alert_type_always' => 'Alati',
'log_status' => 'Logi staatus', 'log_status' => 'Logi staatus',
'log_status_description' => 'Kui logimine on seatud TÕESEKS, siis monitor logib aktiivsuse mil teavituse seaded on läbitud.', 'log_status_description' => 'Kui logimine on seatud TÕESEKS, siis monitor logib aktiivsuse mil teavituse
seaded on läbitud.',
'log_email' => 'Logi saadetud emailid', 'log_email' => 'Logi saadetud emailid',
'log_sms' => 'Logi saadetud sõnumid', 'log_sms' => 'Logi saadetud sõnumid',
'log_pushover' => 'Logi Pushoveri saadetud teavitused', 'log_pushover' => 'Logi Pushoveri saadetud teavitused',
@ -227,11 +242,8 @@ $sm_lang = array(
'settings_notification' => 'Teavituste seaded', 'settings_notification' => 'Teavituste seaded',
'settings_log' => 'Logi seaded', 'settings_log' => 'Logi seaded',
'auto_refresh' => 'Automaatne värskendamine', 'auto_refresh' => 'Automaatne värskendamine',
'auto_refresh_description' => 'auto_refresh_description' => 'Värskenda lehte automaatselt.<br><span class="small">Aeg sekundites, kui 0
'Värskenda lehte automaatselt.<br>'. siis lehte ei värskendata.</span>',
'<span class="small">'.
'Aeg sekundites, kui 0 siis lehte ei värskendata.'.
'</span>',
'seconds' => 'sekundit', 'seconds' => 'sekundit',
'test' => 'Test', 'test' => 'Test',
'test_email' => 'Email saadetakse profiilil märgitud aadressile.', 'test_email' => 'Email saadetakse profiilil märgitud aadressile.',
@ -247,24 +259,31 @@ $sm_lang = array(
'sms_error_nomobile' => 'Test SMSi ei saadetud: kehtivat telefoni numbrit ei leitud.', 'sms_error_nomobile' => 'Test SMSi ei saadetud: kehtivat telefoni numbrit ei leitud.',
'pushover_sent' => 'Pushover teavitus saadetud', 'pushover_sent' => 'Pushover teavitus saadetud',
'pushover_error' => 'Pushover teavituse saatmisel esines error: %s', 'pushover_error' => 'Pushover teavituse saatmisel esines error: %s',
'pushover_error_noapp' => 'Test teavitust ei saadetud: Pushover API žetooni ei leitud globaalsest konfiguratsioonist.', 'pushover_error_noapp' => 'Test teavitust ei saadetud: Pushover API žetooni ei leitud globaalsest
konfiguratsioonist.',
'pushover_error_nokey' => 'Test teavitust ei saadetud: Pushover võtit ei leitud.', 'pushover_error_nokey' => 'Test teavitust ei saadetud: Pushover võtit ei leitud.',
'log_retention_period' => 'Logi säilitamis periood', 'log_retention_period' => 'Logi säilitamis periood',
'log_retention_period_description' => 'Arv päevi, mil hoida logid alles. Sisesta 0, et keelata logide puhastus.', 'log_retention_period_description' => 'Arv päevi, mil hoida logid alles. Sisesta 0, et keelata logide
puhastus.',
'log_retention_days' => 'päeva', 'log_retention_days' => 'päeva',
), ),
// for newlines in the email messages use <br>
'notifications' => array( 'notifications' => array(
'off_sms' => 'Server \'%LABEL%\' on MAAS: ip=%IP%, port=%PORT%. Error=%ERROR%', 'off_sms' => 'Server \'%LABEL%\' on MAAS: ip=%IP%, port=%PORT%. Error=%ERROR%',
'off_email_subject' => 'TÄHTIS: Server \'%LABEL%\' is MAAS', 'off_email_subject' => 'TÄHTIS: Server \'%LABEL%\' is MAAS',
'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%", '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%',
'off_pushover_title' => 'Server \'%LABEL%\' on MAAS', 'off_pushover_title' => 'Server \'%LABEL%\' on MAAS',
'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%", '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%',
'on_sms' => 'Server \'%LABEL%\' on KÄTTESAADAV: ip=%IP%, port=%PORT%, it was down for %LAST_OFFLINE_DURATION%', 'on_sms' => 'Server \'%LABEL%\' on KÄTTESAADAV: ip=%IP%, port=%PORT%, it was down for %LAST_OFFLINE_DURATION%',
'on_email_subject' => 'TÄHTIS: Server \'%LABEL%\' on kättesaadav', 'on_email_subject' => 'TÄHTIS: Server \'%LABEL%\' on kättesaadav',
'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%", '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%',
'on_pushover_title' => 'Server \'%LABEL%\' on kättesaadav', 'on_pushover_title' => 'Server \'%LABEL%\' on kättesaadav',
'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%', '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%',
), ),
'login' => array( 'login' => array(
'welcome_usermenu' => 'Teretulemast, %user_name%', 'welcome_usermenu' => 'Teretulemast, %user_name%',
@ -281,7 +300,8 @@ $sm_lang = array(
'password_forgot' => 'Unustasid salasõna?', 'password_forgot' => 'Unustasid salasõna?',
'password_reset' => 'Lähtesta parool', 'password_reset' => 'Lähtesta parool',
'password_reset_email_subject' => 'Lähtestage oma PHP Serveri Monitori 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%', '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_user_incorrect' => 'Antud kasutaja ei ole kehtiv.',
'error_login_incorrect' => 'Informatsioon ei ole õige.', 'error_login_incorrect' => 'Informatsioon ei ole õige.',
'error_login_passwords_nomatch' => 'Sisestatud paroolid ei kattu.', 'error_login_passwords_nomatch' => 'Sisestatud paroolid ei kattu.',

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,7 +28,12 @@
$sm_lang = array( $sm_lang = array(
'name' => 'فارسی - Persian', 'name' => 'فارسی - Persian',
'locale' => array('fa_IR.UTF-8', 'fa_IR', 'far', 'per', 'fa'), 'locale' => array(
'0' => 'fa_IR.UTF-8',
'1' => 'fa_IR',
'2' => 'far',
'3' => 'per',
),
'locale_tag' => 'fa', 'locale_tag' => 'fa',
'locale_dir' => 'rtl', 'locale_dir' => 'rtl',
'system' => array( 'system' => array(
@ -43,12 +49,13 @@ $sm_lang = array(
'no' => 'خیر', 'no' => 'خیر',
'insert' => 'افزودن', 'insert' => 'افزودن',
'add_new' => 'افزودن', 'add_new' => 'افزودن',
'update_available' => 'نسخه جدیدتر ({version}) در <a href="https://github.com/phpservermon/phpservermon/releases/latest" target="_blank" rel="noopener">http://www.phpservermonitor.org</a> موجود است.', 'update_available' => 'نسخه جدیدتر ({version}) در <a
href="https://github.com/phpservermon/phpservermon/releases/latest" target="_blank"
rel="noopener">http://www.phpservermonitor.org</a> موجود است.',
'back_to_top' => 'برو به بالا', 'back_to_top' => 'برو به بالا',
'go_back' => 'برگرد', 'go_back' => 'برگرد',
'ok' => 'تایید', 'ok' => 'تایید',
'cancel' => 'انصراف', 'cancel' => 'انصراف',
// date/time format according the strftime php function format parameter http://php.net/manual/function.strftime.php
'short_day_format' => '%B %e', 'short_day_format' => '%B %e',
'long_day_format' => '%B %e, %Y', 'long_day_format' => '%B %e, %Y',
'yesterday_format' => 'دیروز در %k:%M', 'yesterday_format' => 'دیروز در %k:%M',
@ -80,14 +87,22 @@ $sm_lang = array(
'level' => 'سطح', 'level' => 'سطح',
'level_10' => 'مدیر', 'level_10' => 'مدیر',
'level_20' => 'کاربر', 'level_20' => 'کاربر',
'level_description' => '<b>مدیر</b> دسترسی کامل: این گروه ها توانایی مدیریت سرورها، کاربران و ویرایش تنظیمات عمومی را داردند.<br><b>کاربران</b> تنها توانایی دیدن و بروزرسانی سرورهای اختصاص داده شده به خودشان را داردند.', '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 سرویسی است که دریافت اطلاعیه های بلادرنگ
را ساده می کند. برای اطلاعات بیشتر <a
href="https://pushover.net/" target="_blank">سایت آن ها</a> را
ببینید.',
'pushover_key' => 'کلید Pushover', 'pushover_key' => 'کلید Pushover',
'pushover_device' => 'دستگاه Pushover', 'pushover_device' => 'دستگاه Pushover',
'pushover_device_description' => 'نام دستگاه برای ارسال پیام. برای ارسال به همه دستگاه ها آن را خالی بگذارید', 'pushover_device_description' => 'نام دستگاه برای ارسال پیام. برای ارسال به
همه دستگاه ها آن را خالی بگذارید',
'delete_title' => 'حذف کاربر', 'delete_title' => 'حذف کاربر',
'delete_message' => 'آیا برای حذف کاربر \'%1\' مطئن هستیند؟', 'delete_message' => 'آیا برای حذف کاربر \'%1\' مطئن هستیند؟',
'deleted' => 'کاربر حذف شد.', 'deleted' => 'کاربر حذف شد.',
@ -96,8 +111,10 @@ $sm_lang = array(
'profile' => 'پروفایل', 'profile' => 'پروفایل',
'profile_updated' => 'پروفایل شما بروزرسانی شد.', 'profile_updated' => 'پروفایل شما بروزرسانی شد.',
'error_user_name_bad_length' => 'نام های کاربری باید بین 2 و 64 کاراکتر باشد.', 'error_user_name_bad_length' => 'نام های کاربری باید بین 2 و 64 کاراکتر باشد.',
'error_user_name_invalid' => 'نام کاربری باید فقط شامل حروف (a-z, A-Z)، نقطه (.) اعداد (0-9) و علامت (_) باشد.', 'error_user_name_invalid' => 'نام کاربری باید فقط شامل حروف (a-z, A-Z)، نقطه (.)
'error_user_name_exists' => 'نام کاربری وارد شده در حال حاضر در پایگاه داده موجود است.', اعداد (0-9) و علامت (_) باشد.',
'error_user_name_exists' => 'نام کاربری وارد شده در حال حاضر در پایگاه
داده موجود است.',
'error_user_email_bad_length' => 'آدرس های ایمیل باید بین 5 و 255 کاراکتر باشد.', 'error_user_email_bad_length' => 'آدرس های ایمیل باید بین 5 و 255 کاراکتر باشد.',
'error_user_email_invalid' => 'آدرس ایمیل نامعتبر است.', 'error_user_email_invalid' => 'آدرس ایمیل نامعتبر است.',
'error_user_level_invalid' => 'سطح کاربرد داده شده نامعتبر است.', 'error_user_level_invalid' => 'سطح کاربرد داده شده نامعتبر است.',
@ -115,7 +132,8 @@ $sm_lang = array(
'no_logs' => 'لاگی وجود ندارد.', 'no_logs' => 'لاگی وجود ندارد.',
'clear' => 'پاک کردن ورود', 'clear' => 'پاک کردن ورود',
'delete_title' => 'حذف ورود', 'delete_title' => 'حذف ورود',
'delete_message' => 'آیا مطمئن هستید که میخواهید سیاهههای «همه» را حذف کنید؟', 'delete_message' => 'آیا مطمئن هستید که میخواهید سیاهههای «همه» را
حذف کنید؟',
), ),
'servers' => array( 'servers' => array(
'server' => 'سرور', 'server' => 'سرور',
@ -129,7 +147,8 @@ $sm_lang = array(
'type_website' => 'وب سایت', 'type_website' => 'وب سایت',
'type_service' => 'سرویس', 'type_service' => 'سرویس',
'pattern' => 'جستجوری رشته/الگو', 'pattern' => 'جستجوری رشته/الگو',
'pattern_description' => 'اگر این الگو در سایت یافته نشد، سرور آفلاین نمایش داده خواهد شد. عبارات منظم مجاز هستند.', 'pattern_description' => 'اگر این الگو در سایت یافته نشد، سرور آفلاین
نمایش داده خواهد شد. عبارات منظم مجاز هستند.',
'last_check' => 'آخرین بررسی', 'last_check' => 'آخرین بررسی',
'last_online' => 'آخرین زمان آنلاین بودن', 'last_online' => 'آخرین زمان آنلاین بودن',
'monitoring' => 'مانیتورینگ', 'monitoring' => 'مانیتورینگ',
@ -156,10 +175,10 @@ $sm_lang = array(
'day' => 'روز', 'day' => 'روز',
'hour' => 'ساعت', 'hour' => 'ساعت',
'warning_threshold' => 'آستانه هشدار', 'warning_threshold' => 'آستانه هشدار',
'warning_threshold_description' => 'تعداد چک های شکست خورده قبل از اینکه به عنوان آفلاین نشانه گذاری شود.', 'warning_threshold_description' => 'تعداد چک های شکست خورده قبل از اینکه به
عنوان آفلاین نشانه گذاری شود.',
'chart_last_week' => 'هفته گذشته', 'chart_last_week' => 'هفته گذشته',
'chart_history' => 'تاریخچه', 'chart_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_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',
@ -173,7 +192,8 @@ $sm_lang = array(
'error_server_ip_bad_service' => 'آدرس آی پی معتبر نیست.', 'error_server_ip_bad_service' => 'آدرس آی پی معتبر نیست.',
'error_server_ip_bad_website' => 'آدرس وب سایت معتبر نیست.', 'error_server_ip_bad_website' => 'آدرس وب سایت معتبر نیست.',
'error_server_type_invalid' => 'نوع سرور انتخاب شده نامعتبر است.', 'error_server_type_invalid' => 'نوع سرور انتخاب شده نامعتبر است.',
'error_server_warning_threshold_invalid' => 'آستانه هشدار باید یک عدد صحیح بزرگتر از 0 باشد.', 'error_server_warning_threshold_invalid' => 'آستانه هشدار باید یک عدد صحیح
بزرگتر از 0 باشد.',
), ),
'config' => array( 'config' => array(
'general' => 'عمومی', 'general' => 'عمومی',
@ -196,24 +216,38 @@ $sm_lang = array(
'sms_gateway_password' => 'کلمه عبور Gateway', 'sms_gateway_password' => 'کلمه عبور Gateway',
'sms_from' => 'شماره تلفن ارسال کننده', 'sms_from' => 'شماره تلفن ارسال کننده',
'pushover_status' => 'اجازه ارسال پیام های Pushover', 'pushover_status' => 'اجازه ارسال پیام های Pushover',
'pushover_description' => 'Pushover سرویسی است که دریافت اطلاعیه های بلادرنگ را ساده می کند. برای اطلاعات بیشتر <a href="https://pushover.net/">سایت آن ها</a> را ببینید.', 'pushover_description' => 'Pushover سرویسی است که دریافت اطلاعیه های بلادرنگ
'pushover_clone_app' => 'برای ایجاد برنامه پوش آور خود اینجا را کلیک کنید.', را ساده می کند. برای اطلاعات بیشتر <a
href="https://pushover.net/" target="_blank">سایت آن ها</a> را
ببینید.',
'pushover_clone_app' => 'برای ایجاد برنامه پوش آور خود اینجا را کلیک
کنید.',
'pushover_api_token' => 'رمز API برنامه پوش آور', 'pushover_api_token' => 'رمز API برنامه پوش آور',
'pushover_api_token_description' => 'قبل از استفاده از پوش آور، شما باید در سایت آن ها <a href="%1$s" target="_blank" rel="noopener">یک برنامه ثبت نام کنید</a> و رمز API برنامه پوش آور را اینجا وارد کنید.', 'pushover_api_token_description' => 'قبل از استفاده از پوش آور، شما باید در
'alert_type' => 'زمان دلخواه خورد برای دریافت اطلاعیه ها را انتخاب کنید.', سایت آن ها <a href="%1$s" target="_blank" rel="noopener">یک
'alert_type_description' => '<b>تغییر وضعیت:</b> '. برنامه ثبت نام کنید</a> و رمز API برنامه پوش
'زمانی که وضعیت سرور تغییر کرد شما یک اطلاعیته دریافت خواهید کرد. از آنلاین -> آفلاین یا آفلاین -> آنلاین.<br>'. آور را اینجا وارد کنید.',
'<br /><b>آفلاین:</b> '. 'alert_type' => 'زمان دلخواه خورد برای دریافت اطلاعیه ها را انتخاب
'زمانی که یک سرور *فقط برای اولین بار* آفلاین شد شما یک اطلاعیه دریافت خواهید کرد. به عنوان مثال،'. کنید.',
'cronjob شما هر 15 دقیقه است و سرور شما در ساعت 1 صبح دان می شود و تا ساعت 6 صبح دان می ماند.'. 'alert_type_description' => '<b>تغییر وضعیت:</b> زمانی که وضعیت سرور تغییر
'شما 1 اطلاعیه در ساعت 1 صبح دریافت خواهید کرد. همین و بس!'. کرد شما یک اطلاعیته دریافت خواهید کرد. از
'<br><b>همیشه:</b> '. آنلاین -> آفلاین یا آفلاین -> آنلاین.<br><br
'هر بار که اسکریپت اجرا شود و یک سایت دان شود شما یک اطلاعیه دریافت خواهید کرد، حتی اگر سایت چند ساعت آفلاین باشد.', /><b>آفلاین:</b> زمانی که یک سرور *فقط برای اولین
بار* آفلاین شد شما یک اطلاعیه دریافت خواهید
کرد. به عنوان مثال،cronjob شما هر 15 دقیقه است و
سرور شما در ساعت 1 صبح دان می شود و تا ساعت 6
صبح دان می ماند.شما 1 اطلاعیه در ساعت 1 صبح
دریافت خواهید کرد. همین و بس!<br><b>همیشه:</b> هر
بار که اسکریپت اجرا شود و یک سایت دان شود شما
یک اطلاعیه دریافت خواهید کرد، حتی اگر سایت
چند ساعت آفلاین باشد.',
'alert_type_status' => 'تغییر وضعیت', 'alert_type_status' => 'تغییر وضعیت',
'alert_type_offline' => 'آفلاین', 'alert_type_offline' => 'آفلاین',
'alert_type_always' => 'همیشه', 'alert_type_always' => 'همیشه',
'log_status' => 'وضعیت لاگ', 'log_status' => 'وضعیت لاگ',
'log_status_description' => 'اگر لاگ در وضعیت درست باشد مانیتور هر وقت که تنظیمات اطلاعیه ها وارد شود رویدادها را لاگ می کند.', 'log_status_description' => 'اگر لاگ در وضعیت درست باشد مانیتور هر وقت که
تنظیمات اطلاعیه ها وارد شود رویدادها را لاگ
می کند.',
'log_email' => 'لاگ کردن ایمیل هایی که ارسال شده توسط اسکریپت', 'log_email' => 'لاگ کردن ایمیل هایی که ارسال شده توسط اسکریپت',
'log_sms' => 'لاگ کردن پیامک های ارسال شده توسط اسکریپت', 'log_sms' => 'لاگ کردن پیامک های ارسال شده توسط اسکریپت',
'log_pushover' => 'لاگ پیام های پوش آور ارسال شده توسط سرور', 'log_pushover' => 'لاگ پیام های پوش آور ارسال شده توسط سرور',
@ -227,16 +261,16 @@ $sm_lang = array(
'settings_notification' => 'تنظیمات اطلاعیه ها', 'settings_notification' => 'تنظیمات اطلاعیه ها',
'settings_log' => 'تنظیمات لاگ', 'settings_log' => 'تنظیمات لاگ',
'auto_refresh' => 'رفرش خودکار', 'auto_refresh' => 'رفرش خودکار',
'auto_refresh_description' => 'auto_refresh_description' => 'رفرش خودکار صفحه سرورها.<br><span class="small">زمان
'رفرش خودکار صفحه سرورها.<br>'. به ثنیه, اگر 0 باشد صفحه رفرش نخواهد شد.</span>',
'<span class="small">'.
'زمان به ثنیه, اگر 0 باشد صفحه رفرش نخواهد شد.'.
'</span>',
'seconds' => 'ثانیه', 'seconds' => 'ثانیه',
'test' => 'تست', 'test' => 'تست',
'test_email' => 'یک ایمیل به آدرس تعیین شده در پروفایل شما ارسال خواهد شد.', 'test_email' => 'یک ایمیل به آدرس تعیین شده در پروفایل شما ارسال
'test_sms' => 'یک پیامک به شماره تلفن تعیین شده در پروفایل شما ارسال خواهد شد.', خواهد شد.',
'test_pushover' => 'یک پیام پوش آور به کلید کاربر/دستگاه تعیین شده در پروفایل شما ارسال خواهد شد.', 'test_sms' => 'یک پیامک به شماره تلفن تعیین شده در پروفایل شما
ارسال خواهد شد.',
'test_pushover' => 'یک پیام پوش آور به کلید کاربر/دستگاه تعیین شده در
پروفایل شما ارسال خواهد شد.',
'send' => 'ارسال', 'send' => 'ارسال',
'test_subject' => 'تست', 'test_subject' => 'تست',
'test_message' => 'پیام تستی', 'test_message' => 'پیام تستی',
@ -244,27 +278,40 @@ $sm_lang = array(
'email_error' => 'خطا در ارسال ایمیل', 'email_error' => 'خطا در ارسال ایمیل',
'sms_sent' => 'پیامک ارسال شد', 'sms_sent' => 'پیامک ارسال شد',
'sms_error' => '%s خطا در ارسال پیامک', 'sms_error' => '%s خطا در ارسال پیامک',
'sms_error_nomobile' => 'قادر به ارسال پیامک تستی نیستیم: شماره تلفن معتبر در پروفایل شما یافته نشد.', 'sms_error_nomobile' => 'قادر به ارسال پیامک تستی نیستیم: شماره تلفن
معتبر در پروفایل شما یافته نشد.',
'pushover_sent' => 'اطلاعیه پوش آور ارسال شد.', 'pushover_sent' => 'اطلاعیه پوش آور ارسال شد.',
'pushover_error' => 'یک خطا در هنگام ارسال اطلاعیه پوش آور رخ داده است: %s', 'pushover_error' => 'یک خطا در هنگام ارسال اطلاعیه پوش آور رخ داده است:
'pushover_error_noapp' => 'قادر به ارسال اطلاعیه تستی نیستیم: رمز API برنامه پوش آور در پیکربندی عمومی یافته نشد.', %s',
'pushover_error_nokey' => 'قادر به ارسال اطلاعیه تستی نیستیم: کلید پوش آور در پروفایل شما یافته نشد.', 'pushover_error_noapp' => 'قادر به ارسال اطلاعیه تستی نیستیم: رمز API
برنامه پوش آور در پیکربندی عمومی یافته نشد.',
'pushover_error_nokey' => 'قادر به ارسال اطلاعیه تستی نیستیم: کلید پوش
آور در پروفایل شما یافته نشد.',
'log_retention_period' => 'مدت زمان ذخیره سازی لاگ ها', 'log_retention_period' => 'مدت زمان ذخیره سازی لاگ ها',
'log_retention_period_description' => 'تعداد روزها برای نگهداری لاگ اطلاعیه ها و آرشیو های آپ تایم های سرور. برای غیرفعال کردن پاکسازی لاگ 0 وارد کنید.', 'log_retention_period_description' => 'تعداد روزها برای نگهداری لاگ اطلاعیه
ها و آرشیو های آپ تایم های سرور. برای
غیرفعال کردن پاکسازی لاگ 0 وارد کنید.',
'log_retention_days' => 'روزها', 'log_retention_days' => 'روزها',
), ),
// for newlines in the email messages use <br>
'notifications' => array( 'notifications' => array(
'off_sms' => 'Server \'%LABEL%\' دان است: آی پی=%IP%, پورت=%PORT%. خطا=%ERROR%', 'off_sms' => 'Server \'%LABEL%\' دان است: آی پی=%IP%, پورت=%PORT%. خطا=%ERROR%',
'off_email_subject' => 'مهم: سرور \'%LABEL%\' دان است', 'off_email_subject' => 'مهم: سرور \'%LABEL%\' دان است',
'off_email_body' => "اتصال به سرور زیر با شکست مواجه شد:<br><br>سرور: %LABEL%<br>آی پی: %IP%<br>پورت: %PORT%<br>خطا: %ERROR%<br>تاریخ: %DATE%", 'off_email_body' => 'اتصال به سرور زیر با شکست مواجه شد:<br><br>سرور:
%LABEL%<br>آی پی: %IP%<br>پورت: %PORT%<br>خطا: %ERROR%<br>تاریخ: %DATE%',
'off_pushover_title' => 'سرور \'%LABEL%\' دان است', 'off_pushover_title' => 'سرور \'%LABEL%\' دان است',
'off_pushover_message' => "اتصال به سرور زیر با شکست مواجه شد:<br><br>سرور: %LABEL%<br>آی پی: %IP%<br>پورت: %PORT%<br>خطا: %ERROR%<br>تاریخ: %DATE%", 'off_pushover_message' => 'اتصال به سرور زیر با شکست مواجه شد:<br><br>سرور:
'on_sms' => 'سرور \'%LABEL%\' در حال اجراست: آی پی=%IP%, پورت=%PORT%, it was down for %LAST_OFFLINE_DURATION%', %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_subject' => 'مهم: سرور \'%LABEL%\' در حال اجراست',
'on_email_body' => "سرور '%LABEL%' دوباره در حال اجراست, it was down for %LAST_OFFLINE_DURATION%:<br><br>سرور: %LABEL%<br>آی پی: %IP%<br>پورت: %PORT%<br>تاریخ: %DATE%", '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_title' => 'سرور \'%LABEL%\' در حال اجراست',
'on_pushover_message' => 'سرور \'%LABEL%\' دوباره در حال اجراست, it was down for %LAST_OFFLINE_DURATION%:<br><br>سرور: %LABEL%<br>آی پی: %IP%<br>پورت: %PORT%<br>تاریخ: %DATE%', 'on_pushover_message' => 'سرور \'%LABEL%\' دوباره در حال اجراست, it was down for
%LAST_OFFLINE_DURATION%:<br><br>سرور: %LABEL%<br>آی پی: %IP%<br>پورت:
%PORT%<br>تاریخ: %DATE%',
), ),
'login' => array( 'login' => array(
'welcome_usermenu' => 'خوش آمدید, %user_name%', 'welcome_usermenu' => 'خوش آمدید, %user_name%',
@ -280,14 +327,19 @@ $sm_lang = array(
'password_repeat' => 'تکرار کلمه عبور', 'password_repeat' => 'تکرار کلمه عبور',
'password_forgot' => 'کلمه عبور خود را فراموش کرده اید؟', 'password_forgot' => 'کلمه عبور خود را فراموش کرده اید؟',
'password_reset' => 'بازنشانی کلمه عبور', 'password_reset' => 'بازنشانی کلمه عبور',
'password_reset_email_subject' => 'کلمه عبور خود را برای مانیتور سرور PHP بازنشانی کنید', 'password_reset_email_subject' => 'کلمه عبور خود را برای مانیتور سرور PHP
'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' => 'غیر مجاز',

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,7 +28,12 @@
$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(
'0' => 'fi_FI.UTF-8',
'1' => 'fi_FI',
'2' => 'finnish',
'3' => 'finnish-fi',
),
'locale_tag' => 'fi', 'locale_tag' => 'fi',
'locale_dir' => 'ltr', 'locale_dir' => 'ltr',
'system' => array( 'system' => array(
@ -43,12 +49,13 @@ $sm_lang = array(
'no' => 'Ei', 'no' => 'Ei',
'insert' => 'Asetukset', 'insert' => 'Asetukset',
'add_new' => 'Lisää uusi', 'add_new' => 'Lisää uusi',
'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>.', '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>.',
'back_to_top' => 'Takaisin ylös', 'back_to_top' => 'Takaisin ylös',
'go_back' => 'Takaisin', 'go_back' => 'Takaisin',
'ok' => 'OK', 'ok' => 'OK',
'cancel' => 'Peruuta', 'cancel' => 'Peruuta',
// date/time format according the strftime php function format parameter http://php.net/manual/function.strftime.php
'short_day_format' => '%B %e', 'short_day_format' => '%B %e',
'long_day_format' => '%B %e, %Y', 'long_day_format' => '%B %e, %Y',
'yesterday_format' => 'Eilen klo %k:%M', 'yesterday_format' => 'Eilen klo %k:%M',
@ -80,14 +87,18 @@ $sm_lang = array(
'level' => 'Taso', 'level' => 'Taso',
'level_10' => 'Järjestelmänvalvoja', 'level_10' => 'Järjestelmänvalvoja',
'level_20' => 'Käyttäjä', 'level_20' => 'Käyttäjä',
'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.', '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.',
'mobile' => 'Puhelin', 'mobile' => 'Puhelin',
'email' => 'Sähköposti', 'email' => 'Sähköposti',
'pushover' => 'Pushover', 'pushover' => 'Pushover',
'pushover_description' => 'Pushover on palvelu jolla on helppo lähettää reaaliaikaisia tilaviestejä. Katso <a href="https://pushover.net/">verkkosivuilta</a> lisäinfoa.', 'pushover_description' => 'Pushover on palvelu jolla on helppo lähettää reaaliaikaisia tilaviestejä. Katso
<a href="https://pushover.net/" target="_blank">verkkosivuilta</a> lisäinfoa.',
'pushover_key' => 'Pushover avain', 'pushover_key' => 'Pushover avain',
'pushover_device' => 'Pushover laite', 'pushover_device' => 'Pushover laite',
'pushover_device_description' => 'Laitteen nimi johon viesti lähetetään. Jätä tyhjäksi lähettääksesi kaikkiin laitteisiin.', 'pushover_device_description' => 'Laitteen nimi johon viesti lähetetään. Jätä tyhjäksi lähettääksesi
kaikkiin laitteisiin.',
'delete_title' => 'Poista käyttäjä', 'delete_title' => 'Poista käyttäjä',
'delete_message' => 'Haluatko varmasti poistaa käyttäjän \'%1\'?', 'delete_message' => 'Haluatko varmasti poistaa käyttäjän \'%1\'?',
'deleted' => 'Käyttäjä poistettu.', 'deleted' => 'Käyttäjä poistettu.',
@ -96,7 +107,8 @@ $sm_lang = array(
'profile' => 'Profiili', 'profile' => 'Profiili',
'profile_updated' => 'Profiilisi on päivitetty.', 'profile_updated' => 'Profiilisi on päivitetty.',
'error_user_name_bad_length' => 'Käyttäjänimi saa olla 2-64 merkkiä pitkä.', 'error_user_name_bad_length' => 'Käyttäjänimi saa olla 2-64 merkkiä pitkä.',
'error_user_name_invalid' => 'Käyttäjänimessä saa olla vain kirjaimia (a-z, A-Z), numeroita (0-9), pisteitä (.) ja alaviivoja (_).', 'error_user_name_invalid' => 'Käyttäjänimessä saa olla vain kirjaimia (a-z, A-Z), numeroita (0-9),
pisteitä (.) ja alaviivoja (_).',
'error_user_name_exists' => 'Annettu käyttäjänimi on jo tietokannassa.', 'error_user_name_exists' => 'Annettu käyttäjänimi on jo tietokannassa.',
'error_user_email_bad_length' => 'Sähköpostiosoitteen täytyy olla 5-255 merkkiä pitkä.', 'error_user_email_bad_length' => 'Sähköpostiosoitteen täytyy olla 5-255 merkkiä pitkä.',
'error_user_email_invalid' => 'Annettu sähköposti ei kelpaa.', 'error_user_email_invalid' => 'Annettu sähköposti ei kelpaa.',
@ -129,7 +141,8 @@ $sm_lang = array(
'type_website' => 'Verkkosivu', 'type_website' => 'Verkkosivu',
'type_service' => 'Palvelu', 'type_service' => 'Palvelu',
'pattern' => 'Etsittävä sarja/kuvio', 'pattern' => 'Etsittävä sarja/kuvio',
'pattern_description' => 'Jos määriteltyä sarjaa ei löydetä verkkosivuilta, palvelin merkitään sammuneeksi. REGEX on sallittua.', 'pattern_description' => 'Jos määriteltyä sarjaa ei löydetä verkkosivuilta, palvelin merkitään
sammuneeksi. REGEX on sallittua.',
'last_check' => 'Viimeisin tarkistus', 'last_check' => 'Viimeisin tarkistus',
'last_online' => 'Viimeksi nähty', 'last_online' => 'Viimeksi nähty',
'monitoring' => 'Valvottava', 'monitoring' => 'Valvottava',
@ -159,7 +172,6 @@ $sm_lang = array(
'warning_threshold_description' => 'Epäonnistuneiden tarkistuksien määrä kunnes se merkataan sammuneeksi.', 'warning_threshold_description' => 'Epäonnistuneiden tarkistuksien määrä kunnes se merkataan sammuneeksi.',
'chart_last_week' => 'Viime viikolla', 'chart_last_week' => 'Viime viikolla',
'chart_history' => 'Historia', 'chart_history' => 'Historia',
// 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',
@ -196,24 +208,27 @@ $sm_lang = array(
'sms_gateway_password' => 'Palvelun salasana', 'sms_gateway_password' => 'Palvelun salasana',
'sms_from' => 'Lähettäjän puhelinnumero', 'sms_from' => 'Lähettäjän puhelinnumero',
'pushover_status' => 'Salli Pushover-viestien lähetys', 'pushover_status' => 'Salli Pushover-viestien lähetys',
'pushover_description' => 'Pushover on palvelu jolla on helppo lähettää reaaliaikaisia tilaviestejä. Katso <a href="https://pushover.net/">verkkosivuilta</a> lisäinfoa.', 'pushover_description' => 'Pushover on palvelu jolla on helppo lähettää reaaliaikaisia tilaviestejä. Katso
<a href="https://pushover.net/" target="_blank">verkkosivuilta</a> lisäinfoa.',
'pushover_clone_app' => 'Paina tästä luodaksesi Pushover-sovelluksesi', 'pushover_clone_app' => 'Paina tästä luodaksesi Pushover-sovelluksesi',
'pushover_api_token' => 'Pushover API-avain', 'pushover_api_token' => 'Pushover API-avain',
'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.', '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.',
'alert_type' => 'Valitse milloin haluat ilmoituksia.', 'alert_type' => 'Valitse milloin haluat ilmoituksia.',
'alert_type_description' => '<b>Tilan muutos:</b> '. 'alert_type_description' => '<b>Tilan muutos:</b> Saat ilmoituksen kun palvelimen tila vaihtuu. Eli tilasta
'Saat ilmoituksen kun palvelimen tila vaihtuu. Eli tilasta päällä -> sammunut tai sammunut -> päällä.<br>'. päällä -> sammunut tai sammunut -> päällä.<br><br /><b>Sammunut:</b> Saat
'<br /><b>Sammunut:</b> '. yhden ilmoituksen kun palvelimen tila vaihtuu sammuneeksi, mutta *VAIN
'Saat yhden ilmoituksen kun palvelimen tila vaihtuu sammuneeksi, mutta *VAIN ENSIMMÄISEN KERRAN*. Esimerkiksi, '. ENSIMMÄISEN KERRAN*. Esimerkiksi, jos tarkistus tehdään joka 15 minuutti, ja
'jos tarkistus tehdään joka 15 minuutti, ja palvelin sammuu klo 1 ja pysyy sammuneena klo 6 asti. '. palvelin sammuu klo 1 ja pysyy sammuneena klo 6 asti. Saat vain yhden ilmoituksen
'Saat vain yhden ilmoituksen klo 1, ei muuta.<br>'. klo 1, ei muuta.<br><br><b>Aina:</b> Saat ilmoituksen joka kerta kun palvelin
'<br><b>Aina:</b> '. tarkistetaan, vaikka palvelin olisi ollut sammuneena tunteja.',
'Saat ilmoituksen joka kerta kun palvelin tarkistetaan, vaikka palvelin olisi ollut sammuneena tunteja.',
'alert_type_status' => 'Tilan muutos', 'alert_type_status' => 'Tilan muutos',
'alert_type_offline' => 'Sammunut', 'alert_type_offline' => 'Sammunut',
'alert_type_always' => 'Aina', 'alert_type_always' => 'Aina',
'log_status' => 'Tallenna tapahtumat', 'log_status' => 'Tallenna tapahtumat',
'log_status_description' => 'Jos arvo on tosi, palvelin tallentaa tapahtumamerkinnän jokaisesta tilan muutoksesta.', 'log_status_description' => 'Jos arvo on tosi, palvelin tallentaa tapahtumamerkinnän jokaisesta tilan
muutoksesta.',
'log_email' => 'Tallenna lähetetyt sähköpostitapahtumat', 'log_email' => 'Tallenna lähetetyt sähköpostitapahtumat',
'log_sms' => 'Tallenna lähetetyt tekstiviestitapahtumat', 'log_sms' => 'Tallenna lähetetyt tekstiviestitapahtumat',
'log_pushover' => 'Tallenna lähetetyt Pushover-tapahtumat', 'log_pushover' => 'Tallenna lähetetyt Pushover-tapahtumat',
@ -227,11 +242,8 @@ $sm_lang = array(
'settings_notification' => 'Ilmoitusasetukset', 'settings_notification' => 'Ilmoitusasetukset',
'settings_log' => 'Tapahtumamerkintöjen asetukset', 'settings_log' => 'Tapahtumamerkintöjen asetukset',
'auto_refresh' => 'Automaattipäivitys', 'auto_refresh' => 'Automaattipäivitys',
'auto_refresh_description' => 'auto_refresh_description' => 'Päivittää automaattisesti palvelimet-sivun.<br><span class="small">Aika
'Päivittää automaattisesti palvelimet-sivun.<br>'. sekunteina, jos 0, sivu ei päivity automaattisesti.</span>',
'<span class="small">'.
'Aika sekunteina, jos 0, sivu ei päivity automaattisesti.'.
'</span>',
'seconds' => 'sekuntia', 'seconds' => 'sekuntia',
'test' => 'Testi', 'test' => 'Testi',
'test_email' => 'Testisähköposti lähetetään profiilisi sähköpostiosoitteeseen.', 'test_email' => 'Testisähköposti lähetetään profiilisi sähköpostiosoitteeseen.',
@ -247,25 +259,15 @@ $sm_lang = array(
'sms_error_nomobile' => 'Testitektiviestin lähetys epäonnistui: toimivaa numeroa ei löydetty profiilistasi.', 'sms_error_nomobile' => 'Testitektiviestin lähetys epäonnistui: toimivaa numeroa ei löydetty profiilistasi.',
'pushover_sent' => 'Pushover ilmoitus lähetetty', 'pushover_sent' => 'Pushover ilmoitus lähetetty',
'pushover_error' => 'Virhe Pushover-ilmoitusta lähetettäessä: %s', 'pushover_error' => 'Virhe Pushover-ilmoitusta lähetettäessä: %s',
'pushover_error_noapp' => 'Virhe lähetettäessä Pushover-ilmoitusta: Pushover API-avainta ei löydetty asetuksista.', 'pushover_error_noapp' => 'Virhe lähetettäessä Pushover-ilmoitusta: Pushover API-avainta ei löydetty
'pushover_error_nokey' => 'Virhe lähetettäessä Pushover-ilmoitusta: Pushover avainta ei löydetty profiilistasi.', asetuksista.',
'pushover_error_nokey' => 'Virhe lähetettäessä Pushover-ilmoitusta: Pushover avainta ei löydetty
profiilistasi.',
'log_retention_period' => 'Tapahtumien säilytysaika', 'log_retention_period' => 'Tapahtumien säilytysaika',
'log_retention_period_description' => 'Kuinka monta päivää pitää palvelinten päälläoloaikoja ja muita tapahtumia. Aseta arvoksi 0 jos haluat pitää ne loputtomasti.', 'log_retention_period_description' => 'Kuinka monta päivää pitää palvelinten päälläoloaikoja ja muita
tapahtumia. Aseta arvoksi 0 jos haluat pitää ne loputtomasti.',
'log_retention_days' => 'päivää', 'log_retention_days' => 'päivää',
), ),
// for newlines in the email messages use <br>
'notifications' => array(
'off_sms' => 'Server \'%LABEL%\' is DOWN: ip=%IP%, port=%PORT%. Error=%ERROR%',
'off_email_subject' => 'IMPORTANT: Server \'%LABEL%\' is DOWN',
'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%",
'off_pushover_title' => 'Server \'%LABEL%\' is DOWN',
'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%",
'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%',
),
'login' => array( 'login' => array(
'welcome_usermenu' => 'Tervetuloa, %user_name%', 'welcome_usermenu' => 'Tervetuloa, %user_name%',
'title_sign_in' => 'Ole hyvä ja kirjaudu sisään', 'title_sign_in' => 'Ole hyvä ja kirjaudu sisään',
@ -281,7 +283,8 @@ $sm_lang = array(
'password_forgot' => 'Unohtuiko salasanasi?', 'password_forgot' => 'Unohtuiko salasanasi?',
'password_reset' => 'Resetoi salasanasi', 'password_reset' => 'Resetoi salasanasi',
'password_reset_email_subject' => 'Resetoi salasanasi PHP Server Monitoriin', 'password_reset_email_subject' => 'Resetoi salasanasi PHP Server Monitoriin',
'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_body' => 'Ole hyvä ja käytä seuraavaa linkkiä restoidaksesi salasanasi. Huomaa että
linkki vanhentuu tunnin sisällä.<br><br>%link%',
'error_user_incorrect' => 'Annettua käyttäjänimeä ei löydetty.', 'error_user_incorrect' => 'Annettua käyttäjänimeä ei löydetty.',
'error_login_incorrect' => 'Antamasi tiedot eivät ole oikein.', 'error_login_incorrect' => 'Antamasi tiedot eivät ole oikein.',
'error_login_passwords_nomatch' => 'Annetut salasanat eivät täsmää.', 'error_login_passwords_nomatch' => 'Annetut salasanat eivät täsmää.',

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,7 +29,11 @@
$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(
'0' => 'fr_FR.UTF-8',
'1' => 'fr_FR',
'2' => 'french',
),
'locale_tag' => 'fr', 'locale_tag' => 'fr',
'locale_dir' => 'ltr', 'locale_dir' => 'ltr',
'system' => array( 'system' => array(
@ -45,7 +50,9 @@ $sm_lang = array(
'no' => 'Non', 'no' => 'Non',
'insert' => 'Nouveau', 'insert' => 'Nouveau',
'add_new' => 'Nouveau', 'add_new' => 'Nouveau',
'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>.', '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>.',
'back_to_top' => 'Haut de page', 'back_to_top' => 'Haut de page',
'go_back' => 'Retour', 'go_back' => 'Retour',
'ok' => 'OK', 'ok' => 'OK',
@ -53,7 +60,6 @@ $sm_lang = array(
'cancel' => 'Annuler', 'cancel' => 'Annuler',
'none' => 'Aucun', 'none' => 'Aucun',
'activate' => 'Activer', 'activate' => 'Activer',
// date/time format according the strftime php function format parameter http://php.net/manual/function.strftime.php
'short_day_format' => 'Le %e %B', 'short_day_format' => 'Le %e %B',
'long_day_format' => 'Le %e %B %Y', 'long_day_format' => 'Le %e %B %Y',
'yesterday_format' => 'Hier à %kh%M', 'yesterday_format' => 'Hier à %kh%M',
@ -79,7 +85,7 @@ $sm_lang = array(
'seconds' => 'secondes', 'seconds' => 'secondes',
'current' => 'actuel', 'current' => 'actuel',
'settings' => 'Paramètres', 'settings' => 'Paramètres',
'search' => 'Recherche' 'search' => 'Recherche',
), ),
'menu' => array( 'menu' => array(
'config' => 'Configuration', 'config' => 'Configuration',
@ -100,22 +106,36 @@ $sm_lang = array(
'level' => 'Rôle', 'level' => 'Rôle',
'level_10' => 'Administrateur', 'level_10' => 'Administrateur',
'level_20' => 'Utilisateur', 'level_20' => 'Utilisateur',
'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.', '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.',
'mobile' => 'Téléphone', 'mobile' => 'Téléphone',
'email' => 'Email', 'email' => 'Email',
'pushover' => 'Pushover', 'pushover' => '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.', 'pushover_description' => 'Pushover est un service qui simplifie les notifications en temps réel. Voir <a
href="https://pushover.net/" target="_blank">leur site web</a> pour plus
d\'informations.',
'pushover_key' => 'Clé Pushover', 'pushover_key' => 'Clé Pushover',
'pushover_device' => 'Appareil Pushover', 'pushover_device' => 'Appareil Pushover',
'pushover_device_description' => 'Nom de l\'appareil auquel le message doit être envoyé. Laissez vide pour l\'envoyer à tous les appareils.', 'pushover_device_description' => 'Nom de l\'appareil auquel le message doit être envoyé. Laissez vide pour
l\'envoyer à tous les appareils.',
'telegram' => 'Telegram', 'telegram' => 'Telegram',
'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.', 'telegram_description' => '<a href="https://telegram.org/" target="_blank">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/"
target="_blank">documentation</a> pour obtenir plus d\'informations sur la
configuration de ce service.',
'telegram_chat_id' => 'ID de conversation (Chat ID) Telegram', 'telegram_chat_id' => 'ID de conversation (Chat ID) Telegram',
'telegram_chat_id_description' => 'Les notifications seront envoyées à la conversation correspondante.', 'telegram_chat_id_description' => 'Les notifications seront envoyées à la conversation correspondante.',
'telegram_get_chat_id' => 'Cliquez ici pour obtenir votre ID de conversation (Chat ID)', 'telegram_get_chat_id' => 'Cliquez ici pour obtenir votre ID de conversation (Chat ID)',
'activate_telegram' => 'Activer les alertes Telegram', 'activate_telegram' => 'Activer les alertes Telegram',
'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.', 'activate_telegram_description' => 'Permet aux notifications Telegram d\'être envoyée à la conversation
'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.', spécifiée. Sans cette permission, Telegram ne nous autorise pas à vous
envoyer des notifications.',
'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.',
'telegram_bot_username_error_token' => '<b>401 - Unauthorized</b>. Assuez-vous que le Token API soit valide.', 'telegram_bot_username_error_token' => '<b>401 - Unauthorized</b>. Assuez-vous que le Token API soit valide.',
'telegram_bot_error' => 'Une erreur s\'est produite en tentant d\'activer les notifications Telegram&nbsp;: %s', 'telegram_bot_error' => 'Une erreur s\'est produite en tentant d\'activer les notifications Telegram&nbsp;: %s',
'delete_title' => 'Supprimer un utilisateur', 'delete_title' => 'Supprimer un utilisateur',
@ -126,7 +146,8 @@ $sm_lang = array(
'profile' => 'Profil', 'profile' => 'Profil',
'profile_updated' => 'Votre profil a été mis à jour.', 'profile_updated' => 'Votre profil a été mis à jour.',
'error_user_name_bad_length' => 'Le nom d\'utilisateur doit avoir entre 2 et 64 caractères.', 'error_user_name_bad_length' => 'Le nom d\'utilisateur doit avoir entre 2 et 64 caractères.',
'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 (_).', '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 (_).',
'error_user_name_exists' => 'Ce nom d\'utilisateur existe déjà.', 'error_user_name_exists' => 'Ce nom d\'utilisateur existe déjà.',
'error_user_email_bad_length' => 'L\'adresse email doit avoir entre 5 et 255 caractères.', 'error_user_email_bad_length' => 'L\'adresse email doit avoir entre 5 et 255 caractères.',
'error_user_email_invalid' => 'L\'adresse email n\'est pas valide.', 'error_user_email_invalid' => 'L\'adresse email n\'est pas valide.',
@ -158,9 +179,11 @@ $sm_lang = array(
'authentication_settings' => 'Paramètres d\'authentification', 'authentication_settings' => 'Paramètres d\'authentification',
'optional' => 'Optionnel', 'optional' => 'Optionnel',
'website_username' => 'Nom d\'utilisateur', 'website_username' => 'Nom d\'utilisateur',
'website_username_description' => 'Nom d\'utilisateur pour accèder au site. (Seul l\'authentification Apache est supporté.)', 'website_username_description' => 'Nom d\'utilisateur pour accèder au site. (Seul l\'authentification Apache
est supporté.)',
'website_password' => 'Mot de passe', 'website_password' => 'Mot de passe',
'website_password_description' => 'Mot de passe pour accèder au site. Le mot de passe est cryptè dans la base de donnée.', 'website_password_description' => 'Mot de passe pour accèder au site. Le mot de passe est cryptè dans la
base de donnée.',
'fieldset_monitoring' => 'Monitoring', 'fieldset_monitoring' => 'Monitoring',
'fieldset_permissions' => 'Permissions', 'fieldset_permissions' => 'Permissions',
'permissions' => 'Les utilisateurs suivants pourront voir le serveur.', 'permissions' => 'Les utilisateurs suivants pourront voir le serveur.',
@ -178,13 +201,18 @@ $sm_lang = array(
'type_service' => 'Service', 'type_service' => 'Service',
'type_ping' => 'Ping', 'type_ping' => 'Ping',
'pattern' => 'Rechercher un texte/motif', 'pattern' => 'Rechercher un texte/motif',
'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.', '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.',
'pattern_online' => 'Le texte indique que le site est', 'pattern_online' => 'Le texte indique que le site est',
'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.', 'pattern_online_description' => 'En ligne&nbsp;: Si ce texte est trouvé sur le site internet, le serveur sera
considéré en ligne. Hors-ligne&nbsp;: Si ce texte n\'est pas trouvé sur le
site, le serveur sera considéré hors-ligne.',
'redirect_check' => 'La redirection vers un autre domaine est', 'redirect_check' => 'La redirection vers un autre domaine est',
'redirect_check_description' => 'Une redirection vers un autre domaine est généralement mauvais signe.', 'redirect_check_description' => 'Une redirection vers un autre domaine est généralement mauvais signe.',
'allow_http_status' => 'Autoriser les codes de status HTTP', 'allow_http_status' => 'Autoriser les codes de status HTTP',
'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 |.', '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
|.',
'header_name' => 'Nom d\'en-têtes', 'header_name' => 'Nom d\'en-têtes',
'header_value' => 'Valeur d\'en-tête', 'header_value' => 'Valeur d\'en-tête',
'header_name_description' => 'Sensible à la casse.', 'header_name_description' => 'Sensible à la casse.',
@ -225,10 +253,10 @@ $sm_lang = array(
'day' => 'Jour', 'day' => 'Jour',
'hour' => 'Heure', 'hour' => 'Heure',
'warning_threshold' => 'Seuil d\'alerte', 'warning_threshold' => 'Seuil d\'alerte',
'warning_threshold_description' => 'Nombre d\'échecs de connexion avant que le serveur soit marqué hors-service.', 'warning_threshold_description' => 'Nombre d\'échecs de connexion avant que le serveur soit marqué
hors-service.',
'chart_last_week' => 'La dernière semaine', 'chart_last_week' => 'La dernière semaine',
'chart_history' => 'Historique', 'chart_history' => 'Historique',
// 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',
@ -250,7 +278,10 @@ $sm_lang = array(
'language' => 'Langue', 'language' => 'Langue',
'show_update' => 'Vérifier les nouvelles mises à jour chaque semaine', 'show_update' => 'Vérifier les nouvelles mises à jour chaque semaine',
'password_encrypt_key' => 'Clée de cryptage des mots de passe', 'password_encrypt_key' => 'Clée de cryptage des mots de passe',
'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;!', '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;!',
'proxy' => 'Activer le proxy', 'proxy' => 'Activer le proxy',
'proxy_url' => 'URL du proxy', 'proxy_url' => 'URL du proxy',
'proxy_user' => 'Nom d\'utilisateur du proxy', 'proxy_user' => 'Nom d\'utilisateur du proxy',
@ -272,32 +303,45 @@ $sm_lang = array(
'sms_gateway_password' => 'Mot de passe de la passerelle', 'sms_gateway_password' => 'Mot de passe de la passerelle',
'sms_from' => 'SMS de l\'expéditeur', 'sms_from' => 'SMS de l\'expéditeur',
'pushover_status' => 'Autoriser l\'envoi des messages Pushover', '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.', 'pushover_description' => 'Pushover est un service qui simplifie les notifications en temps réel. Voir <a
href="https://pushover.net/" target="_blank">leur site web</a> pour plus
d\'informations.',
'pushover_clone_app' => 'Cliquez ici pour créer votre application Pushover', 'pushover_clone_app' => 'Cliquez ici pour créer votre application Pushover',
'pushover_api_token' => 'Jeton application Pushover', 'pushover_api_token' => 'Jeton application Pushover',
'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.', '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.',
'telegram_status' => 'Autorise l\'envoi de message Telegram', 'telegram_status' => 'Autorise l\'envoi de message Telegram',
'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.', 'telegram_description' => '<a href="https://telegram.org/" target="_blank">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/"
target="_blank">documentation</a> pour obtenir plus d\'informations sur la
configuration de ce service.',
'telegram_api_token' => 'Token API Telegram', 'telegram_api_token' => 'Token API Telegram',
'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.', 'telegram_api_token_description' => 'Afin de pouvoir utiliser Telegram, il vous faut obtenir un token api.
Consultez la <a href="http://docs.phpservermonitor.org/"
target="_blank">documentation</a> pour obtenir de l\'aide.',
'alert_type' => 'Choisissez quand vous souhaitez être notifié', 'alert_type' => 'Choisissez quand vous souhaitez être notifié',
'alert_type_description' => '<b>Changement d\'état&nbsp;: </b>'. 'alert_type_description' => '<b>Changement d\'état&nbsp;: </b>Vous recevez une notification chaque fois que
'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>'. le serveur change d\'état. C\'est-à-dire passe de l\'état OK à HORS SERVICE
'<br><b>Hors service&nbsp;: </b>'. ou de HORS SERVICE à OK.<br><br><b>Hors service&nbsp;: </b>Vous ne recevez une
'Vous ne recevez une notification que quand le serveur passe de l\'état OK à HORS SERVICE. Par exemple, '. notification que quand le serveur passe de l\'état OK à HORS SERVICE. Par
'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.'. exemple, Votre tâche planifiée s\'exécute toutes les 15 minutes et votre
'Vous ne recevez qu\'une seule notification à 1 heure du matin.<br>'. serveur passe à l\'état HORS SERVICE à 1 heure du matin et le reste jusqu\'à
'<br><b>Toujours&nbsp;: </b>'. 6 heures du matin.Vous ne recevez qu\'une seule notification à 1 heure du
'Vous recevez une notification à chaque exécution de la tâche planifiée si le serveur est à l\'état HORS SERVICE ', matin.<br><br><b>Toujours&nbsp;: </b>Vous recevez une notification à chaque
exécution de la tâche planifiée si le serveur est à l\'état HORS SERVICE ',
'alert_type_status' => 'Changement d\'état', 'alert_type_status' => 'Changement d\'état',
'alert_type_offline' => 'Hors service', 'alert_type_offline' => 'Hors service',
'alert_type_always' => 'Toujours', 'alert_type_always' => 'Toujours',
'combine_notifications' => 'Combiner les notifications', 'combine_notifications' => 'Combiner les notifications',
'combine_notifications_description' => 'Réduit le nombre de notifications en les combinant toutes en une seule. (Cela ne s\'applique pas aux SMS.)', 'combine_notifications_description' => 'Réduit le nombre de notifications en les combinant toutes en une
seule. (Cela ne s\'applique pas aux SMS.)',
'alert_proxy' => 'Le serveur proxy n\'est jamais utilisé pour les services, même quand celui-ci est activé.', 'alert_proxy' => 'Le serveur proxy n\'est jamais utilisé pour les services, même quand celui-ci est activé.',
'alert_proxy_url' => 'Format&nbsp;: hôte:port', 'alert_proxy_url' => 'Format&nbsp;: hôte:port',
'log_status' => 'Etat des événements', 'log_status' => 'Etat des événements',
'log_status_description' => 'Si l\'option est activée, un événement est enregistré chaque fois qu\'une notification a lieu.', 'log_status_description' => 'Si l\'option est activée, un événement est enregistré chaque fois qu\'une
notification a lieu.',
'log_email' => 'Enregistrer tous les emails envoyés', 'log_email' => 'Enregistrer tous les emails envoyés',
'log_sms' => 'Enregistrer tous les SMS envoyés', 'log_sms' => 'Enregistrer tous les SMS envoyés',
'log_pushover' => 'Enregistrer tous les messages Pushover envoyés', 'log_pushover' => 'Enregistrer tous les messages Pushover envoyés',
@ -315,17 +359,16 @@ $sm_lang = array(
'settings_log' => 'Configuration des événements', 'settings_log' => 'Configuration des événements',
'settings_proxy' => 'Configuration du proxy', 'settings_proxy' => 'Configuration du proxy',
'auto_refresh' => 'Auto-rachaîchissement', 'auto_refresh' => 'Auto-rachaîchissement',
'auto_refresh_description' => 'auto_refresh_description' => 'Auto-rachaîchissement de la page serveurs.<br><span class="small">Temps en
'Auto-rachaîchissement de la page serveurs.<br>'. secondes. Si 0, la page n\'est pas rafraîchie.</span>',
'<span class="small">'.
'Temps en secondes. Si 0, la page n\'est pas rafraîchie.'.
'</span>',
'seconds' => 'secondes', 'seconds' => 'secondes',
'test' => 'Tester', 'test' => 'Tester',
'test_email' => 'Un email va vous être envoyé à l\'adresse définie dans votre profil utilisateur.', 'test_email' => 'Un email va vous être envoyé à l\'adresse définie dans votre profil utilisateur.',
'test_sms' => 'Un SMS va vous être envoyé au numéro défini dans votre profil utilisateur.', 'test_sms' => 'Un SMS va vous être envoyé au numéro défini dans votre profil utilisateur.',
'test_pushover' => 'Une notification Pushover va être envoyée en utilisant la clé spécifiée dans votre profil utilisateur.', 'test_pushover' => 'Une notification Pushover va être envoyée en utilisant la clé spécifiée dans votre
'test_telegram' => 'Une notification Telegram sera envoyé à la conversion indiqué sur votre profil (ID de conversation).', profil utilisateur.',
'test_telegram' => 'Une notification Telegram sera envoyé à la conversion indiqué sur votre profil (ID de
conversation).',
'send' => 'Envoyer', 'send' => 'Envoyer',
'test_subject' => 'Test', 'test_subject' => 'Test',
'test_message' => 'Message de test', 'test_message' => 'Message de test',
@ -333,44 +376,73 @@ $sm_lang = array(
'email_error' => 'Erreur lors de l\'envoi de l\'email', 'email_error' => 'Erreur lors de l\'envoi de l\'email',
'sms_sent' => 'SMS envoyé', 'sms_sent' => 'SMS envoyé',
'sms_error' => 'Erreur lors de l\'envoi du SMS. %s', 'sms_error' => 'Erreur lors de l\'envoi du SMS. %s',
'sms_error_nomobile' => 'Impossible d\'envoyer un SMS de test: aucun numéro de téléphone défini dans votre profil.', 'sms_error_nomobile' => 'Impossible d\'envoyer un SMS de test: aucun numéro de téléphone défini dans votre
profil.',
'pushover_sent' => 'Notification Pushover envoyée', 'pushover_sent' => 'Notification Pushover envoyée',
'pushover_error' => 'Une erreur s\'est produite lors de l\'envoi de la notification Pushover&nbsp;: %s', 'pushover_error' => 'Une erreur s\'est produite lors de l\'envoi de la notification Pushover&nbsp;: %s',
'pushover_error_noapp' => 'Impossible d\'envoyer une notification de test: Aucun jeton application Pushover n\'a été défini dans la configuration Pushover.', 'pushover_error_noapp' => 'Impossible d\'envoyer une notification de test: Aucun jeton application Pushover
'pushover_error_nokey' => 'Impossible d\'envoyer une notification de test: Aucune clé Pushover n\'a été définie dans votre profil.', n\'a été défini dans la configuration Pushover.',
'pushover_error_nokey' => 'Impossible d\'envoyer une notification de test: Aucune clé Pushover n\'a été
définie dans votre profil.',
'telegram_sent' => 'Notification Telegram envoyée', 'telegram_sent' => 'Notification Telegram envoyée',
'telegram_error' => 'Une erreur s\'est produite lors de l\'envoi de la notification&nbsp;: %s', 'telegram_error' => 'Une erreur s\'est produite lors de l\'envoi de la notification&nbsp;: %s',
'telegram_error_notoken' => 'Impossible d\'envoyé la notification de test&nbsp;: aucun token APII token trouvé dans la configuration.', 'telegram_error_notoken' => 'Impossible d\'envoyé la notification de test&nbsp;: aucun token APII token
'telegram_error_noid' => 'Impossible d\'envoyé la notification de test&nbsp;: aucun ID de conversation trouvé dans votre profil utilisateur.', trouvé dans la configuration.',
'telegram_error_noid' => 'Impossible d\'envoyé la notification de test&nbsp;: aucun ID de conversation
trouvé dans votre profil utilisateur.',
'log_retention_period' => 'Durée de conservation', 'log_retention_period' => 'Durée de conservation',
'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_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_retention_days' => 'jours', 'log_retention_days' => 'jours',
), ),
// for newlines in the email messages use <br>
'notifications' => array( 'notifications' => array(
'off_sms' => 'Le Serveur \'%LABEL%\' est HORS SERVICE: IP=%IP%, Port=%PORT%. Erreur=%ERROR%', 'off_sms' => 'Le Serveur \'%LABEL%\' est HORS SERVICE: IP=%IP%, Port=%PORT%. Erreur=%ERROR%',
'off_email_subject' => 'IMPORTANT: Le Serveur \'%LABEL%\' est HORS SERVICE', 'off_email_subject' => 'IMPORTANT: Le Serveur \'%LABEL%\' est HORS SERVICE',
'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_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_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_pushover_message' => 'Impossible de se connecter au serveur suivant&nbsp;:<br><br>Serveur&nbsp;:
'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%", %LABEL%<br>IP&nbsp;: %IP%<br>Port&nbsp;: %PORT%<br>Erreur&nbsp;:
'on_sms' => 'Le Serveur \'%LABEL%\' est OK: IP=%IP%, Port=%PORT%, il était hors-ligne pendant %LAST_OFFLINE_DURATION%', %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_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_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_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_pushover_message' => 'Le Serveur \'%LABEL%\' est de nouveau OK, il était hors-ligne pendant
'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%', %LAST_OFFLINE_DURATION%:<br><br>Serveur: %LABEL%<br>IP: %IP%<br>Port:
'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>", %PORT%<br>Date: %DATE%',
'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>", 'on_telegram_message' => 'Server \'%LABEL%\' is running again, it was down for:
'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>", %LAST_OFFLINE_DURATION%<br><br>Server: %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>Date:
'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>", %DATE%',
'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_off_email_message' => '<ul><li>Serveur&nbsp;: %LABEL%</li><li>IP&nbsp;: %IP%</li><li>Port&nbsp;:
'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>', %PORT%</li><li>Erreur&nbsp;: %ERROR%</li><li>Date&nbsp;: %DATE%</li></ul>',
'combi_email_subject' => 'IMPORTANT&nbsp;: \'%UP%\' serveurs de nouveaux en ligne, \'%DOWN%\' serveurs hors-ligne', '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_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_email_message' => '<b>Les serveurs suivants sont hors-ligne&nbsp;:</b><br>%DOWN_SERVERS%<br><b>Les
'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%', 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%', '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( 'login' => array(
'welcome_usermenu' => 'Bonjour %user_name%', 'welcome_usermenu' => 'Bonjour %user_name%',
@ -387,7 +459,8 @@ $sm_lang = array(
'password_forgot' => 'Mot de passe oublié&nbsp;?', 'password_forgot' => 'Mot de passe oublié&nbsp;?',
'password_reset' => 'Réinitialiser le mot de passe', '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_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%', '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_user_incorrect' => 'Nom d\'utilisateur invalide.',
'error_login_incorrect' => 'Informations incorrectes.', 'error_login_incorrect' => 'Informations incorrectes.',
'error_login_passwords_nomatch' => 'Mot de passe invalide.', 'error_login_passwords_nomatch' => 'Mot de passe invalide.',

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,7 +28,12 @@
$sm_lang = array( $sm_lang = array(
'name' => 'Italiano - Italian', 'name' => 'Italiano - Italian',
'locale' => array('it_IT.UTF-8', 'it_IT', 'italian', 'ita'), 'locale' => array(
'0' => 'it_IT.UTF-8',
'1' => 'it_IT',
'2' => 'italian',
'3' => 'ita',
),
'locale_tag' => 'it', 'locale_tag' => 'it',
'locale_dir' => 'ltr', 'locale_dir' => 'ltr',
'system' => array( 'system' => array(
@ -43,12 +49,13 @@ $sm_lang = array(
'no' => 'No', 'no' => 'No',
'insert' => 'Inserisci', 'insert' => 'Inserisci',
'add_new' => 'Aggiungi Nuovo', 'add_new' => 'Aggiungi Nuovo',
'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>.', '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>.',
'back_to_top' => 'Torna su', 'back_to_top' => 'Torna su',
'go_back' => 'Indietro', 'go_back' => 'Indietro',
'ok' => 'OK', 'ok' => 'OK',
'cancel' => 'Annulla', 'cancel' => 'Annulla',
// date/time format according the strftime php function format parameter http://php.net/manual/function.strftime.php
'short_day_format' => '%e %B', 'short_day_format' => '%e %B',
'long_day_format' => '%e %B %Y', 'long_day_format' => '%e %B %Y',
'yesterday_format' => 'Ieri alle %H:%M', 'yesterday_format' => 'Ieri alle %H:%M',
@ -60,18 +67,6 @@ $sm_lang = array(
'a_minute_ago' => 'circa un minuto fa', 'a_minute_ago' => 'circa un minuto fa',
'seconds_ago' => '%d secondi fa', 'seconds_ago' => '%d secondi fa',
'a_second_ago' => 'un secondo fa', 'a_second_ago' => 'un secondo fa',
'year' => 'year',
'years' => 'years',
'month' => 'month',
'months' => 'months',
'day' => 'day',
'days' => 'days',
'hour' => 'hour',
'hours' => 'hours',
'minute' => 'minute',
'minutes' => 'minutes',
'second' => 'second',
'seconds' => 'seconds',
), ),
'menu' => array( 'menu' => array(
'config' => 'Configurazione', 'config' => 'Configurazione',
@ -92,14 +87,18 @@ $sm_lang = array(
'level' => 'Livello', 'level' => 'Livello',
'level_10' => 'Amministratore', 'level_10' => 'Amministratore',
'level_20' => 'Utente', 'level_20' => 'Utente',
'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.', '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.',
'mobile' => 'Cellulare', 'mobile' => 'Cellulare',
'email' => 'Email', 'email' => 'Email',
'pushover' => 'Pushover', 'pushover' => '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
<a href="https://pushover.net/">il loro sito web</a> per maggiori informazioni.',
'pushover_key' => 'Pushover Key', 'pushover_key' => 'Pushover Key',
'pushover_device' => 'Dispositivo Pushover', 'pushover_device' => 'Dispositivo Pushover',
'pushover_device_description' => 'Nome del dispositivo a cui inviare il messaggio. Lascia vuoto per inviarlo a tutti i dispositivi.', 'pushover_device_description' => 'Nome del dispositivo a cui inviare il messaggio. Lascia vuoto per inviarlo a
tutti i dispositivi.',
'delete_title' => 'Elimina Utente', 'delete_title' => 'Elimina Utente',
'delete_message' => 'Sei sicuro di voler eliminare l\'utente \'%1\'?', 'delete_message' => 'Sei sicuro di voler eliminare l\'utente \'%1\'?',
'deleted' => 'Utente eliminato.', 'deleted' => 'Utente eliminato.',
@ -108,7 +107,8 @@ $sm_lang = array(
'profile' => 'Profilo', 'profile' => 'Profilo',
'profile_updated' => 'Il tuo profilo è stato aggiornato.', 'profile_updated' => 'Il tuo profilo è stato aggiornato.',
'error_user_name_bad_length' => 'Il nome utente deve essere composto da almeno 2 caratteri (massimo 64).', 'error_user_name_bad_length' => 'Il nome utente deve essere composto da almeno 2 caratteri (massimo 64).',
'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_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.',
@ -141,7 +141,8 @@ $sm_lang = array(
'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 fuori linea. Le espressioni regolari sono consentite.', 'pattern_description' => 'Se questo pattern non è trovato nel sito web, il server verrà contrassegnato come
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',
@ -172,7 +173,6 @@ $sm_lang = array(
'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',
@ -186,7 +186,8 @@ $sm_lang = array(
'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, superiore a zero.', 'error_server_warning_threshold_invalid' => 'La soglia d\'allarme deve essere un numero intero valido,
superiore a zero.',
), ),
'config' => array( 'config' => array(
'general' => 'Generale', 'general' => 'Generale',
@ -209,24 +210,28 @@ $sm_lang = array(
'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
<a href="https://pushover.net/">il loro sito web</a> per maggiori informazioni.',
'pushover_clone_app' => 'Clicca qui per creare la tua Pushover app', 'pushover_clone_app' => 'Clicca qui per creare la tua Pushover app',
'pushover_api_token' => 'Pushover App API Token', 'pushover_api_token' => 'Pushover App API Token',
'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_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.',
'alert_type' => 'Seleziona quando vuoi essere notificato', 'alert_type' => 'Seleziona quando vuoi essere notificato',
'alert_type_description' => '<b>Cambio di Stato:</b> '. 'alert_type_description' => '<b>Cambio di Stato:</b> Riceverai una notifica solo quando un server cambierà
'Riceverai una notifica solo quando un server cambierà stato. Quindi da online -> offline oppure da offline -> online.<br>'. stato. Quindi da online -> offline oppure da offline -> online.<br><br /><b>Fuori
'<br /><b>Fuori linea:</b> '. linea:</b> Riceverai una notifica solo quando un server andrà offline *SOLO LA
'Riceverai una notifica solo quando un server andrà offline *SOLO LA PRIMA VOLTA*. Per esempio, '. PRIMA VOLTA*. Per esempio, Se il tuo cronjob è impostato per controllare ogni 15
'Se il tuo cronjob è impostato per controllare ogni 15 min e il tuo server andrà offline dalle 2AM alle 6AM. '. min e il tuo server andrà offline dalle 2AM alle 6AM. Riceverai una sola
'Riceverai una sola notifica alle 2AM e nient\'altro.<br>'. notifica alle 2AM e nient\'altro.<br><br><b>Sempre:</b> Riceverai una notifica
'<br><b>Sempre:</b> '. ogni volta che lo script troverà un server down anche se è stato offline per
'Riceverai una notifica ogni volta che lo script troverà un server down anche se è stato offline per ore.', ore.',
'alert_type_status' => 'Cambio di Stato', 'alert_type_status' => 'Cambio di Stato',
'alert_type_offline' => 'Fuori linea', 'alert_type_offline' => 'Fuori linea',
'alert_type_always' => 'Sempre', 'alert_type_always' => 'Sempre',
'log_status' => 'Stato Log', 'log_status' => 'Stato Log',
'log_status_description' => 'Se lo Stato Log è impostato su VERO, il monitor registrerà nel log gli eventi appena le notifiche verranno inviate.', 'log_status_description' => 'Se lo Stato Log è impostato su VERO, il monitor registrerà nel log gli eventi
appena le notifiche verranno inviate.',
'log_email' => 'Registra email inviate dal sistema.', 'log_email' => 'Registra email inviate dal sistema.',
'log_sms' => 'Registra SMS inviati dal sistema.', 'log_sms' => 'Registra SMS inviati dal sistema.',
'log_pushover' => 'Registra messaggi Pushover inviati dal sistema', 'log_pushover' => 'Registra messaggi Pushover inviati dal sistema',
@ -240,11 +245,8 @@ $sm_lang = array(
'settings_notification' => 'Impostazioni Notifiche', 'settings_notification' => 'Impostazioni Notifiche',
'settings_log' => 'Impostazioni Log', 'settings_log' => 'Impostazioni Log',
'auto_refresh' => 'Auto-Aggiornamento', 'auto_refresh' => 'Auto-Aggiornamento',
'auto_refresh_description' => 'auto_refresh_description' => 'Auto-Aggiornamento pagina servers.<br><span class="small">Tempo in secondi, se
'Auto-Aggiornamento pagina servers.<br>'. impostato a 0 la pagina non si aggiornerà.</span>',
'<span class="small">'.
'Tempo in secondi, se impostato a 0 la pagina non si aggiornerà.'.
'</span>',
'seconds' => 'secondi', 'seconds' => 'secondi',
'test' => 'Test', 'test' => 'Test',
'test_email' => 'Un Email verrà inviata all\'indirizzo specificato nel tuo profilo.', 'test_email' => 'Un Email verrà inviata all\'indirizzo specificato nel tuo profilo.',
@ -260,24 +262,32 @@ $sm_lang = array(
'sms_error_nomobile' => 'Impossibile inviare SMS: nessun numero di telefono valido inserito nel tuo profilo.', 'sms_error_nomobile' => 'Impossibile inviare SMS: nessun numero di telefono valido inserito nel tuo profilo.',
'pushover_sent' => 'Notifica Pushover inviata', 'pushover_sent' => 'Notifica Pushover inviata',
'pushover_error' => 'Riscontrato un errore durante l\'invio della notifica Pushover: %s', 'pushover_error' => 'Riscontrato un errore durante l\'invio della notifica Pushover: %s',
'pushover_error_noapp' => 'Impossibile inviare la notifica: nessun \'Pushover App API Token\' inserito nella configurazione globale.', 'pushover_error_noapp' => 'Impossibile inviare la notifica: nessun \'Pushover App API Token\' inserito nella
configurazione globale.',
'pushover_error_nokey' => 'Impossibile inviare la notifica: nessuna \'Pushover Key\' inserita nel tuo profilo.', 'pushover_error_nokey' => 'Impossibile inviare la notifica: nessuna \'Pushover Key\' inserita nel tuo profilo.',
'log_retention_period' => 'Periodo conservazione Log', 'log_retention_period' => 'Periodo conservazione Log',
'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.', '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.',
'log_retention_days' => 'giorni', 'log_retention_days' => 'giorni',
), ),
// for newlines in the email messages use <br>
'notifications' => array( 'notifications' => array(
'off_sms' => 'Server \'%LABEL%\' INATTIVO: ip=%IP%, porta=%PORT%. Errore=%ERROR%', 'off_sms' => 'Server \'%LABEL%\' INATTIVO: ip=%IP%, porta=%PORT%. Errore=%ERROR%',
'off_email_subject' => 'IMPORTANTE: Il Server \'%LABEL%\' è INATTIVO', '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%", 'off_email_body' => 'Impossibile connettersi al seguente server:<br><br>Server: %LABEL%<br>IP: %IP%<br>Porta:
%PORT%<br>Errore: %ERROR%<br>Data: %DATE%',
'off_pushover_title' => 'Server \'%LABEL%\' INATTIVO', 'off_pushover_title' => 'Server \'%LABEL%\' INATTIVO',
'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_pushover_message' => 'Impossibile connettersi al seguente server:<br><br>Server: %LABEL%<br>IP:
%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%', 'on_sms' => 'Server \'%LABEL%\' ATTIVO: ip=%IP%, porta=%PORT%, it was down for %LAST_OFFLINE_DURATION%',
'on_email_subject' => 'IMPORTANTE: Server \'%LABEL%\' è ATTIVO', 'on_email_subject' => 'IMPORTANTE: Server \'%LABEL%\' è ATTIVO',
'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%", '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%',
'on_pushover_title' => 'Server \'%LABEL%\' ATTIVO', 'on_pushover_title' => 'Server \'%LABEL%\' ATTIVO',
'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%", '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%',
), ),
'login' => array( 'login' => array(
'welcome_usermenu' => 'Benvenuto, %user_name%', 'welcome_usermenu' => 'Benvenuto, %user_name%',
@ -294,13 +304,16 @@ $sm_lang = array(
'password_forgot' => 'Password dimenticata?', 'password_forgot' => 'Password dimenticata?',
'password_reset' => 'Reimposta password', 'password_reset' => 'Reimposta password',
'password_reset_email_subject' => 'Reimpossta la tua password per PHP Server Monitor', 'password_reset_email_subject' => 'Reimpossta la tua password per PHP Server Monitor',
'password_reset_email_body' => 'Usa il seguente link per reimpostare la tua password. Ricordati che scade tra un ora.<br><br>%link%', 'password_reset_email_body' => 'Usa il seguente link per reimpostare la tua password. Ricordati che scade tra
un ora.<br><br>%link%',
'error_user_incorrect' => 'Il nome utente inserito non è staot trovato.', 'error_user_incorrect' => 'Il nome utente inserito non è staot trovato.',
'error_login_incorrect' => 'Le informazioni sono errate.', 'error_login_incorrect' => 'Le informazioni sono errate.',
'error_login_passwords_nomatch' => 'Le password inserite non sono valide.', 'error_login_passwords_nomatch' => 'Le password inserite non sono valide.',
'error_reset_invalid_link' => 'Il link di reimpostazione password non è valido.', '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_forgot' => 'Ti è stata inviata un\'Email con le istruzioni da seguire per reimpostare la
'success_password_reset' => 'La tua password è stata correttamente reimpostata. Ora puoi effettuare l\'accesso.', tua password.',
'success_password_reset' => 'La tua password è stata correttamente reimpostata. Ora puoi effettuare
l\'accesso.',
), ),
'error' => array( 'error' => array(
'401_unauthorized' => 'Non autorizzato', '401_unauthorized' => 'Non autorizzato',

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,7 +28,12 @@
$sm_lang = array( $sm_lang = array(
'name' => '日本語 - Japanese', 'name' => '日本語 - Japanese',
'locale' => array('ja_JP.UTF-8', 'ja_JP', 'Japan', 'Japanese'), 'locale' => array(
'0' => 'ja_JP.UTF-8',
'1' => 'ja_JP',
'2' => 'Japan',
'3' => 'Japanese',
),
'locale_tag' => 'ja', 'locale_tag' => 'ja',
'locale_dir' => 'ltr', 'locale_dir' => 'ltr',
'system' => array( 'system' => array(
@ -43,7 +49,10 @@ $sm_lang = array(
'no' => 'いいえ', 'no' => 'いいえ',
'insert' => '挿入', 'insert' => '挿入',
'add_new' => '新規に追加', 'add_new' => '新規に追加',
'update_available' => '新しいバージョン({version}) がリリースされています。ここから入手可能です: <a href="https://github.com/phpservermon/phpservermon/releases/latest" target="_blank" rel="noopener">http://www.phpservermonitor.org</a>.', 'update_available' => '新しいバージョン({version})
がリリースされています。ここから入手可能です: <a
href="https://github.com/phpservermon/phpservermon/releases/latest" target="_blank"
rel="noopener">http://www.phpservermonitor.org</a>.',
'back_to_top' => 'トップに戻る', 'back_to_top' => 'トップに戻る',
'go_back' => '戻る', 'go_back' => '戻る',
'ok' => 'OK', 'ok' => 'OK',
@ -51,8 +60,6 @@ $sm_lang = array(
'cancel' => 'キャンセル', 'cancel' => 'キャンセル',
'none' => 'なし', 'none' => 'なし',
'activate' => '有効化', 'activate' => '有効化',
'advanced' => '高度な設定',
// date/time format according the strftime php function format parameter http://php.net/manual/function.strftime.php
'short_day_format' => '%B %e', 'short_day_format' => '%B %e',
'long_day_format' => '%B %e, %Y', 'long_day_format' => '%B %e, %Y',
'yesterday_format' => '昨日の %k:%M', 'yesterday_format' => '昨日の %k:%M',
@ -76,8 +83,6 @@ $sm_lang = array(
'minutes' => '分', 'minutes' => '分',
'second' => '秒', 'second' => '秒',
'seconds' => '秒', 'seconds' => '秒',
'online' => 'オンライン',
'offline' => 'オフライン',
), ),
'menu' => array( 'menu' => array(
'config' => '設定', 'config' => '設定',
@ -98,23 +103,36 @@ $sm_lang = array(
'level' => 'レベル', 'level' => 'レベル',
'level_10' => '管理者(Administrator)', 'level_10' => '管理者(Administrator)',
'level_20' => 'ユーザー(User)', 'level_20' => 'ユーザー(User)',
'level_description' => '<b>管理者(Administrator)</b> はフルアクセス権があります:サーバーの管理、 ユーザーとグローバル設定を変更できます。<br><b>ユーザー(Users)</b>は、割り当てられたサーバーのアップデータのみを表示して実行できます。', 'level_description' => '<b>管理者(Administrator)</b>
はフルアクセス権があります:サーバーの管理、
ユーザーとグローバル設定を変更できます。<br><b>ユーザー(Users)</b>は、割り当てられたサーバーのアップデータのみを表示して実行できます。',
'mobile' => 'モバイル', 'mobile' => 'モバイル',
'email' => 'メールアドレス', 'email' => 'メールアドレス',
'pushover' => 'Pushover', 'pushover' => 'Pushover',
'pushover_description' => 'Pushoverサービスは、リアルタイムで通知を受け取るのが簡単にできます。詳細についてはこちらをご覧ください <a href="https://pushover.net/" target="_blank" rel="noopener">https://pushover.net/</a>', 'pushover_description' => 'Pushoverサービスは、リアルタイムで通知を受け取るのが簡単にできます。詳細についてはこちらをご覧ください
<a href="https://pushover.net/" target="_blank"
rel="noopener">https://pushover.net/</a>',
'pushover_key' => 'Pushoverキー', 'pushover_key' => 'Pushoverキー',
'pushover_device' => 'Pushoverデバイス', 'pushover_device' => 'Pushoverデバイス',
'pushover_device_description' => '指定したデバイスに送信します。空欄ですべてのデバイスに送信できます。', 'pushover_device_description' => '指定したデバイスに送信します。空欄ですべてのデバイスに送信できます。',
'telegram' => 'Telegram', 'telegram' => 'Telegram',
'telegram_description' => '<a href="https://telegram.org/" target="_blank" rel="noopener">Telegram</a> はチャットアプリで、簡単にリアルタイム通知を受け取ることができます。 <a href="http://docs.phpservermonitor.org/" target="_blank" rel="noopener">ドキュメント</a> で詳しい情報、インストールの方法を知りましょう。', 'telegram_description' => '<a href="https://telegram.org/" target="_blank" rel="noopener">Telegram</a>
はチャットアプリで、簡単にリアルタイム通知を受け取ることができます。
<a href="http://docs.phpservermonitor.org/" target="_blank"
rel="noopener">ドキュメント</a>
で詳しい情報、インストールの方法を知りましょう。',
'telegram_chat_id' => 'Telegram チャットID', 'telegram_chat_id' => 'Telegram チャットID',
'telegram_chat_id_description' => 'メッセージは対応するチャットへ送信されます。', 'telegram_chat_id_description' => 'メッセージは対応するチャットへ送信されます。',
'telegram_get_chat_id' => 'ここをクリックしてあなたのチャットIDを取得します。', 'telegram_get_chat_id' => 'ここをクリックしてあなたのチャットIDを取得します。',
'activate_telegram' => 'Telegramの通知を有効化', 'activate_telegram' => 'Telegramの通知を有効化',
'activate_telegram_description' => '指定されたチャットIDにTelegram通知を送信できるようにします。 この許可がなければ、Telegramはあなたに通知を送信することができません。', 'activate_telegram_description' => '指定されたチャットIDにTelegram通知を送信できるようにします。
'telegram_bot_username_found' => 'ボットが見つかりました!<br><a href="%s" target="_blank"><button class="btn btn-primary">次のステップ</button></a> <br>これにより、ボットとあなたのチャットが開かれます。ここであなたは、 /start を入力する必要があります。', この許可がなければ、Telegramはあなたに通知を送信することができません。',
'telegram_bot_username_error_token' => '401 - 未認証。 APIトークンが有効であることを確認してください。', 'telegram_bot_username_found' => 'ボットが見つかりました!<br><a href="%s" target="_blank"><button
class="btn btn-primary">次のステップ</button></a>
<br>これにより、ボットとあなたのチャットが開かれます。ここであなたは、
/start を入力する必要があります。',
'telegram_bot_username_error_token' => '401 - 未認証。
APIトークンが有効であることを確認してください。',
'telegram_bot_error' => 'Telegram通知を有効化中にエラーが発生: %s', 'telegram_bot_error' => 'Telegram通知を有効化中にエラーが発生: %s',
'delete_title' => 'ユーザーを削除', 'delete_title' => 'ユーザーを削除',
'delete_message' => '本当にユーザーを削除しますか?: \'%1\'?', 'delete_message' => '本当にユーザーを削除しますか?: \'%1\'?',
@ -124,7 +142,8 @@ $sm_lang = array(
'profile' => 'プロフィール', 'profile' => 'プロフィール',
'profile_updated' => 'あなたのプロフィールは更新されました。', 'profile_updated' => 'あなたのプロフィールは更新されました。',
'error_user_name_bad_length' => 'ユーザーネームは264文字以内で入力してください。', 'error_user_name_bad_length' => 'ユーザーネームは264文字以内で入力してください。',
'error_user_name_invalid' => 'ユーザー名は、アルファベット、数字とアンダーバーのみを含むことができます ドット(.)。', 'error_user_name_invalid' => 'ユーザー名は、アルファベット、数字とアンダーバーのみを含むことができます
ドット(.)。',
'error_user_name_exists' => '登録しようとしたユーザー名は既にデータベースに登録されています。', 'error_user_name_exists' => '登録しようとしたユーザー名は既にデータベースに登録されています。',
'error_user_email_bad_length' => 'メールアドレスは5255文字以内で入力してください。', 'error_user_email_bad_length' => 'メールアドレスは5255文字以内で入力してください。',
'error_user_email_invalid' => 'メールアドレスが無効です。', 'error_user_email_invalid' => 'メールアドレスが無効です。',
@ -156,7 +175,8 @@ $sm_lang = array(
'authentication_settings' => '認証設定', 'authentication_settings' => '認証設定',
'optional' => 'オプション', 'optional' => 'オプション',
'website_username' => 'ユーザー名', 'website_username' => 'ユーザー名',
'website_username_description' => 'ユーザー名でウェブサイトにアクセスします。 (サポートはApache認証のみです。)', 'website_username_description' => 'ユーザー名でウェブサイトにアクセスします。
(サポートはApache認証のみです。)',
'website_password' => 'パスワード', 'website_password' => 'パスワード',
'website_password_description' => 'パスワードはサイトのアクセスに使用します。パスワードは暗号化されてデータベースへ保存されます。', 'website_password_description' => 'パスワードはサイトのアクセスに使用します。パスワードは暗号化されてデータベースへ保存されます。',
'fieldset_monitoring' => 'モニター', 'fieldset_monitoring' => 'モニター',
@ -168,7 +188,8 @@ $sm_lang = array(
'custom_request_method' => 'カスタムリクエストメソッド', 'custom_request_method' => 'カスタムリクエストメソッド',
'popular_request_methods' => '主要なリクエストメソッド', 'popular_request_methods' => '主要なリクエストメソッド',
'post_field' => 'Postフィールド', 'post_field' => 'Postフィールド',
'post_field_description' => 'このデータは上記のリクエストメソッドを使用する際に使用されます。 例: param1=val1&amp;param2=val2&...', 'post_field_description' => 'このデータは上記のリクエストメソッドを使用する際に使用されます。
: param1=val1&amp;param2=val2&...',
'please_select' => '選択してください', 'please_select' => '選択してください',
'type' => 'タイプ', 'type' => 'タイプ',
'type_website' => 'ウェブサイト', 'type_website' => 'ウェブサイト',
@ -177,17 +198,19 @@ $sm_lang = array(
'pattern' => '文字列/パターンを検索', 'pattern' => '文字列/パターンを検索',
'pattern_description' => '指定した文字列/パターンが存在しない場合は、「オフライン」としてマークされます。また、標準的な計算式は許可されています。', 'pattern_description' => '指定した文字列/パターンが存在しない場合は、「オフライン」としてマークされます。また、標準的な計算式は許可されています。',
'pattern_online' => 'パターンがウェブサイトであることを示すパターン: ', 'pattern_online' => 'パターンがウェブサイトであることを示すパターン: ',
'pattern_online_description' => 'オンライン: このパターンがウェブサイトにない場合は、オンラインとしてマークされます。 Offline: このパターンがウェブサイトにない場合は、オフラインとしてマークされます。', 'pattern_online_description' => 'オンラインこのパターンがWebサイトにある場合、オンラインとしてマークされます。
オフラインこのパターンがWebサイトにない場合、オフラインとしてマークされます。',
'redirect_check' => '別のドメインへのリダイレクト: ', 'redirect_check' => '別のドメインへのリダイレクト: ',
'redirect_check_description' => '別のドメインにリダイレクトするのは通常は悪い兆候です。', 'redirect_check_description' => '別のドメインにリダイレクトするのは通常は悪い兆候です。',
'allow_http_status' => 'HTTPステータスコードを許可する', 'allow_http_status' => 'HTTPステータスコードを許可する',
'allow_http_status_description' => 'ウェブサイトをオンラインにマークします。 400未満のステータスコードはデフォルトでオンラインとマークされます。 | で区切ります。 例: 401|403.', 'allow_http_status_description' => 'ウェブサイトをオンラインにマークします。
'header' => 'ヘッダー', 400未満のステータスコードはデフォルトでオンラインとマークされます。
| で区切ります。 : 401|403.',
'header_name_description' => 'ヘッダー名(大文字小文字を区別します)', 'header_name_description' => 'ヘッダー名(大文字小文字を区別します)',
'header_value_description' => 'ヘッダーの値。正規表現が利用可能です。', 'header_value_description' => 'ヘッダーの値。正規表現が利用可能です。',
'last_check' => '最後の確認', 'last_check' => '最後の確認',
'last_offline' => '最後のオフライン',
'last_online' => '最後のオンライン', 'last_online' => '最後のオンライン',
'last_offline' => '最後のオフライン',
'last_output' => '最後のポジティブの出力', 'last_output' => '最後のポジティブの出力',
'last_error' => '最後のエラー', 'last_error' => '最後のエラー',
'last_error_output' => '最後のエラー出力', 'last_error_output' => '最後のエラー出力',
@ -221,7 +244,6 @@ $sm_lang = array(
'warning_threshold_description' => 'オフラインとしてマークされる前に失敗したチェックの数', 'warning_threshold_description' => 'オフラインとしてマークされる前に失敗したチェックの数',
'chart_last_week' => '最後の週間', 'chart_last_week' => '最後の週間',
'chart_history' => '履歴', 'chart_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_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',
@ -243,7 +265,8 @@ $sm_lang = array(
'language' => '言語', 'language' => '言語',
'show_update' => 'アップデートをチェックしますか?', 'show_update' => 'アップデートをチェックしますか?',
'password_encrypt_key' => '暗号鍵パスワード', 'password_encrypt_key' => '暗号鍵パスワード',
'password_encrypt_key_note' => 'このキーは、Webサイトにアクセスするためにサーバーに保存されているパスワードを暗号化するために使用されます。 キーが変更された場合、保存されたパスワードは無効です!', 'password_encrypt_key_note' => 'このキーは、Webサイトにアクセスするためにサーバーに保存されているパスワードを暗号化するために使用されます。
キーが変更された場合、保存されたパスワードは無効です!',
'proxy' => 'プロキシを有効化する', 'proxy' => 'プロキシを有効化する',
'proxy_url' => 'プロキシのURL', 'proxy_url' => 'プロキシのURL',
'proxy_user' => 'プロキシのユーザー名', 'proxy_user' => 'プロキシのユーザー名',
@ -265,24 +288,35 @@ $sm_lang = array(
'sms_gateway_password' => 'ゲートウェイのパスワード', 'sms_gateway_password' => 'ゲートウェイのパスワード',
'sms_from' => '送信者の電話番号:', 'sms_from' => '送信者の電話番号:',
'pushover_status' => 'Pushoverのメッセージを送信することを許可する', 'pushover_status' => 'Pushoverのメッセージを送信することを許可する',
'pushover_description' => 'Pushoverは、リアルタイムの通知を簡単に取得できるサービスです。 詳細については、 'pushover_description' => 'Pushoverは、リアルタイムの通知を簡単に取得できるサービスです。
詳細については、
href="https://pushover.net/">ウェブサイト</a>をご覧ください。', href="https://pushover.net/">ウェブサイト</a>をご覧ください。',
'pushover_clone_app' => 'クリックでPushoverアプリケーションを作成できます。', 'pushover_clone_app' => 'クリックでPushoverアプリケーションを作成できます。',
'pushover_api_token' => 'PushoverアプリケーションのAPIトークン', 'pushover_api_token' => 'PushoverアプリケーションのAPIトークン',
'pushover_api_token_description' => 'Pushoverを使用するには、事前にウェブサイトで<a href="%1$s" target="_blank" rel="noopener">アプリを登録</a>してApp APIトークンを入力する必要があります。', 'pushover_api_token_description' => 'Pushoverを使用するには、事前にウェブサイトで<a
href="%1$s" target="_blank"
rel="noopener">アプリを登録</a>してApp
APIトークンを入力する必要があります。',
'telegram_status' => 'Telegramメッセージの送信を許可する', '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_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' => 'Telegram APIトークン',
'telegram_api_token_description' => 'Telegramを使用する前に、APIトークンを取得する必要があります。 <a href="http://docs.phpservermonitor.org/" target="_blank" rel="noopener">documentation</a> でヘルプを参照してください。', 'telegram_api_token_description' => 'Telegramを使用する前に、APIトークンを取得する必要があります。
<a href="http://docs.phpservermonitor.org/" target="_blank"
rel="noopener">documentation</a>
でヘルプを参照してください。',
'alert_type' => '通知するタイミングを選択', 'alert_type' => '通知するタイミングを選択',
'alert_type_description' => '<b>状態の変化:</b> '. 'alert_type_description' => '<b>状態の変化:</b>
'サーバーのステータスが変更されたときに通知を受け取ります。 だからオンライン -> オフラインまたはオフライン -> オンライン。<br>'. サーバーのステータスが変更されたときに通知を受け取ります。
'<br /><b>オフライン:</b> '. だからオンライン -> オフラインまたはオフライン ->
'サーバーが*初めての間*オフラインになったときに通知を受け取ります。 例えば、'. オンライン。<br><br /><b>オフライン:</b>
'あなたのcronの仕事は15分ごとです。あなたのサーバーは午前1時にダウンし、午前6時まで停止します。 '. サーバーが*初めての間*オフラインになったときに通知を受け取ります。
'午前1時に1つの通知が届きます。<br>'. 例えば、あなたのcronの仕事は15分ごとです。あなたのサーバーは午前1時にダウンし、午前6時まで停止します。
'<br><b>常に:</b> '. 午前1時に1つの通知が届きます。<br><br><b>常に:</b>
'サイトが数時間にわたってオフラインになっていても、スクリプトが実行され、サイトが停止するたびに通知を受け取ります。', サイトが数時間にわたってオフラインになっていても、スクリプトが実行され、サイトが停止するたびに通知を受け取ります。',
'alert_type_status' => '状況の変化', 'alert_type_status' => '状況の変化',
'alert_type_offline' => 'オフライン', 'alert_type_offline' => 'オフライン',
'alert_type_always' => '常に', 'alert_type_always' => '常に',
@ -309,16 +343,14 @@ $sm_lang = array(
'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">'.
'時間を秒で指定し、0に設定すると更新しません。'.
'</span>',
'seconds' => '秒', 'seconds' => '秒',
'test' => 'テスト', 'test' => 'テスト',
'test_email' => 'あなたのユーザープロフィールで指定されたアドレスに電子メールが送信されます。', 'test_email' => 'あなたのユーザープロフィールで指定されたアドレスに電子メールが送信されます。',
'test_sms' => 'あなたのユーザープロフィールで指定された電話番号にSMSが送信されます。', 'test_sms' => 'あなたのユーザープロフィールで指定された電話番号にSMSが送信されます。',
'test_pushover' => 'あなたのユーザープロフィールで指定されたユーザー キー/デバイスにPushover通知が送信されます。', 'test_pushover' => 'あなたのユーザープロフィールで指定されたユーザー
キー/デバイスにPushover通知が送信されます。',
'test_telegram' => 'あなたのユーザープロフィールで指定されたチャットIDにTelegram通知が送信されます。', 'test_telegram' => 'あなたのユーザープロフィールで指定されたチャットIDにTelegram通知が送信されます。',
'send' => '送信', 'send' => '送信',
'test_subject' => 'テスト', 'test_subject' => 'テスト',
@ -327,44 +359,73 @@ $sm_lang = array(
'email_error' => 'メールを送信中にエラーが発生しました', 'email_error' => 'メールを送信中にエラーが発生しました',
'sms_sent' => 'SMSが送信されました', 'sms_sent' => 'SMSが送信されました',
'sms_error' => 'SMSを送信中にエラーが発生しました %s', 'sms_error' => 'SMSを送信中にエラーが発生しました %s',
'sms_error_nomobile' => 'テストSMSの送信に失敗: あなたのプロフィールに有効な電話番号がありません', '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 APIトークンがありません', 'telegram_error_notoken' => 'テスト通知の送信に失敗しましたグローバル設定にTelegram
APIトークンがありません',
'telegram_error_noid' => 'テスト通知の送信に失敗しましたあなたのプロフィールに有効なチャットIDがありません', 'telegram_error_noid' => 'テスト通知の送信に失敗しましたあなたのプロフィールに有効なチャットIDがありません',
'log_retention_period' => 'ログ保持期間', 'log_retention_period' => 'ログ保持期間',
'log_retention_period_description' => '通知のログおよびサーバー稼働時間のアーカイブを保持する日数。 ログのクリーンアップを無効にするには、0を入力します。', 'log_retention_period_description' => '通知のログおよびサーバー稼働時間のアーカイブを保持する日数。
ログのクリーンアップを無効にするには、0を入力します。',
'log_retention_days' => '日', '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%.
エラー=%ERROR%',
'off_email_subject' => '重要: サーバー \'%LABEL%\' がダウンしています!', 'off_email_subject' => '重要: サーバー \'%LABEL%\' がダウンしています!',
'off_email_body' => "サーバーへの接続に失敗しました:<br><br>Server: %LABEL%<br>IP: %IP%<br>ポート: %PORT%<br>エラー: %ERROR%<br>日時: %DATE%", 'off_email_body' => 'サーバーへの接続に失敗しました:<br><br>Server: %LABEL%<br>IP:
%IP%<br>ポート: %PORT%<br>エラー: %ERROR%<br>日時: %DATE%',
'off_pushover_title' => 'サーバー \'%LABEL%\' がダウンしています!', 'off_pushover_title' => 'サーバー \'%LABEL%\' がダウンしています!',
'off_pushover_message' => "サーバーへの接続に失敗しました:<br/><br/>Server: %LABEL%<br/>IP: %IP%<br/>ポート: %PORT%<br/>エラー: %ERROR%<br/>日時: %DATE%", 'off_pushover_message' => 'サーバーへの接続に失敗しました:<br/><br/>Server: %LABEL%<br/>IP:
'off_telegram_message' => "サーバーへの接続に失敗しました:<br/><br/>Server: %LABEL%<br/>IP: %IP%<br/>ポート: %PORT%<br/>エラー: %ERROR%<br/>日時: %DATE%", %IP%<br/>ポート: %PORT%<br/>エラー: %ERROR%<br/>日時: %DATE%',
'on_sms' => 'サーバー \'%LABEL%\' は動作しています: ip=%IP%, port=%PORT%, it was down for %LAST_OFFLINE_DURATION%', 'off_telegram_message' => 'サーバーへの接続に失敗しました:<br/><br/>Server: %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_subject' => '重要: サーバー \'%LABEL%\' は動作しています',
'on_email_body' => "サーバー '%LABEL%' は動作中です。 この期間の間ダウンしていました: %LAST_OFFLINE_DURATION%:<br/><br/>サーバー: %LABEL%<br/>IP: %IP%<br/>ポート: %PORT%<br/>日時: %DATE%", 'on_email_body' => 'サーバー \'%LABEL%\' は動作中です。
この期間の間ダウンしていました:
%LAST_OFFLINE_DURATION%:<br/><br/>サーバー: %LABEL%<br/>IP: %IP%<br/>ポート:
%PORT%<br/>日時: %DATE%',
'on_pushover_title' => 'サーバー \'%LABEL%\' は動作しています', 'on_pushover_title' => 'サーバー \'%LABEL%\' は動作しています',
'on_pushover_message' => "サーバー '%LABEL%' は動作中です。 この期間の間ダウンしていました: %LAST_OFFLINE_DURATION%:<br/><br/>サーバー: %LABEL%<br/>IP: %IP%<br/>ポート: %PORT%<br/>日時: %DATE%", 'on_pushover_message' => 'サーバー \'%LABEL%\' は動作中です。
'on_telegram_message' => 'サーバー \'%LABEL%\' は動作中です。 この期間の間ダウンしていました: <br/><br/>サーバー: %LABEL%<br/>IP: %IP%<br/>ポート: %PORT%<br/>ダウンタイム: %LAST_OFFLINE_DURATION%<br/>日時: %DATE%', この期間の間ダウンしていました:
'combi_off_email_message' => "<ul><li>サーバー: %LABEL%</li><li>IP: %IP%</li><li>ポート: %PORT%</li><li>エラー: %ERROR%</li><li>日時: %DATE%</li></ul>", %LAST_OFFLINE_DURATION%:<br/><br/>サーバー: %LABEL%<br/>IP: %IP%<br/>ポート:
'combi_off_pushover_message' => "<ul><li>サーバー: %LABEL%</li><li>IP: %IP%</li><li>ポート: %PORT%</li><li>エラー: %ERROR%</li><li>日時: %DATE%</li></ul>", %PORT%<br/>日時: %DATE%',
'combi_off_telegram_message' => "- サーバー: %LABEL%<br/>- IP: %IP%<br/>- ポート: %PORT%<br/>- エラー: %ERROR%<br/>- 日時: %DATE%<br/><br/>", 'on_telegram_message' => 'サーバー \'%LABEL%\' は動作中です。
'combi_on_email_message' => "<ul><li>サーバー: %LABEL%</li><li>IP: %IP%</li><li>ポート: %PORT%</li><li>ダウンタイム: %LAST_OFFLINE_DURATION%</li><li>日時: %DATE%</li></ul>", この期間の間ダウンしていました: <br/><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>', %LABEL%<br/>IP: %IP%<br/>ポート: %PORT%<br/>ダウンタイム:
'combi_on_telegram_message' => '- サーバー: %LABEL%<br/>- IP: %IP%<br/>- ポート: %PORT%<br/>- ダウンタイム: %LAST_OFFLINE_DURATION%<br/>- 日時: %DATE%<br/><br/>', %LAST_OFFLINE_DURATION%<br/>日時: %DATE%',
'combi_email_subject' => '重要: \'%UP%\' サーバーは動作を再開しました。 \'%DOWN%\' サーバーはダウンしています。', 'combi_off_email_message' => '<ul><li>サーバー: %LABEL%</li><li>IP: %IP%</li><li>ポート:
'combi_pushover_subject' => '\'%UP%\' サーバーは動作を再開しました。 \'%DOWN%\' サーバーはダウンしています。', %PORT%</li><li>エラー: %ERROR%</li><li>日時: %DATE%</li></ul>',
'combi_email_message' => '<b>以下のサーバーはダウンしています: </b><br/>%DOWN_SERVERS%<br/><b>以下のサーバーは動作を再開しました:</b><br/>%UP_SERVERS%', 'combi_off_pushover_message' => '<ul><li>サーバー: %LABEL%</li><li>IP: %IP%</li><li>ポート:
'combi_pushover_message' => '<b>以下のサーバーはダウンしています: </b><br/>%DOWN_SERVERS%<br/><b>以下のサーバーは動作を再開しました:</b><br/>%UP_SERVERS%', %PORT%</li><li>エラー: %ERROR%</li><li>日時: %DATE%</li></ul>',
'combi_telegram_message' => '<b>以下のサーバーはダウンしています: </b><br/>%DOWN_SERVERS%<br/><b>以下のサーバーは動作を再開しました:</b><br/>%UP_SERVERS%', '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( 'login' => array(
'welcome_usermenu' => 'ようこそ、 %user_name%', 'welcome_usermenu' => 'ようこそ、 %user_name%',
@ -381,7 +442,9 @@ $sm_lang = array(
'password_forgot' => 'パスワードを忘れましたか?', 'password_forgot' => 'パスワードを忘れましたか?',
'password_reset' => 'パスワードをリセットする', 'password_reset' => 'パスワードをリセットする',
'password_reset_email_subject' => 'PHP Server Monitorのパスワードをリセットする', 'password_reset_email_subject' => 'PHP Server Monitorのパスワードをリセットする',
'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' => '指定されたパスワードが一致しません。',

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,13 +28,14 @@
$sm_lang = array( $sm_lang = array(
'name' => '한국 - Korean', 'name' => '한국 - Korean',
'locale' => array('ko_KR.UTF-8', 'ko_KR', 'korean'), 'locale' => array(
'0' => 'ko_KR.UTF-8',
'1' => 'ko_KR',
'2' => 'korean',
),
'locale_tag' => 'ko', 'locale_tag' => 'ko',
'locale_dir' => 'ltr', 'locale_dir' => 'ltr',
'system' => array( 'system' => array(
'title' => 'Server Monitor',
'install' => 'Install',
'action' => 'Action',
'save' => '저장', 'save' => '저장',
'edit' => '수정', 'edit' => '수정',
'delete' => '삭제', 'delete' => '삭제',
@ -43,41 +45,14 @@ $sm_lang = array(
'no' => '아니오', 'no' => '아니오',
'insert' => '삽입', 'insert' => '삽입',
'add_new' => '새계정 추가', 'add_new' => '새계정 추가',
'update_available' => '새로운 업데이트가 있습니다 ({version}). 다음사이트를 방문 해 주십시오. <a href="https://github.com/phpservermon/phpservermon/releases/latest" target="_blank" rel="noopener">http://www.phpservermonitor.org</a>.', 'update_available' => '새로운 업데이트가 있습니다 ({version}). 다음사이트를 방문
'back_to_top' => 'Back to top', 주십시오. <a href="https://github.com/phpservermon/phpservermon/releases/latest"
'go_back' => 'Go back', target="_blank" rel="noopener">http://www.phpservermonitor.org</a>.',
'ok' => 'OK',
'cancel' => 'Cancel',
// date/time format according the strftime php function format parameter http://php.net/manual/function.strftime.php
'short_day_format' => '%B %e',
'long_day_format' => '%B %e, %Y',
'yesterday_format' => 'Yesterday at %X',
'other_day_format' => '%A at %X',
'never' => 'Never',
'hours_ago' => '%d hours ago',
'an_hour_ago' => 'about an hour ago',
'minutes_ago' => '%d minutes ago',
'a_minute_ago' => 'about a minute ago',
'seconds_ago' => '%d seconds ago',
'a_second_ago' => 'a second ago',
'year' => 'year',
'years' => 'years',
'month' => 'month',
'months' => 'months',
'day' => 'day',
'days' => 'days',
'hour' => 'hour',
'hours' => 'hours',
'minute' => 'minute',
'minutes' => 'minutes',
'second' => 'second',
'seconds' => 'seconds',
), ),
'menu' => array( 'menu' => array(
'config' => '설정', 'config' => '설정',
'server' => '서버목록', 'server' => '서버목록',
'server_log' => '로그', 'server_log' => '로그',
'server_status' => 'Status',
'server_update' => '업데이트', 'server_update' => '업데이트',
'user' => '사용자', 'user' => '사용자',
'help' => '도움말', 'help' => '도움말',
@ -85,108 +60,30 @@ $sm_lang = array(
'users' => array( 'users' => array(
'user' => '사용자', 'user' => '사용자',
'name' => '이름', 'name' => '이름',
'user_name' => 'Username',
'password' => 'Password',
'password_repeat' => 'Password repeat',
'password_leave_blank' => 'Leave blank to keep unchanged',
'level' => 'Level',
'level_10' => 'Administrator',
'level_20' => 'User',
'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.',
'mobile' => '휴대폰', 'mobile' => '휴대폰',
'email' => 'Email',
'pushover' => 'Pushover',
'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_key' => 'Pushover Key',
'pushover_device' => 'Pushover Device',
'pushover_device_description' => 'Device name to send the message to. Leave empty to send it to all devices.',
'delete_title' => 'Delete User',
'delete_message' => 'Are you sure you want to delete user \'%1\'?',
'deleted' => 'User deleted.',
'updated' => '수정되었습니다.', 'updated' => '수정되었습니다.',
'inserted' => '추가되었습니다.', 'inserted' => '추가되었습니다.',
'profile' => 'Profile',
'profile_updated' => 'Your profile has been updated.',
'error_user_name_bad_length' => 'Usernames must be between 2 and 64 characters.',
'error_user_name_invalid' => 'It may only contain alphabetic characters (a-z, A-Z), digits (0-9), dots (.) and underscores (_).',
'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.',
'error_user_email_invalid' => 'The email address is invalid.',
'error_user_level_invalid' => 'The given user level is invalid.',
'error_user_no_match' => 'The user could not be found in the database.',
'error_user_password_invalid' => 'The entered password is invalid.',
'error_user_password_no_match' => 'The entered passwords do not match.',
), ),
'log' => array( 'log' => array(
'title' => 'Log entries',
'type' => '속성', 'type' => '속성',
'status' => '상태', 'status' => '상태',
'email' => 'email', 'email' => 'email',
'sms' => 'sms', 'sms' => 'sms',
'pushover' => 'Pushover', 'pushover' => 'Pushover',
'no_logs' => 'No logs', 'telegram' => 'Telegram',
'clear' => 'Clear log',
'delete_title' => 'Delete log',
'delete_message' => 'Are you sure you want to delete <b>all</b> logs?',
), ),
'servers' => array( 'servers' => array(
'server' => '서버', 'server' => '서버',
'status' => 'Status',
'label' => 'Label',
'domain' => 'Domain/IP',
'timeout' => 'Timeout',
'timeout_description' => 'Number of seconds to wait for the server to respond.',
'port' => 'Port',
'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_check' => '최근체크',
'last_online' => '최근접속', 'last_online' => '최근접속',
'last_offline' => 'Last offline',
'monitoring' => '확인중', 'monitoring' => '확인중',
'no_monitoring' => 'No monitoring',
'email' => '메일 전송', 'email' => '메일 전송',
'send_email' => '메일 전송', 'send_email' => '메일 전송',
'sms' => 'SMS 전송', 'sms' => 'SMS 전송',
'send_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' => '서버가 수정되었습니다.', 'updated' => '서버가 수정되었습니다.',
'inserted' => '서버가 추가되었습니다.', 'inserted' => '서버가 추가되었습니다.',
'latency' => '응답', '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( 'config' => array(
'general' => '일반', 'general' => '일반',
@ -195,115 +92,51 @@ $sm_lang = array(
'email_status' => '메일전송 허용', 'email_status' => '메일전송 허용',
'email_from_email' => 'Email 주소', 'email_from_email' => 'Email 주소',
'email_from_name' => '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_status' => 'SMS전송 허용',
'sms_gateway' => '메세지 전송을 위한 게이트웨이 허용', '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' => '알림을 원하면 다음과 같이 변경하십시오.',
'alert_type_description' => '<b>상태 변경: </b><br>'. 'alert_type_description' => '<b>상태 변경: </b><br>서버 상태가 변경이되면 알림을
'서버 상태가 변경이되면 알림을 받습니다. online -> offline -> online.<br>'. 받습니다. online -> offline -> online.<br><br><b>오프라인:
'<br><b>오프라인: </b><br>'. </b><br>서버가 첫번째로 오프라인이 되었을 알림을
'서버가 첫번째로 오프라인이 되었을 때 알림을 받습니다. 예를들어, '. 받습니다. 예를들어, cron이 15분이고 오전1시 부터
'cron이 매 15분이고 오전1시 부터 오전6시까지 다운되었을때 오전1시에 한번 알림을 받습니다.<br />'. 오전6시까지 다운되었을때 오전1시에 한번 알림을
'<br><b>항상: </b><br>'. 받습니다.<br /><br><b>항상: </b><br>사이트가 다운되었을
'사이트가 다운되었을 때 매시간 알림을 받습니다.', 매시간 알림을 받습니다.',
'alert_type_status' => '상태 변경', 'alert_type_status' => '상태 변경',
'alert_type_offline' => '오프라인', 'alert_type_offline' => '오프라인',
'alert_type_always' => '항상', 'alert_type_always' => '항상',
'log_status' => '로그 상태', 'log_status' => '로그 상태',
'log_status_description' => '로그상태가 TRUE이면 알림설정이 통과할때마다 이벤트를 기록합니다.', 'log_status_description' => '로그상태가 TRUE이면 알림설정이 통과할때마다 이벤트를
기록합니다.',
'log_email' => '이메일로 로그를 전송하시겠습니까?', 'log_email' => '이메일로 로그를 전송하시겠습니까?',
'log_sms' => 'SMS로 로그를 전송하시겠습니까?', 'log_sms' => 'SMS로 로그를 전송하시겠습니까?',
'log_pushover' => 'Log pushover messages sent by the script',
'updated' => '설정이 수정되었습니다.', 'updated' => '설정이 수정되었습니다.',
'tab_email' => 'Email', 'tab_email' => 'Email',
'tab_sms' => 'SMS', 'tab_sms' => 'SMS',
'tab_pushover' => 'Pushover', 'tab_pushover' => 'Pushover',
'settings_email' => 'Email 설정', 'settings_email' => 'Email 설정',
'settings_sms' => 'SMS 설정', 'settings_sms' => 'SMS 설정',
'settings_pushover' => 'Pushover settings',
'settings_notification' => '알림 설정', 'settings_notification' => '알림 설정',
'settings_log' => '로그 설정', 'settings_log' => '로그 설정',
'auto_refresh' => 'Auto-refresh', 'auto_refresh_description' => '서버페이지를 자동으로 새로고침.<br><span class="small">시간은
'auto_refresh_description' => (sec) 설정을 하고, 0 새로고침을 하지 않습니다.</span>',
'서버페이지를 자동으로 새로고침.<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( 'notifications' => array(
'off_sms' => '서버(\'%LABEL%\')가 다운되었습니다. : ip=%IP%, port=%PORT%. Error=%ERROR%', 'off_sms' => '서버(\'%LABEL%\')가 다운되었습니다. : ip=%IP%, port=%PORT%. Error=%ERROR%',
'off_email_subject' => '중요: 서버(\'%LABEL%\')가 다운되었습니다.', 'off_email_subject' => '중요: 서버(\'%LABEL%\')가 다운되었습니다.',
'off_email_body' => "서버 접속을 실패하였습니다.<br><br>Server: %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>Error: %ERROR%<br>Date: %DATE%", '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_title' => '서버(\'%LABEL%\')가 다운되었습니다.',
'off_pushover_message' => "서버 접속을 실패하였습니다.<br><br>Server: %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>Error: %ERROR%<br>Date: %DATE%", '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_sms' => '서버(\'%LABEL%\') 가동중: ip=%IP%, port=%PORT%, it was down for %LAST_OFFLINE_DURATION%',
'on_email_subject' => '중요: 서버(\'%LABEL%\')가 가동중입니다.', '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_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_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%", 'on_pushover_message' => '서버(\'%LABEL%\') 재가동됩니다., it was down for
), %LAST_OFFLINE_DURATION%:<br><br>Server: %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>Date:
'login' => array( %DATE%',
'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.
@ -47,7 +48,9 @@ $sm_lang = array(
'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
href="https://github.com/phpservermon/phpservermon/releases/latest" target="_blank"
rel="noopener">http://www.phpservermonitor.org</a>.',
'back_to_top' => 'Terug naar boven', 'back_to_top' => 'Terug naar boven',
'go_back' => 'Terug', 'go_back' => 'Terug',
'ok' => 'OK', 'ok' => 'OK',
@ -100,11 +103,15 @@ $sm_lang = array(
'level' => 'Level', 'level' => 'Level',
'level_10' => 'Beheerder', 'level_10' => 'Beheerder',
'level_20' => 'Gebruiker', 'level_20' => 'Gebruiker',
'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_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.',
'mobile' => 'Mobiel', 'mobile' => 'Mobiel',
'email' => 'Email', 'email' => 'Email',
'pushover' => 'Pushover', 'pushover' => 'Pushover',
'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.', 'pushover_description' => 'Pushover is een dienst die het gemakkelijk maakt om real-time notificaties te
ontvangen. Zie <a href="https://pushover.net/" target="_blank">hun website</a> voor meer
informatie.',
'pushover_key' => 'Pushover Key', 'pushover_key' => 'Pushover Key',
'pushover_device' => 'Pushover Device', 'pushover_device' => 'Pushover Device',
'pushover_device_description' => 'Apparaat waar de berichten naar toe gaan. Laat leeg voor alle apparaten.', 'pushover_device_description' => 'Apparaat waar de berichten naar toe gaan. Laat leeg voor alle apparaten.',
@ -112,7 +119,10 @@ $sm_lang = array(
'telegram_chat_id' => 'Telegram chat id', 'telegram_chat_id' => 'Telegram chat id',
'telegram_get_chat_id' => 'Klik hier om je chat id te vinden', 'telegram_get_chat_id' => 'Klik hier om je chat id te vinden',
'activate_telegram' => 'Activeer Telegram notificaties', 'activate_telegram' => 'Activeer Telegram notificaties',
'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.', '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.',
'telegram_bot_error' => 'Er is een error voorgekomen tijdens de activatie van Telegram notificaties: %s', 'telegram_bot_error' => 'Er is een error voorgekomen tijdens de activatie van Telegram notificaties: %s',
'delete_title' => 'Verwijder gebruiker', 'delete_title' => 'Verwijder gebruiker',
'delete_message' => 'Weet je zeker dat je deze gebruiker wilt verwijderen: \'%1\'?', 'delete_message' => 'Weet je zeker dat je deze gebruiker wilt verwijderen: \'%1\'?',
@ -122,7 +132,8 @@ $sm_lang = array(
'profile' => 'Profiel', 'profile' => 'Profiel',
'profile_updated' => 'Je profiel is bijgewerkt.', 'profile_updated' => 'Je profiel is bijgewerkt.',
'error_user_name_bad_length' => 'Een gebruikersnaam moet tussen de 2 en 64 tekens zijn.', 'error_user_name_bad_length' => 'Een gebruikersnaam moet tussen de 2 en 64 tekens zijn.',
'error_user_name_invalid' => 'Een gebruikersnaam mag alleen alfabetische tekens (a-z, A-Z), cijfers (0-9), punten (.) en underscores (_) bevatten.', 'error_user_name_invalid' => 'Een gebruikersnaam mag alleen alfabetische tekens (a-z, A-Z), cijfers (0-9),
punten (.) en underscores (_) bevatten.',
'error_user_name_exists' => 'De opgegeven gebruikersnaam bestaat al.', 'error_user_name_exists' => 'De opgegeven gebruikersnaam bestaat al.',
'error_user_email_bad_length' => 'Een email adres moet tussen de 5 en 255 tekens zijn.', 'error_user_email_bad_length' => 'Een email adres moet tussen de 5 en 255 tekens zijn.',
'error_user_email_invalid' => 'Het email adres is ongeldig.', 'error_user_email_invalid' => 'Het email adres is ongeldig.',
@ -130,6 +141,7 @@ $sm_lang = array(
'error_user_no_match' => 'De gebruiker kon niet worden toegevoegd aan de database.', 'error_user_no_match' => 'De gebruiker kon niet worden toegevoegd aan de database.',
'error_user_password_invalid' => 'Het ingevulde wachtwoord is ongeldig.', 'error_user_password_invalid' => 'Het ingevulde wachtwoord is ongeldig.',
'error_user_password_no_match' => 'De ingevulde wachtwoorden komen niet overeen.', 'error_user_password_no_match' => 'De ingevulde wachtwoorden komen niet overeen.',
'error_user_admin_cant_be_deleted' => 'Je kan de laatste administrator niet verwijderen.',
), ),
'log' => array( 'log' => array(
'title' => 'Log entries', 'title' => 'Log entries',
@ -165,11 +177,13 @@ $sm_lang = array(
'type_service' => 'Service', 'type_service' => 'Service',
'type_ping' => 'Ping', 'type_ping' => 'Ping',
'pattern' => 'Zoek voor tekst/regex', 'pattern' => 'Zoek voor tekst/regex',
'pattern_description' => 'Als dit patroon niet gevonden wordt op de website, zal de server als offline gemarkeerd worden. Regular expressions zijn toegestaan.', 'pattern_description' => 'Als dit patroon niet gevonden wordt op de website, zal de server als offline
gemarkeerd worden. Regular expressions zijn toegestaan.',
'redirect_check' => 'Omleiden naar een ander domein is', 'redirect_check' => 'Omleiden naar een ander domein is',
'redirect_check_description' => 'Een omleiding naar een ander domein is meestal een slecht teken.', 'redirect_check_description' => 'Een omleiding naar een ander domein is meestal een slecht teken.',
'allow_http_status' => 'Sta HTTP status code toe', 'allow_http_status' => 'Sta HTTP status code toe',
'allow_http_status_description' => 'Markeer website als online. HTTP status code lager dan 400 worden standaard als online gemarkeerd. Scheiden met |.', 'allow_http_status_description' => 'Markeer website als online. HTTP status code lager dan 400 worden
standaard als online gemarkeerd. Scheiden met |.',
'header_name' => 'Header naam', 'header_name' => 'Header naam',
'header_value' => 'Header waarde', 'header_value' => 'Header waarde',
'header_name_description' => 'Hoofdlettergevoelig', 'header_name_description' => 'Hoofdlettergevoelig',
@ -249,21 +263,32 @@ $sm_lang = array(
'sms_gateway_password' => 'Gateway wachtwoord', 'sms_gateway_password' => 'Gateway wachtwoord',
'sms_from' => 'Telefoonnummer afzender', 'sms_from' => 'Telefoonnummer afzender',
'pushover_status' => 'Sta Pushover berichten toe?', 'pushover_status' => 'Sta Pushover berichten toe?',
'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.', 'pushover_description' => 'Pushover is een dienst die het gemakkelijk maakt om real-time notificaties te
ontvangen. Zie <a href="https://pushover.net/" target="_blank">hun website</a> voor meer
informatie.',
'pushover_clone_app' => 'Klik hier om je Pushover app te maken', 'pushover_clone_app' => 'Klik hier om je Pushover app te maken',
'pushover_api_token' => 'Pushover App API Token', 'pushover_api_token' => 'Pushover App API Token',
'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.', '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.',
'telegram_status' => 'Sta Telegram berichten toe?', 'telegram_status' => 'Sta Telegram berichten toe?',
'telegram_api_token' => 'Telegram API Token', 'telegram_api_token' => 'Telegram API Token',
'alert_type' => 'Selecteer wanneer je een notificatie wilt', 'alert_type' => 'Selecteer wanneer je een notificatie wilt',
'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.', '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.',
'alert_type_status' => 'Status verandering', 'alert_type_status' => 'Status verandering',
'alert_type_offline' => 'Offline', 'alert_type_offline' => 'Offline',
'alert_type_always' => 'Altijd', 'alert_type_always' => 'Altijd',
'combine_notifications' => 'Combineer notificaties', 'combine_notifications' => 'Combineer notificaties',
'alert_proxy_url' => 'Formaat: host:poort', 'alert_proxy_url' => 'Formaat: host:poort',
'log_status' => 'Log status', 'log_status' => 'Log status',
'log_status_description' => 'Als de log status aan staat, zal de monitor een log aanmaken elke keer dat hij door de notificatie instellingen komt.', 'log_status_description' => 'Als de log status aan staat, zal de monitor een log aanmaken elke keer dat hij
door de notificatie instellingen komt.',
'log_email' => 'Log emails verstuurd bij het script?', 'log_email' => 'Log emails verstuurd bij het script?',
'log_sms' => 'Log sms berichten verstuurd bij het script?', 'log_sms' => 'Log sms berichten verstuurd bij het script?',
'log_pushover' => 'Log Pushover berichten verstuurd bij het script?', 'log_pushover' => 'Log Pushover berichten verstuurd bij het script?',
@ -281,7 +306,8 @@ $sm_lang = array(
'settings_log' => 'Log instellingen', 'settings_log' => 'Log instellingen',
'settings_proxy' => 'Proxy instellingen', 'settings_proxy' => 'Proxy instellingen',
'auto_refresh' => 'Herlaad automatisch', 'auto_refresh' => 'Herlaad automatisch',
'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>', '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>',
'seconds' => 'seconden', 'seconds' => 'seconden',
'test' => 'Test', 'test' => 'Test',
'test_email' => 'Er zal een email verstuurd worden naar het email adres in je profiel.', 'test_email' => 'Er zal een email verstuurd worden naar het email adres in je profiel.',
@ -297,28 +323,37 @@ $sm_lang = array(
'sms_error_nomobile' => 'Kan test SMS niet verzenden: er is geen telefoonnummer ingevuld in je profiel.', 'sms_error_nomobile' => 'Kan test SMS niet verzenden: er is geen telefoonnummer ingevuld in je profiel.',
'pushover_sent' => 'Pushover notificatie verzonden', 'pushover_sent' => 'Pushover notificatie verzonden',
'pushover_error' => 'De volgende fout is opgetreden bij het versturen van de Pushover notificatie: %s', 'pushover_error' => 'De volgende fout is opgetreden bij het versturen van de Pushover notificatie: %s',
'pushover_error_noapp' => 'Kan test notificatie niet verzenden: er is geen Pushover App API token gevonden in de algemene configuratie.', 'pushover_error_noapp' => 'Kan test notificatie niet verzenden: er is geen Pushover App API token gevonden in
'pushover_error_nokey' => 'Kan test notificatie niet verzenden: er is geen Pushover key gevonden in je profiel.', de algemene configuratie.',
'pushover_error_nokey' => 'Kan test notificatie niet verzenden: er is geen Pushover key gevonden in je
profiel.',
'telegram_sent' => 'Telegram notificatie verstuurd', 'telegram_sent' => 'Telegram notificatie verstuurd',
'telegram_error' => 'Er is een error voorgekomen tijdens het versturen van de Telegram notificatie: %s', 'telegram_error' => 'Er is een error voorgekomen tijdens het versturen van de Telegram notificatie: %s',
'telegram_error_notoken' => 'Niet mogelijk on test notificatie te versturen: Telegram API token niet gevonden in globale instellingen.', 'telegram_error_notoken' => 'Niet mogelijk on test notificatie te versturen: Telegram API token niet gevonden
in globale instellingen.',
'telegram_error_noid' => 'Niet mogelijk on test notificatie te versturen: chat id niet gevonden op profiel.', 'telegram_error_noid' => 'Niet mogelijk on test notificatie te versturen: chat id niet gevonden op profiel.',
'log_retention_period' => 'Log retentie periode', 'log_retention_period' => 'Log retentie periode',
'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.', '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.',
'log_retention_days' => 'dagen', 'log_retention_days' => 'dagen',
), ),
'notifications' => array( 'notifications' => array(
'off_sms' => 'Server %LABEL% is DOWN: ip=%IP%, poort=%PORT%. Fout=%ERROR%', 'off_sms' => 'Server %LABEL% is DOWN: ip=%IP%, poort=%PORT%. Fout=%ERROR%',
'off_email_subject' => 'BELANGRIJK: Server %LABEL% is DOWN', 'off_email_subject' => 'BELANGRIJK: Server %LABEL% is DOWN',
'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%', '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%',
'off_pushover_title' => 'Server %LABEL% is DOWN', '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: %PORT%<br>Fout: %ERROR%<br>Datum: %DATE%', 'off_pushover_message' => 'De server kon niet worden bereikt:<br><br>Server: %LABEL%<br>IP: %IP%<br>Poort:
'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%', %PORT%<br>Fout: %ERROR%<br>Datum: %DATE%',
'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%',
'on_sms' => 'Server %LABEL% is RUNNING: ip=%IP%, poort=%PORT%, tijd offline=%LAST_OFFLINE_DURATION%', '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_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_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_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%', '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( 'login' => array(
'welcome_usermenu' => 'Welkom, %user_name%', 'welcome_usermenu' => 'Welkom, %user_name%',
@ -335,7 +370,8 @@ $sm_lang = array(
'password_forgot' => 'Wachtwoord vergeten?', 'password_forgot' => 'Wachtwoord vergeten?',
'password_reset' => 'Wachtwoord herstellen', 'password_reset' => 'Wachtwoord herstellen',
'password_reset_email_subject' => 'Wijzig je wachtwoord voor PHP Server Monitor', '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%', '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_user_incorrect' => 'De opgegeven gebruikersnaam is onjuist.',
'error_login_incorrect' => 'De informatie is niet juist.', 'error_login_incorrect' => 'De informatie is niet juist.',
'error_login_passwords_nomatch' => 'De ingevulde wachtwoorden komen niet overeen.', 'error_login_passwords_nomatch' => 'De ingevulde wachtwoorden komen niet overeen.',

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,7 +28,12 @@
$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(
'0' => 'no_NB.UTF-8',
'1' => 'no_NB',
'2' => 'norwegian',
'3' => 'norwegian-no',
),
'locale_tag' => 'no', 'locale_tag' => 'no',
'locale_dir' => 'ltr', 'locale_dir' => 'ltr',
'system' => array( 'system' => array(
@ -43,13 +49,14 @@ $sm_lang = array(
'no' => 'Nei', 'no' => 'Nei',
'insert' => 'Sett inn', 'insert' => 'Sett inn',
'add_new' => 'Legg til ny', 'add_new' => 'Legg til ny',
'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>.', 'update_available' => 'En ny versjon ({versjon}) er tilgjengelig <a
href="https://github.com/phpservermon/phpservermon/releases/latest" target="_blank"
rel="noopener">http://www.phpservermonitor.org</a>.',
'back_to_top' => 'Tilbake til toppen', 'back_to_top' => 'Tilbake til toppen',
'go_back' => 'Gå tilbake', 'go_back' => 'Gå tilbake',
'ok' => 'OK', 'ok' => 'OK',
'cancel' => 'Avbryt', 'cancel' => 'Avbryt',
'activate' => 'Aktiver', 'activate' => 'Aktiver',
// date/time format according the strftime php function format parameter http://php.net/manual/function.strftime.php
'short_day_format' => '%e. %B', 'short_day_format' => '%e. %B',
'long_day_format' => '%e. %B, %Y', 'long_day_format' => '%e. %B, %Y',
'yesterday_format' => 'Yesterday at %H:%M', 'yesterday_format' => 'Yesterday at %H:%M',
@ -93,22 +100,32 @@ $sm_lang = array(
'level' => 'Level', 'level' => 'Level',
'level_10' => 'Administrator', 'level_10' => 'Administrator',
'level_20' => 'Bruker', 'level_20' => 'Bruker',
'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.', '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.',
'mobile' => 'Mobil', 'mobile' => 'Mobil',
'email' => 'E-post', 'email' => 'E-post',
'pushover' => 'Pushover', 'pushover' => 'Pushover',
'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.', 'pushover_description' => 'Pushover er en tjeneste som gjør det enkelt å meldinger i sanntid. Se <a
href="https://pushover.net/" target="_blank">deres nettside</a> for mer info.',
'pushover_key' => 'Pushover Key', 'pushover_key' => 'Pushover Key',
'pushover_device' => 'Pushover Device', 'pushover_device' => 'Pushover Device',
'pushover_device_description' => 'Enhetsnavn for å sende meldingen til. La det være tomt for å sende det til alle enheter.', 'pushover_device_description' => 'Enhetsnavn for å sende meldingen til. La det være tomt for å sende det
til alle enheter.',
'telegram' => 'Telegram', 'telegram' => 'Telegram',
'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. ', 'telegram_description' => '<a href="https://telegram.org/" target="_blank">Telegram</a> er en chat-app som
gjør det enkelt å meldinger i sanntid. til <a
href="http://docs.phpservermonitor.org/" target="_blank">dokumentasjonen</a> for
mer informasjon og en installasjonsguide. ',
'telegram_chat_id' => 'Telegram chat-ID', 'telegram_chat_id' => 'Telegram chat-ID',
'telegram_chat_id_description' => 'Meldingen vil bli sendt til tilhørende chat.', 'telegram_chat_id_description' => 'Meldingen vil bli sendt til tilhørende chat.',
'telegram_get_chat_id' => 'Klikk her for å få chat-ID', 'telegram_get_chat_id' => 'Klikk her for å få chat-ID',
'activate_telegram' => 'Aktiver Telegram notifications', 'activate_telegram' => 'Aktiver Telegram notifications',
'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.', 'activate_telegram_description' => 'Tillat Telegram varsler som skal sendes til det angitte chat-IDet. Uten
'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.', denne tillatelsen tillater Telegram oss ikke å sende varsler til deg.',
'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 du trykke start ved å skrive: /start.',
'telegram_bot_username_error_token' => '401 - Unauthorized. Pass på at API-token er gyldig.', 'telegram_bot_username_error_token' => '401 - Unauthorized. Pass på at API-token er gyldig.',
'telegram_bot_error' => 'Det har oppstått en feil under aktivering av Telegram varsling: %s', 'telegram_bot_error' => 'Det har oppstått en feil under aktivering av Telegram varsling: %s',
'delete_title' => 'Slett bruker', 'delete_title' => 'Slett bruker',
@ -119,7 +136,8 @@ $sm_lang = array(
'profile' => 'Profil', 'profile' => 'Profil',
'profile_updated' => 'Din profil har blitt oppdatert.', 'profile_updated' => 'Din profil har blitt oppdatert.',
'error_user_name_bad_length' => 'Brukernavn må være mellom 2 og 64 tegn.', 'error_user_name_bad_length' => 'Brukernavn må være mellom 2 og 64 tegn.',
'error_user_name_invalid' => 'Brukernavnet kan bare inneholde alfabetiske tegn (a-z, A-Z), sifre (0-9), punktum (.) and understrek (_).', 'error_user_name_invalid' => 'Brukernavnet kan bare inneholde alfabetiske tegn (a-z, A-Z), sifre (0-9),
punktum (.) and understrek (_).',
'error_user_name_exists' => 'Det oppgitte brukernavnet eksisterer allerede i databasen.', 'error_user_name_exists' => 'Det oppgitte brukernavnet eksisterer allerede i databasen.',
'error_user_email_bad_length' => 'E-postadresser må være mellom 5 og 255 tegn.', 'error_user_email_bad_length' => 'E-postadresser må være mellom 5 og 255 tegn.',
'error_user_email_invalid' => 'E-postadressen er ugyldig.', 'error_user_email_invalid' => 'E-postadressen er ugyldig.',
@ -151,9 +169,11 @@ $sm_lang = array(
'authentication_settings' => 'Autentiseringsinnstillinger', 'authentication_settings' => 'Autentiseringsinnstillinger',
'optional' => 'ValgfrittF', 'optional' => 'ValgfrittF',
'website_username' => 'Brukernavn', 'website_username' => 'Brukernavn',
'website_username_description' => 'Brukernavn for å få tilgang til nettstedet. (Kun Apache-godkjenning støttes.)', 'website_username_description' => 'Brukernavn for å tilgang til nettstedet. (Kun Apache-godkjenning
støttes.)',
'website_password' => 'Password', 'website_password' => 'Password',
'website_password_description' => 'Passord for å få tilgang til nettstedet. Passordet er kryptert i databasen.', 'website_password_description' => 'Passord for å tilgang til nettstedet. Passordet er kryptert i
databasen.',
'fieldset_monitoring' => 'Overvåkning', 'fieldset_monitoring' => 'Overvåkning',
'fieldset_permissions' => 'Tilganger', 'fieldset_permissions' => 'Tilganger',
'port' => 'Port', 'port' => 'Port',
@ -165,9 +185,12 @@ $sm_lang = array(
'type_service' => 'Tjeneste', 'type_service' => 'Tjeneste',
'type_ping' => 'Ping', 'type_ping' => 'Ping',
'pattern' => 'Søke streng/mønster', 'pattern' => 'Søke streng/mønster',
'pattern_description' => 'Hvis dette mønsteret ikke er funnet på nettstedet, blir serveren merket online/offline. Vanlige uttrykk er tillatt.', 'pattern_description' => 'Hvis dette mønsteret ikke er funnet nettstedet, blir serveren merket
online/offline. Vanlige uttrykk er tillatt.',
'pattern_online' => 'Mønster indikerer at nettstedet er', 'pattern_online' => 'Mønster indikerer at nettstedet er',
'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.', 'pattern_online_description' => 'Online: Hvis dette mønsteret blir funnet nettstedet, er serverens merke
online. Frakoblet: Hvis dette mønsteret ikke blir funnet nettstedet,
flagges serveren offline.',
'header_name' => 'Overskriftnavn', 'header_name' => 'Overskriftnavn',
'header_value' => 'Overskriftsverdi', 'header_value' => 'Overskriftsverdi',
'header_name_description' => 'Versalsensitivt.', 'header_name_description' => 'Versalsensitivt.',
@ -207,7 +230,6 @@ $sm_lang = array(
'warning_threshold_description' => 'Antall mislykkede sjekker kreves før den er merket frakoblet.', 'warning_threshold_description' => 'Antall mislykkede sjekker kreves før den er merket frakoblet.',
'chart_last_week' => 'Forrige uke', 'chart_last_week' => 'Forrige uke',
'chart_history' => 'Historie', 'chart_history' => 'Historie',
// 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',
@ -229,7 +251,9 @@ $sm_lang = array(
'language' => 'Språk', 'language' => 'Språk',
'show_update' => 'Se etter oppdateringer?', 'show_update' => 'Se etter oppdateringer?',
'password_encrypt_key' => 'Krypteringsnøkkelpassordet', 'password_encrypt_key' => 'Krypteringsnøkkelpassordet',
'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!', 'password_encrypt_key_note' => 'Denne nøkkelen brukes til å kryptere passord som er lagret servere for
tilgang til nettsteder. Hvis nøkkelen endres, er det lagrede passordet
ugyldig!',
'proxy' => 'Aktiver proxy', 'proxy' => 'Aktiver proxy',
'proxy_url' => 'Proxy URL', 'proxy_url' => 'Proxy URL',
'proxy_user' => 'Proxy brukernavn', 'proxy_user' => 'Proxy brukernavn',
@ -251,30 +275,38 @@ $sm_lang = array(
'sms_gateway_password' => 'Gateway passord', 'sms_gateway_password' => 'Gateway passord',
'sms_from' => 'Avsenderens telefonnummer', 'sms_from' => 'Avsenderens telefonnummer',
'pushover_status' => 'Tillat sending av Pushover-meldinger', 'pushover_status' => 'Tillat sending av Pushover-meldinger',
'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.', 'pushover_description' => 'Pushover er en tjeneste som gjør det enkelt å meldinger i sanntid. Se <a
href="https://pushover.net/" target="_blank">deres nettside</a> for mer info.',
'pushover_clone_app' => 'Klikk her for å lage din Pushover-app', 'pushover_clone_app' => 'Klikk her for å lage din Pushover-app',
'pushover_api_token' => 'Pushover App API Token', 'pushover_api_token' => 'Pushover App API Token',
'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.', 'pushover_api_token_description' => 'Før du kan bruke Pushover, du <a href="%1$s" target="_blank"
rel="noopener"> registrere en app </a> deres nettside og angi App API
Token her.',
'telegram_status' => 'Tillat sending av Telegram-meldinger', 'telegram_status' => 'Tillat sending av Telegram-meldinger',
'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.', 'telegram_description' => '<a href="https://telegram.org/" target="_blank">Telegram</a> er en chat-app som
gjør det enkelt å meldinger i sanntid. til <a
href="http://docs.phpservermonitor.org/" target="_blank">dokumentasjonen</a> for
mer informasjon og en installasjonsveiledning.',
'telegram_api_token' => 'Telegram API Token', 'telegram_api_token' => 'Telegram API Token',
'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.', 'telegram_api_token_description' => 'Før du kan bruke Telegram, du en API-token. til <a
href="http://docs.phpservermonitor.org/"
target="_blank">dokumentasjonen</a> for å hjelp.',
'alert_type' => 'Velg når du vil bli varslet.', 'alert_type' => 'Velg når du vil bli varslet.',
'alert_type_description' => '<b>Statusendring:</b> '. 'alert_type_description' => '<b>Statusendring:</b> Du vil motta et varsel når en server har endret status.
'Du vil motta et varsel når en server har endret status. Så fra online -> offline eller offline -> online.<br>'. fra online -> offline eller offline -> online.<br><br /><b>Offline:</b> Du
'<br /><b>Offline:</b> '. vil motta et varsel når en server går offline for *FØRSTE GANG BARE*. For
'Du vil motta et varsel når en server går offline for *FØRSTE GANG BARE*. For eksempel,'. eksempel,din cronjob er hver 15 minutter og serveren din går ned klokken 01:00
'din cronjob er hver 15 minutter og serveren din går ned klokken 01:00 og holder seg ned til 06:00. '. og holder seg ned til 06:00. Du får 1 melding klokken 01:00 og det er
'Du får 1 melding klokken 01:00 og det er det.<br>'. det.<br><br><b>Alltid:</b> Du vil motta et varsel hver gang scriptet kjører, og
'<br><b>Alltid:</b> '. et nettsted er nede, selv om nettstedet har vært offline i flere timer.',
'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.',
'alert_type_status' => 'Statusendring', 'alert_type_status' => 'Statusendring',
'alert_type_offline' => 'Offline', 'alert_type_offline' => 'Offline',
'alert_type_always' => 'Alltid', 'alert_type_always' => 'Alltid',
'alert_proxy' => 'Selv om aktivert, blir proxy aldri brukt for tjenester', 'alert_proxy' => 'Selv om aktivert, blir proxy aldri brukt for tjenester',
'alert_proxy_url' => 'Format: Vert:Port', 'alert_proxy_url' => 'Format: Vert:Port',
'log_status' => 'Logg status', 'log_status' => 'Logg status',
'log_status_description' => 'Hvis loggstatus er satt til SANT, logger monitoren på hendelsen når meldingsinnstillingene er bestått.', 'log_status_description' => 'Hvis loggstatus er satt til SANT, logger monitoren hendelsen når
meldingsinnstillingene er bestått.',
'log_email' => 'Logg e-post sendt av skriptet', 'log_email' => 'Logg e-post sendt av skriptet',
'log_sms' => 'Logg tekstmeldinger sendt av skriptet', 'log_sms' => 'Logg tekstmeldinger sendt av skriptet',
'log_pushover' => 'Logg pushover-meldinger sendt av skriptet', 'log_pushover' => 'Logg pushover-meldinger sendt av skriptet',
@ -292,16 +324,14 @@ $sm_lang = array(
'settings_log' => 'Logg innstillinger', 'settings_log' => 'Logg innstillinger',
'settings_proxy' => 'Proxy innstillinger', 'settings_proxy' => 'Proxy innstillinger',
'auto_refresh' => 'Auto-refresh', 'auto_refresh' => 'Auto-refresh',
'auto_refresh_description' => 'auto_refresh_description' => 'Auto-refresh server side.<br><span class="small">Tid i sekunder, hvis 0 siden
'Auto-refresh server side.<br>'. ikke blir oppdatert.</span>',
'<span class="small">'.
'Tid i sekunder, hvis 0 siden ikke blir oppdatert.'.
'</span>',
'seconds' => 'sekunder', 'seconds' => 'sekunder',
'test' => 'Test', 'test' => 'Test',
'test_email' => 'En e-post vil bli sendt til adressen spesifisert i brukerprofilen din.', 'test_email' => 'En e-post vil bli sendt til adressen spesifisert i brukerprofilen din.',
'test_sms' => 'En tekstmelding vil bli sendt til telefonnummeret som er angitt i brukerprofilen din.', 'test_sms' => 'En tekstmelding vil bli sendt til telefonnummeret som er angitt i brukerprofilen din.',
'test_pushover' => 'En Pushover varsling vil bli sendt til brukernøkkelen/enheten som er angitt i brukerprofilen din.', 'test_pushover' => 'En Pushover varsling vil bli sendt til brukernøkkelen/enheten som er angitt i
brukerprofilen din.',
'test_telegram' => 'Et telegramvarsling vil bli sendt til chat-ID-en spesifisert i brukerprofilen din.', 'test_telegram' => 'Et telegramvarsling vil bli sendt til chat-ID-en spesifisert i brukerprofilen din.',
'send' => 'Send', 'send' => 'Send',
'test_subject' => 'Test', 'test_subject' => 'Test',
@ -313,30 +343,40 @@ $sm_lang = array(
'sms_error_nomobile' => 'Kan ikke sende test tekstmelding: ingen gyldig telefonnummer funnet i profilen din.', 'sms_error_nomobile' => 'Kan ikke sende test tekstmelding: ingen gyldig telefonnummer funnet i profilen din.',
'pushover_sent' => 'Pushover varsling sendt', 'pushover_sent' => 'Pushover varsling sendt',
'pushover_error' => 'Det har oppstått en feil under sending av Pushover-varslingen: %s', 'pushover_error' => 'Det har oppstått en feil under sending av Pushover-varslingen: %s',
'pushover_error_noapp' => 'Kan ikke sende testvarsling: Ingen Pushover App API-token funnet i den globale konfigurasjonen.', 'pushover_error_noapp' => 'Kan ikke sende testvarsling: Ingen Pushover App API-token funnet i den globale
konfigurasjonen.',
'pushover_error_nokey' => 'Kan ikke sende testvarsling: Ingen Pushover-nøkkel funnet i profilen din.', 'pushover_error_nokey' => 'Kan ikke sende testvarsling: Ingen Pushover-nøkkel funnet i profilen din.',
'telegram_sent' => 'Telegram varsling sent', 'telegram_sent' => 'Telegram varsling sent',
'telegram_error' => 'Det har oppstått en feil under sending av telegrammeldingen: %s', 'telegram_error' => 'Det har oppstått en feil under sending av telegrammeldingen: %s',
'telegram_error_notoken' => 'Kan ikke sende testvarsling: Ingen Telegram API-token funnet i den globale konfigurasjonen.', 'telegram_error_notoken' => 'Kan ikke sende testvarsling: Ingen Telegram API-token funnet i den globale
konfigurasjonen.',
'telegram_error_noid' => 'Kan ikke sende testvarsling: Ingen chat-ID funnet i profilen din.', 'telegram_error_noid' => 'Kan ikke sende testvarsling: Ingen chat-ID funnet i profilen din.',
'log_retention_period' => 'Oppbevaringsperiode for logg', 'log_retention_period' => 'Oppbevaringsperiode for logg',
'log_retention_period_description' => 'Antall dager for å holde logger over varsler og arkiver av serveroppetid. Skriv 0 for å deaktivere loggopprydding.', 'log_retention_period_description' => 'Antall dager for å holde logger over varsler og arkiver av
serveroppetid. Skriv 0 for å deaktivere loggopprydding.',
'log_retention_days' => 'dager', 'log_retention_days' => 'dager',
), ),
// for newlines in the email messages use <br>
'notifications' => array( 'notifications' => array(
'off_sms' => 'Serveren \'%LABEL%\' er NEDE: ip=%IP%, port=%PORT%. Feil=%ERROR%', 'off_sms' => 'Serveren \'%LABEL%\' er NEDE: ip=%IP%, port=%PORT%. Feil=%ERROR%',
'off_email_subject' => 'VIKTIG: Serveren \'%LABEL%\' er NEDE', 'off_email_subject' => 'VIKTIG: Serveren \'%LABEL%\' er NEDE',
'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%", '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%',
'off_pushover_title' => 'Server \'%LABEL%\' er NEDE', 'off_pushover_title' => 'Server \'%LABEL%\' er NEDE',
'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%", 'off_pushover_message' => 'Kunne ikke koble til følgende server:<br><br>Server: %LABEL%<br>IP: %IP%<br>Port:
'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%", %PORT%<br>Feil: %ERROR%<br>Dato: %DATE%',
'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_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_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_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_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_pushover_message' => 'Server \'%LABEL%\' er oppe igjen, det var nede i
'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%', %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( 'login' => array(
'welcome_usermenu' => 'Velkommen, %user_name%', 'welcome_usermenu' => 'Velkommen, %user_name%',
@ -353,12 +393,14 @@ $sm_lang = array(
'password_forgot' => 'Glemt passordet?', 'password_forgot' => 'Glemt passordet?',
'password_reset' => 'Tilbakestille passord', 'password_reset' => 'Tilbakestille passord',
'password_reset_email_subject' => 'Tilbakestill passordet ditt for PHP Server Monitor', '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 på at det utløper om 1 time.<br><br>%link%', '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_user_incorrect' => 'Det oppgitte brukernavnet ble ikke funnet.',
'error_login_incorrect' => 'Informasjonen er feil.', 'error_login_incorrect' => 'Informasjonen er feil.',
'error_login_passwords_nomatch' => 'De oppgitte passordene stemmer ikke overens.', 'error_login_passwords_nomatch' => 'De oppgitte passordene stemmer ikke overens.',
'error_reset_invalid_link' => 'Tilbakestill lenken du oppgav er ugyldig.', '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_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.', 'success_password_reset' => 'Ditt passord er tilbakestilt. Vennligst logg inn.',
), ),
'error' => array( 'error' => array(

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,7 +28,12 @@
$sm_lang = array( $sm_lang = array(
'name' => 'Polski - Polish', 'name' => 'Polski - Polish',
'locale' => array('pl_PL.UTF-8', 'pl_PL', 'polski', 'polski'), 'locale' => array(
'0' => 'pl_PL.UTF-8',
'1' => 'pl_PL',
'2' => 'polski',
'3' => 'polski',
),
'locale_tag' => 'pl', 'locale_tag' => 'pl',
'locale_dir' => 'ltr', 'locale_dir' => 'ltr',
'system' => array( 'system' => array(
@ -43,12 +49,13 @@ $sm_lang = array(
'no' => 'Nie', 'no' => 'Nie',
'insert' => 'Wstaw', 'insert' => 'Wstaw',
'add_new' => 'Dodaj', 'add_new' => 'Dodaj',
'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>.', '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>.',
'back_to_top' => 'Do góry', 'back_to_top' => 'Do góry',
'go_back' => 'Wstecz', 'go_back' => 'Wstecz',
'ok' => 'OK', 'ok' => 'OK',
'cancel' => 'Anuluj', 'cancel' => 'Anuluj',
// date/time format according the strftime php function format parameter http://php.net/manual/function.strftime.php
'short_day_format' => '%B %e', 'short_day_format' => '%B %e',
'long_day_format' => '%B %e, %Y', 'long_day_format' => '%B %e, %Y',
'yesterday_format' => 'Wczoraj o %k:%M', 'yesterday_format' => 'Wczoraj o %k:%M',
@ -60,18 +67,6 @@ $sm_lang = array(
'a_minute_ago' => 'minutę temu', 'a_minute_ago' => 'minutę temu',
'seconds_ago' => '%d sekund temu', 'seconds_ago' => '%d sekund temu',
'a_second_ago' => 'sekundę temu', 'a_second_ago' => 'sekundę temu',
'year' => 'year',
'years' => 'years',
'month' => 'month',
'months' => 'months',
'day' => 'day',
'days' => 'days',
'hour' => 'hour',
'hours' => 'hours',
'minute' => 'minute',
'minutes' => 'minutes',
'second' => 'second',
'seconds' => 'seconds',
), ),
'menu' => array( 'menu' => array(
'config' => 'Konfiguracja', 'config' => 'Konfiguracja',
@ -92,14 +87,19 @@ $sm_lang = array(
'level' => 'Poziom', 'level' => 'Poziom',
'level_10' => 'Administrator', 'level_10' => 'Administrator',
'level_20' => 'Użytkownik', 'level_20' => 'Użytkownik',
'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.', '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.',
'mobile' => 'Telefon', 'mobile' => 'Telefon',
'email' => 'Email', 'email' => 'Email',
'pushover' => 'Pushover', 'pushover' => 'Pushover',
'pushover_description' => 'Pushover jest usługą szybkich notyfikacji. Sprawdź <a href="https://pushover.net/">ich stronę</a> po więcej informacji.', 'pushover_description' => 'Pushover jest usługą szybkich notyfikacji. Sprawdź <a
href="https://pushover.net/" target="_blank">ich stronę</a> po więcej informacji.',
'pushover_key' => 'Pushover Key', 'pushover_key' => 'Pushover Key',
'pushover_device' => 'Urządzenie dla Pushover', 'pushover_device' => 'Urządzenie dla Pushover',
'pushover_device_description' => 'Nazwa urządzenia do którego wysłać powiadomienie. Pozostaw puste aby 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.',
@ -108,7 +108,8 @@ $sm_lang = array(
'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 podkreślenia (_).', 'error_user_name_invalid' => 'Login może zawierać tylko litery (a-z, A-Z), cyfry (0-9), kropki (.) oraz znak
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.',
@ -141,7 +142,8 @@ $sm_lang = array(
'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.
Wyrażenia regularne dozwolone.',
'last_check' => 'Ostatnie sprawdzenie', 'last_check' => 'Ostatnie sprawdzenie',
'last_online' => 'Ostatnio online', 'last_online' => 'Ostatnio online',
'last_offline' => 'Ostatnio offline', 'last_offline' => 'Ostatnio offline',
@ -172,7 +174,6 @@ $sm_lang = array(
'warning_threshold_description' => 'Ilość wymaganych niepowodzeń przed oznaczeniem serwera jako offline.', 'warning_threshold_description' => 'Ilość wymaganych niepowodzeń przed oznaczeniem serwera jako offline.',
'chart_last_week' => 'Ostatni tydzień', 'chart_last_week' => 'Ostatni tydzień',
'chart_history' => 'Historia', 'chart_history' => 'Historia',
// 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',
@ -209,24 +210,28 @@ $sm_lang = array(
'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
rzeczywistym. Sprawdź <a href="https://pushover.net/" target="_blank">ich stronę</a> aby uzyskać
więcej informacji.',
'pushover_clone_app' => 'Kliknij tutaj aby stworzyć aplikację korzystającą z Pushover', 'pushover_clone_app' => 'Kliknij tutaj aby stworzyć aplikację korzystającą z Pushover',
'pushover_api_token' => 'Pushover App API Token', 'pushover_api_token' => 'Pushover App API Token',
'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_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.',
'alert_type' => 'Wybierz kiedy chcesz być powiadomiony.', 'alert_type' => 'Wybierz kiedy chcesz być powiadomiony.',
'alert_type_description' => '<b>Zmiana statusu:</b> '. 'alert_type_description' => '<b>Zmiana statusu:</b> Otrzymasz powiadomienie gdy serwer zmieni status. Z online
'Otrzymasz powiadomienie gdy serwer zmieni status. Z online -> offline lub offline -> online.<br>'. -> offline lub offline -> online.<br><br /><b>Offline:</b> Otrzymasz
'<br /><b>Offline:</b> '. powiadomienie gdy serwer zmieni status na offline po raz pierwszy. Na przykład,
'Otrzymasz powiadomienie gdy serwer zmieni status na offline po raz pierwszy. Na przykład, '. Twój cronjob uruchamia się co 15 minut, a Twój serwer przestaje odpowiadać o
'Twój cronjob uruchamia się co 15 minut, a Twój serwer przestaje odpowiadać o 13 i nie działa do 18. '. 13 i nie działa do 18. Otrzymasz *TYLKO* jedno powiadomienie o
'Otrzymasz *TYLKO* jedno powiadomienie o 13.<br>'. 13.<br><br><b>Zawsze:</b> Otrzymasz powiadomienie za każdym razem gdy skrypt
'<br><b>Zawsze:</b> '. zostanie uruchomiony a strona będzie niedostępna.',
'Otrzymasz powiadomienie za każdym razem gdy skrypt zostanie uruchomiony a strona będzie niedostępna.',
'alert_type_status' => 'Zmiana statusu', 'alert_type_status' => 'Zmiana statusu',
'alert_type_offline' => 'Offline', 'alert_type_offline' => 'Offline',
'alert_type_always' => 'Zawsze', 'alert_type_always' => 'Zawsze',
'log_status' => 'Status logowania', 'log_status' => 'Status logowania',
'log_status_description' => 'Jeśli status logowania ustawiony jest na TRUE, monitor będzie logował wydarzenia.', 'log_status_description' => 'Jeśli status logowania ustawiony jest na TRUE, monitor będzie logował
wydarzenia.',
'log_email' => 'Emaile wysłane przez skrypt', 'log_email' => 'Emaile wysłane przez skrypt',
'log_sms' => 'SMS wysłane przez skrypt', 'log_sms' => 'SMS wysłane przez skrypt',
'log_pushover' => 'Notyfikacje Pushover wysłane przez skrypt', 'log_pushover' => 'Notyfikacje Pushover wysłane przez skrypt',
@ -240,16 +245,14 @@ $sm_lang = array(
'settings_notification' => 'Ustawienia powiadomień', 'settings_notification' => 'Ustawienia powiadomień',
'settings_log' => 'Ustawienia Logowania', 'settings_log' => 'Ustawienia Logowania',
'auto_refresh' => 'Auto-odświeżanie', 'auto_refresh' => 'Auto-odświeżanie',
'auto_refresh_description' => 'auto_refresh_description' => 'Auto-odświeżanie strony serwera.<br><span class="small">Czas w sekundach, dla
'Auto-odświeżanie strony serwera.<br>'. czasu 0 strona nie będzie odświeżana.</span>',
'<span class="small">'.
'Czas w sekundach, dla czasu 0 strona nie będzie odświeżana.'.
'</span>',
'seconds' => 'sekund', 'seconds' => 'sekund',
'test' => 'Test', 'test' => 'Test',
'test_email' => 'Email zostanie wysłany na adres podany w Twoim profilu.', 'test_email' => 'Email zostanie wysłany na adres podany w Twoim profilu.',
'test_sms' => 'SMS zostanie wysłany na numer podany w Twoim profilu.', 'test_sms' => 'SMS zostanie wysłany na numer podany w Twoim profilu.',
'test_pushover' => 'Powiadomienie Pushover zostanie wysłany na klucz użytkownika/urządzenie podane w Twoim profilu..', 'test_pushover' => 'Powiadomienie Pushover zostanie wysłany na klucz użytkownika/urządzenie podane w Twoim
profilu..',
'send' => 'Wyślij', 'send' => 'Wyślij',
'test_subject' => 'Test', 'test_subject' => 'Test',
'test_message' => 'Testowa wiadomość', 'test_message' => 'Testowa wiadomość',
@ -260,24 +263,34 @@ $sm_lang = array(
'sms_error_nomobile' => 'Nie udało się wysłać testowego SMS: brak poprawnego telefonu w Twoim profilu.', 'sms_error_nomobile' => 'Nie udało się wysłać testowego SMS: brak poprawnego telefonu w Twoim profilu.',
'pushover_sent' => 'Powiadomienie Pushover wysłane.', 'pushover_sent' => 'Powiadomienie Pushover wysłane.',
'pushover_error' => 'Błąd podczas wysyłania powiadomienia Pushover: %s', 'pushover_error' => 'Błąd podczas wysyłania powiadomienia Pushover: %s',
'pushover_error_noapp' => 'Błąd podczas wysyłania testowego powiadomienia: brak Pushover App API token w konfuguracji globalnej.', 'pushover_error_noapp' => 'Błąd podczas wysyłania testowego powiadomienia: brak Pushover App API token w
'pushover_error_nokey' => 'Błąd podczas wysyłania testowego powiadomienia: brak Pushover key na Twoim profilu.', konfuguracji globalnej.',
'pushover_error_nokey' => 'Błąd podczas wysyłania testowego powiadomienia: brak Pushover key na Twoim
profilu.',
'log_retention_period' => 'Czas rotacji logów', 'log_retention_period' => 'Czas rotacji logó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.', '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.',
'log_retention_days' => 'dni', 'log_retention_days' => 'dni',
), ),
// for newlines in the email messages use <br>
'notifications' => array( 'notifications' => array(
'off_sms' => 'Serwer \'%LABEL%\' przestał odpowiadać: ip=%IP%, port=%PORT%. Błąd=%ERROR%', 'off_sms' => 'Serwer \'%LABEL%\' przestał odpowiadać: ip=%IP%, port=%PORT%. Błąd=%ERROR%',
'off_email_subject' => 'Uwaga: Serwer \'%LABEL%\' nie odpowiada', 'off_email_subject' => 'Uwaga: Serwer \'%LABEL%\' nie odpowiada',
'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%", '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%',
'off_pushover_title' => 'Serwer \'%LABEL%\' nie odpowiada', '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%", 'off_pushover_message' => 'Błąd połączenia do serwera:<br><br>Serwer: %LABEL%<br>IP: %IP%<br>Port:
'on_sms' => 'Serwer \'%LABEL%\' działa poprawnie: ip=%IP%, port=%PORT%, it was down for %LAST_OFFLINE_DURATION%', %PORT%<br>Błąd: %ERROR%<br>Data: %DATE%',
'on_sms' => 'Serwer \'%LABEL%\' działa poprawnie: ip=%IP%, port=%PORT%, it was down for
%LAST_OFFLINE_DURATION%',
'on_email_subject' => 'Uwaga: Serwer \'%LABEL%\' działa poprawnie', 'on_email_subject' => 'Uwaga: Serwer \'%LABEL%\' działa poprawnie',
'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%", '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%',
'on_pushover_title' => 'Serwer \'%LABEL%\' działa poprawnie', 'on_pushover_title' => 'Serwer \'%LABEL%\' działa poprawnie',
'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%', '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%',
), ),
'login' => array( 'login' => array(
'welcome_usermenu' => 'Witaj, %user_name%', 'welcome_usermenu' => 'Witaj, %user_name%',
@ -294,12 +307,14 @@ $sm_lang = array(
'password_forgot' => 'Zapomniałeś hasła?', 'password_forgot' => 'Zapomniałeś hasła?',
'password_reset' => 'Zresetuj hasło', 'password_reset' => 'Zresetuj hasło',
'password_reset_email_subject' => 'Zresetuj hasło do monitoringu', '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%', '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_user_incorrect' => 'Brak użytkownika o takim loginie.',
'error_login_incorrect' => 'Login lub hasło jest błędne.', 'error_login_incorrect' => 'Login lub hasło jest błędne.',
'error_login_passwords_nomatch' => 'Podane hasła nie pasują do siebie.', 'error_login_passwords_nomatch' => 'Podane hasła nie pasują do siebie.',
'error_reset_invalid_link' => 'Podany link do zmiany hasła jest nieprawidłowy.', '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_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ę.', 'success_password_reset' => 'Twoje hasło zostało pomyślnie zmienione. Zaloguj się.',
), ),
'error' => array( 'error' => array(

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,7 +28,11 @@
$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(
'0' => 'pt_BR.UTF-8',
'1' => 'pt_BR',
'2' => 'portuguese-brazilian',
),
'locale_tag' => 'BR', 'locale_tag' => 'BR',
'locale_dir' => 'ltr', 'locale_dir' => 'ltr',
'system' => array( 'system' => array(
@ -43,12 +48,13 @@ $sm_lang = array(
'no' => 'Não', 'no' => 'Não',
'insert' => 'Inserir', 'insert' => 'Inserir',
'add_new' => 'Adicionar novo', 'add_new' => 'Adicionar novo',
'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>.', '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>.',
'back_to_top' => 'Voltar ao topo', 'back_to_top' => 'Voltar ao topo',
'go_back' => 'Voltar', 'go_back' => 'Voltar',
'ok' => 'OK', 'ok' => 'OK',
'cancel' => 'Cancel', 'cancel' => 'Cancel',
// date/time format according the strftime php function format parameter http://php.net/manual/function.strftime.php
'short_day_format' => '%e %m', 'short_day_format' => '%e %m',
'long_day_format' => '%e/%m/%Y', 'long_day_format' => '%e/%m/%Y',
'yesterday_format' => 'Ontem as %k:%M', 'yesterday_format' => 'Ontem as %k:%M',
@ -60,18 +66,6 @@ $sm_lang = array(
'a_minute_ago' => 'cerca de um minuto atrás', 'a_minute_ago' => 'cerca de um minuto atrás',
'seconds_ago' => '%d segundos atrás', 'seconds_ago' => '%d segundos atrás',
'a_second_ago' => 'um segundo atrás', 'a_second_ago' => 'um segundo atrás',
'year' => 'year',
'years' => 'years',
'month' => 'month',
'months' => 'months',
'day' => 'day',
'days' => 'days',
'hour' => 'hour',
'hours' => 'hours',
'minute' => 'minute',
'minutes' => 'minutes',
'second' => 'second',
'seconds' => 'seconds',
), ),
'menu' => array( 'menu' => array(
'config' => 'Configuração', 'config' => 'Configuração',
@ -92,14 +86,18 @@ $sm_lang = array(
'level' => 'Nível', 'level' => 'Nível',
'level_10' => 'Administrador', 'level_10' => 'Administrador',
'level_20' => 'Usuário', 'level_20' => 'Usuário',
'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.', 'level_description' => '<b>Administradores</b> Tem total acesso: podem gerenciar servidores, usuários e
configurações globais.<br><b>Usuários</b> podem executar atualizações para
servidores que lhe foram atribuídos.',
'mobile' => 'Celular', 'mobile' => 'Celular',
'email' => 'Email', 'email' => 'Email',
'pushover' => 'Pushover', 'pushover' => 'Pushover',
'pushover_description' => 'Pushover para enviar notificações em real-tome. Veja <a href="https://pushover.net/">o website</a> para mais informações.', 'pushover_description' => 'Pushover para enviar notificações em real-tome. Veja <a
href="https://pushover.net/" target="_blank">o website</a> para mais informações.',
'pushover_key' => 'Pushover Key', 'pushover_key' => 'Pushover Key',
'pushover_device' => 'Pushover Device', 'pushover_device' => 'Pushover Device',
'pushover_device_description' => 'Nome do Device para enviar a mensagem. Deixe em branco para enviar a todos os Devices.', 'pushover_device_description' => 'Nome do Device para enviar a mensagem. Deixe em branco para enviar a todos
os Devices.',
'delete_title' => 'Excluir Usuário', 'delete_title' => 'Excluir Usuário',
'delete_message' => 'Tem certeza que deseja excluir o usuário \'%1\'?', 'delete_message' => 'Tem certeza que deseja excluir o usuário \'%1\'?',
'deleted' => 'Usuário excluído.', 'deleted' => 'Usuário excluído.',
@ -108,7 +106,8 @@ $sm_lang = array(
'profile' => 'Perfil', 'profile' => 'Perfil',
'profile_updated' => 'Seu perfil foi atualizado.', 'profile_updated' => 'Seu perfil foi atualizado.',
'error_user_name_bad_length' => 'Usernames deve conter entre 2 e 64 caracteres.', 'error_user_name_bad_length' => 'Usernames deve conter entre 2 e 64 caracteres.',
'error_user_name_invalid' => 'Só pode conter caracteres alfabéticos (a-z, A-Z), dígitos (0-9), pontos (.) e underscores (_).', 'error_user_name_invalid' => ' pode conter caracteres alfabéticos (a-z, A-Z), dígitos (0-9), pontos (.) e
underscores (_).',
'error_user_name_exists' => 'O nome de usuário(username) já existe no banco de dados', 'error_user_name_exists' => 'O nome de usuário(username) já existe no banco de dados',
'error_user_email_bad_length' => 'Email deve conter entre 5 e 255 caracteres.', 'error_user_email_bad_length' => 'Email deve conter entre 5 e 255 caracteres.',
'error_user_email_invalid' => 'O endereço de email é inválido.', 'error_user_email_invalid' => 'O endereço de email é inválido.',
@ -141,7 +140,8 @@ $sm_lang = array(
'type_website' => 'Website', 'type_website' => 'Website',
'type_service' => 'Service', 'type_service' => 'Service',
'pattern' => 'Pesquisa palavra/padrão', 'pattern' => 'Pesquisa palavra/padrão',
'pattern_description' => 'Se esse padrão não for encontrado no site, o servidor será marcado offline. As 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',
@ -172,7 +172,6 @@ $sm_lang = array(
'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',
// 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',
@ -209,24 +208,28 @@ $sm_lang = array(
'sms_gateway_password' => 'Senha do Gateway', 'sms_gateway_password' => 'Senha do Gateway',
'sms_from' => 'Número de telefone de envio', 'sms_from' => 'Número de telefone de envio',
'pushover_status' => 'Habilitar envio de mensagens Pushover', 'pushover_status' => 'Habilitar envio de mensagens Pushover',
'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_description' => 'Pushover é um serviço de notificações em tempo real. Veja <a
href="https://pushover.net/" target="_blank">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" rel="noopener">register an App</a> at their website and enter the App API Token here.', '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' => 'Selecione como você gostaria de ser notificado.', 'alert_type' => 'Selecione como você gostaria de ser notificado.',
'alert_type_description' => '<b>Mudança de Status:</b> '. 'alert_type_description' => '<b>Mudança de Status:</b> Você receberá uma notificação quando o seridor
'Você receberá uma notificação quando o seridor tive uma mudança de status. De online -> offline ou offline -> online.<br>'. tive uma mudança de status. De online -> offline ou offline -> online.<br><br
'<br /><b>Offline:</b> '. /><b>Offline:</b> Você receberá uma notificação quando o servidor fica
'Você receberá uma notificação quando o servidor fica OFFLINE (Pela primeira vez). Por exemplo, '. OFFLINE (Pela primeira vez). Por exemplo, A cronjob é a cada 15 minutos e seu
'A cronjob é a cada 15 minutos e seu servidor caiu em 1:00 e permanece offline até 6 am. '. servidor caiu em 1:00 e permanece offline até 6 am. Você receberá uma
'Você receberá uma notificação a 1:00 apenas<br>'. notificação a 1:00 apenas<br><br><b>Sempre:</b> Você receberá uma
'<br><b>Sempre:</b> '. notificação toda vez que o script é executado e um site esta offline, mesmo se
'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.', o site tenha ficado offline por horas.',
'alert_type_status' => 'Mudança de Status', 'alert_type_status' => 'Mudança de Status',
'alert_type_offline' => 'Offline', 'alert_type_offline' => 'Offline',
'alert_type_always' => 'Sempre', 'alert_type_always' => 'Sempre',
'log_status' => 'Log status', 'log_status' => 'Log status',
'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_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_email' => 'Registrar no Log os envios de email feitos pelo script?', 'log_email' => 'Registrar no Log os envios de email feitos pelo script?',
'log_sms' => 'Registrar no Log os envios de mensagens de texto feitos pelo script?', 'log_sms' => 'Registrar no Log os envios de mensagens de texto feitos pelo script?',
'log_pushover' => 'Log pushover messages sent by the script', 'log_pushover' => 'Log pushover messages sent by the script',
@ -240,16 +243,14 @@ $sm_lang = array(
'settings_notification' => 'Configuração de notificações', 'settings_notification' => 'Configuração de notificações',
'settings_log' => 'Configuração de Logs', 'settings_log' => 'Configuração de Logs',
'auto_refresh' => 'Atualizar automaticamente', 'auto_refresh' => 'Atualizar automaticamente',
'auto_refresh_description' => 'auto_refresh_description' => 'Atualizar automaticamente a página de servidores.<br><span class="small">Tempo
'Atualizar automaticamente a página de servidores.<br>'. em segundos, Se 0 a página não será atualizada.</span>',
'<span class="small">'.
'Tempo em segundos, Se 0 a página não será atualizada.'.
'</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 em seu perfil de usuário.', 'test_pushover' => 'A notificação Pushover será enviado para a chave de usuário / dispositivo especificado
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',
@ -257,27 +258,37 @@ $sm_lang = array(
'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
em seu perfil.',
'pushover_sent' => 'Notificação Pushover enviada', 'pushover_sent' => 'Notificação Pushover enviada',
'pushover_error' => 'Um erro foi encontrado ao enviar a notificação Pushover: %s', 'pushover_error' => 'Um erro foi encontrado ao enviar a notificação Pushover: %s',
'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_noapp' => 'Não foi possível enviar a notificação de teste: não foi encontrada a APP API
'pushover_error_nokey' => 'Não foi possível enviar a notificação de teste: não foi encontrada a Pushover Key no seu perfil.', token do Pushover na configuração global.',
'pushover_error_nokey' => 'Não foi possível enviar a notificação de teste: não foi encontrada a Pushover
Key no seu perfil.',
'log_retention_period' => 'Período de retenção do Log', 'log_retention_period' => 'Período de retenção do Log',
'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.', '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.',
'log_retention_days' => 'dias', 'log_retention_days' => 'dias',
), ),
// for newlines in the email messages use <br>
'notifications' => array( 'notifications' => array(
'off_sms' => 'Servidor \'%LABEL%\' está OFFLINE: ip=%IP%, porta=%PORT%. Erro=%ERROR%', 'off_sms' => 'Servidor \'%LABEL%\' está OFFLINE: ip=%IP%, porta=%PORT%. Erro=%ERROR%',
'off_email_subject' => 'IMPORTANTE: Servidor \'%LABEL%\' está OFFLINE', 'off_email_subject' => 'IMPORTANTE: Servidor \'%LABEL%\' está OFFLINE',
'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_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', 'off_pushover_title' => 'Servidor \'%LABEL%\' está OFFLINE',
'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_pushover_message' => 'Falha ao conectar ao servidor:<br><br>Servidor: %LABEL%<br>IP: %IP%<br>Porta:
%PORT%<br>Erro: %ERROR%<br>Data: %DATE%',
'on_sms' => 'Servidor \'%LABEL%\' esta ONLINE: ip=%IP%, porta=%PORT%, it was down for %LAST_OFFLINE_DURATION%', 'on_sms' => 'Servidor \'%LABEL%\' esta ONLINE: ip=%IP%, porta=%PORT%, it was down for %LAST_OFFLINE_DURATION%',
'on_email_subject' => 'IMPORTANTE: Servidor \'%LABEL%\' esta ONLINE', 'on_email_subject' => 'IMPORTANTE: Servidor \'%LABEL%\' esta ONLINE',
'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%", '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%',
'on_pushover_title' => 'Servidor \'%LABEL%\' esta ONLINE', 'on_pushover_title' => 'Servidor \'%LABEL%\' esta ONLINE',
'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%", '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%',
), ),
'login' => array( 'login' => array(
'welcome_usermenu' => 'Bem vindo, %user_name%', 'welcome_usermenu' => 'Bem vindo, %user_name%',
@ -294,7 +305,8 @@ $sm_lang = array(
'password_forgot' => 'Perdeu a senha?', 'password_forgot' => 'Perdeu a senha?',
'password_reset' => 'Redefinir senha', 'password_reset' => 'Redefinir senha',
'password_reset_email_subject' => 'Redefinir sua senha para PHP Server Monitor', 'password_reset_email_subject' => 'Redefinir sua senha para PHP Server Monitor',
'password_reset_email_body' => 'Por favor use o link para redefinir sua senha. Este link irá expirar em 1 hora.<br><br>%link%', '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_user_incorrect' => 'O username não pode ser encontrado.',
'error_login_incorrect' => 'As informações são incorretas.', 'error_login_incorrect' => 'As informações são incorretas.',
'error_login_passwords_nomatch' => 'A senha informada não é válida.', 'error_login_passwords_nomatch' => 'A senha informada não é válida.',

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,7 +29,12 @@
$sm_lang = array( $sm_lang = array(
'name' => 'Русский - Russian', 'name' => 'Русский - Russian',
'locale' => array('ru_RU.UTF-8', 'ru_RU', 'russian', 'russian'), 'locale' => array(
'0' => 'ru_RU.UTF-8',
'1' => 'ru_RU',
'2' => 'russian',
'3' => 'russian',
),
'locale_tag' => 'ru', 'locale_tag' => 'ru',
'locale_dir' => 'ltr', 'locale_dir' => 'ltr',
'system' => array( 'system' => array(
@ -44,13 +50,14 @@ $sm_lang = array(
'no' => 'Нет', 'no' => 'Нет',
'insert' => 'Добавить', 'insert' => 'Добавить',
'add_new' => 'Добавить новый', 'add_new' => 'Добавить новый',
'update_available' => 'Новая версия ({version}) доступна по адресу <a href="https://github.com/phpservermon/phpservermon/releases/latest" target="_blank" rel="noopener">http://www.phpservermonitor.org</a>.', 'update_available' => 'Новая версия ({version}) доступна по адресу <a
href="https://github.com/phpservermon/phpservermon/releases/latest" target="_blank"
rel="noopener">http://www.phpservermonitor.org</a>.',
'back_to_top' => 'Наверх', 'back_to_top' => 'Наверх',
'go_back' => 'Вернуться', 'go_back' => 'Вернуться',
'ok' => 'OK', 'ok' => 'OK',
'cancel' => 'Отмена', 'cancel' => 'Отмена',
'activate' => 'Активировать', 'activate' => 'Активировать',
// date/time format according the strftime php function format parameter http://php.net/manual/function.strftime.php
'short_day_format' => '%e %B', 'short_day_format' => '%e %B',
'long_day_format' => '%e %B %Y', 'long_day_format' => '%e %B %Y',
'yesterday_format' => 'Вчера в %k:%M', 'yesterday_format' => 'Вчера в %k:%M',
@ -94,24 +101,50 @@ $sm_lang = array(
'level' => 'Уровень', 'level' => 'Уровень',
'level_10' => 'Администратор', 'level_10' => 'Администратор',
'level_20' => 'Пользователь', 'level_20' => 'Пользователь',
'level_description' => '<b>Администраторы</b> имеют полный доступ: они могут управлять серверами, пользователями и изменять общую конфигурацию.<br><b>Пользователи</b> могут только просматривать и запускать проверку для серверов, которые были к ним прикреплены.', 'level_description' => '<b>Администраторы</b> имеют полный доступ: они
могут управлять серверами, пользователями и
изменять общую
конфигурацию.<br><b>Пользователи</b> могут только
просматривать и запускать проверку для
серверов, которые были к ним прикреплены.',
'mobile' => 'Телефон', 'mobile' => 'Телефон',
'email' => 'E-mail', 'email' => 'E-mail',
'pushover' => 'Pushover', 'pushover' => 'Pushover',
'pushover_description' => 'Pushover - это сервис, который позволяет легко получать уведомления в режиме реального времени. Больше информации на <a href="https://pushover.net/">их веб-сайте</a>.', 'pushover_description' => 'Pushover - это сервис, который позволяет легко
получать уведомления в режиме реального
времени. Больше информации на <a
href="https://pushover.net/" target="_blank">их веб-сайте</a>.',
'pushover_key' => 'Pushover ключ', 'pushover_key' => 'Pushover ключ',
'pushover_device' => 'Pushover устройство', 'pushover_device' => 'Pushover устройство',
'pushover_device_description' => 'Имя устройства, на которое будут отправляться уведомления. Оставьте пустым, что бы отправлять уведомления на все устройства.', 'pushover_device_description' => 'Имя устройства, на которое будут
отправляться уведомления. Оставьте
пустым, что бы отправлять уведомления на
все устройства.',
'telegram' => 'Telegram', 'telegram' => 'Telegram',
'telegram_description' => '<a href="https://telegram.org/">Telegram</a> удобный мессенджер для получения уведомлений в реальном времени. Посетите <a href="http://docs.phpservermonitor.org/">раздел документации</a> для получения доп. информации и инструкций по установке.', 'telegram_description' => '<a href="https://telegram.org/" target="_blank">Telegram</a> удобный мессенджер
для получения уведомлений в реальном
времени. Посетите <a
href="http://docs.phpservermonitor.org/" target="_blank">раздел документации</a>
для получения доп. информации и инструкций по
установке.',
'telegram_chat_id' => 'Telegram chat id', 'telegram_chat_id' => 'Telegram chat id',
'telegram_chat_id_description' => 'Сообщения будут отправляться на указанный идентификатор чата.', 'telegram_chat_id_description' => 'Сообщения будут отправляться на
указанный идентификатор чата.',
'telegram_get_chat_id' => 'Нажмите здесь чтобы получить ваш chat id', 'telegram_get_chat_id' => 'Нажмите здесь чтобы получить ваш chat id',
'activate_telegram' => 'Активировать уведомления в Telegram', 'activate_telegram' => 'Активировать уведомления в Telegram',
'activate_telegram_description' => 'Разрешить отправку уведомлений на указанный идентификатор чата. Без этого разрешения Telegram не позволит нам отправлять вам уведомления.', 'activate_telegram_description' => 'Разрешить отправку уведомлений на
'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 - Unauthorized. Пожалуйста укажите действительный API токен..', разрешения Telegram не позволит нам
'telegram_bot_error' => 'Произошла ошибка при активации уведомления Telegram: %s', отправлять вам уведомления.',
'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 - Unauthorized. Пожалуйста укажите
действительный API токен..',
'telegram_bot_error' => 'Произошла ошибка при активации уведомления
Telegram: %s',
'delete_title' => 'Удалить пользователя', 'delete_title' => 'Удалить пользователя',
'delete_message' => 'Вы уверены что хотите удалить пользователя \'%1\'?', 'delete_message' => 'Вы уверены что хотите удалить пользователя \'%1\'?',
'deleted' => 'Пользователь удален.', 'deleted' => 'Пользователь удален.',
@ -120,11 +153,14 @@ $sm_lang = array(
'profile' => 'Профиль', 'profile' => 'Профиль',
'profile_updated' => 'Ваш профиль был обновлен.', 'profile_updated' => 'Ваш профиль был обновлен.',
'error_user_name_bad_length' => 'Логин должен содержать от 2 до 64 знаков.', 'error_user_name_bad_length' => 'Логин должен содержать от 2 до 64 знаков.',
'error_user_name_invalid' => 'Имя пользователя может содержать только латинские символы (a-z, A-Z), цифры (0-9), точки (.) и подчеркивание (_).', 'error_user_name_invalid' => 'Имя пользователя может содержать только
латинские символы (a-z, A-Z), цифры (0-9), точки (.)
и подчеркивание (_).',
'error_user_name_exists' => 'Данный логин уже существует.', 'error_user_name_exists' => 'Данный логин уже существует.',
'error_user_email_bad_length' => 'E-mail может содержать от 5 до 255 знаков.', 'error_user_email_bad_length' => 'E-mail может содержать от 5 до 255 знаков.',
'error_user_email_invalid' => 'E-mail указан неверно.', 'error_user_email_invalid' => 'E-mail указан неверно.',
'error_user_level_invalid' => 'Данный уровень пользователя недействителен.', 'error_user_level_invalid' => 'Данный уровень пользователя
недействителен.',
'error_user_no_match' => 'Данного пользователя нет в базе данных.', 'error_user_no_match' => 'Данного пользователя нет в базе данных.',
'error_user_password_invalid' => 'Пароль указан неверно.', 'error_user_password_invalid' => 'Пароль указан неверно.',
'error_user_password_no_match' => 'Введенные пароли не совпадают.', 'error_user_password_no_match' => 'Введенные пароли не совпадают.',
@ -152,9 +188,11 @@ $sm_lang = array(
'authentication_settings' => 'Настройки аутентификации', 'authentication_settings' => 'Настройки аутентификации',
'optional' => 'необязательно', 'optional' => 'необязательно',
'website_username' => 'Имя пользователя', 'website_username' => 'Имя пользователя',
'website_username_description' => 'Имя пользователя для доступа к сайту. (Поддерживается только Apache authentication.)', 'website_username_description' => 'Имя пользователя для доступа к сайту.
(Поддерживается только Apache authentication.)',
'website_password' => 'Пароль', 'website_password' => 'Пароль',
'website_password_description' => 'пароль для доступа к сайту. Пароль будет храниться в зашифрованном виде.', 'website_password_description' => 'пароль для доступа к сайту. Пароль будет
храниться в зашифрованном виде.',
'fieldset_monitoring' => 'Мониторинг', 'fieldset_monitoring' => 'Мониторинг',
'fieldset_permissions' => 'Права доступа', 'fieldset_permissions' => 'Права доступа',
'port' => 'Порт', 'port' => 'Порт',
@ -166,9 +204,14 @@ $sm_lang = array(
'type_service' => 'Сервис', 'type_service' => 'Сервис',
'type_ping' => 'Пинг', 'type_ping' => 'Пинг',
'pattern' => 'Искать текст/шаблон', 'pattern' => 'Искать текст/шаблон',
'pattern_description' => 'Если текст по шаблону не найден на сайте, сервер будет помечен как Оффлайн. Регулярные выражения допустимы.', 'pattern_description' => 'Если текст по шаблону не найден на сайте,
сервер будет помечен как Оффлайн. Регулярные
выражения допустимы.',
'pattern_online' => 'Шаблон указывает что вебсайт:', 'pattern_online' => 'Шаблон указывает что вебсайт:',
'pattern_online_description' => 'Online: Если этот шаблон не найден на веб-сайте, сервер будет отмечен Онлайн. Offline: Если этот шаблон не найден на веб-сайте, сервер будет отмечен как Оффлайн.', 'pattern_online_description' => 'Online: Если этот шаблон найден на веб-сайте,
сервер будет отмечен Онлайн. Offline: Если
этот шаблон не найден на веб-сайте, сервер
будет отмечен как Оффлайн.',
'header_name' => 'Название заголовка', 'header_name' => 'Название заголовка',
'header_value' => 'Значение заголовка', 'header_value' => 'Значение заголовка',
'header_name_description' => 'с учетом регистра.', 'header_name_description' => 'с учетом регистра.',
@ -205,10 +248,11 @@ $sm_lang = array(
'day' => 'День', 'day' => 'День',
'hour' => 'Час', 'hour' => 'Час',
'warning_threshold' => 'Порог предупреждения', 'warning_threshold' => 'Порог предупреждения',
'warning_threshold_description' => 'Количество неудачных проверок, требуемых чтобы сервер был помечен как Оффлайн.', 'warning_threshold_description' => 'Количество неудачных проверок,
требуемых чтобы сервер был помечен как
Оффлайн.',
'chart_last_week' => 'Прошлая неделя', 'chart_last_week' => 'Прошлая неделя',
'chart_history' => 'История', 'chart_history' => 'История',
// 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',
@ -218,19 +262,24 @@ $sm_lang = array(
'warning_notifications_disabled_pushover' => 'Pushover уведомления отключены.', 'warning_notifications_disabled_pushover' => 'Pushover уведомления отключены.',
'warning_notifications_disabled_telegram' => 'Уведомления в Telegram отключены.', 'warning_notifications_disabled_telegram' => 'Уведомления в Telegram отключены.',
'error_server_no_match' => 'Сервер не найден.', 'error_server_no_match' => 'Сервер не найден.',
'error_server_label_bad_length' => 'Название должно содержать от 1 до 255 знаков.', 'error_server_label_bad_length' => 'Название должно содержать от 1 до 255
знаков.',
'error_server_ip_bad_length' => 'Домен/IP должен содержать от 1 до 255 знаков', 'error_server_ip_bad_length' => 'Домен/IP должен содержать от 1 до 255 знаков',
'error_server_ip_bad_service' => 'IP-адрес недействителен.', 'error_server_ip_bad_service' => 'IP-адрес недействителен.',
'error_server_ip_bad_website' => 'Ссылка веб-страницы недействительна.', 'error_server_ip_bad_website' => 'Ссылка веб-страницы недействительна.',
'error_server_type_invalid' => 'Выбраный тип сервера недействителен.', 'error_server_type_invalid' => 'Выбраный тип сервера недействителен.',
'error_server_warning_threshold_invalid' => 'Порог предупреждения должен иметь значение больше 0', 'error_server_warning_threshold_invalid' => 'Порог предупреждения должен иметь
значение больше 0',
), ),
'config' => array( 'config' => array(
'general' => 'Основные', 'general' => 'Основные',
'language' => 'Язык', 'language' => 'Язык',
'show_update' => 'Проверять обновления?', 'show_update' => 'Проверять обновления?',
'password_encrypt_key' => 'Ключ шифрования пароля', 'password_encrypt_key' => 'Ключ шифрования пароля',
'password_encrypt_key_note' => 'Этот ключ используется для шифрования паролей, которые указаны на серверах (для доступа к веб-сайтам). Если ключ изменится, сохраненный пароль будет недействителен!', 'password_encrypt_key_note' => 'Этот ключ используется для шифрования
паролей, которые указаны на серверах (для
доступа к веб-сайтам). Если ключ изменится,
сохраненный пароль будет недействителен!',
'proxy' => 'Использовать прокси', 'proxy' => 'Использовать прокси',
'proxy_url' => 'Адрес прокси', 'proxy_url' => 'Адрес прокси',
'proxy_user' => 'Имя пользователя прокси', 'proxy_user' => 'Имя пользователя прокси',
@ -252,30 +301,55 @@ $sm_lang = array(
'sms_gateway_password' => 'Пароль', 'sms_gateway_password' => 'Пароль',
'sms_from' => 'Номер отправителя', 'sms_from' => 'Номер отправителя',
'pushover_status' => 'Разрешить отправку Pushover сообщений', 'pushover_status' => 'Разрешить отправку Pushover сообщений',
'pushover_description' => 'Pushover - это сервис, который позволяет легко получать уведомления в режиме реального времени. Больше информации на <a href="https://pushover.net/">их веб-сайте</a>.', 'pushover_description' => 'Pushover - это сервис, который позволяет легко
получать уведомления в режиме реального
времени. Больше информации на <a
href="https://pushover.net/" target="_blank">их веб-сайте</a>.',
'pushover_clone_app' => 'Нажмите здесь чтобы создать ваш Pushover app', 'pushover_clone_app' => 'Нажмите здесь чтобы создать ваш Pushover app',
'pushover_api_token' => 'Pushover App API Token', 'pushover_api_token' => 'Pushover App API Token',
'pushover_api_token_description' => 'Прежде чем вы сможете начать пользоваться Pushover, вам необходимо зарегистрировать <a href="%1$s" target="_blank" rel="noopener">"App"</a> на их веб-сайте и ввести "App API Token" сюда.', 'pushover_api_token_description' => 'Прежде чем вы сможете начать
пользоваться Pushover, вам необходимо
зарегистрировать <a href="%1$s" target="_blank"
rel="noopener">"App"</a> на их веб-сайте и ввести "App
API Token" сюда.',
'telegram_status' => 'Разрешить отправку уведомлений в Telegram', 'telegram_status' => 'Разрешить отправку уведомлений в Telegram',
'telegram_description' => '<a href="https://telegram.org/">Telegram</a> удобный мессенджер для получения уведомлений в реальном времени. Посетите <a href="http://docs.phpservermonitor.org/">раздел документации</a> для получения доп. информации и инструкций по установке.', '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 Token', 'telegram_api_token' => 'Telegram API Token',
'telegram_api_token_description' => 'Прежде чем вы сможете начать пользоваться Telegram, вам необходимо получить API Token. Посетите <a href="http://docs.phpservermonitor.org/">раздел документации</a> для получения помощи.', 'telegram_api_token_description' => 'Прежде чем вы сможете начать
пользоваться Telegram, вам необходимо
получить API Token. Посетите <a
href="http://docs.phpservermonitor.org/" target="_blank">раздел
документации</a> для получения помощи.',
'alert_type' => 'Тип уведомлений', 'alert_type' => 'Тип уведомлений',
'alert_type_description' => '<b>Изменение статуса:</b> '. 'alert_type_description' => '<b>Изменение статуса:</b> Вы получите
'Вы получите уведомление об изменение статуса. Для онлайн -> оффлайн или офлайн -> онлайн.<br>'. уведомление об изменение статуса. Для
'<br /><b>Оффлайн:</b> '. онлайн -> оффлайн или офлайн -> онлайн.<br><br
'Вы получите уведомление только когда сервер перейдет в статус оффлайн. Например, '. /><b>Оффлайн:</b> Вы получите уведомление
'задание Cron выставлено на каждые 15 минут. Сервер перейдет в статус оффлайн в 1:00 и не измениться до 6:00. '. только когда сервер перейдет в статус
'Вы получите 1 уведомление только в 1:00<br>'. оффлайн. Например, задание Cron выставлено на
'<br><b>Всегда:</b> '. каждые 15 минут. Сервер перейдет в статус
'Вы будете получать уведомление при каждом запуске скрипта проверки, как только сервер перейдет в статус оффлайн, даже если сервер находится в этом статусе несколько часов.', оффлайн в 1:00 и не измениться до 6:00. Вы
получите 1 уведомление только в
1:00<br><br><b>Всегда:</b> Вы будете получать
уведомление при каждом запуске скрипта
проверки, как только сервер перейдет в
статус оффлайн, даже если сервер находится в
этом статусе несколько часов.',
'alert_type_status' => 'Изменение статуса', 'alert_type_status' => 'Изменение статуса',
'alert_type_offline' => 'Оффлайн', 'alert_type_offline' => 'Оффлайн',
'alert_type_always' => 'Всегда', 'alert_type_always' => 'Всегда',
'alert_proxy' => 'Даже если включено, прокси никогда не используется для сервисов', 'alert_proxy' => 'Даже если включено, прокси никогда не
используется для сервисов',
'alert_proxy_url' => 'Формат: адрес:порт', 'alert_proxy_url' => 'Формат: адрес:порт',
'log_status' => 'Лог статусов', 'log_status' => 'Лог статусов',
'log_status_description' => 'Если лог статусов включен, монитор будет логировать все события выбранные в типе уведомлений.', 'log_status_description' => 'Если лог статусов включен, монитор будет
логировать все события выбранные в типе
уведомлений.',
'log_email' => 'Логировать уведомления отправленые по E-mail', 'log_email' => 'Логировать уведомления отправленые по E-mail',
'log_sms' => 'Логировать уведомления отправленые по SMS', 'log_sms' => 'Логировать уведомления отправленые по SMS',
'log_pushover' => 'Логировать Pushover уведомления', 'log_pushover' => 'Логировать Pushover уведомления',
@ -293,17 +367,21 @@ $sm_lang = array(
'settings_log' => 'Настройка логирования', 'settings_log' => 'Настройка логирования',
'settings_proxy' => 'Настройка прокси', 'settings_proxy' => 'Настройка прокси',
'auto_refresh' => 'Авто-обновление', 'auto_refresh' => 'Авто-обновление',
'auto_refresh_description' => 'auto_refresh_description' => 'Авто-обновление страницы статуса
'Авто-обновление страницы статуса серверов.<br>'. серверов.<br><span class="small">Время в секундах.
'<span class="small">'. Если указано 0, то страница не будет
'Время в секундах. Если указано 0, то страница не будет обновляться.'. обновляться.</span>',
'</span>',
'seconds' => 'секунд', 'seconds' => 'секунд',
'test' => 'Проверка', 'test' => 'Проверка',
'test_email' => 'Сообщение будет отправлено на адрес указаный в профиле пользователя.', 'test_email' => 'Сообщение будет отправлено на адрес указаный в
'test_sms' => 'SMS будет отправлено на номер телефона указаный в профиле пользователя.', профиле пользователя.',
'test_pushover' => 'Pushover уведомление будет отправленно на устройство указанное в профиле пользователя.', 'test_sms' => 'SMS будет отправлено на номер телефона указаный в
'test_telegram' => 'Уведомление Telegram будет отправлено на идентификатор чата, указанный в профиле пользователя.', профиле пользователя.',
'test_pushover' => 'Pushover уведомление будет отправленно на
устройство указанное в профиле пользователя.',
'test_telegram' => 'Уведомление Telegram будет отправлено на
идентификатор чата, указанный в профиле
пользователя.',
'send' => 'Отправить', 'send' => 'Отправить',
'test_subject' => 'Проверка', 'test_subject' => 'Проверка',
'test_message' => 'Тестовое сообщение', 'test_message' => 'Тестовое сообщение',
@ -311,33 +389,57 @@ $sm_lang = array(
'email_error' => 'Ошибка отправки email', 'email_error' => 'Ошибка отправки email',
'sms_sent' => 'SMS отправлено', 'sms_sent' => 'SMS отправлено',
'sms_error' => 'При отправке SMS произошла ошибка: %s', 'sms_error' => 'При отправке SMS произошла ошибка: %s',
'sms_error_nomobile' => 'Не удалось отправить тестовое SMS: действительный номер телефона не найден в вашем профиле.', 'sms_error_nomobile' => 'Не удалось отправить тестовое SMS:
действительный номер телефона не найден в
вашем профиле.',
'pushover_sent' => 'Pushover уведомление отправлено', 'pushover_sent' => 'Pushover уведомление отправлено',
'pushover_error' => 'Произошла ошибка во время отправки Pushover уведомления: %s', 'pushover_error' => 'Произошла ошибка во время отправки Pushover
'pushover_error_noapp' => 'Не удалось отправить тестовое уведомление: Pushover "App API token" не найден в основных настройках.', уведомления: %s',
'pushover_error_nokey' => 'Не удалось отправить тестовое уведомление: Pushover ключ не найден в вашем профиле.', 'pushover_error_noapp' => 'Не удалось отправить тестовое уведомление:
Pushover "App API token" не найден в основных
настройках.',
'pushover_error_nokey' => 'Не удалось отправить тестовое уведомление:
Pushover ключ не найден в вашем профиле.',
'telegram_sent' => 'Уведомление в Telegram отправлено', 'telegram_sent' => 'Уведомление в Telegram отправлено',
'telegram_error' => 'Произошла ошибка при отправке уведомления в Telegram: %s', 'telegram_error' => 'Произошла ошибка при отправке уведомления в
'telegram_error_notoken' => 'Не удалось отправить тестовое уведомление: Telegram API token не найден в основных настройках.', Telegram: %s',
'telegram_error_noid' => 'Не удалось отправить тестовое уведомление: идентификатор чата не найден в вашем профиле.', 'telegram_error_notoken' => 'Не удалось отправить тестовое уведомление:
Telegram API token не найден в основных настройках.',
'telegram_error_noid' => 'Не удалось отправить тестовое уведомление:
идентификатор чата не найден в вашем профиле.',
'log_retention_period' => 'Период хранения логов', 'log_retention_period' => 'Период хранения логов',
'log_retention_period_description' => 'Количество дней хранения логов уведомлений и архива аптайма серверов. Введите 0 для выключения очистки логов.', 'log_retention_period_description' => 'Количество дней хранения логов
уведомлений и архива аптайма серверов.
Введите 0 для выключения очистки логов.',
'log_retention_days' => 'дней', '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%.
Ошибка=%ERROR%',
'off_email_subject' => 'ВАЖНО: сервер \'%LABEL%\' сейчас НЕДОСТУПЕН', 'off_email_subject' => 'ВАЖНО: сервер \'%LABEL%\' сейчас НЕДОСТУПЕН',
'off_email_body' => "Невозможно подключиться к следующему серверу:<br><br>Сервер: %LABEL%<br>IP: %IP%<br>Порт: %PORT%<br>Ошибка: %ERROR%<br>Дата: %DATE%", 'off_email_body' => 'Невозможно подключиться к следующему
серверу:<br><br>Сервер: %LABEL%<br>IP: %IP%<br>Порт:
%PORT%<br>Ошибка: %ERROR%<br>Дата: %DATE%',
'off_pushover_title' => 'Cервер \'%LABEL%\' сейчас НЕДОСТУПЕН', 'off_pushover_title' => 'Cервер \'%LABEL%\' сейчас НЕДОСТУПЕН',
'off_pushover_message' => "Невозможно подключиться к следующему серверу:<br><br>Сервер: %LABEL%<br>IP: %IP%<br>Порт: %PORT%<br>Ошибка: %ERROR%<br>Дата: %DATE%", 'off_pushover_message' => 'Невозможно подключиться к следующему
'off_telegram_message' => "Невозможно подключиться к следующему серверу:<br><br>Сервер: %LABEL%<br>IP: %IP%<br>Порт: %PORT%<br>Ошибка: %ERROR%<br>Дата: %DATE%", серверу:<br><br>Сервер: %LABEL%<br>IP: %IP%<br>Порт:
'on_sms' => 'Сервер \'%LABEL%\' снова ДОСТУПЕН: IP=%IP%, Порт=%PORT%. Был недоступен: %LAST_OFFLINE_DURATION%', %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_subject' => 'ВАЖНО: Сервер \'%LABEL%\' сейчас ДОСТУПЕН',
'on_email_body' => "Сервер '%LABEL%' снова доступен.<br>Был недоступен: %LAST_OFFLINE_DURATION%<br><br>Сервер: %LABEL%<br>IP: %IP%<br>Порт: %PORT%<br>Дата: %DATE%", 'on_email_body' => 'Сервер \'%LABEL%\' снова доступен.<br>Был недоступен:
%LAST_OFFLINE_DURATION%<br><br>Сервер: %LABEL%<br>IP: %IP%<br>Порт:
%PORT%<br>Дата: %DATE%',
'on_pushover_title' => 'Сервер \'%LABEL%\' сейчас ДОСТУПЕН', 'on_pushover_title' => 'Сервер \'%LABEL%\' сейчас ДОСТУПЕН',
'on_pushover_message' => 'Сервер \'%LABEL%\' снова доступен.<br>Был недоступен: %LAST_OFFLINE_DURATION%<br><br>Сервер: %LABEL%<br>IP: %IP%<br>Порт: %PORT%<br>Дата: %DATE%', 'on_pushover_message' => 'Сервер \'%LABEL%\' снова доступен.<br>Был
'on_telegram_message' => 'Сервер \'%LABEL%\' снова доступен.<br>Был недоступен: %LAST_OFFLINE_DURATION%<br><br>Сервер: %LABEL%<br>IP: %IP%<br>Порт: %PORT%<br>Дата: %DATE%', недоступен: %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( 'login' => array(
'welcome_usermenu' => 'Здравствуйте, %user_name%', 'welcome_usermenu' => 'Здравствуйте, %user_name%',
@ -354,13 +456,17 @@ $sm_lang = array(
'password_forgot' => 'Забыли пароль?', 'password_forgot' => 'Забыли пароль?',
'password_reset' => 'Сбросить пароль', 'password_reset' => 'Сбросить пароль',
'password_reset_email_subject' => 'Сброс пароля для PHP Server Monitor', 'password_reset_email_subject' => 'Сброс пароля для PHP Server Monitor',
'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' => 'Вам был отправлен email, с инструкциями по сбросу пароля.', 'success_password_forgot' => 'Вам был отправлен email, с инструкциями по
'success_password_reset' => 'Ваш пароль был сброшен. Пожалуйста авторизуйтесь.', сбросу пароля.',
'success_password_reset' => 'Ваш пароль был сброшен. Пожалуйста
авторизуйтесь.',
), ),
'error' => array( 'error' => array(
'401_unauthorized' => 'Доступ закрыт', '401_unauthorized' => 'Доступ закрыт',

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,7 +28,12 @@
$sm_lang = array( $sm_lang = array(
'name' => 'Slovensky - Slovak', 'name' => 'Slovensky - Slovak',
'locale' => array('sk_SK.UTF-8', 'sk_SK', 'slovak', 'slovak'), 'locale' => array(
'0' => 'sk_SK.UTF-8',
'1' => 'sk_SK',
'2' => 'slovak',
'3' => 'slovak',
),
'locale_tag' => 'sk', 'locale_tag' => 'sk',
'locale_dir' => 'ltr', 'locale_dir' => 'ltr',
'system' => array( 'system' => array(
@ -43,12 +49,13 @@ $sm_lang = array(
'no' => 'Nie', 'no' => 'Nie',
'insert' => 'Vložiť', 'insert' => 'Vložiť',
'add_new' => 'Pridať', 'add_new' => 'Pridať',
'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>.', '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>.',
'back_to_top' => 'Späť na začiatok', 'back_to_top' => 'Späť na začiatok',
'go_back' => 'Späť', 'go_back' => 'Späť',
'ok' => 'OK', 'ok' => 'OK',
'cancel' => 'Zrušiť', 'cancel' => 'Zrušiť',
// date/time format according the strftime php function format parameter http://php.net/manual/function.strftime.php
'short_day_format' => '%B %e', 'short_day_format' => '%B %e',
'long_day_format' => '%B %e, %Y', 'long_day_format' => '%B %e, %Y',
'yesterday_format' => 'Včera v %k:%M', 'yesterday_format' => 'Včera v %k:%M',
@ -80,14 +87,18 @@ $sm_lang = array(
'level' => 'Oprávnenie', 'level' => 'Oprávnenie',
'level_10' => 'Administrátor', 'level_10' => 'Administrátor',
'level_20' => 'Užívateľ', 'level_20' => 'Užívateľ',
'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é.', 'level_description' => '<b>Administrátor</b> plný prístup: môže spravovať servery, užívateľov a
upraviť globálnu konfiguráciu.<br><b>Uživatel</b> práva len na čítanie a
spustiť aktualizáciu serverov, ktoré priradené.',
'mobile' => 'Mobil', 'mobile' => 'Mobil',
'email' => 'E-mail', 'email' => 'E-mail',
'pushover' => 'Pushover', 'pushover' => 'Pushover',
'pushover_description' => 'Pushover je služba umožňujúca jednoducho zasielať real-time upozornenia. Viac na <a href="https://pushover.net/">webe Pushover</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>',
'pushover_key' => 'Pushover Token', 'pushover_key' => 'Pushover Token',
'pushover_device' => 'Pushover Zariadenie', 'pushover_device' => 'Pushover Zariadenie',
'pushover_device_description' => 'Název zariadenia, na ktoré má byť správa odoslaná. Ponechajte prázdne pre odoslanie na všetky zariadenia.', 'pushover_device_description' => 'Název zariadenia, na ktoré byť správa odoslaná. Ponechajte prázdne
pre odoslanie na všetky zariadenia.',
'delete_title' => 'Zmazať užívateľa', 'delete_title' => 'Zmazať užívateľa',
'delete_message' => 'Naozaj zmazať užívateľa \'%1\'?', 'delete_message' => 'Naozaj zmazať užívateľa \'%1\'?',
'deleted' => 'Užívateľ zmazaný.', 'deleted' => 'Užívateľ zmazaný.',
@ -96,7 +107,8 @@ $sm_lang = array(
'profile' => 'Profil', 'profile' => 'Profil',
'profile_updated' => 'Váš užívateľský profil bol upravený.', 'profile_updated' => 'Váš užívateľský profil bol upravený.',
'error_user_name_bad_length' => 'Užívateľské meno musí obsahovať 2 až 64 znakov.', 'error_user_name_bad_length' => 'Užívateľské meno musí obsahovať 2 až 64 znakov.',
'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 (_).', '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 (_).',
'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á',
@ -127,7 +139,8 @@ $sm_lang = array(
'authentication_settings' => 'Nastavenie autentizacie', 'authentication_settings' => 'Nastavenie autentizacie',
'optional' => 'voliteľný', 'optional' => 'voliteľný',
'website_username' => 'Užívateľské meno', 'website_username' => 'Užívateľské meno',
'website_username_description' => 'Užívateľské meno pre prístup na stránku. (Len Apache autorizácia je podporovaná.)', 'website_username_description' => 'Užívateľské meno pre prístup na stránku. (Len Apache autorizácia je
podporovaná.)',
'website_password' => 'Heslo', 'website_password' => 'Heslo',
'website_password_description' => 'Heslo pre prístup na stránku. Heslo je v databázi šifrované.', 'website_password_description' => 'Heslo pre prístup na stránku. Heslo je v databázi šifrované.',
'fieldset_monitoring' => 'Monitoring', 'fieldset_monitoring' => 'Monitoring',
@ -140,7 +153,8 @@ $sm_lang = array(
'type_website' => 'Web', 'type_website' => 'Web',
'type_service' => 'Služba', 'type_service' => 'Služba',
'pattern' => 'Vyhledat reťazec/vzor', 'pattern' => 'Vyhledat reťazec/vzor',
'pattern_description' => 'Pokiaľ reťazec nebude na webe nájdený, bude server označený ako offline. Regulárne výrazy sú povolené.', 'pattern_description' => 'Pokiaľ reťazec nebude na webe nájdený, bude server označený ako offline.
Regulárne výrazy povolené.',
'last_check' => 'Posledná kontrola', 'last_check' => 'Posledná kontrola',
'last_online' => 'Naposledy online', 'last_online' => 'Naposledy online',
'monitoring' => 'Monitoring', 'monitoring' => 'Monitoring',
@ -170,7 +184,6 @@ $sm_lang = array(
'warning_threshold_description' => 'Počet neúspešných pokusov pred označením serveru ako offline.', 'warning_threshold_description' => 'Počet neúspešných pokusov pred označením serveru ako offline.',
'chart_last_week' => 'Minulý týždeň', 'chart_last_week' => 'Minulý týždeň',
'chart_history' => 'História', 'chart_history' => 'História',
// 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',
@ -191,7 +204,9 @@ $sm_lang = array(
'language' => 'Jazyk', 'language' => 'Jazyk',
'show_update' => 'Kontrolovať aktualizácie?', 'show_update' => 'Kontrolovať aktualizácie?',
'password_encrypt_key' => 'Šifrovací kľúč pre heslá', 'password_encrypt_key' => 'Šifrovací kľúč pre heslá',
'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é!', '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é!',
'email_status' => 'Povoliť odosielanie e-mailu', 'email_status' => 'Povoliť odosielanie e-mailu',
'email_from_email' => 'E-mailová adresa odosielateľa', 'email_from_email' => 'E-mailová adresa odosielateľa',
'email_from_name' => 'Jméno odosielateľa', 'email_from_name' => 'Jméno odosielateľa',
@ -209,24 +224,26 @@ $sm_lang = array(
'sms_gateway_password' => 'Heslo brány', 'sms_gateway_password' => 'Heslo brány',
'sms_from' => 'Telefónne číslo odosielateľa', 'sms_from' => 'Telefónne číslo odosielateľa',
'pushover_status' => 'Povoliť zasielanie Pushover správ', 'pushover_status' => 'Povoliť zasielanie Pushover správ',
'pushover_description' => 'Pushover je služba umožňujúca jednoducho zasielať real-time upozornenia. Viac na <a href="https://pushover.net/">webe Pushover</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>',
'pushover_clone_app' => 'Kliknite pre vytvorenie Pushover aplikácie', 'pushover_clone_app' => 'Kliknite pre vytvorenie Pushover aplikácie',
'pushover_api_token' => 'Pushover App API Token', 'pushover_api_token' => 'Pushover App API Token',
'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.', '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.',
'alert_type' => 'Zvoľte kedy si prajete byť upozornení.', 'alert_type' => 'Zvoľte kedy si prajete byť upozornení.',
'alert_type_description' => '<b>Zmena stavu:</b> '. 'alert_type_description' => '<b>Zmena stavu:</b> Obdržíte upozornenie pri zmene stavu, teda: online ->
'Obdržíte upozornenie pri zmene stavu, teda: online -> offline alebo offline -> online.<br>'. offline alebo offline -> online.<br><br /><b>Offline:</b> Obdržíte upozornenie,
'<br /><b>Offline:</b> '. keď server prejde *PO PRVÝ KRÁT* do offline stavu. Napríklad, pokiaľ je cron
'Obdržíte upozornenie, keď server prejde *PO PRVÝ KRÁT* do offline stavu. Napríklad, '. nastavený na 15 minút a sledovaný server bude offline mezi 01:00 a 06:00, tak
'pokiaľ je cron nastavený na 15 minút a sledovaný server bude offline mezi 01:00 a 06:00, '. obdržíte upozornenie iba o 01:00.<br><br><b>Vždy:</b> Obdržíte upozornenie
'tak obdržíte upozornenie iba o 01:00.<br>'. pri každom spustení kontroly, teda aj pokiaľ bude server offline niekoľko
'<br><b>Vždy:</b> '. hodín.',
'Obdržíte upozornenie pri každom spustení kontroly, teda aj pokiaľ bude server offline niekoľko hodín.',
'alert_type_status' => 'Zmena stavu', 'alert_type_status' => 'Zmena stavu',
'alert_type_offline' => 'Offline', 'alert_type_offline' => 'Offline',
'alert_type_always' => 'Vždy', 'alert_type_always' => 'Vždy',
'log_status' => 'Log', 'log_status' => 'Log',
'log_status_description' => 'Pokiaľ je Log nastavený na hodnotu TRUE, systém do neho zapíše všetky upozornenia.', 'log_status_description' => 'Pokiaľ je Log nastavený na hodnotu TRUE, systém do neho zapíše všetky
upozornenia.',
'log_email' => 'Logovať odoslané e-maily', 'log_email' => 'Logovať odoslané e-maily',
'log_sms' => 'Logovať odoslané textové správy', 'log_sms' => 'Logovať odoslané textové správy',
'log_pushover' => 'Logovať odoslané Pushover správy', 'log_pushover' => 'Logovať odoslané Pushover správy',
@ -240,16 +257,14 @@ $sm_lang = array(
'settings_notification' => 'Nastavenie upozornení', 'settings_notification' => 'Nastavenie upozornení',
'settings_log' => 'Nastavenie logu', 'settings_log' => 'Nastavenie logu',
'auto_refresh' => 'Automaticky obnoviť', 'auto_refresh' => 'Automaticky obnoviť',
'auto_refresh_description' => 'auto_refresh_description' => 'Automaticky obnoviť stránku Servery.<br><span class="small">Čas v
'Automaticky obnoviť stránku Servery.<br>'. sekundách, 0 pre vypnutie automatického obnovenia.</span>',
'<span class="small">'.
'Čas v sekundách, 0 pre vypnutie automatického obnovenia.'.
'</span>',
'seconds' => 'sekúnd', 'seconds' => 'sekúnd',
'test' => 'Test', 'test' => 'Test',
'test_email' => 'E-mail bude odoslaný na adresu uvedenú v užívateľskom profile.', 'test_email' => 'E-mail bude odoslaný na adresu uvedenú v užívateľskom profile.',
'test_sms' => 'SMS bude odoslaná na telefónne číslo uvedené v užívateľskom profile.', 'test_sms' => 'SMS bude odoslaná na telefónne číslo uvedené v užívateľskom profile.',
'test_pushover' => 'Pushover upozornenie bude odoslané užívateľovi/zariadeniu podľa nastavení v užívateľskom profile.', 'test_pushover' => 'Pushover upozornenie bude odoslané užívateľovi/zariadeniu podľa nastavení v
užívateľskom profile.',
'send' => 'Odoslať', 'send' => 'Odoslať',
'test_subject' => 'Test', 'test_subject' => 'Test',
'test_message' => 'Testovacia správa', 'test_message' => 'Testovacia správa',
@ -257,27 +272,36 @@ $sm_lang = array(
'email_error' => 'Chyba pri odosielaní e-mailu', 'email_error' => 'Chyba pri odosielaní e-mailu',
'sms_sent' => 'SMS odoslaná', 'sms_sent' => 'SMS odoslaná',
'sms_error' => 'Chyba pri odosielaní SMS. %s', 'sms_error' => 'Chyba pri odosielaní SMS. %s',
'sms_error_nomobile' => 'Nebolo možné odoslať SMS: v užívateľskom profile nebylo nájdené platné telefónne číslo.', 'sms_error_nomobile' => 'Nebolo možné odoslať SMS: v užívateľskom profile nebylo nájdené platné
telefónne číslo.',
'pushover_sent' => 'Pushover upozornenie odoslané.', 'pushover_sent' => 'Pushover upozornenie odoslané.',
'pushover_error' => 'Nastala chyba pri odosielaní Pushover upozornenia: %s', 'pushover_error' => 'Nastala chyba pri odosielaní Pushover upozornenia: %s',
'pushover_error_noapp' => 'Nebolo možné odoslať testovacie upozornenie: v globálnom nastavení nebol nájdený žiaden API token.', 'pushover_error_noapp' => 'Nebolo možné odoslať testovacie upozornenie: v globálnom nastavení nebol
'pushover_error_nokey' => 'Nebylo možné odoslať testovacie upozornenie: ve vašom profile nie je definovaný Pushover key.', nájdený žiaden API token.',
'pushover_error_nokey' => 'Nebylo možné odoslať testovacie upozornenie: ve vašom profile nie je
definovaný Pushover key.',
'log_retention_period' => 'Rotácia logu', 'log_retention_period' => 'Rotácia logu',
'log_retention_period_description' => 'Počet dní po které budú uchované logy upozornení. Vložte 0 pre vypnutie autorotáce.', 'log_retention_period_description' => 'Počet dní po které budú uchované logy upozornení. Vložte 0 pre
vypnutie autorotáce.',
'log_retention_days' => 'dní', 'log_retention_days' => 'dní',
), ),
// for newlines in the email messages use <br>
'notifications' => array( 'notifications' => array(
'off_sms' => 'Server \'%LABEL%\' je offline: ip=%IP%, port=%PORT%. Chyba=%ERROR%', 'off_sms' => 'Server \'%LABEL%\' je offline: ip=%IP%, port=%PORT%. Chyba=%ERROR%',
'off_email_subject' => 'DÔLEŽITÉ: Server \'%LABEL%\' je offline', 'off_email_subject' => 'DÔLEŽITÉ: Server \'%LABEL%\' je offline',
'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%', '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%',
'off_pushover_title' => 'Server \'%LABEL%\' je offline', 'off_pushover_title' => 'Server \'%LABEL%\' je offline',
'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%', '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%',
'on_sms' => 'Server \'%LABEL%\' je online: ip=%IP%, port=%PORT%, it was down for %LAST_OFFLINE_DURATION%', 'on_sms' => 'Server \'%LABEL%\' je online: ip=%IP%, port=%PORT%, it was down for %LAST_OFFLINE_DURATION%',
'on_email_subject' => 'DÔLEŽITÉ: Server \'%LABEL%\' je online', 'on_email_subject' => 'DÔLEŽITÉ: Server \'%LABEL%\' je online',
'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%", '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%',
'on_pushover_title' => 'Server \'%LABEL%\' je online', 'on_pushover_title' => 'Server \'%LABEL%\' je online',
'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%', '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%',
), ),
'login' => array( 'login' => array(
'welcome_usermenu' => 'Vitajte, %user_name%', 'welcome_usermenu' => 'Vitajte, %user_name%',
@ -294,7 +318,8 @@ $sm_lang = array(
'password_forgot' => 'Zabudnuté heslo?', 'password_forgot' => 'Zabudnuté heslo?',
'password_reset' => 'Obnoviť heslo', 'password_reset' => 'Obnoviť heslo',
'password_reset_email_subject' => 'Obnoviť heslo pre PHP Server Monitor', '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%', '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_user_incorrect' => 'Zadané užívateľské meno nebolo nájdené.',
'error_login_incorrect' => 'Prihlásenie nebolo úspešné.', 'error_login_incorrect' => 'Prihlásenie nebolo úspešné.',
'error_login_passwords_nomatch' => 'Zadané heslá sa nezhodujú.', 'error_login_passwords_nomatch' => 'Zadané heslá sa nezhodujú.',

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,7 +28,12 @@
$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(
'0' => 'sl_SI.UTF-8',
'1' => 'sl_SI',
'2' => 'slovenščina',
'3' => 'slovenščina',
),
'system' => array( 'system' => array(
'title' => 'Server Monitor', 'title' => 'Server Monitor',
'install' => 'Install', 'install' => 'Install',
@ -41,12 +47,13 @@ $sm_lang = array(
'no' => 'ne', 'no' => 'ne',
'insert' => 'Vstavi', 'insert' => 'Vstavi',
'add_new' => 'Dodaj novega', 'add_new' => 'Dodaj novega',
'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>.', '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>.',
'back_to_top' => 'Nazaj na vrh', 'back_to_top' => 'Nazaj na vrh',
'go_back' => 'Nazaj', 'go_back' => 'Nazaj',
'ok' => 'OK', 'ok' => 'OK',
'cancel' => 'Prekini', 'cancel' => 'Prekini',
// date/time format according the strftime php function format parameter http://php.net/manual/function.strftime.php
'short_day_format' => '%B %e', 'short_day_format' => '%B %e',
'long_day_format' => '%B %e, %Y', 'long_day_format' => '%B %e, %Y',
'yesterday_format' => 'včeraj ob %k:%M', 'yesterday_format' => 'včeraj ob %k:%M',
@ -78,14 +85,19 @@ $sm_lang = array(
'level' => 'Nivo dostopa', 'level' => 'Nivo dostopa',
'level_10' => 'Administrator', 'level_10' => 'Administrator',
'level_20' => 'Uporabnik', 'level_20' => 'Uporabnik',
'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.', '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.',
'mobile' => 'Mobilni telefon', 'mobile' => 'Mobilni telefon',
'email' => 'E-pošta', 'email' => 'E-pošta',
'pushover' => 'Pushover', 'pushover' => 'Pushover',
'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>.', 'pushover_description' => 'Pushover je storitev, ki omogoča enostavno prejemanje obvestil v realnem času.
Več informacij je na voljo <a href="https://pushover.net/" target="_blank">na njihovi spletni
strani</a>.',
'pushover_key' => 'Pushover ključ', 'pushover_key' => 'Pushover ključ',
'pushover_device' => 'Pushover naprava', 'pushover_device' => 'Pushover naprava',
'pushover_device_description' => 'Ime naprave na katero naj se pošlje obvestilo. Če želite obvestilo poslati na vse naprave, pustite prazno.', 'pushover_device_description' => 'Ime naprave na katero naj se pošlje obvestilo. Če želite obvestilo
poslati na vse naprave, pustite prazno.',
'delete_title' => 'Izbriši uporabnika', 'delete_title' => 'Izbriši uporabnika',
'delete_message' => 'Ste prepričani, da želite izbrisati uporabnika \'%1\'?', 'delete_message' => 'Ste prepričani, da želite izbrisati uporabnika \'%1\'?',
'deleted' => 'Uporabnik izbrisan.', 'deleted' => 'Uporabnik izbrisan.',
@ -94,7 +106,8 @@ $sm_lang = array(
'profile' => 'Profil', 'profile' => 'Profil',
'profile_updated' => 'Vaš profil je bil posodobljen.', 'profile_updated' => 'Vaš profil je bil posodobljen.',
'error_user_name_bad_length' => 'Uporabniško ime mora biti dolgo med 2 in 64 znakov.', 'error_user_name_bad_length' => 'Uporabniško ime mora biti dolgo med 2 in 64 znakov.',
'error_user_name_invalid' => 'Uporabniško ime lahko vsebuje samo črke (a-z, A-Z), številke (0-9), pike (.) in podčrtaje (_).', 'error_user_name_invalid' => 'Uporabniško ime lahko vsebuje samo črke (a-z, A-Z), številke (0-9), pike (.)
in podčrtaje (_).',
'error_user_name_exists' => 'Uporabniško ime v bazi podatkov že obstaja.', 'error_user_name_exists' => 'Uporabniško ime v bazi podatkov že obstaja.',
'error_user_email_bad_length' => 'E-naslov mora biti med 5 in 255 znaki.', 'error_user_email_bad_length' => 'E-naslov mora biti med 5 in 255 znaki.',
'error_user_email_invalid' => 'E-naslov ni veljaven.', 'error_user_email_invalid' => 'E-naslov ni veljaven.',
@ -127,7 +140,8 @@ $sm_lang = array(
'type_website' => 'Spletna stran (website)', 'type_website' => 'Spletna stran (website)',
'type_service' => 'Storitev (service)', 'type_service' => 'Storitev (service)',
'pattern' => 'Iskani niz oz. vzorec', '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.', 'pattern_description' => 'Če ta vzorec ne bo najden na spletni strani, bo strežnik označen kot nedelujoč.
Dovoljeni so regularni izrazi.',
'last_check' => 'Zadnje preverjanje', 'last_check' => 'Zadnje preverjanje',
'last_online' => 'Nazadnje dostopen', 'last_online' => 'Nazadnje dostopen',
'monitoring' => 'Spremljanje', 'monitoring' => 'Spremljanje',
@ -154,10 +168,10 @@ $sm_lang = array(
'day' => 'dan', 'day' => 'dan',
'hour' => 'ura', 'hour' => 'ura',
'warning_threshold' => 'Prag za opozorilo', 'warning_threshold' => 'Prag za opozorilo',
'warning_threshold_description' => 'Število neuspešnih preverjanj preden je strežnik označen kot nedelujoč.', 'warning_threshold_description' => 'Število neuspešnih preverjanj preden je strežnik označen kot
nedelujoč.',
'chart_last_week' => 'prejšnji teden', 'chart_last_week' => 'prejšnji teden',
'chart_history' => 'Zgodovina', 'chart_history' => 'Zgodovina',
// Charts date format according jqPlot date format http://www.jqplot.com/docs/files/plugins/jqplot-dateAxisRenderer-js.html
'chart_day_format' => '%m. %d. %Y', 'chart_day_format' => '%m. %d. %Y',
'chart_long_date_format' => '%m. %d. %Y %H:%M:%S', 'chart_long_date_format' => '%m. %d. %Y %H:%M:%S',
'chart_short_date_format' => '%m/%d %H:%M', 'chart_short_date_format' => '%m/%d %H:%M',
@ -194,24 +208,29 @@ $sm_lang = array(
'sms_gateway_password' => 'Geslo SMS prehoda', 'sms_gateway_password' => 'Geslo SMS prehoda',
'sms_from' => 'Telefonska številka pošiljatelja', 'sms_from' => 'Telefonska številka pošiljatelja',
'pushover_status' => 'Dovolim pošiljanje Pushover sporočil', 'pushover_status' => 'Dovolim pošiljanje Pushover sporočil',
'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>.', 'pushover_description' => 'Pushover je storitev, ki omogoča enostavno prejemanje obvestil v realnem času.
Več informacij je na voljo <a href="https://pushover.net/" target="_blank">na njihovi spletni
strani</a>.',
'pushover_clone_app' => 'Kliknite za ustvarjanje vaše Pushover aplikacije', 'pushover_clone_app' => 'Kliknite za ustvarjanje vaše Pushover aplikacije',
'pushover_api_token' => 'Pushover API žeton', 'pushover_api_token' => 'Pushover API žeton',
'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.', '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.',
'alert_type' => 'Izberite kdaj naj se vam pošljejo obvestila.', 'alert_type' => 'Izberite kdaj naj se vam pošljejo obvestila.',
'alert_type_description' => '<b>Sprememba statusa:</b> '. 'alert_type_description' => '<b>Sprememba statusa:</b> Obvestilo boste dobili ob vsaki spremembi statusa,
'Obvestilo boste dobili ob vsaki spremembi statusa, torej iz delujoč -> nedelujoč ter nedelujoč -> delujoč.<br>'. torej iz delujoč -> nedelujoč ter nedelujoč -> delujoč.<br><br
'<br /><b>Nedelujoč:</b> '. /><b>Nedelujoč:</b> Obvestilo boste dobili samo, ko se bo strežnik PRVIKRAT
'Obvestilo boste dobili samo, ko se bo strežnik PRVIKRAT prenehal odzivati. Na primer:'. prenehal odzivati. Na primer:nastavljeno imate preverjanje strežnikov vsakih 15
'nastavljeno imate preverjanje strežnikov vsakih 15 minut. Strežnik preneha delovati ob 13h in ostane nedelujoč do 18h. '. minut. Strežnik preneha delovati ob 13h in ostane nedelujoč do 18h. Dobili
'Dobili boste obvestilo samo ob 13h.<br>'. boste obvestilo samo ob 13h.<br><br><b>Vedno:</b> Obvestilo boste dobili vedno,
'<br><b>Vedno:</b> '. ko se izvede skripta za preverjanje in strežnik ne deluje, pa čeprav bo
'Obvestilo boste dobili vedno, ko se izvede skripta za preverjanje in strežnik ne deluje, pa čeprav bo strežnik nedelujoč več ur.', strežnik nedelujoč več ur.',
'alert_type_status' => 'Sprememba statusa', 'alert_type_status' => 'Sprememba statusa',
'alert_type_offline' => 'Nedelujoč', 'alert_type_offline' => 'Nedelujoč',
'alert_type_always' => 'Vedno', 'alert_type_always' => 'Vedno',
'log_status' => 'Beleženje statusa', 'log_status' => 'Beleženje statusa',
'log_status_description' => 'Če je beleženje statusa vključeno, se bodo beležili vsi dogodki povezani s pošiljanjem obvestil.', 'log_status_description' => 'Če je beleženje statusa vključeno, se bodo beležili vsi dogodki povezani s
pošiljanjem obvestil.',
'log_email' => 'Beleži e-pošto, ki jo pošilja aplikacija', 'log_email' => 'Beleži e-pošto, ki jo pošilja aplikacija',
'log_sms' => 'Beleži SMS sporočila, ki jih pošilja aplikacija', 'log_sms' => 'Beleži SMS sporočila, ki jih pošilja aplikacija',
'log_pushover' => 'Beleži Pushover sporočila, ki jih pošilja aplikacija', 'log_pushover' => 'Beleži Pushover sporočila, ki jih pošilja aplikacija',
@ -225,16 +244,15 @@ $sm_lang = array(
'settings_notification' => 'Nastavitve obvestil', 'settings_notification' => 'Nastavitve obvestil',
'settings_log' => 'Hramba dnevniških zapisov', 'settings_log' => 'Hramba dnevniških zapisov',
'auto_refresh' => 'Samodejno posodabljanje', 'auto_refresh' => 'Samodejno posodabljanje',
'auto_refresh_description' => 'auto_refresh_description' => 'Samodejno posodabljanje pregleda statusa strežnikov.<br><span
'Samodejno posodabljanje pregleda statusa strežnikov.<br>'. class="small">Čas v sekundah. Če je vrednost 0 se stran ne bo samodejno
'<span class="small">'. posodabljala.</span>',
'Čas v sekundah. Če je vrednost 0 se stran ne bo samodejno posodabljala.'.
'</span>',
'seconds' => 'sekund', 'seconds' => 'sekund',
'test' => 'Test', 'test' => 'Test',
'test_email' => 'Na naslov, ki ste ga določili v vašem profilu, bo poslano e-sporočilo.', 'test_email' => 'Na naslov, ki ste ga določili v vašem profilu, bo poslano e-sporočilo.',
'test_sms' => 'Na telefonsko številko, ki ste jo določili v vašem profilu, bo poslan SMS.', '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 sporočilo.', 'test_pushover' => 'Na uporabniški ključ/napravo, ki ste ju določili v vašem profilu, bo poslano Pushover
sporočilo.',
'send' => 'Pošlji', 'send' => 'Pošlji',
'test_subject' => 'Test', 'test_subject' => 'Test',
'test_message' => 'Testno sporočilo', 'test_message' => 'Testno sporočilo',
@ -242,27 +260,36 @@ $sm_lang = array(
'email_error' => 'Napaka pri pošiljanju e-pošte', 'email_error' => 'Napaka pri pošiljanju e-pošte',
'sms_sent' => 'SMS sporočilo poslano', 'sms_sent' => 'SMS sporočilo poslano',
'sms_error' => 'Napaka pri pošiljanju SMS sporočila. %s', 'sms_error' => 'Napaka pri pošiljanju SMS sporočila. %s',
'sms_error_nomobile' => 'Ni mogoče poslati testnega SMS sporočila: v vašem profilu ni vpisana veljavna telefonska številka.', 'sms_error_nomobile' => 'Ni mogoče poslati testnega SMS sporočila: v vašem profilu ni vpisana veljavna
telefonska številka.',
'pushover_sent' => 'Pushover obvestilo poslano', 'pushover_sent' => 'Pushover obvestilo poslano',
'pushover_error' => 'Napaka pri pošiljanju Pushover sporočila: %s', '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 Pushover API žetona.', 'pushover_error_noapp' => 'Ni mogoče poslati testnega sporočila: med globalnimi nastavitvami ne najdem
'pushover_error_nokey' => 'Ni mogoče poslati testnega sporočila: med vašimi nastavitvami ne najdem Pushover ključa.', Pushover API žetona.',
'pushover_error_nokey' => 'Ni mogoče poslati testnega sporočila: med vašimi nastavitvami ne najdem Pushover
ključa.',
'log_retention_period' => 'Čas hrambe podatov', 'log_retention_period' => 'Čas hrambe podatov',
'log_retention_period_description' => 'Število dni, ko naj se hranijo podatki o obvestilih in statusu strežnikov. Če želite podatke hraniti trajno, vnesite 0.', 'log_retention_period_description' => 'Število dni, ko naj se hranijo podatki o obvestilih in statusu
strežnikov. Če želite podatke hraniti trajno, vnesite 0.',
'log_retention_days' => 'dni', 'log_retention_days' => 'dni',
), ),
// for newlines in the email messages use <br>
'notifications' => array( 'notifications' => array(
'off_sms' => 'Streznik \'%LABEL%\' NE deluje: IP=%IP%, vrata=%PORT%. Napaka=%ERROR%', 'off_sms' => 'Streznik \'%LABEL%\' NE deluje: IP=%IP%, vrata=%PORT%. Napaka=%ERROR%',
'off_email_subject' => 'POMEMBNO: Strežnik \'%LABEL%\' NE deluje', 'off_email_subject' => 'POMEMBNO: Strežnik \'%LABEL%\' NE deluje',
'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%", '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%',
'off_pushover_title' => 'Streznik \'%LABEL%\' NE deluje', 'off_pushover_title' => 'Streznik \'%LABEL%\' NE deluje',
'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%", '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%',
'on_sms' => 'Streznik \'%LABEL%\' deluje: IP=%IP%, vrata=%PORT%, it was down for %LAST_OFFLINE_DURATION%', 'on_sms' => 'Streznik \'%LABEL%\' deluje: IP=%IP%, vrata=%PORT%, it was down for %LAST_OFFLINE_DURATION%',
'on_email_subject' => 'OBVESTILO: Streznik \'%LABEL%\' ponovno deluje', 'on_email_subject' => 'OBVESTILO: Streznik \'%LABEL%\' ponovno deluje',
'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%", '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%',
'on_pushover_title' => 'Streznik \'%LABEL%\' deluje', 'on_pushover_title' => 'Streznik \'%LABEL%\' deluje',
'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%', '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%',
), ),
'login' => array( 'login' => array(
'welcome_usermenu' => 'Pozdravljeni, %user_name%', 'welcome_usermenu' => 'Pozdravljeni, %user_name%',
@ -279,7 +306,8 @@ $sm_lang = array(
'password_forgot' => 'Pozabljeno geslo?', 'password_forgot' => 'Pozabljeno geslo?',
'password_reset' => 'Ponastavitev gesla', 'password_reset' => 'Ponastavitev gesla',
'password_reset_email_subject' => 'Ponastavite svoje geslo za PHP Server Monitor', '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%', '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_user_incorrect' => 'Vpisanega uporabniškega imena ne najdem.',
'error_login_incorrect' => 'Podatki so napačni.', 'error_login_incorrect' => 'Podatki so napačni.',
'error_login_passwords_nomatch' => 'Vneseno geslo ni pravilno.', 'error_login_passwords_nomatch' => 'Vneseno geslo ni pravilno.',

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,7 +28,12 @@
$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(
'0' => 'sv_SE.UTF-8',
'1' => 'sv_SE',
'2' => 'svenska',
'3' => 'svenska-SE',
),
'locale_tag' => 'sv', 'locale_tag' => 'sv',
'locale_dir' => 'ltr', 'locale_dir' => 'ltr',
'system' => array( 'system' => array(
@ -43,12 +49,13 @@ $sm_lang = array(
'no' => 'Nej', 'no' => 'Nej',
'insert' => 'Infoga', 'insert' => 'Infoga',
'add_new' => 'Lägg till', 'add_new' => 'Lägg till',
'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>.', '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>.',
'back_to_top' => 'Gå upp', 'back_to_top' => 'Gå upp',
'go_back' => 'Gå tillbaka', 'go_back' => 'Gå tillbaka',
'ok' => 'OK', 'ok' => 'OK',
'cancel' => 'Avbryt', 'cancel' => 'Avbryt',
// date/time format according the strftime php function format parameter http://php.net/manual/function.strftime.php
'short_day_format' => '%B %e', 'short_day_format' => '%B %e',
'long_day_format' => '%B %e, %Y', 'long_day_format' => '%B %e, %Y',
'yesterday_format' => 'Igår kl %k:%M', 'yesterday_format' => 'Igår kl %k:%M',
@ -60,18 +67,6 @@ $sm_lang = array(
'a_minute_ago' => 'ungefär en minut sen', 'a_minute_ago' => 'ungefär en minut sen',
'seconds_ago' => '%d sekunder sedan', 'seconds_ago' => '%d sekunder sedan',
'a_second_ago' => 'en sekund sedan', 'a_second_ago' => 'en sekund sedan',
'year' => 'year',
'years' => 'years',
'month' => 'month',
'months' => 'months',
'day' => 'day',
'days' => 'days',
'hour' => 'hour',
'hours' => 'hours',
'minute' => 'minute',
'minutes' => 'minutes',
'second' => 'second',
'seconds' => 'seconds',
), ),
'menu' => array( 'menu' => array(
'config' => 'Inställningar', 'config' => 'Inställningar',
@ -92,14 +87,18 @@ $sm_lang = array(
'level' => 'Nivå', 'level' => 'Nivå',
'level_10' => 'Administratör', 'level_10' => 'Administratör',
'level_20' => 'Användare', 'level_20' => 'Användare',
'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.', '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.',
'mobile' => 'Mobilnummer', 'mobile' => 'Mobilnummer',
'email' => 'Email', 'email' => 'Email',
'pushover' => 'Pushover', 'pushover' => 'Pushover',
'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_description' => 'Pushover är en tjänst som skickar meddelande i realtid. Se <a
href="https://pushover.net/" target="_blank">deras webbsida</a> för mer information.',
'pushover_key' => 'Pushover Key', 'pushover_key' => 'Pushover Key',
'pushover_device' => 'Pushover Device', 'pushover_device' => 'Pushover Device',
'pushover_device_description' => 'Enhetsnman att skicka meddelande till. Lämna tomt för att skicka till alla enheter.', 'pushover_device_description' => 'Enhetsnman att skicka meddelande till. Lämna tomt för att skicka till alla
enheter.',
'delete_title' => 'Radera användare', 'delete_title' => 'Radera användare',
'delete_message' => 'Är du säker att du vill radera användare \'%1\'?', 'delete_message' => 'Är du säker att du vill radera användare \'%1\'?',
'deleted' => 'Användare raderad.', 'deleted' => 'Användare raderad.',
@ -108,7 +107,8 @@ $sm_lang = array(
'profile' => 'Profil', 'profile' => 'Profil',
'profile_updated' => 'Din profil har uppdaterats.', 'profile_updated' => 'Din profil har uppdaterats.',
'error_user_name_bad_length' => 'Användarnamn måste vara mellan 2 och 64 tecken.', 'error_user_name_bad_length' => 'Användarnamn måste vara mellan 2 och 64 tecken.',
'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_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.',
@ -141,7 +141,8 @@ $sm_lang = array(
'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 expressions" är tillåtna.', 'pattern_description' => 'Om detta mönster inte hittas i svaret kommer servern att markeras offline. "Regular
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',
@ -172,7 +173,6 @@ $sm_lang = array(
'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',
@ -209,24 +209,27 @@ $sm_lang = array(
'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 href="https://pushover.net/">deras webbsida</a> för mer info.', 'pushover_description' => 'Pushover är en tjänst som skickar meddelande i realtid. Se <a
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"
rel="noopener">registrera en App</a> deras webbsida och skriva in App
API Token här.',
'alert_type' => 'Välj när du vill bli meddelad.', 'alert_type' => 'Välj när du vill bli meddelad.',
'alert_type_description' => '<b>Statusförändring:</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 status ändras. Så från online -> offline eller offline -> online.<br>'. online -> offline eller offline -> online.<br><br /><b>Offline:</b> Du får ett
'<br /><b>Offline:</b> '. meddelande när en server går offline *FÖR FÖRSTA GÅNGEN* Exempelvis, ditt
'Du får ett meddelande när en server går offline *FÖR FÖRSTA GÅNGEN* Exempelvis, '. cronjob körs var 15 minut och din server går ned kl 1 och är nere till kl 6.
'ditt cronjob körs var 15 minut och din server går ned kl 1 och är nere till kl 6. '. Du kommer 1 meddelande kl 1 och inga mer.<br><br><b>Alltid:</b> Du kommer
'Du kommer få 1 meddelande kl 1 och inga mer.<br>'. ett meddelande varje gång kontrollen görs, även om servern har varit offline
'<br><b>Alltid:</b> '. under en längre tid.',
'Du kommer få ett meddelande varje gång kontrollen görs, även om servern har varit offline under en längre tid.',
'alert_type_status' => 'Statusförändring', 'alert_type_status' => 'Statusförändring',
'alert_type_offline' => 'Offline', 'alert_type_offline' => 'Offline',
'alert_type_always' => 'Alltid', 'alert_type_always' => 'Alltid',
'log_status' => 'Statusloggning', 'log_status' => 'Statusloggning',
'log_status_description' => 'Om statusloggning är TRUE, kommer alla händelser som triggar ett meddelande att loggas.', 'log_status_description' => 'Om statusloggning är TRUE, kommer alla händelser som triggar ett meddelande att
loggas.',
'log_email' => 'Logga email', 'log_email' => 'Logga email',
'log_sms' => 'Logga SMS', 'log_sms' => 'Logga SMS',
'log_pushover' => 'Logga Pushover-meddelande', 'log_pushover' => 'Logga Pushover-meddelande',
@ -240,11 +243,8 @@ $sm_lang = array(
'settings_notification' => 'Meddelande-inställningar', 'settings_notification' => 'Meddelande-inställningar',
'settings_log' => 'Logg-inställningar', 'settings_log' => 'Logg-inställningar',
'auto_refresh' => 'Auto-uppdatera', 'auto_refresh' => 'Auto-uppdatera',
'auto_refresh_description' => 'auto_refresh_description' => 'Auto-uppdatera status-sidan.<br><span class="small">Tid i sekunder, om "0"
'Auto-uppdatera status-sidan.<br>'. uppdateras sidan inte automatiskt.</span>',
'<span class="small">'.
'Tid i sekunder, om "0" så uppdateras sidan inte automatiskt.'.
'</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.',
@ -260,24 +260,30 @@ $sm_lang = array(
'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 inställningar.', 'pushover_error_noapp' => 'Kan inte skicka test-meddelande: Ingen Pushover App API token hittades i gemensamma
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
loggrensning är avstängd.',
'log_retention_days' => 'dagar', '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:
%PORT%<br>Fel: %ERROR%<br>Tid: %DATE%',
'off_pushover_title' => 'Server \'%LABEL%\' är NERE', 'off_pushover_title' => 'Server \'%LABEL%\' är NERE',
'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_message' => 'Kunde inte ansluta till följande server:<br><br>Server: %LABEL%<br>IP:
%IP%<br>Port: %PORT%<br>Fel: %ERROR%<br>Tid: %DATE%',
'on_sms' => 'Server \'%LABEL%\' är UPPE: ip=%IP%, port=%PORT%, it was down for %LAST_OFFLINE_DURATION%', 'on_sms' => 'Server \'%LABEL%\' är UPPE: ip=%IP%, port=%PORT%, it was down for %LAST_OFFLINE_DURATION%',
'on_email_subject' => 'VIKTIGT: Server \'%LABEL%\' är UPPE', 'on_email_subject' => 'VIKTIGT: Server \'%LABEL%\' är UPPE',
'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_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_pushover_title' => 'Server \'%LABEL%\' är UPPE', 'on_pushover_title' => '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_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%',
), ),
'login' => array( 'login' => array(
'welcome_usermenu' => 'Välkommen, %user_name%', 'welcome_usermenu' => 'Välkommen, %user_name%',
@ -294,7 +300,9 @@ $sm_lang = array(
'password_forgot' => 'Glömt lösenord?', 'password_forgot' => 'Glömt lösenord?',
'password_reset' => 'Återställ lösenord', 'password_reset' => 'Återställ lösenord',
'password_reset_email_subject' => 'Password reset for PHP Server Monitor', 'password_reset_email_subject' => 'Password reset for PHP Server Monitor',
'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_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%',
'error_user_incorrect' => 'Användaren kunde inte hittas.', 'error_user_incorrect' => 'Användaren kunde inte hittas.',
'error_login_incorrect' => 'Informationen är felaktig.', 'error_login_incorrect' => 'Informationen är felaktig.',
'error_login_passwords_nomatch' => 'Lösenorden stämmer inte överens.', 'error_login_passwords_nomatch' => 'Lösenorden stämmer inte överens.',

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,7 +28,12 @@
$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(
'0' => 'tr_TR.UTF-8',
'1' => 'tr_TR',
'2' => 'turkish',
'3' => 'turkish-tr',
),
'locale_tag' => 'tr', 'locale_tag' => 'tr',
'locale_dir' => 'ltr', 'locale_dir' => 'ltr',
'system' => array( 'system' => array(
@ -43,12 +49,13 @@ $sm_lang = array(
'no' => 'Hayır', 'no' => 'Hayır',
'insert' => 'Ekle', 'insert' => 'Ekle',
'add_new' => 'Yeni ekle', 'add_new' => 'Yeni ekle',
'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.', '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.',
'back_to_top' => 'Başa Dön', 'back_to_top' => 'Başa Dön',
'go_back' => 'Geri Git', 'go_back' => 'Geri Git',
'ok' => 'Tamam', 'ok' => 'Tamam',
'cancel' => 'İptal', 'cancel' => 'İptal',
// date/time format according the strftime php function format parameter http://php.net/manual/function.strftime.php
'short_day_format' => '%B %e', 'short_day_format' => '%B %e',
'long_day_format' => '%B %e, %Y', 'long_day_format' => '%B %e, %Y',
'yesterday_format' => 'Yesterday at %k:%M', 'yesterday_format' => 'Yesterday at %k:%M',
@ -60,18 +67,6 @@ $sm_lang = array(
'a_minute_ago' => 'yaklaşık bir dakika önce', 'a_minute_ago' => 'yaklaşık bir dakika önce',
'seconds_ago' => '%d saniye önce', 'seconds_ago' => '%d saniye önce',
'a_second_ago' => 'bir saniye önce', 'a_second_ago' => 'bir saniye önce',
'year' => 'year',
'years' => 'years',
'month' => 'month',
'months' => 'months',
'day' => 'day',
'days' => 'days',
'hour' => 'hour',
'hours' => 'hours',
'minute' => 'minute',
'minutes' => 'minutes',
'second' => 'second',
'seconds' => 'seconds',
), ),
'menu' => array( 'menu' => array(
'config' => 'Ayarlar', 'config' => 'Ayarlar',
@ -92,14 +87,19 @@ $sm_lang = array(
'level' => 'Seviye', 'level' => 'Seviye',
'level_10' => 'Yönetici', 'level_10' => 'Yönetici',
'level_20' => 'Kullanıcı', 'level_20' => 'Kullanıcı',
'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.', '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.',
'mobile' => 'Mobil', 'mobile' => 'Mobil',
'email' => 'E-posta', 'email' => 'E-posta',
'pushover' => 'Pushover', 'pushover' => 'Pushover',
'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
için <a href="https://pushover.net/" target="_blank">sitesine</a> bakabilirsiniz.',
'pushover_key' => 'Pushover Anahtarı', 'pushover_key' => 'Pushover Anahtarı',
'pushover_device' => 'Pushover Aracı', 'pushover_device' => 'Pushover Aracı',
'pushover_device_description' => 'Mesajın gönderileceği cihazın adı. Tüm cihazlara göndermek için boş 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.',
@ -108,7 +108,8 @@ $sm_lang = array(
'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 çizgi (_) karakterlerini içerebilir.', 'error_user_name_invalid' => 'Kullanıcı adları sadece harf (a-z, A-Z), sayı (0-9), noktalar (.) and alttan
ç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.',
@ -141,7 +142,8 @@ $sm_lang = array(
'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.
Regular expression\'a izin verilmiştir.',
'last_check' => 'Son kontrol', 'last_check' => 'Son kontrol',
'last_online' => 'Son çevrimiçi zamanı', 'last_online' => 'Son çevrimiçi zamanı',
'last_offline' => 'Last offline', 'last_offline' => 'Last offline',
@ -172,7 +174,6 @@ $sm_lang = array(
'warning_threshold_description' => 'Number of failed checks required before it is marked offline.', 'warning_threshold_description' => 'Number of failed checks required before it is marked offline.',
'chart_last_week' => 'Geçen Hafta', 'chart_last_week' => 'Geçen Hafta',
'chart_history' => 'Geçmiş', 'chart_history' => 'Geçmiş',
// 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',
@ -209,24 +210,29 @@ $sm_lang = array(
'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
için <a href="https://pushover.net/" target="_blank">sitesine</a> bakabilirsiniz.',
'pushover_clone_app' => 'Pushover uygulaması oluşturmak için buraya tıklayınız.', 'pushover_clone_app' => 'Pushover uygulaması oluşturmak için buraya tıklayınız.',
'pushover_api_token' => 'Pushover Uygulaması API Token Bilgisi', 'pushover_api_token' => 'Pushover Uygulaması API Token Bilgisi',
'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_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.',
'alert_type' => 'Ne zaman uyarılmak istediğinizi seçin.', 'alert_type' => 'Ne zaman uyarılmak istediğinizi seçin.',
'alert_type_description' => '<b>Durum değişikliği:</b> '. 'alert_type_description' => '<b>Durum değişikliği:</b> Sunucu durumu değişiklik durumunda bildirim
'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>'. alacaksınız. Sunucu çevrimiçi durumundan çevrimdışı durumuna veya
'<br /><b>Çevrimdışı:</b> '. çevrimdışı durumundan çevrim için durumuna geçtiğinde.<br><br
'Sunucu çevrim dışı duruma geçtiğinde bildirim alırsınız. *SADECE İLK GEÇTİĞİNDE*. Örneğin, '. /><b>Çevrimdışı:</b> Sunucu çevrim dışı duruma geçtiğinde bildirim
'Cronjob her 15 dakikada bir çalışıyorsa ve sunucu 1\'de gidip 6\'ya kadar kapalı kalırsa. '. alırsınız. *SADECE İLK GEÇTİĞİNDE*. Örneğin, Cronjob her 15 dakikada
'Sadece size saat 1\'de bildirim gönderilecektir.<br>'. bir çalışıyorsa ve sunucu 1\'de gidip 6\'ya kadar kapalı kalırsa. Sadece
'<br><b>Daima:</b> '. size saat 1\'de bildirim gönderilecektir.<br><br><b>Daima:</b> Site
'Site çevrimdışı olduğu her zaman size bildirim gönderilecektir, site saatler boyunca kapalı kalse bile.', çevrimdışı olduğu her zaman size bildirim gönderilecektir, site saatler
boyunca kapalı kalse bile.',
'alert_type_status' => 'Durum değişikliği', 'alert_type_status' => 'Durum değişikliği',
'alert_type_offline' => 'Çevrimdışı', 'alert_type_offline' => 'Çevrimdışı',
'alert_type_always' => 'Daima', 'alert_type_always' => 'Daima',
'log_status' => 'Log durumu', 'log_status' => 'Log durumu',
'log_status_description' => 'Eğer log durumu TRUE olarak işaretlenirse, bildirim ayarlarından geçen her olay log olarak tutulacaktır.', 'log_status_description' => 'Eğer log durumu TRUE olarak işaretlenirse, bildirim ayarlarından geçen her
olay log olarak tutulacaktır.',
'log_email' => 'Log e-posta mesajı otomatik gönderilmiştir.', 'log_email' => 'Log e-posta mesajı otomatik gönderilmiştir.',
'log_sms' => 'Log sms mesajı otomatik gönderilmiştir.', 'log_sms' => 'Log sms mesajı otomatik gönderilmiştir.',
'log_pushover' => 'Log pushover mesajı otomatik gönderilmiştir.', 'log_pushover' => 'Log pushover mesajı otomatik gönderilmiştir.',
@ -240,11 +246,8 @@ $sm_lang = array(
'settings_notification' => 'Bildirim ayarları', 'settings_notification' => 'Bildirim ayarları',
'settings_log' => 'Log ayarları', 'settings_log' => 'Log ayarları',
'auto_refresh' => 'Otomatik Yenileme', 'auto_refresh' => 'Otomatik Yenileme',
'auto_refresh_description' => 'auto_refresh_description' => 'Otomatik yenileme sunucu sayfası<br><span class="small">Eğer sayfa yenilenmez
'Otomatik yenileme sunucu sayfası<br>'. ise.</span>',
'<span class="small">'.
'Eğer sayfa yenilenmez ise.'.
'</span>',
'seconds' => 'saniye', 'seconds' => 'saniye',
'test' => 'Test', 'test' => 'Test',
'test_email' => 'Profilinizde tanımladığınız e-posta adresinize bir e-posta gönderilecek.', 'test_email' => 'Profilinizde tanımladığınız e-posta adresinize bir e-posta gönderilecek.',
@ -260,24 +263,32 @@ $sm_lang = array(
'sms_error_nomobile' => 'SMS gönderilemiyor: profilinizde geçerli bir telefon numarası yok.', 'sms_error_nomobile' => 'SMS gönderilemiyor: profilinizde geçerli bir telefon numarası yok.',
'pushover_sent' => 'Pushover bildirimi gönderildi', 'pushover_sent' => 'Pushover bildirimi gönderildi',
'pushover_error' => 'Pushover bildirimi gönderilirken bir hata meydana geldi: %s', 'pushover_error' => 'Pushover bildirimi gönderilirken bir hata meydana geldi: %s',
'pushover_error_noapp' => 'Test için bildirim gönderilemiyor: Pushover Uygulaması API token bilgisi bulunamadı.', 'pushover_error_noapp' => 'Test için bildirim gönderilemiyor: Pushover Uygulaması API token bilgisi
bulunamadı.',
'pushover_error_nokey' => 'Test için bildirim gönderilemiyor: Pushover key bilgisi profilinizde bulunamadı.', 'pushover_error_nokey' => 'Test için bildirim gönderilemiyor: Pushover key bilgisi profilinizde bulunamadı.',
'log_retention_period' => 'Log tutma süresi', 'log_retention_period' => 'Log tutma süresi',
'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.', '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.',
'log_retention_days' => 'gün', 'log_retention_days' => 'gün',
), ),
// for newlines in the email messages use <br>
'notifications' => array( 'notifications' => array(
'off_sms' => '\'%LABEL%\' isimli sunucu KAPANDI: ip=%IP%, port=%PORT%. Error=%ERROR%', 'off_sms' => '\'%LABEL%\' isimli sunucu KAPANDI: ip=%IP%, port=%PORT%. Error=%ERROR%',
'off_email_subject' => 'ÖNEMLİ: \'%LABEL%\' isimli sunucu KAPANDI.', 'off_email_subject' => 'ÖNEMLİ: \'%LABEL%\' isimli sunucu KAPANDI.',
'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_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.', 'off_pushover_title' => '\'%LABEL%\' isimli sunucu KAPANDI.',
'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_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%',
'on_sms' => '\'%LABEL%\' isimli sunucu YAYINDA: ip=%IP%, port=%PORT%, it was down for %LAST_OFFLINE_DURATION%', 'on_sms' => '\'%LABEL%\' isimli sunucu YAYINDA: ip=%IP%, port=%PORT%, it was down for %LAST_OFFLINE_DURATION%',
'on_email_subject' => 'ÖNEMLİ:\'%LABEL%\' isimli sunucu YAYINDA.', 'on_email_subject' => 'ÖNEMLİ:\'%LABEL%\' isimli sunucu YAYINDA.',
'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%", '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%',
'on_pushover_title' => '\'%LABEL%\' isimli sunucu YAYINDA', 'on_pushover_title' => '\'%LABEL%\' isimli sunucu YAYINDA',
'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%', '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%',
), ),
'login' => array( 'login' => array(
'welcome_usermenu' => 'Hoşgeldin, %user_name%', 'welcome_usermenu' => 'Hoşgeldin, %user_name%',
@ -294,7 +305,8 @@ $sm_lang = array(
'password_forgot' => 'Şifreni mi unuttun?', 'password_forgot' => 'Şifreni mi unuttun?',
'password_reset' => 'Şifreni yenile', 'password_reset' => 'Şifreni yenile',
'password_reset_email_subject' => 'PHP Server Monitor için şifreni yenile', 'password_reset_email_subject' => 'PHP Server Monitor için ş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%', '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_user_incorrect' => 'Kullanıcı adı bulunamadı.',
'error_login_incorrect' => 'Bilgi yanlış.', 'error_login_incorrect' => 'Bilgi yanlış.',
'error_login_passwords_nomatch' => 'Şifreleriniz uyuşmuyor.', 'error_login_passwords_nomatch' => 'Şifreleriniz uyuşmuyor.',

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.
@ -27,7 +28,11 @@
$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(
'0' => 'vi_VN.UTF-8',
'1' => 'vi_VN',
'2' => 'Việt Nam',
),
'system' => array( 'system' => array(
'title' => 'Server Monitor', 'title' => 'Server Monitor',
'install' => 'Cài đặt', 'install' => 'Cài đặt',
@ -41,12 +46,13 @@ $sm_lang = array(
'no' => 'No', 'no' => 'No',
'insert' => 'Thêm mới', 'insert' => 'Thêm mới',
'add_new' => 'Thêm mới', 'add_new' => 'Thêm mới',
'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>.', 'update_available' => 'Phiên bản mới ({version}) săn trên <a
href="https://github.com/phpservermon/phpservermon/releases/latest" target="_blank"
rel="noopener">http://www.phpservermonitor.org</a>.',
'back_to_top' => 'Lên đầu trang', 'back_to_top' => 'Lên đầu trang',
'go_back' => 'Quay lại', 'go_back' => 'Quay lại',
'ok' => 'OK', 'ok' => 'OK',
'cancel' => 'Cancel', 'cancel' => 'Cancel',
// date/time format according the strftime php function format parameter http://php.net/manual/function.strftime.php
'short_day_format' => '%B %e', 'short_day_format' => '%B %e',
'long_day_format' => '%B %e, %Y', 'long_day_format' => '%B %e, %Y',
'yesterday_format' => 'Yesterday at %k:%M', 'yesterday_format' => 'Yesterday at %k:%M',
@ -78,14 +84,19 @@ $sm_lang = array(
'level' => 'Cấp độ', 'level' => 'Cấp độ',
'level_10' => 'Administrator', 'level_10' => 'Administrator',
'level_20' => 'User', 'level_20' => 'User',
'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ọ.', 'level_description' => '<b>Administrators</b> toàn quyền: họ thể quản server, người
dùng chỉnh sửa cấu hình.<br><b>Users</b> chỉ xem chạy cập nhật
cho servers được giao cho họ.',
'mobile' => 'Di động', 'mobile' => 'Di động',
'email' => 'Email', 'email' => 'Email',
'pushover' => 'Pushover', 'pushover' => 'Pushover',
'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.', 'pushover_description' => 'Pushover 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/" target="_blank">website của họ</a> để biết
thêm thông tin.',
'pushover_key' => 'Pushover Key', 'pushover_key' => 'Pushover Key',
'pushover_device' => 'Pushover Device', 'pushover_device' => 'Pushover Device',
'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ị.', '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ị.',
'delete_title' => 'Xóa Người dùng', 'delete_title' => 'Xóa Người dùng',
'delete_message' => 'Bạn có chắc chắn xóa người dùng \'%1\'?', 'delete_message' => 'Bạn có chắc chắn xóa người dùng \'%1\'?',
'deleted' => 'Đã xóa người dùng.', 'deleted' => 'Đã xóa người dùng.',
@ -94,7 +105,8 @@ $sm_lang = array(
'profile' => 'Hồ sơ', 'profile' => 'Hồ sơ',
'profile_updated' => 'Hồ sơ của bạn đã được cập nhật.', 'profile_updated' => 'Hồ sơ của bạn đã được cập nhật.',
'error_user_name_bad_length' => 'Tên người dùng phải có từ 2 và 64 ký tự.', 'error_user_name_bad_length' => 'Tên người dùng phải có từ 2 và 64 ký tự.',
'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 (_).', 'error_user_name_invalid' => 'Tên người dùng chỉ thể chứa các chữ cái(a-z, A-Z), số
(0-9), dấu chấm (.) dấu gạch dưới (_).',
'error_user_name_exists' => 'Tên người dùng đã tồn tại trong cơ sở dữ liệu.', 'error_user_name_exists' => 'Tên người dùng đã tồn tại trong cơ sở dữ liệu.',
'error_user_email_bad_length' => 'Địa chỉ email phải từ 5 đến 255 ký tự.', 'error_user_email_bad_length' => 'Địa chỉ email phải từ 5 đến 255 ký tự.',
'error_user_email_invalid' => 'Địa chỉ email không hợp lệ.', 'error_user_email_invalid' => 'Địa chỉ email không hợp lệ.',
@ -127,7 +139,8 @@ $sm_lang = array(
'type_website' => 'Website', 'type_website' => 'Website',
'type_service' => 'Dịch vụ', 'type_service' => 'Dịch vụ',
'pattern' => 'Tìm kiếm chuỗi/mẫu', 'pattern' => 'Tìm kiếm chuỗi/mẫu',
'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.', 'pattern_description' => 'Nếu mẫu không tìm thấy trên website, server sẽ được đánh dấu
offline. Biểu thức chính quy (Regular expressions) được cho phép.',
'last_check' => 'Kiểm tra lần cuối', 'last_check' => 'Kiểm tra lần cuối',
'last_online' => 'Trực tuyến lần cuối', 'last_online' => 'Trực tuyến lần cuối',
'monitoring' => 'Giám sát', 'monitoring' => 'Giám sát',
@ -157,7 +170,6 @@ $sm_lang = array(
'warning_threshold_description' => 'Số lần kiểm tra thất bại trước khi đánh đấu là offline.', 'warning_threshold_description' => 'Số lần kiểm tra thất bại trước khi đánh đấu là offline.',
'chart_last_week' => 'Tuần trước', 'chart_last_week' => 'Tuần trước',
'chart_history' => 'Lịch sử', 'chart_history' => 'Lịch sử',
// 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',
@ -171,7 +183,8 @@ $sm_lang = array(
'error_server_ip_bad_service' => 'Địa chỉ IP không hợp lệ.', 'error_server_ip_bad_service' => 'Địa chỉ IP không hợp lệ.',
'error_server_ip_bad_website' => 'URL website không hợp lệ.', 'error_server_ip_bad_website' => 'URL website không hợp lệ.',
'error_server_type_invalid' => 'Chọn loại server không hợp lệ.', 'error_server_type_invalid' => 'Chọn loại server không hợp lệ.',
'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.', 'error_server_warning_threshold_invalid' => 'Ngưỡng cảnh báo phải một số nguyên giá
trị lớn hơn 0.',
), ),
'config' => array( 'config' => array(
'general' => 'Tổng quát', 'general' => 'Tổng quát',
@ -194,24 +207,30 @@ $sm_lang = array(
'sms_gateway_password' => 'Gateway password', 'sms_gateway_password' => 'Gateway password',
'sms_from' => 'Số điện thoại của người gửi', 'sms_from' => 'Số điện thoại của người gửi',
'pushover_status' => 'Cho phép gửi tin nhắn bằng Pushover', 'pushover_status' => 'Cho phép gửi tin nhắn bằng Pushover',
'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.', 'pushover_description' => 'Pushover 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/" target="_blank">website của họ</a> để biết
thêm thông tin.',
'pushover_clone_app' => 'Nhấn vào đây để tạo ứng dụng Pushover của bạn', 'pushover_clone_app' => 'Nhấn vào đây để tạo ứng dụng Pushover của bạn',
'pushover_api_token' => 'Pushover App API Token', 'pushover_api_token' => 'Pushover App API Token',
'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.', 'pushover_api_token_description' => 'Trước khi bạn thể sử dụng Pushover, bạn cần phải <a
href="%1$s" target="_blank" rel="noopener">đăng một ứng
dụng</a> tại trang web của họ nhập Token App API đây.',
'alert_type' => 'Chọn khi bạn muốn được thông báo.', 'alert_type' => 'Chọn khi bạn muốn được thông báo.',
'alert_type_description' => '<b>Thay đổi trạng thái:</b> '. 'alert_type_description' => '<b>Thay đổi trạng thái:</b> Bạn sẽ nhận được thông báo khi
'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>'. một máy chủ một sự thay đổi trạng thái. Từ online -> offline
'<br /><b>Offline:</b> '. hoặc offline -> online.<br><br /><b>Offline:</b> Bạn sẽ nhận được
'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ụ, '. thông báo khi một máy chủ offline *MỘT LẦN DUY NHẤT*. dụ,
'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. '. cronjob của bạn hoạt động mỗi 15 phút server của bạn down
'Bạn sẽ nhận được 1 thông báo lúc 01h00 và đó là nó.<br>'. tại 01h00 cho đến 6h00. Bạn sẽ nhận được 1 thông báo lúc 01h00
'<br><b>Always:</b> '. đó .<br><br><b>Always:</b> Bạn sẽ nhận được thông báo
'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ờ.', mỗi khi chạy đoạn script một trang web tắt, ngay cả khi trang
web đã được offline trong nhiều giờ.',
'alert_type_status' => 'Thay đổi trạng thái', 'alert_type_status' => 'Thay đổi trạng thái',
'alert_type_offline' => 'Offline', 'alert_type_offline' => 'Offline',
'alert_type_always' => 'Always', 'alert_type_always' => 'Always',
'log_status' => 'Log status', 'log_status' => 'Log status',
'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.', 'log_status_description' => 'Nếu log status được đặt 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.',
'log_email' => 'Log emails gửi bởi script', 'log_email' => 'Log emails gửi bởi script',
'log_sms' => 'Log Tin nhăn văn bản gửi bởi script', 'log_sms' => 'Log Tin nhăn văn bản gửi bởi script',
'log_pushover' => 'Log tin nhắn pushover gửi bởi script', 'log_pushover' => 'Log tin nhắn pushover gửi bởi script',
@ -225,16 +244,16 @@ $sm_lang = array(
'settings_notification' => 'Thiết lặp thông báo', 'settings_notification' => 'Thiết lặp thông báo',
'settings_log' => 'Thiết lặp Log', 'settings_log' => 'Thiết lặp Log',
'auto_refresh' => 'Tự động làm mới', 'auto_refresh' => 'Tự động làm mới',
'auto_refresh_description' => 'auto_refresh_description' => 'Tự động làm mới servers page.<br><span class="small">Trong vài giây,
'Tự động làm mới servers page.<br>'. nếu 0 trang sẽ không làm mới.</span>',
'<span class="small">'.
'Trong vài giây, nếu 0 trang sẽ không làm mới.'.
'</span>',
'seconds' => 'giây', 'seconds' => 'giây',
'test' => 'Thử', 'test' => 'Thử',
'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.', 'test_email' => 'Một email sẽ được gửi đến địa chỉ được xác định trong hồ
'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.', người dùng của bạn.',
'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.', '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.',
'test_pushover' => 'Một thông báo Pushover sẽ được gửi đến địa chỉ được xác định
trong hồ người dùng của bạn.',
'send' => 'Gửi', 'send' => 'Gửi',
'test_subject' => 'Thử nghiệm', 'test_subject' => 'Thử nghiệm',
'test_message' => 'tin nhắn thử nghiệm', 'test_message' => 'tin nhắn thử nghiệm',
@ -242,27 +261,37 @@ $sm_lang = array(
'email_error' => 'Lỗi trong khi gửi mail', 'email_error' => 'Lỗi trong khi gửi mail',
'sms_sent' => 'Gửi SMS', 'sms_sent' => 'Gửi SMS',
'sms_error' => 'Lỗi trong khi gửi sms. %s', 'sms_error' => 'Lỗi trong khi gửi sms. %s',
'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.', 'sms_error_nomobile' => 'Không thể gửi thử SMS: không số điện thoại hợp lệ được
tìm thấy trong hồ của bạn.',
'pushover_sent' => 'Gửi thông báo Pushover', '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', 'pushover_error' => 'Một lỗi đã xảy ra trong khi gửi thông báo Pushover: %s',
'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.', 'pushover_error_noapp' => 'Không thể gửi thử thông báo: không tìm thấy Pushover App API token
'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.', trong cấu hình.',
'pushover_error_nokey' => 'Không thể gửi thử thông báo: không tìm thấy Pushover key trong hồ
của bạn.',
'log_retention_period' => 'Thời gian lưu giữ log', 'log_retention_period' => 'Thời gian lưu giữ log',
'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.', 'log_retention_period_description' => 'Số ngày để giữ các bản ghi của các thông báo tài
liệu lưu trữ của thời gian hoạt động máy chủ. Nhập 0
để hiệu hóa dọn dẹp log.',
'log_retention_days' => 'ngày', 'log_retention_days' => 'ngày',
), ),
// for newlines in the email messages use <br>
'notifications' => array( 'notifications' => array(
'off_sms' => 'Server \'%LABEL%\' is DOWN: ip=%IP%, cổng=%PORT%. Lỗi=%ERROR%', 'off_sms' => 'Server \'%LABEL%\' is DOWN: ip=%IP%, cổng=%PORT%. Lỗi=%ERROR%',
'off_email_subject' => 'IMPORTANT: Server \'%LABEL%\' is DOWN', 'off_email_subject' => 'IMPORTANT: Server \'%LABEL%\' is DOWN',
'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%", '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%',
'off_pushover_title' => 'Server \'%LABEL%\' is DOWN', 'off_pushover_title' => 'Server \'%LABEL%\' is DOWN',
'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%", '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%',
'on_sms' => 'Server \'%LABEL%\' is RUNNING: ip=%IP%, port=%PORT%, it was down for %LAST_OFFLINE_DURATION%', 'on_sms' => 'Server \'%LABEL%\' is RUNNING: ip=%IP%, port=%PORT%, it was down for %LAST_OFFLINE_DURATION%',
'on_email_subject' => 'IMPORTANT: Server \'%LABEL%\' hoạt động', 'on_email_subject' => 'IMPORTANT: Server \'%LABEL%\' hoạt động',
'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%", '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%',
'on_pushover_title' => 'Server \'%LABEL%\' hoạt động', 'on_pushover_title' => 'Server \'%LABEL%\' hoạt động',
'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%', '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%',
), ),
'login' => array( 'login' => array(
'welcome_usermenu' => 'Chào mừng, %user_name%', 'welcome_usermenu' => 'Chào mừng, %user_name%',
@ -279,12 +308,14 @@ $sm_lang = array(
'password_forgot' => 'Quên mật khẩu?', 'password_forgot' => 'Quên mật khẩu?',
'password_reset' => 'Khôi phục 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_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 ý nó hết hạn trong 1 giờ.<br><br>%link%', '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_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_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_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ệ.', '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_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.', '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( 'error' => array(

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,7 +28,12 @@
$sm_lang = array( $sm_lang = array(
'name' => '中文 - Chinese', 'name' => '中文 - Chinese',
'locale' => array('zh_CN.UTF-8', 'zh_CN', 'chinese', 'chinese-cn'), 'locale' => array(
'0' => 'zh_CN.UTF-8',
'1' => 'zh_CN',
'2' => 'chinese',
'3' => 'chinese-cn',
),
'locale_tag' => 'zh', 'locale_tag' => 'zh',
'locale_dir' => 'ltr', 'locale_dir' => 'ltr',
'system' => array( 'system' => array(
@ -43,12 +49,13 @@ $sm_lang = array(
'no' => '否', 'no' => '否',
'insert' => '新增', 'insert' => '新增',
'add_new' => '添加', 'add_new' => '添加',
'update_available' => '发现新版本({version}) <a href="https://github.com/phpservermon/phpservermon/releases/latest" target="_blank" rel="noopener">http://www.phpservermonitor.org</a>.', 'update_available' => '发现新版本({version}) <a
href="https://github.com/phpservermon/phpservermon/releases/latest" target="_blank"
rel="noopener">http://www.phpservermonitor.org</a>.',
'back_to_top' => '返回顶部', 'back_to_top' => '返回顶部',
'go_back' => '后退', 'go_back' => '后退',
'ok' => '确认', 'ok' => '确认',
'cancel' => '取消', 'cancel' => '取消',
// date/time format according the strftime php function format parameter http://php.net/manual/function.strftime.php
'short_day_format' => '%B %e', 'short_day_format' => '%B %e',
'long_day_format' => '%B %e, %Y', 'long_day_format' => '%B %e, %Y',
'yesterday_format' => '昨日 %k:%M', 'yesterday_format' => '昨日 %k:%M',
@ -60,18 +67,6 @@ $sm_lang = array(
'a_minute_ago' => '1分钟前', 'a_minute_ago' => '1分钟前',
'seconds_ago' => '%d 秒前', 'seconds_ago' => '%d 秒前',
'a_second_ago' => '刚刚', 'a_second_ago' => '刚刚',
'year' => 'year',
'years' => 'years',
'month' => 'month',
'months' => 'months',
'day' => 'day',
'days' => 'days',
'hour' => 'hour',
'hours' => 'hours',
'minute' => 'minute',
'minutes' => 'minutes',
'second' => 'second',
'seconds' => 'seconds',
), ),
'menu' => array( 'menu' => array(
'config' => '设置', 'config' => '设置',
@ -92,11 +87,14 @@ $sm_lang = array(
'level' => '等级', 'level' => '等级',
'level_10' => '超级管理员', 'level_10' => '超级管理员',
'level_20' => '普通用户', 'level_20' => '普通用户',
'level_description' => '<b>超级管理员</b> 拥有所有权限: 管理服务器, 用户 以及修改设置.<br><b>普通用户</b> 只能查看及更新自己名下所属的服务器.', 'level_description' => '<b>超级管理员</b> 拥有所有权限: 管理服务器, 用户
以及修改设置.<br><b>普通用户</b>
只能查看及更新自己名下所属的服务器.',
'mobile' => '手机', 'mobile' => '手机',
'email' => '邮件', 'email' => '邮件',
'pushover' => 'Pushover', 'pushover' => 'Pushover',
'pushover_description' => 'Pushover 是第三方用于实时通知的服务(收费). 详情见 <a href="https://pushover.net/" target="_blank" rel="noopener">Pushover 官网</a>.', 'pushover_description' => 'Pushover 是第三方用于实时通知的服务(收费). 详情见 <a
href="https://pushover.net/" target="_blank" rel="noopener">Pushover 官网</a>.',
'pushover_key' => 'Pushover Key', 'pushover_key' => 'Pushover Key',
'pushover_device' => 'Pushover Device', 'pushover_device' => 'Pushover Device',
'pushover_device_description' => '要发送信息的设备名. 留空则发送到所有设备.', 'pushover_device_description' => '要发送信息的设备名. 留空则发送到所有设备.',
@ -108,7 +106,8 @@ $sm_lang = array(
'profile' => '个人资料', 'profile' => '个人资料',
'profile_updated' => '个人资料已更新.', 'profile_updated' => '个人资料已更新.',
'error_user_name_bad_length' => '用户名长度必须为2-64个字符.', 'error_user_name_bad_length' => '用户名长度必须为2-64个字符.',
'error_user_name_invalid' => '用户名只允许使用字母 (a-z, A-Z), 数字 (0-9), 點(。) 及下划线 (_).', 'error_user_name_invalid' => '用户名只允许使用字母 (a-z, A-Z), 数字 (0-9), 點(。)
及下划线 (_).',
'error_user_name_exists' => '该用户名已存在.', 'error_user_name_exists' => '该用户名已存在.',
'error_user_email_bad_length' => '电子邮箱长度必须为5-255个字符.', 'error_user_email_bad_length' => '电子邮箱长度必须为5-255个字符.',
'error_user_email_invalid' => '无效的邮箱地址.', 'error_user_email_invalid' => '无效的邮箱地址.',
@ -125,9 +124,6 @@ $sm_lang = array(
'sms' => '短信', 'sms' => '短信',
'pushover' => 'Pushover', 'pushover' => 'Pushover',
'no_logs' => '没有日志', 'no_logs' => '没有日志',
'clear' => 'Clear log',
'delete_title' => 'Delete log',
'delete_message' => 'Are you sure you want to delete <b>all</b> logs?',
), ),
'servers' => array( 'servers' => array(
'server' => '业务', 'server' => '业务',
@ -152,7 +148,8 @@ $sm_lang = array(
'type_website' => '网站', 'type_website' => '网站',
'type_service' => '服务', 'type_service' => '服务',
'pattern' => '字符串/正则匹配', 'pattern' => '字符串/正则匹配',
'pattern_description' => '如果在网站上未找到对应匹配内容, 则标记该网站为离线. 支持正则表达式.', 'pattern_description' => '如果在网站上未找到对应匹配内容, 则标记该网站为离线.
支持正则表达式.',
'last_check' => '最后检查', 'last_check' => '最后检查',
'last_online' => '最后在线', 'last_online' => '最后在线',
'last_offline' => 'Last offline', 'last_offline' => 'Last offline',
@ -183,7 +180,6 @@ $sm_lang = array(
'warning_threshold_description' => '失败达到多少次数则标记为离线.', 'warning_threshold_description' => '失败达到多少次数则标记为离线.',
'chart_last_week' => '上周', 'chart_last_week' => '上周',
'chart_history' => '更早', 'chart_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_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',
@ -204,7 +200,8 @@ $sm_lang = array(
'language' => '语言', 'language' => '语言',
'show_update' => '每周检查更新?', 'show_update' => '每周检查更新?',
'password_encrypt_key' => '加密密钥', 'password_encrypt_key' => '加密密钥',
'password_encrypt_key_note' => '该密钥用于加密访问 URL 时的用户名和密码. 如果需要修改密钥,请同步修改以前的监控业务,确认密钥匹配!', 'password_encrypt_key_note' => '该密钥用于加密访问 URL 时的用户名和密码.
如果需要修改密钥,请同步修改以前的监控业务,确认密钥匹配!',
'proxy' => '使用代理', 'proxy' => '使用代理',
'proxy_url' => '代理IP', 'proxy_url' => '代理IP',
'proxy_user' => '用户名', 'proxy_user' => '用户名',
@ -226,19 +223,19 @@ $sm_lang = array(
'sms_gateway_password' => 'SMS网关密码', 'sms_gateway_password' => 'SMS网关密码',
'sms_from' => '发信人电话号', 'sms_from' => '发信人电话号',
'pushover_status' => '允许 Pushover 通知', 'pushover_status' => '允许 Pushover 通知',
'pushover_description' => 'Pushover 是第三方用于实时通知的服务(收费). 详情见 <a href="https://pushover.net/" target="_blank" rel="noopener">Pushover 官网</a>.', 'pushover_description' => 'Pushover 是第三方用于实时通知的服务(收费). 详情见 <a
href="https://pushover.net/" target="_blank" rel="noopener">Pushover 官网</a>.',
'pushover_clone_app' => '点此创建 Pushover App', 'pushover_clone_app' => '点此创建 Pushover App',
'pushover_api_token' => 'Pushover API Token', 'pushover_api_token' => 'Pushover API Token',
'pushover_api_token_description' => '请先 <a href="%1$s" target="_blank" rel="noopener">注册Pushover</a> 并获取 Api Token.', 'pushover_api_token_description' => '请先 <a href="%1$s" target="_blank" rel="noopener">注册Pushover</a>
并获取 Api Token.',
'alert_type' => '如果想要收到提醒请选中此项.', 'alert_type' => '如果想要收到提醒请选中此项.',
'alert_type_description' => '<b>状态变化:</b> '. 'alert_type_description' => '<b>状态变化:</b> 业务 online -> offline offline -> online
'业务 online -> offline 或 offline -> online 的状态变化将会收到提醒.<br>'. 的状态变化将会收到提醒.<br><br /><b>离线状态:</b>
'<br /><b>离线状态:</b> '. 服务器首次发生离线状态将会收到提醒 cronjob
'服务器首次发生离线状态将会收到提醒 ,如:'. 设定为15分钟执行一次
'cronjob 设定为15分钟执行一次 服务器从1:00-6:00一直处于当状态'. 服务器从1:00-6:00一直处于当状态那么你将于1:00首次发现脱机时收到一条提醒,之后不会重复提醒.<br><br><b>总是提醒:</b>
'那么你将于1:00首次发现脱机时收到一条提醒之后不会重复提醒.<br>'. 每次脚本执行或站点离线(即使站点离线很久已提醒过)均发送提醒.',
'<br><b>总是提醒:</b> '.
'每次脚本执行或站点离线(即使站点离线很久已提醒过)均发送提醒.',
'alert_type_status' => '状态变化', 'alert_type_status' => '状态变化',
'alert_type_offline' => '离线状态', 'alert_type_offline' => '离线状态',
'alert_type_always' => '总是提醒', 'alert_type_always' => '总是提醒',
@ -260,11 +257,8 @@ $sm_lang = array(
'settings_log' => '日志设置', 'settings_log' => '日志设置',
'settings_proxy' => '代理设置', 'settings_proxy' => '代理设置',
'auto_refresh' => '自动刷新', 'auto_refresh' => '自动刷新',
'auto_refresh_description' => 'auto_refresh_description' => '自动刷新服务器页.<br><span class="small">单位为秒, 设置为 0
'自动刷新服务器页.<br>'. 则不自动刷新.</span>',
'<span class="small">'.
'单位为秒, 设置为 0 则不自动刷新.'.
'</span>',
'seconds' => '秒', 'seconds' => '秒',
'test' => '测试', 'test' => '测试',
'test_email' => '将发送一封邮件到您账户设置的邮件地址.', 'test_email' => '将发送一封邮件到您账户设置的邮件地址.',
@ -280,24 +274,30 @@ $sm_lang = array(
'sms_error_nomobile' => '无法发送短信: 您的账号未设置有效手机号码.', 'sms_error_nomobile' => '无法发送短信: 您的账号未设置有效手机号码.',
'pushover_sent' => '发送Pushover通知', 'pushover_sent' => '发送Pushover通知',
'pushover_error' => 'Pushover通知发送出错: %s', 'pushover_error' => 'Pushover通知发送出错: %s',
'pushover_error_noapp' => 'Pushover通知发送出错: no Pushover App API token found in the global configuration.', 'pushover_error_noapp' => 'Pushover通知发送出错: no Pushover App API token found in the global
configuration.',
'pushover_error_nokey' => 'Pushover通知无法发送: no Pushover key found in your profile.', 'pushover_error_nokey' => 'Pushover通知无法发送: no Pushover key found in your profile.',
'log_retention_period' => '日志保留时长', 'log_retention_period' => '日志保留时长',
'log_retention_period_description' => '日志存档保留时间0为禁用日志清理', 'log_retention_period_description' => '日志存档保留时间0为禁用日志清理',
'log_retention_days' => '天', 'log_retention_days' => '天',
), ),
// for newlines in the email messages use <br>
'notifications' => array( 'notifications' => array(
'off_sms' => '监控项 \'%LABEL%:%PORT%\' 异常. %ERROR% %IP%', 'off_sms' => '监控项 \'%LABEL%:%PORT%\' 异常. %ERROR% %IP%',
'off_email_subject' => 'IMPORTANT: 服务器 \'%LABEL%\' 宕机', 'off_email_subject' => 'IMPORTANT: 服务器 \'%LABEL%\' 宕机',
'off_email_body' => "无法连接到以下服务器:<br><br>服务器: %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>错误: %ERROR%<br>日期: %DATE%", 'off_email_body' => '无法连接到以下服务器:<br><br>服务器: %LABEL%<br>IP: %IP%<br>Port:
%PORT%<br>错误: %ERROR%<br>日期: %DATE%',
'off_pushover_title' => '服务器 \'%LABEL%\' 宕机', 'off_pushover_title' => '服务器 \'%LABEL%\' 宕机',
'off_pushover_message' => "无法连接到以下服务器:<br><br>服务器: %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>错误: %ERROR%<br>日期: %DATE%", 'off_pushover_message' => '无法连接到以下服务器:<br><br>服务器: %LABEL%<br>IP: %IP%<br>Port:
%PORT%<br>错误: %ERROR%<br>日期: %DATE%',
'on_sms' => '服务器 \'%LABEL%\' 运行中: ip=%IP%, port=%PORT%, it was down for %LAST_OFFLINE_DURATION%', 'on_sms' => '服务器 \'%LABEL%\' 运行中: ip=%IP%, port=%PORT%, it was down for %LAST_OFFLINE_DURATION%',
'on_email_subject' => 'IMPORTANT: 服务器 \'%LABEL%\' 运行中', 'on_email_subject' => 'IMPORTANT: 服务器 \'%LABEL%\' 运行中',
'on_email_body' => "服务器 '%LABEL%' 恢复运行, it was down for %LAST_OFFLINE_DURATION%:<br><br>服务器: %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>日期: %DATE%", 'on_email_body' => '服务器 \'%LABEL%\' 恢复运行, it was down for
%LAST_OFFLINE_DURATION%:<br><br>服务器: %LABEL%<br>IP: %IP%<br>Port: %PORT%<br>日期:
%DATE%',
'on_pushover_title' => '服务器 \'%LABEL%\' 运行中', 'on_pushover_title' => '服务器 \'%LABEL%\' 运行中',
'on_pushover_message' => "服务器 '%LABEL%' 恢复运行, it was down for %LAST_OFFLINE_DURATION%:<br><br>服务器: %LABEL%<br>IP: %IP%<br>Port: %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%',

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,12 +27,13 @@
**/ **/
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;
/** /**
@ -144,7 +146,8 @@ abstract class AbstractController implements ControllerInterface {
*/ */
protected $xhr = false; protected $xhr = false;
function __construct(Database $db, \Twig_Environment $twig) { public function __construct(Database $db, \Twig_Environment $twig)
{
$this->db = $db; $this->db = $db;
$this->twig = $twig; $this->twig = $twig;
} }
@ -155,13 +158,16 @@ abstract class AbstractController implements ControllerInterface {
* @param string $action if NULL, the action will be retrieved from user input (GET/POST) * @param string $action if NULL, the action will be retrieved from user input (GET/POST)
* @return \Symfony\Component\HttpFoundation\Response * @return \Symfony\Component\HttpFoundation\Response
*/ */
public function run($action = null) { public function run($action = null)
{
if ($action === null) { if ($action === null) {
$action = psm_GET('action', psm_POST('action', $this->action_default)); $action = psm_GET('action', psm_POST('action', $this->action_default));
} }
$this->xhr = (bool) psm_GET('xhr', psm_POST('xhr', false)); $this->xhr = (bool) psm_GET('xhr', psm_POST('xhr', false));
if (!in_array($action, $this->actions) || !($result = $this->runAction($action))) { $result = $this->runAction($action);
if (!in_array($action, $this->actions) || !$result) {
$result = $this->runAction($this->action_default); $result = $this->runAction($this->action_default);
} }
@ -180,7 +186,8 @@ abstract class AbstractController implements ControllerInterface {
* @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 (isset($this->user_level_required_actions[$action])) {
if ($this->getUser()->getUserLevel() > $this->user_level_required_actions[$action]) { if ($this->getUser()->getUserLevel() > $this->user_level_required_actions[$action]) {
// user is not allowed to access this action.. // user is not allowed to access this action..
@ -205,7 +212,8 @@ abstract class AbstractController implements ControllerInterface {
* @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) { if (!$this->xhr) {
// in XHR mode, we will not add the main template // in XHR mode, we will not add the main template
$tpl_data = array( $tpl_data = array(
@ -239,7 +247,12 @@ abstract class AbstractController implements ControllerInterface {
} }
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) {
@ -257,7 +270,8 @@ abstract class AbstractController implements ControllerInterface {
* 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(
@ -304,7 +318,8 @@ abstract class AbstractController implements ControllerInterface {
* 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;
} }
@ -312,7 +327,8 @@ abstract class AbstractController implements ControllerInterface {
* 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;
} }
@ -324,7 +340,8 @@ abstract class AbstractController implements ControllerInterface {
* @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)) { if (!is_array($actions)) {
$actions = array($actions); $actions = array($actions);
} }
@ -344,7 +361,8 @@ abstract class AbstractController implements ControllerInterface {
* @return string * @return string
* @see setActions() * @see setActions()
*/ */
public function getAction() { public function getAction()
{
return $this->action; return $this->action;
} }
@ -355,7 +373,8 @@ abstract class AbstractController implements ControllerInterface {
* @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)) { if (!is_array($msg)) {
$msg = array($msg); $msg = array($msg);
} }
@ -395,7 +414,8 @@ abstract class AbstractController implements ControllerInterface {
* @return array * @return array
* @see addMessage() * @see addMessage()
*/ */
public function getMessages($clear = true) { public function getMessages($clear = true)
{
$msgs = $this->messages; $msgs = $this->messages;
if ($clear) { if ($clear) {
$this->messages = array(); $this->messages = array();
@ -408,7 +428,8 @@ abstract class AbstractController implements ControllerInterface {
* @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); $this->user_level_required = intval($level);
return $this; return $this;
} }
@ -417,7 +438,8 @@ abstract class AbstractController implements ControllerInterface {
* 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;
} }
@ -430,7 +452,8 @@ abstract class AbstractController implements ControllerInterface {
* @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)) { if (!is_array($actions)) {
$actions = array($actions); $actions = array($actions);
} }
@ -445,7 +468,8 @@ abstract class AbstractController implements ControllerInterface {
* @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; $this->sidebar = $sidebar;
return $this; return $this;
} }
@ -455,7 +479,8 @@ abstract class AbstractController implements ControllerInterface {
* @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; $this->modal[$modal->getModalID()] = $modal;
return $this; return $this;
} }
@ -464,7 +489,8 @@ abstract class AbstractController implements ControllerInterface {
* 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;
} }
@ -472,7 +498,8 @@ abstract class AbstractController implements ControllerInterface {
* 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;
} }
@ -480,7 +507,8 @@ abstract class AbstractController implements ControllerInterface {
* 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');
} }
@ -488,7 +516,8 @@ abstract class AbstractController implements ControllerInterface {
* 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;
} }
@ -497,7 +526,8 @@ abstract class AbstractController implements ControllerInterface {
* @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->csrf_key = $key;
$this->twig->addGlobal('csrf_key', $key); $this->twig->addGlobal('csrf_key', $key);
return $this; 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.
@ -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,10 +27,12 @@
**/ **/
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
@ -42,11 +45,13 @@ class ConfigController extends AbstractController {
'sms_status', 'sms_status',
'pushover_status', 'pushover_status',
'telegram_status', 'telegram_status',
'jabber_status',
'log_status', 'log_status',
'log_email', 'log_email',
'log_sms', 'log_sms',
'log_pushover', 'log_pushover',
'log_telegram', 'log_telegram',
'log_jabber',
'show_update', 'show_update',
'combine_notifications', 'combine_notifications',
); );
@ -64,17 +69,30 @@ class ConfigController extends AbstractController {
'email_smtp_host', 'email_smtp_host',
'email_smtp_port', 'email_smtp_port',
'email_smtp_username', 'email_smtp_username',
'email_smtp_password',
'sms_gateway_username', 'sms_gateway_username',
'sms_gateway_password', 'sms_gateway_password',
'sms_from', 'sms_from',
'pushover_api_token', 'pushover_api_token',
'telegram_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'; private $default_tab = 'general';
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);
@ -90,7 +108,8 @@ class ConfigController extends AbstractController {
* *
* @return string * @return string
*/ */
protected function executeIndex() { protected function executeIndex()
{
$this->twig->addGlobal('subtitle', psm_get_lang('menu', 'config')); $this->twig->addGlobal('subtitle', psm_get_lang('menu', 'config'));
$tpl_data = $this->getLabels(); $tpl_data = $this->getLabels();
@ -150,12 +169,18 @@ class ConfigController extends AbstractController {
) )
); );
$tpl_data['sms_gateway_selected'] = isset($config['sms_gateway']) ? $config['sms_gateway'] : current($sms_gateways); $tpl_data['sms_gateway_selected'] = isset($config['sms_gateway']) ?
$tpl_data['alert_type_selected'] = isset($config['alert_type']) ? $config['alert_type'] : ''; $config['sms_gateway'] : current($sms_gateways);
$tpl_data['email_smtp_security_selected'] = isset($config['email_smtp_security']) ? $config['email_smtp_security'] : ''; $tpl_data['alert_type_selected'] = isset($config['alert_type']) ?
$tpl_data['auto_refresh_servers'] = isset($config['auto_refresh_servers']) ? $config['auto_refresh_servers'] : '0'; $config['alert_type'] : '';
$tpl_data['log_retention_period'] = isset($config['log_retention_period']) ? $config['log_retention_period'] : '365'; $tpl_data['email_smtp_security_selected'] = isset($config['email_smtp_security']) ?
$tpl_data['password_encrypt_key'] = isset($config['password_encrypt_key']) ? $config['password_encrypt_key'] : sha1(microtime()); $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) { foreach ($this->checkboxes as $input_key) {
$tpl_data[$input_key . '_checked'] = $tpl_data[$input_key . '_checked'] =
@ -166,12 +191,20 @@ class ConfigController extends AbstractController {
foreach ($this->fields as $input_key) { foreach ($this->fields as $input_key) {
$tpl_data[$input_key] = (isset($config[$input_key])) ? $config[$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'; $tpl_data[$this->default_tab . '_active'] = 'active';
$testmodals = array('email', 'sms', 'pushover', 'telegram'); $testmodals = array('email', 'sms', 'pushover', 'telegram', 'jabber');
foreach ($testmodals as $modal_id) { foreach ($testmodals as $modal_id) {
$modal = new \psm\Util\Module\Modal($this->twig, 'test'.ucfirst($modal_id), \psm\Util\Module\Modal::MODAL_TYPE_OKCANCEL); $modal = new \psm\Util\Module\Modal(
$this->twig,
'test' . ucfirst($modal_id),
\psm\Util\Module\Modal::MODAL_TYPE_OKCANCEL
);
$this->addModal($modal); $this->addModal($modal);
$modal->setTitle(psm_get_lang('servers', 'send_' . $modal_id)); $modal->setTitle(psm_get_lang('servers', 'send_' . $modal_id));
$modal->setMessage(psm_get_lang('config', 'test_' . $modal_id)); $modal->setMessage(psm_get_lang('config', 'test_' . $modal_id));
@ -185,7 +218,8 @@ class ConfigController extends AbstractController {
* If a post has been done, gather all the posted data * If a post has been done, gather all the posted data
* and save it to the database * and save it to the database
*/ */
protected function executeSave() { protected function executeSave()
{
if (!empty($_POST)) { if (!empty($_POST)) {
// save new config // save new config
$clean = array( $clean = array(
@ -198,7 +232,7 @@ class ConfigController extends AbstractController {
: '', : '',
'auto_refresh_servers' => intval(psm_POST('auto_refresh_servers', 0)), 'auto_refresh_servers' => intval(psm_POST('auto_refresh_servers', 0)),
'log_retention_period' => intval(psm_POST('log_retention_period', 365)), 'log_retention_period' => intval(psm_POST('log_retention_period', 365)),
'password_encrypt_key' => psm_POST('password_encrypt_key', sha1(microtime())), 'password_encrypt_key' => psm_POST('password_encrypt_key', sha1(microtime()))
); );
foreach ($this->checkboxes as $input_key) { foreach ($this->checkboxes as $input_key) {
$clean[$input_key] = (isset($_POST[$input_key])) ? '1' : '0'; $clean[$input_key] = (isset($_POST[$input_key])) ? '1' : '0';
@ -208,6 +242,13 @@ class ConfigController extends AbstractController {
$clean[$input_key] = $_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')); $language_refresh = ($clean['language'] != psm_get_conf('language'));
foreach ($clean as $key => $value) { foreach ($clean as $key => $value) {
psm_update_conf($key, $value); psm_update_conf($key, $value);
@ -222,11 +263,13 @@ class ConfigController extends AbstractController {
$this->testPushover(); $this->testPushover();
} elseif (!empty($_POST['test_telegram'])) { } elseif (!empty($_POST['test_telegram'])) {
$this->testTelegram(); $this->testTelegram();
} elseif (!empty($_POST['test_jabber'])) {
$this->testJabber();
} }
if ($language_refresh) { if ($language_refresh) {
header('Location: ' . psm_build_url(array('mod' => 'config'), true, false)); header('Location: ' . psm_build_url(array('mod' => 'config'), true, false));
trigger_error("Redirect failed.", E_USER_ERROR); die();
} }
if (isset($_POST['general_submit'])) { if (isset($_POST['general_submit'])) {
@ -239,6 +282,8 @@ class ConfigController extends AbstractController {
$this->default_tab = 'pushover'; $this->default_tab = 'pushover';
} elseif (isset($_POST['telegram_submit']) || !empty($_POST['test_telegram'])) { } elseif (isset($_POST['telegram_submit']) || !empty($_POST['test_telegram'])) {
$this->default_tab = 'telegram'; $this->default_tab = 'telegram';
} elseif (isset($_POST['jabber_submit']) || !empty($_POST['test_jabber'])) {
$this->default_tab = 'jabber';
} }
} }
return $this->runAction('index'); return $this->runAction('index');
@ -249,7 +294,8 @@ class ConfigController extends AbstractController {
* *
* @todo move test to separate class * @todo move test to separate class
*/ */
protected function testEmail() { protected function testEmail()
{
$mail = psm_build_mail(); $mail = psm_build_mail();
$message = psm_get_lang('config', 'test_message'); $message = psm_get_lang('config', 'test_message');
$mail->Subject = psm_get_lang('config', 'test_subject'); $mail->Subject = psm_get_lang('config', 'test_subject');
@ -270,7 +316,8 @@ class ConfigController extends AbstractController {
* *
* @todo move test to separate class * @todo move test to separate class
*/ */
protected function testSMS() { protected function testSMS()
{
$sms = psm_build_sms(); $sms = psm_build_sms();
if ($sms) { if ($sms) {
$user = $this->getUser()->getUser(); $user = $this->getUser()->getUser();
@ -293,7 +340,8 @@ class ConfigController extends AbstractController {
* *
* @todo move test to separate class * @todo move test to separate class
*/ */
protected function testPushover() { protected function testPushover()
{
$pushover = psm_build_pushover(); $pushover = psm_build_pushover();
$pushover->setDebug(true); $pushover->setDebug(true);
$user = $this->getUser()->getUser(); $user = $this->getUser()->getUser();
@ -331,7 +379,8 @@ class ConfigController extends AbstractController {
* *
* @todo move test to separate class * @todo move test to separate class
*/ */
protected function testTelegram() { protected function testTelegram()
{
$telegram = psm_build_telegram(); $telegram = psm_build_telegram();
$user = $this->getUser()->getUser(); $user = $this->getUser()->getUser();
$apiToken = psm_get_conf('telegram_api_token'); $apiToken = psm_get_conf('telegram_api_token');
@ -359,16 +408,39 @@ class ConfigController extends AbstractController {
} }
} }
protected function getLabels() { /**
* Test Jabber.
*/
protected function testJabber()
{
$user = $this->getUser()->getUser();
psm_jabber_send_message(
psm_get_conf('jabber_host'),
psm_get_conf('jabber_username'),
psm_password_decrypt(psm_get_conf('password_encrypt_key'), psm_get_conf('jabber_password')),
[$user->jabber],
psm_get_lang('config', 'test_message'),
(trim(psm_get_conf('jabber_port')) !== '' ? (int)psm_get_conf('jabber_port') : null),
(trim(psm_get_conf('jabber_domain')) !== '' ? psm_get_conf('jabber_domain') : null)
);
// no message - async ... so just info
$this->addMessage(psm_get_lang('config', 'jabber_check'), 'info');
// @todo possible to set message via ajax with callback ...
}
protected function getLabels()
{
return array( return array(
'label_tab_email' => psm_get_lang('config', 'tab_email'), 'label_tab_email' => psm_get_lang('config', 'tab_email'),
'label_tab_sms' => psm_get_lang('config', 'tab_sms'), 'label_tab_sms' => psm_get_lang('config', 'tab_sms'),
'label_tab_pushover' => psm_get_lang('config', 'tab_pushover'), 'label_tab_pushover' => psm_get_lang('config', 'tab_pushover'),
'label_tab_telegram' => psm_get_lang('config', 'tab_telegram'), 'label_tab_telegram' => psm_get_lang('config', 'tab_telegram'),
'label_tab_jabber' => psm_get_lang('config', 'tab_jabber'),
'label_settings_email' => psm_get_lang('config', 'settings_email'), 'label_settings_email' => psm_get_lang('config', 'settings_email'),
'label_settings_sms' => psm_get_lang('config', 'settings_sms'), 'label_settings_sms' => psm_get_lang('config', 'settings_sms'),
'label_settings_pushover' => psm_get_lang('config', 'settings_pushover'), 'label_settings_pushover' => psm_get_lang('config', 'settings_pushover'),
'label_settings_telegram' => psm_get_lang('config', 'settings_telegram'), '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'), 'label_settings_notification' => psm_get_lang('config', 'settings_notification'),
'label_settings_log' => psm_get_lang('config', 'settings_log'), 'label_settings_log' => psm_get_lang('config', 'settings_log'),
'label_settings_proxy' => psm_get_lang('config', 'settings_proxy'), 'label_settings_proxy' => psm_get_lang('config', 'settings_proxy'),
@ -409,6 +481,18 @@ class ConfigController extends AbstractController {
'label_telegram_status' => psm_get_lang('config', 'telegram_status'), 'label_telegram_status' => psm_get_lang('config', 'telegram_status'),
'label_telegram_api_token' => psm_get_lang('config', 'telegram_api_token'), '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_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'),
'label_jabber_host_description' => psm_get_lang('config', 'jabber_host_description'),
'label_jabber_port' => psm_get_lang('config', 'jabber_port'),
'label_jabber_port_description' => psm_get_lang('config', 'jabber_port_description'),
'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'),
'label_jabber_password' => psm_get_lang('config', 'jabber_password'),
'label_jabber_password_description' => psm_get_lang('config', 'jabber_password_description'),
'label_alert_type' => psm_get_lang('config', 'alert_type'), 'label_alert_type' => psm_get_lang('config', 'alert_type'),
'label_alert_type_description' => psm_get_lang('config', 'alert_type_description'), 'label_alert_type_description' => psm_get_lang('config', 'alert_type_description'),
'label_combine_notifications' => psm_get_lang('config', 'combine_notifications'), 'label_combine_notifications' => psm_get_lang('config', 'combine_notifications'),
@ -419,6 +503,7 @@ class ConfigController extends AbstractController {
'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_log_jabber' => psm_get_lang('config', 'log_jabber'),
'label_alert_proxy' => psm_get_lang('config', 'alert_proxy'), 'label_alert_proxy' => psm_get_lang('config', 'alert_proxy'),
'label_alert_proxy_url' => psm_get_lang('config', 'alert_proxy_url'), 'label_alert_proxy_url' => psm_get_lang('config', 'alert_proxy_url'),
'label_auto_refresh' => psm_get_lang('config', 'auto_refresh'), 'label_auto_refresh' => psm_get_lang('config', 'auto_refresh'),
@ -430,6 +515,7 @@ class ConfigController extends AbstractController {
'label_log_retention_period_description' => psm_get_lang('config', 'log_retention_period_description'), 'label_log_retention_period_description' => psm_get_lang('config', 'log_retention_period_description'),
'label_log_retention_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_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.
@ -27,10 +28,12 @@
**/ **/
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);

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,12 +28,15 @@
**/ **/
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);
@ -47,7 +51,8 @@ class ErrorController extends AbstractController {
* *
* @return string * @return string
*/ */
protected function execute401() { protected function execute401()
{
return $this->twig->render('module/error/401.tpl.html', array( return $this->twig->render('module/error/401.tpl.html', array(
'label_title' => psm_get_lang('error', '401_unauthorized'), 'label_title' => psm_get_lang('error', '401_unauthorized'),
'label_description' => psm_get_lang('error', '401_unauthorized_description'), '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.
@ -27,10 +28,12 @@
**/ **/
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
@ -44,7 +47,8 @@ class InstallController extends AbstractController {
*/ */
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);
@ -64,19 +68,30 @@ class InstallController extends AbstractController {
/** /**
* Say hi to our new user * Say hi to our new user
*/ */
protected function executeIndex() { protected function executeIndex()
{
// build prerequisites // build prerequisites
$errors = 0; $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 (
version_compare($phpv, '5.6.0', '<') ||
(version_compare($phpv, '7.0.8', '<') && version_compare($phpv, '7.0.0', '>='))
) {
$errors++; $errors++;
$this->addMessage('PHP 5.5.9+ or 7.0.8+ is required to run PHP Server Monitor. You\'re using '.$phpv.'.', 'error'); $this->addMessage('PHP 5.6.0+ or 7.0.8+ is required to run PHP Server Monitor. You\'re using ' .
$phpv . '.', 'error');
} else { } else {
$this->addMessage('PHP version: ' . $phpv, 'success'); $this->addMessage('PHP version: ' . $phpv, 'success');
} }
if (version_compare(PHP_RELEASE_VERSION, '7', '<')) { if (version_compare(PHP_RELEASE_VERSION, '7', '<')) {
$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'); $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'
);
} }
if (!function_exists('curl_init')) { if (!function_exists('curl_init')) {
$this->addMessage('PHP is installed without the cURL module. Please install cURL.', 'warning'); $this->addMessage('PHP is installed without the cURL module. Please install cURL.', 'warning');
@ -88,11 +103,19 @@ class InstallController extends AbstractController {
$this->addMessage('The PDO MySQL driver needs to be installed.', 'error'); $this->addMessage('The PDO MySQL driver needs to be installed.', 'error');
} }
if (!ini_get('date.timezone')) { 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'); $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(
@ -103,7 +126,8 @@ class InstallController extends AbstractController {
/** /**
* 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_name = 'module/install/config_new.tpl.html';
$tpl_data = array(); $tpl_data = array();
@ -114,8 +138,9 @@ class InstallController extends AbstractController {
$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(); $values = $this->parseConfig20();
} else { } else {
// fresh install // fresh install
@ -175,14 +200,17 @@ class InstallController extends AbstractController {
$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(
'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.'
);
$tpl_name = 'module/install/config_new_user.tpl.html'; $tpl_name = 'module/install/config_new_user.tpl.html';
} } elseif (version_compare($version_from, PSM_VERSION, '=')) {
elseif (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');
$tpl_name = 'module/install/success.tpl.html'; $tpl_name = 'module/install/success.tpl.html';
} } else {
else {
$this->addMessage('We have discovered a previous version.'); $this->addMessage('We have discovered a previous version.');
$tpl_name = 'module/install/config_upgrade.tpl.html'; $tpl_name = 'module/install/config_upgrade.tpl.html';
$tpl_data['version'] = PSM_VERSION; $tpl_data['version'] = PSM_VERSION;
@ -195,7 +223,10 @@ class InstallController extends AbstractController {
$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(); $tpl_data['messages'] = $this->getMessages();
@ -205,7 +236,8 @@ class InstallController extends AbstractController {
/** /**
* 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()) { if (!defined('PSM_DB_PREFIX') || !$this->db->status()) {
return $this->executeConfig(); return $this->executeConfig();
} }
@ -225,6 +257,7 @@ class InstallController extends AbstractController {
'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');
@ -246,7 +279,6 @@ class InstallController extends AbstractController {
} 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', '<')) { if (version_compare($version_from, '3.0.0', '<')) {
$add_user = true; $add_user = true;
@ -255,7 +287,7 @@ class InstallController extends AbstractController {
} else { } else {
// validate the lot // validate the lot
try { try {
$validator->username_new($new_user['user_name']); $validator->usernameNew($new_user['user_name']);
$validator->email($new_user['email']); $validator->email($new_user['email']);
$validator->password($new_user['password'], $new_user['password_repeat']); $validator->password($new_user['password'], $new_user['password_repeat']);
} catch (\InvalidArgumentException $e) { } catch (\InvalidArgumentException $e) {
@ -290,7 +322,8 @@ class InstallController extends AbstractController {
* @param array $array_config prefix,user,pass,name,host * @param array $array_config prefix,user,pass,name,host
* @return boolean|string TRUE on success, string with config otherwise * @return boolean|string TRUE on success, string with config otherwise
*/ */
protected function writeConfigFile($array_config) { protected function writeConfigFile($array_config)
{
$config = "<?php" . PHP_EOL; $config = "<?php" . PHP_EOL;
foreach ($array_config as $key => $value) { foreach ($array_config as $key => $value) {
@ -314,7 +347,8 @@ class InstallController extends AbstractController {
* Parse the 2.0 config file for prefilling * Parse the 2.0 config file for prefilling
* @return array * @return array
*/ */
protected function parseConfig20() { protected function parseConfig20()
{
$config_old = file_get_contents($this->path_config_old); $config_old = file_get_contents($this->path_config_old);
$vars = array( $vars = array(
'prefix' => '', 'prefix' => '',
@ -338,7 +372,8 @@ class InstallController extends AbstractController {
/** /**
* Is it an upgrade or install? * Is it an upgrade or install?
*/ */
protected function isUpgrade() { protected function isUpgrade()
{
if (!$this->db->status()) { if (!$this->db->status()) {
return false; return false;
} }
@ -349,7 +384,8 @@ class InstallController extends AbstractController {
* Get the previous version from the config table * Get the previous version from the config table
* @return boolean|string FALSE on failure, string otherwise * @return boolean|string FALSE on failure, string otherwise
*/ */
protected function getPreviousVersion() { protected function getPreviousVersion()
{
if (!$this->isUpgrade()) { if (!$this->isUpgrade()) {
return false; return false;
} }
@ -370,7 +406,8 @@ class InstallController extends AbstractController {
* Get base url of the current application * Get base url of the current application
* @return string * @return string
*/ */
protected function getBaseUrl() { protected function getBaseUrl()
{
$sym_request = \Symfony\Component\HttpFoundation\Request::createFromGlobals(); $sym_request = \Symfony\Component\HttpFoundation\Request::createFromGlobals();
return $sym_request->getSchemeAndHttpHost() . $sym_request->getBasePath(); 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.
@ -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.
@ -27,9 +28,11 @@
**/ **/
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);

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,21 +28,20 @@
**/ **/
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 * Get all servers for the current user
* @param Countable|array|\PDOStatement $server_id (int) if true only that server will be retrieved. * @param Countable|array|\PDOStatement $server_id (int) if true only that server will be retrieved.
* @return array * @return array
*/ */
public function getServers($server_id = null) { public function getServers($server_id = null)
{
$sql_join = ''; $sql_join = '';
$sql_where = ''; $sql_where = '';
@ -83,8 +83,11 @@ 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`,
@ -109,7 +112,8 @@ abstract class AbstractServerController extends AbstractController {
* @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['rtime'] = round((float) $server['rtime'], 4);
$server['last_online'] = psm_timespan($server['last_online']); $server['last_online'] = psm_timespan($server['last_online']);
$server['last_offline'] = psm_timespan($server['last_offline']); $server['last_offline'] = psm_timespan($server['last_offline']);
@ -119,7 +123,16 @@ abstract class AbstractServerController extends AbstractController {
} }
$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'] == '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['status'] = '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,14 +27,17 @@
**/ **/
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(
@ -44,7 +48,8 @@ class LogController extends AbstractServerController {
/** /**
* 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')); $this->twig->addGlobal('subtitle', psm_get_lang('menu', 'server_log'));
$tpl_data = array( $tpl_data = array(
'label_status' => psm_get_lang('log', 'status'), 'label_status' => psm_get_lang('log', 'status'),
@ -52,6 +57,7 @@ class LogController extends AbstractServerController {
'label_sms' => psm_get_lang('log', 'sms'), 'label_sms' => psm_get_lang('log', 'sms'),
'label_pushover' => psm_get_lang('log', 'pushover'), 'label_pushover' => psm_get_lang('log', 'pushover'),
'label_telegram' => psm_get_lang('log', 'telegram'), 'label_telegram' => psm_get_lang('log', 'telegram'),
'label_jabber' => psm_get_lang('log', 'jabber'),
'label_title' => psm_get_lang('log', 'title'), 'label_title' => psm_get_lang('log', 'title'),
'label_server' => psm_get_lang('servers', 'server'), 'label_server' => psm_get_lang('servers', 'server'),
'label_type' => psm_get_lang('log', 'type'), 'label_type' => psm_get_lang('log', 'type'),
@ -83,7 +89,7 @@ class LogController extends AbstractServerController {
); );
} }
$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);
@ -130,7 +136,8 @@ class LogController extends AbstractServerController {
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. * Empty table log and log_users.
* Only when user is admin. * Only when user is admin.
@ -148,7 +155,8 @@ class LogController extends AbstractServerController {
* @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 = ''; $sql_join = '';
if ($this->getUser()->getUserLevel() > PSM_USER_ADMIN) { if ($this->getUser()->getUserLevel() > PSM_USER_ADMIN) {
// restrict by user_id // restrict by user_id
@ -183,7 +191,8 @@ class LogController extends AbstractServerController {
* @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( return $this->db->query(
"SELECT "SELECT
u.`user_id`, u.`user_id`,

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,12 +27,14 @@
**/ **/
namespace psm\Module\Server\Controller; namespace psm\Module\Server\Controller;
use psm\Service\Database; use psm\Service\Database;
/** /**
* Server module. Add/edit/delete servers, show a list of all servers etc. * Server module. Add/edit/delete servers, show a list of all servers etc.
*/ */
class ServerController extends AbstractServerController { class ServerController extends AbstractServerController
{
/** /**
* Current server id * Current server id
@ -39,7 +42,8 @@ class ServerController extends AbstractServerController {
*/ */
protected $server_id; protected $server_id;
function __construct(Database $db, \Twig_Environment $twig) { public function __construct(Database $db, \Twig_Environment $twig)
{
parent::__construct($db, $twig); parent::__construct($db, $twig);
$this->server_id = isset($_GET['id']) ? intval($_GET['id']) : 0; $this->server_id = isset($_GET['id']) ? intval($_GET['id']) : 0;
@ -59,7 +63,8 @@ class ServerController extends AbstractServerController {
/** /**
* 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()
{
$tpl_data = $this->getLabels(); $tpl_data = $this->getLabels();
$tpl_data['user_level'] = $this->getUser()->getUserLevel(); $tpl_data['user_level'] = $this->getUser()->getUserLevel();
$sidebar = new \psm\Util\Module\Sidebar($this->twig); $sidebar = new \psm\Util\Module\Sidebar($this->twig);
@ -97,6 +102,7 @@ class ServerController extends AbstractServerController {
'sms' => 'icon-mobile', 'sms' => 'icon-mobile',
'pushover' => 'icon-pushover', 'pushover' => 'icon-pushover',
'telegram' => 'icon-telegram', 'telegram' => 'icon-telegram',
'jabber' => 'icon-jabber'
); );
$servers = $this->getServers(); $servers = $this->getServers();
@ -106,7 +112,11 @@ class ServerController extends AbstractServerController {
if ($servers[$x]['type'] == 'website') { if ($servers[$x]['type'] == 'website') {
// add link to label // add link to label
$ip = $servers[$x]['ip']; $ip = $servers[$x]['ip'];
$servers[$x]['ip'] = '<a href="'.$servers[$x]['ip'].'" target="_blank" rel="noopener">'.$ip.'</a>'; $servers[$x]['ip'] = '<a href="' . $servers[$x]['ip'] .
'" target="_blank" rel="noopener">' . $ip . '</a>';
}
if ($servers[$x]['type'] == 'ping') {
$servers[$x]['port'] = '';
} }
if (($servers[$x]['active'] == 'yes')) { if (($servers[$x]['active'] == 'yes')) {
$servers[$x]['active_title'] = psm_get_lang('servers', 'monitoring'); $servers[$x]['active_title'] = psm_get_lang('servers', 'monitoring');
@ -117,15 +127,28 @@ class ServerController extends AbstractServerController {
$servers[$x] = $this->formatServer($servers[$x]); $servers[$x] = $this->formatServer($servers[$x]);
} }
$tpl_data['servers'] = $servers; $tpl_data['servers'] = $servers;
$tpl_data['config']['email'] = psm_get_conf('email_status');
$tpl_data['config']['sms'] = psm_get_conf('sms_status');
$tpl_data['config']['pushover'] = psm_get_conf('pushover_status');
$tpl_data['config']['telegram'] = psm_get_conf('telegram_status');
return $this->twig->render('module/server/server/list.tpl.html', $tpl_data); return $this->twig->render('module/server/server/list.tpl.html', $tpl_data);
} }
/** /**
* Prepare the template to show the update screen for a single server * Prepare the template to show the update screen for a single server
*/ */
protected function executeEdit() { protected function executeEdit()
{
$back_to = isset($_GET['back_to']) ? $_GET['back_to'] : ''; $back_to = isset($_GET['back_to']) ? $_GET['back_to'] : '';
$modal = new \psm\Util\Module\Modal($this->twig, 'delete', \psm\Util\Module\Modal::MODAL_TYPE_DANGER);
$this->addModal($modal);
$modal->setTitle(psm_get_lang('servers', 'delete_title'));
$modal->setMessage(psm_get_lang('servers', 'delete_message'));
$modal->setOKButtonLabel(psm_get_lang('system', 'delete'));
$tpl_data = $this->getLabels(); $tpl_data = $this->getLabels();
$tpl_data['edit_server_id'] = $this->server_id; $tpl_data['edit_server_id'] = $this->server_id;
$tpl_data['url_save'] = psm_build_url(array( $tpl_data['url_save'] = psm_build_url(array(
@ -134,10 +157,17 @@ class ServerController extends AbstractServerController {
'id' => $this->server_id, 'id' => $this->server_id,
'back_to' => $back_to, 'back_to' => $back_to,
)); ));
$tpl_data['url_delete'] = psm_build_url(array(
'mod' => 'server',
'action' => 'delete',
'id' => $this->server_id,
));
// depending on where the user came from, add the go back url: // depending on where the user came from, add the go back url:
if ($back_to == 'view' && $this->server_id > 0) { if ($back_to == 'view' && $this->server_id > 0) {
$tpl_data['url_go_back'] = psm_build_url(array('mod' => 'server', 'action' => 'view', 'id' => $this->server_id)); $tpl_data['url_go_back'] = psm_build_url(
array('mod' => 'server', 'action' => 'view', 'id' => $this->server_id)
);
} else { } else {
$tpl_data['url_go_back'] = psm_build_url(array('mod' => 'server')); $tpl_data['url_go_back'] = psm_build_url(array('mod' => 'server'));
} }
@ -196,23 +226,27 @@ class ServerController extends AbstractServerController {
'edit_value_header_name' => $edit_server['header_name'], 'edit_value_header_name' => $edit_server['header_name'],
'edit_value_header_value' => $edit_server['header_value'], 'edit_value_header_value' => $edit_server['header_value'],
'edit_value_warning_threshold' => $edit_server['warning_threshold'], 'edit_value_warning_threshold' => $edit_server['warning_threshold'],
'edit_website_username' => $edit_server['website_username'], 'edit_value_website_username' => $edit_server['website_username'],
'edit_website_password' => empty($edit_server['website_password']) ? '' : sha1($edit_server['website_password']), 'edit_value_website_password' => empty($edit_server['website_password']) ? '' :
sha1($edit_server['website_password']),
'edit_value_ssl_cert_expiry_days' => $edit_server['ssl_cert_expiry_days'],
'edit_type_selected_' . $edit_server['type'] => 'selected="selected"', 'edit_type_selected_' . $edit_server['type'] => 'selected="selected"',
'edit_active_selected' => $edit_server['active'], 'edit_active_selected' => $edit_server['active'],
'edit_email_selected' => $edit_server['email'], 'edit_email_selected' => $edit_server['email'],
'edit_sms_selected' => $edit_server['sms'], 'edit_sms_selected' => $edit_server['sms'],
'edit_pushover_selected' => $edit_server['pushover'], 'edit_pushover_selected' => $edit_server['pushover'],
'edit_telegram_selected' => $edit_server['telegram'], 'edit_telegram_selected' => $edit_server['telegram'],
'edit_jabber_selected' => $edit_server['jabber'],
)); ));
} }
$notifications = array('email', 'sms', 'pushover', 'telegram'); $notifications = array('email', 'sms', 'pushover', 'telegram', 'jabber');
foreach ($notifications as $notification) { foreach ($notifications as $notification) {
if (psm_get_conf($notification . '_status') == 0) { if (psm_get_conf($notification . '_status') == 0) {
$tpl_data['warning_' . $notification] = true; $tpl_data['warning_' . $notification] = true;
$tpl_data['label_warning_' . $notification] = psm_get_lang( $tpl_data['label_warning_' . $notification] = psm_get_lang(
'servers', 'warning_notifications_disabled_'.$notification 'servers',
'warning_notifications_disabled_' . $notification
); );
} else { } else {
$tpl_data['warning_' . $notification] = false; $tpl_data['warning_' . $notification] = false;
@ -225,7 +259,8 @@ class ServerController extends AbstractServerController {
/** /**
* Executes the saving of one of the servers * Executes the saving of one of the servers
*/ */
protected function executeSave() { protected function executeSave()
{
if (empty($_POST)) { if (empty($_POST)) {
// dont process anything if no data has been posted // dont process anything if no data has been posted
return $this->executeIndex(); return $this->executeIndex();
@ -244,7 +279,8 @@ class ServerController extends AbstractServerController {
if ($new_password == $hash) { if ($new_password == $hash) {
$encrypted_password = $edit_server['website_password']; $encrypted_password = $edit_server['website_password'];
} else { } else {
$encrypted_password = psm_password_encrypt(strval($this->server_id).psm_get_conf('password_encrypt_key'), $new_password); $encrypted_password = psm_password_encrypt(strval($this->server_id) .
psm_get_conf('password_encrypt_key'), $new_password);
} }
} }
} }
@ -252,7 +288,7 @@ class ServerController extends AbstractServerController {
$clean = array( $clean = array(
'label' => trim(strip_tags(psm_POST('label', ''))), 'label' => trim(strip_tags(psm_POST('label', ''))),
'ip' => trim(strip_tags(psm_POST('ip', ''))), 'ip' => trim(strip_tags(psm_POST('ip', ''))),
'timeout' => (isset($_POST['timeout']) && intval($_POST['timeout']) > 0) ? intval($_POST['timeout']) : null, 'timeout' => (isset($_POST['timeout']) && intval($_POST['timeout']) > 0) ? intval($_POST['timeout']) : 10,
'website_username' => psm_POST('website_username'), 'website_username' => psm_POST('website_username'),
'website_password' => $encrypted_password, 'website_password' => $encrypted_password,
'port' => intval(psm_POST('port', 0)), 'port' => intval(psm_POST('port', 0)),
@ -260,20 +296,28 @@ class ServerController extends AbstractServerController {
'post_field' => empty(psm_POST('post_field')) ? null : psm_POST('post_field'), 'post_field' => empty(psm_POST('post_field')) ? null : psm_POST('post_field'),
'type' => psm_POST('type', ''), 'type' => psm_POST('type', ''),
'pattern' => psm_POST('pattern', ''), 'pattern' => psm_POST('pattern', ''),
'pattern_online' => in_array($_POST['pattern_online'], array('yes', 'no')) ? $_POST['pattern_online'] : 'yes', 'pattern_online' => in_array($_POST['pattern_online'], array('yes', 'no')) ?
'redirect_check' => in_array($_POST['redirect_check'], array('ok', 'bad')) ? $_POST['redirect_check'] : 'bad', $_POST['pattern_online'] : 'yes',
'redirect_check' => in_array($_POST['redirect_check'], array('ok', 'bad')) ?
$_POST['redirect_check'] : 'bad',
'allow_http_status' => psm_POST('allow_http_status', ''), 'allow_http_status' => psm_POST('allow_http_status', ''),
'header_name' => psm_POST('header_name', ''), 'header_name' => psm_POST('header_name', ''),
'header_value' => psm_POST('header_value', ''), 'header_value' => psm_POST('header_value', ''),
'warning_threshold' => intval(psm_POST('warning_threshold', 0)), 'warning_threshold' => intval(psm_POST('warning_threshold', 0)),
'ssl_cert_expiry_days' => intval(psm_POST('ssl_cert_expiry_days', 1)),
'active' => in_array($_POST['active'], array('yes', 'no')) ? $_POST['active'] : 'no', 'active' => in_array($_POST['active'], array('yes', 'no')) ? $_POST['active'] : 'no',
'email' => in_array($_POST['email'], array('yes', 'no')) ? $_POST['email'] : 'no', 'email' => in_array($_POST['email'], array('yes', 'no')) ? $_POST['email'] : 'no',
'sms' => in_array($_POST['sms'], array('yes', 'no')) ? $_POST['sms'] : 'no', 'sms' => in_array($_POST['sms'], array('yes', 'no')) ? $_POST['sms'] : 'no',
'pushover' => in_array($_POST['pushover'], array('yes', 'no')) ? $_POST['pushover'] : 'no', 'pushover' => in_array($_POST['pushover'], array('yes', 'no')) ? $_POST['pushover'] : 'no',
'telegram' => in_array($_POST['telegram'], array('yes', 'no')) ? $_POST['telegram'] : 'no', 'telegram' => in_array($_POST['telegram'], array('yes', 'no')) ? $_POST['telegram'] : 'no',
'jabber' => in_array($_POST['jabber'], array('yes', 'no')) ? $_POST['jabber'] : 'no',
); );
// make sure websites start with http:// // make sure websites start with http://
if ($clean['type'] == 'website' && substr($clean['ip'], 0, 4) != 'http' && substr($clean['ip'], 0, 3) != 'rdp') { if (
$clean['type'] == 'website' &&
substr($clean['ip'], 0, 4) != 'http' &&
substr($clean['ip'], 0, 3) != 'rdp'
) {
$clean['ip'] = 'http://' . $clean['ip']; $clean['ip'] = 'http://' . $clean['ip'];
} }
@ -306,6 +350,7 @@ class ServerController extends AbstractServerController {
$server_validator->type($clean['type']); $server_validator->type($clean['type']);
$server_validator->ip($clean['ip'], $clean['type']); $server_validator->ip($clean['ip'], $clean['type']);
$server_validator->warningThreshold($clean['warning_threshold']); $server_validator->warningThreshold($clean['warning_threshold']);
$server_validator->sslCertExpiryDays($clean['ssl_cert_expiry_days']);
} catch (\InvalidArgumentException $ex) { } catch (\InvalidArgumentException $ex) {
$this->addMessage(psm_get_lang('servers', 'error_' . $ex->getMessage()), 'error'); $this->addMessage(psm_get_lang('servers', 'error_' . $ex->getMessage()), 'error');
return $this->executeEdit(); return $this->executeEdit();
@ -371,7 +416,8 @@ class ServerController extends AbstractServerController {
/** /**
* Executes the deletion of one of the servers * Executes the deletion of one of the servers
*/ */
protected function executeDelete() { protected function executeDelete()
{
if (isset($_GET['id'])) { if (isset($_GET['id'])) {
$id = intval($_GET['id']); $id = intval($_GET['id']);
// do delete // do delete
@ -391,7 +437,8 @@ class ServerController extends AbstractServerController {
/** /**
* Prepare the view template * Prepare the view template
*/ */
protected function executeView() { protected function executeView()
{
if ($this->server_id == 0) { if ($this->server_id == 0) {
return $this->runAction('index'); return $this->runAction('index');
} }
@ -412,7 +459,8 @@ class ServerController extends AbstractServerController {
$this->setSidebar($sidebar); $this->setSidebar($sidebar);
// check which module the user came from, and add a link accordingly // check which module the user came from, and add a link accordingly
$back_to = isset($_GET['back_to']) && ($_GET['back_to'] == 'server_status' || $_GET['back_to'] == 'user') ? $_GET['back_to'] : 'server'; $back_to = isset($_GET['back_to']) && ($_GET['back_to'] == 'server_status' || $_GET['back_to'] == 'user') ?
$_GET['back_to'] : 'server';
$sidebar->addButton( $sidebar->addButton(
'go_back', 'go_back',
psm_get_lang('system', 'go_back'), psm_get_lang('system', 'go_back'),
@ -425,7 +473,9 @@ class ServerController extends AbstractServerController {
// add edit/delete buttons for admins // add edit/delete buttons for admins
if ($this->getUser()->getUserLevel() == PSM_USER_ADMIN) { if ($this->getUser()->getUserLevel() == PSM_USER_ADMIN) {
$tpl_data['has_admin_actions'] = true; $tpl_data['has_admin_actions'] = true;
$tpl_data['url_edit'] = psm_build_url(array('mod' => 'server', 'action' => 'edit', 'id' => $this->server_id, 'back_to' => 'view')); $tpl_data['url_edit'] = psm_build_url(
array('mod' => 'server', 'action' => 'edit', 'id' => $this->server_id, 'back_to' => 'view')
);
$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);
@ -436,7 +486,9 @@ class ServerController extends AbstractServerController {
$sidebar->addButton( $sidebar->addButton(
'edit', 'edit',
psm_get_lang('system', 'edit'), psm_get_lang('system', 'edit'),
psm_build_url(array('mod' => 'server', 'action' => 'edit', 'id' => $this->server_id, 'back_to' => 'view')), psm_build_url(
array('mod' => 'server', 'action' => 'edit', 'id' => $this->server_id, 'back_to' => 'view')
),
'edit', 'edit',
'primary', 'primary',
psm_get_lang('system', 'edit') psm_get_lang('system', 'edit')
@ -449,7 +501,9 @@ class ServerController extends AbstractServerController {
foreach ($servers as $i => $server_available) { foreach ($servers as $i => $server_available) {
$tpl_data['options'][] = array( $tpl_data['options'][] = array(
'class_active' => ($server_available['server_id'] == $this->server_id) ? 'active' : '', 'class_active' => ($server_available['server_id'] == $this->server_id) ? 'active' : '',
'url' => psm_build_url(array('mod' => 'server', 'action' => 'view', 'id' => $server_available['server_id'])), 'url' => psm_build_url(
array('mod' => 'server', 'action' => 'view', 'id' => $server_available['server_id'])
),
'label' => $server_available['label'], 'label' => $server_available['label'],
); );
} }
@ -468,7 +522,8 @@ class ServerController extends AbstractServerController {
return $this->twig->render('module/server/server/view.tpl.html', $tpl_data); return $this->twig->render('module/server/server/view.tpl.html', $tpl_data);
} }
protected function getLabels() { protected function getLabels()
{
return array( return array(
'label_label' => psm_get_lang('servers', 'label'), 'label_label' => psm_get_lang('servers', 'label'),
'label_status' => psm_get_lang('servers', 'status'), 'label_status' => psm_get_lang('servers', 'status'),
@ -524,11 +579,15 @@ class ServerController extends AbstractServerController {
'label_send_sms' => psm_get_lang('servers', 'send_sms'), 'label_send_sms' => psm_get_lang('servers', 'send_sms'),
'label_send_pushover' => psm_get_lang('servers', 'send_pushover'), 'label_send_pushover' => psm_get_lang('servers', 'send_pushover'),
'label_telegram' => psm_get_lang('servers', 'telegram'), 'label_telegram' => psm_get_lang('servers', 'telegram'),
'label_jabber' => psm_get_lang('servers', 'jabber'),
'label_pushover' => psm_get_lang('servers', 'pushover'), 'label_pushover' => psm_get_lang('servers', 'pushover'),
'label_send_telegram' => psm_get_lang('servers', 'send_telegram'), 'label_send_telegram' => psm_get_lang('servers', 'send_telegram'),
'label_send_jabber' => psm_get_lang('servers', 'send_jabber'),
'label_users' => psm_get_lang('servers', 'users'), 'label_users' => psm_get_lang('servers', 'users'),
'label_warning_threshold' => psm_get_lang('servers', 'warning_threshold'), 'label_warning_threshold' => psm_get_lang('servers', 'warning_threshold'),
'label_warning_threshold_description' => psm_get_lang('servers', 'warning_threshold_description'), 'label_warning_threshold_description' => psm_get_lang('servers', 'warning_threshold_description'),
'label_ssl_cert_expiry_days' => psm_get_lang('servers', 'ssl_cert_expiry_days'),
'label_ssl_cert_expiry_days_description' => psm_get_lang('servers', 'ssl_cert_expiry_days_description'),
'label_action' => psm_get_lang('system', 'action'), 'label_action' => psm_get_lang('system', 'action'),
'label_save' => psm_get_lang('system', 'save'), 'label_save' => psm_get_lang('system', 'save'),
'label_go_back' => psm_get_lang('system', 'go_back'), 'label_go_back' => psm_get_lang('system', 'go_back'),
@ -555,7 +614,8 @@ class ServerController extends AbstractServerController {
* @param int $server_id * @param int $server_id
* @return array with ids only * @return array with ids only
*/ */
protected function getServerUsers($server_id) { protected function getServerUsers($server_id)
{
$users = $this->db->select( $users = $this->db->select(
PSM_DB_PREFIX . 'users_servers', PSM_DB_PREFIX . 'users_servers',
array('server_id' => $server_id), array('server_id' => $server_id),

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,14 +28,17 @@
**/ **/
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');
@ -44,7 +48,8 @@ class StatusController extends AbstractServerController {
/** /**
* 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 // set background color to black
$this->black_background = true; $this->black_background = true;
$this->twig->addGlobal('subtitle', psm_get_lang('menu', 'server_status')); $this->twig->addGlobal('subtitle', psm_get_lang('menu', 'server_status'));
@ -73,6 +78,7 @@ class StatusController extends AbstractServerController {
$servers = $this->getServers(); $servers = $this->getServers();
$layout_data['servers_offline'] = array(); $layout_data['servers_offline'] = array();
$layout_data['servers_warning'] = array();
$layout_data['servers_online'] = array(); $layout_data['servers_online'] = array();
foreach ($servers as $server) { foreach ($servers as $server) {
@ -86,13 +92,16 @@ class StatusController extends AbstractServerController {
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) {
$layout_data['servers_warning'][] = $server;
} else { } else {
$layout_data['servers_online'][] = $server; $layout_data['servers_online'][] = $server;
} }
@ -113,7 +122,8 @@ class StatusController extends AbstractServerController {
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()) { if ($this->isXHR()) {
$layout = psm_POST('layout', 0); $layout = psm_POST('layout', 0);
$this->getUser()->setUserPref('status_layout', $layout); $this->getUser()->setUserPref('status_layout', $layout);

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,25 +29,28 @@
**/ **/
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 = $this->container->get('util.server.updatemanager');
$autorun->run(); $autorun->run();
header('Location: ' . psm_build_url(array( header('Location: ' . psm_build_url(array(
'mod' => 'server_status' 'mod' => 'server_status'
), true, false)); ), true, false));
trigger_error("Redirect failed.", E_USER_ERROR); 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.
@ -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,12 +28,15 @@
**/ **/
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);
@ -44,7 +48,8 @@ class LoginController extends AbstractController {
$this->addMenu(false); $this->addMenu(false);
} }
protected function executeLogin() { protected function executeLogin()
{
if (isset($_POST['user_name']) && isset($_POST['user_password'])) { if (isset($_POST['user_name']) && isset($_POST['user_password'])) {
$rememberme = (isset($_POST['user_rememberme'])) ? true : false; $rememberme = (isset($_POST['user_rememberme'])) ? true : false;
$result = $this->getUser()->loginWithPostData( $result = $this->getUser()->loginWithPostData(
@ -55,8 +60,11 @@ class LoginController extends AbstractController {
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(
empty($_SERVER["QUERY_STRING"]) ? null : $_SERVER["QUERY_STRING"]
));
die();
} else { } else {
$this->addMessage(psm_get_lang('login', 'error_login_incorrect'), 'error'); $this->addMessage(psm_get_lang('login', 'error_login_incorrect'), 'error');
} }
@ -81,7 +89,8 @@ class LoginController extends AbstractController {
* *
* @return string * @return string
*/ */
protected function executeForgot() { protected function executeForgot()
{
if (isset($_POST['user_name'])) { if (isset($_POST['user_name'])) {
$user = $this->getUser()->getUserByUsername($_POST['user_name']); $user = $this->getUser()->getUserByUsername($_POST['user_name']);
@ -113,7 +122,8 @@ class LoginController extends AbstractController {
/** /**
* 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(); $service_user = $this->getUser();
$user_id = (isset($_GET['user_id'])) ? intval($_GET['user_id']) : 0; $user_id = (isset($_GET['user_id'])) ? intval($_GET['user_id']) : 0;
$token = (isset($_GET['token'])) ? $_GET['token'] : ''; $token = (isset($_GET['token'])) ? $_GET['token'] : '';
@ -157,7 +167,8 @@ class LoginController extends AbstractController {
* @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 = psm_build_mail();
$mail->Subject = psm_get_lang('login', 'password_reset_email_subject'); $mail->Subject = psm_get_lang('login', 'password_reset_email_subject');

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,18 +27,22 @@
**/ **/
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(
@ -50,11 +55,16 @@ class ProfileController extends AbstractController {
* 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')); $this->twig->addGlobal('subtitle', psm_get_lang('users', 'profile'));
$user = $this->getUser()->getUser(null, true); $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->twig,
'activate' . ucfirst('telegram'),
\psm\Util\Module\Modal::MODAL_TYPE_OKCANCEL
);
$this->addModal($modal); $this->addModal($modal);
$modal->setTitle(psm_get_lang('users', 'activate_telegram')); $modal->setTitle(psm_get_lang('users', 'activate_telegram'));
$modal->setMessage(psm_get_lang('users', 'activate_telegram_description')); $modal->setMessage(psm_get_lang('users', 'activate_telegram_description'));
@ -80,6 +90,8 @@ class ProfileController extends AbstractController {
'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_jabber' => psm_get_lang('users', 'jabber'),
'label_jabber_description' => psm_get_lang('users', 'jabber_description'),
'label_email' => psm_get_lang('users', 'email'), 'label_email' => psm_get_lang('users', 'email'),
'label_save' => psm_get_lang('system', 'save'), 'label_save' => psm_get_lang('system', 'save'),
'form_action' => psm_build_url(array( 'form_action' => psm_build_url(array(
@ -98,7 +110,8 @@ class ProfileController extends AbstractController {
/** /**
* Save the profile * Save the profile
*/ */
protected function executeSave() { protected function executeSave()
{
if (empty($_POST)) { if (empty($_POST)) {
// dont process anything if no data has been posted // dont process anything if no data has been posted
return $this->executeIndex(); return $this->executeIndex();
@ -156,7 +169,8 @@ class ProfileController extends AbstractController {
* 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(); $telegram = psm_build_telegram();
$apiToken = psm_get_conf('telegram_api_token'); $apiToken = psm_get_conf('telegram_api_token');

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,10 +35,12 @@ 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);
@ -48,8 +52,15 @@ class UserController extends AbstractController {
$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"); {
$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 // change the indexes to reflect their server ids
foreach ($servers as $server) { foreach ($servers as $server) {
$this->servers[$server['server_id']] = $server; $this->servers[$server['server_id']] = $server;
@ -63,7 +74,8 @@ class UserController extends AbstractController {
* *
* @return string * @return string
*/ */
protected function executeIndex() { protected function executeIndex()
{
$sidebar = new \psm\Util\Module\Sidebar($this->twig); $sidebar = new \psm\Util\Module\Sidebar($this->twig);
$this->setSidebar($sidebar); $this->setSidebar($sidebar);
@ -110,7 +122,9 @@ class UserController extends AbstractController {
} }
$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']);
@ -137,9 +151,19 @@ class UserController extends AbstractController {
* *
* @return string * @return string
*/ */
protected function executeEdit() { protected function executeEdit()
{
$user_id = isset($_GET['id']) ? intval($_GET['id']) : 0; $user_id = isset($_GET['id']) ? intval($_GET['id']) : 0;
$fields_prefill = array('name', 'user_name', 'mobile', 'pushover_key', 'pushover_device', 'telegram_id', 'email'); $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
@ -216,14 +240,27 @@ class UserController extends AbstractController {
/** /**
* Executes the saving of a user * Executes the saving of a user
*/ */
protected function executeSave() { protected function executeSave()
{
if (empty($_POST)) { if (empty($_POST)) {
// dont process anything if no data has been posted // dont process anything if no data has been posted
return $this->executeIndex(); 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(
'name',
'user_name',
'password',
'password_repeat',
'level',
'mobile',
'pushover_key',
'pushover_device',
'telegram_id',
'jabber',
'email'
);
$clean = array(); $clean = array();
foreach ($fields as $field) { foreach ($fields as $field) {
if (isset($_POST[$field])) { if (isset($_POST[$field])) {
@ -260,6 +297,15 @@ class UserController extends AbstractController {
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
$admins = $this->db->select(PSM_DB_PREFIX . 'users', array('level' => PSM_USER_ADMIN));
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->db->save(PSM_DB_PREFIX . 'users', $clean, array('user_id' => $user_id));
$this->addMessage(psm_get_lang('users', 'updated'), 'success'); $this->addMessage(psm_get_lang('users', 'updated'), 'success');
@ -303,12 +349,20 @@ class UserController extends AbstractController {
/** /**
* 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);
$admins = $this->db->select(PSM_DB_PREFIX . 'users', array('level' => PSM_USER_ADMIN));
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', array('user_id' => $id,));
$this->db->delete(PSM_DB_PREFIX . 'users_servers', array('user_id' => $id)); $this->db->delete(PSM_DB_PREFIX . 'users_servers', array('user_id' => $id));
@ -318,6 +372,7 @@ class UserController extends AbstractController {
); );
$this->addMessage(psm_get_lang('users', 'deleted'), 'success'); $this->addMessage(psm_get_lang('users', 'deleted'), 'success');
}
} 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');
} }
@ -325,7 +380,8 @@ class UserController extends AbstractController {
return $this->executeIndex(); return $this->executeIndex();
} }
protected function getLabels() { protected function getLabels()
{
return array( return array(
'label_users' => psm_get_lang('menu', 'user'), 'label_users' => psm_get_lang('menu', 'user'),
'label_user' => psm_get_lang('users', 'user'), 'label_user' => psm_get_lang('users', 'user'),
@ -342,9 +398,10 @@ class UserController extends AbstractController {
'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_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_jabber' => psm_get_lang('users', 'jabber'),
'label_jabber_description' => psm_get_lang('users', 'jabber_description'),
'label_email' => psm_get_lang('users', 'email'), 'label_email' => psm_get_lang('users', 'email'),
'label_servers' => psm_get_lang('menu', 'server'), 'label_servers' => psm_get_lang('menu', 'server'),
'label_save' => psm_get_lang('system', 'save'), 'label_save' => psm_get_lang('system', 'save'),
@ -362,7 +419,8 @@ class UserController extends AbstractController {
* @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( $servers = $this->db->select(
PSM_DB_PREFIX . 'users_servers', PSM_DB_PREFIX . 'users_servers',
array('user_id' => $user_id), array('user_id' => $user_id),

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 = $user_id;
$this->user_id_by = $user_id_by; $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,9 +33,11 @@ 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( return array(
UserEvents::USER_ADD => array('onUserAdd', 0), UserEvents::USER_ADD => array('onUserAdd', 0),
UserEvents::USER_EDIT => array('onUserEdit', 0), UserEvents::USER_EDIT => array('onUserEdit', 0),
@ -42,12 +45,15 @@ class UserSubscriber implements EventSubscriberInterface {
); );
} }
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.
@ -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 = $container->get('event');
$event->addSubscriber(new EventListener\UserSubscriber); $event->addSubscriber(new EventListener\UserSubscriber());
} }
public function getControllers() { public function getControllers()
{
return array( return array(
'user' => __NAMESPACE__ . '\Controller\UserController', 'user' => __NAMESPACE__ . '\Controller\UserController',
'login' => __NAMESPACE__ . '\Controller\LoginController', 'login' => __NAMESPACE__ . '\Controller\LoginController',
'profile' => __NAMESPACE__ . '\Controller\ProfileController', '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,7 +44,8 @@ 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
@ -50,7 +53,8 @@ class Router {
*/ */
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');
@ -72,7 +76,8 @@ class Router {
* @throws \InvalidArgumentException * @throws \InvalidArgumentException
* @throws \LogicException * @throws \LogicException
*/ */
public function run($mod) { public function run($mod)
{
if (strpos($mod, '_') !== false) { if (strpos($mod, '_') !== false) {
list($mod, $controller) = explode('_', $mod); list($mod, $controller) = explode('_', $mod);
} else { } else {
@ -114,7 +119,8 @@ class Router {
* @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) { if ($controller_id === null) {
// by default, we use the controller with the same id as the module. // by default, we use the controller with the same id as the module.
$controller_id = $module_id; $controller_id = $module_id;
@ -123,7 +129,8 @@ class Router {
$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]( $controller = new $controllers[$controller_id](
$this->container->get('db'), $this->container->get('db'),
@ -144,7 +151,8 @@ class Router {
* @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);
} }
@ -153,7 +161,8 @@ class Router {
* @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') {
@ -167,10 +176,12 @@ class Router {
throw new \InvalidArgumentException('invalid_csrf_token'); throw new \InvalidArgumentException('invalid_csrf_token');
} }
} else { } else {
if (!hash_equals( if (
!hash_equals(
hash_hmac('sha256', $csrf_key, $session->get('csrf_token2')), hash_hmac('sha256', $csrf_key, $session->get('csrf_token2')),
$token_in $token_in
)) { )
) {
throw new \InvalidArgumentException('invalid_csrf_token'); throw new \InvalidArgumentException('invalid_csrf_token');
} }
} }
@ -195,7 +206,8 @@ class Router {
* @return \Symfony\Component\DependencyInjection\ContainerBuilder * @return \Symfony\Component\DependencyInjection\ContainerBuilder
* @throws \InvalidArgumentException * @throws \InvalidArgumentException
*/ */
protected function buildServiceContainer() { protected function buildServiceContainer()
{
$builder = new ContainerBuilder(); $builder = new ContainerBuilder();
$loader = new XmlFileLoader($builder, new FileLocator(PSM_PATH_CONFIG)); $loader = new XmlFileLoader($builder, new FileLocator(PSM_PATH_CONFIG));
$loader->load('services.xml'); $loader->load('services.xml');
@ -207,7 +219,8 @@ class Router {
* Prepare twig environment * Prepare twig environment
* @return \Twig_Environment * @return \Twig_Environment
*/ */
protected function buildTwigEnvironment() { protected function buildTwigEnvironment()
{
$twig = $this->container->get('twig'); $twig = $this->container->get('twig');
$session = $this->container->get('user')->getSession(); $session = $this->container->get('user')->getSession();
if (!$session->has('csrf_token')) { if (!$session->has('csrf_token')) {

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,7 +28,8 @@
namespace psm\Service; namespace psm\Service;
class Database { class Database
{
/** /**
* DB hostname * DB hostname
@ -88,7 +90,8 @@ class Database {
* @param string $db * @param string $db
* @param string|integer $port * @param string|integer $port
*/ */
function __construct($host = null, $user = null, $pass = null, $db = null, $port = '') { public function __construct($host = null, $user = null, $pass = null, $db = null, $port = '')
{
if ($host != null && $user != null && $pass !== null && $db != null) { if ($host != null && $user != null && $pass !== null && $db != null) {
$this->db_host = $host; $this->db_host = $host;
$this->db_port = $port; $this->db_port = $port;
@ -107,7 +110,8 @@ class Database {
* @param boolean $fetch automatically fetch results, or return PDOStatement? * @param boolean $fetch automatically fetch results, or return PDOStatement?
* @return \PDOStatement|int|bool|array object * @return \PDOStatement|int|bool|array object
*/ */
public function query($query, $fetch = true) { public function query($query, $fetch = true)
{
// Execute query and process results // Execute query and process results
try { try {
$this->last = $this->pdo()->query($query); $this->last = $this->pdo()->query($query);
@ -143,7 +147,8 @@ class Database {
* @param string $query * @param string $query
* @return int * @return int
*/ */
public function exec($query) { public function exec($query)
{
try { try {
$this->last = $this->pdo()->exec($query); $this->last = $this->pdo()->exec($query);
} catch (\PDOException $e) { } catch (\PDOException $e) {
@ -156,11 +161,13 @@ class Database {
/** /**
* Prepare and execute SQL statement with parameters * Prepare and execute SQL statement with parameters
* @param string $query SQL statement * @param string $query SQL statement
* @param array $parameters An array of values with as many elements as there are bound parameters in the SQL statement * @param array $parameters An array of values with as many elements as there are
* bound parameters in the SQL statement
* @param boolean $fetch automatically fetch results, or return PDOStatement? * @param boolean $fetch automatically fetch results, or return PDOStatement?
* @return array|\PDOStatement if $fetch = true, array, otherwise \PDOStatement * @return array|\PDOStatement if $fetch = true, array, otherwise \PDOStatement
*/ */
public function execute($query, $parameters, $fetch = true) { public function execute($query, $parameters, $fetch = true)
{
try { try {
$this->last = $this->pdo()->prepare($query); $this->last = $this->pdo()->prepare($query);
$this->last->execute($parameters); $this->last->execute($parameters);
@ -186,7 +193,8 @@ class Database {
* @param string $direction ASC or DESC. Defaults to ASC * @param string $direction ASC or DESC. Defaults to ASC
* @return \PDOStatement array multi dimensional array with results * @return \PDOStatement array multi dimensional array with results
*/ */
public function select($table, $where = null, $fields = null, $limit = '', $orderby = null, $direction = 'ASC') { public function select($table, $where = null, $fields = null, $limit = '', $orderby = null, $direction = 'ASC')
{
// build query // build query
$query_parts = array(); $query_parts = array();
$query_parts[] = 'SELECT SQL_CALC_FOUND_ROWS'; $query_parts[] = 'SELECT SQL_CALC_FOUND_ROWS';
@ -228,7 +236,8 @@ class Database {
* @param string $direction ASC or DESC. Defaults to ASC * @param string $direction ASC or DESC. Defaults to ASC
* @return array * @return array
*/ */
public function selectRow($table, $where = null, $fields = null, $orderby = null, $direction = 'ASC') { public function selectRow($table, $where = null, $fields = null, $orderby = null, $direction = 'ASC')
{
$result = $this->select($table, $where, $fields, '1', $orderby, $direction); $result = $this->select($table, $where, $fields, '1', $orderby, $direction);
if (isset($result[0])) { if (isset($result[0])) {
@ -244,7 +253,8 @@ class Database {
* @param mixed $where Where clause array or primary Id (string) or where clause (string) * @param mixed $where Where clause array or primary Id (string) or where clause (string)
* @return int number of affected rows * @return int number of affected rows
*/ */
public function delete($table, $where = null) { public function delete($table, $where = null)
{
$sql = 'DELETE FROM `' . $table . '` ' . $this->buildSQLClauseWhere($table, $where); $sql = 'DELETE FROM `' . $table . '` ' . $this->buildSQLClauseWhere($table, $where);
return $this->exec($sql); return $this->exec($sql);
@ -254,10 +264,12 @@ class Database {
* Insert or update data to the database * Insert or update data to the database
* @param string $table table name * @param string $table table name
* @param array $data data to save or insert * @param array $data data to save or insert
* @param string|array $where either string ('user_id=2' or just '2' (works only with primary field)) or array with where clause (only when updating) * @param string|array $where either string ('user_id=2' or just '2' (works only with primary field)) or
* array with where clause (only when updating)
* @return int|array|\PDOStatement * @return int|array|\PDOStatement
*/ */
public function save($table, array $data, $where = null) { public function save($table, array $data, $where = null)
{
if ($where === null) { if ($where === null) {
// insert mode // insert mode
$query = "INSERT INTO "; $query = "INSERT INTO ";
@ -300,7 +312,8 @@ class Database {
* @return \PDOStatement * @return \PDOStatement
* @see insert() * @see insert()
*/ */
public function insertMultiple($table, array $data) { public function insertMultiple($table, array $data)
{
if (empty($data)) { if (empty($data)) {
return false; return false;
} }
@ -345,7 +358,8 @@ class Database {
* @param string $table * @param string $table
* @return boolean * @return boolean
*/ */
public function ifTableExists($table) { public function ifTableExists($table)
{
$table = $this->quote($table); $table = $this->quote($table);
$db = $this->quote($this->getDbName()); $db = $this->quote($this->getDbName());
@ -368,7 +382,8 @@ class Database {
* @param string $value * @param string $value
* @return string * @return string
*/ */
public function quote($value) { public function quote($value)
{
return $this->pdo()->quote($value); return $this->pdo()->quote($value);
} }
@ -376,7 +391,8 @@ class Database {
* Get the PDO object * Get the PDO object
* @return \PDO * @return \PDO
*/ */
public function pdo() { public function pdo()
{
return $this->pdo; return $this->pdo;
} }
@ -384,7 +400,8 @@ class Database {
* Get number of rows of last statement * Get number of rows of last statement
* @return int number of rows * @return int number of rows
*/ */
public function getNumRows() { public function getNumRows()
{
return $this->last->rowCount(); return $this->last->rowCount();
} }
@ -392,7 +409,8 @@ class Database {
* Get the last inserted id after an insert * Get the last inserted id after an insert
* @return int * @return int
*/ */
public function getLastInsertedId() { public function getLastInsertedId()
{
return $this->pdo()->lastInsertId(); return $this->pdo()->lastInsertId();
} }
@ -403,7 +421,8 @@ class Database {
* @return string sql where clause * @return string sql where clause
* @see buildSQLClauseOrderBy() * @see buildSQLClauseOrderBy()
*/ */
public function buildSQLClauseWhere($table, $where = null) { public function buildSQLClauseWhere($table, $where = null)
{
$query = ''; $query = '';
@ -437,7 +456,8 @@ class Database {
* @return string sql order by clause * @return string sql order by clause
* @see buildSQLClauseWhere() * @see buildSQLClauseWhere()
*/ */
public function buildSQLClauseOrderBy($order_by, $direction) { public function buildSQLClauseOrderBy($order_by, $direction)
{
$query = ''; $query = '';
if ($order_by !== null) { if ($order_by !== null) {
@ -459,7 +479,10 @@ class Database {
} }
if (strlen($query) > 0) { if (strlen($query) > 0) {
// check if "ASC" or "DESC" is already in the order by clause // check if "ASC" or "DESC" is already in the order by clause
if (strpos(strtolower(trim($query)), 'asc') === false && strpos(strtolower(trim($query)), 'desc') === false) { if (
strpos(strtolower(trim($query)), 'asc') === false &&
strpos(strtolower(trim($query)), 'desc') === false
) {
$query .= ' ' . $direction; $query .= ' ' . $direction;
} }
} }
@ -471,7 +494,8 @@ class Database {
* Get the host of the current connection * Get the host of the current connection
* @return string * @return string
*/ */
public function getDbHost() { public function getDbHost()
{
return $this->db_host; return $this->db_host;
} }
@ -479,7 +503,8 @@ class Database {
* Get the db name of the current connection * Get the db name of the current connection
* @return string * @return string
*/ */
public function getDbName() { public function getDbName()
{
return $this->db_name; return $this->db_name;
} }
@ -487,7 +512,8 @@ class Database {
* Get the db user of the current connection * Get the db user of the current connection
* @return string * @return string
*/ */
public function getDbUser() { public function getDbUser()
{
return $this->db_user; return $this->db_user;
} }
@ -495,7 +521,8 @@ class Database {
* Get status of the connection * Get status of the connection
* @return boolean * @return boolean
*/ */
public function status() { public function status()
{
return $this->status; return $this->status;
} }
@ -504,11 +531,15 @@ class Database {
* *
* @return resource mysql resource * @return resource mysql resource
*/ */
protected function connect() { protected function connect()
{
// Initizale connection // Initizale connection
try { try {
$this->pdo = new \PDO( $this->pdo = new \PDO(
'mysql:host='.$this->db_host.';port='.$this->db_port.';dbname='.$this->db_name.';charset=utf8', 'mysql:host=' . $this->db_host .
';port=' . $this->db_port .
';dbname=' . $this->db_name .
';charset=utf8',
$this->db_user, $this->db_user,
$this->db_pass $this->db_pass
); );
@ -524,7 +555,8 @@ class Database {
/** /**
* Is called after connection failure * Is called after connection failure
*/ */
protected function onConnectFailure(\PDOException $e) { protected function onConnectFailure(\PDOException $e)
{
trigger_error('MySQL connection failed: ' . $e->getMessage(), E_USER_WARNING); trigger_error('MySQL connection failed: ' . $e->getMessage(), E_USER_WARNING);
return false; return false;
} }
@ -532,7 +564,8 @@ class Database {
/** /**
* Disconnect from current link * Disconnect from current link
*/ */
protected function disconnect() { protected function disconnect()
{
$this->pdo = null; $this->pdo = null;
} }
@ -540,7 +573,8 @@ class Database {
* Handle a PDOException * Handle a PDOException
* @param \PDOException $e * @param \PDOException $e
*/ */
protected function error(\PDOException $e) { protected function error(\PDOException $e)
{
trigger_error('SQL error: ' . $e->getMessage(), E_USER_WARNING); trigger_error('SQL error: ' . $e->getMessage(), E_USER_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.
@ -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,7 +44,8 @@ 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
@ -86,7 +89,8 @@ class User {
* @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()) {
@ -98,7 +102,8 @@ class User {
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
// he has successfully logged in via the login form)
// 2. login via cookie // 2. login via cookie
// if user has an active session on the server // if user has an active session on the server
@ -115,7 +120,8 @@ class User {
* @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 ($user_id == null) {
if (!$this->isUserLoggedIn()) { if (!$this->isUserLoggedIn()) {
return false; return false;
@ -125,7 +131,8 @@ class User {
} }
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 ' .
PSM_DB_PREFIX . 'users WHERE user_id = :user_id');
$query_user->bindValue(':user_id', $user_id, \PDO::PARAM_INT); $query_user->bindValue(':user_id', $user_id, \PDO::PARAM_INT);
$query_user->execute(); $query_user->execute();
// get result row (as an object) // get result row (as an object)
@ -138,9 +145,11 @@ class User {
* 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 // 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'); $query_user = $this->db_connection->prepare('SELECT * FROM ' .
PSM_DB_PREFIX . 'users WHERE user_name = :user_name');
$query_user->bindValue(':user_name', $user_name, \PDO::PARAM_STR); $query_user->bindValue(':user_name', $user_name, \PDO::PARAM_STR);
$query_user->execute(); $query_user->execute();
// get result row (as an object) // get result row (as an object)
@ -152,7 +161,8 @@ class User {
* *
* @return boolean * @return boolean
*/ */
protected function loginWithSessionData() { protected function loginWithSessionData()
{
if (!$this->session->has('user_id')) { if (!$this->session->has('user_id')) {
return false; return false;
} }
@ -173,7 +183,8 @@ class User {
* 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'])) { if (isset($_COOKIE['rememberme'])) {
// extract data from the cookie // extract data from the cookie
list ($user_id, $token, $hash) = explode(':', $_COOKIE['rememberme']); list ($user_id, $token, $hash) = explode(':', $_COOKIE['rememberme']);
@ -204,7 +215,8 @@ class User {
* @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_name = trim($user_name);
$user_password = trim($user_password); $user_password = trim($user_password);
@ -213,7 +225,8 @@ class User {
} }
$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
// fits to the hash of that user's password
if (!isset($user->user_id)) { if (!isset($user->user_id)) {
password_verify($user_password, 'dummy_call_against_timing'); password_verify($user_password, 'dummy_call_against_timing');
return false; return false;
@ -229,7 +242,8 @@ class User {
} }
// 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
// users's hashes when you provide a cost factor,
// by default the script will use a cost factor of 10 and never change it. // by default the script will use a cost factor of 10 and never change it.
// check if the have defined a cost factor in config/hashing.php // check if the have defined a cost factor in config/hashing.php
if (defined('PSM_LOGIN_HASH_COST_FACTOR')) { if (defined('PSM_LOGIN_HASH_COST_FACTOR')) {
@ -246,7 +260,8 @@ class User {
* @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) { if ($regenerate) {
$this->session->invalidate(); $this->session->invalidate();
} }
@ -261,10 +276,12 @@ class User {
/** /**
* 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 // generate 64 char random string and store it in current user data
$random_token_string = hash('sha256', mt_rand()); $random_token_string = hash('sha256', mt_rand());
$sth = $this->db_connection->prepare('UPDATE '.PSM_DB_PREFIX.'users SET rememberme_token = :user_rememberme_token WHERE user_id = :user_id'); $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())); $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
@ -279,10 +296,12 @@ class User {
/** /**
* 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 // Reset rememberme token
if ($this->session->has('user_id')) { if ($this->session->has('user_id')) {
$sth = $this->db_connection->prepare('UPDATE '.PSM_DB_PREFIX.'users SET rememberme_token = NULL WHERE user_id = :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'))); $sth->execute(array(':user_id' => $this->session->get('user_id')));
} }
@ -295,7 +314,8 @@ class User {
/** /**
* 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();
@ -308,7 +328,8 @@ class User {
* 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;
} }
@ -318,7 +339,8 @@ class User {
* @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) {
@ -329,7 +351,8 @@ class User {
// 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 ' .
PSM_DB_PREFIX . 'users SET password_reset_hash = :user_password_reset_hash,
password_reset_timestamp = :user_password_reset_timestamp password_reset_timestamp = :user_password_reset_timestamp
WHERE user_id = :user_id'); WHERE user_id = :user_id');
$query_update->bindValue(':user_password_reset_hash', $user_password_reset_hash, \PDO::PARAM_STR); $query_update->bindValue(':user_password_reset_hash', $user_password_reset_hash, \PDO::PARAM_STR);
@ -353,7 +376,8 @@ class User {
* @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)) {
@ -378,24 +402,28 @@ class User {
* @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
// PSM_LOGIN_HASH_COST_FACTOR defined (in src/includes/psmconfig.inc.php),
// if so: put the value into $hash_cost_factor, if not, make $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); $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,
// or if you are using PHP 5.3/5.4, by the password hashing
// compatibility library. the third parameter looks a little bit shitty, but that's how those PHP 5.5 functions // compatibility library. the third parameter looks a little bit shitty, but that's how those PHP 5.5 functions
// want the parameter: as an array with, currently only used with 'cost' => XX. // 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)); $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 ' .
PSM_DB_PREFIX . 'users SET password = :user_password_hash,
password_reset_hash = NULL, password_reset_timestamp = NULL password_reset_hash = NULL, password_reset_timestamp = NULL
WHERE user_id = :user_id'); WHERE user_id = :user_id');
$query_update->bindValue(':user_password_hash', $user_password_hash, \PDO::PARAM_STR); $query_update->bindValue(':user_password_hash', $user_password_hash, \PDO::PARAM_STR);
@ -414,7 +442,8 @@ class User {
* 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;
} }
@ -422,7 +451,8 @@ class User {
* Gets the username * Gets the username
* @return string * @return string
*/ */
public function getUsername() { public function getUsername()
{
$user = $this->getUser(); $user = $this->getUser();
return (isset($user->user_name) ? $user->user_name : null); return (isset($user->user_name) ? $user->user_name : null);
} }
@ -431,7 +461,8 @@ class User {
* 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)) {
@ -445,14 +476,18 @@ class User {
* 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->user_preferences === null) {
if (!$this->getUser()) { if (!$this->getUser()) {
return false; 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->db_connection->query('SELECT `key`,`value` FROM `' .
PSM_DB_PREFIX . 'users_preferences` WHERE `user_id` = ' . $this->user_id) as $row
) {
$this->user_preferences[$row['key']] = $row['value']; $this->user_preferences[$row['key']] = $row['value'];
} }
} }
@ -465,7 +500,8 @@ class User {
* @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])) { if (!$this->loadPreferences() || !isset($this->user_preferences[$key])) {
return $default; return $default;
} }
@ -480,7 +516,8 @@ class User {
* @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 ($this->loadPreferences()) {
if (isset($this->user_preferences[$key])) { if (isset($this->user_preferences[$key])) {
if ($this->user_preferences[$key] == $value) { if ($this->user_preferences[$key] == $value) {
@ -500,7 +537,8 @@ class User {
* 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.
@ -36,7 +37,8 @@ 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 */ /** @var bool True when cURL request succeeded */
public $result = true; public $result = true;
@ -65,10 +67,10 @@ class CMBulkSMS extends Core {
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
@ -77,7 +79,8 @@ class CMBulkSMS extends Core {
* @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 // Check if recipient and text message are available
if (count($this->recipients) < 1 || empty($message)) { if (count($this->recipients) < 1 || empty($message)) {
return false; return false;
@ -112,7 +115,8 @@ class CMBulkSMS extends Core {
* @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 // Prepare recipient array for batch message
$recipients = array(); $recipients = array();
foreach ($this->recipients as $recipient) { foreach ($this->recipients as $recipient) {
@ -127,7 +131,7 @@ class CMBulkSMS extends Core {
), ),
'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
@ -155,7 +159,8 @@ class CMBulkSMS extends Core {
* @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 // Create XML string
$xml = new \SimpleXMLElement('<MESSAGES/>'); $xml = new \SimpleXMLElement('<MESSAGES/>');
@ -167,7 +172,7 @@ class CMBulkSMS extends Core {
$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) {
@ -192,7 +197,8 @@ class CMBulkSMS extends Core {
* @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(); $cr = curl_init();
curl_setopt_array($cr, array( curl_setopt_array($cr, array(
CURLOPT_URL => $this->apiUrl, CURLOPT_URL => $this->apiUrl,
@ -201,8 +207,7 @@ class CMBulkSMS extends Core {
CURLOPT_POSTFIELDS => $this->request, CURLOPT_POSTFIELDS => $this->request,
CURLOPT_RETURNTRANSFER => true, CURLOPT_RETURNTRANSFER => true,
CURLOPT_FAILONERROR => 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);
@ -212,7 +217,8 @@ class CMBulkSMS extends Core {
// 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: ' .
$cErrorCode . '"' . $cError . '"';
error_log($this->error, E_USER_ERROR); error_log($this->error, E_USER_ERROR);
$this->result = false; $this->result = false;
} }

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,8 @@
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
@ -52,7 +54,8 @@ class Callr extends Core {
* @return bool|string * @return bool|string
*/ */
public function sendSMS($message) { public function sendSMS($message)
{
$error = ""; $error = "";
$success = 1; $success = 1;
@ -85,7 +88,8 @@ class Callr extends Core {
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);
} }

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,7 +29,8 @@
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
@ -49,7 +51,8 @@ class ClickSend extends Core {
* @return bool|string * @return bool|string
*/ */
public function sendSMS($message) { public function sendSMS($message)
{
$error = ""; $error = "";
$success = 1; $success = 1;
@ -61,7 +64,7 @@ class ClickSend extends Core {
foreach ($this->recipients as $recipient) { foreach ($this->recipients as $recipient) {
$data['messages'][] = array( $data['messages'][] = array(
'source' => 'phpservermon', 'source' => 'phpservermon',
'from' => substr($this->originator, 0, 11), 'from' => substr($this->originator, 0, 15),
'to' => $recipient, 'to' => $recipient,
'body' => $message, 'body' => $message,
); );
@ -87,9 +90,13 @@ class ClickSend extends Core {
$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['response_code'] != "SUCCESS")) { if (
$err != 0 ||
($httpcode != '200' && $httpcode != '201' && $httpcode != '202' && $result['response_code'] != "SUCCESS")
) {
$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);

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,7 +29,8 @@
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
@ -44,12 +46,14 @@ class Clickatell extends Core {
* @return bool|string * @return bool|string
*/ */
public function sendSMS($message) { public function sendSMS($message)
{
$success = 1; $success = 1;
$error = ''; $error = '';
foreach ($this->recipients as $recipient) { foreach ($this->recipients as $recipient) {
$ch = curl_init(); $ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://platform.clickatell.com/messages/http/send?apiKey=".urlencode($this->password)."&to=".urlencode($recipient)."&content=".urlencode($message)); curl_setopt($ch, CURLOPT_URL, "https://platform.clickatell.com/messages/http/send?apiKey=" .
urlencode($this->password) . "&to=" . urlencode($recipient) . "&content=" . urlencode($message));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$headers = array(); $headers = array();
$headers[] = "Content-Type: application/x-www-form-urlencoded"; $headers[] = "Content-Type: application/x-www-form-urlencoded";
@ -58,7 +62,7 @@ class Clickatell extends Core {
curl_close($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;
} }

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,7 +28,8 @@
namespace psm\Txtmsg; namespace psm\Txtmsg;
abstract class Core implements TxtmsgInterface { abstract class Core implements TxtmsgInterface
{
protected $originator; protected $originator;
protected $password; protected $password;
protected $recipients = array(); protected $recipients = array();
@ -39,7 +41,8 @@ abstract class Core implements TxtmsgInterface {
* @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->username = $username;
$this->password = $password; $this->password = $password;
} }
@ -49,7 +52,8 @@ abstract class Core implements TxtmsgInterface {
* *
* @param string $originator * @param string $originator
*/ */
public function setOriginator($originator) { public function setOriginator($originator)
{
$this->originator = $originator; $this->originator = $originator;
} }
@ -58,7 +62,8 @@ abstract class Core implements TxtmsgInterface {
* *
* @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,7 +28,8 @@
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
@ -45,7 +47,8 @@ class FreeMobileSMS extends Core {
* @return bool|string * @return bool|string
*/ */
public function sendSMS($message) { public function sendSMS($message)
{
$success = 1; $success = 1;
$error = ""; $error = "";
@ -57,8 +60,7 @@ class FreeMobileSMS extends Core {
"pass" => $this->password, "pass" => $this->password,
"msg" => urlencode($message), "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);

13
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.
@ -28,7 +29,8 @@
namespace psm\Txtmsg; namespace psm\Txtmsg;
class FreeVoipDeal extends Core { class FreeVoipDeal extends Core
{
/** /**
* Send sms using the FreeVoipDeal API * Send sms using the FreeVoipDeal API
@ -48,25 +50,24 @@ class FreeVoipDeal extends Core {
* @return bool|string * @return bool|string
*/ */
public function sendSMS($message) { public function sendSMS($message)
{
$error = ""; $error = "";
$success = 1; $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.freevoipdeal.com/myaccount/sendsms.php?" . http_build_query( curl_setopt($curl, CURLOPT_URL, "https://www.freevoipdeal.com/myaccount/sendsms.php?" . http_build_query(
array( array(
"username" => $this->username, "username" => $this->username,
"password" => $this->password, "password" => $this->password,
"from" => substr($this->originator, 0, 11), "from" => substr($this->originator, 0, 15),
"to" => $recipient, "to" => $recipient,
"text" => $message, "text" => $message,
) )
) ));
);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($curl); $result = curl_exec($curl);

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,8 @@
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
@ -49,7 +51,8 @@ class GatewayAPI extends Core {
* @return bool|string * @return bool|string
*/ */
public function sendSMS($message) { public function sendSMS($message)
{
$error = ""; $error = "";
$success = 1; $success = 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.
@ -28,7 +29,8 @@
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
@ -49,7 +51,8 @@ class Inetworx extends Core {
* @return bool|string * @return bool|string
*/ */
public function sendSMS($message) { public function sendSMS($message)
{
$error = ""; $error = "";
$success = 1; $success = 1;
@ -85,7 +88,8 @@ class Inetworx extends Core {
$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);
} }

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,8 @@
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
@ -48,7 +50,8 @@ class Messagebird extends Core {
* @return bool|string * @return bool|string
*/ */
public function sendSMS($message) { public function sendSMS($message)
{
$success = 1; $success = 1;
$error = ''; $error = '';
@ -58,10 +61,13 @@ class Messagebird extends Core {
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(
$ch,
CURLOPT_POSTFIELDS,
"originator=" . urlencode($this->originator == '' ? 'PSM' : $this->originator) . "originator=" . urlencode($this->originator == '' ? 'PSM' : $this->originator) .
"&body=" . urlencode($message) . "&body=" . urlencode($message) .
"&recipients=".implode(",", $recipients)); "&recipients=" . implode(",", $recipients)
);
curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$headers = array(); $headers = array();

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,7 +29,8 @@
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
@ -48,26 +50,25 @@ class Mosms extends Core {
* @return bool|string * @return bool|string
*/ */
public function sendSMS($message) { public function sendSMS($message)
{
$error = ""; $error = "";
$success = 1; $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);
@ -79,7 +80,6 @@ class Mosms extends Core {
$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) { if ($success) {

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,7 +29,8 @@
namespace psm\Txtmsg; namespace psm\Txtmsg;
class Nexmo extends Core { class Nexmo extends Core
{
/** /**
@ -50,12 +52,12 @@ class Nexmo extends Core {
* @return bool|string * @return bool|string
*/ */
public function sendSMS($message) { public function sendSMS($message)
{
$success = 1; $success = 1;
$error = ""; $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(
@ -66,8 +68,7 @@ class Nexmo extends Core {
"to" => $recipient, "to" => $recipient,
"text" => $message, "text" => $message,
) )
) ));
);
$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);
@ -75,10 +76,10 @@ class Nexmo extends Core {
if ($err != 0 || $httpcode != 200 || $result['messages'][0]['status'] != "0") { if ($err != 0 || $httpcode != 200 || $result['messages'][0]['status'] != "0") {
$success = 0; $success = 0;
$error = "HTTP_code: ".$httpcode.".\ncURL error (".$err."): ".curl_strerror($err).". \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) { if ($success) {

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,7 +31,8 @@
namespace psm\Txtmsg; namespace psm\Txtmsg;
class Octopush extends Core { class Octopush extends Core
{
/** /**
* Send sms using the Octopush API * Send sms using the Octopush API
@ -53,7 +55,8 @@ class Octopush extends Core {
* @return bool|string * @return bool|string
*/ */
public function sendSMS($message) { public function sendSMS($message)
{
$error = ""; $error = "";
$success = 1; $success = 1;
$smsType = "XXX"; //FR = premium, WWW = world, XXX = Low cost $smsType = "XXX"; //FR = premium, WWW = world, XXX = Low cost
@ -69,11 +72,10 @@ class Octopush extends Core {
"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);
@ -83,7 +85,9 @@ class Octopush extends Core {
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 .
". Look at http://www.octopush-dm.com/en/errors for the error description.";
} }
curl_close($curl); curl_close($curl);

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,8 @@
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
@ -48,7 +50,8 @@ class Plivo extends Core {
* @return bool|string * @return bool|string
*/ */
public function sendSMS($message) { public function sendSMS($message)
{
$error = ""; $error = "";
$success = 1; $success = 1;
@ -86,7 +89,8 @@ class Plivo extends Core {
if ($err != 0 || ($httpcode != '200' && $httpcode != '201' && $httpcode != '202')) { if ($err != 0 || ($httpcode != '200' && $httpcode != '201' && $httpcode != '202')) {
$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);

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,7 +29,8 @@
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
@ -49,13 +51,14 @@ class Smsglobal extends Core {
* @return bool|string * @return bool|string
*/ */
public function sendSMS($message) { public function sendSMS($message)
{
$error = ""; $error = "";
$success = 1; $success = 1;
$recipients = join(',', $this->recipients); $recipients = join(',', $this->recipients);
$from = substr($this->originator, 0, 11); // Max 11 Characters $from = substr($this->originator, 0, 15); // Max 15 Characters
$message = substr(rawurlencode($message), 0, 153); $message = substr(rawurlencode($message), 0, 153);
$curl = curl_init(); $curl = curl_init();
@ -81,7 +84,8 @@ class Smsglobal extends Core {
if ($err != 0 || substr($result, 0, 5) != "OK: 0") { if ($err != 0 || substr($result, 0, 5) != "OK: 0") {
$success = 0; $success = 0;
$result = ($result == '') ? 'Wrong input, please check if all values are correct!' : $result; $result = ($result == '') ? 'Wrong input, please check if all values are correct!' : $result;
$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);

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,8 @@
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
@ -48,7 +50,8 @@ class Smsgw extends Core {
* @return bool|string * @return bool|string
*/ */
public function sendSMS($message) { public function sendSMS($message)
{
$error = ""; $error = "";
$success = 1; $success = 1;
@ -78,7 +81,8 @@ class Smsgw extends Core {
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);

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,7 +29,8 @@
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
@ -49,12 +51,12 @@ class Smsit extends Core {
* @return bool|string * @return bool|string
*/ */
public function sendSMS($message) { public function sendSMS($message)
{
$success = 1; $success = 1;
$error = ""; $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://www.smsit.dk/api/v2?" . http_build_query( curl_setopt($curl, CURLOPT_URL, "https://www.smsit.dk/api/v2?" . http_build_query(
@ -62,10 +64,9 @@ class Smsit extends Core {
"apiKey" => $this->password, "apiKey" => $this->password,
"mobile" => $recipient, "mobile" => $recipient,
"message" => urlencode($message), "message" => urlencode($message),
"senderId" => substr($this->originator, 0, 11), "senderId" => substr($this->originator, 0, 15),
) )
) ));
);
$result = curl_exec($curl); $result = curl_exec($curl);
$err = curl_errno($curl); $err = curl_errno($curl);

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,8 @@
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
@ -49,7 +51,8 @@ class SolutionsInfini extends Core {
* @return bool|string * @return bool|string
*/ */
public function sendSMS($message) { public function sendSMS($message)
{
$error = ""; $error = "";
$success = 1; $success = 1;
@ -63,11 +66,10 @@ class SolutionsInfini extends Core {
"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);
@ -77,7 +79,8 @@ class SolutionsInfini extends Core {
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); curl_close($curl);
if ($success) { if ($success) {

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,7 +28,8 @@
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
@ -45,11 +47,21 @@ class Spryng extends Core {
* @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(
$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($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$headers = array(); $headers = array();
$headers[] = "Content-Type: application/x-www-form-urlencoded"; $headers[] = "Content-Type: application/x-www-form-urlencoded";

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,8 @@
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
@ -47,13 +49,21 @@ class Textmarketer extends Core {
* @return bool|string * @return bool|string
*/ */
public function sendSMS($message) { public function sendSMS($message)
{
$success = 1; $success = 1;
$error = ''; $error = '';
foreach ($this->recipients as $recipient) { foreach ($this->recipients as $recipient) {
$ch = curl_init(); $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_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); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$headers = array(); $headers = array();
$headers[] = "Content-Type: application/x-www-form-urlencoded"; $headers[] = "Content-Type: application/x-www-form-urlencoded";

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