Merge branch 'master' into h265

This commit is contained in:
Isaac Connor 2018-10-22 10:30:01 -04:00
commit a8329465fb
108 changed files with 3090 additions and 935 deletions

View File

@ -42,7 +42,7 @@ This is the recommended method to install ZoneMinder onto your system. ZoneMinde
If a repository that hosts ZoneMinder packages is not available for your distro, then you are encouraged to build your own package, rather than build from source. While each distro is different in ways that set it apart from all the others, they are often similar enough to allow you to adapt another distro's package building instructions to your own.
### Building a ZoneMinder Package
### Building a ZoneMinder Package ###
Building ZoneMinder into a package is not any harder than building from source. As a matter of fact, if you have successfully built ZoneMinder from source in the past, then you may find these steps to be easier.
@ -55,7 +55,7 @@ Please visit our [ReadtheDocs site](https://zoneminder.readthedocs.org/en/stable
### Package Maintainers
Many of the ZoneMinder configration variable default values are not configurable at build time through autotools or cmake. A new tool called *zmeditconfigdata.sh* has been added to allow package maintainers to manipulate any variable stored in ConfigData.pm without patching the source.
For example, let's say I have created a new ZoneMinder package that contains the cambolzola javascript file. However, by default cambozola support is turned off. To fix that, add this to the pacakging script:
For example, let's say I have created a new ZoneMinder package that contains the cambozola javascript file. However, by default cambozola support is turned off. To fix that, add this to the pacakging script:
```bash
./utils/zmeditconfigdata.sh ZM_OPT_CAMBOZOLA yes
```

View File

@ -782,6 +782,9 @@ INSERT INTO `Controls` VALUES (NULL,'D-LINK DCS-3415','Remote','DCS3415',0,0,0,1
INSERT INTO `Controls` VALUES (NULL,'IOS Camera','Ffmpeg','IPCAMIOS',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0);
INSERT INTO `Controls` VALUES (NULL,'Dericam P2','Ffmpeg','DericamP2',0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,10,0,1,1,1,0,0,0,1,1,0,0,0,0,1,1,45,0,0,1,0,0,0,0,1,1,45,0,0,0,0);
INSERT INTO `Controls` VALUES (NULL,'Trendnet','Remote','Trendnet',1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0);
INSERT INTO `Controls` VALUES (NULL,'PSIA','Remote','PSIA',0,0,0,1,0,0,1,0,0,0,0,0,0,0,100,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,20,0,1,1,1,0,0,1,0,1,0,0,0,0,1,-100,100,0,0,1,0,0,0,0,1,-100,100,0,0,0,0);
INSERT INTO `Controls` VALUES (NULL,'Dahua','Remote','Dahua',0,0,0,1,0,0,1,0,0,0,0,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,20,0,1,1,1,0,0,1,0,1,0,0,0,0,1,1,8,0,0,1,0,0,0,0,1,1,8,0,0,0,0);
--
-- Add some monitor preset values
--
@ -807,6 +810,7 @@ INSERT into MonitorPresets VALUES (NULL,'Axis IP, mpeg4, unicast','Remote','rtsp
INSERT into MonitorPresets VALUES (NULL,'Axis IP, mpeg4, multicast','Remote','rtsp',0,255,'rtsp','rtpMulti','<ip-address>',554,'/mpeg4/media.amp','/trackID=',NULL,NULL,3,NULL,0,NULL,NULL,NULL,100,100);
INSERT into MonitorPresets VALUES (NULL,'Axis IP, mpeg4, RTP/RTSP','Remote','rtsp',0,255,'rtsp','rtpRtsp','<ip-address>',554,'/mpeg4/media.amp','/trackID=',NULL,NULL,3,NULL,0,NULL,NULL,NULL,100,100);
INSERT into MonitorPresets VALUES (NULL,'Axis IP, mpeg4, RTP/RTSP/HTTP','Remote',NULL,NULL,NULL,'rtsp','rtpRtspHttp','<ip-address>',554,'/mpeg4/media.amp','/trackID=',NULL,NULL,3,NULL,0,NULL,NULL,NULL,100,100);
INSERT INTO MonitorPresets VALUES (NULL,'D-link DCS-930L, 640x480, mjpeg','Remote','http',0,0,'http','simple','<ip-address>',80,'/mjpeg.cgi',NULL,640,480,3,NULL,0,NULL,NULL,NULL,100,100);
INSERT INTO MonitorPresets VALUES (NULL,'Panasonic IP, 320x240, mpjpeg','Remote','http',0,0,'http','simple','<ip-address>',80,'/nphMotionJpeg?Resolution=320x240&Quality=Standard',NULL,320,240,3,NULL,0,NULL,NULL,NULL,100,100);
INSERT INTO MonitorPresets VALUES (NULL,'Panasonic IP, 320x240, jpeg','Remote','http',0,0,'http','simple','<ip-address>',80,'/SnapshotJPEG?Resolution=320x240&Quality=Standard',NULL,320,240,3,NULL,0,NULL,NULL,NULL,100,100);
INSERT INTO MonitorPresets VALUES (NULL,'Panasonic IP, 320x240, jpeg, max 5 FPS','Remote','http',0,0,'http','simple','<ip-address>',80,'/SnapshotJPEG?Resolution=320x240&Quality=Standard',NULL,320,240,3,5.0,0,NULL,NULL,NULL,100,100);

5
db/zm_update-1.32.0.sql Normal file
View File

@ -0,0 +1,5 @@
--
-- This updates a 1.31.47 database to 1.32.0
--
-- No changes required
--

5
db/zm_update-1.32.1.sql Normal file
View File

@ -0,0 +1,5 @@
--
-- This updates a 1.32.0 database to 1.32.1
--
-- No changes required
--

5
db/zm_update-1.32.2.sql Normal file
View File

@ -0,0 +1,5 @@
--
-- This updates a 1.32.1 database to 1.32.2
--
-- No changes required
--

9
db/zm_update-1.32.3.sql Normal file
View File

@ -0,0 +1,9 @@
--
-- This updates a 1.32.2 database to 1.32.3
--
--
-- Add some additional monitor preset values
--
INSERT INTO MonitorPresets VALUES (NULL,'D-link DCS-930L, 640x480, mjpeg','Remote','http',0,0,'http','simple','<ip-address>',80,'/mjpeg.cgi',NULL,640,480,3,NULL,0,NULL,NULL,NULL,100,100);

View File

@ -72,7 +72,7 @@ New installs
6. Configure the web server
This package uses the HTTPS protocol by default to access the web portal,
using rhe default self signed certificate on your system. Requests using
using the default self signed certificate on your system. Requests using
HTTP will auto-redirect to HTTPS.
Inspect the web server configuration file and verify it meets your needs:
@ -129,7 +129,7 @@ New installs
Upgrades
========
1. Conf.d folder support has been added to ZoneMinder 1.31.0. Any custom
1. Conf.d folder support has been added to ZoneMinder. Any custom
changes previously made to zm.conf must now be made in one or more custom
config files, created under the conf.d folder. Do this now. See
/etc/zm/conf.d/README for details. Once you recreate any custom config changes
@ -151,6 +151,10 @@ Upgrades
exists, inspect it and merge anything new in that file with zoneminder.conf.
Verify the SSL REquirements meet your needs. Read README.https if necessary.
The contents of this file must be merged into your Apache configuration.
See step 6 of the installation section if you have not already done this
during a previous upgrade.
4. Upgrade the database before starting ZoneMinder.
Most upgrades can be performed by executing the following command:

View File

@ -72,7 +72,7 @@ New installs
6. Configure the web server
This package uses the HTTPS protocol by default to access the web portal,
using rhe default self signed certificate on your system. Requests using
using the default self signed certificate on your system. Requests using
HTTP will auto-redirect to HTTPS.
Inspect the web server configuration file and verify it meets your needs:
@ -129,7 +129,7 @@ New installs
Upgrades
========
1. Conf.d folder support has been added to ZoneMinder 1.31.0. Any custom
1. Conf.d folder support has been added to ZoneMinder. Any custom
changes previously made to zm.conf must now be made in one or more custom
config files, created under the conf.d folder. Do this now. See
/etc/zm/conf.d/README for details. Once you recreate any custom config changes
@ -147,10 +147,14 @@ Upgrades
3. Verify the ZoneMinder Apache configuration file in the folder
/etc/zm/www. You will have a file called "zoneminder.conf" and there
may also be a file called "zoneminder.conf.rpmnew". If the rpmnew file
may also be a file called "zoneminder.conf.rpmnew". If an rpmnew file
exists, inspect it and merge anything new in that file with zoneminder.conf.
Verify the SSL REquirements meet your needs. Read README.https if necessary.
The contents of this file must be merged into your Apache configuration.
See step 6 of the installation section if you have not already done this
during a previous upgrade.
4. Upgrade the database before starting ZoneMinder.
Most upgrades can be performed by executing the following command:

View File

@ -25,7 +25,7 @@
%global _hardened_build 1
Name: zoneminder
Version: 1.31.47
Version: 1.32.2
Release: 1%{?dist}
Summary: A camera monitoring and analysis tool
Group: System Environment/Daemons
@ -320,11 +320,43 @@ EOF
%dir %attr(755,%{zmuid_final},%{zmgid_final}) %{_localstatedir}/run/zoneminder
%changelog
* Sun Apr 22 2018 Andrew Bauer <zonexpertconsulting@outlook.com> - 1.31.42-1
- Remove support for sysvinit a.k.a. el6
- use desktop-file-install for new zoneminder.desktop file
- add new web cache folder
- 1.31.42 development snapshot
* Sat Oct 13 2018 Andrew Bauer <zonexpertconsulting@outlook.com> - 1.32.2-1
- 1.32.2 release
- Bug fix release
* Thu Oct 04 2018 Sérgio Basto <sergio@serjux.com> - 1.32.1-2
- Mass rebuild for x264 and/or x265
* Tue Oct 2 2018 Andrew Bauer <zonexpertconsulting@outlook.com> - 1.32.1-1
- 1.32.1 release
- Bug fix release
* Wed Sep 12 2018 Andrew Bauer <zonexpertconsulting@outlook.com> - 1.32.0-1
- 1.32.0 release
- remove el6 (sys v init) support
- Make README name consistent across all supported distros
- remove jscalendar
- add requires php-json, zip
- support zm/conf.d folder
- support zm cache (busting) folder
* Sun Aug 19 2018 Leigh Scott <leigh123linux@googlemail.com> - 1.30.4-9
- Rebuilt for Fedora 29 Mass Rebuild binutils issue
* Fri Jul 27 2018 RPM Fusion Release Engineering <leigh123linux@gmail.com> - 1.30.4-8
- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild
* Thu Mar 08 2018 RPM Fusion Release Engineering <leigh123linux@googlemail.com> - 1.30.4-7
- Rebuilt for new ffmpeg snapshot
* Thu Mar 01 2018 RPM Fusion Release Engineering <leigh123linux@googlemail.com> - 1.30.4-6
- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild
* Thu Jan 18 2018 Leigh Scott <leigh123linux@googlemail.com> - 1.30.4-5
- Rebuilt for ffmpeg-3.5 git
* Thu Aug 31 2017 RPM Fusion Release Engineering <kwizart@rpmfusion.org> - 1.30.4-4
- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild
* Tue May 09 2017 Andrew Bauer <zonexpertconsulting@outlook.com> - 1.30.4-1
- modify autosetup macro parameters

View File

@ -28,7 +28,7 @@ override_dh_auto_configure:
-DZM_CACHEDIR="/var/cache/zoneminder/cache" \
-DZM_DIR_EVENTS="/var/cache/zoneminder/events" \
-DZM_DIR_IMAGES="/var/cache/zoneminder/images" \
-DZM_PATH_ZMS="/zm/cgi-bin/nph-zms" \
-DZM_PATH_ZMS="/zm/cgi-bin/nph-zms"
override_dh_clean:
dh_clean $(MANPAGES1)

View File

@ -13,6 +13,13 @@ The API is built in CakePHP and lives under the ``/api`` directory. It
provides a RESTful service and supports CRUD (create, retrieve, update, delete)
functions for Monitors, Events, Frames, Zones and Config.
Enabling API
^^^^^^^^^^^^
A default ZoneMinder installs with APIs enabled. You can explictly enable/disable the APIs
via the Options->System menu by enabling/disabling ``OPT_USE_API``. Note that if you intend
to use APIs with 3rd party apps, such as zmNinja or others that use APIs, you should also
enable ``AUTH_HASH_LOGINS``.
Login, Logout & API Security
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
The APIs tie into ZoneMinder's existing security model. This means if you have
@ -29,13 +36,13 @@ This means if you plan to use cuRL to experiment with these APIs, you first need
::
curl -XPOST -d "user=XXXX&pass=YYYY" -c cookies.txt http://yourzmip/zm/api/login.json
curl -XPOST -d "user=XXXX&pass=YYYY" -c cookies.txt http://yourzmip/zm/api/host/login.json
Staring ZM 1.32.0, you also have a `logout` API that basically clears your session. It looks like this:
::
curl -b cookies.txt http://yourzmip/zm/api/logout.json
curl -b cookies.txt http://yourzmip/zm/api/host/logout.json
**Login process for older versions of ZoneMinder**

View File

@ -35,7 +35,7 @@ guide you with a quick search.
`releases page <https://github.com/ZoneMinder/zoneminder/releases>`_ for
the latest release.
Alternatively, the ZoneMinder project team maintains a ppa, which is updated immediately
Alternatively, the ZoneMinder project team maintains a `PPA <https://askubuntu.com/questions/4983/what-are-ppas-and-how-do-i-use-them>`_, which is updated immediately
following a new release of ZoneMinder. To use this repository instead of the
official Ubuntu repository, enter the following from the command line:
@ -43,6 +43,15 @@ guide you with a quick search.
add-apt-repository ppa:iconnor/zoneminder
Please note that as of 1.32.0 We are creating a new PPA for each major version, as a means to prevent automatic upgrades from one major version to another. So instead of the above ppa line use the following:
::
add-apt-repository ppa:iconnor/zoneminder-1.32
If you are on trusty, you may want to add both, as there are some packages for dependencies included in the old ppa.
Update repo and upgrade.
::
@ -51,6 +60,7 @@ Update repo and upgrade.
apt-get upgrade
apt-get dist-upgrade
**Step 3:** Configure MySQL
.. sidebar :: Note
@ -62,8 +72,10 @@ Update repo and upgrade.
| /etc/alternatives/my.cnf -> /etc/mysql/mysql.cnf
| /etc/mysql/mysql.cnf is a basic file
Certain new defaults in MySQL 5.7 are currently causing some issues with ZoneMinder,
the workaround is to modify the sql_mode setting of MySQL.
Certain new defaults in MySQL 5.7 cause some issues with ZoneMinder < 1.32.0,
the workaround is to modify the sql_mode setting of MySQL. Please note that these
changes are NOT required for ZoneMinder 1.32.0 and some people have reported them
causing problems in 1.32.0.
To better manage the MySQL server it is recommended to copy the sample config file and
replace the default my.cnf symbolic link.
@ -104,10 +116,12 @@ Restart MySQL
**Step 5:** Configure the ZoneMinder Database
This step should not be required on ZoneMinder 1.32.0.
::
mysql -uroot -p < /usr/share/zoneminder/db/zm_create.sql
mysql -uroot -p -e "grant select,insert,update,delete,create,alter,index,lock tables on zm.* to 'zmuser'@localhost identified by 'zmpass';"
mysql -uroot -p -e "grant lock tables,alter,drop,select,insert,update,delete,create,index,alter routine,create routine, trigger,execute on zm.* to 'zmuser'@localhost identified by 'zmpass';"
**Step 6:** Set permissions
@ -128,6 +142,13 @@ Set /etc/zm/zm.conf to root:www-data 740 and www-data access to content
a2enmod cgi
a2enmod rewrite
You may also want to enable to following modules to improve caching performance
::
a2enmod expires
a2enmod headers
**Step 8:** Enable and start Zoneminder
::

View File

@ -15,7 +15,7 @@ AUTH_HASH_SECRET - When ZoneMinder is running in hashed authenticated mode it is
AUTH_HASH_IPS - When ZoneMinder is running in hashed authenticated mode it can optionally include the requesting IP address in the resultant hash. This adds an extra level of security as only requests from that address may use that authentication key. However in some circumstances, such as access over mobile networks, the requesting address can change for each request which will cause most requests to fail. This option allows you to control whether IP addresses are included in the authentication hash on your system. If you experience intermitent problems with authentication, switching this option off may help.
AUTH_HASH_LOGINS - The normal process for logging into ZoneMinder is via the login screen with username and password. In some circumstances it may be desirable to allow access directly to one or more pages, for instance from a third party application. If this option is enabled then adding an 'auth' parameter to any request will include a shortcut login bypassing the login screen, if not already logged in. As authentication hashes are time and, optionally, IP limited this can allow short-term access to ZoneMinder screens from other web pages etc. In order to use this the calling application will hae to generate the authentication hash itself and ensure it is valid. If you use this option you should ensure that you have modified the ZM_AUTH_HASH_SECRET to somethign unique to your system.
AUTH_HASH_LOGINS - The normal process for logging into ZoneMinder is via the login screen with username and password. In some circumstances it may be desirable to allow access directly to one or more pages, for instance from a third party application. If this option is enabled then adding an 'auth' parameter to any request will include a shortcut login bypassing the login screen, if not already logged in. As authentication hashes are time and, optionally, IP limited, this can allow short-term access to ZoneMinder screens from other web pages etc. In order to use this, the calling application will have to generate the authentication hash itself and ensure it is valid. If you use this option you should ensure that you have modified the ZM_AUTH_HASH_SECRET to something unique to your system.
OPT_FAST_DELETE - Normally an event created as the result of an alarm consists of entries in one or more database tables plus the various files associated with it. When deleting events in the browser it can take a long time to remove all of this if your are trying to do a lot of events at once. It is recommended that you set this option which means that the browser client only deletes the key entries in the events table, which means the events will no longer appear in the listing, and leaves the zmaudit daemon to clear up the rest later.
@ -38,6 +38,7 @@ OPT_CONTROL - ZoneMinder includes limited support for controllable cameras. A nu
OPT_TRIGGERS - ZoneMinder can interact with external systems which prompt or cancel alarms. This is done via the zmtrigger.pl script. This option indicates whether you want to use these external triggers. Most people will say no here.
CHECK_FOR_UPDATES - From ZoneMinder version 1.17.0 onwards new versions are expected to be more frequent. To save checking manually for each new version ZoneMinder can check with the zoneminder.com website to determine the most recent release. These checks are infrequent, about once per week, and no personal or system information is transmitted other than your current version number. If you do not wish these checks to take place or your ZoneMinder system has no internet access you can switch these check off with this configuration variable
UPDATE_CHECK_PROXY - If you use a proxy to access the internet then ZoneMinder needs to know so it can access zoneminder.com to check for updates. If you do use a proxy enter the full proxy url here in the form of http://<proxy host>:<proxy port>/
SHM_KEY - ZoneMinder uses shared memory to speed up communication between modules. To identify the right area to use shared memory keys are used. This option controls what the base key is, each monitor will have it's Id or'ed with this to get the actual key used. You will not normally need to change this value unless it clashes with another instance of ZoneMinder on the same machine. Only the first four hex digits are used, the lower four will be masked out and ignored.

21
misc/apache-cors.conf Normal file
View File

@ -0,0 +1,21 @@
# This configuration is only needed for compatibility with zmninja
# If not using VirtualHosts, copy or symlink this file into the Apache config folder
# If using VirtualHosts, then this config must be placed inside the appropriate
# <VirtualHost> directive.
# Make sure you have enabled/loaded header manipulation modules
# For example, in Debian based distros the command is "sudo a2enmod headers"
# zmNinja header permissions. Tweak to your needs
Header always set Access-Control-Allow-Credentials true
#zmNinja's WKWebView will set the origin header as localhost:8080
Header always set Access-Control-Allow-Origin "http://localhost:8080"
Header always set Access-Control-Request-Methods "Authorization"
Header always set Access-Control-Methods "OPTIONS,GET,POST,DELETE,PUT"
Header always set Access-Control-Allow-Headers "X-Requested-With, Content-Type, Authorization, Origin, Accept, client-security-token"
Header always set Access-Control-Expose-Headers "Content-Security-Policy, Location"
Header always set Access-Control-Max-Age "1000"
RewriteCond %{REQUEST_METHOD} OPTIONS
RewriteRule ^(.*)$ $1 [R=200,L]

View File

@ -0,0 +1,362 @@
package ZoneMinder::Control::Dahua;
use 5.8.0;
use strict;
use warnings;
require ZoneMinder::Base;
require ZoneMinder::Control;
our @ISA = qw(ZoneMinder::Control);
our $REALM = '';
our $USERNAME = '';
our $PASSWORD = '';
our $ADDRESS = '';
our $PROTOCOL = 'http://';
use Time::HiRes qw(usleep);
use ZoneMinder::Logger qw(:all);
use ZoneMinder::Config qw(:all);
use ZoneMinder::Database qw(zmDbConnect);
sub new
{
my $class = shift;
my $id = shift;
my $self = ZoneMinder::Control->new( $id );
bless( $self, $class );
srand( time() );
return $self;
}
our $AUTOLOAD;
sub AUTOLOAD
{
my $self = shift;
my $class = ref($self) || croak( "$self not object" );
my $name = $AUTOLOAD;
$name =~ s/.*://;
if ( exists($self->{$name}) )
{
return( $self->{$name} );
}
Fatal( "Can't access $name member of object of class $class" );
}
sub open
{
my $self = shift;
$self->loadMonitor();
# The Dahua camera firmware API supports the concept of having multiple
# channels on a single IP controller.
# As most cameras only have a single channel, and there is no similar
# information model in Zoneminder, I'm hardcoding the first and default
# channel "0", here.
$self->{dahua_channel_number} = "0";
if ( ( $self->{Monitor}->{ControlAddress} =~ /^(?<PROTOCOL>https?:\/\/)?(?<USERNAME>[^:@]+)?:?(?<PASSWORD>[^\/@]+)?@?(?<ADDRESS>.*)$/ ) ) {
$PROTOCOL = $+{PROTOCOL} if $+{PROTOCOL};
$USERNAME = $+{USERNAME} if $+{USERNAME};
$PASSWORD = $+{PASSWORD} if $+{PASSWORD};
$ADDRESS = $+{ADDRESS} if $+{ADDRESS};
} else {
Error('Failed to parse auth from address ' . $self->{Monitor}->{ControlAddress});
$ADDRESS = $self->{Monitor}->{ControlAddress};
}
if ( !($ADDRESS =~ /:/) ) {
Error('You generally need to also specify the port. I will append :80');
$ADDRESS .= ':80';
}
use LWP::UserAgent;
$self->{ua} = LWP::UserAgent->new;
$self->{ua}->agent("ZoneMinder Control Agent/".$ZoneMinder::Base::ZM_VERSION);
$self->{state} = 'closed';
# credentials: ("ip:port" (no prefix!), realm (string), username (string), password (string)
Debug("sendCmd credentials control address:'".$ADDRESS
."' realm:'" . $REALM
. "' username:'" . $USERNAME
. "' password:'".$PASSWORD
."'"
);
$self->{ua}->credentials($ADDRESS, $REALM, $USERNAME, $PASSWORD);
# Detect REALM
my $get_config_url = $PROTOCOL . $ADDRESS . "/cgi-bin/configManager.cgi?action=getConfig&name=Ptz";
my $req = HTTP::Request->new(GET=>$get_config_url);
my $res = $self->{ua}->request($req);
if ($res->is_success) {
$self->{state} = 'open';
return;
}
if ( $res->status_line() eq '401 Unauthorized' ) {
my $headers = $res->headers();
foreach my $k (keys %$headers) {
Debug("Initial Header $k => $$headers{$k}");
}
if ($$headers{'www-authenticate'}) {
my ($auth, $tokens) = $$headers{'www-authenticate'} =~ /^(\w+)\s+(.*)$/;
if ($tokens =~ /\w+="([^"]+)"/i) {
if ($REALM ne $1) {
$REALM = $1;
Debug("Changing REALM to '" . $REALM . "'");
$self->{ua}->credentials($ADDRESS, $REALM, $USERNAME, $PASSWORD);
my $req = HTTP::Request->new(GET=>$get_config_url);
$res = $self->{ua}->request($req);
if ($res->is_success()) {
$self->{state} = 'open';
return;
}
Debug('Authentication still failed after updating REALM' . $res->status_line);
$headers = $res->headers();
foreach my $k ( keys %$headers ) {
Debug("Initial Header $k => $$headers{$k}");
} # end foreach
} else {
Error('Authentication failed, not a REALM problem');
}
} else {
Error('Failed to match realm in tokens');
} # end if
} else {
Error('No WWW-Authenticate Header');
} # end if headers
} # end if $res->status_line() eq '401 Unauthorized'
}
sub close
{
my $self = shift;
$self->{state} = 'closed';
}
sub printMsg
{
my $self = shift;
my $msg = shift;
my $msg_len = length($msg);
Debug( $msg."[".$msg_len."]" );
}
sub sendGetRequest {
my $self = shift;
my $url_path = shift;
my $result = undef;
my $url = $PROTOCOL . $ADDRESS . $url_path;
my $req = HTTP::Request->new(GET=>$url);
my $res = $self->{ua}->request($req);
if ($res->is_success) {
$result = !undef;
} else {
if ($res->status_line() eq '401 Unauthorized') {
Debug("Error check failed, trying again: USERNAME: $USERNAME realm: $REALM password: " . $PASSWORD);
Debug("Content was " . $res->content() );
my $res = $self->{ua}->request($req);
if ($res->is_success) {
$result = !undef;
} else {
Error("Content was " . $res->content() );
}
}
if ( ! $result ) {
Error("Error check failed: '".$res->status_line());
}
}
return($result);
}
sub sendPtzCommand
{
my $self = shift;
my $action = shift;
my $command_code = shift;
my $arg1 = shift;
my $arg2 = shift;
my $arg3 = shift;
my $channel = $self->{dahua_channel_number};
my $url_path = "/cgi-bin/ptz.cgi?";
$url_path .= "action=" . $action . "&";
$url_path .= "channel=" . $channel . "&";
$url_path .= "code=" . $command_code . "&";
$url_path .= "arg1=" . $arg1 . "&";
$url_path .= "arg2=" . $arg2 . "&";
$url_path .= "arg3=" . $arg3;
$self->sendGetRequest($url_path);
}
sub sendMomentaryPtzCommand
{
my $self = shift;
my $command_code = shift;
my $arg1 = shift;
my $arg2 = shift;
my $arg3 = shift;
my $duration_ms = shift;
$self->sendPtzCommand("start", $command_code, $arg1, $arg2, $arg3);
my $duration_ns = $duration_ms * 1000;
usleep($duration_ns);
$self->sendPtzCommand("stop", $command_code, $arg1, $arg2, $arg3);
}
sub moveRelUpLeft
{
my $self = shift;
Debug("Move Up Left");
$self->sendMomentaryPtzCommand("LeftUp", 4, 4, 0, 500);
}
sub moveRelUp
{
my $self = shift;
Debug("Move Up");
$self->sendMomentaryPtzCommand("Up", 0, 4, 0, 500);
}
sub moveRelUpRight
{
my $self = shift;
Debug("Move Up Right");
$self->sendMomentaryPtzCommand("RightUp", 0, 4, 0, 500);
}
sub moveRelLeft
{
my $self = shift;
Debug("Move Left");
$self->sendMomentaryPtzCommand("Left", 0, 4, 0, 500);
}
sub moveRelRight
{
my $self = shift;
Debug("Move Right");
$self->sendMomentaryPtzCommand("Right", 0, 4, 0, 500);
}
sub moveRelDownLeft
{
my $self = shift;
Debug("Move Down Left");
$self->sendMomentaryPtzCommand("LeftDown", 4, 4, 0, 500);
}
sub moveRelDown
{
my $self = shift;
Debug("Move Down");
$self->sendMomentaryPtzCommand("Down", 0, 4, 0, 500);
}
sub moveRelDownRight
{
my $self = shift;
Debug("Move Down Right");
$self->sendMomentaryPtzCommand("RightDown", 4, 4, 0, 500);
}
sub zoomRelTele
{
my $self = shift;
Debug("Zoom Relative Tele");
$self->sendMomentaryPtzCommand("ZoomTele", 0, 0, 0, 500);
}
sub zoomRelWide
{
my $self = shift;
Debug("Zoom Relative Wide");
$self->sendMomentaryPtzCommand("ZoomWide", 0, 0, 0, 500);
}
sub presetClear
{
my $self = shift;
my $params = shift;
my $preset_id = $self->getParam($params, 'preset');
$self->sendPtzCommand("start", "ClearPreset", 0, $preset_id, 0);
}
sub presetSet
{
my $self = shift;
my $params = shift;
my $preset_id = $self->getParam($params, 'preset');
my $dbh = zmDbConnect(1);
my $sql = 'SELECT * FROM ControlPresets WHERE MonitorId = ? AND Preset = ?';
my $sth = $dbh->prepare($sql)
or Fatal("Can't prepare sql '$sql': " . $dbh->errstr());
my $res = $sth->execute($self->{Monitor}->{Id}, $preset_id)
or Fatal("Can't execute sql '$sql': " . $sth->errstr());
my $control_preset_row = $sth->fetchrow_hashref();
my $new_label_name = $control_preset_row->{'Label'};
$self->sendPtzCommand("start", "SetPreset", 0, $preset_id, 0);
$self->sendPtzCommand("start", "SetPresetName", $preset_id, $new_label_name, 0);
}
sub presetGoto
{
my $self = shift;
my $params = shift;
my $preset_id = $self->getParam($params, 'preset');
$self->sendPtzCommand("start", "GotoPreset", 0, $preset_id, 0);
}
1;
__END__
=head1 NAME
ZoneMinder::Control::Dahua - Perl module for Dahua cameras
=head1 SYNOPSIS
use ZoneMinder::Control::Dahua;
place this in /usr/share/perl5/ZoneMinder/Control
=head1 DESCRIPTION
This module is an implementation of the Dahua IP camera HTTP control API.
=head2 EXPORT
None by default.
=head1 COPYRIGHT AND LICENSE
Copyright (C) 2018 ZoneMinder LLC
This library 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 2
of the License, or (at your option) any later version.
This library 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 this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
=cut

View File

@ -0,0 +1,365 @@
package ZoneMinder::Control::PSIA;
use 5.006;
use strict;
use warnings;
require ZoneMinder::Base;
require ZoneMinder::Control;
our @ISA = qw(ZoneMinder::Control);
our $REALM = 'TV-IP450PI';
our $USERNAME = 'admin';
our $PASSWORD = '';
our $ADDRESS = '';
our $PROTOCOL = 'http://';
use ZoneMinder::Logger qw(:all);
use ZoneMinder::Config qw(:all);
use ZoneMinder::Database qw(zmDbConnect);
sub open
{
my $self = shift;
$self->loadMonitor();
if ( ( $self->{Monitor}->{ControlAddress} =~ /^(?<PROTOCOL>https?:\/\/)?(?<USERNAME>[^:@]+)?:?(?<PASSWORD>[^\/@]+)?@?(?<ADDRESS>.*)$/ ) ) {
$PROTOCOL = $+{PROTOCOL} if $+{PROTOCOL};
$USERNAME = $+{USERNAME} if $+{USERNAME};
$PASSWORD = $+{PASSWORD} if $+{PASSWORD};
$ADDRESS = $+{ADDRESS} if $+{ADDRESS};
} else {
Error('Failed to parse auth from address ' . $self->{Monitor}->{ControlAddress});
$ADDRESS = $self->{Monitor}->{ControlAddress};
}
if ( !($ADDRESS =~ /:/) ) {
Error('You generally need to also specify the port. I will append :80');
$ADDRESS .= ':80';
}
use LWP::UserAgent;
$self->{ua} = LWP::UserAgent->new;
$self->{ua}->agent( "ZoneMinder Control Agent/".$ZoneMinder::Base::ZM_VERSION );
$self->{state} = 'closed';
Debug( "sendCmd credentials control address:'".$ADDRESS
."' realm:'" . $REALM
. "' username:'" . $USERNAME
. "' password:'".$PASSWORD
."'"
);
$self->{ua}->credentials($ADDRESS, $REALM, $USERNAME, $PASSWORD);
# Detect REALM
my $req = HTTP::Request->new(GET=>$PROTOCOL . $ADDRESS . "/PSIA/PTZ/channels");
my $res = $self->{ua}->request($req);
if ($res->is_success) {
$self->{state} = 'open';
return;
} elsif (! $res->is_success) {
Debug("Need newer REALM");
if ( $res->status_line() eq '401 Unauthorized' ) {
my $headers = $res->headers();
foreach my $k ( keys %$headers ) {
Debug("Initial Header $k => $$headers{$k}");
} # end foreach
if ( $$headers{'www-authenticate'} ) {
my ($auth, $tokens) = $$headers{'www-authenticate'} =~ /^(\w+)\s+(.*)$/;
if ($tokens =~ /\w+="([^"]+)"/i) {
$REALM = $1;
Debug("Changing REALM to $REALM");
$self->{ua}->credentials($ADDRESS, $REALM, $USERNAME, $PASSWORD);
} # end if
} else {
Debug("No WWW-Authenticate header");
} # end if www-authenticate header
} # end if $res->status_line() eq '401 Unauthorized'
} # end elsif ! $res->is_success
}
sub close
{
my $self = shift;
$self->{state} = 'closed';
}
sub printMsg
{
my $self = shift;
my $msg = shift;
my $msg_len = length($msg);
Debug( $msg."[".$msg_len."]" );
}
sub sendGetRequest {
my $self = shift;
my $url_path = shift;
my $result = undef;
my $url = $PROTOCOL . $ADDRESS . $url_path;
my $req = HTTP::Request->new(GET=>$url);
my $res = $self->{ua}->request($req);
if ($res->is_success) {
$result = !undef;
} else {
if ( $res->status_line() eq '401 Unauthorized' ) {
Error( "Error check failed, trying again: USERNAME: $USERNAME realm: $REALM password: " . $PASSWORD );
Error("Content was " . $res->content() );
my $res = $self->{ua}->request($req);
if ( $res->is_success ) {
$result = !undef;
} else {
Error("Content was " . $res->content() );
}
}
if ( ! $result ) {
Error("Error check failed: '".$res->status_line());
}
}
return($result);
}
sub sendPutRequest {
my $self = shift;
my $url_path = shift;
my $content = shift;
my $result = undef;
my $url = $PROTOCOL . $ADDRESS . $url_path;
my $req = HTTP::Request->new(PUT=>$url);
if(defined($content)) {
$req->content_type("application/x-www-form-urlencoded; charset=UTF-8");
$req->content('<?xml version="1.0" encoding="UTF-8"?>' . "\n" . $content);
}
my $res = $self->{ua}->request($req);
if ($res->is_success) {
$result = !undef;
} else {
if ( $res->status_line() eq '401 Unauthorized' ) {
Error( "Error check failed, trying again: USERNAME: $USERNAME realm: $REALM password: " . $PASSWORD );
Error("Content was " . $res->content() );
my $res = $self->{ua}->request($req);
if ( $res->is_success ) {
$result = !undef;
} else {
Error("Content was " . $res->content() );
}
}
if ( ! $result ) {
Error( "Error check failed: '".$res->status_line()."' cmd:'".$cmd."'" );
}
}
return($result);
}
sub sendDeleteRequest {
my $self = shift;
my $url_path = shift;
my $result = undef;
my $url = $PROTOCOL . $ADDRESS . $url_path;
my $req = HTTP::Request->new(DELETE=>$url);
my $res = $self->{ua}->request($req);
if ($res->is_success) {
$result = !undef;
} else {
if ( $res->status_line() eq '401 Unauthorized' ) {
Error( "Error check failed, trying again: USERNAME: $USERNAME realm: $REALM password: " . $PASSWORD );
Error("Content was " . $res->content() );
my $res = $self->{ua}->request($req);
if ( $res->is_success ) {
$result = !undef;
} else {
Error("Content was " . $res->content() );
}
}
if ( ! $result ) {
Error( "Error check failed: '".$res->status_line()."' cmd:'".$cmd."'" );
}
}
return($result);
}
sub move
{
my $self = shift;
my $panPercentage = shift;
my $tiltPercentage = shift;
my $zoomPercentage = shift;
my $cmd = "set_relative_pos&posX=$panSteps&posY=$tiltSteps";
my $ptzdata = '<PTZData version="1.0" xmlns="urn:psialliance-org">';
$ptzdata .= '<pan>' . $panPercentage . '</pan>';
$ptzdata .= '<tilt>' . $tiltPercentage . '</tilt>';
$ptzdata .= '<zoom>' . $zoomPercentage . '</zoom>';
$ptzdata .= '<Momentary><duration>500</duration></Momentary>';
$ptzdata .= '</PTZData>';
$self->sendPutRequest("/PSIA/PTZ/channels/1/momentary", $ptzdata);
}
sub moveRelUpLeft
{
my $self = shift;
Debug( "Move Up Left" );
$self->move(-50, 50, 0);
}
sub moveRelUp
{
my $self = shift;
Debug( "Move Up" );
$self->move(0, 50, 0);
}
sub moveRelUpRight
{
my $self = shift;
Debug( "Move Up Right" );
$self->move(50, 50, 0);
}
sub moveRelLeft
{
my $self = shift;
Debug( "Move Left" );
$self->move(-50, 0, 0);
}
sub moveRelRight
{
my $self = shift;
Debug( "Move Right" );
$self->move(50, 0, 0);
}
sub moveRelDownLeft
{
my $self = shift;
Debug( "Move Down Left" );
$self->move(-50, -50, 0);
}
sub moveRelDown
{
my $self = shift;
Debug( "Move Down" );
$self->move(0, -50, 0);
}
sub moveRelDownRight
{
my $self = shift;
Debug( "Move Down Right" );
$self->move(50, -50, 0);
}
sub zoomRelTele
{
my $self = shift;
Debug("Zoom Relative Tele");
$self->move(0, 0, 50);
}
sub zoomRelWide
{
my $self = shift;
Debug("Zoom Relative Wide");
$self->move(0, 0, -50);
}
sub presetClear
{
my $self = shift;
my $params = shift;
my $preset_id = $self->getParam($params, 'preset');
my $url_path = "/PSIA/PTZ/channels/1/presets/" . $preset_id;
$self->sendDeleteRequest($url_path);
}
sub presetSet
{
my $self = shift;
my $params = shift;
my $preset_id = $self->getParam($params, 'preset');
my $dbh = zmDbConnect(1);
my $sql = 'SELECT * FROM ControlPresets WHERE MonitorId = ? AND Preset = ?';
my $sth = $dbh->prepare($sql)
or Fatal("Can't prepare sql '$sql': " . $dbh->errstr());
my $res = $sth->execute($self->{Monitor}->{Id}, $preset_id)
or Fatal("Can't execute sql '$sql': " . $sth->errstr());
my $control_preset_row = $sth->fetchrow_hashref();
my $new_label_name = $control_preset_row->{'Label'};
my $url_path = "/PSIA/PTZ/channels/1/presets/" . $preset_id;
my $ptz_preset_data = '<PTZPreset>';
$ptz_preset_data .= '<id>' . $preset_id . '</id>';
$ptz_preset_data .= '<presetName>' . $new_label_name . '</presetName>';
$ptz_preset_data .= '</PTZPreset>';
$self->sendPutRequest($url_path, $ptz_preset_data);
}
sub presetGoto
{
my $self = shift;
my $params = shift;
my $preset_id = $self->getParam($params, 'preset');
my $url_path = '/PSIA/PTZ/channels/1/presets/' . $preset_id . '/goto';
$self->sendPutRequest($url_path);
}
1;
__END__
=head1 NAME
ZoneMinder::Control::PSIA - Perl module for cameras implementing the PSIA
(Physical Security Interoperability Alliance), IP Media Devices API
specification
=head1 SYNOPSIS
use ZoneMinder::Control::PSIA;
place this in /usr/share/perl5/ZoneMinder/Control
=head1 DESCRIPTION
This has so far been tested with:
- Trendnet TV-IP450PI
=head2 EXPORT
None by default.
=head1 COPYRIGHT AND LICENSE
Copyright (C) 2018 ZoneMinder LLC
This library 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 2
of the License, or (at your option) any later version.
This library 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 this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
=cut

View File

@ -232,11 +232,11 @@ sub start_transaction {
sub end_transaction {
#my ( $caller, undef, $line ) = caller;
#$openprint::log->debug("Called end_transaction from $caller : $line");
#$openprint::log->debug("Called end_transaction from $caller : $line");
my ( $d, $ac ) = @_;
if ( ! defined $ac ) {
if ( ! defined $ac ) {
Error("Undefined ac");
}
}
$d = $dbh if ! $d;
if ( $ac ) {
#$log->debug("Committing");
@ -244,55 +244,31 @@ if ( ! defined $ac ) {
} # end if
$d->{AutoCommit} = $ac;
} # end sub end_transaction
1;
__END__
# Below is stub documentation for your module. You'd better edit it!
=head1 NAME
ZoneMinder::Database - Perl extension for blah blah blah
ZoneMinder::Database - Perl module containing database functions used in ZM
=head1 SYNOPSIS
use ZoneMinder::Database;
blah blah blah
=head1 DESCRIPTION
Stub documentation for ZoneMinder, created by h2xs. It looks like the
author of the extension was negligent enough to leave the stub
unedited.
Blah blah blah.
=head2 EXPORT
None by default.
=head1 SEE ALSO
Mention other useful documentation such as the documentation of
related modules or operating system documentation (such as man pages
in UNIX), or any relevant external documentation such as RFCs or
standards.
If you have a mailing list set up for your module, mention it here.
If you have a web site set up for your module, mention it here.
zmDbConnect
zmDbDisconnect
zmDbGetMonitors
zmDbGetMonitor
zmDbGetMonitorAndControl
=head1 AUTHOR
Philip Coombes, E<lt>philip.coombes@zoneminder.comE<gt>
=head1 COPYRIGHT AND LICENSE
Copyright (C) 2001-2008 Philip Coombes
This library is free software; you can redistribute it and/or modify
it under the same terms as Perl itself, either Perl version 5.8.3 or,
at your option, any later version of Perl 5 you may have available.
=cut

View File

@ -238,7 +238,7 @@ sub LinkPath {
'.'.$$event{Id}
);
} elsif ( $$event{Path} ) {
if ( ( $$event{Path} =~ /^(\d+\/\d{4}\/\d{2}\/\d{2})/ ) ) {
if ( ( $event->RelativePath() =~ /^(\d+\/\d{4}\/\d{2}\/\d{2})/ ) ) {
$$event{LinkPath} = $1.'/.'.$$event{Id};
} else {
Error("Unable to get LinkPath from Path for $$event{Id} $$event{Path}");
@ -254,6 +254,33 @@ sub LinkPath {
return $$event{LinkPath};
} # end sub LinkPath
sub createPath {
makePath($_[0]->Path());
}
sub createLinkPath {
my $LinkPath = $_[0]->LinkPath();
my $EventPath = $_[0]->EventPath();
if ( $LinkPath ) {
if ( !symlink($EventPath, $LinkPath) ) {
Error("Failed symlinking $EventPath to $LinkPath");
}
}
}
sub idPath {
return sprintf('%s/.%d', $_[0]->Path(), $_[0]->{Id});
}
sub createIdFile {
my $event = shift;
my $idFile = $event->idPath();
open( my $ID_FP, '>', $idFile )
or Error("Can't open $idFile: $!");
close($ID_FP);
setFileOwner($idFile);
}
sub GenerateVideo {
my ( $self, $rate, $fps, $scale, $size, $overwrite, $format ) = @_;
@ -416,7 +443,7 @@ sub delete_files {
return;
}
my $event_path = $event->RelativePath();
Debug("Deleting files for Event $$event{Id} from $storage_path/$event_path.");
Debug("Deleting files for Event $$event{Id} from $storage_path/$event_path, scheme is $$event{Scheme}.");
if ( $event_path ) {
( $storage_path ) = ( $storage_path =~ /^(.*)$/ ); # De-taint
( $event_path ) = ( $event_path =~ /^(.*)$/ ); # De-taint
@ -452,7 +479,7 @@ sub delete_files {
if ( $event->Scheme() eq 'Deep' ) {
my $link_path = $event->LinkPath();
Debug("Deleting files for Event $$event{Id} from $storage_path/$link_path.");
Debug("Deleting link for Event $$event{Id} from $storage_path/$link_path.");
if ( $link_path ) {
( $link_path ) = ( $link_path =~ /^(.*)$/ ); # De-taint
unlink($storage_path.'/'.$link_path) or Error( "Unable to unlink '$storage_path/$link_path': $!" );

View File

@ -47,10 +47,8 @@ our %EXPORT_TAGS = (
getCmdFormat
runCommand
setFileOwner
getEventPath
createEventPath
createEvent
deleteEventFiles
makePath
jsonEncode
jsonDecode
@ -181,70 +179,14 @@ sub runCommand {
return( $output );
}
sub getEventPath {
my $event = shift;
my $Storage = new ZoneMinder::Storage( $$event{StorageId} );
my $event_path = join( '/',
$Storage->Path(),
$event->{MonitorId},
( $Config{ZM_USE_DEEP_STORAGE} ? strftime( "%y/%m/%d/%H/%M/%S", localtime($event->{Time}) ) : $event->{Id} ),
);
return( $event_path );
}
sub createEventPath {
#
# WARNING assumes running from events directory
#
my $event = shift;
my $Storage = new ZoneMinder::Storage( $$event{Id} );
my $eventPath = $Storage->Path() . '/'.$event->{MonitorId};
my $eventPath = $event->Path();
$event->createPath();
$event->createIdFile();
$event->createLinkPath();
if ( $Config{ZM_USE_DEEP_STORAGE} ) {
my @startTime = localtime( $event->{StartTime} );
my @datetimeParts = ();
$datetimeParts[0] = sprintf( "%02d", $startTime[5]-100 );
$datetimeParts[1] = sprintf( "%02d", $startTime[4]+1 );
$datetimeParts[2] = sprintf( "%02d", $startTime[3] );
$datetimeParts[3] = sprintf( "%02d", $startTime[2] );
$datetimeParts[4] = sprintf( "%02d", $startTime[1] );
$datetimeParts[5] = sprintf( "%02d", $startTime[0] );
my $datePath = join('/',@datetimeParts[0..2]);
my $timePath = join('/',@datetimeParts[3..5]);
makePath( $datePath, $eventPath );
$eventPath .= '/'.$datePath;
# Create event id symlink
my $idFile = sprintf( "%s/.%d", $eventPath, $event->{Id} );
symlink( $timePath, $idFile )
or Fatal( "Can't symlink $idFile -> $eventPath: $!" );
makePath( $timePath, $eventPath );
$eventPath .= '/'.$timePath;
setFileOwner( $idFile ); # Must come after directory has been created
# Create empty id tag file
$idFile = sprintf( "%s/.%d", $eventPath, $event->{Id} );
open( my $ID_FP, ">", $idFile )
or Fatal( "Can't open $idFile: $!" );
close( $ID_FP );
setFileOwner( $idFile );
} else {
makePath( $event->{Id}, $eventPath );
$eventPath .= '/'.$event->{Id};
my $idFile = sprintf( "%s/.%d", $eventPath, $event->{Id} );
open( my $ID_FP, ">", $idFile )
or Fatal( "Can't open $idFile: $!" );
close( $ID_FP );
setFileOwner( $idFile );
}
return( $eventPath );
return $eventPath;
}
use Data::Dumper;
@ -481,53 +423,6 @@ sub updateEvent {
or Fatal( "Can't execute sql '$sql': ".$sth->errstr() );
}
sub deleteEventFiles {
#
# WARNING assumes running from events directory
#
my $event_id = shift;
my $monitor_id = shift;
$monitor_id = '*' if ( !defined($monitor_id) );
if ( $Config{ZM_USE_DEEP_STORAGE} ) {
my $link_path = $monitor_id."/*/*/*/.".$event_id;
#Debug( "LP1:$link_path" );
my @links = glob($link_path);
#Debug( "L:".$links[0].": $!" );
if ( @links ) {
( $link_path ) = ( $links[0] =~ /^(.*)$/ ); # De-taint
#Debug( "LP2:$link_path" );
( my $day_path = $link_path ) =~ s/\.\d+//;
#Debug( "DP:$day_path" );
my $event_path = $day_path.readlink( $link_path );
( $event_path ) = ( $event_path =~ /^(.*)$/ ); # De-taint
#Debug( "EP:$event_path" );
my $command = "/bin/rm -rf ".$event_path;
#Debug( "C:$command" );
executeShellCommand( $command );
unlink( $link_path ) or Error( "Unable to unlink '$link_path': $!" );
my @path_parts = split( /\//, $event_path );
for ( my $i = int(@path_parts)-2; $i >= 1; $i-- ) {
my $delete_path = join( '/', @path_parts[0..$i] );
#Debug( "DP$i:$delete_path" );
my @has_files = glob( $delete_path."/*" );
#Debug( "HF1:".$has_files[0] ) if ( @has_files );
last if ( @has_files );
@has_files = glob( $delete_path."/.[0-9]*" );
#Debug( "HF2:".$has_files[0] ) if ( @has_files );
last if ( @has_files );
my $command = "/bin/rm -rf ".$delete_path;
executeShellCommand( $command );
}
}
} else {
my $command = "/bin/rm -rf $monitor_id/$event_id";
executeShellCommand( $command );
}
}
sub makePath {
my $path = shift;
my $root = shift;
@ -654,7 +549,7 @@ sub jsonDecode {
$out =~ s/=>null/=>undef/g;
$out =~ s/`/'/g;
$out =~ s/qx/qq/g;
( $out ) = $out =~ m/^({.+})$/; # Detaint and check it's a valid object syntax
( $out ) = $out =~ m/^(\{.+\})$/; # Detaint and check it's a valid object syntax
my $result = eval $out;
Fatal( $@ ) if ( $@ );
return( $result );

View File

@ -570,7 +570,7 @@ sub logPrint {
$this->{databaseLevel} = $oldlevel;
}
my $sql = 'INSERT INTO Logs ( TimeKey, Component, Pid, Level, Code, Message, File, Line ) VALUES ( ?, ?, ?, ?, ?, ?, ?, NULL )';
my $sql = 'INSERT INTO Logs ( TimeKey, Component, ServerId, Pid, Level, Code, Message, File, Line ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, NULL )';
$this->{sth} = $this->{dbh}->prepare_cached($sql) if ! $this->{sth};
if ( !$this->{sth} ) {
$this->{databaseLevel} = NOLOG;
@ -578,13 +578,15 @@ sub logPrint {
return;
}
my $res = $this->{sth}->execute($seconds+($microseconds/1000000.0)
, $this->{id}
, $$
, $level
, $codes{$level}
, $string
, $this->{fileName}
my $res = $this->{sth}->execute(
$seconds+($microseconds/1000000.0),
$this->{id},
($Config{ZM_SERVER_ID} ? $Config{ZM_SERVER_ID} : undef),
$$,
$level,
$codes{$level},
$string,
$this->{fileName},
);
if ( !$res ) {
$this->{databaseLevel} = NOLOG;
@ -702,6 +704,8 @@ sub Fatal( @ ) {
if ( $SIG{TERM} and ( $SIG{TERM} ne 'DEFAULT' ) ) {
$SIG{TERM}();
}
# I think if we don't disconnect we will leave sockets around in TIME_WAIT
zmDbDisconnect();
exit(-1);
}

View File

@ -264,33 +264,39 @@ MAIN: while( $loop ) {
Error("Can't open directory '$$Storage{Path}/$day_dir': $!");
next;
}
my %event_ids_by_path;
my @event_links = sort { $b <=> $a } grep { -l $_ } readdir( DIR );
Debug("Have " . @event_links . ' event links');
closedir(DIR);
my $count = 0;
foreach my $event_link ( @event_links ) {
if ( $event_link =~ /[^\d\.]/ ) {
# Event links start with a period and consist of the digits of the event id. Anything else is not an event link
my ($event_id) = $event_link =~ /^\.(\d+)$/;
if ( !$event_id ) {
Warning("Non-event link found $event_link in $day_dir, skipping");
next;
}
Debug("Checking link $event_link");
( my $event = $event_link ) =~ s/^.*\.//;
#Event path is hour/minute/sec
my $event_path = readlink($event_link);
if ( !($event_path and -e $event_path) ) {
aud_print("Event link $day_dir/$event_link does not point to valid target");
aud_print("Event link $day_dir/$event_link does not point to valid target at $event_path");
if ( confirm() ) {
( $event_link ) = ( $event_link =~ /^(.*)$/ ); # De-taint
unlink($event_link);
$cleaned = 1;
}
} else {
$event_ids_by_path{$event_path} = $event_id;
Debug("Checking link $event_link points to $event_path ");
my $Event = $fs_events->{$event} = new ZoneMinder::Event();
$$Event{Id} = $event;
$$Event{Path} = join('/', $Storage->Path(), $day_dir,$event_path);
$$Event{RelativePath} = join('/', $day_dir,$event_path);
my $Event = $fs_events->{$event_id} = new ZoneMinder::Event();
$$Event{Id} = $event_id;
$$Event{Path} = join('/', $Storage->Path(), $day_dir, $event_path);
$$Event{RelativePath} = join('/', $day_dir, $event_path);
$$Event{Scheme} = 'Deep';
$Event->MonitorId( $monitor_dir );
$Event->StorageId( $Storage->Id() );
@ -307,15 +313,34 @@ MAIN: while( $loop ) {
my $event_id = undef;
my @mp4_files = glob("$event_dir/[0-9]+\-video.mp4");
if ( ! opendir(DIR, $event_dir) ) {
Error("Can't open directory '$$Storage{Path}/$day_dir': $!");
next;
}
my @contents = readdir( DIR );
Debug("Have " . @contents . " files in $day_dir/$event_dir");
closedir(DIR);
my @mp4_files = grep( /^\d+\-video.mp4$/, @contents);
foreach my $mp4_file ( @mp4_files ) {
my ( $id ) = $mp4_file =~ /^([0-9]+)\-video\.mp4$/;
if ( $id ) {
$event_id = $id;
Debug("Got event id from mp4 file $mp4_file => $event_id");
last;
}
}
if ( $event_id ) {
if ( ! $event_id ) {
# Look for .id file
my @hidden_files = grep( /^\.\d+$/, @contents);
Debug("Have " . @hidden_files . ' hidden files');
if ( @hidden_files ) {
( $event_id ) = $hidden_files[0] =~ /^.(\d+)$/;
}
}
if ( $event_id and ! $fs_events->{$event_id} ) {
my $Event = $fs_events->{$event_id} = new ZoneMinder::Event();
$$Event{Id} = $event_id;
$$Event{Path} = join('/', $Storage->Path(), $day_dir, $event_dir);
@ -324,7 +349,26 @@ MAIN: while( $loop ) {
$Event->MonitorId( $monitor_dir );
$Event->StorageId( $Storage->Id() );
$Event->DiskSpace( undef );
if ( ! $event_ids_by_path{$event_dir} ) {
Warning("No event link found at ".$Event->LinkPath() ." for " . $Event->to_string());
}
} else {
if ( $event_ids_by_path{$event_dir} ) {
Debug("Have an event link, leaving dir alone.");
next;
}
my ( undef, $year, $month, $day ) = split('/', $day_dir);
$year += 2000;
my ( $hour, $minute, $second ) = split('/', $event_dir);
my $StartTime =sprintf('%.4d-%.2d-%.2d %.2d:%.2d:%.2d', $year, $month, $day, $hour, $minute, $second);
my $Event = ZoneMinder::Event->find_one(
MonitorId=>$monitor_dir,
StartTime=>$StartTime,
);
if ( $Event ) {
Debug("Found event matching starttime on monitor $monitor_dir at $StartTime: " . $Event->to_string());
next;
}
aud_print("Deleting event directories with no event id information at $day_dir/$event_dir");
if ( confirm() ) {
my $command = "rm -rf $event_dir";
@ -363,7 +407,7 @@ MAIN: while( $loop ) {
}
if ( ! $$Storage{Scheme} ) {
Debug("Storage Scheme not set on $$Storage{Name}");
Error("Storage Scheme not set on $$Storage{Name}");
if ( ! chdir( $monitor_dir ) ) {
Error( "Can't chdir directory '$$Storage{Path}/$monitor_dir': $!" );
next;
@ -386,7 +430,7 @@ MAIN: while( $loop ) {
} # if USE_DEEP_STORAGE
Debug( 'Got '.int(keys(%$fs_events))." filesystem events for monitor $monitor_dir\n" );
delete_empty_directories($$Storage{Path}.'/'.$monitor_dir);
delete_empty_subdirs($$Storage{Path}.'/'.$monitor_dir);
} # end foreach monitor
if ( $cleaned ) {
@ -477,6 +521,10 @@ MAIN: while( $loop ) {
next;
}
Debug("Event $db_event is not in fs. Should have been at ".$Event->Path());
if ( $Event->Archived() ) {
Warning("Event $$Event{Id} is Archived. Taking no further action on it.");
next;
}
if ( ! $Event->StartTime() ) {
Info("Event $$Event{Id} has no start time. deleting it.");
if ( confirm() ) {
@ -881,6 +929,24 @@ sub deleteSwapImage {
}
}
# Deletes empty sub directories of the given path.
# Does not delete the path if empty. Is not meant to be recursive.
sub delete_empty_subdirs {
my $DIR;
if ( !opendir($DIR, $_[0]) ) {
Error("delete_empty_directories: Can't open directory '".getcwd()."/$_[0]': $!" );
return;
}
my @contents = map { ( $_ eq '.' or $_ eq '..' ) ? () : $_ } readdir( $DIR );
Debug("delete_empty_subdirectories $_[0] has " . @contents .' entries:' . ( @contents < 2 ? join(',',@contents) : '' ));
my @dirs = map { -d $_[0].'/'.$_ ? $_ : () } @contents;
Debug("Have " . @dirs . " dirs");
foreach ( @dirs ) {
delete_empty_directories( $_[0].'/'.$_ );
}
closedir($DIR);
}
sub delete_empty_directories {
my $DIR;
if ( !opendir($DIR, $_[0]) ) {
@ -888,7 +954,7 @@ sub delete_empty_directories {
return;
}
my @contents = map { ( $_ eq '.' or $_ eq '..' ) ? () : $_ } readdir( $DIR );
Debug("delete_empty_directories $_[0] has " . @contents .' entries:' . ( @contents < 2 ? join(',',@contents) : '' ));
Debug("delete_empty_directories $_[0] has " . @contents .' entries:' . ( @contents <= 2 ? join(',',@contents) : '' ));
my @dirs = map { -d $_[0].'/'.$_ ? $_ : () } @contents;
if ( @dirs ) {
Debug("Have " . @dirs . " dirs");

View File

@ -485,7 +485,7 @@ sub start {
logTerm();
zmDbDisconnect();
my $fd = 0;
my $fd = 3; # leave stdin,stdout,stderr open. Closing them causes problems with libx264
while( $fd < POSIX::sysconf(&POSIX::_SC_OPEN_MAX) ) {
POSIX::close($fd++);
}

View File

@ -69,6 +69,7 @@ use Time::HiRes qw/gettimeofday/;
use Getopt::Long;
use autouse 'Pod::Usage'=>qw(pod2usage);
use autouse 'Data::Dumper'=>qw(Dumper);
use File::Path qw(make_path);
my $daemon = 0;
my $filter_name = '';
@ -162,7 +163,7 @@ my $delay = $Config{ZM_FILTER_EXECUTE_INTERVAL};
my $event_id = 0;
if ( ! EVENT_PATH ) {
Error("No event path defined. Config was $Config{ZM_DIR_EVENTS}\n");
Error("No event path defined. Config was $Config{ZM_DIR_EVENTS}");
die;
}
@ -173,11 +174,11 @@ chdir( EVENT_PATH );
my $dbh = zmDbConnect();
if ( $filter_name ) {
Info("Scanning for events using filter '$filter_name'\n");
Info("Scanning for events using filter '$filter_name'");
} elsif ( $filter_id ) {
Info("Scanning for events using filter id '$filter_id'\n");
Info("Scanning for events using filter id '$filter_id'");
} else {
Info("Scanning for events using all filters\n");
Info("Scanning for events using all filters");
}
if ( ! ( $filter_name or $filter_id ) ) {
@ -191,7 +192,7 @@ my $last_action = 0;
while( !$zm_terminate ) {
my $now = time;
if ( ($now - $last_action) > $Config{ZM_FILTER_RELOAD_DELAY} ) {
Debug("Reloading filters\n");
Debug("Reloading filters");
$last_action = $now;
@filters = getFilters({ Name=>$filter_name, Id=>$filter_id });
}
@ -211,7 +212,7 @@ while( !$zm_terminate ) {
last if (!$daemon and ($filter_name or $filter_id)) or $zm_terminate;
Debug("Sleeping for $delay seconds\n");
Debug("Sleeping for $delay seconds");
sleep($delay);
}
@ -292,48 +293,48 @@ sub checkFilter {
last if $zm_terminate;
my $Event = new ZoneMinder::Event($$event{Id}, $event);
Debug("Checking event $event->{Id}");
Debug("Checking event $Event->{Id}");
my $delete_ok = !undef;
$dbh->ping();
if ( $filter->{AutoArchive} ) {
Info("Archiving event $event->{Id}");
Info("Archiving event $Event->{Id}");
# Do it individually to avoid locking up the table for new events
my $sql = 'UPDATE Events SET Archived = 1 WHERE Id = ?';
my $sth = $dbh->prepare_cached( $sql )
or Fatal("Unable to prepare '$sql': ".$dbh->errstr());
my $res = $sth->execute( $event->{Id} )
my $res = $sth->execute( $Event->{Id} )
or Error("Unable to execute '$sql': ".$dbh->errstr());
}
if ( $Config{ZM_OPT_FFMPEG} && $filter->{AutoVideo} ) {
if ( !$event->{Videoed} ) {
$delete_ok = undef if !generateVideo($filter, $event);
if ( !$Event->{Videoed} ) {
$delete_ok = undef if !generateVideo($filter, $Event);
}
}
if ( $Config{ZM_OPT_EMAIL} && $filter->{AutoEmail} ) {
if ( !$event->{Emailed} ) {
if ( !$Event->{Emailed} ) {
$delete_ok = undef if !sendEmail($filter, $Event);
}
}
if ( $Config{ZM_OPT_MESSAGE} && $filter->{AutoMessage} ) {
if ( !$event->{Messaged} ) {
if ( !$Event->{Messaged} ) {
$delete_ok = undef if !sendMessage($filter, $Event);
}
}
if ( $Config{ZM_OPT_UPLOAD} && $filter->{AutoUpload} ) {
if ( !$event->{Uploaded} ) {
$delete_ok = undef if !uploadArchFile($filter, $event);
if ( !$Event->{Uploaded} ) {
$delete_ok = undef if !uploadArchFile($filter, $Event);
}
}
if ( $filter->{AutoExecute} ) {
if ( !$event->{Executed} ) {
$delete_ok = undef if !executeCommand($filter, $event);
if ( !$Event->{Executed} ) {
$delete_ok = undef if !executeCommand($filter, $Event);
}
}
if ( $filter->{AutoDelete} ) {
if ( $delete_ok ) {
$Event->delete();
} else {
Error("Unable toto delete event $event->{Id} as previous operations failed");
Error("Unable to delete event $Event->{Id} as previous operations failed");
}
} # end if AutoDelete
@ -364,11 +365,11 @@ sub checkFilter {
sub generateVideo {
my $filter = shift;
my $event = shift;
my $Event = shift;
my $phone = shift;
my $rate = $event->{DefaultRate}/100;
my $scale = $event->{DefaultScale}/100;
my $rate = $Event->{DefaultRate}/100;
my $scale = $Event->{DefaultScale}/100;
my $format;
my @ffmpeg_formats = split(/\s+/, $Config{ZM_FFMPEG_FORMATS});
@ -393,7 +394,7 @@ sub generateVideo {
my $command = join('',
$Config{ZM_PATH_BIN},
'/zmvideo.pl -e ',
$event->{Id},
$Event->{Id},
' -r ',
$rate,
' -s ',
@ -405,10 +406,10 @@ sub generateVideo {
chomp($output);
my $status = $? >> 8;
if ( $status || logDebugging() ) {
Debug("Output: $output\n");
Debug("Output: $output");
}
if ( $status ) {
Error("Video generation '$command' failed with status: $status\n");
Error("Video generation '$command' failed with status: $status");
if ( wantarray() ) {
return( undef, undef );
}
@ -417,8 +418,8 @@ sub generateVideo {
my $sql = 'UPDATE Events SET Videoed = 1 WHERE Id = ?';
my $sth = $dbh->prepare_cached($sql)
or Fatal("Unable to prepare '$sql': ".$dbh->errstr());
my $res = $sth->execute($event->{Id})
or Fatal("Unable toexecute '$sql': ".$dbh->errstr());
my $res = $sth->execute($Event->{Id})
or Fatal("Unable to execute '$sql': ".$dbh->errstr());
if ( wantarray() ) {
return( $format, $output );
}
@ -453,7 +454,7 @@ sub generateImage {
chomp( $output );
my $status = $? >> 8;
if ( $status || logDebugging() ) {
Debug("Output: $output\n");
Debug("Output: $output");
}
if ( $status ) {
Error("Failed $command status $status");
@ -467,22 +468,30 @@ sub generateImage {
sub uploadArchFile {
my $filter = shift;
my $event = shift;
my $Event = shift;
if ( ! $Config{ZM_UPLOAD_HOST} ) {
Error('Cannot upload archive as no upload host defined');
return( 0 );
}
my $archFile = $event->{MonitorName}.'-'.$event->{Id};
my $archImagePath = getEventPath($event)
# Try to make the path to the upload folder if it doesn't already exist
make_path( $Config{ZM_UPLOAD_LOC_DIR} );
# Complain if the upload folder is still not writable
if ( ! -w $Config{ZM_UPLOAD_LOC_DIR} ) {
Error("Upload folder either does not exist or is not writable: $Config{ZM_UPLOAD_LOC_DIR}");
return(0);
}
my $archFile = $Event->{MonitorName}.'-'.$Event->{Id};
my $archImagePath = $Event->Path()
.'/'
.(
( $Config{ZM_UPLOAD_ARCH_ANALYSE} )
? '{*analyse,*capture}'
: '*capture'
? '{*analyse.jpg,*capture.jpg,snapshot.jpg,*.mp4}'
: '{*capture.jpg,snapshot.jpg,*.mp4}'
)
.'.jpg'
;
my @archImageFiles = glob($archImagePath);
my $archLocPath;
@ -492,11 +501,11 @@ sub uploadArchFile {
$archFile .= '.zip';
$archLocPath = $Config{ZM_UPLOAD_LOC_DIR}.'/'.$archFile;
my $zip = Archive::Zip->new();
Info("Creating upload file '$archLocPath', ".int(@archImageFiles)." files\n");
Info("Creating upload file '$archLocPath', ".int(@archImageFiles).' files');
my $status = &AZ_OK;
foreach my $imageFile ( @archImageFiles ) {
Debug("Adding $imageFile\n");
Debug("Adding $imageFile");
my $member = $zip->addFile($imageFile);
if ( !$member ) {
Error("Unable toto add image file $imageFile to zip archive $archLocPath");
@ -524,7 +533,7 @@ sub uploadArchFile {
$archFile .= '.tar';
}
$archLocPath = $Config{ZM_UPLOAD_LOC_DIR}.'/'.$archFile;
Info("Creating upload file '$archLocPath', ".int(@archImageFiles)." files\n");
Info("Creating upload file '$archLocPath', ".int(@archImageFiles).' files');
if ( $archError = !Archive::Tar->create_archive(
$archLocPath,
@ -540,7 +549,7 @@ sub uploadArchFile {
return( 0 );
} else {
if ( $Config{ZM_UPLOAD_PROTOCOL} eq 'ftp' ) {
Info('Uploading to '.$Config{ZM_UPLOAD_HOST}." using FTP");
Info('Uploading to '.$Config{ZM_UPLOAD_HOST}.' using FTP');
my $ftp = Net::FTP->new(
$Config{ZM_UPLOAD_HOST},
Timeout=>$Config{ZM_UPLOAD_TIMEOUT},
@ -548,24 +557,24 @@ sub uploadArchFile {
Debug=>$Config{ZM_UPLOAD_DEBUG}
);
if ( !$ftp ) {
Error("Unable tocreate FTP connection: $@");
Error("Unable to create FTP connection: $@");
return 0;
}
$ftp->login($Config{ZM_UPLOAD_USER}, $Config{ZM_UPLOAD_PASS})
or Error("FTP - Unable tologin");
or Error("FTP - Unable to login");
$ftp->binary()
or Error("FTP - Unable togo binary");
or Error("FTP - Unable to go binary");
$ftp->cwd($Config{ZM_UPLOAD_REM_DIR})
or Error("FTP - Unable tocwd")
or Error("FTP - Unable to cwd")
if ( $Config{ZM_UPLOAD_REM_DIR} );
$ftp->put( $archLocPath )
or Error("FTP - Unable toupload '$archLocPath'");
or Error("FTP - Unable to upload '$archLocPath'");
$ftp->quit()
or Error("FTP - Unable toquit");
or Error("FTP - Unable to quit");
} else {
my $host = $Config{ZM_UPLOAD_HOST};
$host .= ':'.$Config{ZM_UPLOAD_PORT} if $Config{ZM_UPLOAD_PORT};
Info('Uploading to '.$host." using SFTP\n");
Info('Uploading to '.$host.' using SFTP');
my %sftpOptions = (
host=>$Config{ZM_UPLOAD_HOST}, user=>$Config{ZM_UPLOAD_USER}
($Config{ZM_UPLOAD_PASS} ? (password=>$Config{ZM_UPLOAD_PASS}) : ()),
@ -580,7 +589,7 @@ sub uploadArchFile {
$sftpOptions{more} = [@more_ssh_args];
my $sftp = Net::SFTP::Foreign->new($Config{ZM_UPLOAD_HOST}, %sftpOptions);
if ( $sftp->error ) {
Error("Unable tocreate SFTP connection: ".$sftp->error);
Error("Unable to create SFTP connection: ".$sftp->error);
return 0;
}
$sftp->setcwd($Config{ZM_UPLOAD_REM_DIR})
@ -592,9 +601,9 @@ sub uploadArchFile {
unlink($archLocPath);
my $sql = 'UPDATE Events SET Uploaded = 1 WHERE Id = ?';
my $sth = $dbh->prepare_cached($sql)
or Fatal("Unable toprepare '$sql': ".$dbh->errstr());
my $res = $sth->execute($event->{Id})
or Fatal("Unable toexecute '$sql': ".$dbh->errstr());
or Fatal("Unable to prepare '$sql': ".$dbh->errstr());
my $res = $sth->execute($Event->{Id})
or Fatal("Unable to execute '$sql': ".$dbh->errstr());
}
return 1;
} # end sub uploadArchFile
@ -622,9 +631,9 @@ sub substituteTags {
WHERE EventId = ? AND Type = 'Alarm'
ORDER BY FrameId`;
my $sth = $dbh->prepare_cached($sql)
or Fatal("Unable toprepare '$sql': ".$dbh->errstr());
or Fatal("Unable to prepare '$sql': ".$dbh->errstr());
my $res = $sth->execute($Event->{Id})
or Fatal( "Unable toexecute '$sql': ".$dbh->errstr());
or Fatal("Unable to execute '$sql': ".$dbh->errstr());
my $rows = 0;
while( my $frame = $sth->fetchrow_hashref() ) {
if ( !$first_alarm_frame ) {
@ -796,7 +805,7 @@ sub sendEmail {
$ssmtp_location = qx('which ssmtp');
}
if ( !$ssmtp_location ) {
Debug('Unable tofind ssmtp, trying MIME::Lite->send');
Debug('Unable to find ssmtp, trying MIME::Lite->send');
MIME::Lite->send('smtp', $Config{ZM_EMAIL_HOST}, Timeout=>60);
$mail->send();
} else {
@ -828,16 +837,16 @@ sub sendEmail {
}
};
if ( $@ ) {
Error("Unable tosend email: $@");
Error("Unable to send email: $@");
return 0;
} else {
Info('Notification email sent');
}
my $sql = 'UPDATE Events SET Emailed = 1 WHERE Id = ?';
my $sth = $dbh->prepare_cached($sql)
or Fatal("Unable toprepare '$sql': ".$dbh->errstr());
or Fatal("Unable to prepare '$sql': ".$dbh->errstr());
my $res = $sth->execute($Event->{Id})
or Fatal("Unable toexecute '$sql': ".$dbh->errstr());
or Fatal("Unable to execute '$sql': ".$dbh->errstr());
return 1;
}
@ -898,7 +907,7 @@ sub sendMessage {
$ssmtp_location = qx('which ssmtp');
}
if ( !$ssmtp_location ) {
Debug('Unable tofind ssmtp, trying MIME::Lite->send');
Debug('Unable to find ssmtp, trying MIME::Lite->send');
MIME::Lite->send(smtp=>$Config{ZM_EMAIL_HOST}, Timeout=>60);
$mail->send();
} else {
@ -933,29 +942,29 @@ sub sendMessage {
}
};
if ( $@ ) {
Error("Unable tosend email: $@");
Error("Unable to send email: $@");
return 0;
} else {
Info('Notification message sent');
}
my $sql = 'UPDATE Events SET Messaged = 1 WHERE Id = ?';
my $sth = $dbh->prepare_cached($sql)
or Fatal("Unable toprepare '$sql': ".$dbh->errstr());
or Fatal("Unable to prepare '$sql': ".$dbh->errstr());
my $res = $sth->execute($Event->{Id})
or Fatal("Unable toexecute '$sql': ".$dbh->errstr());
or Fatal("Unable to execute '$sql': ".$dbh->errstr());
return 1;
} # end sub sendMessage
sub executeCommand {
my $filter = shift;
my $event = shift;
my $Event = shift;
my $event_path = getEventPath($event);
my $event_path = $Event->Path();
my $command = $filter->{AutoExecuteCmd};
$command .= " $event_path";
$command = substituteTags($command, $filter, $event);
$command = substituteTags($command, $filter, $Event);
Info("Executing '$command'");
my $output = qx($command);
@ -971,7 +980,7 @@ sub executeCommand {
my $sql = 'UPDATE Events SET Executed = 1 WHERE Id = ?';
my $sth = $dbh->prepare_cached($sql)
or Fatal("Unable to prepare '$sql': ".$dbh->errstr());
my $res = $sth->execute( $event->{Id} )
my $res = $sth->execute( $Event->{Id} )
or Fatal("Unable to execute '$sql': ".$dbh->errstr());
}
return( 1 );

View File

@ -44,7 +44,6 @@ delete @ENV{qw(IFS CDPATH ENV BASH_ENV)};
my $store_state=''; # PP - will remember state name passed
logInit();
Info("Aftere LogInit");
my $command = $ARGV[0]||'';
if ( $command eq 'version' ) {

View File

@ -88,13 +88,13 @@ delete @ENV{qw(IFS CDPATH ENV BASH_ENV)};
logInit();
logSetSignal();
Info( "Trigger daemon starting\n" );
Info( "Trigger daemon starting" );
my $dbh = zmDbConnect();
my $base_rin = '';
foreach my $connection ( @connections ) {
Info( "Opening connection '$connection->{name}'\n" );
Info( "Opening connection '$connection->{name}'" );
$connection->open();
}
@ -109,7 +109,7 @@ foreach my $connection ( @in_select_connections ) {
my %spawned_connections;
my %monitors;
my $monitor_reload_time = 0;
my $needsReload = 0;
my @needsReload;
loadMonitors();
$! = undef;
@ -127,14 +127,14 @@ while( 1 ) {
my $nfound = select( my $rout = $rin, undef, my $eout = $ein, $timeout );
if ( $nfound > 0 ) {
Debug( "Got input from $nfound connections\n" );
Debug( "Got input from $nfound connections" );
foreach my $connection ( @in_select_connections ) {
if ( vec( $rout, $connection->fileno(), 1 ) ) {
Debug( 'Got input from connection '
.$connection->name()
.' ('
.$connection->fileno()
.")\n"
.")"
);
if ( $connection->spawns() ) {
my $new_connection = $connection->accept();
@ -143,7 +143,7 @@ while( 1 ) {
.$new_connection->fileno()
.'), '
.int(keys(%spawned_connections))
." spawned connections\n"
." spawned connections"
);
} else {
my $messages = $connection->getMessages();
@ -162,7 +162,7 @@ while( 1 ) {
.$connection->name()
.' ('
.$connection->fileno()
.")\n"
.")"
);
my $messages = $connection->getMessages();
if ( defined($messages) ) {
@ -175,7 +175,7 @@ while( 1 ) {
.$connection->fileno()
.'), '
.int(keys(%spawned_connections))
." spawned connections\n"
." spawned connections"
);
$connection->close();
}
@ -206,7 +206,7 @@ while( 1 ) {
if ( ! zmMemVerify($monitor) ) {
# Our attempt to verify the memory handle failed. We should reload the monitors.
# Don't need to zmMemInvalidate because the monitor reload will do it.
$needsReload = 1;
push @needsReload, $monitor;
next;
}
@ -217,8 +217,8 @@ while( 1 ) {
]
);
#print( "$monitor->{Id}: S:$state, LE:$last_event\n" );
#print( "$monitor->{Id}: mS:$monitor->{LastState}, mLE:$monitor->{LastEvent}\n" );
#print( "$monitor->{Id}: S:$state, LE:$last_event" );
#print( "$monitor->{Id}: mS:$monitor->{LastState}, mLE:$monitor->{LastEvent}" );
if ( $state == STATE_ALARM || $state == STATE_ALERT ) {
# In alarm state
if ( !defined($monitor->{LastEvent})
@ -261,14 +261,14 @@ while( 1 ) {
}
if ( my @action_times = keys(%actions) ) {
Debug( "Checking for timed actions\n" );
Debug( "Checking for timed actions" );
my $now = time();
foreach my $action_time ( sort( grep { $_ < $now } @action_times ) ) {
Info( "Found actions expiring at $action_time\n" );
Info( "Found actions expiring at $action_time" );
foreach my $action ( @{$actions{$action_time}} ) {
my $connection = $action->{connection};
my $message = $action->{message};
Info( "Found action '$message'\n" );
Info( "Found action '$message'" );
handleMessage( $connection, $message );
}
delete( $actions{$action_time} );
@ -293,23 +293,41 @@ while( 1 ) {
}
}
# If necessary reload monitors
if ( $needsReload || ((time() - $monitor_reload_time) > MONITOR_RELOAD_INTERVAL )) {
# Reload all monitors from the dB every MONITOR_RELOAD_INTERVAL
if ( (time() - $monitor_reload_time) > MONITOR_RELOAD_INTERVAL ) {
foreach my $monitor ( values(%monitors) ) {
# Free up any used memory handle
zmMemInvalidate( $monitor );
zmMemInvalidate( $monitor ); # Free up any used memory handle
}
loadMonitors();
$needsReload = 0;
@needsReload = (); # We just reloaded all monitors so no need reload a specific monitor
# If we have NOT just reloaded all monitors, reload a specific monitor if its shared mem changed
} elsif ( @needsReload ) {
foreach my $monitor ( @needsReload ) {
loadMonitor($monitor);
}
@needsReload = ();
}
# zmDbConnect will ping and reconnect if neccessary
$dbh = zmDbConnect();
} # end while ( 1 )
Info( "Trigger daemon exiting\n" );
Info( "Trigger daemon exiting" );
exit;
sub loadMonitor {
my $monitor = shift;
Debug( "Loading monitor $monitor" );
zmMemInvalidate( $monitor );
if ( zmMemVerify( $monitor ) ) { # This will re-init shared memory
$monitor->{LastState} = zmGetMonitorState( $monitor );
$monitor->{LastEvent} = zmGetLastEvent( $monitor );
}
}
sub loadMonitors {
Debug( "Loading monitors\n" );
Debug( "Loading monitors" );
$monitor_reload_time = time();
my %new_monitors = ();
@ -323,14 +341,10 @@ sub loadMonitors {
my $res = $sth->execute( $Config{ZM_SERVER_ID} ? $Config{ZM_SERVER_ID} : () )
or Fatal( "Can't execute: ".$sth->errstr() );
while( my $monitor = $sth->fetchrow_hashref() ) {
# Check shared memory ok
if ( !zmMemVerify( $monitor ) ) {
zmMemInvalidate( $monitor );
next;
}
if ( zmMemVerify( $monitor ) ) { # This will re-init shared memory
$monitor->{LastState} = zmGetMonitorState( $monitor );
$monitor->{LastEvent} = zmGetLastEvent( $monitor );
}
$new_monitors{$monitor->{Id}} = $monitor;
} # end while fetchrow
%monitors = %new_monitors;
@ -348,14 +362,14 @@ sub handleMessage {
my $monitor = $monitors{$id};
if ( !$monitor ) {
Warning( "Can't find monitor '$id' for message '$message'\n" );
Warning( "Can't find monitor '$id' for message '$message'" );
return;
}
Debug( "Found monitor for id '$id'\n" );
Debug( "Found monitor for id '$id'" );
next if ( !zmMemVerify( $monitor ) );
Debug( "Handling action '$action'\n" );
Debug( "Handling action '$action'" );
if ( $action =~ /^(enable|disable)(?:\+(\d+))?$/ ) {
my $state = $1;
my $delay = $2;
@ -366,7 +380,7 @@ sub handleMessage {
}
# Force a reload
$monitor_reload_time = 0;
Info( "Set monitor to $state\n" );
Info( "Set monitor to $state" );
if ( $delay ) {
my $action_text = $id.'|'.( ($state eq 'enable')
? 'disable'
@ -383,7 +397,7 @@ sub handleMessage {
if ( $trigger eq 'on' ) {
zmTriggerEventOn( $monitor, $score, $cause, $text );
zmTriggerShowtext( $monitor, $showtext ) if defined($showtext);
Info( "Trigger '$trigger' '$cause'\n" );
Info( "Trigger '$trigger' '$cause'" );
if ( $delay ) {
my $action_text = $id.'|cancel';
handleDelay($delay, $connection, $action_text);
@ -396,7 +410,7 @@ sub handleMessage {
my $last_event = zmGetLastEvent( $monitor );
zmTriggerEventOff( $monitor );
zmTriggerShowtext( $monitor, $showtext ) if defined($showtext);
Info( "Trigger '$trigger'\n" );
Info( "Trigger '$trigger'" );
# Wait til it's finished
while( zmInAlarm( $monitor )
&& ($last_event == zmGetLastEvent( $monitor ))
@ -410,12 +424,12 @@ sub handleMessage {
} elsif( $action eq 'cancel' ) {
zmTriggerEventCancel( $monitor );
zmTriggerShowtext( $monitor, $showtext ) if defined($showtext);
Info( "Cancelled event\n" );
Info( "Cancelled event" );
} elsif( $action eq 'show' ) {
zmTriggerShowtext( $monitor, $showtext );
Info( "Updated show text to '$showtext'\n" );
Info( "Updated show text to '$showtext'" );
} else {
Error( "Unrecognised action '$action' in message '$message'\n" );
Error( "Unrecognised action '$action' in message '$message'" );
}
} # end sub handleMessage
@ -430,7 +444,7 @@ sub handleDelay {
$action_array = $actions{$action_time} = [];
}
push( @$action_array, { connection=>$connection, message=>$action_text } );
Debug( "Added timed event '$action_text', expires at $action_time (+$delay secs)\n" );
Debug( "Added timed event '$action_text', expires at $action_time (+$delay secs)" );
}
1;
__END__

View File

@ -120,9 +120,15 @@ Event::Event(
char id_file[PATH_MAX];
if ( storage->Scheme() == Storage::DEEP ) {
char *path_ptr = path;
path_ptr += snprintf(path_ptr, sizeof(path), "%s/%d", storage->Path(), monitor->Id());
// Try to make the Monitor Dir. Normally this would exist, but in odd cases might not.
if ( mkdir(path, 0755) ) {
if ( errno != EEXIST )
Error("Can't mkdir %s: %s", path, strerror(errno));
}
if ( storage->Scheme() == Storage::DEEP ) {
int dt_parts[6];
dt_parts[0] = stime->tm_year-100;
@ -154,29 +160,25 @@ Event::Event(
if ( symlink(time_path, id_file) < 0 )
Error("Can't symlink %s -> %s: %s", id_file, path, strerror(errno));
} else if ( storage->Scheme() == Storage::MEDIUM ) {
char *path_ptr = path;
path_ptr += snprintf(
path_ptr, sizeof(path), "%s/%d/%04d-%02d-%02d",
storage->Path(), monitor->Id(), stime->tm_year+1900, stime->tm_mon+1, stime->tm_mday
path_ptr, sizeof(path), "/%04d-%02d-%02d",
stime->tm_year+1900, stime->tm_mon+1, stime->tm_mday
);
if ( mkdir(path, 0755) ) {
// FIXME This should not be fatal. Should probably move to a different storage area.
if ( errno != EEXIST )
Error("Can't mkdir %s: %s", path, strerror(errno));
}
path_ptr += snprintf(path_ptr, sizeof(path), "/%" PRIu64, id);
if ( mkdir(path, 0755) ) {
// FIXME This should not be fatal. Should probably move to a different storage area.
if ( errno != EEXIST )
Error("Can't mkdir %s: %s", path, strerror(errno));
}
} else {
snprintf(path, sizeof(path), "%s/%d/%" PRIu64, storage->Path(), monitor->Id(), id);
path_ptr += snprintf(path, sizeof(path), "/%" PRIu64, id);
if ( mkdir(path, 0755) ) {
if ( errno != EEXIST ) {
if ( errno != EEXIST )
Error("Can't mkdir %s: %s", path, strerror(errno));
}
}
// Create empty id tag file
snprintf(id_file, sizeof(id_file), "%s/.%" PRIu64, path, id);

View File

@ -307,8 +307,8 @@ void EventStream::processCommand(const CmdMsg *msg) {
}
// If we are in single event mode and at the last frame, replay the current event
if ( (mode == MODE_SINGLE) && ((unsigned int)curr_frame_id == event_data->frame_count) ) {
Debug(1, "Was in single_mode, and last frame, so jumping to 1st frame");
if ( (mode == MODE_SINGLE || mode == MODE_NONE) && ((unsigned int)curr_frame_id == event_data->frame_count) ) {
Debug(1, "Was in single or no replay mode, and at last frame, so jumping to 1st frame");
curr_frame_id = 1;
} else {
Debug(1, "mode is %s, current frame is %d, frame count is %d", (mode == MODE_SINGLE ? "single" : "not single" ), curr_frame_id, event_data->frame_count );
@ -529,7 +529,7 @@ void EventStream::checkEventLoaded() {
}
if ( reload_event ) {
if ( forceEventChange || mode != MODE_SINGLE ) {
if ( forceEventChange || ( mode != MODE_SINGLE && mode != MODE_NONE ) ) {
//Info( "SQL:%s", sql );
if ( mysql_query( &dbconn, sql ) ) {
Error( "Can't run query: %s", mysql_error( &dbconn ) );
@ -784,6 +784,12 @@ void EventStream::runStream() {
// commands may set send_frame to true
while(checkCommandQueue());
// Update modified time of the socket .lock file so that we can tell which ones are stale.
if ( now.tv_sec - last_comm_update.tv_sec > 3600 ) {
touch(sock_path_lock);
last_comm_update = now;
}
if ( step != 0 )
curr_frame_id += step;
@ -845,7 +851,7 @@ Debug(3,"cur_frame_id (%d-1) mod frame_mod(%d)",curr_frame_id, frame_mod);
step = 0;
send_frame = true;
} else if ( !send_frame ) {
// We are paused, and doing nothing
// We are paused, not stepping and doing nothing
double actual_delta_time = TV_2_FLOAT(now) - last_frame_sent;
if ( actual_delta_time > MAX_STREAM_DELAY ) {
// Send keepalive
@ -861,9 +867,11 @@ Debug(3,"cur_frame_id (%d-1) mod frame_mod(%d)",curr_frame_id, frame_mod);
curr_stream_time = frame_data->timestamp;
if ( !paused ) {
curr_frame_id += replay_rate>0?1:-1;
if ( (mode == MODE_SINGLE) && ((unsigned int)curr_frame_id == event_data->frame_count) )
curr_frame_id += (replay_rate>0) ? 1 : -1;
if ( (mode == MODE_SINGLE) && ((unsigned int)curr_frame_id == event_data->frame_count) ) {
Debug(2, "Have mode==MODE_SINGLE and at end of event, looping back to start");
curr_frame_id = 1;
}
if ( send_frame && type != STREAM_MPEG ) {
Debug( 3, "dUs: %d", delta_us );
if ( delta_us )

View File

@ -42,7 +42,7 @@ extern "C" {
class EventStream : public StreamBase {
public:
typedef enum { MODE_SINGLE, MODE_ALL, MODE_ALL_GAPLESS } StreamMode;
typedef enum { MODE_NONE, MODE_SINGLE, MODE_ALL, MODE_ALL_GAPLESS } StreamMode;
protected:
struct FrameData {

View File

@ -225,8 +225,9 @@ static void zm_log_fps(double d, const char *postfix) {
Debug(1, "%3.2f %s", d, postfix);
} else if (v % (100 * 1000)) {
Debug(1, "%1.0f %s", d, postfix);
} else
} else {
Debug(1, "%1.0fk %s", d / 1000, postfix);
}
}
#if LIBAVCODEC_VERSION_CHECK(57, 64, 0, 64, 0)
@ -355,9 +356,8 @@ int check_sample_fmt(AVCodec *codec, enum AVSampleFormat sample_fmt) {
#if LIBAVCODEC_VERSION_CHECK(56, 8, 0, 60, 100)
#else
unsigned int zm_av_packet_ref( AVPacket *dst, AVPacket *src ) {
dst->size = (src->size + FF_INPUT_BUFFER_PADDING_SIZE)/sizeof(uint64_t) + 1;
dst->data = reinterpret_cast<uint8_t*>(new uint64_t[dst->size]);
memcpy(dst->data, src->data, src->size );
av_new_packet(dst,src->size);
memcpy(dst->data, src->data, src->size);
dst->flags = src->flags;
return 0;
}

View File

@ -303,8 +303,8 @@ void zm_dump_codecpar ( const AVCodecParameters *par );
#define zm_av_packet_unref( packet ) av_packet_unref( packet )
#define zm_av_packet_ref( dst, src ) av_packet_ref( dst, src )
#else
unsigned int zm_av_packet_ref( AVPacket *dst, AVPacket *src );
#define zm_av_packet_unref( packet ) av_free_packet( packet )
unsigned int zm_av_packet_ref( AVPacket *dst, AVPacket *src );
#endif
#if LIBAVCODEC_VERSION_CHECK(52, 23, 0, 23, 0)
#define zm_avcodec_decode_video( context, rawFrame, frameComplete, packet ) avcodec_decode_video2( context, rawFrame, frameComplete, packet )

View File

@ -331,6 +331,8 @@ int FfmpegCamera::OpenFfmpeg() {
ret = av_dict_set(&opts, "rtsp_transport", "tcp", 0);
} else if ( method == "rtpRtspHttp" ) {
ret = av_dict_set(&opts, "rtsp_transport", "http", 0);
} else if ( method == "rtpUni" ) {
ret = av_dict_set(&opts, "rtsp_transport", "udp", 0);
} else {
Warning("Unknown method (%s)", method.c_str() );
}
@ -606,7 +608,8 @@ int FfmpegCamera::OpenFfmpeg() {
return -1;
}
mConvertContext = sws_getContext(mVideoCodecContext->width,
mConvertContext = sws_getContext(
mVideoCodecContext->width,
mVideoCodecContext->height,
mVideoCodecContext->pix_fmt,
width, height,
@ -722,7 +725,8 @@ int FfmpegCamera::CaptureAndRecord( Image &image, timeval recording, char* event
uint32_t video_writer_event_id = monitor->GetVideoWriterEventId();
if ( last_event_id != video_writer_event_id ) {
Debug(2, "Have change of event. last_event(%d), our current (%d)", last_event_id, video_writer_event_id );
Debug(2, "Have change of event. last_event(%d), our current (%d)",
last_event_id, video_writer_event_id);
if ( videoStore ) {
Info("Re-starting video storage module");
@ -731,7 +735,7 @@ int FfmpegCamera::CaptureAndRecord( Image &image, timeval recording, char* event
// Also don't know how much it matters for audio.
if ( packet.stream_index == mVideoStreamId ) {
//Write the packet to our video store
int ret = videoStore->writeVideoFramePacket( &packet );
int ret = videoStore->writeVideoFramePacket(&packet);
if ( ret < 0 ) { //Less than zero and we skipped a frame
Warning("Error writing last packet to videostore.");
}

View File

@ -3317,11 +3317,11 @@ __attribute__((noinline)) void std_fastblend(const uint8_t* col1, const uint8_t*
}
/* FastBlend Neon for AArch32 */
#if (defined(__arm__) && !defined(ZM_STRIP_NEON))
#if (defined(__arm__) && defined(__ARM_PCS_VFP) && !defined(ZM_STRIP_NEON))
__attribute__((noinline,__target__("fpu=neon")))
#endif
void neon32_armv7_fastblend(const uint8_t* col1, const uint8_t* col2, uint8_t* result, unsigned long count, double blendpercent) {
#if (defined(__arm__) && !defined(ZM_STRIP_NEON))
#if (defined(__arm__) && defined(__ARM_PCS_VFP) && !defined(ZM_STRIP_NEON))
static int8_t divider = 0;
static double current_blendpercent = 0.0;
@ -3708,11 +3708,11 @@ __attribute__((noinline)) void std_delta8_abgr(const uint8_t* col1, const uint8_
}
/* Grayscale Neon for AArch32 */
#if (defined(__arm__) && !defined(ZM_STRIP_NEON))
#if (defined(__arm__) && defined(__ARM_PCS_VFP) && !defined(ZM_STRIP_NEON))
__attribute__((noinline,__target__("fpu=neon")))
#endif
void neon32_armv7_delta8_gray8(const uint8_t* col1, const uint8_t* col2, uint8_t* result, unsigned long count) {
#if (defined(__arm__) && !defined(ZM_STRIP_NEON))
#if (defined(__arm__) && defined(__ARM_PCS_VFP) && !defined(ZM_STRIP_NEON))
/* Q0(D0,D1) = col1+0 */
/* Q1(D2,D3) = col1+16 */
@ -3784,11 +3784,11 @@ __attribute__((noinline)) void neon64_armv8_delta8_gray8(const uint8_t* col1, co
}
/* RGB32 Neon for AArch32 */
#if (defined(__arm__) && !defined(ZM_STRIP_NEON))
#if (defined(__arm__) && defined(__ARM_PCS_VFP) && !defined(ZM_STRIP_NEON))
__attribute__((noinline,__target__("fpu=neon")))
#endif
void neon32_armv7_delta8_rgb32(const uint8_t* col1, const uint8_t* col2, uint8_t* result, unsigned long count, uint32_t multiplier) {
#if (defined(__arm__) && !defined(ZM_STRIP_NEON))
#if (defined(__arm__) && defined(__ARM_PCS_VFP) && !defined(ZM_STRIP_NEON))
/* Q0(D0,D1) = col1+0 */
/* Q1(D2,D3) = col1+16 */

View File

@ -335,6 +335,10 @@ Logger::Level Logger::level(Logger::Level level) {
mEffectiveLevel = mSyslogLevel;
if ( mEffectiveLevel > mLevel)
mEffectiveLevel = mLevel;
// DEBUG levels should flush
if ( mLevel > INFO )
mFlush = true;
}
return mLevel;
}

View File

@ -412,7 +412,7 @@ Monitor::Monitor(
+ (image_buffer_count*camera->ImageSize())
+ 64; /* Padding used to permit aligning the images buffer to 64 byte boundary */
Debug(1, "mem.size SharedData=%d TriggerData=%d VideoStoreData=%d total=%d",
Debug(1, "mem.size SharedData=%d TriggerData=%d VideoStoreData=%d total=%" PRId64,
sizeof(SharedData), sizeof(TriggerData), sizeof(VideoStoreData), mem_size);
mem_ptr = NULL;
@ -2387,7 +2387,6 @@ int Monitor::Capture() {
Info("Return from Capture (%d), signal loss", captureResult);
// Tell zma to end the event. zma will reset TRIGGER
trigger_data->trigger_state = TRIGGER_OFF;
// Unable to capture image for temporary reason
// Fake a signal loss image
Rgb signalcolor;

View File

@ -531,6 +531,12 @@ void MonitorStream::runStream() {
Debug(2, "Have checking command Queue for connkey: %d", connkey );
got_command = true;
}
// Update modified time of the socket .lock file so that we can tell which ones are stale.
if ( now.tv_sec - last_comm_update.tv_sec > 3600 ) {
touch(sock_path_lock);
last_comm_update = now;
}
}
if ( paused ) {

View File

@ -332,6 +332,8 @@ void StreamBase::openComms() {
snprintf(rem_sock_path, sizeof(rem_sock_path), "%s/zms-%06dw.sock", staticConfig.PATH_SOCKS.c_str(), connkey);
strncpy(rem_addr.sun_path, rem_sock_path, sizeof(rem_addr.sun_path)-1);
rem_addr.sun_family = AF_UNIX;
gettimeofday(&last_comm_update, NULL);
} // end if connKey > 0
Debug(2, "comms open");
} // end void StreamBase::openComms()

View File

@ -85,6 +85,7 @@ protected:
int step;
struct timeval now;
struct timeval last_comm_update;
double base_fps;
double effective_fps;

View File

@ -24,6 +24,8 @@
#include <string.h>
#include <stdio.h>
#include <stdarg.h>
#include <fcntl.h> /* Definition of AT_* constants */
#include <sys/stat.h>
#if defined(__arm__)
#include <sys/auxv.h>
#endif
@ -414,3 +416,22 @@ Warning("ZM Compiled without LIBCURL. UriDecoding not implemented.");
#endif
}
void touch(const char *pathname) {
int fd = open(pathname,
O_WRONLY|O_CREAT|O_NOCTTY|O_NONBLOCK,
0666);
if ( fd < 0 ) {
// Couldn't open that path.
Error("Couldn't open() path \"%s in touch", pathname);
return;
}
int rc = utimensat(AT_FDCWD,
pathname,
nullptr,
0);
if ( rc ) {
Error("Couldn't utimensat() path %s in touch", pathname);
return;
}
}

View File

@ -63,5 +63,5 @@ extern unsigned int neonversion;
char *timeval_to_string( struct timeval tv );
std::string UriDecode( const std::string &encoded );
void touch( const char *pathname );
#endif // ZM_UTILS_H

View File

@ -64,7 +64,7 @@ VideoStore::VideoStore(const char *filename_in, const char *format_in,
}
// Couldn't deduce format from filename, trying from format name
if (!oc) {
if ( !oc ) {
avformat_alloc_output_context2(&oc, NULL, format, filename);
if (!oc) {
Error(
@ -108,7 +108,7 @@ VideoStore::VideoStore(const char *filename_in, const char *format_in,
Debug(2, "Success creating video out stream");
}
if (!video_out_ctx->codec_tag) {
if ( !video_out_ctx->codec_tag ) {
video_out_ctx->codec_tag =
av_codec_get_tag(oc->oformat->codec_tag, video_in_ctx->codec_id);
Debug(2, "No codec_tag, setting to %d", video_out_ctx->codec_tag);
@ -127,9 +127,10 @@ VideoStore::VideoStore(const char *filename_in, const char *format_in,
#else
video_out_stream =
avformat_new_stream(oc,(AVCodec *)(video_in_ctx->codec));
avformat_new_stream(oc, NULL);
//(AVCodec *)(video_in_ctx->codec));
//avformat_new_stream(oc,(const AVCodec *)(video_in_ctx->codec));
if (!video_out_stream) {
if ( !video_out_stream ) {
Fatal("Unable to create video out stream\n");
} else {
Debug(2, "Success creating video out stream");
@ -158,6 +159,9 @@ VideoStore::VideoStore(const char *filename_in, const char *format_in,
// Just copy them from the in, no reason to choose different
video_out_ctx->time_base = video_in_ctx->time_base;
if ( ! (video_out_ctx->time_base.num && video_out_ctx->time_base.den) ) {
video_out_ctx->time_base = AV_TIME_BASE_Q;
}
video_out_stream->time_base = video_in_stream->time_base;
Debug(3,
@ -343,6 +347,9 @@ bool VideoStore::open() {
if (ret < 0) {
Error("Error occurred when writing out file header to %s: %s\n",
filename, av_make_error_string(ret).c_str());
/* free the stream */
avio_closep(&oc->pb);
//avformat_free_context(oc);
return false;
}
return true;
@ -414,7 +421,7 @@ VideoStore::~VideoStore() {
if (int rc = av_write_trailer(oc)) {
Error("Error writing trailer %s", av_err2str(rc));
} else {
Debug(3, "Sucess Writing trailer");
Debug(3, "Success Writing trailer");
}
// When will we not be using a file ?
@ -428,7 +435,7 @@ VideoStore::~VideoStore() {
} else {
Debug(3, "Not closing avio because we are not writing to a file.");
}
}
} // end if ( oc->pb )
// I wonder if we should be closing the file first.
// I also wonder if we really need to be doing all the ctx
// allocation/de-allocation constantly, or whether we can just re-use it.

View File

@ -66,7 +66,7 @@ int main( int argc, const char *argv[] ) {
double maxfps = 10.0;
unsigned int bitrate = 100000;
unsigned int ttl = 0;
EventStream::StreamMode replay = EventStream::MODE_SINGLE;
EventStream::StreamMode replay = EventStream::MODE_NONE;
std::string username;
std::string password;
char auth[64] = "";
@ -137,8 +137,17 @@ int main( int argc, const char *argv[] ) {
} else if ( !strcmp( name, "ttl" ) ) {
ttl = atoi(value);
} else if ( !strcmp( name, "replay" ) ) {
replay = !strcmp( value, "gapless" )?EventStream::MODE_ALL_GAPLESS:EventStream::MODE_SINGLE;
replay = !strcmp( value, "all" )?EventStream::MODE_ALL:replay;
if ( !strcmp(value, "gapless") ) {
replay = EventStream::MODE_ALL_GAPLESS;
} else if ( !strcmp(value, "all") ) {
replay = EventStream::MODE_ALL;
} else if ( !strcmp(value, "none") ) {
replay = EventStream::MODE_NONE;
} else if ( !strcmp(value, "single") ) {
replay = EventStream::MODE_SINGLE;
} else {
Error("Unsupported value %s for replay, defaulting to none", value);
}
} else if ( !strcmp( name, "connkey" ) ) {
connkey = atoi(value);
} else if ( !strcmp( name, "buffer" ) ) {

View File

@ -23,7 +23,7 @@ case $i in
shift # past argument=value
;;
-d=*|--distro=*)
DISTRO="${i#*=}"
DISTROS="${i#*=}"
shift # past argument=value
;;
-i=*|--interactive=*)
@ -74,11 +74,15 @@ else
echo "Doing $TYPE build"
fi;
if [ "$DISTRO" == "" ]; then
DISTRO=`lsb_release -a 2>/dev/null | grep Codename | awk '{print $2}'`;
echo "Defaulting to $DISTRO for distribution";
if [ "$DISTROS" == "" ]; then
if [ "$RELEASE" != "" ]; then
DISTROS="xenial,bionic,trusty"
else
DISTROS=`lsb_release -a 2>/dev/null | grep Codename | awk '{print $2}'`;
fi;
echo "Defaulting to $DISTROS for distribution";
else
echo "Building for $DISTRO";
echo "Building for $DISTROS";
fi;
# Release is a special mode... it uploads to the release ppa and cannot have a snapshot
@ -93,7 +97,8 @@ if [ "$RELEASE" != "" ]; then
else
GITHUB_FORK="ZoneMinder";
fi
BRANCH="release-$RELEASE"
# We use a tag instead of a branch atm.
BRANCH=$RELEASE
else
if [ "$GITHUB_FORK" == "" ]; then
echo "Defaulting to ZoneMinder upstream git"
@ -115,6 +120,18 @@ else
fi;
fi
PPA="";
if [ "$RELEASE" != "" ]; then
# We need to use our official tarball for the original source, so grab it and overwrite our generated one.
IFS='.' read -r -a VERSION <<< "$RELEASE"
PPA="ppa:iconnor/zoneminder-${VERSION[0]}.${VERSION[1]}"
else
if [ "$BRANCH" == "" ]; then
PPA="ppa:iconnor/zoneminder-master";
else
PPA="ppa:iconnor/zoneminder-$BRANCH";
fi;
fi;
# Instead of cloning from github each time, if we have a fork lying around, update it and pull from there instead.
if [ ! -d "${GITHUB_FORK}_zoneminder_release" ]; then
@ -153,6 +170,11 @@ if [ "$SNAPSHOT" != "stable" ] && [ "$SNAPSHOT" != "" ]; then
fi;
DIRECTORY="zoneminder_$VERSION";
if [ -d "$DIRECTORY.orig" ]; then
echo "$DIRECTORY.orig already exists. Please delete it."
exit 0;
fi;
echo "Doing $TYPE release $DIRECTORY";
mv "${GITHUB_FORK}_zoneminder_release" "$DIRECTORY.orig";
if [ $? -ne 0 ]; then
@ -160,36 +182,57 @@ if [ $? -ne 0 ]; then
echo "Setting up build dir failed.";
exit $?;
fi;
cd "$DIRECTORY.orig";
# Init submodules
git submodule init
git submodule update --init --recursive
if [ "$DISTRO" == "trusty" ] || [ "$DISTRO" == "precise" ]; then
mv distros/ubuntu1204 debian
else
if [ "$DISTRO" == "wheezy" ]; then
mv distros/debian debian
else
mv distros/ubuntu1604 debian
fi;
# Cleanup
rm -rf .git
rm .gitignore
cd ../
if [ ! -e "$DIRECTORY.orig.tar.gz" ]; then
tar zcf $DIRECTORY.orig.tar.gz $DIRECTORY.orig
fi;
if [ "$DEBEMAIL" != "" ] && [ "$DEBFULLNAME" != "" ]; then
IFS=',' ;for DISTRO in `echo "$DISTROS"`; do
echo "Generating package for $DISTRO";
cd $DIRECTORY.orig
if [ -e "debian" ]; then
rm -rf debian
fi;
# Generate Changlog
if [ "$DISTRO" == "trusty" ] || [ "$DISTRO" == "precise" ]; then
cp -Rpd distros/ubuntu1204 debian
else
if [ "$DISTRO" == "wheezy" ]; then
cp -Rpd distros/debian debian
else
cp -Rpd distros/ubuntu1604 debian
fi;
fi;
if [ "$DEBEMAIL" != "" ] && [ "$DEBFULLNAME" != "" ]; then
AUTHOR="$DEBFULLNAME <$DEBEMAIL>"
else
else
if [ -z `hostname -d` ] ; then
AUTHOR="`getent passwd $USER | cut -d ':' -f 5 | cut -d ',' -f 1` <`whoami`@`hostname`.local>"
else
AUTHOR="`getent passwd $USER | cut -d ':' -f 5 | cut -d ',' -f 1` <`whoami`@`hostname`>"
fi
fi
fi
if [ "$URGENCY" = "" ]; then
if [ "$URGENCY" = "" ]; then
URGENCY="medium"
fi;
fi;
if [ "$SNAPSHOT" == "stable" ]; then
cat <<EOF > debian/changelog
if [ "$SNAPSHOT" == "stable" ]; then
cat <<EOF > debian/changelog
zoneminder ($VERSION-$DISTRO${PACKAGE_VERSION}) $DISTRO; urgency=$URGENCY
* Release $VERSION
@ -197,43 +240,37 @@ zoneminder ($VERSION-$DISTRO${PACKAGE_VERSION}) $DISTRO; urgency=$URGENCY
-- $AUTHOR $DATE
EOF
cat <<EOF > debian/NEWS
cat <<EOF > debian/NEWS
zoneminder ($VERSION-$DISTRO${PACKAGE_VERSION}) $DISTRO; urgency=$URGENCY
* Release $VERSION
-- $AUTHOR $DATE
EOF
else
cat <<EOF > debian/changelog
else
cat <<EOF > debian/changelog
zoneminder ($VERSION-$DISTRO${PACKAGE_VERSION}) $DISTRO; urgency=$URGENCY
*
-- $AUTHOR $DATE
EOF
cat <<EOF > debian/changelog
cat <<EOF > debian/changelog
zoneminder ($VERSION-$DISTRO${PACKAGE_VERSION}) $DISTRO; urgency=$URGENCY
*
-- $AUTHOR $DATE
EOF
fi;
fi;
rm -rf .git
rm .gitignore
cd ../
tar zcf $DIRECTORY.orig.tar.gz $DIRECTORY.orig
cd $DIRECTORY.orig
if [ $TYPE == "binary" ]; then
if [ $TYPE == "binary" ]; then
# Auto-install all ZoneMinder's depedencies using the Debian control file
sudo apt-get install devscripts equivs
sudo mk-build-deps -ir ./debian/control
echo "Status: $?"
DEBUILD=debuild
else
else
if [ $TYPE == "local" ]; then
# Auto-install all ZoneMinder's depedencies using the Debian control file
sudo apt-get install devscripts equivs
@ -244,27 +281,20 @@ else
# Source build, don't need build depends.
DEBUILD="debuild -S -sa"
fi;
fi;
if [ "$DEBSIGN_KEYID" != "" ]; then
fi;
if [ "$DEBSIGN_KEYID" != "" ]; then
DEBUILD="$DEBUILD -k$DEBSIGN_KEYID"
fi
$DEBUILD
if [ $? -ne 0 ]; then
echo "Error status code is: $?"
fi
eval $DEBUILD
if [ $? -ne 0 ]; then
echo "Error status code is: $?"
echo "Build failed.";
exit $?;
fi;
fi;
cd ../
if [ "$INTERACTIVE" != "no" ]; then
read -p "Do you want to keep the checked out version of Zoneminder (incase you want to modify it later) [y/N]"
[[ $REPLY == [yY] ]] && { mv "$DIRECTORY.orig" zoneminder_release; echo "The checked out copy is preserved in zoneminder_release"; } || { rm -fr "$DIRECTORY.orig"; echo "The checked out copy has been deleted"; }
echo "Done!"
else
rm -fr "$DIRECTORY.orig"; echo "The checked out copy has been deleted";
fi
cd ../
if [ $TYPE == "binary" ]; then
if [ $TYPE == "binary" ]; then
if [ "$INTERACTIVE" != "no" ]; then
read -p "Not doing dput since it's a binary release. Do you want to install it? (y/N)"
if [[ $REPLY == [yY] ]]; then
@ -283,18 +313,8 @@ if [ $TYPE == "binary" ]; then
fi;
fi;
fi;
else
else
SC="zoneminder_${VERSION}-${DISTRO}${PACKAGE_VERSION}_source.changes";
PPA="";
if [ "$RELEASE" != "" ]; then
PPA="ppa:iconnor/zoneminder";
else
if [ "$BRANCH" == "" ]; then
PPA="ppa:iconnor/zoneminder-master";
else
PPA="ppa:iconnor/zoneminder-$BRANCH";
fi;
fi;
dput="Y";
if [ "$INTERACTIVE" != "no" ]; then
@ -303,6 +323,15 @@ else
dput $PPA $SC
fi;
fi;
fi;
fi;
done; # foreach distro
if [ "$INTERACTIVE" != "no" ]; then
read -p "Do you want to keep the checked out version of Zoneminder (incase you want to modify it later) [y/N]"
[[ $REPLY == [yY] ]] && { mv "$DIRECTORY.orig" zoneminder_release; echo "The checked out copy is preserved in zoneminder_release"; } || { rm -fr "$DIRECTORY.orig"; echo "The checked out copy has been deleted"; }
echo "Done!"
else
rm -fr "$DIRECTORY.orig"; echo "The checked out copy has been deleted";
fi

View File

@ -154,7 +154,7 @@ movecrud () {
echo "Unpacking CakePHP-Enum-Behavior plugin..."
tar -xzf build/cakephp-enum-behavior-${CEBVER}.tar.gz
rmdir web/api/app/Plugin/CakePHP-Enum-Behavior
mv -f crud-${CEBVER} web/api/app/Plugin/CakePHP-Enum-Behavior
mv -f CakePHP-Enum-Behavior-${CEBVER} web/api/app/Plugin/CakePHP-Enum-Behavior
fi
}

View File

@ -14,9 +14,17 @@ $| = 1;
my @monitors;
my $dbh = zmDbConnect();
my $sql = "SELECT * FROM Monitors";
my $sth = $dbh->prepare_cached( $sql ) or die( "Can't prepare '$sql': ".$dbh->errstr() );
my $res = $sth->execute() or die( "Can't execute '$sql': ".$sth->errstr() );
my $sql = "SELECT * FROM Monitors
WHERE find_in_set( Function, 'Modect,Mocord,Nodect' )".
( $Config{ZM_SERVER_ID} ? 'AND ServerId=?' : '' )
;
my $sth = $dbh->prepare_cached( $sql )
or die( "Can't prepare '$sql': ".$dbh->errstr() );
my $res = $sth->execute()
or die( "Can't execute '$sql': ".$sth->errstr() );
while ( my $monitor = $sth->fetchrow_hashref() ) {
push( @monitors, $monitor );
@ -24,6 +32,12 @@ while ( my $monitor = $sth->fetchrow_hashref() ) {
while (1) {
foreach my $monitor (@monitors) {
# Check shared memory ok
if ( !zmMemVerify( $monitor ) ) {
zmMemInvalidate( $monitor );
next;
}
my $monitorState = zmGetMonitorState($monitor);
printState($monitor->{Id}, $monitor->{Name}, $monitorState);
}

View File

@ -1 +1 @@
1.31.47
1.32.2

View File

@ -383,7 +383,7 @@ function getNearEvents() {
parseSort();
if ( $user['MonitorIds'] )
$midSql = ' and MonitorId in ('.join( ',', preg_split( '/["\'\s]*,["\'\s]*/', $user['MonitorIds'] ) ).')';
$midSql = ' AND MonitorId IN ('.join( ',', preg_split( '/["\'\s]*,["\'\s]*/', $user['MonitorIds'] ) ).')';
else
$midSql = '';
@ -392,32 +392,40 @@ function getNearEvents() {
$sortOrder = 'asc';
}
$sql = "SELECT E.Id AS Id, E.StartTime AS StartTime FROM Events AS E INNER JOIN Monitors AS M ON E.MonitorId = M.Id WHERE $sortColumn ".($sortOrder=='asc'?'<=':'>=')." '".$event[$_REQUEST['sort_field']]."'".$_REQUEST['filter']['sql'].$midSql." ORDER BY $sortColumn ".($sortOrder=='asc'?'desc':'asc') . ' LIMIT 2';
$sql = "SELECT E.Id AS Id, E.StartTime AS StartTime FROM Events AS E INNER JOIN Monitors AS M ON E.MonitorId = M.Id WHERE $sortColumn ".($sortOrder=='asc'?'<=':'>=')." '".$event[$_REQUEST['sort_field']]."'".$_REQUEST['filter']['sql'].$midSql.' AND E.Id<'.$event['Id'] . " ORDER BY $sortColumn ".($sortOrder=='asc'?'desc':'asc');
if ( $sortColumn != 'E.Id' ) {
# When sorting by starttime, if we have two events with the same starttime (diffreent monitors) then we should sort secondly by Id
$sql .= ', E.Id DESC';
}
$sql .= ' LIMIT 1';
$result = dbQuery( $sql );
while ( $id = dbFetchNext( $result, 'Id' ) ) {
if ( $id == $eventId ) {
$prevEvent = dbFetchNext( $result );
break;
}
}
$sql = "SELECT E.Id AS Id, E.StartTime AS StartTime FROM Events AS E INNER JOIN Monitors AS M ON E.MonitorId = M.Id WHERE $sortColumn ".($sortOrder=='asc'?'>=':'<=')." '".$event[$_REQUEST['sort_field']]."'".$_REQUEST['filter']['sql'].$midSql." ORDER BY $sortColumn $sortOrder LIMIT 2";
$sql = "SELECT E.Id AS Id, E.StartTime AS StartTime FROM Events AS E INNER JOIN Monitors AS M ON E.MonitorId = M.Id WHERE $sortColumn ".($sortOrder=='asc'?'>=':'<=')." '".$event[$_REQUEST['sort_field']]."'".$_REQUEST['filter']['sql'].$midSql.' AND E.Id>'.$event['Id'] . " ORDER BY $sortColumn $sortOrder";
if ( $sortColumn != 'E.Id' ) {
# When sorting by starttime, if we have two events with the same starttime (diffreent monitors) then we should sort secondly by Id
$sql .= ', E.Id ASC';
}
$sql .= ' LIMIT 1';
$result = dbQuery( $sql );
while ( $id = dbFetchNext( $result, 'Id' ) ) {
if ( $id == $eventId ) {
$nextEvent = dbFetchNext( $result );
break;
}
}
$result = array( 'EventId'=>$eventId );
$result['PrevEventId'] = empty($prevEvent)?0:$prevEvent['Id'];
$result['NextEventId'] = empty($nextEvent)?0:$nextEvent['Id'];
$result['PrevEventStartTime'] = empty($prevEvent)?0:$prevEvent['StartTime'];
$result['NextEventStartTime'] = empty($nextEvent)?0:$nextEvent['StartTime'];
$result['PrevEventDefVideoPath'] = empty($prevEvent)?0:(getEventDefaultVideoPath($prevEvent['Id']));
$result['NextEventDefVideoPath'] = empty($nextEvent)?0:(getEventDefaultVideoPath($nextEvent['Id']));
return( $result );
if ( $prevEvent ) {
$result['PrevEventId'] = $prevEvent['Id'];
$result['PrevEventStartTime'] = $prevEvent['StartTime'];
$result['PrevEventDefVideoPath'] = getEventDefaultVideoPath($prevEvent['Id']);
} else {
$result['PrevEventId'] = $result['PrevEventStartTime'] = $result['PrevEventDefVideoPath'] = 0;
}
if ( $nextEvent ) {
$result['NextEventId'] = $nextEvent['Id'];
$result['NextEventStartTime'] = $nextEvent['StartTime'];
$result['NextEventDefVideoPath'] = getEventDefaultVideoPath($nextEvent['Id']);
} else {
$result['NextEventId'] = $result['NextEventStartTime'] = $result['NextEventDefVideoPath'] = 0;
}
return $result;
}
?>

View File

@ -101,27 +101,25 @@ class HostController extends AppController {
$this->loadModel('Monitor');
// If $mid is passed, see if it is valid
if ($mid) {
if (!$this->Monitor->exists($mid)) {
if ( $mid ) {
if ( !$this->Monitor->exists($mid) ) {
throw new NotFoundException(__('Invalid monitor'));
}
}
$zm_dir_events = $this->Config->find('list', array(
'conditions' => array('Name' => 'ZM_DIR_EVENTS'),
'fields' => array('Name', 'Value')
));
$zm_dir_events = $zm_dir_events['ZM_DIR_EVENTS' ];
$zm_dir_events = ZM_DIR_EVENTS;
// Test to see if $zm_dir_events is relative or absolute
if ('/' === "" || strrpos($zm_dir_events, '/', -strlen($zm_dir_events)) !== TRUE) {
#if ('/' === "" || strrpos($zm_dir_events, '/', -strlen($zm_dir_events)) !== TRUE) {
if ( substr($zm_dir_events, 0, 1) != '/' ) {
// relative - so add the full path
$zm_dir_events = Configure::read('ZM_PATH_WEB') . '/' . $zm_dir_events;
$zm_dir_events = ZM_PATH_WEB . '/' . $zm_dir_events;
}
if ($mid) {
if ( $mid ) {
// Get disk usage for $mid
$usage = shell_exec ("du -sh0 $zm_dir_events/$mid | awk '{print $1}'");
Logger::Debug("Executing du -s0 $zm_dir_events/$mid | awk '{print $1}'");
$usage = shell_exec("du -s0 $zm_dir_events/$mid | awk '{print $1}'");
} else {
$monitors = $this->Monitor->find('all', array(
'fields' => array('Id', 'Name', 'WebColour')

View File

@ -0,0 +1,157 @@
<?php
App::uses('AppController', 'Controller');
/**
* Storage Controller
*
* @property Storage $Storage
* @property PaginatorComponent $Paginator
*/
class StorageController extends AppController {
/**
* Components
*
* @var array
*/
public $components = array('Paginator', 'RequestHandler');
public function beforeFilter() {
parent::beforeFilter();
global $user;
$canView = (!$user) || ($user['System'] != 'None');
if ( !$canView ) {
throw new UnauthorizedException(__('Insufficient Privileges'));
return;
}
}
/**
* index method
*
* @return void
*/
public function index() {
$this->Storage->recursive = 0;
$options = '';
$storage_areas = $this->Storage->find('all',$options);
$this->set(array(
'storage' => $storage_areas,
'_serialize' => array('storage')
));
}
/**
* view method
*
* @throws NotFoundException
* @param string $id
* @return void
*/
public function view($id = null) {
$this->Storage->recursive = 0;
if (!$this->Storage->exists($id)) {
throw new NotFoundException(__('Invalid storage area'));
}
$restricted = '';
$options = array('conditions' => array(
array('Storage.' . $this->Storage->primaryKey => $id),
$restricted
)
);
$storage = $this->Storage->find('first', $options);
$this->set(array(
'storage' => $storage,
'_serialize' => array('storage')
));
}
/**
* add method
*
* @return void
*/
public function add() {
if ( $this->request->is('post') ) {
global $user;
$canEdit = (!$user) || ($user['System'] == 'Edit');
if ( !$canEdit ) {
throw new UnauthorizedException(__('Insufficient privileges'));
return;
}
$this->Storage->create();
if ( $this->Storage->save($this->request->data) ) {
# Might be nice to send it a start request
#$this->daemonControl($this->Storage->id, 'start', $this->request->data);
return $this->flash(__('The storage area has been saved.'), array('action' => 'index'));
}
}
}
/**
* edit method
*
* @throws NotFoundException
* @param string $id
* @return void
*/
public function edit($id = null) {
$this->Storage->id = $id;
global $user;
$canEdit = (!$user) || ($user['System'] == 'Edit');
if ( !$canEdit ) {
throw new UnauthorizedException(__('Insufficient privileges'));
return;
}
if ( !$this->Storage->exists($id) ) {
throw new NotFoundException(__('Invalid storage area'));
}
if ( $this->Storage->save($this->request->data) ) {
$message = 'Saved';
} else {
$message = 'Error';
}
$this->set(array(
'message' => $message,
'_serialize' => array('message')
));
// - restart this storage area after change
#$this->daemonControl($this->Storage->id, 'restart', $this->request->data);
}
/**
* delete method
*
* @throws NotFoundException
* @param string $id
* @return void
*/
public function delete($id = null) {
global $user;
$canEdit = (!$user) || ($user['System'] == 'Edit');
if ( !$canEdit ) {
throw new UnauthorizedException(__('Insufficient privileges'));
return;
}
$this->Storage->id = $id;
if ( !$this->Storage->exists() ) {
throw new NotFoundException(__('Invalid storage area'));
}
$this->request->allowMethod('post', 'delete');
#$this->daemonControl($this->Storage->id, 'stop');
if ( $this->Storage->delete() ) {
return $this->flash(__('The storage area has been deleted.'), array('action' => 'index'));
} else {
return $this->flash(__('The storage area could not be deleted. Please, try again.'), array('action' => 'index'));
}
}
}

View File

@ -110,7 +110,7 @@ class Monitor extends AppModel {
);
public $actsAs = array(
'CakePHP-Enum-Behavior.Enum' => array(
'Type' => array('Local','Remote','File','Ffmpeg','Libvlc','cURL'),
'Type' => array('Local','Remote','File','Ffmpeg','Libvlc','cURL','WebSite'),
'Function' => array('None','Monitor','Modect','Record','Mocord','Nodect'),
'Orientation' => array('0','90','180','270','hori','vert'),
'OutputCodec' => array('h264','mjpeg','mpeg1','mpeg2'),

View File

@ -19,7 +19,7 @@
.overlayHeader {
float: left;
background-color: #dddddd;
background-color: #853131;
width: 100%;
border-bottom: 1px solid #666666;
color: black;

31
web/fonts/license.md Normal file
View File

@ -0,0 +1,31 @@
ZoneMinder uses certain 3rd party media assets/libraries for UI display purposes. Their licenses are listed in this file
### Material Design icons
Origin: https://github.com/google/material-design-icons
License: Apache 2.0 (https://github.com/google/material-design-icons/blob/master/LICENSE)
### Glyphicon halflings font
Origin: http://www.glyphicons.com/
License: MIT, As clarified below (http://www.glyphicons.com/license/)
```
License for GLYPHICONS Halflings in Bootstrap
GLYPHICONS Halflings font is also released as an extension of a Bootstrap www.getbootstrap.com for free and
it is released under the same license as Bootstrap. While you are not required to include attribution on your
Bootstrap-based projects, I would certainly appreciate any form of support, even a nice Tweet is enough.
Of course if you want, you can say thank you and support me by buying more icons on GLYPHICONS.com.
Jan Kovařík
```
ZoneMinder uses Bootstrap for UI and qualifies as a Bootstrap-based project.
Bootstrap is MIT licensed (https://github.com/twbs/bootstrap/blob/v4.1.3/LICENSE)

View File

@ -194,12 +194,12 @@ private $defaults = array(
}
if ( isset($options['limit']) ) {
if ( is_integer($options['limit']) or ctype_digit($options['limit']) ) {
$sql .= ' LIMIT ' . $limit;
$sql .= ' LIMIT ' . $options['limit'];
} else {
$backTrace = debug_backtrace();
$file = $backTrace[1]['file'];
$line = $backTrace[1]['line'];
Error("Invalid value for limit($limit) passed to Control::find from $file:$line");
Error("Invalid value for limit(".$options['limit'].") passed to Control::find from $file:$line");
return;
}
}

View File

@ -84,7 +84,12 @@ class Event {
}
public function Monitor() {
return new Monitor( isset($this->{'MonitorId'}) ? $this->{'MonitorId'} : NULL );
if ( isset($this->{'MonitorId'}) ) {
$Monitor = Monitor::find_one(array('Id'=>$this->{'MonitorId'}));
if ( $Monitor )
return $Monitor;
}
return new Monitor();
}
public function __call( $fn, array $args){
@ -95,9 +100,13 @@ class Event {
return $this->{$fn};
$backTrace = debug_backtrace();
$file = $backTrace[0]['file'];
$line = $backTrace[0]['line'];
Warning("Unknown function call Event->$fn from $file:$line");
$file = $backTrace[1]['file'];
$line = $backTrace[1]['line'];
Warning("Unknown function call Event->$fn from $file:$line");
Warning(print_r( $this, true ));
}
}
@ -498,7 +507,6 @@ class Event {
}
public static function find( $parameters = null, $options = null ) {
$filters = array();
$sql = 'SELECT * FROM Events ';
$values = array();
@ -526,20 +534,21 @@ class Event {
}
if ( isset($options['limit']) ) {
if ( is_integer($options['limit']) or ctype_digit($options['limit']) ) {
$sql .= ' LIMIT ' . $limit;
$sql .= ' LIMIT ' . $options['limit'];
} else {
$backTrace = debug_backtrace();
$file = $backTrace[1]['file'];
$line = $backTrace[1]['line'];
Error("Invalid value for limit($limit) passed to Event::find from $file:$line");
Error("Invalid value for limit(".$options['limit'].") passed to Event::find from $file:$line");
return array();
}
}
}
$filters = array();
$result = dbQuery($sql, $values);
$results = $result->fetchALL(PDO::FETCH_CLASS | PDO::FETCH_PROPS_LATE, 'Event');
foreach ( $results as $row => $obj ) {
$filters[] = $obj;
$results = $result->fetchALL();
foreach ( $results as $row ) {
$filters[] = new Event($row);
}
return $filters;
}

View File

@ -11,6 +11,7 @@ public $defaults = array(
'AutoDelete' => 0,
'AutoArchive' => 0,
'AutoVideo' => 0,
'AutoUpload' => 0,
'AutoMessage' => 0,
'AutoMove' => 0,
'AutoMoveTo' => 0,
@ -139,12 +140,12 @@ public $defaults = array(
}
if ( isset($options['limit']) ) {
if ( is_integer($options['limit']) or ctype_digit($options['limit']) ) {
$sql .= ' LIMIT ' . $limit;
$sql .= ' LIMIT ' . $options['limit'];
} else {
$backTrace = debug_backtrace();
$file = $backTrace[1]['file'];
$line = $backTrace[1]['line'];
Error("Invalid value for limit($limit) passed to Filter::find from $file:$line");
Error("Invalid value for limit(".$options['limit'].") passed to Filter::find from $file:$line");
return array();
}
}
@ -184,7 +185,7 @@ public $defaults = array(
$this->{$k} = $v;
}
}
}
} # end class
} # end function set
} # end class Filter
?>

View File

@ -55,7 +55,7 @@ class Frame {
#return $_SERVER['PHP_SELF'].'?view=image&fid='.$this->{'Id'}.'&show='.$show.'&filename='.$this->Event()->MonitorId().'_'.$this->{'EventId'}.'_'.$this->{'FrameId'}.'.jpg';
} // end function getImageSrc
public static function find( $parameters = array(), $limit = NULL ) {
public static function find( $parameters = array(), $options = NULL ) {
$sql = 'SELECT * FROM Frames';
$values = array();
if ( sizeof($parameters) ) {
@ -65,17 +65,23 @@ class Frame {
) );
$values = array_values( $parameters );
}
if ( $limit ) {
if ( is_integer( $limit ) or ctype_digit( $limit ) ) {
$sql .= ' LIMIT ' . $limit;
if ( $options ) {
if ( isset($options['order']) ) {
$sql .= ' ORDER BY ' . $options['order'];
}
if ( isset($options['limit']) ) {
if ( is_integer($options['limit']) or ctype_digit($options['limit']) ) {
$sql .= ' LIMIT ' . $options['limit'];
} else {
$backTrace = debug_backtrace();
$file = $backTrace[1]['file'];
$line = $backTrace[1]['line'];
Error("Invalid value for limit($limit) passed to Frame::find from $file:$line");
Error("Invalid value for limit(".$options['limit'].") passed to Frame::find from $file:$line");
return array();
}
}
}
$results = dbFetchAll($sql, NULL, $values);
if ( $results ) {
return array_map( function($id){ return new Frame($id); }, $results );
@ -83,8 +89,9 @@ class Frame {
return array();
}
public static function find_one( $parameters = array() ) {
$results = Frame::find( $parameters, 1 );
public static function find_one( $parameters = array(), $options = null ) {
$options['limit'] = 1;
$results = Frame::find($parameters, $options);
if ( ! sizeof($results) ) {
return;
}

View File

@ -85,12 +85,12 @@ class Group {
}
if ( isset($options['limit']) ) {
if ( is_integer($options['limit']) or ctype_digit($options['limit']) ) {
$sql .= ' LIMIT ' . $limit;
$sql .= ' LIMIT ' . $options['limit'];
} else {
$backTrace = debug_backtrace();
$file = $backTrace[1]['file'];
$line = $backTrace[1]['line'];
Error("Invalid value for limit($limit) passed to Group::find from $file:$line");
Error("Invalid value for limit(".$options['limit'].") passed to Group::find from $file:$line");
return array();
}
}

View File

@ -2,6 +2,8 @@
require_once('database.php');
require_once('Server.php');
$monitor_cache = array();
class Monitor {
private $defaults = array(
@ -151,10 +153,11 @@ private $control_fields = array(
}
if ( $this->{'Controllable'} ) {
$s = dbFetchOne('SELECT * FROM Controls WHERE Id=?', NULL, array($this->{'ControlId'}) );
if ( $s ) {
foreach ($s as $k => $v) {
if ( $k == 'Id' ) {
continue;
# The reason for these is that the name overlaps Monitor fields.
# The reason for these is that the name overlaps Monitor fields.
} else if ( $k == 'Protocol' ) {
$this->{'ControlProtocol'} = $v;
} else if ( $k == 'Name' ) {
@ -165,7 +168,12 @@ private $control_fields = array(
$this->{$k} = $v;
}
}
} else {
Warning('No Controls found for monitor '.$this->{'Id'} . ' ' . $this->{'Name'}.' althrough it is marked as controllable');
}
}
global $monitor_cache;
$monitor_cache[$row['Id']] = $this;
} else {
Error('No row for Monitor ' . $IdOrRow);
@ -307,26 +315,33 @@ private $control_fields = array(
}
if ( isset($options['limit']) ) {
if ( is_integer($options['limit']) or ctype_digit($options['limit']) ) {
$sql .= ' LIMIT ' . $limit;
$sql .= ' LIMIT ' . $options['limit'];
} else {
$backTrace = debug_backtrace();
$file = $backTrace[1]['file'];
$line = $backTrace[1]['line'];
Error("Invalid value for limit($limit) passed to Control::find from $file:$line");
Error("Invalid value for limit(".$options['limit'].") passed to Control::find from $file:$line");
return array();
}
}
}
$monitors = array();
$result = dbQuery($sql, $values);
$results = $result->fetchALL(PDO::FETCH_CLASS | PDO::FETCH_PROPS_LATE, 'Monitor');
foreach ( $results as $row => $obj ) {
$monitors[] = $obj;
$results = $result->fetchALL();
foreach ( $results as $row ) {
$monitors[] = new Monitor($row);
}
return $monitors;
} # end find
public static function find_one( $parameters = array() ) {
global $monitor_cache;
if (
( count($parameters) == 1 ) and
isset($parameters['Id']) and
isset($monitor_cache[$parameters['Id']]) ) {
return $monitor_cache[$parameters['Id']];
}
$results = Monitor::find( $parameters, array('limit'=>1) );
if ( ! sizeof($results) ) {
return;
@ -371,7 +386,7 @@ private $control_fields = array(
} else if ( $this->ServerId() ) {
$Server = $this->Server();
$url = $Server->Url() . '/zm/api/monitors/'.$this->{'Id'}.'.json';
$url = ZM_BASE_PROTOCOL . '://'.$Server->Hostname().'/zm/api/monitors/'.$this->{'Id'}.'.json';
if ( ZM_OPT_USE_AUTH ) {
if ( ZM_AUTH_RELAY == 'hashed' ) {
$url .= '?auth='.generateAuthHash( ZM_AUTH_HASH_IPS );
@ -511,8 +526,12 @@ private $control_fields = array(
$source = preg_replace( '/^.*\//', '', $this->{'Path'} );
} elseif ( $this->{'Type'} == 'Ffmpeg' || $this->{'Type'} == 'Libvlc' || $this->{'Type'} == 'WebSite' ) {
$url_parts = parse_url( $this->{'Path'} );
if ( ZM_WEB_FILTER_SOURCE == "Hostname" ) { # Filter out everything but the hostname
if ( ZM_WEB_FILTER_SOURCE == 'Hostname' ) { # Filter out everything but the hostname
if ( isset($url_parts['host']) ) {
$source = $url_parts['host'];
} else {
$source = $this->{'Path'};
}
} elseif ( ZM_WEB_FILTER_SOURCE == "NoCredentials" ) { # Filter out sensitive and common items
unset($url_parts['user']);
unset($url_parts['pass']);
@ -532,6 +551,9 @@ private $control_fields = array(
return $source;
} // end function Source
public function Url() {
return $this->Server()->Url( ZM_MIN_STREAMING_PORT ? (ZM_MIN_STREAMING_PORT+$this->Id()) : null );
}
} // end class Monitor
?>

View File

@ -1,6 +1,8 @@
<?php
require_once('database.php');
$server_cache = array();
class Server {
private $defaults = array(
'Id' => null,
@ -10,7 +12,10 @@ class Server {
'zmstats' => 1,
'zmtrigger' => 0,
);
public function __construct( $IdOrRow = NULL ) {
global $server_cache;
$row = NULL;
if ( $IdOrRow ) {
if ( is_integer($IdOrRow) or ctype_digit($IdOrRow) ) {
@ -26,19 +31,27 @@ class Server {
foreach ($row as $k => $v) {
$this->{$k} = $v;
}
$server_cache[$row['Id']] = $this;
} else {
$this->{'Name'} = '';
$this->{'Hostname'} = '';
}
}
public function Url() {
public function Url( $port = null ) {
$url = ZM_BASE_PROTOCOL . '://';
if ( $this->Id() ) {
return ZM_BASE_PROTOCOL . '://'. $this->Hostname();
$url .= $this->Hostname();
} else {
return ZM_BASE_PROTOCOL . '://'. $_SERVER['SERVER_NAME'];
return '';
$url .= $_SERVER['SERVER_NAME'];
}
if ( $port ) {
$url .= ':'.$port;
} else {
$url .= ':'.$_SERVER['SERVER_PORT'];
}
$url .= $_SERVER['PHP_SELF'];
return $url;
}
public function Hostname() {
if ( isset( $this->{'Hostname'} ) and ( $this->{'Hostname'} != '' ) ) {
@ -92,12 +105,12 @@ class Server {
}
if ( isset($options['limit']) ) {
if ( is_integer($options['limit']) or ctype_digit($options['limit']) ) {
$sql .= ' LIMIT ' . $limit;
$sql .= ' LIMIT ' . $options['limit'];
} else {
$backTrace = debug_backtrace();
$file = $backTrace[1]['file'];
$line = $backTrace[1]['line'];
Error("Invalid value for limit($limit) passed to Server::find from $file:$line");
Error("Invalid value for limit(".$options['limit'].") passed to Server::find from $file:$line");
return array();
}
}
@ -110,6 +123,13 @@ class Server {
}
public static function find_one( $parameters = array() ) {
global $server_cache;
if (
( count($parameters) == 1 ) and
isset($parameters['Id']) and
isset($server_cache[$parameters['Id']]) ) {
return $server_cache[$parameters['Id']];
}
$results = Server::find( $parameters, array('limit'=>1) );
if ( ! sizeof($results) ) {
return;

View File

@ -3,15 +3,27 @@ require_once('database.php');
$storage_cache = array();
class Storage {
private $defaults = array(
'Id' => null,
'Path' => '',
'Name' => '',
'Type' => 'local',
'Url' => '',
'DiskSpace' => null,
'Scheme' => 'Medium',
'ServerId' => 0,
'DoDelete' => 1,
);
public function __construct( $IdOrRow = NULL ) {
global $storage_cache;
$row = NULL;
if ( $IdOrRow ) {
if ( is_integer( $IdOrRow ) or is_numeric( $IdOrRow ) ) {
$row = dbFetchOne( 'SELECT * FROM Storage WHERE Id=?', NULL, array( $IdOrRow ) );
if ( is_integer($IdOrRow) or is_numeric($IdOrRow) ) {
$row = dbFetchOne('SELECT * FROM Storage WHERE Id=?', NULL, array($IdOrRow));
if ( ! $row ) {
Error("Unable to load Storage record for Id=" . $IdOrRow );
Error('Unable to load Storage record for Id=' . $IdOrRow);
}
} else if ( is_array($IdOrRow) ) {
$row = $IdOrRow;
@ -59,7 +71,13 @@ class Storage {
if ( array_key_exists($fn, $this) )
return $this->{$fn};
if ( array_key_exists( $fn, $this->defaults ) )
return $this->defaults{$fn};
$backTrace = debug_backtrace();
$file = $backTrace[0]['file'];
$line = $backTrace[0]['line'];
Warning("Unknown function call Storage->$fn from $file:$line");
$file = $backTrace[1]['file'];
$line = $backTrace[1]['line'];
Warning("Unknown function call Storage->$fn from $file:$line");
@ -73,6 +91,7 @@ class Storage {
isset($storage_cache[$parameters['Id']]) ) {
return $storage_cache[$parameters['Id']];
}
$results = Storage::find($parameters, $options);
if ( count($results) > 1 ) {
Error("Storage Returned more than 1");
@ -111,12 +130,12 @@ class Storage {
} # end if options
if ( isset($options['limit']) ) {
if ( is_integer($options['limit']) or ctype_digit($options['limit']) ) {
$sql .= ' LIMIT ' . $limit;
$sql .= ' LIMIT ' . $option['limit'];
} else {
$backTrace = debug_backtrace();
$file = $backTrace[1]['file'];
$line = $backTrace[1]['line'];
Error("Invalid value for limit($limit) passed to Control::find from $file:$line");
Error("Invalid value for limit(".$options['limit'].") passed to Control::find from $file:$line");
return array();
}
} # end if limit
@ -124,9 +143,9 @@ class Storage {
$storage_areas = array();
$result = dbQuery($sql, $values);
if ( $result ) {
$results = $result->fetchALL(PDO::FETCH_CLASS | PDO::FETCH_PROPS_LATE, 'Storage');
foreach ( $results as $row => $obj ) {
$storage_areas[] = $obj;
$results = $result->fetchALL();
foreach ( $results as $row ) {
$storage_areas[] = new Storage($row);
}
}
return $storage_areas;

View File

@ -116,7 +116,7 @@ function generateAuthHash($useRemoteAddr, $force=false) {
$time = time();
$mintime = $time - ( ZM_AUTH_HASH_TTL * 1800 );
if ( $force or ( !isset($_SESSION['AuthHash']) ) or ( $_SESSION['AuthHashGeneratedAt'] < $mintime ) ) {
if ( $force or ( !isset($_SESSION['AuthHash'.$_SESSION['remoteAddr']]) ) or ( $_SESSION['AuthHashGeneratedAt'] < $mintime ) ) {
# Don't both regenerating Auth Hash if an hour hasn't gone by yet
$local_time = localtime();
$authKey = '';
@ -133,7 +133,7 @@ function generateAuthHash($useRemoteAddr, $force=false) {
session_start();
$close_session = 1;
}
$_SESSION['AuthHash'] = $auth;
$_SESSION['AuthHash'.$_SESSION['remoteAddr']] = $auth;
$_SESSION['AuthHashGeneratedAt'] = $time;
session_write_close();
} else {
@ -143,7 +143,7 @@ function generateAuthHash($useRemoteAddr, $force=false) {
#} else {
#Logger::Debug("Using cached auth " . $_SESSION['AuthHash'] ." beacuse generatedat:" . $_SESSION['AuthHashGeneratedAt'] . ' < now:'. $time . ' - ' . ZM_AUTH_HASH_TTL . ' * 1800 = '. $mintime);
} # end if AuthHash is not cached
return $_SESSION['AuthHash'];
return $_SESSION['AuthHash'.$_SESSION['remoteAddr']];
} # end if using AUTH and AUTH_RELAY
return '';
}

View File

@ -36,25 +36,27 @@ function noCacheHeaders() {
}
function CORSHeaders() {
if ( isset( $_SERVER['HTTP_ORIGIN'] ) ) {
if ( isset($_SERVER['HTTP_ORIGIN']) ) {
# The following is left for future reference/use.
$valid = false;
$servers = dbFetchAll( 'SELECT * FROM Servers' );
if ( sizeof($servers) <= 1 ) {
$Servers = Server::find();
if ( sizeof($Servers) <= 1 ) {
# Only need CORSHeaders in the event that there are multiple servers in use.
# ICON: Might not be true. multi-port?
return;
}
foreach( $servers as $row ) {
$Server = new Server( $row );
if ( $_SERVER['HTTP_ORIGIN'] == $Server->Url() ) {
foreach( $Servers as $Server ) {
if ( preg_match('/^(https?:\/\/)?'.preg_quote($Server->Hostname(),'/').'/', $_SERVER['HTTP_ORIGIN']) ) {
$valid = true;
header('Access-Control-Allow-Origin: ' . $Server->Url() );
Logger::Debug("Setting Access-Controll-Allow-Origin from " . $_SERVER['HTTP_ORIGIN']);
header('Access-Control-Allow-Origin: ' . $_SERVER['HTTP_ORIGIN']);
header('Access-Control-Allow-Headers: x-requested-with,x-request');
break;
}
}
if ( ! $valid ) {
Warning( $_SERVER['HTTP_ORIGIN'] . ' is not found in servers list.' );
if ( !$valid ) {
Warning($_SERVER['HTTP_ORIGIN'] . ' is not found in servers list.');
}
}
}
@ -910,7 +912,7 @@ function reScale( $dimension, $dummy ) {
$new_dimension = $dimension;
for ( $i = 1; $i < func_num_args(); $i++ ) {
$scale = func_get_arg( $i );
if ( !empty($scale) && $scale != SCALE_BASE )
if ( !empty($scale) && ($scale != 'auto') && ($scale != SCALE_BASE) )
$new_dimension = (int)(($new_dimension*$scale)/SCALE_BASE);
}
return( $new_dimension );

View File

@ -183,12 +183,13 @@ foreach ( getSkinIncludes('skin.php') as $includeFile )
require_once $includeFile;
if ( ZM_OPT_USE_AUTH ) {
if ( ZM_AUTH_HASH_LOGINS ) {
if ( empty($user) && ! empty($_REQUEST['auth']) ) {
if ( ZM_AUTH_HASH_LOGINS && empty($user) && ! empty($_REQUEST['auth']) ) {
if ( $authUser = getAuthUser($_REQUEST['auth']) ) {
userLogin($authUser['Username'], $authUser['Password'], true);
}
}
else if ( isset($_REQUEST['username']) and isset($_REQUEST['password']) ) {
userLogin($_REQUEST['username'], $_REQUEST['password'], false);
}
if ( !empty($user) ) {
// generate it once here, while session is open. Value will be cached in session and return when called later on

View File

@ -82,6 +82,8 @@ $SLANG = array(
'Actual' => 'Actual',
'AddNewControl' => '新增控制',
'AddNewMonitor' => '新增監視',
'AddNewServer' => 'Add New Server', // Added - 2018-08-30
'AddNewStorage' => 'Add New Storage', // Added - 2018-08-30
'AddNewUser' => '新增使用者',
'AddNewZone' => '新增監視區',
'Alarm' => '警報',
@ -109,22 +111,32 @@ $SLANG = array(
'AttrArchiveStatus' => 'Archive Status',
'AttrAvgScore' => 'Average Score',
'AttrCause' => 'Cause',
'AttrDate' => 'Date',
'AttrDateTime' => 'Date/Time',
'AttrDiskBlocks' => 'Disk Blocks',
'AttrDiskPercent' => 'Disk Percent',
'AttrDiskSpace' => 'Disk Space', // Added - 2018-08-30
'AttrDuration' => 'Duration',
'AttrEndDate' => 'End Date', // Added - 2018-08-30
'AttrEndDateTime' => 'End Date/Time', // Added - 2018-08-30
'AttrEndTime' => 'End Time', // Added - 2018-08-30
'AttrEndWeekday' => 'End Weekday', // Added - 2018-08-30
'AttrFilterServer' => 'Server Filter is Running On', // Added - 2018-08-30
'AttrFrames' => 'Frames',
'AttrId' => 'Id',
'AttrMaxScore' => 'Max. Score',
'AttrMonitorId' => 'Monitor Id',
'AttrMonitorName' => 'Monitor Name',
'AttrMonitorServer' => 'Server Monitor is Running On', // Added - 2018-08-30
'AttrName' => 'Name',
'AttrNotes' => 'Notes',
'AttrStartDate' => 'Start Date', // Added - 2018-08-30
'AttrStartDateTime' => 'Start Date/Time', // Added - 2018-08-30
'AttrStartTime' => 'Start Time', // Added - 2018-08-30
'AttrStartWeekday' => 'Start Weekday', // Added - 2018-08-30
'AttrStateId' => 'Run State', // Added - 2018-08-30
'AttrStorageArea' => 'Storage Area', // Added - 2018-08-30
'AttrStorageServer' => 'Server Hosting Storage', // Added - 2018-08-30
'AttrSystemLoad' => 'System Load',
'AttrTime' => 'Time',
'AttrTotalScore' => 'Total Score',
'AttrWeekday' => 'Weekday',
'Auto' => '自動',
'AutoStopTimeout' => '時間過自動停止',
'Available' => 'Available', // Added - 2009-03-31
@ -157,9 +169,11 @@ $SLANG = array(
'BadRefBlendPerc' => 'Reference blend percentage must be a positive integer',
'BadSectionLength' => 'Section length must be an integer of 30 or more',
'BadSignalCheckColour' => 'Signal check colour must be a valid RGB colour string',
'BadSourceType' => 'Source Type \"Web Site\" requires the Function to be set to \"Monitor\"', // Added - 2018-08-30
'BadStreamReplayBuffer'=> 'Stream replay buffer must be an integer of zero or more',
'BadWarmupCount' => 'Warmup frames must be an integer of zero or more',
'BadWebColour' => 'Web colour must be a valid web colour string',
'BadWebSitePath' => 'Please enter a complete website url, including the http:// or https:// prefix.', // Added - 2018-08-30
'BadWidth' => 'Width must be set to a valid value',
'Bandwidth' => '頻寬',
'BandwidthHead' => 'Bandwidth', // This is the end of the bandwidth status on the top of the console, different in many language due to phrasing
@ -223,10 +237,12 @@ $SLANG = array(
'ChooseLogSelection' => 'Choose a log selection', // Added - 2011-06-17
'ChoosePreset' => 'Choose Preset',
'Clear' => 'Clear', // Added - 2011-06-16
'CloneMonitor' => 'Clone', // Added - 2018-08-30
'Close' => '關閉',
'Colour' => 'Colour',
'Command' => 'Command',
'Component' => 'Component', // Added - 2011-06-16
'ConcurrentFilter' => 'Run filter concurrently', // Added - 2018-08-30
'Config' => 'Config',
'ConfiguredFor' => '配置為',
'ConfirmDeleteEvents' => 'Are you sure you wish to delete the selected events?',
@ -284,9 +300,11 @@ $SLANG = array(
'DonateRemindWeek' => 'Not yet, remind again in 1 week',
'DonateYes' => 'Yes, I\'d like to donate now',
'Download' => '下載',
'DownloadVideo' => 'Download Video', // Added - 2018-08-30
'DuplicateMonitorName' => 'Duplicate Monitor Name', // Added - 2009-03-31
'Duration' => '歷時',
'Edit' => '編輯',
'EditLayout' => 'Edit Layout', // Added - 2018-08-30
'Email' => 'Email',
'EnableAlarms' => '啟動警報',
'Enabled' => '啟用',
@ -303,6 +321,7 @@ $SLANG = array(
'Events' => '事件',
'Exclude' => '不包含',
'Execute' => 'Execute',
'Exif' => 'Embed EXIF data into image', // Added - 2018-08-30
'Export' => '輸出',
'ExportDetails' => '輸出事件細項',
'ExportFailed' => '輸出失敗',
@ -332,8 +351,10 @@ $SLANG = array(
'FilterExecuteEvents' => '自動執行符合指令',
'FilterLog' => 'Filter log', // Added - 2015-04-18
'FilterMessageEvents' => '自動發出符合訊息',
'FilterMoveEvents' => 'Move all matches', // Added - 2018-08-30
'FilterPx' => 'Filter Px',
'FilterUnset' => '您必需設定濾鏡的寬度和高度',
'FilterUpdateDiskSpace'=> 'Update used disk space', // Added - 2018-08-30
'FilterUploadEvents' => '自動上傳符合項目',
'FilterVideoEvents' => '自動產生符合的影像檔',
'Filters' => '濾鏡',
@ -358,6 +379,7 @@ $SLANG = array(
'Function' => '功能',
'Gain' => 'Gain',
'General' => '一般',
'GenerateDownload' => 'Generate Download', // Added - 2018-08-30
'GenerateVideo' => '輸出影片',
'GeneratingVideo' => '輸出影片中',
'GoToZoneMinder' => 'Go to ZoneMinder.com',
@ -378,6 +400,7 @@ $SLANG = array(
'High' => '高',
'HighBW' => 'High&nbsp;B/W',
'Home' => 'Home',
'Hostname' => 'Hostname', // Added - 2018-08-30
'Hour' => '時',
'Hue' => 'Hue',
'Id' => 'Id',
@ -402,6 +425,7 @@ $SLANG = array(
'Line' => 'Line', // Added - 2011-06-16
'LinkedMonitors' => 'Linked Monitors',
'List' => '列出',
'ListMatches' => 'List Matches', // Added - 2018-08-30
'Load' => '載入',
'Local' => 'Local',
'Log' => 'Log', // Added - 2011-06-16
@ -488,6 +512,7 @@ $SLANG = array(
'MonitorProbeIntro' => 'The list below shows detected analog and network cameras and whether they are already being used or available for selection.<br/><br/>Select the desired entry from the list below.<br/><br/>Please note that not all cameras may be detected and that choosing a camera here may overwrite any values you already have configured for the current monitor.<br/><br/>', // Added - 2009-03-31
'Monitors' => '監視',
'Montage' => '全部顯示',
'MontageReview' => 'Montage Review', // Added - 2018-08-30
'Month' => '月',
'More' => 'More', // Added - 2011-06-16
'MotionFrameSkip' => 'Motion Frame Skip',
@ -514,6 +539,7 @@ $SLANG = array(
'Next' => '下一步',
'No' => 'No',
'NoDetectedCameras' => 'No Detected Cameras', // Added - 2009-03-31
'NoDetectedProfiles' => 'No Detected Profiles', // Added - 2018-08-30
'NoFramesRecorded' => 'There are no frames recorded for this event',
'NoGroup' => 'No Group', // Added - 2009-02-08
'NoSavedFilters' => 'NoSavedFilters',
@ -532,6 +558,8 @@ $SLANG = array(
'OpGt' => 'greater than',
'OpGtEq' => 'greater than or equal to',
'OpIn' => 'in set',
'OpIs' => 'is', // Added - 2018-08-30
'OpIsNot' => 'is not', // Added - 2018-08-30
'OpLt' => 'less than',
'OpLtEq' => 'less than or equal to',
'OpMatches' => 'matches',
@ -541,6 +569,7 @@ $SLANG = array(
'Open' => 'Open',
'OptionHelp' => 'OptionHelp',
'OptionRestartWarning' => 'These changes may not come into effect fully\nwhile the system is running. When you have\nfinished making your changes please ensure that\nyou restart ZoneMinder.',
'OptionalEncoderParam' => 'Optional Encoder Parameters', // Added - 2018-08-30
'Options' => '銓垣專用',//進階選項
'OrEnterNewName' => 'or enter new name',
'Order' => '順序',
@ -578,9 +607,13 @@ $SLANG = array(
'ProfileProbeIntro' => 'The list below shows the existing stream profiles of the selected camera .<br/><br/>Select the desired entry from the list below.<br/><br/>Please note that ZoneMinder cannot configure additional profiles and that choosing a camera here may overwrite any values you already have configured for the current monitor.<br/><br/>', // Added - 2015-04-18
'Progress' => 'Progress', // Added - 2015-04-18
'Protocol' => 'Protocol',
'RTSPDescribe' => 'Use RTSP Response Media URL', // Added - 2018-08-30
'RTSPTransport' => 'RTSP Transport Protocol', // Added - 2018-08-30
'Rate' => 'Rate',
'Real' => 'Real',
'RecaptchaWarning' => 'Your reCaptcha secret key is invalid. Please correct it, or reCaptcha will not work', // Added - 2018-08-30
'Record' => '錄影',
'RecordAudio' => 'Whether to store the audio stream when saving an event.', // Added - 2018-08-30
'RefImageBlendPct' => '參考影像混合 %ge',
'Refresh' => '更新',
'Remote' => 'Remote',
@ -596,6 +629,7 @@ $SLANG = array(
'ReplayAll' => 'All Events',
'ReplayGapless' => 'Gapless Events',
'ReplaySingle' => 'Single Event',
'ReportEventAudit' => 'Audit Events Report', // Added - 2018-08-30
'Reset' => 'Reset',
'ResetEventCounts' => 'Reset Event Counts',
'Restart' => '重新啟動',
@ -614,6 +648,7 @@ $SLANG = array(
'Save' => '存檔',
'SaveAs' => '儲存為',
'SaveFilter' => 'Save Filter',
'SaveJPEGs' => 'Save JPEGs', // Added - 2018-08-30
'Scale' => 'Scale',
'Score' => '分數',
'Secs' => 'Secs',
@ -630,6 +665,7 @@ $SLANG = array(
'ShowFilterWindow' => '顯示過濾視窗',
'ShowTimeline' => 'Show Timeline',
'SignalCheckColour' => 'Signal Check Colour',
'SignalCheckPoints' => 'Signal Check Points', // Added - 2018-08-30
'Size' => 'Size',
'SkinDescription' => 'Change the default skin for this computer', // Added - 2011-01-30
'Sleep' => 'Sleep',
@ -649,6 +685,10 @@ $SLANG = array(
'State' => 'State',
'Stats' => 'Stats',
'Status' => 'Status',
'StatusConnected' => 'Capturing', // Added - 2018-08-30
'StatusNotRunning' => 'Not Running', // Added - 2018-08-30
'StatusRunning' => 'Not Capturing', // Added - 2018-08-30
'StatusUnknown' => 'Unknown', // Added - 2018-08-30
'Step' => 'Step',
'StepBack' => 'Step Back',
'StepForward' => 'Step Forward',
@ -659,6 +699,8 @@ $SLANG = array(
'Stills' => '靜止',
'Stop' => '停止',
'Stopped' => '已停止',
'StorageArea' => 'Storage Area', // Added - 2018-08-30
'StorageScheme' => 'Scheme', // Added - 2018-08-30
'Stream' => '串流',
'StreamReplayBuffer' => 'Stream Replay Image Buffer',
'Submit' => 'Submit',
@ -678,6 +720,7 @@ $SLANG = array(
'TimelineTip4' => 'Use the controls below to zoom out or navigate back and forward through the time range.', // Added 2013.08.15.
'Timestamp' => '時間格式',
'TimestampLabelFormat' => '時間標示格式',
'TimestampLabelSize' => 'Font Size', // Added - 2018-08-30
'TimestampLabelX' => '時間標示 X',
'TimestampLabelY' => '時間標示 Y',
'Today' => 'Today',
@ -724,6 +767,7 @@ $SLANG = array(
'VideoGenParms' => '輸出影片參數',
'VideoGenSucceeded' => 'Video Generation Succeeded!', // Added - 2009-02-08
'VideoSize' => '影片尺寸',
'VideoWriter' => 'Video Writer', // Added - 2018-08-30
'View' => '檢視',
'ViewAll' => '全部檢視',
'ViewEvent' => 'View Event', // Added - 2009-02-08
@ -733,6 +777,7 @@ $SLANG = array(
'Watch' => 'Watch',
'Web' => 'Web',
'WebColour' => 'Web Colour', // Added - 2009-02-08
'WebSiteUrl' => 'Website URL', // Added - 2018-08-30
'Week' => '週',
'White' => 'White',
'WhiteBalance' => 'White Balance',

View File

@ -78,6 +78,8 @@ $SLANG = array(
'Actual' => '实际',
'AddNewControl' => '新建控制',
'AddNewMonitor' => '新建监视器',
'AddNewServer' => 'Add New Server', // Added - 2018-08-30
'AddNewStorage' => 'Add New Storage', // Added - 2018-08-30
'AddNewUser' => '新建用户',
'AddNewZone' => '新建区域',
'Alarm' => '报警',
@ -105,22 +107,32 @@ $SLANG = array(
'AttrArchiveStatus' => '存档状态',
'AttrAvgScore' => '平均分数',
'AttrCause' => '原因',
'AttrDate' => '日期',
'AttrDateTime' => '日期/时间',
'AttrDiskBlocks' => '磁碟区块',
'AttrDiskPercent' => '磁碟百分比',
'AttrDiskSpace' => 'Disk Space', // Added - 2018-08-30
'AttrDuration' => '过程',
'AttrEndDate' => 'End Date', // Added - 2018-08-30
'AttrEndDateTime' => 'End Date/Time', // Added - 2018-08-30
'AttrEndTime' => 'End Time', // Added - 2018-08-30
'AttrEndWeekday' => 'End Weekday', // Added - 2018-08-30
'AttrFilterServer' => 'Server Filter is Running On', // Added - 2018-08-30
'AttrFrames' => '帧',
'AttrId' => 'Id',
'AttrMaxScore' => '最大分数',
'AttrMonitorId' => '监视器 Id',
'AttrMonitorName' => '监视器名称',
'AttrMonitorServer' => 'Server Monitor is Running On', // Added - 2018-08-30
'AttrName' => '名称',
'AttrNotes' => '备注',
'AttrStartDate' => 'Start Date', // Added - 2018-08-30
'AttrStartDateTime' => 'Start Date/Time', // Added - 2018-08-30
'AttrStartTime' => 'Start Time', // Added - 2018-08-30
'AttrStartWeekday' => 'Start Weekday', // Added - 2018-08-30
'AttrStateId' => 'Run State', // Added - 2018-08-30
'AttrStorageArea' => 'Storage Area', // Added - 2018-08-30
'AttrStorageServer' => 'Server Hosting Storage', // Added - 2018-08-30
'AttrSystemLoad' => '系统负载',
'AttrTime' => '时间',
'AttrTotalScore' => '总分数',
'AttrWeekday' => '星期',
'Auto' => '自动',
'AutoStopTimeout' => '超时自动停止',
'Available' => 'Available', // Added - 2009-03-31
@ -153,9 +165,11 @@ $SLANG = array(
'BadRefBlendPerc' => '参考混合百分比必须设为一个正整数',
'BadSectionLength' => '节长度必须设为30的整数倍',
'BadSignalCheckColour' => '信号检查颜色必须设为有效的RGB颜色字符',
'BadSourceType' => 'Source Type \"Web Site\" requires the Function to be set to \"Monitor\"', // Added - 2018-08-30
'BadStreamReplayBuffer' => '流重放缓冲必须为零或更多整数',
'BadWarmupCount' => '预热帪必须设为零或更多整数',
'BadWebColour' => 'Web颜色必须设为有效Web颜色字符',
'BadWebSitePath' => 'Please enter a complete website url, including the http:// or https:// prefix.', // Added - 2018-08-30
'BadWidth' => '宽度必须设为有效值',
'Bandwidth' => '带宽',
'BandwidthHead' => 'Bandwidth', // This is the end of the bandwidth status on the top of the console, different in many language due to phrasing
@ -219,10 +233,12 @@ $SLANG = array(
'ChooseLogSelection' => 'Choose a log selection', // Added - 2011-06-17
'ChoosePreset' => '选择预置',
'Clear' => 'Clear', // Added - 2011-06-16
'CloneMonitor' => 'Clone', // Added - 2018-08-30
'Close' => '关闭',
'Colour' => '彩色',
'Command' => '命令',
'Component' => 'Component', // Added - 2011-06-16
'ConcurrentFilter' => 'Run filter concurrently', // Added - 2018-08-30
'Config' => '配置',
'ConfiguredFor' => '配置标的',
'ConfirmDeleteEvents' => '确认希望删除所选事件?',
@ -280,9 +296,11 @@ $SLANG = array(
'DonateRemindWeek' => '现在不1星期内再次提醒我',
'DonateYes' => '好,我现在就捐款',
'Download' => '下载',
'DownloadVideo' => 'Download Video', // Added - 2018-08-30
'DuplicateMonitorName' => 'Duplicate Monitor Name', // Added - 2009-03-31
'Duration' => 'Duration',
'Edit' => '编辑',
'EditLayout' => 'Edit Layout', // Added - 2018-08-30
'Email' => 'Email',
'EnableAlarms' => '启动报警',
'Enabled' => '已启动',
@ -299,6 +317,7 @@ $SLANG = array(
'Events' => '事件',
'Exclude' => '排除',
'Execute' => '执行',
'Exif' => 'Embed EXIF data into image', // Added - 2018-08-30
'Export' => '导出',
'ExportDetails' => '导出时间详情',
'ExportFailed' => '导出失败',
@ -328,8 +347,10 @@ $SLANG = array(
'FilterExecuteEvents' => '执行全部匹配项命令',
'FilterLog' => 'Filter log', // Added - 2015-04-18
'FilterMessageEvents' => '全部匹配项的信息详情',
'FilterMoveEvents' => 'Move all matches', // Added - 2018-08-30
'FilterPx' => '过滤器像素',
'FilterUnset' => '您必须指定过滤器宽度和高度',
'FilterUpdateDiskSpace'=> 'Update used disk space', // Added - 2018-08-30
'FilterUploadEvents' => '上传全部匹配项',
'FilterVideoEvents' => '为全部匹配项创建视频',
'Filters' => '过滤器',
@ -354,6 +375,7 @@ $SLANG = array(
'Function' => '功能',
'Gain' => '增益',
'General' => '一般',
'GenerateDownload' => 'Generate Download', // Added - 2018-08-30
'GenerateVideo' => '创建视频',
'GeneratingVideo' => '正在创建视频',
'GoToZoneMinder' => '访问 ZoneMinder.com',
@ -374,6 +396,7 @@ $SLANG = array(
'High' => '高',
'HighBW' => '高&nbsp;B/W',
'Home' => '主页',
'Hostname' => 'Hostname', // Added - 2018-08-30
'Hour' => '小时',
'Hue' => '色调',
'Id' => 'Id',
@ -398,6 +421,7 @@ $SLANG = array(
'Line' => 'Line', // Added - 2011-06-16
'LinkedMonitors' => '管理监视器',
'List' => '列表',
'ListMatches' => 'List Matches', // Added - 2018-08-30
'Load' => '加载',
'Local' => '本地',
'Log' => 'Log', // Added - 2011-06-16
@ -484,6 +508,7 @@ $SLANG = array(
'MonitorProbeIntro' => 'The list below shows detected analog and network cameras and whether they are already being used or available for selection.<br/><br/>Select the desired entry from the list below.<br/><br/>Please note that not all cameras may be detected and that choosing a camera here may overwrite any values you already have configured for the current monitor.<br/><br/>', // Added - 2009-03-31
'Monitors' => '监视器',
'Montage' => '镜头组接',
'MontageReview' => 'Montage Review', // Added - 2018-08-30
'Month' => '月',
'More' => 'More', // Added - 2011-06-16
'MotionFrameSkip' => 'Motion Frame Skip',
@ -510,6 +535,7 @@ $SLANG = array(
'Next' => '下一个',
'No' => '不',
'NoDetectedCameras' => 'No Detected Cameras', // Added - 2009-03-31
'NoDetectedProfiles' => 'No Detected Profiles', // Added - 2018-08-30
'NoFramesRecorded' => '该事件没有相关帧的记录',
'NoGroup' => '无组',
'NoSavedFilters' => '没有保存过滤器',
@ -528,6 +554,8 @@ $SLANG = array(
'OpGt' => '大于',
'OpGtEq' => '大于等于',
'OpIn' => '在集',
'OpIs' => 'is', // Added - 2018-08-30
'OpIsNot' => 'is not', // Added - 2018-08-30
'OpLt' => '小于',
'OpLtEq' => '小于等于',
'OpMatches' => '匹配',
@ -537,6 +565,7 @@ $SLANG = array(
'Open' => '打开',
'OptionHelp' => '选项帮助',
'OptionRestartWarning' => '这些改动在系统运行时可以不会完全生效.\n 当你设置完毕改动后\n请确认\n您重新启动 ZoneMinder.',
'OptionalEncoderParam' => 'Optional Encoder Parameters', // Added - 2018-08-30
'Options' => '选项',
'OrEnterNewName' => '或输入新名词',
'Order' => '次序',
@ -574,9 +603,13 @@ $SLANG = array(
'ProfileProbeIntro' => 'The list below shows the existing stream profiles of the selected camera .<br/><br/>Select the desired entry from the list below.<br/><br/>Please note that ZoneMinder cannot configure additional profiles and that choosing a camera here may overwrite any values you already have configured for the current monitor.<br/><br/>', // Added - 2015-04-18
'Progress' => 'Progress', // Added - 2015-04-18
'Protocol' => '协议',
'RTSPDescribe' => 'Use RTSP Response Media URL', // Added - 2018-08-30
'RTSPTransport' => 'RTSP Transport Protocol', // Added - 2018-08-30
'Rate' => '速率',
'Real' => '实际',
'RecaptchaWarning' => 'Your reCaptcha secret key is invalid. Please correct it, or reCaptcha will not work', // Added - 2018-08-30
'Record' => '记录',
'RecordAudio' => 'Whether to store the audio stream when saving an event.', // Added - 2018-08-30
'RefImageBlendPct' => '参考影像混合 %ge',
'Refresh' => '刷新',
'Remote' => '远程',
@ -592,6 +625,7 @@ $SLANG = array(
'ReplayAll' => '全部事件',
'ReplayGapless' => '无间隙事件',
'ReplaySingle' => '单一事件',
'ReportEventAudit' => 'Audit Events Report', // Added - 2018-08-30
'Reset' => '重置',
'ResetEventCounts' => '重置事件数',
'Restart' => '重启动',
@ -610,6 +644,7 @@ $SLANG = array(
'Save' => '保存',
'SaveAs' => '另存为',
'SaveFilter' => '存储过滤器',
'SaveJPEGs' => 'Save JPEGs', // Added - 2018-08-30
'Scale' => '比例',
'Score' => '分数',
'Secs' => '秒',
@ -626,6 +661,7 @@ $SLANG = array(
'ShowFilterWindow' => '显示过滤器视窗',
'ShowTimeline' => '显示时间轴',
'SignalCheckColour' => '型号检查颜色',
'SignalCheckPoints' => 'Signal Check Points', // Added - 2018-08-30
'Size' => '大小',
'SkinDescription' => 'Change the default skin for this computer', // Added - 2011-01-30
'Sleep' => '睡眠',
@ -645,6 +681,10 @@ $SLANG = array(
'State' => '状态',
'Stats' => '统计',
'Status' => '状况',
'StatusConnected' => 'Capturing', // Added - 2018-08-30
'StatusNotRunning' => 'Not Running', // Added - 2018-08-30
'StatusRunning' => 'Not Capturing', // Added - 2018-08-30
'StatusUnknown' => 'Unknown', // Added - 2018-08-30
'Step' => '步进',
'StepBack' => '单步后退',
'StepForward' => '单步前进',
@ -655,6 +695,8 @@ $SLANG = array(
'Stills' => '静止',
'Stop' => '停止',
'Stopped' => '已停止',
'StorageArea' => 'Storage Area', // Added - 2018-08-30
'StorageScheme' => 'Scheme', // Added - 2018-08-30
'Stream' => '流',
'StreamReplayBuffer' => '流重放影像缓冲',
'Submit' => '发送',
@ -674,6 +716,7 @@ $SLANG = array(
'TimelineTip4' => 'Use the controls below to zoom out or navigate back and forward through the time range.', // Added 2013.08.15.
'Timestamp' => '时间戳',
'TimestampLabelFormat' => '时间戳标签格式',
'TimestampLabelSize' => 'Font Size', // Added - 2018-08-30
'TimestampLabelX' => '时间戳标签 X',
'TimestampLabelY' => '时间戳标签 Y',
'Today' => '今天',
@ -720,6 +763,7 @@ $SLANG = array(
'VideoGenParms' => '视频产生参数',
'VideoGenSucceeded' => '视频产生成功!',
'VideoSize' => '视频尺寸',
'VideoWriter' => 'Video Writer', // Added - 2018-08-30
'View' => '查看',
'ViewAll' => '查看全部',
'ViewEvent' => '查看事件',
@ -729,6 +773,7 @@ $SLANG = array(
'Watch' => '观察',
'Web' => 'Web',
'WebColour' => 'Web颜色',
'WebSiteUrl' => 'Website URL', // Added - 2018-08-30
'Week' => '周',
'White' => '白',
'WhiteBalance' => '白平衡',

View File

@ -78,6 +78,8 @@ $SLANG = array(
'Actual' => 'Skutečná',
'AddNewControl' => 'Přidat nové řízení',
'AddNewMonitor' => 'Přidat kameru',
'AddNewServer' => 'Add New Server', // Added - 2018-08-30
'AddNewStorage' => 'Add New Storage', // Added - 2018-08-30
'AddNewUser' => 'Přidat uživatele',
'AddNewZone' => 'Přidat zónu',
'Alarm' => 'Alarm',
@ -105,22 +107,32 @@ $SLANG = array(
'AttrArchiveStatus' => 'Archiv status',
'AttrAvgScore' => 'Prům. skóre',
'AttrCause' => 'Příčina',
'AttrDate' => 'Datum',
'AttrDateTime' => 'Datum/Čas',
'AttrDiskBlocks' => 'Bloky disku',
'AttrDiskPercent' => 'Zaplnění disku',
'AttrDiskSpace' => 'Disk Space', // Added - 2018-08-30
'AttrDuration' => 'Průběh',
'AttrEndDate' => 'End Date', // Added - 2018-08-30
'AttrEndDateTime' => 'End Date/Time', // Added - 2018-08-30
'AttrEndTime' => 'End Time', // Added - 2018-08-30
'AttrEndWeekday' => 'End Weekday', // Added - 2018-08-30
'AttrFilterServer' => 'Server Filter is Running On', // Added - 2018-08-30
'AttrFrames' => 'Snímky',
'AttrId' => 'Id',
'AttrMaxScore' => 'Max. skóre',
'AttrMonitorId' => 'Kamera Id',
'AttrMonitorName' => 'Jméno kamery',
'AttrMonitorServer' => 'Server Monitor is Running On', // Added - 2018-08-30
'AttrName' => 'Jméno',
'AttrNotes' => 'Notes',
'AttrStartDate' => 'Start Date', // Added - 2018-08-30
'AttrStartDateTime' => 'Start Date/Time', // Added - 2018-08-30
'AttrStartTime' => 'Start Time', // Added - 2018-08-30
'AttrStartWeekday' => 'Start Weekday', // Added - 2018-08-30
'AttrStateId' => 'Run State', // Added - 2018-08-30
'AttrStorageArea' => 'Storage Area', // Added - 2018-08-30
'AttrStorageServer' => 'Server Hosting Storage', // Added - 2018-08-30
'AttrSystemLoad' => 'System Load',
'AttrTime' => 'Čas',
'AttrTotalScore' => 'Celkové skóre',
'AttrWeekday' => 'Den v týdnu',
'Auto' => 'Auto',
'AutoStopTimeout' => 'Časový limit pro vypršení',
'Available' => 'Available', // Added - 2009-03-31
@ -153,9 +165,11 @@ $SLANG = array(
'BadRefBlendPerc' => 'Reference blend percentage must be a positive integer',
'BadSectionLength' => 'Section length must be an integer of 30 or more',
'BadSignalCheckColour' => 'Signal check colour must be a valid RGB colour string',
'BadSourceType' => 'Source Type \"Web Site\" requires the Function to be set to \"Monitor\"', // Added - 2018-08-30
'BadStreamReplayBuffer'=> 'Stream replay buffer must be an integer of zero or more',
'BadWarmupCount' => 'Warmup frames must be an integer of zero or more',
'BadWebColour' => 'Web colour must be a valid web colour string',
'BadWebSitePath' => 'Please enter a complete website url, including the http:// or https:// prefix.', // Added - 2018-08-30
'BadWidth' => 'Width must be set to a valid value',
'Bandwidth' => 'Rychlost sítě',
'BandwidthHead' => 'Bandwidth', // This is the end of the bandwidth status on the top of the console, different in many language due to phrasing
@ -219,10 +233,12 @@ $SLANG = array(
'ChooseLogSelection' => 'Choose a log selection', // Added - 2011-06-17
'ChoosePreset' => 'Choose Preset',
'Clear' => 'Clear', // Added - 2011-06-16
'CloneMonitor' => 'Clone', // Added - 2018-08-30
'Close' => 'Zavřít',
'Colour' => 'Barva',
'Command' => 'Příkaz',
'Component' => 'Component', // Added - 2011-06-16
'ConcurrentFilter' => 'Run filter concurrently', // Added - 2018-08-30
'Config' => 'Nastavení',
'ConfiguredFor' => 'Nastaveno pro',
'ConfirmDeleteEvents' => 'Are you sure you wish to delete the selected events?',
@ -280,9 +296,11 @@ $SLANG = array(
'DonateRemindWeek' => 'Nyní ne, připomenout za týden',
'DonateYes' => 'Ano, chcit podpořit ZoneMinder nyní',
'Download' => 'Stáhnout',
'DownloadVideo' => 'Download Video', // Added - 2018-08-30
'DuplicateMonitorName' => 'Duplicate Monitor Name', // Added - 2009-03-31
'Duration' => 'Průběh',
'Edit' => 'Editovat',
'EditLayout' => 'Edit Layout', // Added - 2018-08-30
'Email' => 'Email',
'EnableAlarms' => 'Povolit alarmy',
'Enabled' => 'Povoleno',
@ -299,6 +317,7 @@ $SLANG = array(
'Events' => 'Záznamy',
'Exclude' => 'Vyjmout',
'Execute' => 'Execute',
'Exif' => 'Embed EXIF data into image', // Added - 2018-08-30
'Export' => 'Exportovat',
'ExportDetails' => 'Exportovat detaily záznamu',
'ExportFailed' => 'Chyba při exportu',
@ -328,8 +347,10 @@ $SLANG = array(
'FilterExecuteEvents' => 'Spustit příkaz na všech nalezených',
'FilterLog' => 'Filter log', // Added - 2015-04-18
'FilterMessageEvents' => 'Podat zprávu o všech nalezených',
'FilterMoveEvents' => 'Move all matches', // Added - 2018-08-30
'FilterPx' => 'Filtr Px',
'FilterUnset' => 'You must specify a filter width and height',
'FilterUpdateDiskSpace'=> 'Update used disk space', // Added - 2018-08-30
'FilterUploadEvents' => 'Uploadovat nalezené',
'FilterVideoEvents' => 'Create video for all matches',
'Filters' => 'Filtry',
@ -354,6 +375,7 @@ $SLANG = array(
'Function' => 'Funkce',
'Gain' => 'Zisk',
'General' => 'General',
'GenerateDownload' => 'Generate Download', // Added - 2018-08-30
'GenerateVideo' => 'Generovat video',
'GeneratingVideo' => 'Generuji video',
'GoToZoneMinder' => 'Jít na ZoneMinder.com',
@ -374,6 +396,7 @@ $SLANG = array(
'High' => 'Rychlá',
'HighBW' => 'Rychlá&nbsp;B/W',
'Home' => 'Domů',
'Hostname' => 'Hostname', // Added - 2018-08-30
'Hour' => 'Hodina',
'Hue' => 'Odstín',
'Id' => 'Id',
@ -398,6 +421,7 @@ $SLANG = array(
'Line' => 'Line', // Added - 2011-06-16
'LinkedMonitors' => 'Linked Monitors',
'List' => 'Seznam',
'ListMatches' => 'List Matches', // Added - 2018-08-30
'Load' => 'Load',
'Local' => 'Lokální',
'Log' => 'Log', // Added - 2011-06-16
@ -484,6 +508,7 @@ $SLANG = array(
'MonitorProbeIntro' => 'The list below shows detected analog and network cameras and whether they are already being used or available for selection.<br/><br/>Select the desired entry from the list below.<br/><br/>Please note that not all cameras may be detected and that choosing a camera here may overwrite any values you already have configured for the current monitor.<br/><br/>', // Added - 2009-03-31
'Monitors' => 'Kamery',
'Montage' => 'Sestřih',
'MontageReview' => 'Montage Review', // Added - 2018-08-30
'Month' => 'Měsíc',
'More' => 'More', // Added - 2011-06-16
'MotionFrameSkip' => 'Motion Frame Skip',
@ -510,6 +535,7 @@ $SLANG = array(
'Next' => 'Další',
'No' => 'Ne',
'NoDetectedCameras' => 'No Detected Cameras', // Added - 2009-03-31
'NoDetectedProfiles' => 'No Detected Profiles', // Added - 2018-08-30
'NoFramesRecorded' => 'Pro tento snímek nejsou žádné záznamy',
'NoGroup' => 'No Group',
'NoSavedFilters' => 'Žádné uložené filtry',
@ -528,6 +554,8 @@ $SLANG = array(
'OpGt' => 'větší',
'OpGtEq' => 'větší nebo rovno',
'OpIn' => 'nin set',
'OpIs' => 'is', // Added - 2018-08-30
'OpIsNot' => 'is not', // Added - 2018-08-30
'OpLt' => 'menší',
'OpLtEq' => 'menší nebo rovno',
'OpMatches' => 'obsahuje',
@ -537,6 +565,7 @@ $SLANG = array(
'Open' => 'Otevřít',
'OptionHelp' => 'MožnostHelp',
'OptionRestartWarning' => 'Tyto změny se neprojeví\ndokud systém běží. Jakmile\ndokončíte provádění změn prosím\nrestartujte ZoneMinder.',
'OptionalEncoderParam' => 'Optional Encoder Parameters', // Added - 2018-08-30
'Options' => 'Možnosti',
'OrEnterNewName' => 'nebo vložte nové jméno',
'Order' => 'Pořadí',
@ -574,9 +603,13 @@ $SLANG = array(
'ProfileProbeIntro' => 'The list below shows the existing stream profiles of the selected camera .<br/><br/>Select the desired entry from the list below.<br/><br/>Please note that ZoneMinder cannot configure additional profiles and that choosing a camera here may overwrite any values you already have configured for the current monitor.<br/><br/>', // Added - 2015-04-18
'Progress' => 'Progress', // Added - 2015-04-18
'Protocol' => 'Protocol',
'RTSPDescribe' => 'Use RTSP Response Media URL', // Added - 2018-08-30
'RTSPTransport' => 'RTSP Transport Protocol', // Added - 2018-08-30
'Rate' => 'Rychlost',
'Real' => 'Skutečná',
'RecaptchaWarning' => 'Your reCaptcha secret key is invalid. Please correct it, or reCaptcha will not work', // Added - 2018-08-30
'Record' => 'Nahrávat',
'RecordAudio' => 'Whether to store the audio stream when saving an event.', // Added - 2018-08-30
'RefImageBlendPct' => 'Reference Image Blend %ge',
'Refresh' => 'Obnovit',
'Remote' => 'Síťová',
@ -592,6 +625,7 @@ $SLANG = array(
'ReplayAll' => 'All Events',
'ReplayGapless' => 'Gapless Events',
'ReplaySingle' => 'Single Event',
'ReportEventAudit' => 'Audit Events Report', // Added - 2018-08-30
'Reset' => 'Reset',
'ResetEventCounts' => 'Resetovat počty záznamů',
'Restart' => 'Restartovat',
@ -610,6 +644,7 @@ $SLANG = array(
'Save' => 'Uložit',
'SaveAs' => 'Uložit jako',
'SaveFilter' => 'Uložit filtr',
'SaveJPEGs' => 'Save JPEGs', // Added - 2018-08-30
'Scale' => 'Velikost',
'Score' => 'Skóre',
'Secs' => 'Délka(s)',
@ -626,6 +661,7 @@ $SLANG = array(
'ShowFilterWindow' => 'Zobrazit filtr',
'ShowTimeline' => 'Zobrazit časovou linii ',
'SignalCheckColour' => 'Signal Check Colour',
'SignalCheckPoints' => 'Signal Check Points', // Added - 2018-08-30
'Size' => 'Velikost',
'SkinDescription' => 'Change the default skin for this computer', // Added - 2011-01-30
'Sleep' => 'Spát',
@ -645,6 +681,10 @@ $SLANG = array(
'State' => 'Stav',
'Stats' => 'Statistiky',
'Status' => 'Status',
'StatusConnected' => 'Capturing', // Added - 2018-08-30
'StatusNotRunning' => 'Not Running', // Added - 2018-08-30
'StatusRunning' => 'Not Capturing', // Added - 2018-08-30
'StatusUnknown' => 'Unknown', // Added - 2018-08-30
'Step' => 'Krok',
'StepBack' => 'Step Back',
'StepForward' => 'Step Forward',
@ -655,6 +695,8 @@ $SLANG = array(
'Stills' => 'Snímky',
'Stop' => 'Zastavit',
'Stopped' => 'Zastaven',
'StorageArea' => 'Storage Area', // Added - 2018-08-30
'StorageScheme' => 'Scheme', // Added - 2018-08-30
'Stream' => 'Stream',
'StreamReplayBuffer' => 'Stream Replay Image Buffer',
'Submit' => 'Potvrdit',
@ -674,6 +716,7 @@ $SLANG = array(
'TimelineTip4' => 'Use the controls below to zoom out or navigate back and forward through the time range.', // Added 2013.08.15.
'Timestamp' => 'Razítko',
'TimestampLabelFormat' => 'Formát časového razítka',
'TimestampLabelSize' => 'Font Size', // Added - 2018-08-30
'TimestampLabelX' => 'Časové razítko X',
'TimestampLabelY' => 'Časové razítko Y',
'Today' => 'Dnes',
@ -720,6 +763,7 @@ $SLANG = array(
'VideoGenParms' => 'Parametry generování videa',
'VideoGenSucceeded' => 'Video vygenerováno úspěšně!',
'VideoSize' => 'Velikost videa',
'VideoWriter' => 'Video Writer', // Added - 2018-08-30
'View' => 'Zobrazit',
'ViewAll' => 'Zobrazit všechny',
'ViewEvent' => 'Zobrazit záznam',
@ -729,6 +773,7 @@ $SLANG = array(
'Watch' => 'Sledovat',
'Web' => 'Web',
'WebColour' => 'Webová barva',
'WebSiteUrl' => 'Website URL', // Added - 2018-08-30
'Week' => 'Týden',
'White' => 'Bílá',
'WhiteBalance' => 'Vyvážení bílé',

View File

@ -80,6 +80,8 @@ $SLANG = array(
'Actual' => 'Original',
'AddNewControl' => 'Neues Steuerelement hinzufügen',
'AddNewMonitor' => 'Neuer Monitor',
'AddNewServer' => 'Add New Server', // Added - 2018-08-30
'AddNewStorage' => 'Add New Storage', // Added - 2018-08-30
'AddNewUser' => 'Neuer Benutzer',
'AddNewZone' => 'Neue Zone',
'Alarm' => 'Alarm',
@ -107,22 +109,32 @@ $SLANG = array(
'AttrArchiveStatus' => 'Archivstatus',
'AttrAvgScore' => 'Mittlere Wertung',
'AttrCause' => 'Grund',
'AttrDate' => 'Datum',
'AttrDateTime' => 'Datum/Zeit',
'AttrDiskBlocks' => 'Disk-Blöcke',
'AttrDiskPercent' => 'Disk-Prozent',
'AttrDiskSpace' => 'Disk Space', // Added - 2018-08-30
'AttrDuration' => 'Dauer',
'AttrEndDate' => 'End Date', // Added - 2018-08-30
'AttrEndDateTime' => 'End Date/Time', // Added - 2018-08-30
'AttrEndTime' => 'End Time', // Added - 2018-08-30
'AttrEndWeekday' => 'End Weekday', // Added - 2018-08-30
'AttrFilterServer' => 'Server Filter is Running On', // Added - 2018-08-30
'AttrFrames' => 'Bilder',
'AttrId' => 'ID',
'AttrMaxScore' => 'Maximale Wertung',
'AttrMonitorId' => 'Monitor-ID',
'AttrMonitorName' => 'Monitorname',
'AttrMonitorServer' => 'Server Monitor is Running On', // Added - 2018-08-30
'AttrName' => 'Name',
'AttrNotes' => 'Bemerkungen',
'AttrStartDate' => 'Start Date', // Added - 2018-08-30
'AttrStartDateTime' => 'Start Date/Time', // Added - 2018-08-30
'AttrStartTime' => 'Start Time', // Added - 2018-08-30
'AttrStartWeekday' => 'Start Weekday', // Added - 2018-08-30
'AttrStateId' => 'Run State', // Added - 2018-08-30
'AttrStorageArea' => 'Storage Area', // Added - 2018-08-30
'AttrStorageServer' => 'Server Hosting Storage', // Added - 2018-08-30
'AttrSystemLoad' => 'Systemlast',
'AttrTime' => 'Zeit',
'AttrTotalScore' => 'Gesamtwertung',
'AttrWeekday' => 'Wochentag',
'Auto' => 'Auto',
'AutoStopTimeout' => 'Auto-Stopp-Zeitüberschreitung',
'Available' => 'Verfügbar', // Added - 2009-03-31
@ -155,9 +167,11 @@ $SLANG = array(
'BadRefBlendPerc' => 'Der Referenz-Blenden-Prozentwert muss ganzzahlig 0 oder größer sein',
'BadSectionLength' => 'Die Bereichslänge muss ganzzahlig 0 oder größer sein',
'BadSignalCheckColour' => 'Die Signalprüffarbe muss auf einen gültigen Farbwert eingestellt sein',
'BadSourceType' => 'Source Type \"Web Site\" requires the Function to be set to \"Monitor\"', // Added - 2018-08-30
'BadStreamReplayBuffer'=> 'Der Wiedergabestrompuffer muss eine ganze Zahl von null oder mehr betragen',
'BadWarmupCount' => 'Die Anzahl der Vorwärmbilder muss ganzzahlig 0 oder größer sein',
'BadWebColour' => 'Die Webfarbe muss auf einen gültigen Farbwert eingestellt sein',
'BadWebSitePath' => 'Please enter a complete website url, including the http:// or https:// prefix.', // Added - 2018-08-30
'BadWidth' => 'Die Breite muss auf einen gültigen Wert eingestellt sein',
'Bandwidth' => 'Bandbreite',
'BandwidthHead' => 'Bandbreite', // This is the end of the bandwidth status on the top of the console, different in many language due to phrasing
@ -221,10 +235,12 @@ $SLANG = array(
'ChooseLogSelection' => 'Log-Auswahl', // Added - 2011-06-17
'ChoosePreset' => 'Voreinstellung auswählen',
'Clear' => 'Leeren', // Added - 2011-06-16
'CloneMonitor' => 'Clone', // Added - 2018-08-30
'Close' => 'Schließen',
'Colour' => 'Farbe',
'Command' => 'Kommando',
'Component' => 'Komponente', // Added - 2011-06-16
'ConcurrentFilter' => 'Run filter concurrently', // Added - 2018-08-30
'Config' => 'Konfig.',
'ConfiguredFor' => 'Konfiguriert für',
'ConfirmDeleteEvents' => 'Sind Sie sicher, dass Sie die ausgewählten Ereignisse löschen wollen?',
@ -282,9 +298,11 @@ $SLANG = array(
'DonateRemindWeek' => 'Noch nicht, erinnere mich in einer Woche noch mal.',
'DonateYes' => 'Ja, ich möchte jetzt spenden.',
'Download' => 'Download',
'DownloadVideo' => 'Download Video', // Added - 2018-08-30
'DuplicateMonitorName' => 'Monitornamen Duplizieren', // Added - 2009-03-31
'Duration' => 'Dauer',
'Edit' => 'Bearbeiten',
'EditLayout' => 'Edit Layout', // Added - 2018-08-30
'Email' => 'E-Mail',
'EnableAlarms' => 'Alarme aktivieren',
'Enabled' => 'Aktiviert',
@ -301,6 +319,7 @@ $SLANG = array(
'Events' => 'Ereignisse',
'Exclude' => 'Ausschluss;',
'Execute' => 'Ausführen',
'Exif' => 'Embed EXIF data into image', // Added - 2018-08-30
'Export' => 'Exportieren',
'ExportDetails' => 'Exportiere Ereignis-Details',
'ExportFailed' => 'Exportieren fehlgeschlagen',
@ -330,8 +349,10 @@ $SLANG = array(
'FilterExecuteEvents' => 'Ausführen bei allen Treffern',
'FilterLog' => 'Log filtern', // Added - 2015-04-18
'FilterMessageEvents' => 'Detaillierte Nachricht zu allen Treffern',
'FilterMoveEvents' => 'Move all matches', // Added - 2018-08-30
'FilterPx' => 'Filter-Pixel',
'FilterUnset' => 'Sie müssen eine Breite und Höhe für das Filter angeben',
'FilterUpdateDiskSpace'=> 'Update used disk space', // Added - 2018-08-30
'FilterUploadEvents' => 'Hochladen aller Treffer',
'FilterVideoEvents' => 'Video für alle Treffer erstellen',
'Filters' => 'Filter',
@ -356,6 +377,7 @@ $SLANG = array(
'Function' => 'Funktion',
'Gain' => 'Verstärkung',
'General' => 'Allgemeines',
'GenerateDownload' => 'Generate Download', // Added - 2018-08-30
'GenerateVideo' => 'Erzeuge Video',
'GeneratingVideo' => 'Erzeuge Video...',
'GoToZoneMinder' => 'Besuche ZoneMinder.com',
@ -376,6 +398,7 @@ $SLANG = array(
'High' => 'hohe',
'HighBW' => 'Hohe B/W',
'Home' => 'Home',
'Hostname' => 'Hostname', // Added - 2018-08-30
'Hour' => 'Stunde',
'Hue' => 'Farbton',
'Id' => 'ID',
@ -400,6 +423,7 @@ $SLANG = array(
'Line' => 'Zeile', // Added - 2011-06-16
'LinkedMonitors' => 'Verbundene Monitore',
'List' => 'Liste',
'ListMatches' => 'List Matches', // Added - 2018-08-30
'Load' => 'Last',
'Local' => 'Lokal',
'Log' => 'Log', // Added - 2011-06-16
@ -486,6 +510,7 @@ $SLANG = array(
'MonitorProbeIntro' => 'Die nachfolgende Liste zeigt erkannte Analog- und Netzwerkkameras, ob sie bereits genutzt werden und ob sie zur Auswahl verfügbar sind.<br/><br/>Wähle den gewünschten Eintrag aus der folgenden Liste.<br/><br/>Bitte Beachten: Nicht alle Kameras können erkannt werden. Die Auswahl einer Kamera kann bereits eingetragene Werte im aktuellen Monitor überschreiben.<br/><br/>', // Added - 2009-03-31
'Monitors' => 'Monitore',
'Montage' => 'Montage',
'MontageReview' => 'Montage Review', // Added - 2018-08-30
'Month' => 'Monat',
'More' => 'Mehr', // Added - 2011-06-16
'MotionFrameSkip' => 'Motion Frame Skip',
@ -512,6 +537,7 @@ $SLANG = array(
'Next' => 'Nächstes',
'No' => 'Nein',
'NoDetectedCameras' => 'Keine Kameras erkannt', // Added - 2009-03-31
'NoDetectedProfiles' => 'No Detected Profiles', // Added - 2018-08-30
'NoFramesRecorded' => 'Es gibt keine Aufnahmen von diesem Ereignis.',
'NoGroup' => 'Keine Gruppe',
'NoSavedFilters' => 'Keine gespeicherten Filter',
@ -530,6 +556,8 @@ $SLANG = array(
'OpGt' => 'groesser als',
'OpGtEq' => 'groesser oder gleich wie',
'OpIn' => 'in Satz',
'OpIs' => 'is', // Added - 2018-08-30
'OpIsNot' => 'is not', // Added - 2018-08-30
'OpLt' => 'kleiner als',
'OpLtEq' => 'kleiner oder gleich wie',
'OpMatches' => 'zutreffend',
@ -539,6 +567,7 @@ $SLANG = array(
'Open' => 'öffnen',
'OptionHelp' => 'Hilfe',
'OptionRestartWarning' => 'Veränderungen werden erst nach einem Neustart des Programms aktiv.\nFür eine sofortige änderung starten Sie das Programm bitte neu.',
'OptionalEncoderParam' => 'Optional Encoder Parameters', // Added - 2018-08-30
'Options' => 'Optionen',
'OrEnterNewName' => 'oder neuen Namen eingeben',
'Order' => 'Reihenfolge',
@ -576,9 +605,13 @@ $SLANG = array(
'ProfileProbeIntro' => 'Die folgende Liste zeigt die verfügbaren Streamingprofile der ausgewählten Kamera.<br/><br/>Wähle den gewünschten Eintrag aus der folgenden Liste.<br/><br/>Bitte Beachten: Zoneminder kann keine zusätzlichen Profile konfigurieren. Die Auswahl einer Kamera kann bereits eingetragene Werte im aktuellen Monitor überschreiben.<br/><br/>', // Added - 2015-04-18
'Progress' => 'Fortschritt', // Added - 2015-04-18
'Protocol' => 'Protokoll',
'RTSPDescribe' => 'Use RTSP Response Media URL', // Added - 2018-08-30
'RTSPTransport' => 'RTSP Transport Protocol', // Added - 2018-08-30
'Rate' => 'Abspielgeschwindigkeit',
'Real' => 'Real',
'RecaptchaWarning' => 'Your reCaptcha secret key is invalid. Please correct it, or reCaptcha will not work', // Added - 2018-08-30
'Record' => 'Aufnahme',
'RecordAudio' => 'Whether to store the audio stream when saving an event.', // Added - 2018-08-30
'RefImageBlendPct' => 'Referenz-Bildblende',
'Refresh' => 'Aktualisieren',
'Remote' => 'Remote',
@ -594,6 +627,7 @@ $SLANG = array(
'ReplayAll' => 'Alle Ereignisse',
'ReplayGapless' => 'Lückenlose Ereignisse',
'ReplaySingle' => 'Einzelereignis',
'ReportEventAudit' => 'Audit Events Report', // Added - 2018-08-30
'Reset' => 'Zurücksetzen',
'ResetEventCounts' => 'Lösche Ereignispunktzahl',
'Restart' => 'Neustart',
@ -612,6 +646,7 @@ $SLANG = array(
'Save' => 'Speichern',
'SaveAs' => 'Speichere als',
'SaveFilter' => 'Speichere Filter',
'SaveJPEGs' => 'Save JPEGs', // Added - 2018-08-30
'Scale' => 'Skalierung',
'Score' => 'Wertung',
'Secs' => 'Sekunden',
@ -628,6 +663,7 @@ $SLANG = array(
'ShowFilterWindow' => 'Zeige Filterfenster',
'ShowTimeline' => 'Zeige Zeitstrahl',
'SignalCheckColour' => 'Farbe des Signalchecks',
'SignalCheckPoints' => 'Signal Check Points', // Added - 2018-08-30
'Size' => 'Größe',
'SkinDescription' => 'Wähle den standard Skin für diesen Computer.', // Added - 2011-01-30
'Sleep' => 'Schlaf',
@ -647,6 +683,10 @@ $SLANG = array(
'State' => 'Status',
'Stats' => 'Statistik',
'Status' => 'Status',
'StatusConnected' => 'Capturing', // Added - 2018-08-30
'StatusNotRunning' => 'Not Running', // Added - 2018-08-30
'StatusRunning' => 'Not Capturing', // Added - 2018-08-30
'StatusUnknown' => 'Unknown', // Added - 2018-08-30
'Step' => 'Stufe',
'StepBack' => 'Einen Schritt rückwärts',
'StepForward' => 'Einen Schritt vorwärts',
@ -657,6 +697,8 @@ $SLANG = array(
'Stills' => 'Standbilder',
'Stop' => 'Stop',
'Stopped' => 'Gestoppt',
'StorageArea' => 'Storage Area', // Added - 2018-08-30
'StorageScheme' => 'Scheme', // Added - 2018-08-30
'Stream' => 'Stream',
'StreamReplayBuffer' => 'Stream-Wiedergabe-Bildpuffer',
'Submit' => 'Absenden',
@ -676,9 +718,9 @@ $SLANG = array(
'TimelineTip4' => 'Verwenden Sie die Steuerelemente unten, um zu Zoomen oder navigieren Sie vorwärts und rückwärts durch die Zeit.', // Added 2013.08.15.
'Timestamp' => 'Zeitstempel',
'TimestampLabelFormat' => 'Format des Zeitstempels',
'TimestampLabelSize' => 'Schriftgröße',
'TimestampLabelX' => 'Zeitstempel-X',
'TimestampLabelY' => 'Zeitstempel-Y',
'TimestampLabelSize' => 'Schriftgröße',
'Today' => 'Heute',
'Tools' => 'Werkzeuge',
'Total' => 'Insgesamt', // Added - 2011-06-16
@ -723,6 +765,7 @@ $SLANG = array(
'VideoGenParms' => 'Parameter der Videoerzeugung',
'VideoGenSucceeded' => 'Videoerzeugung erfolgreich!',
'VideoSize' => 'Videogröße',
'VideoWriter' => 'Video Writer', // Added - 2018-08-30
'View' => 'Ansicht',
'ViewAll' => 'Alles ansehen',
'ViewEvent' => 'Zeige Ereignis',
@ -732,6 +775,7 @@ $SLANG = array(
'Watch' => 'Beobachte',
'Web' => 'Web',
'WebColour' => 'Webfarbe',
'WebSiteUrl' => 'Website URL', // Added - 2018-08-30
'Week' => 'Woche',
'White' => 'Weiß',
'WhiteBalance' => 'Weiß-Abgleich',

View File

@ -41,4 +41,3 @@ $DLANG = array(
);
?>

View File

@ -72,15 +72,6 @@ header( "Content-Type: text/html; charset=utf-8" );
// Simple String Replacements
$SLANG = array(
'SystemLog' => 'System Log',
'DateTime' => 'Dato/Tid',
'Component' => 'Komponent',
'Pid' => 'PID',
'Level' => 'Niveau',
'Message' => 'Meddelelse',
'Line' => 'Linie',
'More' => 'Mere',
'Clear' => 'Slet',
'24BitColour' => '24 bit farve',
'32BitColour' => '32 bit farve',
'8BitGrey' => '8 bit gråskala',
@ -89,6 +80,7 @@ $SLANG = array(
'AddNewControl' => 'Tilføj Ny Kontrol',
'AddNewMonitor' => 'Tilføj Ny Monitor',
'AddNewServer' => 'Tilføj Ny Server',
'AddNewStorage' => 'Add New Storage', // Added - 2018-08-30
'AddNewUser' => 'Tilføj Ny Bruger',
'AddNewZone' => 'Tilføj Ny Zone',
'Alarm' => 'Alarm',
@ -98,8 +90,8 @@ $SLANG = array(
'AlarmLimits' => 'Alarm Grænser',
'AlarmMaximumFPS' => 'Alarm Maksimum FPS',
'AlarmPx' => 'Alarm Px',
'AlarmRefImageBlendPct' => 'Alarm Reference Billede Blandings %',
'AlarmRGBUnset' => 'Du skal vælge en alarm RGB farve',
'AlarmRefImageBlendPct' => 'Alarm Reference Billede Blandings %',
'Alert' => 'Advarsel',
'All' => 'Alle',
'AnalysisFPS' => 'Analyse FPS',
@ -107,37 +99,45 @@ $SLANG = array(
'Apply' => 'Udfør',
'ApplyingStateChange' => 'Udfører tilstandsændring',
'ArchArchived' => 'Kun arkiverede',
'ArchUnarchived' => 'Kun ikke-arkiverede',
'Archive' => 'Arkivér',
'Archived' => 'Arkiverede',
'ArchUnarchived' => 'Kun ikke-arkiverede',
'Area' => 'Område',
'AreaUnits' => 'Område (px/%)',
'AttrAlarmFrames' => 'Alarm Rammer',
'AttrArchiveStatus' => 'Arkiverings Status',
'AttrAvgScore' => 'Middel Score',
'AttrCause' => 'Årsag',
'AttrDate' => 'Dato',
'AttrDateTime' => 'Dato/Tid',
'AttrDiskBlocks' => 'Disk Blokke',
'AttrDiskPercent' => 'Disk Procent',
'AttrDiskSpace' => 'Disk Space', // Added - 2018-08-30
'AttrDuration' => 'Varighed',
'AttrEndDate' => 'End Date', // Added - 2018-08-30
'AttrEndDateTime' => 'End Date/Time', // Added - 2018-08-30
'AttrEndTime' => 'End Time', // Added - 2018-08-30
'AttrEndWeekday' => 'End Weekday', // Added - 2018-08-30
'AttrFilterServer' => 'Server Filter is Running On', // Added - 2018-08-30
'AttrFrames' => 'Rammer',
'AttrId' => 'Id',
'AttrMaxScore' => 'Max. Score',
'AttrMonitorId' => 'Monitor Id',
'AttrMonitorName' => 'Monitor Navn',
'AttrServer' => 'Server',
'AttrMonitorServer' => 'Server Monitor is Running On', // Added - 2018-08-30
'AttrName' => 'Navn',
'AttrNotes' => 'Noter',
'AttrStartDate' => 'Start Date', // Added - 2018-08-30
'AttrStartDateTime' => 'Start Date/Time', // Added - 2018-08-30
'AttrStartTime' => 'Start Time', // Added - 2018-08-30
'AttrStartWeekday' => 'Start Weekday', // Added - 2018-08-30
'AttrStateId' => 'Run State', // Added - 2018-08-30
'AttrStorageArea' => 'Storage Area', // Added - 2018-08-30
'AttrStorageServer' => 'Server Hosting Storage', // Added - 2018-08-30
'AttrSystemLoad' => 'System Belastning',
'AttrTime' => 'Tid',
'AttrTotalScore' => 'Total Score',
'AttrWeekday' => 'Ugedag',
'Auto' => 'Auto',
'AutoStopTimeout' => 'Auto Stop Timeout',
'Available' => 'Tilgængelig',
'AvgBrScore' => 'Middel<br/>Score',
'Available' => 'Tilgængelig',
'Background' => 'Baggrund',
'BackgroundFilter' => 'Kør filteret i baggrunden',
'BadAlarmFrameCount' => 'Antal alarm rammer skal være et positivt heltal',
@ -145,20 +145,20 @@ $SLANG = array(
'BadAnalysisFPS' => 'Analyse FPS skal være et positivt heltal eller flydende tal',
'BadAnalysisUpdateDelay'=> 'Analyse opdaterings forsinkelse skal være et heltal på 0 eller mere',
'BadChannel' => 'Kanal skal sættes til et heltal på 0 eller mere',
'BadColours' => 'Målfarven skal sættes til en gyldig værdi',
'BadDevice' => 'Enhed skal sættes til en gyldig værdi',
'BadFormat' => 'Format skal sættes til en gyldig værdi',
'BadFPSReportInterval' => 'Antal FPS report interval buffere skal være et heltal på 0 eller mere',
'BadFormat' => 'Format skal sættes til en gyldig værdi',
'BadFrameSkip' => 'Antal Frame skip skal være et heltal på 0 eller mere',
'BadMotionFrameSkip' => 'Antal Motion Frame skip skal være et heltal på 0 eller mere',
'BadHeight' => 'Højde skal sættes til en gyldig værdi',
'BadHost' => 'Host skal vare en gyldig IP adresse eller hostname, inkludér ikke http://',
'BadImageBufferCount' => 'Billed buffer størrelse skal være et heltal på 10 eller mere',
'BadLabelX' => 'Mærkat X co-ordinaten skal sættes til et heltal på 0 eller mere',
'BadLabelY' => 'Mærkat Y co-ordinaten skal sættes til et heltal på 0 eller mere',
'BadMaxFPS' => 'Maximum FPS skal være et positivt heltal eller flydende tal',
'BadMotionFrameSkip' => 'Antal Motion Frame skip skal være et heltal på 0 eller mere',
'BadNameChars' => 'Navne kan kun indeholde alfanumeriske tegn samt mellemrum, bindestreg og understregning',
'BadPalette' => 'Palette skal sættes til en gyldig værdi',
'BadColours' => 'Målfarven skal sættes til en gyldig værdi',
'BadPath' => 'Sti skal sættes til en gyldig værdi',
'BadPort' => 'Port skal sættes til et gyldigt nummer',
'BadPostEventCount' => 'Antal rammer efter hændelsen skal være et heltal på 0 eller mere',
@ -166,39 +166,40 @@ $SLANG = array(
'BadRefBlendPerc' => 'Reference blandings procentdelen skal være et positivt heltal',
'BadSectionLength' => 'Sektionslængden skal være et heltal på 30 eller mere',
'BadSignalCheckColour' => 'Signal check farve skal være en gyldig RGB farve streng',
'BadSourceType' => 'Source Type \"Web Site\" requires the Function to be set to \"Monitor\"', // Added - 2018-08-30
'BadStreamReplayBuffer' => 'Videostrøm genspilsbufferen skal sættes til et heltal på 0 eller mere',
'BadWarmupCount' => 'Opvarmnings rammer skal være et heltal på 0 eller mere',
'BadWebColour' => 'Web farve skal være en gyldigt web farve streng',
'BadWebSitePath' => 'Please enter a complete website url, including the http:// or https:// prefix.', // Added - 2018-08-30
'BadWidth' => 'Bredde skal sættes til en gyldig værdi',
'Bandwidth' => 'Båndbredde',
'BandwidthHead' => 'Båndbredde', // This is the end of the bandwidth status on the top of the console, different in many language due to phrasing
'BlobPx' => 'Blob Px',
'Blobs' => 'Blobs',
'BlobSizes' => 'Blob Størrelser',
'Blobs' => 'Blobs',
'Brightness' => 'Lysstyrke',
'Buffer' => 'Buffer',
'Buffers' => 'Buffere',
'CSSDescription' => 'SKift standard css for denne computer',
'CanAutoFocus' => 'Can Auto Focus',
'CanAutoGain' => 'Can Auto Gain',
'CanAutoIris' => 'Can Auto Iris',
'CanAutoWhite' => 'Can Auto White Bal.',
'CanAutoZoom' => 'Can Auto Zoom',
'Cancel' => 'Fortryd',
'CancelForcedAlarm' => 'Fortryd Tvungen Alarm',
'CanFocusAbs' => 'Can Focus Absolute',
'CanFocus' => 'Can Focus',
'CanFocusAbs' => 'Can Focus Absolute',
'CanFocusCon' => 'Can Focus Continuous',
'CanFocusRel' => 'Can Focus Relative',
'CanGainAbs' => 'Can Gain Absolute',
'CanGain' => 'Can Gain ',
'CanGainAbs' => 'Can Gain Absolute',
'CanGainCon' => 'Can Gain Continuous',
'CanGainRel' => 'Can Gain Relative',
'CanIrisAbs' => 'Can Iris Absolute',
'CanIris' => 'Can Iris',
'CanIrisAbs' => 'Can Iris Absolute',
'CanIrisCon' => 'Can Iris Continuous',
'CanIrisRel' => 'Can Iris Relative',
'CanMoveAbs' => 'Can Move Absolute',
'CanMove' => 'Can Move',
'CanMoveAbs' => 'Can Move Absolute',
'CanMoveCon' => 'Can Move Continuous',
'CanMoveDiag' => 'Can Move Diagonally',
'CanMoveMap' => 'Can Move Mapped',
@ -209,19 +210,21 @@ $SLANG = array(
'CanSleep' => 'Can Sleep',
'CanTilt' => 'Can Tilt',
'CanWake' => 'Can Wake',
'CanWhite' => 'Can White Balance',
'CanWhiteAbs' => 'Can White Bal. Absolute',
'CanWhiteBal' => 'Can White Bal.',
'CanWhite' => 'Can White Balance',
'CanWhiteCon' => 'Can White Bal. Continuous',
'CanWhiteRel' => 'Can White Bal. Relative',
'CanZoomAbs' => 'Can Zoom Absolute',
'CanZoom' => 'Can Zoom',
'CanZoomAbs' => 'Can Zoom Absolute',
'CanZoomCon' => 'Can Zoom Continuous',
'CanZoomRel' => 'Can Zoom Relative',
'Cancel' => 'Fortryd',
'CancelForcedAlarm' => 'Fortryd Tvungen Alarm',
'CaptureHeight' => 'Capture Højde',
'CaptureMethod' => 'Capture Metode',
'CaptureResolution' => 'Capture Opløsning',
'CapturePalette' => 'Capture Palette',
'CaptureResolution' => 'Capture Opløsning',
'CaptureWidth' => 'Capture Bredde',
'Cause' => 'Årsag',
'CheckMethod' => 'Alarm Check Metode',
@ -230,10 +233,13 @@ $SLANG = array(
'ChooseLogFormat' => 'Vælg et lognings format',
'ChooseLogSelection' => 'Vælg et lognings udvælgelse',
'ChoosePreset' => 'Vælg Forudindstilling',
'Clear' => 'Slet',
'CloneMonitor' => 'Klon Monitor',
'Close' => 'Luk',
'Colour' => 'Farve',
'Command' => 'Kommando',
'Component' => 'Komponent',
'ConcurrentFilter' => 'Run filter concurrently', // Added - 2018-08-30
'Config' => 'Konfigurer',
'ConfiguredFor' => 'Konfigureret for',
'ConfirmDeleteEvents' => 'Er du sikker på, at du vil slette de markerede hændelser?',
@ -244,62 +250,64 @@ $SLANG = array(
'ContactAdmin' => 'Venligst kontakt din administrator for detaljer.',
'Continue' => 'Fortsæt',
'Contrast' => 'Kontrast',
'Control' => 'Control',
'ControlAddress' => 'Control Address',
'ControlCap' => 'Control Capability',
'ControlCaps' => 'Control Capabilities',
'Control' => 'Control',
'ControlDevice' => 'Control Device',
'Controllable' => 'Controllable',
'ControlType' => 'Control Type',
'Controllable' => 'Controllable',
'Current' => 'Nuværende',
'Cycle' => 'Cyklisk',
'CycleWatch' => 'Cyklisk Overvågning',
'DateTime' => 'Dato/Tid',
'Day' => 'Dag',
'Debug' => 'Fejlfind',
'DefaultRate' => 'Standard Rate',
'DefaultScale' => 'Standard Skalering',
'DefaultView' => 'Standard Visning',
'Deinterlacing' => 'Deinterlacing',
'RTSPDescribe' => 'Brug RTSP Response Media URL',
'Delay' => 'Forsilkelse',
'Delete' => 'Slet',
'DeleteAndNext' => 'Slet &amp; Næste',
'DeleteAndPrev' => 'Slet &amp; Forrige',
'Delete' => 'Slet',
'DeleteSavedFilter' => 'Slet gemt filter',
'Description' => 'Beskrivelse',
'DetectedCameras' => 'Fundne Kameraer',
'DetectedProfiles' => 'Fundne Profiler',
'Device' => 'Enheds',
'DeviceChannel' => 'Enheds Kanal',
'DeviceFormat' => 'Enheds Format',
'DeviceNumber' => 'Enheds Number',
'DevicePath' => 'Sti Til Enhed',
'Device' => 'Enheds',
'Devices' => 'Enheder',
'Dimensions' => 'Dimensioner',
'DisableAlarms' => 'Deaktiver Alarmer',
'Disk' => 'Disk',
'Display' => 'Display',
'Displaying' => 'Displaying',
'DoNativeMotionDetection'=> 'Do Native Motion Detection',
'Donate' => 'Venligst Donér',
'DonateAlready' => 'Nej, jeg har allerede doneret',
'DonateEnticement' => 'You\'ve been running ZoneMinder for a while now and hopefully are finding it a useful addition to your home or workplace security. Although ZoneMinder is, and will remain, free and open source, it costs money to develop and support. If you would like to help support future development and new features then please consider donating. Donating is, of course, optional but very much appreciated and you can donate as much or as little as you like.<br/><br/>If you would like to donate please select the option below or go to http://www.zoneminder.com/donate.html in your browser.<br/><br/>Thank you for using ZoneMinder and don\'t forget to visit the forums on ZoneMinder.com for support or suggestions about how to make your ZoneMinder experience even better.',
'Donate' => 'Venligst Donér',
'DonateRemindDay' => 'Ikke endnu, påmind igen on 1 dag',
'DonateRemindHour' => 'Ikke endnu, påmind igen on 1 time',
'DonateRemindMonth' => 'Ikke endnu, påmind igen on 1 måned',
'DonateRemindNever' => 'Nej, jeg ønsker ikke at donere, påmind ikke igen',
'DonateRemindWeek' => 'Ikke endnu, påmind igen on 1 uge',
'DonateYes' => 'Ja, jeg vil gerne donere nu',
'DoNativeMotionDetection'=> 'Do Native Motion Detection',
'Download' => 'Download',
'DownloadVideo' => 'Download Video', // Added - 2018-08-30
'DuplicateMonitorName' => 'Dupliket Monitor Navn',
'Duration' => 'Varighed',
'Edit' => 'Ret',
'EditLayout' => 'Edit Layout', // Added - 2018-08-30
'Email' => 'Email',
'EnableAlarms' => 'Aktivér Alarmer',
'Enabled' => 'Virksom',
'EnterNewFilterName' => 'Indtast nyt filternavn',
'ErrorBrackets' => 'Fejl, venligst check, at du har samme antal open og lukke klammer',
'Error' => 'Fejl',
'ErrorBrackets' => 'Fejl, venligst check, at du har samme antal open og lukke klammer',
'ErrorValidValue' => 'Fejl, venligst check at alle parametre har en gyldig værdi',
'Etc' => 'etc',
'Event' => 'Hændelse',
@ -310,9 +318,9 @@ $SLANG = array(
'Events' => 'Hændelser',
'Exclude' => 'Ekskluder',
'Execute' => 'Udfør',
'ExportDetails' => 'Exporter Hændelses Detaljer',
'Exif' => 'Indlejre EXIF data i billede',
'Export' => 'Exporter',
'ExportDetails' => 'Exporter Hændelses Detaljer',
'ExportFailed' => 'Export Mislykkedes',
'ExportFormat' => 'Export Fil Format',
'ExportFormatTar' => 'Tar',
@ -320,53 +328,55 @@ $SLANG = array(
'ExportFrames' => 'Exporter Ramme Detaljer',
'ExportImageFiles' => 'Exporter billed filer',
'ExportLog' => 'Export Log',
'Exporting' => 'Exporterer',
'ExportMiscFiles' => 'Exporter Andre Filer (hvis tilstede)',
'ExportOptions' => 'Export Indstillinger',
'ExportSucceeded' => 'Export Lykkedes',
'ExportVideoFiles' => 'Exporter Video Filer (hvis tilstede)',
'Exporting' => 'Exporterer',
'FPS' => 'fps',
'FPSReportInterval' => 'FPS Rapport Interval',
'FTP' => 'FTP',
'Far' => 'Fjern',
'FastForward' => 'Hurtigt Frem',
'Feed' => 'Feed',
'Ffmpeg' => 'Ffmpeg',
'File' => 'Fil',
'Filter' => 'Filter',
'FilterArchiveEvents' => 'Arkiver alle matchende',
'FilterDeleteEvents' => 'Slet alle matchende',
'FilterEmailEvents' => 'Email detaljer for alle matchende',
'FilterExecuteEvents' => 'Udfør kommando for alle matchende',
'FilterLog' => 'Filter log',
'FilterMessageEvents' => 'Meddel detaljer for alle matchende',
'FilterMoveEvents' => 'Move all matches', // Added - 2018-08-30
'FilterPx' => 'Filter Px',
'Filter' => 'Filter',
'Filters' => 'Filtre',
'FilterUnset' => 'Du skal angive filter bredde og højde',
'FilterUpdateDiskSpace'=> 'Update used disk space', // Added - 2018-08-30
'FilterUploadEvents' => 'Upload alle match',
'FilterVideoEvents' => 'Opret video for alle match',
'Filters' => 'Filtre',
'First' => 'Første',
'FlippedHori' => 'Spejlet Horizontalt',
'FlippedVert' => 'Spejlet Vertikalt',
'FnNone' => 'None', // Added 2013.08.16.
'FnMonitor' => 'Monitor', // Added 2013.08.16.
'FnModect' => 'Modect', // Added 2013.08.16.
'FnRecord' => 'Record', // Added 2013.08.16.
'FnMocord' => 'Mocord', // Added 2013.08.16.
'FnModect' => 'Modect', // Added 2013.08.16.
'FnMonitor' => 'Monitor', // Added 2013.08.16.
'FnNodect' => 'Nodect', // Added 2013.08.16.
'FnNone' => 'None', // Added 2013.08.16.
'FnRecord' => 'Record', // Added 2013.08.16.
'Focus' => 'Focus',
'ForceAlarm' => 'Force Alarm',
'Format' => 'Format',
'FPS' => 'fps',
'FPSReportInterval' => 'FPS Rapport Interval',
'Frame' => 'Ramme',
'FrameId' => 'Ramme Id',
'FrameRate' => 'Billedhastighed',
'Frames' => 'Rammer',
'FrameSkip' => 'Spring over antal rammer',
'MotionFrameSkip' => 'Spring over antal bevægelsesrammer',
'FTP' => 'FTP',
'Frames' => 'Rammer',
'Func' => 'Funk',
'Function' => 'Funktion',
'Gain' => 'Gain',
'General' => 'Generelt',
'GenerateDownload' => 'Generate Download', // Added - 2018-08-30
'GenerateVideo' => 'Generer Video',
'GeneratingVideo' => 'Genererer Video',
'GoToZoneMinder' => 'Gå til ZoneMinder.com',
@ -384,8 +394,8 @@ $SLANG = array(
'HasTurboTilt' => 'Has Turbo Tilt',
'HasWhiteSpeed' => 'Has White Bal. Speed',
'HasZoomSpeed' => 'Has Zoom Speed',
'HighBW' => 'High&nbsp;B/W',
'High' => 'Høj',
'HighBW' => 'High&nbsp;B/W',
'Home' => 'Hjemme',
'Hostname' => 'Hostname',
'Hour' => 'Time',
@ -393,11 +403,11 @@ $SLANG = array(
'Id' => 'Id',
'Idle' => 'Afventende',
'Ignore' => 'Ignorer',
'ImageBufferSize' => 'Billed Buffer Størrelse (rammer)',
'Image' => 'Billede',
'ImageBufferSize' => 'Billed Buffer Størrelse (rammer)',
'Images' => 'Billeder',
'Include' => 'Inkluder',
'In' => 'I',
'Include' => 'Inkluder',
'Inverted' => 'Inverteret',
'Iris' => 'Blænde',
'KeyString' => 'Nøgle Streng',
@ -405,26 +415,30 @@ $SLANG = array(
'Language' => 'Sprog',
'Last' => 'Sidste',
'Layout' => 'Layout',
'Level' => 'Niveau',
'Libvlc' => 'Libvlc',
'LimitResultsPost' => 'resultater', // This is used at the end of the phrase 'Limit to first N results only'
'LimitResultsPre' => 'Begræns til kun de første', // This is used at the beginning of the phrase 'Limit to first N results only'
'Line' => 'Linie',
'LinkedMonitors' => 'Sammenkædede Monitorer',
'List' => 'Liste',
'ListMatches' => 'List Matches', // Added - 2018-08-30
'Load' => 'Belastning',
'Local' => 'Lokal',
'Log' => 'Log',
'Logs' => 'Logs',
'Logging' => 'Logning',
'LoggedInAs' => 'Logget ind som',
'Logging' => 'Logning',
'LoggingIn' => 'Logger ind',
'Login' => 'Logind',
'Logout' => 'Logud',
'LowBW' => 'Lav&nbsp;B/W',
'Logs' => 'Logs',
'Low' => 'Lav',
'LowBW' => 'Lav&nbsp;B/W',
'Main' => 'Hoved',
'Man' => 'Man',
'Manual' => 'Manuel',
'Mark' => 'Markér',
'Max' => 'Max',
'MaxBandwidth' => 'Max Båndbredde',
'MaxBrScore' => 'Max.<br/>Score',
'MaxFocusRange' => 'Max Focus Range',
@ -433,11 +447,9 @@ $SLANG = array(
'MaxGainRange' => 'Max Gain Range',
'MaxGainSpeed' => 'Max Gain Speed',
'MaxGainStep' => 'Max Gain Step',
'MaximumFPS' => 'Maximum FPS',
'MaxIrisRange' => 'Max Iris Range',
'MaxIrisSpeed' => 'Max Iris Speed',
'MaxIrisStep' => 'Max Iris Step',
'Max' => 'Max',
'MaxPanRange' => 'Max Pan Range',
'MaxPanSpeed' => 'Max Pan Speed',
'MaxPanStep' => 'Max Pan Step',
@ -450,8 +462,10 @@ $SLANG = array(
'MaxZoomRange' => 'Max Zoom Range',
'MaxZoomSpeed' => 'Max Zoom Speed',
'MaxZoomStep' => 'Max Zoom Step',
'MediumBW' => 'Medium&nbsp;B/W',
'MaximumFPS' => 'Maximum FPS',
'Medium' => 'Medium',
'MediumBW' => 'Medium&nbsp;B/W',
'Message' => 'Meddelelse',
'MinAlarmAreaLtMax' => 'Minimum alarm område skal være mindre end maksimum',
'MinAlarmAreaUnset' => 'Du skal angive det minimale antal alarm pixels',
'MinBlobAreaLtMax' => 'Minimum blob område skal være mindre end maksimum',
@ -487,22 +501,24 @@ $SLANG = array(
'MinZoomStep' => 'Min Zoom Step',
'Misc' => 'Diverse',
'Mode' => 'Mode',
'MonitorIds' => 'Monitor&nbsp;Ids',
'Monitor' => 'Monitor',
'MonitorPresetIntro' => 'Vælg en passende forudindstilling fra listen herunder.<br/><br/>Vær opmærksom på, at dette kan overskrive værdier, du allerede har angivet for den aktuelle monitor.<br/><br/>',
'MonitorIds' => 'Monitor&nbsp;Ids',
'MonitorPreset' => 'Monitor Forudindstillinger',
'MonitorProbeIntro' => 'Listen herunder viser fundne analoge og nætværks kameraer samt hvorvidt de allerede er i brug eller tilgængelige for udvælgelse.<br/><br/>Vælg det ønskede fra listen herunder.<br/><br/>Vær opmærksom på, at muligvis ikke alle kameraer er fundet og at valg af et kamera kan overskrive værdier, du allerede har angivet for den aktuelle monitor.<br/><br/>',
'MonitorPresetIntro' => 'Vælg en passende forudindstilling fra listen herunder.<br/><br/>Vær opmærksom på, at dette kan overskrive værdier, du allerede har angivet for den aktuelle monitor.<br/><br/>',
'MonitorProbe' => 'Monitor Probe',
'MonitorProbeIntro' => 'Listen herunder viser fundne analoge og nætværks kameraer samt hvorvidt de allerede er i brug eller tilgængelige for udvælgelse.<br/><br/>Vælg det ønskede fra listen herunder.<br/><br/>Vær opmærksom på, at muligvis ikke alle kameraer er fundet og at valg af et kamera kan overskrive værdier, du allerede har angivet for den aktuelle monitor.<br/><br/>',
'Monitors' => 'Monitorer',
'Montage' => 'Montage',
'MontageReview' => 'Montage Review',
'Month' => 'Måned',
'More' => 'Mere',
'MotionFrameSkip' => 'Spring over antal bevægelsesrammer',
'Move' => 'Bevæg',
'MtgDefault' => 'Standard', // Added 2013.08.15.
'Mtg2widgrd' => '2-bred gitter', // Added 2013.08.15.
'Mtg3widgrd' => '3-bred gitter', // Added 2013.08.15.
'Mtg4widgrd' => '4-bred gitter', // Added 2013.08.15.
'Mtg3widgrx' => '3-bred gitter, skaleret, forstørret ved alarm', // Added 2013.08.15.
'Mtg4widgrd' => '4-bred gitter', // Added 2013.08.15.
'MtgDefault' => 'Standard', // Added 2013.08.15.
'MustBeGe' => 'Skal være større end eller lig med',
'MustBeLe' => 'Skal være mindre end eller lig med',
'MustConfirmPassword' => 'Du skal bekræfte adgangskoden',
@ -511,53 +527,55 @@ $SLANG = array(
'Name' => 'Navn',
'Near' => 'Nær',
'Network' => 'Netværk',
'New' => 'Ny',
'NewGroup' => 'Ny Gruppe',
'NewLabel' => 'Ny Mærkat',
'New' => 'Ny',
'NewPassword' => 'Ny Adgangskode',
'NewState' => 'Ny Tilstand',
'NewUser' => 'Ny bruger',
'Next' => 'Næste',
'No' => 'Nej',
'NoDetectedCameras' => 'Ingen Detected Cameras',
'NoDetectedProfiles' => 'Ingen Fundne Profiler',
'NoFramesRecorded' => 'Der er ingen billeder optaget for denne hændelse',
'NoGroup' => 'Ingen gruppe',
'NoneAvailable' => 'Ingen tilgængelig',
'None' => 'Ingen',
'No' => 'Nej',
'Normal' => 'Normalt',
'NoSavedFilters' => 'IngenGemteFiltre',
'NoStatisticsRecorded' => 'Der er ingen statistik noteret for denne hændelse/ramme',
'None' => 'Ingen',
'NoneAvailable' => 'Ingen tilgængelig',
'Normal' => 'Normalt',
'Notes' => 'Noter',
'NumPresets' => 'Num Forudinst.',
'Off' => 'Fra',
'On' => 'Til',
'OnvifCredentialsIntro' => 'Venligst lever brugernavn og adgangskodefor de valgte kamera.<br/>Hvis der ikke er oprettet nogen bruger for kameraet, så vil brugeren givet her blive oprettet med den angivne adgangskode.<br/><br/>',
'OnvifProbe' => 'ONVIF',
'OnvifProbeIntro' => 'Listen nedenfor viser fundne ONVIF kameraer samt hvorvidt de allerede er i brug eller tilgængelige for udvælgelse.<br/><br/>Vælg det ønskede fra listen herunder.<br/><br/>Vær opmærksom på, at muligvis ikke alle kameraer er fundet og at valg af et kamera kan overskrive værdier, du allerede har angivet for den aktuelle monitor.<br/><br/>',
'OnvifCredentialsIntro' => 'Venligst lever brugernavn og adgangskodefor de valgte kamera.<br/>Hvis der ikke er oprettet nogen bruger for kameraet, så vil brugeren givet her blive oprettet med den angivne adgangskode.<br/><br/>',
'Open' => 'Åben',
'OpEq' => 'lig med',
'OpGtEq' => 'større end eller lig med',
'OpGt' => 'større end',
'OpGtEq' => 'større end eller lig med',
'OpIn' => 'indeholdt i',
'OpLtEq' => 'mindre end eller lig med',
'OpIs' => 'is', // Added - 2018-08-30
'OpIsNot' => 'is not', // Added - 2018-08-30
'OpLt' => 'mindre end',
'OpLtEq' => 'mindre end eller lig med',
'OpMatches' => 'matcher',
'OpNe' => 'ikke lig med',
'OpNotIn' => 'ikke indeholdt i',
'OpNotMatches' => 'matcher ikke',
'OptionalEncoderParam' => 'Optionelle Encoder Parametre',
'Open' => 'Åben',
'OptionHelp' => 'Indstillinger hjælp',
'OptionRestartWarning' => 'Disse ændringer har muligvis ikke fuld effekt\nmens systemet er kørende. Når du har\nafsluttet dine ændringer, skal du huske at\ngenstarte ZoneMinder.',
'OptionalEncoderParam' => 'Optionelle Encoder Parametre',
'Options' => 'Indstillinger',
'Order' => 'Rækkefølge',
'OrEnterNewName' => 'eller indtast nyt navn',
'Order' => 'Rækkefølge',
'Orientation' => 'Orientering',
'Out' => 'Ud',
'OverwriteExisting' => 'Overskriv Eksisterende',
'Paged' => 'Sidevis',
'PanLeft' => 'Pan Left',
'Pan' => 'Pan',
'PanLeft' => 'Pan Left',
'PanRight' => 'Pan Right',
'PanTilt' => 'Pan/Tilt',
'Parameter' => 'Parameter',
@ -565,14 +583,15 @@ $SLANG = array(
'PasswordsDifferent' => 'Den nye og den bekræftende adgangskode er forskellige',
'Paths' => 'Stier',
'Pause' => 'Pause',
'PhoneBW' => 'Telefon&nbsp;B/W',
'Phone' => 'Telefon',
'PhoneBW' => 'Telefon&nbsp;B/W',
'Pid' => 'PID',
'PixelDiff' => 'Pixel Forskel',
'Pixels' => 'pixels',
'PlayAll' => 'Afspil Alle',
'Play' => 'Afspil',
'Plugins' => 'Plugins',
'PlayAll' => 'Afspil Alle',
'PleaseWait' => 'Vent venligst',
'Plugins' => 'Plugins',
'Point' => 'Point',
'PostEventImageBuffer' => 'Antal Billeder Efter Hændelse',
'PreEventImageBuffer' => 'Antal Billeder Før Hændelse',
@ -585,30 +604,33 @@ $SLANG = array(
'ProfileProbeIntro' => 'The list below shows the existing stream profiles of the selected camera .<br/><br/>Select the desired entry from the list below.<br/><br/>Please note that ZoneMinder cannot configure additional profiles and that choosing a camera here may overwrite any values you already have configured for the current monitor.<br/><br/>',
'Progress' => 'Position',
'Protocol' => 'Protokol',
'RTSPDescribe' => 'Brug RTSP Response Media URL',
'RTSPTransport' => 'RTSP Transport Protocol',
'Rate' => 'Rate',
'RecaptchaWarning' => 'Your reCaptcha secret key is invalid. Please correct it, or reCaptcha will not work', // added Sep 24 2015 - PP
'RecordAudio' => 'Skal lydsporet gemmes sammen med en hændelse.',
'Real' => 'Naturtro',
'RecaptchaWarning' => 'Your reCaptcha secret key is invalid. Please correct it, or reCaptcha will not work', // added Sep 24 2015 - PP
'Record' => 'Optag',
'RecordAudio' => 'Skal lydsporet gemmes sammen med en hændelse.',
'RefImageBlendPct' => 'Reference Billede Blandings %',
'Refresh' => 'Genindlæs',
'Remote' => 'Remote',
'RemoteHostName' => 'Remote Host Name',
'RemoteHostPath' => 'Remote Host Path',
'RemoteHostSubPath' => 'Remote Host SubPath',
'RemoteHostPort' => 'Remote Host Port',
'RemoteHostSubPath' => 'Remote Host SubPath',
'RemoteImageColours' => 'Remote Image Colours',
'RemoteMethod' => 'Remote Method',
'RemoteProtocol' => 'Remote Protocol',
'Remote' => 'Remote',
'Rename' => 'Omdøb',
'Replay' => 'Genafspil',
'ReplayAll' => 'Alle Hændelser',
'ReplayGapless' => 'Hændelser uafbrudt',
'Replay' => 'Genafspil',
'ReplaySingle' => 'Enkelt Hændelse',
'ResetEventCounts' => 'Nulstil Hændelses Tæller',
'ReportEventAudit' => 'Audit Events Report', // Added - 2018-08-30
'Reset' => 'Nulstil',
'Restarting' => 'Genstarter',
'ResetEventCounts' => 'Nulstil Hændelses Tæller',
'Restart' => 'Genstart',
'Restarting' => 'Genstarter',
'RestrictedCameraIds' => 'Restricted Camera Ids',
'RestrictedMonitors' => 'Restricted Monitors',
'ReturnDelay' => 'Return Delay',
@ -616,34 +638,33 @@ $SLANG = array(
'Rewind' => 'Hurtigt Tilbage',
'RotateLeft' => 'Roter til venstrte',
'RotateRight' => 'Roter til højre',
'RTSPTransport' => 'RTSP Transport Protocol',
'RunLocalUpdate' => 'Kør venligst zmupdate.pl for at opdatere',
'RunMode' => 'Driftsmåde',
'Running' => 'Kørende',
'RunState' => 'Drift Tilstand',
'Running' => 'Kørende',
'Save' => 'Gem',
'SaveAs' => 'Gem som',
'SaveFilter' => 'Gem Filter',
'SaveJPEGS' => 'Gem JPEGs',
'Save' => 'Gem',
'SaveJPEGs' => 'Save JPEGs', // Added - 2018-08-30
'Scale' => 'Skaler',
'Score' => 'Score',
'Secs' => 'Sek.',
'Sectionlength' => 'Sektions længde',
'SelectMonitors' => 'Vælg Monitorer',
'Select' => 'Vælg',
'SelectFormat' => 'Vælg Format',
'SelectLog' => 'Vælg Log',
'SelectMonitors' => 'Vælg Monitorer',
'SelfIntersecting' => 'Polygonens kanter må ikke krydses',
'Set' => 'Sæt',
'SetNewBandwidth' => 'Vælg ny båndbredde',
'SetPreset' => 'Set Preset',
'Set' => 'Sæt',
'Settings' => 'Indstillinger',
'ShowFilterWindow' => 'Vis Filter Vindue',
'ShowTimeline' => 'Vis Tidslinie',
'SignalCheckColour' => 'Signal Check Colour',
'SignalCheckPoints' => 'Signal Check Points', // Added - 2018-08-30
'Size' => 'Størrelse',
'SkinDescription' => 'SKift standard skin for denne computer',
'CSSDescription' => 'SKift standard css for denne computer',
'Sleep' => 'Sover',
'SortAsc' => 'Voksende',
'SortBy' => 'Sortér efter',
@ -652,46 +673,53 @@ $SLANG = array(
'SourceColours' => 'Kilde Farver',
'SourcePath' => 'Kilde Sti',
'SourceType' => 'Kilde Type',
'Speed' => 'Speed',
'SpeedHigh' => 'High Speed',
'SpeedLow' => 'Low Speed',
'SpeedMedium' => 'Medium Speed',
'Speed' => 'Speed',
'SpeedTurbo' => 'Turbo Speed',
'Start' => 'Start',
'State' => 'Tilstand',
'Stats' => 'Stats',
'Status' => 'Status',
'StatusConnected' => 'Capturing', // Added - 2018-08-30
'StatusNotRunning' => 'Not Running', // Added - 2018-08-30
'StatusRunning' => 'Not Capturing', // Added - 2018-08-30
'StatusUnknown' => 'Unknown', // Added - 2018-08-30
'Step' => 'Skridt',
'StepBack' => 'Skridt Tilbage',
'StepForward' => 'Skridt Frem',
'StepLarge' => 'Langt Skridt',
'StepMedium' => 'Medium Skridt',
'StepNone' => 'Ingen Skridt',
'StepSmall' => 'Lille Skridt',
'Step' => 'Skridt',
'Stills' => 'Stilbilleder',
'Stopped' => 'Stoppet',
'Stop' => 'Stop',
'StreamReplayBuffer' => 'Stream Replay Image Buffer',
'Stopped' => 'Stoppet',
'StorageArea' => 'Storage Area', // Added - 2018-08-30
'StorageScheme' => 'Scheme', // Added - 2018-08-30
'Stream' => 'Stream',
'StreamReplayBuffer' => 'Stream Replay Image Buffer',
'Submit' => 'Påtryk',
'System' => 'System',
'SystemLog' => 'System Log',
'TargetColorspace' => 'Target colorspace',
'Tele' => 'Tele',
'Thumbnail' => 'Thumbnail',
'Tilt' => 'Tilt',
'Time' => 'Tidspunkt',
'TimeDelta' => 'Tidsforskel',
'TimeStamp' => 'Tids stempel',
'Timeline' => 'Tidslinie',
'TimelineTip1' => 'Før musen over grafen for at vise snapshot billede og detaljer om hændelsen.', // Added 2013.08.15.
'TimelineTip2' => 'Klip på de farvede områder af grafen, eller billedet, for at se hændelsen.', // Added 2013.08.15.
'TimelineTip3' => 'Klik på baggrunden for at zoome ind på en mindre tidsperiode omkring dit klik.', // Added 2013.08.15.
'TimelineTip4' => 'Brug kontrollerne nedenfor for at zoome ud eller navigere frem eller tilbage i tiden.', // Added 2013.08.15.
'Timestamp' => 'Tidsstempel',
'TimestampLabelFormat' => 'Tidsstempel Mærkat Format',
'TimestampLabelSize' => 'Font Størrelse',
'TimestampLabelX' => 'Tidsstempel Mærkat X',
'TimestampLabelY' => 'Tidsstempel Mærkat Y',
'TimestampLabelSize' => 'Font Størrelse',
'Timestamp' => 'Tidsstempel',
'TimeStamp' => 'Tids stempel',
'Time' => 'Tidspunkt',
'Today' => 'Idag',
'Tools' => 'Værktøjer',
'Total' => 'Total',
@ -706,25 +734,29 @@ $SLANG = array(
'Undefined' => 'Udefineret',
'Units' => 'Enheder',
'Unknown' => 'Ukendt',
'Update' => 'Opdater',
'UpdateAvailable' => 'En opdatering til ZoneMinder er tilgængelig.',
'UpdateNotNecessary' => 'Ingen opdatering er nødvendig.',
'Update' => 'Opdater',
'Upload' => 'Upload',
'Updated' => 'Opdateret',
'UsedPlugins' => 'Anvendte Plugins',
'Upload' => 'Upload',
'UseFilter' => 'Anvend Filter',
'UseFilterExprsPost' => '&nbsp;filter&nbsp;udtryk', // This is used at the end of the phrase 'use N filter expressions'
'UseFilterExprsPre' => 'Anvend&nbsp;', // This is used at the beginning of the phrase 'use N filter expressions'
'UseFilter' => 'Anvend Filter',
'UsedPlugins' => 'Anvendte Plugins',
'User' => 'Bruger',
'Username' => 'Brugernavn',
'Users' => 'Brugere',
'User' => 'Bruger',
'V4L' => 'V4L',
'V4LCapturesPerFrame' => 'Captures Per Frame',
'V4LMultiBuffer' => 'Multi Buffering',
'Value' => 'Værdi',
'Version' => 'Version',
'VersionIgnore' => 'Ignorer denne værdi',
'VersionRemindDay' => 'Påmind igen om 1 dag',
'VersionRemindHour' => 'Påmind igen om 1 time',
'VersionRemindNever' => 'Påmind ikke om nye versioner',
'VersionRemindWeek' => 'Påmind igen om 1 uge',
'Version' => 'Version',
'Video' => 'Video',
'VideoFormat' => 'Video Format',
'VideoGenFailed' => 'Video Generering Fejlede!',
'VideoGenFiles' => 'Existerende Video Filer',
@ -733,47 +765,44 @@ $SLANG = array(
'VideoGenSucceeded' => 'Video Generering Succeeded!',
'VideoSize' => 'Video Størrelse',
'VideoWriter' => 'Video Skriver',
'Video' => 'Video',
'View' => 'Vis',
'ViewAll' => 'Vis Alle',
'ViewEvent' => 'Vis Hændelse',
'ViewPaged' => 'Vis Sidevis',
'View' => 'Vis',
'V4L' => 'V4L',
'V4LCapturesPerFrame' => 'Captures Per Frame',
'V4LMultiBuffer' => 'Multi Buffering',
'Wake' => 'Vågen',
'WarmupFrames' => 'Opvarmningsbilleder',
'Watch' => 'Ur',
'WebColour' => 'Web Farve',
'Web' => 'Web',
'WebColour' => 'Web Farve',
'WebSiteUrl' => 'Website URL', // Added - 2018-08-30
'Week' => 'Uge',
'WhiteBalance' => 'Hvidbalance',
'White' => 'Hvid',
'WhiteBalance' => 'Hvidbalance',
'Wide' => 'Bred',
'X' => 'X',
'X10' => 'X10',
'X10ActivationString' => 'X10 Activerings Streng',
'X10InputAlarmString' => 'X10 Input Alarm Streng',
'X10OutputAlarmString' => 'X10 Output Alarm Streng',
'X10' => 'X10',
'X' => 'X',
'Y' => 'Y',
'Yes' => 'Ja',
'YouNoPerms' => 'Du har ikke tilladelse til at tilgå denne ressurse.',
'Y' => 'Y',
'Zone' => 'Zone',
'ZoneAlarmColour' => 'Alarm Farve (Rød/Grøn/Blå)',
'ZoneArea' => 'Zone Område',
'ZoneExtendAlarmFrames' => 'Udvid Antal Alarm Rammer',
'ZoneFilterSize' => 'Filter Bredde/Højde (pixels)',
'ZoneMinderLog' => 'ZoneMinder Log',
'ZoneMinMaxAlarmArea' => 'Min/Max Alarmeret Område',
'ZoneMinMaxBlobArea' => 'Min/Max Blob Område',
'ZoneMinMaxBlobs' => 'Min/Max Blobs',
'ZoneMinMaxFiltArea' => 'Min/Max Filtreret Område',
'ZoneMinMaxPixelThres' => 'Min/Max Pixel Grænseværdi (0-255)',
'ZoneMinderLog' => 'ZoneMinder Log',
'ZoneOverloadFrames' => 'Antal Rammer At Ignorere Efter Overload',
'ZoneExtendAlarmFrames' => 'Udvid Antal Alarm Rammer',
'Zones' => 'Zoner',
'Zone' => 'Zone',
'Zoom' => 'Zoom',
'ZoomIn' => 'Zoom Ind',
'ZoomOut' => 'Zoom Ud',
'Zoom' => 'Zoom',
);
// Complex replacements with formatting and/or placements, must be passed through sprintf

View File

@ -651,10 +651,13 @@ $SLANG = array(
'RotateLeft' => 'Rotate Left',
'RotateRight' => 'Rotate Right',
'RTSPTransport' => 'RTSP Transport Protocol',
'RunAudit' => 'Run Audit Process',
'RunLocalUpdate' => 'Please run zmupdate.pl to update',
'RunMode' => 'Run Mode',
'Running' => 'Running',
'RunState' => 'Run State',
'RunStats' => 'Run Stats Process',
'RunTrigger' => 'Run Trigger Process',
'SaveAs' => 'Save as',
'SaveFilter' => 'Save Filter',
'SaveJPEGs' => 'Save JPEGs',
@ -711,6 +714,7 @@ $SLANG = array(
'Stopped' => 'Stopped',
'Stop' => 'Stop',
'StorageArea' => 'Storage Area',
'StorageDoDelete' => 'Do Deletes',
'StorageScheme' => 'Scheme',
'StreamReplayBuffer' => 'Stream Replay Image Buffer',
'Stream' => 'Stream',

View File

@ -29,6 +29,8 @@ $SLANG = array(
'Actual' => 'Actual',
'AddNewControl' => 'Add New Control',
'AddNewMonitor' => 'Agregar Nuevo Monitor',
'AddNewServer' => 'Add New Server', // Added - 2018-08-30
'AddNewStorage' => 'Add New Storage', // Added - 2018-08-30
'AddNewUser' => 'Agregar Nuevo Usuario',
'AddNewZone' => 'Agregar Nueva Zona',
'Alarm' => 'Alarma',
@ -56,22 +58,32 @@ $SLANG = array(
'AttrArchiveStatus' => 'Estado Archivo',
'AttrAvgScore' => 'Puntaje Prom.',
'AttrCause' => 'Cause',
'AttrDate' => 'Fecha',
'AttrDateTime' => 'Fecha/Hora',
'AttrDiskBlocks' => 'Disk Blocks',
'AttrDiskPercent' => 'Disk Percent',
'AttrDiskSpace' => 'Disk Space', // Added - 2018-08-30
'AttrDuration' => 'Duración',
'AttrEndDate' => 'End Date', // Added - 2018-08-30
'AttrEndDateTime' => 'End Date/Time', // Added - 2018-08-30
'AttrEndTime' => 'End Time', // Added - 2018-08-30
'AttrEndWeekday' => 'End Weekday', // Added - 2018-08-30
'AttrFilterServer' => 'Server Filter is Running On', // Added - 2018-08-30
'AttrFrames' => 'Cuadros',
'AttrId' => 'Id',
'AttrMaxScore' => 'Puntaje Máximo',
'AttrMonitorId' => 'Monitor Id',
'AttrMonitorName' => 'Nombre Monitor',
'AttrMonitorServer' => 'Server Monitor is Running On', // Added - 2018-08-30
'AttrName' => 'Name',
'AttrNotes' => 'Notes',
'AttrStartDate' => 'Start Date', // Added - 2018-08-30
'AttrStartDateTime' => 'Start Date/Time', // Added - 2018-08-30
'AttrStartTime' => 'Start Time', // Added - 2018-08-30
'AttrStartWeekday' => 'Start Weekday', // Added - 2018-08-30
'AttrStateId' => 'Run State', // Added - 2018-08-30
'AttrStorageArea' => 'Storage Area', // Added - 2018-08-30
'AttrStorageServer' => 'Server Hosting Storage', // Added - 2018-08-30
'AttrSystemLoad' => 'System Load',
'AttrTime' => 'Hora',
'AttrTotalScore' => 'Puntaje Total',
'AttrWeekday' => 'Día Semana',
'Auto' => 'Auto',
'AutoStopTimeout' => 'Auto Stop Timeout',
'Available' => 'Available', // Added - 2009-03-31
@ -104,9 +116,11 @@ $SLANG = array(
'BadRefBlendPerc' => 'Reference blend percentage must be a positive integer',
'BadSectionLength' => 'Section length must be an integer of 30 or more',
'BadSignalCheckColour' => 'Signal check colour must be a valid RGB colour string',
'BadSourceType' => 'Source Type \"Web Site\" requires the Function to be set to \"Monitor\"', // Added - 2018-08-30
'BadStreamReplayBuffer'=> 'Stream replay buffer must be an integer of zero or more',
'BadWarmupCount' => 'Warmup frames must be an integer of zero or more',
'BadWebColour' => 'Web colour must be a valid web colour string',
'BadWebSitePath' => 'Please enter a complete website url, including the http:// or https:// prefix.', // Added - 2018-08-30
'BadWidth' => 'Width must be set to a valid value',
'Bandwidth' => 'Velocidad',
'BandwidthHead' => 'Bandwidth', // This is the end of the bandwidth status on the top of the console, different in many language due to phrasing
@ -170,10 +184,12 @@ $SLANG = array(
'ChooseLogSelection' => 'Choose a log selection', // Added - 2011-06-17
'ChoosePreset' => 'Choose Preset',
'Clear' => 'Clear', // Added - 2011-06-16
'CloneMonitor' => 'Clone', // Added - 2018-08-30
'Close' => 'Cerrar',
'Colour' => 'Color',
'Command' => 'Command',
'Component' => 'Component', // Added - 2011-06-16
'ConcurrentFilter' => 'Run filter concurrently', // Added - 2018-08-30
'Config' => 'Config.',
'ConfiguredFor' => 'Configurado Para',
'ConfirmDeleteEvents' => 'Are you sure you wish to delete the selected events?',
@ -231,9 +247,11 @@ $SLANG = array(
'DonateRemindWeek' => 'Not yet, remind again in 1 week',
'DonateYes' => 'Yes, I\'d like to donate now',
'Download' => 'Download',
'DownloadVideo' => 'Download Video', // Added - 2018-08-30
'DuplicateMonitorName' => 'Duplicate Monitor Name', // Added - 2009-03-31
'Duration' => 'Duración',
'Edit' => 'Editar',
'EditLayout' => 'Edit Layout', // Added - 2018-08-30
'Email' => 'Email',
'EnableAlarms' => 'Enable Alarms',
'Enabled' => 'Habilitado',
@ -250,6 +268,7 @@ $SLANG = array(
'Events' => 'Eventos',
'Exclude' => 'Excluir',
'Execute' => 'Execute',
'Exif' => 'Embed EXIF data into image', // Added - 2018-08-30
'Export' => 'Export',
'ExportDetails' => 'Export Event Details',
'ExportFailed' => 'Export Failed',
@ -279,8 +298,10 @@ $SLANG = array(
'FilterExecuteEvents' => 'Ejecutar un comando en las coincidencias',
'FilterLog' => 'Filter log', // Added - 2015-04-18
'FilterMessageEvents' => 'Mandar un mensaje de los eventos',
'FilterMoveEvents' => 'Move all matches', // Added - 2018-08-30
'FilterPx' => 'Filtro Px',
'FilterUnset' => 'You must specify a filter width and height',
'FilterUpdateDiskSpace'=> 'Update used disk space', // Added - 2018-08-30
'FilterUploadEvents' => 'Subir los eventos que coincidan',
'FilterVideoEvents' => 'Create video for all matches',
'Filters' => 'Filters',
@ -305,6 +326,7 @@ $SLANG = array(
'Function' => 'Función',
'Gain' => 'Gain',
'General' => 'General',
'GenerateDownload' => 'Generate Download', // Added - 2018-08-30
'GenerateVideo' => 'Crear Video',
'GeneratingVideo' => 'Creando Video',
'GoToZoneMinder' => 'Ir a Zoneminder.com',
@ -325,6 +347,7 @@ $SLANG = array(
'High' => 'Alta',
'HighBW' => 'Alta&nbsp;B/W',
'Home' => 'Home',
'Hostname' => 'Hostname', // Added - 2018-08-30
'Hour' => 'Hora',
'Hue' => 'Saturación',
'Id' => 'Id',
@ -349,6 +372,7 @@ $SLANG = array(
'Line' => 'Line', // Added - 2011-06-16
'LinkedMonitors' => 'Linked Monitors',
'List' => 'List',
'ListMatches' => 'List Matches', // Added - 2018-08-30
'Load' => 'Carga',
'Local' => 'Local',
'Log' => 'Log', // Added - 2011-06-16
@ -435,6 +459,7 @@ $SLANG = array(
'MonitorProbeIntro' => 'The list below shows detected analog and network cameras and whether they are already being used or available for selection.<br/><br/>Select the desired entry from the list below.<br/><br/>Please note that not all cameras may be detected and that choosing a camera here may overwrite any values you already have configured for the current monitor.<br/><br/>', // Added - 2009-03-31
'Monitors' => 'Monitores',
'Montage' => 'Cámara Múltiple',
'MontageReview' => 'Montage Review', // Added - 2018-08-30
'Month' => 'Mes',
'More' => 'More', // Added - 2011-06-16
'MotionFrameSkip' => 'Motion Frame Skip',
@ -461,6 +486,7 @@ $SLANG = array(
'Next' => 'Siguiente',
'No' => 'No',
'NoDetectedCameras' => 'No Detected Cameras', // Added - 2009-03-31
'NoDetectedProfiles' => 'No Detected Profiles', // Added - 2018-08-30
'NoFramesRecorded' => 'No hay movimientos grabados para este evento',
'NoGroup' => 'No Group',
'NoSavedFilters' => 'FiltrosNoGuardados',
@ -479,6 +505,8 @@ $SLANG = array(
'OpGt' => 'mayor que',
'OpGtEq' => 'mayor o igual que',
'OpIn' => 'En sistema',
'OpIs' => 'is', // Added - 2018-08-30
'OpIsNot' => 'is not', // Added - 2018-08-30
'OpLt' => 'menor que',
'OpLtEq' => 'menor o igual que',
'OpMatches' => 'Coincide',
@ -488,6 +516,7 @@ $SLANG = array(
'Open' => 'Open',
'OptionHelp' => 'Ayuda',
'OptionRestartWarning' => 'Estos cambios no se guardaran completamente\nmientras el sistema se ejecute. Cuando termine\nde realizar los cambios asegurese de\nreiniciar Zoneminder.',
'OptionalEncoderParam' => 'Optional Encoder Parameters', // Added - 2018-08-30
'Options' => 'Opciones',
'OrEnterNewName' => 'o agregue nombre',
'Order' => 'Order',
@ -525,9 +554,13 @@ $SLANG = array(
'ProfileProbeIntro' => 'The list below shows the existing stream profiles of the selected camera .<br/><br/>Select the desired entry from the list below.<br/><br/>Please note that ZoneMinder cannot configure additional profiles and that choosing a camera here may overwrite any values you already have configured for the current monitor.<br/><br/>', // Added - 2015-04-18
'Progress' => 'Progress', // Added - 2015-04-18
'Protocol' => 'Protocol',
'RTSPDescribe' => 'Use RTSP Response Media URL', // Added - 2018-08-30
'RTSPTransport' => 'RTSP Transport Protocol', // Added - 2018-08-30
'Rate' => 'Ritmo',
'Real' => 'Real',
'RecaptchaWarning' => 'Your reCaptcha secret key is invalid. Please correct it, or reCaptcha will not work', // Added - 2018-08-30
'Record' => 'Registro',
'RecordAudio' => 'Whether to store the audio stream when saving an event.', // Added - 2018-08-30
'RefImageBlendPct' => 'Reference Image Blend %ge',
'Refresh' => 'Actualizar',
'Remote' => 'Remote',
@ -543,6 +576,7 @@ $SLANG = array(
'ReplayAll' => 'All Events',
'ReplayGapless' => 'Gapless Events',
'ReplaySingle' => 'Single Event',
'ReportEventAudit' => 'Audit Events Report', // Added - 2018-08-30
'Reset' => 'Reset',
'ResetEventCounts' => 'Borrar Contador Eventos',
'Restart' => 'Reiniciar',
@ -561,6 +595,7 @@ $SLANG = array(
'Save' => 'Guardar',
'SaveAs' => 'Guardar Como',
'SaveFilter' => 'Guardar Filtro',
'SaveJPEGs' => 'Save JPEGs', // Added - 2018-08-30
'Scale' => 'Escala',
'Score' => 'Res.',
'Secs' => 'Seg',
@ -577,6 +612,7 @@ $SLANG = array(
'ShowFilterWindow' => 'Abrir Filtro',
'ShowTimeline' => 'Show Timeline',
'SignalCheckColour' => 'Signal Check Colour',
'SignalCheckPoints' => 'Signal Check Points', // Added - 2018-08-30
'Size' => 'Size',
'SkinDescription' => 'Change the default skin for this computer', // Added - 2011-01-30
'Sleep' => 'Sleep',
@ -596,6 +632,10 @@ $SLANG = array(
'State' => 'Estado',
'Stats' => 'Est.',
'Status' => 'Estado',
'StatusConnected' => 'Capturing', // Added - 2018-08-30
'StatusNotRunning' => 'Not Running', // Added - 2018-08-30
'StatusRunning' => 'Not Capturing', // Added - 2018-08-30
'StatusUnknown' => 'Unknown', // Added - 2018-08-30
'Step' => 'Step',
'StepBack' => 'Step Back',
'StepForward' => 'Step Forward',
@ -606,6 +646,8 @@ $SLANG = array(
'Stills' => 'Fotos',
'Stop' => 'Desactivar',
'Stopped' => 'Apagado',
'StorageArea' => 'Storage Area', // Added - 2018-08-30
'StorageScheme' => 'Scheme', // Added - 2018-08-30
'Stream' => 'Stream',
'StreamReplayBuffer' => 'Stream Replay Image Buffer',
'Submit' => 'Submit',
@ -625,6 +667,7 @@ $SLANG = array(
'TimelineTip4' => 'Use the controls below to zoom out or navigate back and forward through the time range.', // Added 2013.08.15.
'Timestamp' => 'Etiqueta Hora',
'TimestampLabelFormat' => 'Formato Etiqueta Hora',
'TimestampLabelSize' => 'Font Size', // Added - 2018-08-30
'TimestampLabelX' => 'Eje X Etiqueta Hora',
'TimestampLabelY' => 'Eje Y Etiqueta Hora',
'Today' => 'Today',
@ -671,6 +714,7 @@ $SLANG = array(
'VideoGenParms' => 'Parametros Generacion Video',
'VideoGenSucceeded' => 'Video Generation Succeeded!',
'VideoSize' => 'Tamaño Video',
'VideoWriter' => 'Video Writer', // Added - 2018-08-30
'View' => 'Ver',
'ViewAll' => 'Ver Todo',
'ViewEvent' => 'View Event',
@ -680,6 +724,7 @@ $SLANG = array(
'Watch' => 'Monitor',
'Web' => 'Web',
'WebColour' => 'Web Colour',
'WebSiteUrl' => 'Website URL', // Added - 2018-08-30
'Week' => 'Semana',
'White' => 'White',
'WhiteBalance' => 'White Balance',

View File

@ -78,6 +78,8 @@ $SLANG = array(
'Actual' => 'Actual',
'AddNewControl' => 'Añadir nuevo control',
'AddNewMonitor' => 'Añadir nuevo monitor',
'AddNewServer' => 'Add New Server', // Added - 2018-08-30
'AddNewStorage' => 'Add New Storage', // Added - 2018-08-30
'AddNewUser' => 'Añadir nuevo usuario',
'AddNewZone' => 'Añadir nueva zona',
'Alarm' => 'Alarma',
@ -105,22 +107,32 @@ $SLANG = array(
'AttrArchiveStatus' => 'Estado de archivo',
'AttrAvgScore' => 'Promed. señal',
'AttrCause' => 'Causa',
'AttrDate' => 'Fecha',
'AttrDateTime' => 'Fecha/Hora',
'AttrDiskBlocks' => 'Bloques del disco',
'AttrDiskPercent' => 'Porcentaje del disco',
'AttrDiskSpace' => 'Disk Space', // Added - 2018-08-30
'AttrDuration' => 'Duración',
'AttrEndDate' => 'End Date', // Added - 2018-08-30
'AttrEndDateTime' => 'End Date/Time', // Added - 2018-08-30
'AttrEndTime' => 'End Time', // Added - 2018-08-30
'AttrEndWeekday' => 'End Weekday', // Added - 2018-08-30
'AttrFilterServer' => 'Server Filter is Running On', // Added - 2018-08-30
'AttrFrames' => 'Marcos',
'AttrId' => 'Id',
'AttrMaxScore' => 'Señal máxima',
'AttrMonitorId' => 'Id monitor',
'AttrMonitorName' => 'Nombre del monitor',
'AttrMonitorServer' => 'Server Monitor is Running On', // Added - 2018-08-30
'AttrName' => 'Nombre',
'AttrNotes' => 'Notas',
'AttrStartDate' => 'Start Date', // Added - 2018-08-30
'AttrStartDateTime' => 'Start Date/Time', // Added - 2018-08-30
'AttrStartTime' => 'Start Time', // Added - 2018-08-30
'AttrStartWeekday' => 'Start Weekday', // Added - 2018-08-30
'AttrStateId' => 'Run State', // Added - 2018-08-30
'AttrStorageArea' => 'Storage Area', // Added - 2018-08-30
'AttrStorageServer' => 'Server Hosting Storage', // Added - 2018-08-30
'AttrSystemLoad' => 'Carga del sistema',
'AttrTime' => 'Hora',
'AttrTotalScore' => 'Señal total',
'AttrWeekday' => 'Día de la semana',
'Auto' => 'Auto',
'AutoStopTimeout' => 'Autodetener tiempo de espera',
'Available' => 'Disponible',
@ -153,9 +165,11 @@ $SLANG = array(
'BadRefBlendPerc' => 'El porcentaje de la referencia de mezcla debe ser un entero positivo',
'BadSectionLength' => 'La duración de la sección debe ser un entero de 30 o más',
'BadSignalCheckColour' => 'El color de verificación de señal debe ser una cadena de color RGB válida',
'BadSourceType' => 'Source Type \"Web Site\" requires the Function to be set to \"Monitor\"', // Added - 2018-08-30
'BadStreamReplayBuffer' => 'La secuencia de búfer de reproducción debe ser un entero de cero o más',
'BadWarmupCount' => 'Los marcos de calentamiento deben ser un entero de cero o más',
'BadWebColour' => 'El color web debe ser una cadena de color web válida',
'BadWebSitePath' => 'Please enter a complete website url, including the http:// or https:// prefix.', // Added - 2018-08-30
'BadWidth' => 'El ancho debe tener un valor válido',
'Bandwidth' => 'Ancho de banda',
'BandwidthHead' => 'Bandwidth', // This is the end of the bandwidth status on the top of the console, different in many language due to phrasing
@ -219,10 +233,12 @@ $SLANG = array(
'ChooseLogSelection' => 'Elegir selección de registro',
'ChoosePreset' => 'Elegir preprogramación',
'Clear' => 'Limpiar',
'CloneMonitor' => 'Clone', // Added - 2018-08-30
'Close' => 'Cerrar',
'Colour' => 'Color',
'Command' => 'Comando',
'Component' => 'Componente',
'ConcurrentFilter' => 'Run filter concurrently', // Added - 2018-08-30
'Config' => 'Config',
'ConfiguredFor' => 'Configurado para',
'ConfirmDeleteEvents' => '¿Seguro que desea borrar los eventos seleccionados?',
@ -280,9 +296,11 @@ $SLANG = array(
'DonateRemindWeek' => 'Aún no, recordarme de nuevo en 1 semana',
'DonateYes' => 'Sí, me gustaría hacer una donación ahora',
'Download' => 'Descargar',
'DownloadVideo' => 'Download Video', // Added - 2018-08-30
'DuplicateMonitorName' => 'Duplicar nombre de monitor',
'Duration' => 'Duración',
'Edit' => 'Editar',
'EditLayout' => 'Edit Layout', // Added - 2018-08-30
'Email' => 'Email',
'EnableAlarms' => 'Habilitar alarmas',
'Enabled' => 'Habilitado',
@ -299,6 +317,7 @@ $SLANG = array(
'Events' => 'Eventos',
'Exclude' => 'Excluir',
'Execute' => 'Ejecutar',
'Exif' => 'Embed EXIF data into image', // Added - 2018-08-30
'Export' => 'Exportar',
'ExportDetails' => 'Exportar detalles de evento',
'ExportFailed' => 'Fallo al exportar',
@ -328,8 +347,10 @@ $SLANG = array(
'FilterExecuteEvents' => 'Ejecutar comando para todas las coincidencias',
'FilterLog' => 'Filter log', // Added - 2015-04-18
'FilterMessageEvents' => 'Detalles de mensaje de todas las coincidencias',
'FilterMoveEvents' => 'Move all matches', // Added - 2018-08-30
'FilterPx' => 'Filtrar Px',
'FilterUnset' => 'Debe especificar un ancho y un alto para el filtro',
'FilterUpdateDiskSpace'=> 'Update used disk space', // Added - 2018-08-30
'FilterUploadEvents' => 'Subir todas las coincidencias',
'FilterVideoEvents' => 'Create video for all matches', // Added - 2011-08-23
'Filters' => 'Filtros',
@ -354,6 +375,7 @@ $SLANG = array(
'Function' => 'Función',
'Gain' => 'Ganancia',
'General' => 'General',
'GenerateDownload' => 'Generate Download', // Added - 2018-08-30
'GenerateVideo' => 'Generate Video', // Added - 2011-08-23
'GeneratingVideo' => 'Generating Video', // Added - 2011-08-23
'GoToZoneMinder' => 'Ir a ZoneMinder.com',
@ -374,6 +396,7 @@ $SLANG = array(
'High' => 'Alto',
'HighBW' => 'Alto&nbsp;B/B',
'Home' => 'Inicio',
'Hostname' => 'Hostname', // Added - 2018-08-30
'Hour' => 'Hora',
'Hue' => 'Matiz',
'Id' => 'Id',
@ -398,6 +421,7 @@ $SLANG = array(
'Line' => 'Línea',
'LinkedMonitors' => 'Monitores enlazados',
'List' => 'Lista',
'ListMatches' => 'List Matches', // Added - 2018-08-30
'Load' => 'Carga',
'Local' => 'Local',
'Log' => 'Registro',
@ -484,6 +508,7 @@ $SLANG = array(
'MonitorProbeIntro' => 'La lista de debajo muestra las cámaras analógicas y en red detectadas y si ya están siendo usadas o están disponibles para seleccionar.<br/><br/>Seleccione la entrada deseada de la lista de debajo.<br/><br/>Por favor tenga en cuenta que podrían no detectarse todas las cámaras y que elegir una cámara aquí podría sobrescribir cualquier valor que ya hubiera configurado para el monitor actual.<br/><br/>',
'Monitors' => 'Monitores',
'Montage' => 'Montaje',
'MontageReview' => 'Montage Review', // Added - 2018-08-30
'Month' => 'Mes',
'More' => 'Más',
'MotionFrameSkip' => 'Motion Frame Skip',
@ -510,6 +535,7 @@ $SLANG = array(
'Next' => 'Siguiente',
'No' => 'No',
'NoDetectedCameras' => 'No se detectaron cámaras',
'NoDetectedProfiles' => 'No Detected Profiles', // Added - 2018-08-30
'NoFramesRecorded' => 'No hay marcos grabados para este evento',
'NoGroup' => 'Sin grupo',
'NoSavedFilters' => 'No hay filtros guardados',
@ -528,6 +554,8 @@ $SLANG = array(
'OpGt' => 'mayor que',
'OpGtEq' => 'mayor que o igual a',
'OpIn' => 'en conjunto',
'OpIs' => 'is', // Added - 2018-08-30
'OpIsNot' => 'is not', // Added - 2018-08-30
'OpLt' => 'menor que',
'OpLtEq' => 'menor que o igual a',
'OpMatches' => 'coincidencias',
@ -537,6 +565,7 @@ $SLANG = array(
'Open' => 'Abrir',
'OptionHelp' => 'Ayuda de la opción',
'OptionRestartWarning' => 'Estos cambios podrían no surtir un efecto completo mientras el sistema esté ejecutándose. Cuando haya terminado haciendo cambios por favor asegúrese de reiniciar ZoneMinder.',
'OptionalEncoderParam' => 'Optional Encoder Parameters', // Added - 2018-08-30
'Options' => 'Opciones',
'OrEnterNewName' => 'o introduzca un nuevo nombre',
'Order' => 'Orden',
@ -574,9 +603,13 @@ $SLANG = array(
'ProfileProbeIntro' => 'The list below shows the existing stream profiles of the selected camera .<br/><br/>Select the desired entry from the list below.<br/><br/>Please note that ZoneMinder cannot configure additional profiles and that choosing a camera here may overwrite any values you already have configured for the current monitor.<br/><br/>', // Added - 2015-04-18
'Progress' => 'Progress', // Added - 2015-04-18
'Protocol' => 'Protocolo',
'RTSPDescribe' => 'Use RTSP Response Media URL', // Added - 2018-08-30
'RTSPTransport' => 'RTSP Transport Protocol', // Added - 2018-08-30
'Rate' => 'Valorar',
'Real' => 'Real',
'RecaptchaWarning' => 'Your reCaptcha secret key is invalid. Please correct it, or reCaptcha will not work', // Added - 2018-08-30
'Record' => 'Grabar',
'RecordAudio' => 'Whether to store the audio stream when saving an event.', // Added - 2018-08-30
'RefImageBlendPct' => 'Referencia de mezcla de imagen %ge',
'Refresh' => 'Refrescar',
'Remote' => 'Remoto',
@ -592,6 +625,7 @@ $SLANG = array(
'ReplayAll' => 'Todos los eventos',
'ReplayGapless' => 'Eventos sin espacios',
'ReplaySingle' => 'Evento individual',
'ReportEventAudit' => 'Audit Events Report', // Added - 2018-08-30
'Reset' => 'Restablecer',
'ResetEventCounts' => 'Restablecer número de eventos',
'Restart' => 'Reiniciar',
@ -610,6 +644,7 @@ $SLANG = array(
'Save' => 'Guardar',
'SaveAs' => 'Guardar cómo',
'SaveFilter' => 'Guardar filtro',
'SaveJPEGs' => 'Save JPEGs', // Added - 2018-08-30
'Scale' => 'Escalar',
'Score' => 'Cuenta',
'Secs' => 'Segs',
@ -626,6 +661,7 @@ $SLANG = array(
'ShowFilterWindow' => 'Mostrar ventana de filtros',
'ShowTimeline' => 'Mostrar línea de tiempo',
'SignalCheckColour' => 'Color de comprobación de señal',
'SignalCheckPoints' => 'Signal Check Points', // Added - 2018-08-30
'Size' => 'Tamaño',
'SkinDescription' => 'Cambiar el tema por defecto para este ordenador',
'Sleep' => 'Dormir',
@ -645,6 +681,10 @@ $SLANG = array(
'State' => 'Estado',
'Stats' => 'Estadísticas',
'Status' => 'Estado',
'StatusConnected' => 'Capturing', // Added - 2018-08-30
'StatusNotRunning' => 'Not Running', // Added - 2018-08-30
'StatusRunning' => 'Not Capturing', // Added - 2018-08-30
'StatusUnknown' => 'Unknown', // Added - 2018-08-30
'Step' => 'Salto',
'StepBack' => 'Salto atrás',
'StepForward' => 'Salto adelante',
@ -655,6 +695,8 @@ $SLANG = array(
'Stills' => 'Fijas',
'Stop' => 'Detener',
'Stopped' => 'Detenido',
'StorageArea' => 'Storage Area', // Added - 2018-08-30
'StorageScheme' => 'Scheme', // Added - 2018-08-30
'Stream' => 'Corriente',
'StreamReplayBuffer' => 'Secuencia de búfer de reproducción',
'Submit' => 'Enviar',
@ -674,9 +716,9 @@ $SLANG = array(
'TimelineTip4' => 'Use the controls below to zoom out or navigate back and forward through the time range.', // Added 2013.08.15.
'Timestamp' => 'Marca de tiempo',
'TimestampLabelFormat' => 'Formato de hora multinacional',
'TimestampLabelSize' => 'Tamaño de fuente',
'TimestampLabelX' => 'Etiqueta de tiempo X',
'TimestampLabelY' => 'Etiqueta de tiempo Y',
'TimestampLabelSize' => 'Tamaño de fuente',
'Today' => 'Hoy',
'Tools' => 'Herramientas',
'Total' => 'Total',
@ -721,6 +763,7 @@ $SLANG = array(
'VideoGenParms' => 'Video Generation Parameters', // Added - 2011-08-23
'VideoGenSucceeded' => 'Video Generation Succeeded!', // Added - 2011-08-23
'VideoSize' => 'Video Size', // Added - 2011-08-23
'VideoWriter' => 'Video Writer', // Added - 2018-08-30
'View' => 'Ver',
'ViewAll' => 'Ver todos',
'ViewEvent' => 'Ver evento',
@ -730,6 +773,7 @@ $SLANG = array(
'Watch' => 'Observar',
'Web' => 'Web',
'WebColour' => 'Color web',
'WebSiteUrl' => 'Website URL', // Added - 2018-08-30
'Week' => 'Semana',
'White' => 'Blanco',
'WhiteBalance' => 'Balance de blancos',

View File

@ -85,6 +85,8 @@ $SLANG = array(
'Actual' => 'Aktuaalne',
'AddNewControl' => 'Lisa uus Kontroll',
'AddNewMonitor' => 'Lisa uus Monitor',
'AddNewServer' => 'Add New Server', // Added - 2018-08-30
'AddNewStorage' => 'Add New Storage', // Added - 2018-08-30
'AddNewUser' => 'Lisa uus Kasutaja',
'AddNewZone' => 'Lisa uus Tsoon',
'Alarm' => 'Alarm',
@ -112,22 +114,32 @@ $SLANG = array(
'AttrArchiveStatus' => 'Arhiivi Staatus',
'AttrAvgScore' => 'Keskm. Skoor',
'AttrCause' => 'Põhjus',
'AttrDate' => 'Kp.',
'AttrDateTime' => 'Kp/Kellaaeg',
'AttrDiskBlocks' => 'Ketta Blokk',
'AttrDiskPercent' => 'Ketta Protsent',
'AttrDiskSpace' => 'Disk Space', // Added - 2018-08-30
'AttrDuration' => 'Kestvus',
'AttrEndDate' => 'End Date', // Added - 2018-08-30
'AttrEndDateTime' => 'End Date/Time', // Added - 2018-08-30
'AttrEndTime' => 'End Time', // Added - 2018-08-30
'AttrEndWeekday' => 'End Weekday', // Added - 2018-08-30
'AttrFilterServer' => 'Server Filter is Running On', // Added - 2018-08-30
'AttrFrames' => 'Kaadrid',
'AttrId' => 'Id',
'AttrMaxScore' => 'Maks. Skoor',
'AttrMonitorId' => 'Monitori Id',
'AttrMonitorName' => 'Monitori Nimi',
'AttrMonitorServer' => 'Server Monitor is Running On', // Added - 2018-08-30
'AttrName' => 'Nimi',
'AttrNotes' => 'Märkmed',
'AttrStartDate' => 'Start Date', // Added - 2018-08-30
'AttrStartDateTime' => 'Start Date/Time', // Added - 2018-08-30
'AttrStartTime' => 'Start Time', // Added - 2018-08-30
'AttrStartWeekday' => 'Start Weekday', // Added - 2018-08-30
'AttrStateId' => 'Run State', // Added - 2018-08-30
'AttrStorageArea' => 'Storage Area', // Added - 2018-08-30
'AttrStorageServer' => 'Server Hosting Storage', // Added - 2018-08-30
'AttrSystemLoad' => 'Süsteemi Koormus',
'AttrTime' => 'Kellaaeg',
'AttrTotalScore' => 'Skoor Kokku',
'AttrWeekday' => 'Tööpäevad',
'Auto' => 'Auto',
'AutoStopTimeout' => 'Auto Stop Ajalimiit',
'Available' => 'Saadaval',
@ -160,9 +172,11 @@ $SLANG = array(
'BadRefBlendPerc' => 'Reference blend percentage must be a positive integer',
'BadSectionLength' => 'Section length must be an integer of 30 or more',
'BadSignalCheckColour' => 'Signal check colour must be a valid RGB colour string',
'BadSourceType' => 'Source Type \"Web Site\" requires the Function to be set to \"Monitor\"', // Added - 2018-08-30
'BadStreamReplayBuffer' => 'Stream replay buffer must be an integer of zero or more',
'BadWarmupCount' => 'Warmup frames must be an integer of zero or more',
'BadWebColour' => 'Web colour must be a valid web colour string',
'BadWebSitePath' => 'Please enter a complete website url, including the http:// or https:// prefix.', // Added - 2018-08-30
'BadWidth' => 'Width must be set to a valid value',
'Bandwidth' => 'Ribalaius',
'BandwidthHead' => 'Ribalaius', // This is the end of the bandwidth status on the top of the console, different in many language due to phrasing
@ -226,10 +240,12 @@ $SLANG = array(
'ChooseLogSelection' => 'Choose a log selection', // Added - 2011-06-17
'ChoosePreset' => 'Choose Preset',
'Clear' => 'Clear', // Added - 2011-06-16
'CloneMonitor' => 'Clone', // Added - 2018-08-30
'Close' => 'Sule',
'Colour' => 'Värv',
'Command' => 'Käsk',
'Component' => 'Komponent', // Added - 2011-06-16
'ConcurrentFilter' => 'Run filter concurrently', // Added - 2018-08-30
'Config' => 'Seadistus',
'ConfiguredFor' => 'Seadistatud',
'ConfirmDeleteEvents' => 'Oled sa kindel kustamaks valitud sündmused?',
@ -287,9 +303,11 @@ $SLANG = array(
'DonateRemindWeek' => 'EI veel, tuleta meelde nädala pärast',
'DonateYes' => 'Jah, Ma soovin annetada',
'Download' => 'Lae alla',
'DownloadVideo' => 'Download Video', // Added - 2018-08-30
'DuplicateMonitorName' => 'Dubleeri Monitori Nimi',
'Duration' => 'Kestvus',
'Edit' => 'Muuda',
'EditLayout' => 'Edit Layout', // Added - 2018-08-30
'Email' => 'Email',
'EnableAlarms' => 'Luba Alarmid',
'Enabled' => 'Lubatud',
@ -306,6 +324,7 @@ $SLANG = array(
'Events' => 'Sündmuseid',
'Exclude' => 'Jäta välja',
'Execute' => 'Käivita',
'Exif' => 'Embed EXIF data into image', // Added - 2018-08-30
'Export' => 'Eksport',
'ExportDetails' => 'Ekspordi Sündmuste Detailid',
'ExportFailed' => 'Eksportimine Ebaõnnestus',
@ -335,8 +354,10 @@ $SLANG = array(
'FilterExecuteEvents' => 'Execute command on all matches',
'FilterLog' => 'Filter log', // Added - 2015-04-18
'FilterMessageEvents' => 'Message details of all matches',
'FilterMoveEvents' => 'Move all matches', // Added - 2018-08-30
'FilterPx' => 'Filter Px',
'FilterUnset' => 'You must specify a filter width and height',
'FilterUpdateDiskSpace'=> 'Update used disk space', // Added - 2018-08-30
'FilterUploadEvents' => 'Upload all matches',
'FilterVideoEvents' => 'Create video for all matches',
'Filters' => 'Filtrid',
@ -361,6 +382,7 @@ $SLANG = array(
'Function' => 'Funktsioon',
'Gain' => 'Gain',
'General' => 'Peamine',
'GenerateDownload' => 'Generate Download', // Added - 2018-08-30
'GenerateVideo' => 'Genereeri Video',
'GeneratingVideo' => 'Genereerin Videot',
'GoToZoneMinder' => 'Mine ZoneMinder.com',
@ -381,6 +403,7 @@ $SLANG = array(
'High' => 'Suurim',
'HighBW' => 'High&nbsp;B/W',
'Home' => 'Koju',
'Hostname' => 'Hostname', // Added - 2018-08-30
'Hour' => 'Tunnis',
'Hue' => 'Hue',
'Id' => 'Id',
@ -405,6 +428,7 @@ $SLANG = array(
'Line' => 'Line', // Added - 2011-06-16
'LinkedMonitors' => 'Lingitud monitorid',
'List' => 'List',
'ListMatches' => 'List Matches', // Added - 2018-08-30
'Load' => 'Koormus',
'Local' => 'Local',
'Log' => 'Logi', // Added - 2011-06-16
@ -491,6 +515,7 @@ $SLANG = array(
'MonitorProbeIntro' => 'The list below shows detected analog and network cameras and whether they are already being used or available for selection.<br/><br/>Select the desired entry from the list below.<br/><br/>Please note that not all cameras may be detected and that choosing a camera here may overwrite any values you already have configured for the current monitor.<br/><br/>',
'Monitors' => 'Monitors',
'Montage' => 'Montage',
'MontageReview' => 'Montage Review', // Added - 2018-08-30
'Month' => 'Kuus',
'More' => 'Veel', // Added - 2011-06-16
'MotionFrameSkip' => 'Motion Frame Skip',
@ -517,6 +542,7 @@ $SLANG = array(
'Next' => 'Järgmine',
'No' => 'Ei',
'NoDetectedCameras' => 'Ei leidnud kaameraid',
'NoDetectedProfiles' => 'No Detected Profiles', // Added - 2018-08-30
'NoFramesRecorded' => 'Ei ole kaadreid salvetatud selles sündmuses',
'NoGroup' => 'Ei krupp',
'NoSavedFilters' => 'EiSalvestatudFiltreid',
@ -535,6 +561,8 @@ $SLANG = array(
'OpGt' => 'Suurem kui',
'OpGtEq' => 'suurem kui või võrdne',
'OpIn' => 'in set',
'OpIs' => 'is', // Added - 2018-08-30
'OpIsNot' => 'is not', // Added - 2018-08-30
'OpLt' => 'vähem kui',
'OpLtEq' => 'vähem kui või võrdne',
'OpMatches' => 'klapib',
@ -544,6 +572,7 @@ $SLANG = array(
'Open' => 'Ava',
'OptionHelp' => 'Valik Aita',
'OptionRestartWarning' => 'These changes may not come into effect fully\nwhile the system is running. When you have\nfinished making your changes please ensure that\nyou restart ZoneMinder.',
'OptionalEncoderParam' => 'Optional Encoder Parameters', // Added - 2018-08-30
'Options' => 'Seaded',
'OrEnterNewName' => 'või sisesta uus nimi',
'Order' => 'Järjekord',
@ -581,9 +610,13 @@ $SLANG = array(
'ProfileProbeIntro' => 'The list below shows the existing stream profiles of the selected camera .<br/><br/>Select the desired entry from the list below.<br/><br/>Please note that ZoneMinder cannot configure additional profiles and that choosing a camera here may overwrite any values you already have configured for the current monitor.<br/><br/>', // Added - 2015-04-18
'Progress' => 'Progress', // Added - 2015-04-18
'Protocol' => 'Protocol',
'RTSPDescribe' => 'Use RTSP Response Media URL', // Added - 2018-08-30
'RTSPTransport' => 'RTSP Transport Protocol', // Added - 2018-08-30
'Rate' => 'Rate',
'Real' => 'Reaaalne',
'RecaptchaWarning' => 'Your reCaptcha secret key is invalid. Please correct it, or reCaptcha will not work', // Added - 2018-08-30
'Record' => 'Salvesta',
'RecordAudio' => 'Whether to store the audio stream when saving an event.', // Added - 2018-08-30
'RefImageBlendPct' => 'Reference Image Blend %ge',
'Refresh' => 'Värskenda',
'Remote' => 'Remote',
@ -599,6 +632,7 @@ $SLANG = array(
'ReplayAll' => 'Kõik sündmused',
'ReplayGapless' => 'Lünkadeta sündmused',
'ReplaySingle' => 'Üksik sündmus',
'ReportEventAudit' => 'Audit Events Report', // Added - 2018-08-30
'Reset' => 'Reset',
'ResetEventCounts' => 'Reset Event Counts',
'Restart' => 'Taaskäivita',
@ -617,6 +651,7 @@ $SLANG = array(
'Save' => 'Salvesta',
'SaveAs' => 'Salvesta kui',
'SaveFilter' => 'Salvesta Filter',
'SaveJPEGs' => 'Save JPEGs', // Added - 2018-08-30
'Scale' => 'Skaala',
'Score' => 'Skoor',
'Secs' => 'Secs',
@ -633,6 +668,7 @@ $SLANG = array(
'ShowFilterWindow' => 'Näita Filtri Akent',
'ShowTimeline' => 'Näita Timeline',
'SignalCheckColour' => 'Signaali Kontroll Värv',
'SignalCheckPoints' => 'Signal Check Points', // Added - 2018-08-30
'Size' => 'Suurus',
'SkinDescription' => 'Vaheta veebilehe välimus selles arvutis', // Added - 2011-03-02
'Sleep' => 'Maga',
@ -652,6 +688,10 @@ $SLANG = array(
'State' => 'Olek',
'Stats' => 'Statistika',
'Status' => 'Staatus',
'StatusConnected' => 'Capturing', // Added - 2018-08-30
'StatusNotRunning' => 'Not Running', // Added - 2018-08-30
'StatusRunning' => 'Not Capturing', // Added - 2018-08-30
'StatusUnknown' => 'Unknown', // Added - 2018-08-30
'Step' => 'Samm',
'StepBack' => 'Samm tagasi',
'StepForward' => 'Samm edasi',
@ -662,6 +702,8 @@ $SLANG = array(
'Stills' => 'Stills',
'Stop' => 'Stop',
'Stopped' => 'Stopitud',
'StorageArea' => 'Storage Area', // Added - 2018-08-30
'StorageScheme' => 'Scheme', // Added - 2018-08-30
'Stream' => 'Striim',
'StreamReplayBuffer' => 'Striimi Replay Pildi Puhver',
'Submit' => 'Submit',
@ -681,6 +723,7 @@ $SLANG = array(
'TimelineTip4' => 'Use the controls below to zoom out or navigate back and forward through the time range.', // Added 2013.08.15.
'Timestamp' => 'Timestamp',
'TimestampLabelFormat' => 'Timestamp Label Format',
'TimestampLabelSize' => 'Font Size', // Added - 2018-08-30
'TimestampLabelX' => 'Timestamp Label X',
'TimestampLabelY' => 'Timestamp Label Y',
'Today' => 'Täna',
@ -727,6 +770,7 @@ $SLANG = array(
'VideoGenParms' => 'Video Genereerimise Parameetrid',
'VideoGenSucceeded' => 'Video Genereerimine Õnnestus!!!',
'VideoSize' => 'Video Suurus',
'VideoWriter' => 'Video Writer', // Added - 2018-08-30
'View' => 'Vaata',
'ViewAll' => 'View All',
'ViewEvent' => 'Vaata Sündmust',
@ -736,6 +780,7 @@ $SLANG = array(
'Watch' => 'Vaata',
'Web' => 'Veeb',
'WebColour' => 'Veebi värv',
'WebSiteUrl' => 'Website URL', // Added - 2018-08-30
'Week' => 'Nädalas',
'White' => 'White',
'WhiteBalance' => 'White Balance',

View File

@ -84,6 +84,8 @@ $SLANG = array(
'Actual' => 'Réel',
'AddNewControl' => 'Ajouter contrôle',
'AddNewMonitor' => 'Ajouter caméra',
'AddNewServer' => 'Add New Server', // Added - 2018-08-30
'AddNewStorage' => 'Add New Storage', // Added - 2018-08-30
'AddNewUser' => 'Ajouter utilisateur',
'AddNewZone' => 'Ajouter zone',
'Alarm' => 'Alarme',
@ -111,22 +113,32 @@ $SLANG = array(
'AttrArchiveStatus' => 'Etat Archive',
'AttrAvgScore' => 'Score moy.',
'AttrCause' => 'Cause',
'AttrDate' => 'Date',
'AttrDateTime' => 'Date/Heure',
'AttrDiskBlocks' => 'Blocs disque',
'AttrDiskPercent' => '% disque',
'AttrDiskSpace' => 'Disk Space', // Added - 2018-08-30
'AttrDuration' => 'Durée',
'AttrEndDate' => 'End Date', // Added - 2018-08-30
'AttrEndDateTime' => 'End Date/Time', // Added - 2018-08-30
'AttrEndTime' => 'End Time', // Added - 2018-08-30
'AttrEndWeekday' => 'End Weekday', // Added - 2018-08-30
'AttrFilterServer' => 'Server Filter is Running On', // Added - 2018-08-30
'AttrFrames' => 'Images',
'AttrId' => 'Id',
'AttrMaxScore' => 'Score max.',
'AttrMonitorId' => 'N°',
'AttrMonitorName' => 'Nom caméra',
'AttrMonitorServer' => 'Server Monitor is Running On', // Added - 2018-08-30
'AttrName' => 'Nom',
'AttrNotes' => 'Notes',
'AttrStartDate' => 'Start Date', // Added - 2018-08-30
'AttrStartDateTime' => 'Start Date/Time', // Added - 2018-08-30
'AttrStartTime' => 'Start Time', // Added - 2018-08-30
'AttrStartWeekday' => 'Start Weekday', // Added - 2018-08-30
'AttrStateId' => 'Run State', // Added - 2018-08-30
'AttrStorageArea' => 'Storage Area', // Added - 2018-08-30
'AttrStorageServer' => 'Server Hosting Storage', // Added - 2018-08-30
'AttrSystemLoad' => 'Charge système',
'AttrTime' => 'Heure',
'AttrTotalScore' => 'Score total',
'AttrWeekday' => 'Semaine',
'Auto' => 'Auto',
'AutoStopTimeout' => 'Temporisation arrêt',
'Available' => 'Disponibles', // Added - 2009-03-31
@ -159,9 +171,11 @@ $SLANG = array(
'BadRefBlendPerc' => 'Le pourcentage de fusion de l\'image de référence doit être un entier supérieur à 0 et inférieur à 100',
'BadSectionLength' => 'La longueur de la section doit être un entier supérieur ou égal à 30',
'BadSignalCheckColour' => 'La chaîne de caractères pour la couleur d\'état du signal est invalide',
'BadSourceType' => 'Source Type \"Web Site\" requires the Function to be set to \"Monitor\"', // Added - 2018-08-30
'BadStreamReplayBuffer'=> 'Le tampon d\'images pour la relecture doit être un entier supérieur ou égal à 0',
'BadWarmupCount' => 'Le nombre d\'images tests doit être un entier supérieur ou égal à 0',
'BadWebColour' => 'La chaîne de caractères pour la couleur web est invalide',
'BadWebSitePath' => 'Please enter a complete website url, including the http:// or https:// prefix.', // Added - 2018-08-30
'BadWidth' => 'La valeur de la largeur est invalide',
'Bandwidth' => 'Débit',
'BandwidthHead' => 'Débit', // This is the end of the bandwidth status on the top of the console, different in many language due to phrasing
@ -225,10 +239,12 @@ $SLANG = array(
'ChooseLogSelection' => 'Choisir une sélection de journaux', // Added - 2011-06-17
'ChoosePreset' => 'Choisir préréglage',
'Clear' => 'Effacer', // Added - 2011-06-16
'CloneMonitor' => 'Clone', // Added - 2018-08-30
'Close' => 'Fermer',
'Colour' => 'Couleur',
'Command' => 'Commande',
'Component' => 'Composant', // Added - 2011-06-16
'ConcurrentFilter' => 'Run filter concurrently', // Added - 2018-08-30
'Config' => 'Config',
'ConfiguredFor' => 'Configuré pour',
'ConfirmDeleteEvents' => 'Etes-vous sûr de vouloir effacer le(s) événement(s) sélectionné(s)?',
@ -286,9 +302,11 @@ $SLANG = array(
'DonateRemindWeek' => 'Pas encore, me rappeler dans 1 semaine',
'DonateYes' => 'Oui, je souhaiterais faire un don maintenant',
'Download' => 'Télécharger',
'DownloadVideo' => 'Download Video', // Added - 2018-08-30
'DuplicateMonitorName' => 'Dupliquer le nom de la caméra', // Added - 2009-03-31
'Duration' => 'Durée',
'Edit' => 'Editer',
'EditLayout' => 'Edit Layout', // Added - 2018-08-30
'Email' => 'Email',
'EnableAlarms' => 'Activer les alarmes',
'Enabled' => 'Activé',
@ -305,6 +323,7 @@ $SLANG = array(
'Events' => 'Evénements',
'Exclude' => 'Exclure',
'Execute' => 'Exécuter',
'Exif' => 'Embed EXIF data into image', // Added - 2018-08-30
'Export' => 'Exporter',
'ExportDetails' => 'Exporter détails événements',
'ExportFailed' => 'Exportation échouée',
@ -334,8 +353,10 @@ $SLANG = array(
'FilterExecuteEvents' => 'Exécuter une commande',
'FilterLog' => 'Filtre', // Added - 2015-04-18
'FilterMessageEvents' => 'Envoyer les détails par message',
'FilterMoveEvents' => 'Move all matches', // Added - 2018-08-30
'FilterPx' => 'Filtre Px',
'FilterUnset' => 'Vous devez spécifier une largeur et une hauteur de filtre',
'FilterUpdateDiskSpace'=> 'Update used disk space', // Added - 2018-08-30
'FilterUploadEvents' => 'Transférer',
'FilterVideoEvents' => 'Créer vidéo',
'Filters' => 'Filtres',
@ -360,6 +381,7 @@ $SLANG = array(
'Function' => 'Mode',
'Gain' => 'Gain',
'General' => 'Général',
'GenerateDownload' => 'Generate Download', // Added - 2018-08-30
'GenerateVideo' => 'Générer vidéo',
'GeneratingVideo' => 'Génération vidéo',
'GoToZoneMinder' => 'Aller sur ZoneMinder.com',
@ -380,6 +402,7 @@ $SLANG = array(
'High' => 'Haut',
'HighBW' => 'Haut débit',
'Home' => 'Maison',
'Hostname' => 'Hostname', // Added - 2018-08-30
'Hour' => 'Heure',
'Hue' => 'Teinte',
'Id' => 'N°',
@ -404,6 +427,7 @@ $SLANG = array(
'Line' => 'Ligne', // Added - 2011-06-16
'LinkedMonitors' => 'Caméra(s) liée(s)',
'List' => 'Liste',
'ListMatches' => 'List Matches', // Added - 2018-08-30
'Load' => 'Charge',
'Local' => 'Local',
'Log' => 'Journal', // Added - 2011-06-16
@ -490,6 +514,7 @@ $SLANG = array(
'MonitorProbeIntro' => 'La liste ci-dessous montre les caméras détectées localement ou sur le réseau, qu\'elles soient déjà configurées ou non.<br/><br/>Sélectionnez la caméra désirée dans la liste.<br/><br/>Veuillez noter que toutes les caméras ne sont pas forcément détectées et que la sauvegarde entraînera l\'écrasement des paramètres déjà configurés pour la caméra en cours.<br/><br/>', // Added - 2009-03-31
'Monitors' => 'Caméras',
'Montage' => 'Montage',
'MontageReview' => 'Montage Review', // Added - 2018-08-30
'Month' => 'Mois',
'More' => 'Plus', // Added - 2011-06-16
'MotionFrameSkip' => 'Saut image en alarme',
@ -516,6 +541,7 @@ $SLANG = array(
'Next' => 'Suivant',
'No' => 'Non',
'NoDetectedCameras' => 'Pas de caméras détectées', // Added - 2009-03-31
'NoDetectedProfiles' => 'No Detected Profiles', // Added - 2018-08-30
'NoFramesRecorded' => 'Pas d\'images enregistrées pour cet événement',
'NoGroup' => 'Pas de groupe',
'NoSavedFilters' => 'Pas de filtres sauvegardés',
@ -534,6 +560,8 @@ $SLANG = array(
'OpGt' => 'sup. à',
'OpGtEq' => 'plus grand ou égal à',
'OpIn' => 'en lot',
'OpIs' => 'is', // Added - 2018-08-30
'OpIsNot' => 'is not', // Added - 2018-08-30
'OpLt' => 'inf. à',
'OpLtEq' => 'inf. ou égal à',
'OpMatches' => 'correspond',
@ -543,6 +571,7 @@ $SLANG = array(
'Open' => 'Ouvrir',
'OptionHelp' => 'Aide',
'OptionRestartWarning' => 'Ces changements peuvent nécessiter un redémarrage de ZoneMinder pour être pleinement opérationnels.',
'OptionalEncoderParam' => 'Optional Encoder Parameters', // Added - 2018-08-30
'Options' => 'Options',
'OrEnterNewName' => 'ou entrez nouv. nom',
'Order' => 'Ordre',
@ -580,9 +609,13 @@ $SLANG = array(
'ProfileProbeIntro' => 'La liste ci-dessous montre les profils de flux existants pour la caméra sélectionnée.<br/><br/>Sélectionnez le profil désiré dans la liste ci-dessous.<br/><br/>Veuillez noter que ZoneMinder ne peut pas configurer de profils additionels et que la sauvegarde entraînera l\'écrasement des paramètres déjà configurés pour la caméra en cours.<br/><br/>', // Added - 2015-04-18
'Progress' => 'Progression', // Added - 2015-04-18
'Protocol' => 'Protocole',
'RTSPDescribe' => 'Use RTSP Response Media URL', // Added - 2018-08-30
'RTSPTransport' => 'RTSP Transport Protocol', // Added - 2018-08-30
'Rate' => 'Vitesse',
'Real' => 'Réel',
'RecaptchaWarning' => 'Your reCaptcha secret key is invalid. Please correct it, or reCaptcha will not work', // Added - 2018-08-30
'Record' => 'Enregistrer',
'RecordAudio' => 'Whether to store the audio stream when saving an event.', // Added - 2018-08-30
'RefImageBlendPct' => '% fusion image référence',
'Refresh' => 'Rafraîchir',
'Remote' => 'Distant',
@ -598,6 +631,7 @@ $SLANG = array(
'ReplayAll' => 'Tous les événements',
'ReplayGapless' => 'Rejouer sans blancs',
'ReplaySingle' => 'Rejouer seul',
'ReportEventAudit' => 'Audit Events Report', // Added - 2018-08-30
'Reset' => 'RàZ',
'ResetEventCounts' => 'RàZ compteur évts',
'Restart' => 'Redémarrer',
@ -616,6 +650,7 @@ $SLANG = array(
'Save' => 'Sauvegarder',
'SaveAs' => 'Sauvegarder sous',
'SaveFilter' => 'Sauvegarder filtre',
'SaveJPEGs' => 'Save JPEGs', // Added - 2018-08-30
'Scale' => 'Echelle',
'Score' => 'Score',
'Secs' => 'Secs',
@ -632,6 +667,7 @@ $SLANG = array(
'ShowFilterWindow' => 'Filtres',
'ShowTimeline' => 'Afficher chronologie',
'SignalCheckColour' => 'Couleur vérif. signal',
'SignalCheckPoints' => 'Signal Check Points', // Added - 2018-08-30
'Size' => 'Taille',
'SkinDescription' => 'Remplacer le skin par défaut', // Added - 2011-01-30
'Sleep' => 'Veille',
@ -651,6 +687,10 @@ $SLANG = array(
'State' => 'Etat',
'Stats' => 'Stats',
'Status' => 'Statut',
'StatusConnected' => 'Capturing', // Added - 2018-08-30
'StatusNotRunning' => 'Not Running', // Added - 2018-08-30
'StatusRunning' => 'Not Capturing', // Added - 2018-08-30
'StatusUnknown' => 'Unknown', // Added - 2018-08-30
'Step' => 'Pas',
'StepBack' => 'Reculer',
'StepForward' => 'Avancer',
@ -661,6 +701,8 @@ $SLANG = array(
'Stills' => 'Photos',
'Stop' => 'Arrêter',
'Stopped' => 'Arrêté',
'StorageArea' => 'Storage Area', // Added - 2018-08-30
'StorageScheme' => 'Scheme', // Added - 2018-08-30
'Stream' => 'Flux',
'StreamReplayBuffer' => 'Nb d\'image(s) pour relecture',
'Submit' => 'Soumettre',
@ -680,9 +722,9 @@ $SLANG = array(
'TimelineTip4' => 'Utilisez les contrôles ci-dessous pour faire un zoom arrière ou naviguer en arrière et avancer sur l\'intervalle de temps.', // Added 2013.08.15.
'Timestamp' => 'Horodatage',
'TimestampLabelFormat' => 'Format',
'TimestampLabelSize' => 'Taille de police',
'TimestampLabelX' => 'Coordonnée X',
'TimestampLabelY' => 'Coordonnée Y',
'TimestampLabelSize' => 'Taille de police',
'Today' => 'Aujourd\'hui',
'Tools' => 'Outils',
'Total' => 'Total', // Added - 2011-06-16
@ -727,6 +769,7 @@ $SLANG = array(
'VideoGenParms' => 'Paramètres génération vidéo',
'VideoGenSucceeded' => 'Vidéo générée avec succès !',
'VideoSize' => 'Taille vidéo',
'VideoWriter' => 'Video Writer', // Added - 2018-08-30
'View' => 'Voir',
'ViewAll' => 'Tout voir',
'ViewEvent' => 'Voir événement',
@ -736,6 +779,7 @@ $SLANG = array(
'Watch' => 'Regarder',
'Web' => 'Web',
'WebColour' => 'Couleur web',
'WebSiteUrl' => 'Website URL', // Added - 2018-08-30
'Week' => 'Semaine',
'White' => 'Blanc',
'WhiteBalance' => 'Balance des blancs',

View File

@ -78,6 +78,8 @@ $SLANG = array(
'Actual' => 'î÷åøé',
'AddNewControl' => 'äåñó ÷åðèøåì çãù',
'AddNewMonitor' => 'äåñó îåðéèåø çãù',
'AddNewServer' => 'Add New Server', // Added - 2018-08-30
'AddNewStorage' => 'Add New Storage', // Added - 2018-08-30
'AddNewUser' => 'äåñó îùúîù çãù',
'AddNewZone' => 'äåñó àéæåø çãù',
'Alarm' => 'àæò÷ä',
@ -105,22 +107,32 @@ $SLANG = array(
'AttrArchiveStatus' => 'Archive Status',
'AttrAvgScore' => 'ðé÷åã îîåöò',
'AttrCause' => 'ñéáä',
'AttrDate' => 'úàøéê',
'AttrDateTime' => 'úàøéê/ùòä',
'AttrDiskBlocks' => 'Disk Blocks',
'AttrDiskPercent' => 'Disk Percent',
'AttrDiskSpace' => 'Disk Space', // Added - 2018-08-30
'AttrDuration' => 'îùê æîï',
'AttrEndDate' => 'End Date', // Added - 2018-08-30
'AttrEndDateTime' => 'End Date/Time', // Added - 2018-08-30
'AttrEndTime' => 'End Time', // Added - 2018-08-30
'AttrEndWeekday' => 'End Weekday', // Added - 2018-08-30
'AttrFilterServer' => 'Server Filter is Running On', // Added - 2018-08-30
'AttrFrames' => 'ôøééîéí',
'AttrId' => 'Id',
'AttrMaxScore' => 'ðé÷åã î÷ñéîìé',
'AttrMonitorId' => 'Monitor Id',
'AttrMonitorName' => 'ùí îåðéèåø',
'AttrMonitorServer' => 'Server Monitor is Running On', // Added - 2018-08-30
'AttrName' => 'ùí',
'AttrNotes' => 'äòøåú',
'AttrStartDate' => 'Start Date', // Added - 2018-08-30
'AttrStartDateTime' => 'Start Date/Time', // Added - 2018-08-30
'AttrStartTime' => 'Start Time', // Added - 2018-08-30
'AttrStartWeekday' => 'Start Weekday', // Added - 2018-08-30
'AttrStateId' => 'Run State', // Added - 2018-08-30
'AttrStorageArea' => 'Storage Area', // Added - 2018-08-30
'AttrStorageServer' => 'Server Hosting Storage', // Added - 2018-08-30
'AttrSystemLoad' => 'System Load',
'AttrTime' => 'ùòä',
'AttrTotalScore' => 'ñê ñëåí',
'AttrWeekday' => 'éåí áùáåò',
'Auto' => 'àåèå',
'AutoStopTimeout' => 'ôñ÷ æîï òöéøä àåèå',
'Available' => 'Available', // Added - 2009-03-31
@ -153,9 +165,11 @@ $SLANG = array(
'BadRefBlendPerc' => 'Reference blend percentage must be a positive integer',
'BadSectionLength' => 'Section length must be an integer of 30 or more',
'BadSignalCheckColour' => 'Signal check colour must be a valid RGB colour string',
'BadSourceType' => 'Source Type \"Web Site\" requires the Function to be set to \"Monitor\"', // Added - 2018-08-30
'BadStreamReplayBuffer'=> 'Stream replay buffer must be an integer of zero or more',
'BadWarmupCount' => 'Warmup frames must be an integer of zero or more',
'BadWebColour' => 'Web colour must be a valid web colour string',
'BadWebSitePath' => 'Please enter a complete website url, including the http:// or https:// prefix.', // Added - 2018-08-30
'BadWidth' => 'Width must be set to a valid value',
'Bandwidth' => 'øåçá ôñ',
'BandwidthHead' => 'Bandwidth', // This is the end of the bandwidth status on the top of the console, different in many language due to phrasing
@ -219,10 +233,12 @@ $SLANG = array(
'ChooseLogSelection' => 'Choose a log selection', // Added - 2011-06-17
'ChoosePreset' => 'Choose Preset',
'Clear' => 'Clear', // Added - 2011-06-16
'CloneMonitor' => 'Clone', // Added - 2018-08-30
'Close' => 'ñâåø',
'Colour' => 'öáò',
'Command' => 'ô÷åãä',
'Component' => 'Component', // Added - 2011-06-16
'ConcurrentFilter' => 'Run filter concurrently', // Added - 2018-08-30
'Config' => 'úöåøä',
'ConfiguredFor' => 'úöåøä òáåø',
'ConfirmDeleteEvents' => 'Are you sure you wish to delete the selected events?',
@ -280,9 +296,11 @@ $SLANG = array(
'DonateRemindWeek' => 'òãééï ìà, äæëø ìé áòåã ùáåò àçã',
'DonateYes' => 'ëï, àðé îòåðééï ìúøåí òëùéå',
'Download' => 'äåøã',
'DownloadVideo' => 'Download Video', // Added - 2018-08-30
'DuplicateMonitorName' => 'Duplicate Monitor Name', // Added - 2009-03-31
'Duration' => 'îùê æîï',
'Edit' => 'òøåê',
'EditLayout' => 'Edit Layout', // Added - 2018-08-30
'Email' => 'ãåà"ì',
'EnableAlarms' => 'àôùø àæò÷åú',
'Enabled' => 'àôùø',
@ -299,6 +317,7 @@ $SLANG = array(
'Events' => 'àéøåòéí',
'Exclude' => 'ììà',
'Execute' => 'áöò',
'Exif' => 'Embed EXIF data into image', // Added - 2018-08-30
'Export' => 'éöà',
'ExportDetails' => 'éöà ôøèé àéøåò',
'ExportFailed' => 'éöåà ðëùì',
@ -328,8 +347,10 @@ $SLANG = array(
'FilterExecuteEvents' => 'Execute command on all matches',
'FilterLog' => 'Filter log', // Added - 2015-04-18
'FilterMessageEvents' => 'Message details of all matches',
'FilterMoveEvents' => 'Move all matches', // Added - 2018-08-30
'FilterPx' => 'Filter Px',
'FilterUnset' => 'òìéê ìöééï øåçá åâåáä îñðï',
'FilterUpdateDiskSpace'=> 'Update used disk space', // Added - 2018-08-30
'FilterUploadEvents' => 'òìä àú ëì äúåàîéí',
'FilterVideoEvents' => 'öåø åéãàå ìëì äúåàîéí',
'Filters' => 'îñððéí',
@ -354,6 +375,7 @@ $SLANG = array(
'Function' => 'ôåð÷öéä',
'Gain' => 'Gain',
'General' => 'ëììé',
'GenerateDownload' => 'Generate Download', // Added - 2018-08-30
'GenerateVideo' => 'öåø åéãàå',
'GeneratingVideo' => 'îééöø åéãàå',
'GoToZoneMinder' => 'á÷ø ZoneMinder.com',
@ -374,6 +396,7 @@ $SLANG = array(
'High' => 'âáåä',
'HighBW' => 'âáåä&nbsp;ø/ô',
'Home' => 'áéú',
'Hostname' => 'Hostname', // Added - 2018-08-30
'Hour' => 'ùòä',
'Hue' => 'Hue',
'Id' => 'æéäåé',
@ -398,6 +421,7 @@ $SLANG = array(
'Line' => 'Line', // Added - 2011-06-16
'LinkedMonitors' => 'îåðéèåøéí î÷åùøéí',
'List' => 'øùéîä',
'ListMatches' => 'List Matches', // Added - 2018-08-30
'Load' => 'èòï',
'Local' => 'î÷åîé',
'Log' => 'Log', // Added - 2011-06-16
@ -484,6 +508,7 @@ $SLANG = array(
'MonitorProbeIntro' => 'The list below shows detected analog and network cameras and whether they are already being used or available for selection.<br/><br/>Select the desired entry from the list below.<br/><br/>Please note that not all cameras may be detected and that choosing a camera here may overwrite any values you already have configured for the current monitor.<br/><br/>', // Added - 2009-03-31
'Monitors' => 'îåðéèåøéí',
'Montage' => 'Montage',
'MontageReview' => 'Montage Review', // Added - 2018-08-30
'Month' => 'çåãù',
'More' => 'More', // Added - 2011-06-16
'MotionFrameSkip' => 'Motion Frame Skip',
@ -510,6 +535,7 @@ $SLANG = array(
'Next' => 'äáà',
'No' => 'ìà',
'NoDetectedCameras' => 'No Detected Cameras', // Added - 2009-03-31
'NoDetectedProfiles' => 'No Detected Profiles', // Added - 2018-08-30
'NoFramesRecorded' => 'There are no frames recorded for this event',
'NoGroup' => 'ììà ÷áåöä',
'NoSavedFilters' => 'NoSavedFilters',
@ -528,6 +554,8 @@ $SLANG = array(
'OpGt' => 'âãåì î',
'OpGtEq' => 'greater than or equal to',
'OpIn' => 'in set',
'OpIs' => 'is', // Added - 2018-08-30
'OpIsNot' => 'is not', // Added - 2018-08-30
'OpLt' => 'ôçåú î',
'OpLtEq' => 'less than or equal to',
'OpMatches' => 'matches',
@ -537,6 +565,7 @@ $SLANG = array(
'Open' => 'ôúç',
'OptionHelp' => 'OptionHelp',
'OptionRestartWarning' => 'These changes may not come into effect fully\nwhile the system is running. When you have\nfinished making your changes please ensure that\nyou restart ZoneMinder.',
'OptionalEncoderParam' => 'Optional Encoder Parameters', // Added - 2018-08-30
'Options' => 'àôùøåéåú',
'OrEnterNewName' => 'or enter new name',
'Order' => 'îéåï',
@ -574,9 +603,13 @@ $SLANG = array(
'ProfileProbeIntro' => 'The list below shows the existing stream profiles of the selected camera .<br/><br/>Select the desired entry from the list below.<br/><br/>Please note that ZoneMinder cannot configure additional profiles and that choosing a camera here may overwrite any values you already have configured for the current monitor.<br/><br/>', // Added - 2015-04-18
'Progress' => 'Progress', // Added - 2015-04-18
'Protocol' => 'Protocol',
'RTSPDescribe' => 'Use RTSP Response Media URL', // Added - 2018-08-30
'RTSPTransport' => 'RTSP Transport Protocol', // Added - 2018-08-30
'Rate' => 'ãéøåâ',
'Real' => 'àîéúé',
'RecaptchaWarning' => 'Your reCaptcha secret key is invalid. Please correct it, or reCaptcha will not work', // Added - 2018-08-30
'Record' => 'ä÷ìèä',
'RecordAudio' => 'Whether to store the audio stream when saving an event.', // Added - 2018-08-30
'RefImageBlendPct' => 'Reference Image Blend %ge',
'Refresh' => 'øòðåï',
'Remote' => 'îøåç÷',
@ -592,6 +625,7 @@ $SLANG = array(
'ReplayAll' => 'All Events',
'ReplayGapless' => 'Gapless Events',
'ReplaySingle' => 'Single Event',
'ReportEventAudit' => 'Audit Events Report', // Added - 2018-08-30
'Reset' => 'àôñ',
'ResetEventCounts' => 'Reset Event Counts',
'Restart' => 'àúçì',
@ -610,6 +644,7 @@ $SLANG = array(
'Save' => 'ùîåø',
'SaveAs' => 'ùîåø áùí',
'SaveFilter' => 'ùîåø îñðï',
'SaveJPEGs' => 'Save JPEGs', // Added - 2018-08-30
'Scale' => 'ñ÷àìä',
'Score' => 'ðé÷åã',
'Secs' => 'ùðéåú',
@ -626,6 +661,7 @@ $SLANG = array(
'ShowFilterWindow' => 'Show Filter Window',
'ShowTimeline' => 'Show Timeline',
'SignalCheckColour' => 'Signal Check Colour',
'SignalCheckPoints' => 'Signal Check Points', // Added - 2018-08-30
'Size' => 'âåãì',
'SkinDescription' => 'Change the default skin for this computer', // Added - 2011-01-30
'Sleep' => 'ùéðä',
@ -645,6 +681,10 @@ $SLANG = array(
'State' => 'îöá',
'Stats' => 'îöáéí',
'Status' => 'ñèèåñ',
'StatusConnected' => 'Capturing', // Added - 2018-08-30
'StatusNotRunning' => 'Not Running', // Added - 2018-08-30
'StatusRunning' => 'Not Capturing', // Added - 2018-08-30
'StatusUnknown' => 'Unknown', // Added - 2018-08-30
'Step' => 'öòã',
'StepBack' => 'Step Back',
'StepForward' => 'Step Forward',
@ -655,6 +695,8 @@ $SLANG = array(
'Stills' => 'ñèéìñ',
'Stop' => 'òöåø',
'Stopped' => 'ðòöø',
'StorageArea' => 'Storage Area', // Added - 2018-08-30
'StorageScheme' => 'Scheme', // Added - 2018-08-30
'Stream' => 'ñèøéí',
'StreamReplayBuffer' => 'Stream Replay Image Buffer',
'Submit' => 'Submit',
@ -674,6 +716,7 @@ $SLANG = array(
'TimelineTip4' => 'Use the controls below to zoom out or navigate back and forward through the time range.', // Added 2013.08.15.
'Timestamp' => 'çåúîú æîï',
'TimestampLabelFormat' => 'Timestamp Label Format',
'TimestampLabelSize' => 'Font Size', // Added - 2018-08-30
'TimestampLabelX' => 'Timestamp Label X',
'TimestampLabelY' => 'Timestamp Label Y',
'Today' => 'äéåí',
@ -720,6 +763,7 @@ $SLANG = array(
'VideoGenParms' => 'Video Generation Parameters',
'VideoGenSucceeded' => 'Video Generation Succeeded!',
'VideoSize' => 'âåãì åéãàå',
'VideoWriter' => 'Video Writer', // Added - 2018-08-30
'View' => 'äöâ',
'ViewAll' => 'äöâ äëì',
'ViewEvent' => 'äöâ àéøåò',
@ -729,6 +773,7 @@ $SLANG = array(
'Watch' => 'öôä',
'Web' => 'àéðèøðè',
'WebColour' => 'öáò àéðèøðè',
'WebSiteUrl' => 'Website URL', // Added - 2018-08-30
'Week' => 'ùáåò',
'White' => 'ìáï',
'WhiteBalance' => 'White Balance',

View File

@ -121,6 +121,8 @@ $SLANG = array(
'Actual' => 'Valós',
'AddNewControl' => 'Új vezérlés',
'AddNewMonitor' => 'Új kamera',
'AddNewServer' => 'Add New Server', // Added - 2018-08-30
'AddNewStorage' => 'Add New Storage', // Added - 2018-08-30
'AddNewUser' => 'Új felhasználó',
'AddNewZone' => 'Új zóna',
'Alarm' => 'Riadó',
@ -148,22 +150,32 @@ $SLANG = array(
'AttrArchiveStatus' => 'Archivált állapot',
'AttrAvgScore' => 'Átlagérték',
'AttrCause' => 'Okozó',
'AttrDate' => 'Dátum',
'AttrDateTime' => 'Dátum/Idő',
'AttrDiskBlocks' => 'Tárhely blokk',
'AttrDiskPercent' => 'Tárhely százalék',
'AttrDiskSpace' => 'Disk Space', // Added - 2018-08-30
'AttrDuration' => 'Időtartam',
'AttrEndDate' => 'End Date', // Added - 2018-08-30
'AttrEndDateTime' => 'End Date/Time', // Added - 2018-08-30
'AttrEndTime' => 'End Time', // Added - 2018-08-30
'AttrEndWeekday' => 'End Weekday', // Added - 2018-08-30
'AttrFilterServer' => 'Server Filter is Running On', // Added - 2018-08-30
'AttrFrames' => 'Képkocka',
'AttrId' => 'Azonosító',
'AttrMaxScore' => 'Max. érték',
'AttrMonitorId' => 'Kamera azonosító',
'AttrMonitorName' => 'Kamera név',
'AttrMonitorServer' => 'Server Monitor is Running On', // Added - 2018-08-30
'AttrName' => 'Név',
'AttrNotes' => 'Megjegyzés',
'AttrStartDate' => 'Start Date', // Added - 2018-08-30
'AttrStartDateTime' => 'Start Date/Time', // Added - 2018-08-30
'AttrStartTime' => 'Start Time', // Added - 2018-08-30
'AttrStartWeekday' => 'Start Weekday', // Added - 2018-08-30
'AttrStateId' => 'Run State', // Added - 2018-08-30
'AttrStorageArea' => 'Storage Area', // Added - 2018-08-30
'AttrStorageServer' => 'Server Hosting Storage', // Added - 2018-08-30
'AttrSystemLoad' => 'Rendszerterhelés',
'AttrTime' => 'Idő',
'AttrTotalScore' => 'Összérték',
'AttrWeekday' => 'Hétköznap',
'Auto' => 'Auto',
'AutoStopTimeout' => 'Auto megállási idő túllépés',
'Available' => 'Elérhető',
@ -196,9 +208,11 @@ $SLANG = array(
'BadRefBlendPerc' => 'Változás a referenciaképtől legyen legalább 1',
'BadSectionLength' => 'Fix időtartamú esemény hossza legyen legalább 30',
'BadSignalCheckColour' => 'Szín a jel kimaradásakor legyen egy érvényes HTML szín-kód',
'BadSourceType' => 'Source Type \"Web Site\" requires the Function to be set to \"Monitor\"', // Added - 2018-08-30
'BadStreamReplayBuffer'=> 'Folyam visszajátszó puffer legyen legalább 0',
'BadWarmupCount' => 'Bemelegítő képkockák száma legyen legalább 0',
'BadWebColour' => 'Szín az idővonal ablakban legyen egy érvényes HTML szín-kód',
'BadWebSitePath' => 'Please enter a complete website url, including the http:// or https:// prefix.', // Added - 2018-08-30
'BadWidth' => 'A képszélesség legyen érvényes érték képpontban megadva',
'Bandwidth' => 'Sávszélesség',
'BandwidthHead' => 'sávszélességre',
@ -262,10 +276,12 @@ $SLANG = array(
'ChooseLogSelection' => 'Válasszon naplót',
'ChoosePreset' => 'Válasszon profilt',
'Clear' => 'Törlés',
'CloneMonitor' => 'Clone', // Added - 2018-08-30
'Close' => 'Bezárás',
'Colour' => 'Szín',
'Command' => 'Parancs',
'Component' => 'Komponens',
'ConcurrentFilter' => 'Run filter concurrently', // Added - 2018-08-30
'Config' => 'Beállítás',
'ConfiguredFor' => 'Beállítva',
'ConfirmDeleteEvents' => 'Biztos benne, hogy törli a kiválasztott eseményeket?',
@ -323,9 +339,11 @@ $SLANG = array(
'DonateRemindWeek' => 'Nem most, figyelmeztessen egy hét múlva',
'DonateYes' => 'Igen, most szeretném támogatni',
'Download' => 'Letöltés',
'DownloadVideo' => 'Download Video', // Added - 2018-08-30
'DuplicateMonitorName' => 'Kameranév duplikálás',
'Duration' => 'Időtartam',
'Edit' => 'Szerkesztés',
'EditLayout' => 'Edit Layout', // Added - 2018-08-30
'Email' => 'E-mail',
'EnableAlarms' => 'Riasztások engedélyezése',
'Enabled' => 'Engedélyezve',
@ -342,6 +360,7 @@ $SLANG = array(
'Events' => 'Események',
'Exclude' => 'Kizárás',
'Execute' => 'Végrehajtás',
'Exif' => 'Embed EXIF data into image', // Added - 2018-08-30
'Export' => 'Exportálás',
'ExportDetails' => 'Esemény adatainak exportálása',
'ExportFailed' => 'Az exportálás sikertelen',
@ -371,8 +390,10 @@ $SLANG = array(
'FilterExecuteEvents' => 'Parancs futtatása minden találaton',
'FilterLog' => 'Filter log', // Added - 2015-04-18
'FilterMessageEvents' => 'Minden találat adatainak üzenése',
'FilterMoveEvents' => 'Move all matches', // Added - 2018-08-30
'FilterPx' => 'Szűrt képkockák',
'FilterUnset' => 'Meg kell adnod a szűrő szélességét és magasságát',
'FilterUpdateDiskSpace'=> 'Update used disk space', // Added - 2018-08-30
'FilterUploadEvents' => 'Minden találat feltöltése',
'FilterVideoEvents' => 'Videó készítése minden találatról',
'Filters' => 'Szűrők',
@ -397,6 +418,7 @@ $SLANG = array(
'Function' => 'Funkció',
'Gain' => 'Erősítés',
'General' => 'Általános',
'GenerateDownload' => 'Generate Download', // Added - 2018-08-30
'GenerateVideo' => 'Videó készítés',
'GeneratingVideo' => 'Videó készítése folyamatban',
'GoToZoneMinder' => 'Ellenőrzés a ZoneMinder.com-on',
@ -417,6 +439,7 @@ $SLANG = array(
'High' => 'Magas',
'HighBW' => 'Magas<br>sávszél',
'Home' => 'Alapba',
'Hostname' => 'Hostname', // Added - 2018-08-30
'Hour' => 'Órában',
'Hue' => 'Színárnyalat',
'Id' => 'Az.',
@ -441,6 +464,7 @@ $SLANG = array(
'Line' => 'Sor',
'LinkedMonitors' => 'Összefüggés más kamerákkal<br>(jelölés Ctrl+kattintással)',
'List' => 'Lista',
'ListMatches' => 'List Matches', // Added - 2018-08-30
'Load' => 'Terhelés',
'Local' => 'Helyi',
'Log' => 'Napló',
@ -527,6 +551,7 @@ $SLANG = array(
'MonitorProbeIntro' => 'Az alábbi listában találhatók az automatikusan érzékelt analóg és hálózati kamerákat, illetve azt, hogy közülük melyik van használatban, vagy kiválasztható.<br/><br/>Válasszon egyet az alábbi listából.<br/><br/>Figyelem: nem biztos, hogy minden kamerát lehet automatikusan érzékelni. Az itt kiválasztott kamara adatai felülírhatják azokat, amelyeket már ehhez a monitorhoz beállított.<br/><br/>',
'Monitors' => 'Kamerák',
'Montage' => 'Többkamerás nézet',
'MontageReview' => 'Montage Review', // Added - 2018-08-30
'Month' => 'Hónapban',
'More' => 'Több',
'MotionFrameSkip' => 'Motion Frame Skip',
@ -553,6 +578,7 @@ $SLANG = array(
'Next' => 'Következő',
'No' => 'Nem',
'NoDetectedCameras' => 'Nem érzékelhetőek kamerák',
'NoDetectedProfiles' => 'No Detected Profiles', // Added - 2018-08-30
'NoFramesRecorded' => 'Nincs rögzített képkocka ehhez az eseményhez',
'NoGroup' => 'Nincs csoport',
'NoSavedFilters' => 'Nincs mentett szűrő',
@ -571,6 +597,8 @@ $SLANG = array(
'OpGt' => 'nagyobb mint',
'OpGtEq' => 'nagyobb van egyenlő',
'OpIn' => 'beállítva',
'OpIs' => 'is', // Added - 2018-08-30
'OpIsNot' => 'is not', // Added - 2018-08-30
'OpLt' => 'kisebb mint',
'OpLtEq' => 'kisebb vagy egyenlő',
'OpMatches' => 'találatok',
@ -580,6 +608,7 @@ $SLANG = array(
'Open' => 'Megnyitás',
'OptionHelp' => 'Beállítási segítség',
'OptionRestartWarning' => 'Ez a beállítás nem tud érvénybe lépni miközben az élő rendszer fut.\nHa végzett minden beállítással, kérem, indítsa újra a ZoneMinder szolgáltatást.',
'OptionalEncoderParam' => 'Optional Encoder Parameters', // Added - 2018-08-30
'Options' => 'Beállítások',
'OrEnterNewName' => 'vagy új néven:',
'Order' => 'Sorrend',
@ -617,9 +646,13 @@ $SLANG = array(
'ProfileProbeIntro' => 'The list below shows the existing stream profiles of the selected camera .<br/><br/>Select the desired entry from the list below.<br/><br/>Please note that ZoneMinder cannot configure additional profiles and that choosing a camera here may overwrite any values you already have configured for the current monitor.<br/><br/>', // Added - 2015-04-18
'Progress' => 'Progress', // Added - 2015-04-18
'Protocol' => 'Protocol',
'RTSPDescribe' => 'Use RTSP Response Media URL', // Added - 2018-08-30
'RTSPTransport' => 'RTSP Transport Protocol', // Added - 2018-08-30
'Rate' => 'FPS',
'Real' => 'Valós',
'RecaptchaWarning' => 'Your reCaptcha secret key is invalid. Please correct it, or reCaptcha will not work', // Added - 2018-08-30
'Record' => 'Felvétel',
'RecordAudio' => 'Whether to store the audio stream when saving an event.', // Added - 2018-08-30
'RefImageBlendPct' => 'Változás a referenciaképtől %-ban',
'Refresh' => 'Frissítés',
'Remote' => 'Hálózati',
@ -635,6 +668,7 @@ $SLANG = array(
'ReplayAll' => 'Mindet',
'ReplayGapless' => 'Szünet nélkülieket',
'ReplaySingle' => 'Egyenként',
'ReportEventAudit' => 'Audit Events Report', // Added - 2018-08-30
'Reset' => 'Alapértékre',
'ResetEventCounts' => 'Eseményszámláló nullázása',
'Restart' => 'A szolgáltatás újraindítása',
@ -653,6 +687,7 @@ $SLANG = array(
'Save' => 'Mentés',
'SaveAs' => 'Mentés erre:',
'SaveFilter' => 'Szűrő mentése',
'SaveJPEGs' => 'Save JPEGs', // Added - 2018-08-30
'Scale' => 'Méret',
'Score' => 'Pontszám',
'Secs' => 'mp.',
@ -669,6 +704,7 @@ $SLANG = array(
'ShowFilterWindow' => 'Szűrőablak megjelenítése',
'ShowTimeline' => 'Idővonal megjelenítése',
'SignalCheckColour' => 'Szín a jel kimaradásakor',
'SignalCheckPoints' => 'Signal Check Points', // Added - 2018-08-30
'Size' => 'Fájlméret',
'SkinDescription' => 'Alapértelmezett felület ebben a böngészőben',
'Sleep' => 'Alvás',
@ -688,6 +724,10 @@ $SLANG = array(
'State' => 'Állapot',
'Stats' => 'Statisztikák',
'Status' => 'Státusz',
'StatusConnected' => 'Capturing', // Added - 2018-08-30
'StatusNotRunning' => 'Not Running', // Added - 2018-08-30
'StatusRunning' => 'Not Capturing', // Added - 2018-08-30
'StatusUnknown' => 'Unknown', // Added - 2018-08-30
'Step' => 'Ugrás',
'StepBack' => 'Visszalépés',
'StepForward' => 'Előrelépés',
@ -698,6 +738,8 @@ $SLANG = array(
'Stills' => 'Állóképek',
'Stop' => 'A szolgáltatás leállítása',
'Stopped' => 'Leállítva',
'StorageArea' => 'Storage Area', // Added - 2018-08-30
'StorageScheme' => 'Scheme', // Added - 2018-08-30
'Stream' => 'Élő folyam',
'StreamReplayBuffer' => 'Képkockák száma a pufferben visszajátszáskor',
'Submit' => 'Küldés',
@ -717,6 +759,7 @@ $SLANG = array(
'TimelineTip4' => 'Használja az alábbi gombokat hogy az időskálát csúsztassa, vagy kicsinyítse.',
'Timestamp' => 'Időbélyeg',
'TimestampLabelFormat' => 'Időbélyeg formátuma',
'TimestampLabelSize' => 'Font Size', // Added - 2018-08-30
'TimestampLabelX' => 'Elhelyezés X pozició',
'TimestampLabelY' => 'Elhelyezés Y pozició',
'Today' => 'Ma',
@ -763,6 +806,7 @@ $SLANG = array(
'VideoGenParms' => 'Videó készítési paraméterek',
'VideoGenSucceeded' => 'A videó elkészült.',
'VideoSize' => 'Képméret',
'VideoWriter' => 'Video Writer', // Added - 2018-08-30
'View' => 'Megtekintés',
'ViewAll' => 'Az összes listázása',
'ViewEvent' => 'Események nézet',
@ -772,6 +816,7 @@ $SLANG = array(
'Watch' => 'Figyelés',
'Web' => 'Web',
'WebColour' => 'Szín az idővonal skálán',
'WebSiteUrl' => 'Website URL', // Added - 2018-08-30
'Week' => 'Héten',
'White' => 'Fehér',
'WhiteBalance' => 'Fehér egyensúly',

View File

@ -83,6 +83,8 @@ $SLANG = array(
'Actual' => 'Attuale',
'AddNewControl' => 'Aggiungi nuovo Controllo',
'AddNewMonitor' => 'Aggiungi nuovo Monitor',
'AddNewServer' => 'Add New Server', // Added - 2018-08-30
'AddNewStorage' => 'Add New Storage', // Added - 2018-08-30
'AddNewUser' => 'Aggiungi nuovo Utente',
'AddNewZone' => 'Aggiungi nuova Zona',
'Alarm' => 'Allarme',
@ -110,22 +112,32 @@ $SLANG = array(
'AttrArchiveStatus' => 'Stato Archivio',
'AttrAvgScore' => 'Punteggio medio',
'AttrCause' => 'Causa',
'AttrDate' => 'Data',
'AttrDateTime' => 'Data/Ora',
'AttrDiskBlocks' => 'Blocchi del Disco',
'AttrDiskPercent' => 'Percentuale del Disco',
'AttrDiskSpace' => 'Disk Space', // Added - 2018-08-30
'AttrDuration' => 'Durata',
'AttrEndDate' => 'End Date', // Added - 2018-08-30
'AttrEndDateTime' => 'End Date/Time', // Added - 2018-08-30
'AttrEndTime' => 'End Time', // Added - 2018-08-30
'AttrEndWeekday' => 'End Weekday', // Added - 2018-08-30
'AttrFilterServer' => 'Server Filter is Running On', // Added - 2018-08-30
'AttrFrames' => 'Immagini',
'AttrId' => 'Id',
'AttrMaxScore' => 'Punteggio massimo',
'AttrMonitorId' => 'Id Monitor',
'AttrMonitorName' => 'Nome Monitor',
'AttrMonitorServer' => 'Server Monitor is Running On', // Added - 2018-08-30
'AttrName' => 'Nome',
'AttrNotes' => 'Note',
'AttrStartDate' => 'Start Date', // Added - 2018-08-30
'AttrStartDateTime' => 'Start Date/Time', // Added - 2018-08-30
'AttrStartTime' => 'Start Time', // Added - 2018-08-30
'AttrStartWeekday' => 'Start Weekday', // Added - 2018-08-30
'AttrStateId' => 'Run State', // Added - 2018-08-30
'AttrStorageArea' => 'Storage Area', // Added - 2018-08-30
'AttrStorageServer' => 'Server Hosting Storage', // Added - 2018-08-30
'AttrSystemLoad' => 'System Load',
'AttrTime' => 'Ora',
'AttrTotalScore' => 'Punteggio totale',
'AttrWeekday' => 'Giorno della settimana',
'Auto' => 'Auto',
'AutoStopTimeout' => 'Auto Stop Timeout',
'Available' => 'Disponibile', // Added - 2009-03-31
@ -158,9 +170,11 @@ $SLANG = array(
'BadRefBlendPerc' => 'La percentuale di miscela di riferimento deve essere un intero positivo',
'BadSectionLength' => 'La lunghezza della sezione deve essere un numero intero pari a 30 o maggiore',
'BadSignalCheckColour' => 'Signal check colour must be a valid RGB colour string',
'BadSourceType' => 'Source Type \"Web Site\" requires the Function to be set to \"Monitor\"', // Added - 2018-08-30
'BadStreamReplayBuffer'=> 'Stream replay buffer must be an integer of zero or more',
'BadWarmupCount' => 'Il numero di frame di allarme deve essere un numero intero maggiore o uguale a zero',
'BadWebColour' => 'L\'identificativo del colore deve essere una stringa valida',
'BadWebSitePath' => 'Please enter a complete website url, including the http:// or https:// prefix.', // Added - 2018-08-30
'BadWidth' => 'La larghezza deve essere impostata con un valore valido',
'Bandwidth' => 'Banda',
'BandwidthHead' => 'Bandwidth', // This is the end of the bandwidth status on the top of the console, different in many language due to phrasing
@ -224,10 +238,12 @@ $SLANG = array(
'ChooseLogSelection' => 'Choose a log selection', // Added - 2011-06-17
'ChoosePreset' => 'Scegli Preset',
'Clear' => 'Clear', // Added - 2011-06-16
'CloneMonitor' => 'Clone', // Added - 2018-08-30
'Close' => 'Chiudi',
'Colour' => 'Colori',
'Command' => 'Comando',
'Component' => 'Component', // Added - 2011-06-16
'ConcurrentFilter' => 'Run filter concurrently', // Added - 2018-08-30
'Config' => 'Configura',
'ConfiguredFor' => 'Configurato per',
'ConfirmDeleteEvents' => 'Sei sicuro di voler cancellare gli eventi selezionati',
@ -285,9 +301,11 @@ $SLANG = array(
'DonateRemindWeek' => 'Non ancora, ricordamelo ancora tra 1 settimana',
'DonateYes' => 'Si,mi piacerebbe donare qualcosa ora',
'Download' => 'Download',
'DownloadVideo' => 'Download Video', // Added - 2018-08-30
'DuplicateMonitorName' => 'Il nome del monitor e\' gia\' presente', // Added - 2009-03-31
'Duration' => 'Durata',
'Edit' => 'Modifica',
'EditLayout' => 'Edit Layout', // Added - 2018-08-30
'Email' => 'Email',
'EnableAlarms' => 'Abilita Allarmi',
'Enabled' => 'Attivo',
@ -304,6 +322,7 @@ $SLANG = array(
'Events' => 'Eventi',
'Exclude' => 'Escludi',
'Execute' => 'Esegui',
'Exif' => 'Embed EXIF data into image', // Added - 2018-08-30
'Export' => 'Esporta',
'ExportDetails' => 'Esp. dettagli eventi',
'ExportFailed' => 'Esp. Fallita ',
@ -333,8 +352,10 @@ $SLANG = array(
'FilterExecuteEvents' => 'Esegui un comando',
'FilterLog' => 'Filter log', // Added - 2015-04-18
'FilterMessageEvents' => 'Invia dettagli tramite messaggio',
'FilterMoveEvents' => 'Move all matches', // Added - 2018-08-30
'FilterPx' => 'Px Filtro',
'FilterUnset' => 'Devi specificare altezza e larghezza per il filtro',
'FilterUpdateDiskSpace'=> 'Update used disk space', // Added - 2018-08-30
'FilterUploadEvents' => 'Fai upload eventi (FTP)',
'FilterVideoEvents' => 'Crea video per tutte le corrispondenze',
'Filters' => 'Filtri',
@ -359,6 +380,7 @@ $SLANG = array(
'Function' => 'Funzione',
'Gain' => 'Gain',
'General' => 'Generale',
'GenerateDownload' => 'Generate Download', // Added - 2018-08-30
'GenerateVideo' => 'Genera Video',
'GeneratingVideo' => 'Sto generando il Video',
'GoToZoneMinder' => 'Vai su zoneminder.com',
@ -379,6 +401,7 @@ $SLANG = array(
'High' => 'Alta',
'HighBW' => 'Banda&nbsp;Alta',
'Home' => 'Home',
'Hostname' => 'Hostname', // Added - 2018-08-30
'Hour' => 'Ora',
'Hue' => 'Tinta',
'Id' => 'Id',
@ -403,6 +426,7 @@ $SLANG = array(
'Line' => 'Line', // Added - 2011-06-16
'LinkedMonitors' => 'Monitor Collegati',
'List' => 'Lista',
'ListMatches' => 'List Matches', // Added - 2018-08-30
'Load' => 'Carico Sistema',
'Local' => 'Locale',
'Log' => 'Log', // Added - 2011-06-16
@ -489,6 +513,7 @@ $SLANG = array(
'MonitorProbeIntro' => 'The list below shows detected analog and network cameras and whether they are already being used or available for selection.<br/><br/>Select the desired entry from the list below.<br/><br/>Please note that not all cameras may be detected and that choosing a camera here may overwrite any values you already have configured for the current monitor.<br/><br/>', // Added - 2009-03-31
'Monitors' => 'Monitors',
'Montage' => 'Montaggio',
'MontageReview' => 'Montage Review', // Added - 2018-08-30
'Month' => 'Mese',
'More' => 'More', // Added - 2011-06-16
'MotionFrameSkip' => 'Motion Frame Skip',
@ -515,6 +540,7 @@ $SLANG = array(
'Next' => 'Prossimo',
'No' => 'No',
'NoDetectedCameras' => 'Nessuna telecamera rilevata', // Added - 2009-03-31
'NoDetectedProfiles' => 'No Detected Profiles', // Added - 2018-08-30
'NoFramesRecorded' => 'Non ci sono immagini salvate per questo evento',
'NoGroup' => 'Nessun gruppo', // Added - 2009-02-08
'NoSavedFilters' => 'NessunFiltroSalvato',
@ -533,6 +559,8 @@ $SLANG = array(
'OpGt' => 'maggiore di',
'OpGtEq' => 'maggiore o uguale a',
'OpIn' => 'impostato',
'OpIs' => 'is', // Added - 2018-08-30
'OpIsNot' => 'is not', // Added - 2018-08-30
'OpLt' => 'minore di',
'OpLtEq' => 'minore o uguale a',
'OpMatches' => 'corrisponde',
@ -542,6 +570,7 @@ $SLANG = array(
'Open' => 'Apri',
'OptionHelp' => 'Opzioni di Aiuto',
'OptionRestartWarning' => 'Queste modifiche potrebbero essere attive solo dopo un riavvio del sistema. Riavviare ZoneMinder.',
'OptionalEncoderParam' => 'Optional Encoder Parameters', // Added - 2018-08-30
'Options' => 'Opzioni',
'OrEnterNewName' => 'o inserisci un nuovo nome',
'Order' => 'Ordine',
@ -579,9 +608,13 @@ $SLANG = array(
'ProfileProbeIntro' => 'The list below shows the existing stream profiles of the selected camera .<br/><br/>Select the desired entry from the list below.<br/><br/>Please note that ZoneMinder cannot configure additional profiles and that choosing a camera here may overwrite any values you already have configured for the current monitor.<br/><br/>', // Added - 2015-04-18
'Progress' => 'Progress', // Added - 2015-04-18
'Protocol' => 'Protocol',
'RTSPDescribe' => 'Use RTSP Response Media URL', // Added - 2018-08-30
'RTSPTransport' => 'RTSP Transport Protocol', // Added - 2018-08-30
'Rate' => 'Velocita\'',
'Real' => 'Reale',
'RecaptchaWarning' => 'Your reCaptcha secret key is invalid. Please correct it, or reCaptcha will not work', // Added - 2018-08-30
'Record' => 'Registra',
'RecordAudio' => 'Whether to store the audio stream when saving an event.', // Added - 2018-08-30
'RefImageBlendPct' => 'Riferimento Miscela Immagine percentuale',
'Refresh' => 'Aggiorna',
'Remote' => 'Remoto',
@ -597,6 +630,7 @@ $SLANG = array(
'ReplayAll' => 'All Events',
'ReplayGapless' => 'Gapless Events',
'ReplaySingle' => 'Single Event',
'ReportEventAudit' => 'Audit Events Report', // Added - 2018-08-30
'Reset' => 'Resetta',
'ResetEventCounts' => 'Resetta Contatore Eventi',
'Restart' => 'Riavvia',
@ -615,6 +649,7 @@ $SLANG = array(
'Save' => 'Salva',
'SaveAs' => 'Salva come',
'SaveFilter' => 'salva Filtro',
'SaveJPEGs' => 'Save JPEGs', // Added - 2018-08-30
'Scale' => 'Scala',
'Score' => 'Punteggio',
'Secs' => 'Secs',
@ -631,6 +666,7 @@ $SLANG = array(
'ShowFilterWindow' => 'MostraFinestraFiltri',
'ShowTimeline' => 'Mostra linea temporale',
'SignalCheckColour' => 'Signal Check Colour',
'SignalCheckPoints' => 'Signal Check Points', // Added - 2018-08-30
'Size' => 'grandezza',
'SkinDescription' => 'Change the default skin for this computer', // Added - 2011-01-30
'Sleep' => 'Sleep',
@ -650,6 +686,10 @@ $SLANG = array(
'State' => 'Stato',
'Stats' => 'Statistiche',
'Status' => 'Stato',
'StatusConnected' => 'Capturing', // Added - 2018-08-30
'StatusNotRunning' => 'Not Running', // Added - 2018-08-30
'StatusRunning' => 'Not Capturing', // Added - 2018-08-30
'StatusUnknown' => 'Unknown', // Added - 2018-08-30
'Step' => 'Passo',
'StepBack' => 'Step Back',
'StepForward' => 'Step Forward',
@ -660,6 +700,8 @@ $SLANG = array(
'Stills' => 'Foto',
'Stop' => 'Stop',
'Stopped' => 'Inattivo',
'StorageArea' => 'Storage Area', // Added - 2018-08-30
'StorageScheme' => 'Scheme', // Added - 2018-08-30
'Stream' => 'Flusso',
'StreamReplayBuffer' => 'Stream Replay Image Buffer',
'Submit' => 'Accetta',
@ -679,6 +721,7 @@ $SLANG = array(
'TimelineTip4' => 'Use the controls below to zoom out or navigate back and forward through the time range.', // Added 2013.08.15.
'Timestamp' => 'Timestamp',
'TimestampLabelFormat' => 'Formato etichetta timestamp',
'TimestampLabelSize' => 'Font Size', // Added - 2018-08-30
'TimestampLabelX' => 'coordinata X etichetta',
'TimestampLabelY' => 'coordinata Y etichetta',
'Today' => 'Oggi ',
@ -725,6 +768,7 @@ $SLANG = array(
'VideoGenParms' => 'Parametri Generazione Video',
'VideoGenSucceeded' => 'Successo: Generato Video !',
'VideoSize' => 'Dimensioni Video',
'VideoWriter' => 'Video Writer', // Added - 2018-08-30
'View' => 'vedi',
'ViewAll' => 'Vedi Tutto',
'ViewEvent' => 'Vedi Evento',
@ -734,6 +778,7 @@ $SLANG = array(
'Watch' => 'Guarda',
'Web' => 'Web',
'WebColour' => 'Colore Web',
'WebSiteUrl' => 'Website URL', // Added - 2018-08-30
'Week' => 'Settimana',
'White' => 'Bianco',
'WhiteBalance' => 'Bil. Bianco ',

View File

@ -79,6 +79,8 @@ $SLANG = array(
'Actual' => '生中継',
'AddNewControl' => 'Add New Control',
'AddNewMonitor' => 'モニター追加',
'AddNewServer' => 'Add New Server', // Added - 2018-08-30
'AddNewStorage' => 'Add New Storage', // Added - 2018-08-30
'AddNewUser' => 'ユーザ追加',
'AddNewZone' => 'ゾーン追加',
'Alarm' => 'アラーム',
@ -106,22 +108,32 @@ $SLANG = array(
'AttrArchiveStatus' => '保存状態',
'AttrAvgScore' => '平均スコアー',
'AttrCause' => 'Cause',
'AttrDate' => '日付',
'AttrDateTime' => '日時',
'AttrDiskBlocks' => 'Disk Blocks',
'AttrDiskPercent' => 'Disk Percent',
'AttrDiskSpace' => 'Disk Space', // Added - 2018-08-30
'AttrDuration' => '継続時間',
'AttrEndDate' => 'End Date', // Added - 2018-08-30
'AttrEndDateTime' => 'End Date/Time', // Added - 2018-08-30
'AttrEndTime' => 'End Time', // Added - 2018-08-30
'AttrEndWeekday' => 'End Weekday', // Added - 2018-08-30
'AttrFilterServer' => 'Server Filter is Running On', // Added - 2018-08-30
'AttrFrames' => 'フレーム',
'AttrId' => 'Id',
'AttrMaxScore' => '最高スコアー',
'AttrMonitorId' => 'モニター Id',
'AttrMonitorName' => 'モニター 名前',
'AttrMonitorServer' => 'Server Monitor is Running On', // Added - 2018-08-30
'AttrName' => 'Name',
'AttrNotes' => 'Notes',
'AttrStartDate' => 'Start Date', // Added - 2018-08-30
'AttrStartDateTime' => 'Start Date/Time', // Added - 2018-08-30
'AttrStartTime' => 'Start Time', // Added - 2018-08-30
'AttrStartWeekday' => 'Start Weekday', // Added - 2018-08-30
'AttrStateId' => 'Run State', // Added - 2018-08-30
'AttrStorageArea' => 'Storage Area', // Added - 2018-08-30
'AttrStorageServer' => 'Server Hosting Storage', // Added - 2018-08-30
'AttrSystemLoad' => 'System Load',
'AttrTime' => '時間',
'AttrTotalScore' => '合計スコアー',
'AttrWeekday' => '曜日',
'Auto' => 'Auto',
'AutoStopTimeout' => 'Auto Stop Timeout',
'Available' => 'Available', // Added - 2009-03-31
@ -154,9 +166,11 @@ $SLANG = array(
'BadRefBlendPerc' => 'Reference blend percentage must be a positive integer',
'BadSectionLength' => 'Section length must be an integer of 30 or more',
'BadSignalCheckColour' => 'Signal check colour must be a valid RGB colour string',
'BadSourceType' => 'Source Type \"Web Site\" requires the Function to be set to \"Monitor\"', // Added - 2018-08-30
'BadStreamReplayBuffer'=> 'Stream replay buffer must be an integer of zero or more',
'BadWarmupCount' => 'Warmup frames must be an integer of zero or more',
'BadWebColour' => 'Web colour must be a valid web colour string',
'BadWebSitePath' => 'Please enter a complete website url, including the http:// or https:// prefix.', // Added - 2018-08-30
'BadWidth' => 'Width must be set to a valid value',
'Bandwidth' => '帯域幅',
'BandwidthHead' => 'Bandwidth', // This is the end of the bandwidth status on the top of the console, different in many language due to phrasing
@ -220,10 +234,12 @@ $SLANG = array(
'ChooseLogSelection' => 'Choose a log selection', // Added - 2011-06-17
'ChoosePreset' => 'Choose Preset',
'Clear' => 'Clear', // Added - 2011-06-16
'CloneMonitor' => 'Clone', // Added - 2018-08-30
'Close' => '閉じる',
'Colour' => '色',
'Command' => 'Command',
'Component' => 'Component', // Added - 2011-06-16
'ConcurrentFilter' => 'Run filter concurrently', // Added - 2018-08-30
'Config' => 'Config',
'ConfiguredFor' => '設定:',
'ConfirmDeleteEvents' => 'Are you sure you wish to delete the selected events?',
@ -281,12 +297,14 @@ $SLANG = array(
'DonateRemindWeek' => 'Not yet, remind again in 1 week',
'DonateYes' => 'Yes, I\'d like to donate now',
'Download' => 'Download',
'DownloadVideo' => 'Download Video', // Added - 2018-08-30
'DuplicateMonitorName' => 'Duplicate Monitor Name', // Added - 2009-03-31
'Duration' => '継続時間',
'Edit' => '編集',
'EditLayout' => 'Edit Layout', // Added - 2018-08-30
'Email' => 'メール',
'EnableAlarms' => 'Enable Alarms',
'Enabled' => '使用可能\',
'Enabled' => '使用可能',
'EnterNewFilterName' => '新しいフィルター名の入力',
'Error' => 'エラー',
'ErrorBrackets' => 'エラー、開き括弧と閉じ括弧の数が合っているのかを確認してください',
@ -300,6 +318,7 @@ $SLANG = array(
'Events' => 'イベント',
'Exclude' => '排除',
'Execute' => 'Execute',
'Exif' => 'Embed EXIF data into image', // Added - 2018-08-30
'Export' => 'Export',
'ExportDetails' => 'Export Event Details',
'ExportFailed' => 'Export Failed',
@ -329,8 +348,10 @@ $SLANG = array(
'FilterExecuteEvents' => 'Execute command on all matches',
'FilterLog' => 'Filter log', // Added - 2015-04-18
'FilterMessageEvents' => 'Message details of all matches',
'FilterMoveEvents' => 'Move all matches', // Added - 2018-08-30
'FilterPx' => 'フィルター Px',
'FilterUnset' => 'You must specify a filter width and height',
'FilterUpdateDiskSpace'=> 'Update used disk space', // Added - 2018-08-30
'FilterUploadEvents' => 'Upload all matches',
'FilterVideoEvents' => 'Create video for all matches',
'Filters' => 'Filters',
@ -351,10 +372,11 @@ $SLANG = array(
'FrameRate' => 'フレームレート',
'FrameSkip' => 'フレームスキップ',
'Frames' => 'フレーム',
'Func' => '機能\',
'Function' => '機能\',
'Func' => '機能',
'Function' => '機能',
'Gain' => 'Gain',
'General' => 'General',
'GenerateDownload' => 'Generate Download', // Added - 2018-08-30
'GenerateVideo' => 'ビデオの生成',
'GeneratingVideo' => 'ビデオ生成中',
'GoToZoneMinder' => 'ZoneMinder.comに行く',
@ -375,6 +397,7 @@ $SLANG = array(
'High' => '高',
'HighBW' => '高帯域',
'Home' => 'Home',
'Hostname' => 'Hostname', // Added - 2018-08-30
'Hour' => '時',
'Hue' => '色相',
'Id' => 'ID',
@ -399,6 +422,7 @@ $SLANG = array(
'Line' => 'Line', // Added - 2011-06-16
'LinkedMonitors' => 'Linked Monitors',
'List' => 'List',
'ListMatches' => 'List Matches', // Added - 2018-08-30
'Load' => 'Load',
'Local' => 'ローカル',
'Log' => 'Log', // Added - 2011-06-16
@ -485,6 +509,7 @@ $SLANG = array(
'MonitorProbeIntro' => 'The list below shows detected analog and network cameras and whether they are already being used or available for selection.<br/><br/>Select the desired entry from the list below.<br/><br/>Please note that not all cameras may be detected and that choosing a camera here may overwrite any values you already have configured for the current monitor.<br/><br/>', // Added - 2009-03-31
'Monitors' => 'モニター',
'Montage' => 'モンタージュ',
'MontageReview' => 'Montage Review', // Added - 2018-08-30
'Month' => '月',
'More' => 'More', // Added - 2011-06-16
'MotionFrameSkip' => 'Motion Frame Skip',
@ -511,6 +536,7 @@ $SLANG = array(
'Next' => '次',
'No' => 'いいえ',
'NoDetectedCameras' => 'No Detected Cameras', // Added - 2009-03-31
'NoDetectedProfiles' => 'No Detected Profiles', // Added - 2018-08-30
'NoFramesRecorded' => 'このイベントのフレームは登録されていません',
'NoGroup' => 'No Group',
'NoSavedFilters' => '保存されたフィルターはありません',
@ -529,6 +555,8 @@ $SLANG = array(
'OpGt' => '以下',
'OpGtEq' => '同等か以上',
'OpIn' => 'セットに入っている',
'OpIs' => 'is', // Added - 2018-08-30
'OpIsNot' => 'is not', // Added - 2018-08-30
'OpLt' => '以下',
'OpLtEq' => '同等か以下',
'OpMatches' => '一致する',
@ -538,6 +566,7 @@ $SLANG = array(
'Open' => 'Open',
'OptionHelp' => 'オプション ヘルプ',
'OptionRestartWarning' => 'この変更は起動中反映されない場合があります。\n変更してからZoneMinderを再起動してください。',
'OptionalEncoderParam' => 'Optional Encoder Parameters', // Added - 2018-08-30
'Options' => 'オプション',
'OrEnterNewName' => '又は新しい名前を入力してください',
'Order' => 'Order',
@ -575,9 +604,13 @@ $SLANG = array(
'ProfileProbeIntro' => 'The list below shows the existing stream profiles of the selected camera .<br/><br/>Select the desired entry from the list below.<br/><br/>Please note that ZoneMinder cannot configure additional profiles and that choosing a camera here may overwrite any values you already have configured for the current monitor.<br/><br/>', // Added - 2015-04-18
'Progress' => 'Progress', // Added - 2015-04-18
'Protocol' => 'Protocol',
'RTSPDescribe' => 'Use RTSP Response Media URL', // Added - 2018-08-30
'RTSPTransport' => 'RTSP Transport Protocol', // Added - 2018-08-30
'Rate' => 'レート',
'Real' => '生中継',
'RecaptchaWarning' => 'Your reCaptcha secret key is invalid. Please correct it, or reCaptcha will not work', // Added - 2018-08-30
'Record' => '録画',
'RecordAudio' => 'Whether to store the audio stream when saving an event.', // Added - 2018-08-30
'RefImageBlendPct' => 'イメージ ブレンド 参照 %',
'Refresh' => '最新の情報に更新',
'Remote' => 'リモート',
@ -593,6 +626,7 @@ $SLANG = array(
'ReplayAll' => 'All Events',
'ReplayGapless' => 'Gapless Events',
'ReplaySingle' => 'Single Event',
'ReportEventAudit' => 'Audit Events Report', // Added - 2018-08-30
'Reset' => 'Reset',
'ResetEventCounts' => 'イベント カウント リセット',
'Restart' => '再起動',
@ -611,6 +645,7 @@ $SLANG = array(
'Save' => '保存',
'SaveAs' => '名前をつけて保存',
'SaveFilter' => 'フィルターを保存',
'SaveJPEGs' => 'Save JPEGs', // Added - 2018-08-30
'Scale' => 'スケール',
'Score' => 'スコアー',
'Secs' => '秒',
@ -627,6 +662,7 @@ $SLANG = array(
'ShowFilterWindow' => 'フィルター ウインドーの表示',
'ShowTimeline' => 'Show Timeline',
'SignalCheckColour' => 'Signal Check Colour',
'SignalCheckPoints' => 'Signal Check Points', // Added - 2018-08-30
'Size' => 'Size',
'SkinDescription' => 'Change the default skin for this computer', // Added - 2011-01-30
'Sleep' => 'Sleep',
@ -646,6 +682,10 @@ $SLANG = array(
'State' => '状態',
'Stats' => '統計',
'Status' => '状態',
'StatusConnected' => 'Capturing', // Added - 2018-08-30
'StatusNotRunning' => 'Not Running', // Added - 2018-08-30
'StatusRunning' => 'Not Capturing', // Added - 2018-08-30
'StatusUnknown' => 'Unknown', // Added - 2018-08-30
'Step' => 'Step',
'StepBack' => 'Step Back',
'StepForward' => 'Step Forward',
@ -656,6 +696,8 @@ $SLANG = array(
'Stills' => 'スチール画像',
'Stop' => '停止',
'Stopped' => '停止状態',
'StorageArea' => 'Storage Area', // Added - 2018-08-30
'StorageScheme' => 'Scheme', // Added - 2018-08-30
'Stream' => 'ストリーム',
'StreamReplayBuffer' => 'Stream Replay Image Buffer',
'Submit' => 'Submit',
@ -675,6 +717,7 @@ $SLANG = array(
'TimelineTip4' => 'Use the controls below to zoom out or navigate back and forward through the time range.', // Added 2013.08.15.
'Timestamp' => 'タイムスタンプ',
'TimestampLabelFormat' => 'タイムスタンプ ラベル フォーマット',
'TimestampLabelSize' => 'Font Size', // Added - 2018-08-30
'TimestampLabelX' => 'タイムスタンプ ラベル X',
'TimestampLabelY' => 'タイムスタンプ ラベル Y',
'Today' => 'Today',
@ -721,6 +764,7 @@ $SLANG = array(
'VideoGenParms' => 'ビデオ生成 パラメータ',
'VideoGenSucceeded' => 'Video Generation Succeeded!',
'VideoSize' => 'ビデオ サイズ',
'VideoWriter' => 'Video Writer', // Added - 2018-08-30
'View' => '表示',
'ViewAll' => '全部表示',
'ViewEvent' => 'View Event',
@ -730,6 +774,7 @@ $SLANG = array(
'Watch' => '監視',
'Web' => 'ウェブ',
'WebColour' => 'Web Colour',
'WebSiteUrl' => 'Website URL', // Added - 2018-08-30
'Week' => '週',
'White' => 'White',
'WhiteBalance' => 'White Balance',
@ -767,7 +812,7 @@ $CLANG = array(
'LastEvents' => '最終 %1$s %2$s',
'LatestRelease' => '最新バージョンは v%1$s、ご利用バージョンはv%2$s.',
'MonitorCount' => '%1$s %2$s',
'MonitorFunction' => 'モニター%1$s 機能\',
'MonitorFunction' => 'モニター%1$s 機能',
'RunningRecentVer' => 'あなたはZoneMinderの最新バージョン v%s.を使っています',
'VersionMismatch' => 'Version mismatch, system is version %1$s, database is %2$s.', // Added - 2011-05-25
);

View File

@ -79,6 +79,8 @@ $SLANG = array(
'Actual' => 'Origineel',
'AddNewControl' => 'Nieuwe controle toevoegen',
'AddNewMonitor' => 'Nieuwe monitor toevoegen',
'AddNewServer' => 'Add New Server', // Added - 2018-08-30
'AddNewStorage' => 'Add New Storage', // Added - 2018-08-30
'AddNewUser' => 'Nieuwe gebruiker toevoegen',
'AddNewZone' => 'Nieuw gebied toevoegen',
'Alarm' => 'Alarm',
@ -106,22 +108,32 @@ $SLANG = array(
'AttrArchiveStatus' => 'Archiefstatus',
'AttrAvgScore' => 'Gem. score',
'AttrCause' => 'Oorzaak',
'AttrDate' => 'Datum',
'AttrDateTime' => 'Datum/tijd',
'AttrDiskBlocks' => 'Disk Blocks',
'AttrDiskPercent' => 'Disk Percent',
'AttrDiskSpace' => 'Disk Space', // Added - 2018-08-30
'AttrDuration' => 'Duur',
'AttrEndDate' => 'End Date', // Added - 2018-08-30
'AttrEndDateTime' => 'End Date/Time', // Added - 2018-08-30
'AttrEndTime' => 'End Time', // Added - 2018-08-30
'AttrEndWeekday' => 'End Weekday', // Added - 2018-08-30
'AttrFilterServer' => 'Server Filter is Running On', // Added - 2018-08-30
'AttrFrames' => 'Frames',
'AttrId' => 'Id',
'AttrMaxScore' => 'Max. Score',
'AttrMonitorId' => 'Monitor Id',
'AttrMonitorName' => 'Monitor Naam',
'AttrMonitorServer' => 'Server Monitor is Running On', // Added - 2018-08-30
'AttrName' => 'Naam',
'AttrNotes' => 'Notities',
'AttrStartDate' => 'Start Date', // Added - 2018-08-30
'AttrStartDateTime' => 'Start Date/Time', // Added - 2018-08-30
'AttrStartTime' => 'Start Time', // Added - 2018-08-30
'AttrStartWeekday' => 'Start Weekday', // Added - 2018-08-30
'AttrStateId' => 'Run State', // Added - 2018-08-30
'AttrStorageArea' => 'Storage Area', // Added - 2018-08-30
'AttrStorageServer' => 'Server Hosting Storage', // Added - 2018-08-30
'AttrSystemLoad' => 'Systembelasting',
'AttrTime' => 'Tijd',
'AttrTotalScore' => 'Totale Score',
'AttrWeekday' => 'Weekdag',
'Auto' => 'Auto',
'AutoStopTimeout' => 'Auto Stop Timeout',
'Available' => 'Beschikbaar',
@ -154,9 +166,11 @@ $SLANG = array(
'BadRefBlendPerc' => 'Reference blend percentage moet een geldige waarde van nul of groter zijn',
'BadSectionLength' => 'Sectielengte moet een getal van 30 of groter zijn',
'BadSignalCheckColour' => 'Signaalcontrolekleur moet een geldige RGB waarde zijn',
'BadSourceType' => 'Source Type \"Web Site\" requires the Function to be set to \"Monitor\"', // Added - 2018-08-30
'BadStreamReplayBuffer'=> 'Stream replay buffer moet een geldige waarde van nul of groter zijn',
'BadWarmupCount' => 'Opwarm frames moet een geldig getal van nul of groter zijn',
'BadWebColour' => 'Webkleur moet een geldige webkleurwaarde bevatten',
'BadWebSitePath' => 'Please enter a complete website url, including the http:// or https:// prefix.', // Added - 2018-08-30
'BadWidth' => 'Breedte moet een geldige waarde zijn',
'Bandwidth' => 'Bandbreedte',
'BandwidthHead' => 'bandbreedte', // This is the end of the bandwidth status on the top of the console, different in many language due to phrasing
@ -220,10 +234,12 @@ $SLANG = array(
'ChooseLogSelection' => 'Kies een logselectie',
'ChoosePreset' => 'Kies voorkeur',
'Clear' => 'Legen',
'CloneMonitor' => 'Clone', // Added - 2018-08-30
'Close' => 'Sluiten',
'Colour' => 'Kleur',
'Command' => 'Commando',
'Component' => 'Component',
'ConcurrentFilter' => 'Run filter concurrently', // Added - 2018-08-30
'Config' => 'Configuratie',
'ConfiguredFor' => 'Geconfigureerd voor',
'ConfirmDeleteEvents' => 'Weet u zeker dat u deze gebeurtenissen wilt verwijderen?',
@ -281,9 +297,11 @@ $SLANG = array(
'DonateRemindWeek' => 'Nu niet, herinner mij over een week hieraan',
'DonateYes' => 'Ja, ik wil nu doneren',
'Download' => 'Downloaden',
'DownloadVideo' => 'Download Video', // Added - 2018-08-30
'DuplicateMonitorName' => 'Kopieer monitornaam',
'Duration' => 'Duur',
'Edit' => 'Bewerken',
'EditLayout' => 'Edit Layout', // Added - 2018-08-30
'Email' => 'Email',
'EnableAlarms' => 'Alarmen inschakelen',
'Enabled' => 'Ingeschakeld',
@ -300,6 +318,7 @@ $SLANG = array(
'Events' => 'Gebeurtenissen',
'Exclude' => 'Uitsluiten',
'Execute' => 'Uitvoeren',
'Exif' => 'Embed EXIF data into image', // Added - 2018-08-30
'Export' => 'Exporteren',
'ExportDetails' => 'Exporteer gebeurtenisdetails',
'ExportFailed' => 'Exporteren mislukt',
@ -329,8 +348,10 @@ $SLANG = array(
'FilterExecuteEvents' => 'Voer opdrachten uit op alle overeenkomsten',
'FilterLog' => 'Filterlog',
'FilterMessageEvents' => 'Bericht de details van alle overeenkomsten',
'FilterMoveEvents' => 'Move all matches', // Added - 2018-08-30
'FilterPx' => 'Filter px',
'FilterUnset' => 'Je moet de filterhoogte en -breedte opgeven',
'FilterUpdateDiskSpace'=> 'Update used disk space', // Added - 2018-08-30
'FilterUploadEvents' => 'Verstuur alle overeenkomsten',
'FilterVideoEvents' => 'Maak video voor alle overeenkomsten',
'Filters' => 'Filters',
@ -355,6 +376,7 @@ $SLANG = array(
'Function' => 'Functie',
'Gain' => 'Gain',
'General' => 'Algemeen',
'GenerateDownload' => 'Generate Download', // Added - 2018-08-30
'GenerateVideo' => 'Genereer Video',
'GeneratingVideo' => 'Video wordt gegenereerd',
'GoToZoneMinder' => 'Ga naar ZoneMinder.com',
@ -375,6 +397,7 @@ $SLANG = array(
'High' => 'Hoog',
'HighBW' => 'Hoog&nbsp;B/W',
'Home' => 'Home',
'Hostname' => 'Hostname', // Added - 2018-08-30
'Hour' => 'Uur',
'Hue' => 'Hue',
'Id' => 'Id',
@ -399,6 +422,7 @@ $SLANG = array(
'Line' => 'Lijn',
'LinkedMonitors' => 'Gekoppelde monitoren',
'List' => 'Lijst',
'ListMatches' => 'List Matches', // Added - 2018-08-30
'Load' => 'Systeemlast',
'Local' => 'Lokaal',
'Log' => 'Log',
@ -485,6 +509,7 @@ $SLANG = array(
'MonitorProbeIntro' => 'Deze lijst toont gedeteerde analoge en netwerk cameras en of deze al in gebruik of beschikbaar zijn.<br/><br/>Selecteer de gewenste waarde uit de lijst hieronder.<br/><br/>Let op dat mogelijk niet alle cameras hier worden weergegeven en dat alle ingevoerde waarden voor de huidige monitor zullen worden overschreven.<br/><br/>',
'Monitors' => 'Monitoren',
'Montage' => 'Montage',
'MontageReview' => 'Montage Review', // Added - 2018-08-30
'Month' => 'Maand',
'More' => 'Meer',
'MotionFrameSkip' => 'Motion Frame Skip',
@ -511,6 +536,7 @@ $SLANG = array(
'Next' => 'Volgende',
'No' => 'Nee',
'NoDetectedCameras' => 'Geen cameras gedetecteerd',
'NoDetectedProfiles' => 'No Detected Profiles', // Added - 2018-08-30
'NoFramesRecorded' => 'Er zijn geen beelden opgenomen voor deze gebeurtenis',
'NoGroup' => 'Geen Groep',
'NoSavedFilters' => 'Geen Opgeslagen Filters',
@ -529,6 +555,8 @@ $SLANG = array(
'OpGt' => 'groter dan',
'OpGtEq' => 'groter dan of gelijk aan',
'OpIn' => 'in set',
'OpIs' => 'is', // Added - 2018-08-30
'OpIsNot' => 'is not', // Added - 2018-08-30
'OpLt' => 'kleiner dan',
'OpLtEq' => 'kleiner dan of gelijk aan',
'OpMatches' => 'Komt overeen met',
@ -538,6 +566,7 @@ $SLANG = array(
'Open' => 'Open',
'OptionHelp' => 'OptieHelp',
'OptionRestartWarning' => 'Deze veranderingen worden niet\ndoorgevoerd als het systeem loopt.\nVergeet niet ZoneMinder te herstarten\nwanneer u klaar bent.',
'OptionalEncoderParam' => 'Optional Encoder Parameters', // Added - 2018-08-30
'Options' => 'Opties',
'OrEnterNewName' => 'of voer een nieuwe naam in',
'Order' => 'Sorteren',
@ -575,9 +604,13 @@ $SLANG = array(
'ProfileProbeIntro' => 'The list below shows the existing stream profiles of the selected camera .<br/><br/>Select the desired entry from the list below.<br/><br/>Please note that ZoneMinder cannot configure additional profiles and that choosing a camera here may overwrite any values you already have configured for the current monitor.<br/><br/>', // Added - 2015-04-18
'Progress' => 'Voortgang',
'Protocol' => 'Protocol',
'RTSPDescribe' => 'Use RTSP Response Media URL', // Added - 2018-08-30
'RTSPTransport' => 'RTSP Transport Protocol', // Added - 2018-08-30
'Rate' => 'Snelheid',
'Real' => 'Echte',
'RecaptchaWarning' => 'Your reCaptcha secret key is invalid. Please correct it, or reCaptcha will not work', // Added - 2018-08-30
'Record' => 'Record',
'RecordAudio' => 'Whether to store the audio stream when saving an event.', // Added - 2018-08-30
'RefImageBlendPct' => 'Referentie beeld blend percentage',
'Refresh' => 'Verversen',
'Remote' => 'Remote',
@ -593,6 +626,7 @@ $SLANG = array(
'ReplayAll' => 'Alle Gebeurtenissen',
'ReplayGapless' => 'Opvolgende Gebeurtenissen',
'ReplaySingle' => 'Enkele Gebeurtenis',
'ReportEventAudit' => 'Audit Events Report', // Added - 2018-08-30
'Reset' => 'Resetten',
'ResetEventCounts' => 'Gebeurtenisteller resetten',
'Restart' => 'Herstart',
@ -611,6 +645,7 @@ $SLANG = array(
'Save' => 'Opslaan',
'SaveAs' => 'Opslaan als',
'SaveFilter' => 'Filter opslaan',
'SaveJPEGs' => 'Save JPEGs', // Added - 2018-08-30
'Scale' => 'Schaal',
'Score' => 'Score',
'Secs' => 'Sec.',
@ -627,6 +662,7 @@ $SLANG = array(
'ShowFilterWindow' => 'Toon Filtervenster',
'ShowTimeline' => 'Toon Tijdlijn',
'SignalCheckColour' => 'Signaalcontrolekleur',
'SignalCheckPoints' => 'Signal Check Points', // Added - 2018-08-30
'Size' => 'Groote',
'SkinDescription' => 'Wijzig standaarduiterlijk voor deze computer',
'Sleep' => 'Slaap',
@ -646,6 +682,10 @@ $SLANG = array(
'State' => 'Status',
'Stats' => 'Stats',
'Status' => 'Status',
'StatusConnected' => 'Capturing', // Added - 2018-08-30
'StatusNotRunning' => 'Not Running', // Added - 2018-08-30
'StatusRunning' => 'Not Capturing', // Added - 2018-08-30
'StatusUnknown' => 'Unknown', // Added - 2018-08-30
'Step' => 'Stap',
'StepBack' => 'Stap Terug',
'StepForward' => 'Stap Vooruit',
@ -656,6 +696,8 @@ $SLANG = array(
'Stills' => 'Beelden',
'Stop' => 'Stoppen',
'Stopped' => 'Gestopt',
'StorageArea' => 'Storage Area', // Added - 2018-08-30
'StorageScheme' => 'Scheme', // Added - 2018-08-30
'Stream' => 'Stream',
'StreamReplayBuffer' => 'Stream Replay beeldbuffer',
'Submit' => 'Verzenden',
@ -675,6 +717,7 @@ $SLANG = array(
'TimelineTip4' => 'Gebruik de knoppen hieronder om uit te zoomen of voor- en achteruit te navigeren.',
'Timestamp' => 'Tijdstempel',
'TimestampLabelFormat' => 'Formaat tijdstempel',
'TimestampLabelSize' => 'Font Size', // Added - 2018-08-30
'TimestampLabelX' => 'Tijdstempel X-positie',
'TimestampLabelY' => 'Tijdstempel Y-positie',
'Today' => 'Vandaag',
@ -721,6 +764,7 @@ $SLANG = array(
'VideoGenParms' => 'Videogeneratie Parameters',
'VideoGenSucceeded' => 'Videogeneratie voltooid!',
'VideoSize' => 'Videogrootte',
'VideoWriter' => 'Video Writer', // Added - 2018-08-30
'View' => 'Bekijk',
'ViewAll' => 'Bekijk Alles',
'ViewEvent' => 'Bekijk Gebeurtenis',
@ -730,6 +774,7 @@ $SLANG = array(
'Watch' => 'Observeer',
'Web' => 'Web',
'WebColour' => 'Webkleur',
'WebSiteUrl' => 'Website URL', // Added - 2018-08-30
'Week' => 'Week',
'White' => 'Wit',
'WhiteBalance' => 'Witbalans',

View File

@ -93,6 +93,8 @@ $SLANG = array(
'Actual' => 'Domyślna',
'AddNewControl' => 'Add New Control',
'AddNewMonitor' => 'Dodaj nowy monitor',
'AddNewServer' => 'Add New Server', // Added - 2018-08-30
'AddNewStorage' => 'Add New Storage', // Added - 2018-08-30
'AddNewUser' => 'Dodaj użytkownika',
'AddNewZone' => 'Dodaj nową strefę',
'Alarm' => 'Alarm',
@ -120,22 +122,32 @@ $SLANG = array(
'AttrArchiveStatus' => 'Status archiwum',
'AttrAvgScore' => 'Śred. wynik',
'AttrCause' => 'Powód',
'AttrDate' => 'Data',
'AttrDateTime' => 'Data/Czas',
'AttrDiskBlocks' => 'Dysk Bloki',
'AttrDiskPercent' => 'Procent zajętości',
'AttrDiskSpace' => 'Disk Space', // Added - 2018-08-30
'AttrDuration' => 'Czas trwania',
'AttrEndDate' => 'End Date', // Added - 2018-08-30
'AttrEndDateTime' => 'End Date/Time', // Added - 2018-08-30
'AttrEndTime' => 'End Time', // Added - 2018-08-30
'AttrEndWeekday' => 'End Weekday', // Added - 2018-08-30
'AttrFilterServer' => 'Server Filter is Running On', // Added - 2018-08-30
'AttrFrames' => 'Klatki',
'AttrId' => 'Id',
'AttrMaxScore' => 'Maks. wynik',
'AttrMonitorId' => 'Nr monitora',
'AttrMonitorName' => 'Nazwa monitora',
'AttrMonitorServer' => 'Server Monitor is Running On', // Added - 2018-08-30
'AttrName' => 'Nazwa',
'AttrNotes' => 'Notes',
'AttrStartDate' => 'Start Date', // Added - 2018-08-30
'AttrStartDateTime' => 'Start Date/Time', // Added - 2018-08-30
'AttrStartTime' => 'Start Time', // Added - 2018-08-30
'AttrStartWeekday' => 'Start Weekday', // Added - 2018-08-30
'AttrStateId' => 'Run State', // Added - 2018-08-30
'AttrStorageArea' => 'Storage Area', // Added - 2018-08-30
'AttrStorageServer' => 'Server Hosting Storage', // Added - 2018-08-30
'AttrSystemLoad' => 'Obiążenie systemu',
'AttrTime' => 'Czas',
'AttrTotalScore' => 'Całkowity wynik',
'AttrWeekday' => 'Dzień roboczy',
'Auto' => 'Auto',
'AutoStopTimeout' => 'Auto Stop Timeout',
'Available' => 'Dostępne', // Added - 2009-03-31
@ -168,9 +180,11 @@ $SLANG = array(
'BadRefBlendPerc' => 'Reference blend percentage must be a positive integer',
'BadSectionLength' => 'Section length must be an integer of 30 or more',
'BadSignalCheckColour' => 'Signal check colour must be a valid RGB colour string',
'BadSourceType' => 'Source Type \"Web Site\" requires the Function to be set to \"Monitor\"', // Added - 2018-08-30
'BadStreamReplayBuffer'=> 'Stream replay buffer must be an integer of zero or more',
'BadWarmupCount' => 'Warmup frames must be an integer of zero or more',
'BadWebColour' => 'Web colour must be a valid web colour string',
'BadWebSitePath' => 'Please enter a complete website url, including the http:// or https:// prefix.', // Added - 2018-08-30
'BadWidth' => 'Width must be set to a valid value',
'Bandwidth' => 'Przepustowość',
'BandwidthHead' => 'Przepustowość', // This is the end of the bandwidth status on the top of the console, different in many language due to phrasing
@ -234,10 +248,12 @@ $SLANG = array(
'ChooseLogSelection' => 'Choose a log selection', // Added - 2011-06-17
'ChoosePreset' => 'Choose Preset',
'Clear' => 'Wyczyść', // Added - 2011-06-16
'CloneMonitor' => 'Clone', // Added - 2018-08-30
'Close' => 'Zamknij',
'Colour' => 'Nasycenie',
'Command' => 'Polecenie',
'Component' => 'Komponent', // Added - 2011-06-16
'ConcurrentFilter' => 'Run filter concurrently', // Added - 2018-08-30
'Config' => 'Konfiguracja',
'ConfiguredFor' => 'Ustawiona',
'ConfirmDeleteEvents' => 'Jesteś pewien, że chcesz usunąć zaznaczone zdarzenia?',
@ -295,9 +311,11 @@ $SLANG = array(
'DonateRemindWeek' => 'Not yet, remind again in 1 week',
'DonateYes' => 'Yes, I\'d like to donate now',
'Download' => 'Pobierz',
'DownloadVideo' => 'Download Video', // Added - 2018-08-30
'DuplicateMonitorName' => 'Duplicate Monitor Name', // Added - 2009-03-31
'Duration' => 'Czas trwania',
'Edit' => 'Edycja',
'EditLayout' => 'Edit Layout', // Added - 2018-08-30
'Email' => 'Email',
'EnableAlarms' => 'Enable Alarms',
'Enabled' => 'Aktywny',
@ -314,6 +332,7 @@ $SLANG = array(
'Events' => 'Zdarzenia',
'Exclude' => 'Wyklucz',
'Execute' => 'Wykonaj',
'Exif' => 'Embed EXIF data into image', // Added - 2018-08-30
'Export' => 'Eksport',
'ExportDetails' => 'Eksport szczegółów zdarzenia',
'ExportFailed' => 'Eksport nie powiódł się',
@ -343,8 +362,10 @@ $SLANG = array(
'FilterExecuteEvents' => 'Wywołuj komendę dla wszystkich pasujących',
'FilterLog' => 'Filtr logów', // Added - 2015-04-18
'FilterMessageEvents' => 'Wyświetlaj komunikat na wszystkie pasujące',
'FilterMoveEvents' => 'Move all matches', // Added - 2018-08-30
'FilterPx' => 'Filtr Px',
'FilterUnset' => 'You must specify a filter width and height',
'FilterUpdateDiskSpace'=> 'Update used disk space', // Added - 2018-08-30
'FilterUploadEvents' => 'Wysyłaj wszystkie pasujące',
'FilterVideoEvents' => 'Utwórz nagranie dla zaznaczonych',
'Filters' => 'Filtry',
@ -369,6 +390,7 @@ $SLANG = array(
'Function' => 'Funkcja',
'Gain' => 'Gain',
'General' => 'General',
'GenerateDownload' => 'Generate Download', // Added - 2018-08-30
'GenerateVideo' => 'Generowanie Video',
'GeneratingVideo' => 'Generuję Video',
'GoToZoneMinder' => 'PrzejdŹ na ZoneMinder.com',
@ -389,6 +411,7 @@ $SLANG = array(
'High' => 'wysoka',
'HighBW' => 'Wys.&nbsp;prz.',
'Home' => 'Home',
'Hostname' => 'Hostname', // Added - 2018-08-30
'Hour' => 'Godzina',
'Hue' => 'Odcień',
'Id' => 'Nr',
@ -413,6 +436,7 @@ $SLANG = array(
'Line' => 'Linia', // Added - 2011-06-16
'LinkedMonitors' => 'Połączone monitory',
'List' => 'Lista',
'ListMatches' => 'List Matches', // Added - 2018-08-30
'Load' => 'Obc.',
'Local' => 'Lokalny',
'Log' => 'Logi', // Added - 2011-06-16
@ -499,6 +523,7 @@ $SLANG = array(
'MonitorProbeIntro' => 'The list below shows detected analog and network cameras and whether they are already being used or available for selection.<br/><br/>Select the desired entry from the list below.<br/><br/>Please note that not all cameras may be detected and that choosing a camera here may overwrite any values you already have configured for the current monitor.<br/><br/>', // Added - 2009-03-31
'Monitors' => 'Monitory',
'Montage' => 'Montaż',
'MontageReview' => 'Montage Review', // Added - 2018-08-30
'Month' => 'Miesiąc',
'More' => 'Pokaż więcej', // Added - 2011-06-16
'MotionFrameSkip' => 'Motion Frame Skip',
@ -525,6 +550,7 @@ $SLANG = array(
'Next' => 'Następny',
'No' => 'Nie',
'NoDetectedCameras' => 'Nie wykryto kamer', // Added - 2009-03-31
'NoDetectedProfiles' => 'No Detected Profiles', // Added - 2018-08-30
'NoFramesRecorded' => 'Brak zapisanych ramek dla tego zdarzenia',
'NoGroup' => 'Brak grupy',
'NoSavedFilters' => 'BrakZapisanychFiltrów',
@ -543,6 +569,8 @@ $SLANG = array(
'OpGt' => 'większe od',
'OpGtEq' => 'większe lub równe od',
'OpIn' => 'w zestawie',
'OpIs' => 'is', // Added - 2018-08-30
'OpIsNot' => 'is not', // Added - 2018-08-30
'OpLt' => 'mniejsze od',
'OpLtEq' => 'mniejsze lub równe od',
'OpMatches' => 'pasujące',
@ -552,6 +580,7 @@ $SLANG = array(
'Open' => 'Otwórz',
'OptionHelp' => 'OpcjePomoc',
'OptionRestartWarning' => 'Te zmiany nie przyniosą natychmiastowego efektu\ndopóki system pracuje. Kiedy zakończysz robić zmiany\nproszę koniecznie zrestartować ZoneMinder.',
'OptionalEncoderParam' => 'Optional Encoder Parameters', // Added - 2018-08-30
'Options' => 'Opcje',
'OrEnterNewName' => 'lub wpisz nową nazwę',
'Order' => 'Kolejność',
@ -589,9 +618,13 @@ $SLANG = array(
'ProfileProbeIntro' => 'The list below shows the existing stream profiles of the selected camera .<br/><br/>Select the desired entry from the list below.<br/><br/>Please note that ZoneMinder cannot configure additional profiles and that choosing a camera here may overwrite any values you already have configured for the current monitor.<br/><br/>', // Added - 2015-04-18
'Progress' => 'Postęp', // Added - 2015-04-18
'Protocol' => 'Protocol',
'RTSPDescribe' => 'Use RTSP Response Media URL', // Added - 2018-08-30
'RTSPTransport' => 'RTSP Transport Protocol', // Added - 2018-08-30
'Rate' => 'Tempo',
'Real' => 'Rzeczywiste',
'RecaptchaWarning' => 'Your reCaptcha secret key is invalid. Please correct it, or reCaptcha will not work', // Added - 2018-08-30
'Record' => 'Zapis',
'RecordAudio' => 'Whether to store the audio stream when saving an event.', // Added - 2018-08-30
'RefImageBlendPct' => 'Miks z obrazem odniesienia',
'Refresh' => 'Odśwież',
'Remote' => 'Zdalny',
@ -607,6 +640,7 @@ $SLANG = array(
'ReplayAll' => 'Wszystko',
'ReplayGapless' => 'Wszystko i powtarzaj',
'ReplaySingle' => 'Bieżące zdarzenie',
'ReportEventAudit' => 'Audit Events Report', // Added - 2018-08-30
'Reset' => 'Reset',
'ResetEventCounts' => 'Kasuj licznik zdarzeń',
'Restart' => 'Restart',
@ -625,6 +659,7 @@ $SLANG = array(
'Save' => 'Zapisz',
'SaveAs' => 'Zapisz jako',
'SaveFilter' => 'Zapisz filtr',
'SaveJPEGs' => 'Save JPEGs', // Added - 2018-08-30
'Scale' => 'Skala',
'Score' => 'Wynik',
'Secs' => 'Sekund',
@ -641,6 +676,7 @@ $SLANG = array(
'ShowFilterWindow' => 'PokażOknoFiltru',
'ShowTimeline' => 'Pokaż oś czasu',
'SignalCheckColour' => 'Signal Check Colour',
'SignalCheckPoints' => 'Signal Check Points', // Added - 2018-08-30
'Size' => 'Rozmiar',
'SkinDescription' => 'Change the default skin for this computer', // Added - 2011-01-30
'Sleep' => 'Sleep',
@ -660,6 +696,10 @@ $SLANG = array(
'State' => 'Stan',
'Stats' => 'Statystyki',
'Status' => 'Status',
'StatusConnected' => 'Capturing', // Added - 2018-08-30
'StatusNotRunning' => 'Not Running', // Added - 2018-08-30
'StatusRunning' => 'Not Capturing', // Added - 2018-08-30
'StatusUnknown' => 'Unknown', // Added - 2018-08-30
'Step' => 'Krok',
'StepBack' => 'Step Back',
'StepForward' => 'Step Forward',
@ -670,6 +710,8 @@ $SLANG = array(
'Stills' => 'Podgląd klatek',
'Stop' => 'Stop',
'Stopped' => 'Zatrzymany',
'StorageArea' => 'Storage Area', // Added - 2018-08-30
'StorageScheme' => 'Scheme', // Added - 2018-08-30
'Stream' => 'Odtwarzacz',
'StreamReplayBuffer' => 'Stream Replay Image Buffer',
'Submit' => 'Zatwierdź',
@ -689,6 +731,7 @@ $SLANG = array(
'TimelineTip4' => 'Użyj opcji poniżej, w celu nawigacji.', // Added 2013.08.15.
'Timestamp' => 'Czas',
'TimestampLabelFormat' => 'Format etykiety czasu',
'TimestampLabelSize' => 'Font Size', // Added - 2018-08-30
'TimestampLabelX' => 'Wsp. X etykiety czasu',
'TimestampLabelY' => 'Wsp. Y etykiety czasu',
'Today' => 'Dziś',
@ -735,6 +778,7 @@ $SLANG = array(
'VideoGenParms' => 'Parametery generowania filmu Video',
'VideoGenSucceeded' => 'Wygenerowano pomyślnie!',
'VideoSize' => 'Rozmiar filmu Video',
'VideoWriter' => 'Video Writer', // Added - 2018-08-30
'View' => 'Podgląd',
'ViewAll' => 'Pokaż wszystko',
'ViewEvent' => 'Pokaż zdarzenie',
@ -744,6 +788,7 @@ $SLANG = array(
'Watch' => 'podgląd',
'Web' => 'Sieć',
'WebColour' => 'Web Colour',
'WebSiteUrl' => 'Website URL', // Added - 2018-08-30
'Week' => 'Tydzień',
'White' => 'Biel',
'WhiteBalance' => 'Balans bieli',

View File

@ -18,6 +18,8 @@ $SLANG = array(
'Actual' => 'Atual',
'AddNewControl' => 'Add New Control',
'AddNewMonitor' => 'Adicionar Monitor',
'AddNewServer' => 'Add New Server', // Added - 2018-08-30
'AddNewStorage' => 'Add New Storage', // Added - 2018-08-30
'AddNewUser' => 'Adicionar Usuário',
'AddNewZone' => 'Adicionar Zona',
'Alarm' => 'Alarme',
@ -45,22 +47,32 @@ $SLANG = array(
'AttrArchiveStatus' => 'Status/Arquivamento',
'AttrAvgScore' => 'Maior Score',
'AttrCause' => 'Cause',
'AttrDate' => 'Data',
'AttrDateTime' => 'Data/Horario',
'AttrDiskBlocks' => 'Blocos de Disco',
'AttrDiskPercent' => 'Porcentagem de Disco',
'AttrDiskSpace' => 'Disk Space', // Added - 2018-08-30
'AttrDuration' => 'Duração',
'AttrEndDate' => 'End Date', // Added - 2018-08-30
'AttrEndDateTime' => 'End Date/Time', // Added - 2018-08-30
'AttrEndTime' => 'End Time', // Added - 2018-08-30
'AttrEndWeekday' => 'End Weekday', // Added - 2018-08-30
'AttrFilterServer' => 'Server Filter is Running On', // Added - 2018-08-30
'AttrFrames' => 'Imagens',
'AttrId' => 'Id',
'AttrMaxScore' => 'Max. Score',
'AttrMonitorId' => 'Id do Monitor',
'AttrMonitorName' => 'Nome do Monitor',
'AttrMonitorServer' => 'Server Monitor is Running On', // Added - 2018-08-30
'AttrName' => 'Nome',
'AttrNotes' => 'Notes',
'AttrStartDate' => 'Start Date', // Added - 2018-08-30
'AttrStartDateTime' => 'Start Date/Time', // Added - 2018-08-30
'AttrStartTime' => 'Start Time', // Added - 2018-08-30
'AttrStartWeekday' => 'Start Weekday', // Added - 2018-08-30
'AttrStateId' => 'Run State', // Added - 2018-08-30
'AttrStorageArea' => 'Storage Area', // Added - 2018-08-30
'AttrStorageServer' => 'Server Hosting Storage', // Added - 2018-08-30
'AttrSystemLoad' => 'System Load',
'AttrTime' => 'Horário',
'AttrTotalScore' => 'Score Total',
'AttrWeekday' => 'Dia/Semana',
'Auto' => 'Auto',
'AutoStopTimeout' => 'Auto Stop Timeout',
'Available' => 'Available', // Added - 2009-03-31
@ -93,9 +105,11 @@ $SLANG = array(
'BadRefBlendPerc' => 'Reference blend percentage must be a positive integer',
'BadSectionLength' => 'Section length must be an integer of 30 or more',
'BadSignalCheckColour' => 'Signal check colour must be a valid RGB colour string',
'BadSourceType' => 'Source Type \"Web Site\" requires the Function to be set to \"Monitor\"', // Added - 2018-08-30
'BadStreamReplayBuffer'=> 'Stream replay buffer must be an integer of zero or more',
'BadWarmupCount' => 'Warmup frames must be an integer of zero or more',
'BadWebColour' => 'Web colour must be a valid web colour string',
'BadWebSitePath' => 'Please enter a complete website url, including the http:// or https:// prefix.', // Added - 2018-08-30
'BadWidth' => 'Width must be set to a valid value',
'Bandwidth' => 'Larg/Banda',
'BandwidthHead' => 'Bandwidth', // This is the end of the bandwidth status on the top of the console, different in many language due to phrasing
@ -159,10 +173,12 @@ $SLANG = array(
'ChooseLogSelection' => 'Choose a log selection', // Added - 2011-06-17
'ChoosePreset' => 'Choose Preset',
'Clear' => 'Clear', // Added - 2011-06-16
'CloneMonitor' => 'Clone', // Added - 2018-08-30
'Close' => 'Fechar',
'Colour' => 'Cor',
'Command' => 'Command',
'Component' => 'Component', // Added - 2011-06-16
'ConcurrentFilter' => 'Run filter concurrently', // Added - 2018-08-30
'Config' => 'Config',
'ConfiguredFor' => 'Configurado para',
'ConfirmDeleteEvents' => 'Are you sure you wish to delete the selected events?',
@ -220,9 +236,11 @@ $SLANG = array(
'DonateRemindWeek' => 'Not yet, remind again in 1 week',
'DonateYes' => 'Yes, I\'d like to donate now',
'Download' => 'Download',
'DownloadVideo' => 'Download Video', // Added - 2018-08-30
'DuplicateMonitorName' => 'Duplicate Monitor Name', // Added - 2009-03-31
'Duration' => 'Duração',
'Edit' => 'Editar',
'EditLayout' => 'Edit Layout', // Added - 2018-08-30
'Email' => 'Email',
'EnableAlarms' => 'Enable Alarms',
'Enabled' => 'Habilitado',
@ -239,6 +257,7 @@ $SLANG = array(
'Events' => 'Eventos',
'Exclude' => 'Excluir',
'Execute' => 'Execute',
'Exif' => 'Embed EXIF data into image', // Added - 2018-08-30
'Export' => 'Export',
'ExportDetails' => 'Export Event Details',
'ExportFailed' => 'Export Failed',
@ -268,8 +287,10 @@ $SLANG = array(
'FilterExecuteEvents' => 'Executar comando p/ resultados',
'FilterLog' => 'Filter log', // Added - 2015-04-18
'FilterMessageEvents' => 'Enviar Mensagem dos resultados',
'FilterMoveEvents' => 'Move all matches', // Added - 2018-08-30
'FilterPx' => 'Px de Filtro',
'FilterUnset' => 'You must specify a filter width and height',
'FilterUpdateDiskSpace'=> 'Update used disk space', // Added - 2018-08-30
'FilterUploadEvents' => 'Fazer upload dos resultados',
'FilterVideoEvents' => 'Create video for all matches',
'Filters' => 'Filters',
@ -294,6 +315,7 @@ $SLANG = array(
'Function' => 'Função',
'Gain' => 'Gain',
'General' => 'General',
'GenerateDownload' => 'Generate Download', // Added - 2018-08-30
'GenerateVideo' => 'Gerar Video',
'GeneratingVideo' => 'Gerando Video',
'GoToZoneMinder' => 'Ir Para ZoneMinder.com',
@ -314,6 +336,7 @@ $SLANG = array(
'High' => 'Alto',
'HighBW' => 'Alta&nbsp;L/B',
'Home' => 'Home',
'Hostname' => 'Hostname', // Added - 2018-08-30
'Hour' => 'Hora',
'Hue' => 'Saturação',
'Id' => 'Id',
@ -338,6 +361,7 @@ $SLANG = array(
'Line' => 'Line', // Added - 2011-06-16
'LinkedMonitors' => 'Linked Monitors',
'List' => 'List',
'ListMatches' => 'List Matches', // Added - 2018-08-30
'Load' => 'Carga',
'Local' => 'Local',
'Log' => 'Log', // Added - 2011-06-16
@ -424,6 +448,7 @@ $SLANG = array(
'MonitorProbeIntro' => 'The list below shows detected analog and network cameras and whether they are already being used or available for selection.<br/><br/>Select the desired entry from the list below.<br/><br/>Please note that not all cameras may be detected and that choosing a camera here may overwrite any values you already have configured for the current monitor.<br/><br/>', // Added - 2009-03-31
'Monitors' => 'Monitores',
'Montage' => 'Montagem',
'MontageReview' => 'Montage Review', // Added - 2018-08-30
'Month' => 'Mês',
'More' => 'More', // Added - 2011-06-16
'MotionFrameSkip' => 'Motion Frame Skip',
@ -450,6 +475,7 @@ $SLANG = array(
'Next' => 'Próx',
'No' => 'Não',
'NoDetectedCameras' => 'No Detected Cameras', // Added - 2009-03-31
'NoDetectedProfiles' => 'No Detected Profiles', // Added - 2018-08-30
'NoFramesRecorded' => 'Não há imagens gravadas neste evento',
'NoGroup' => 'No Group',
'NoSavedFilters' => 'SemFiltrosSalvos',
@ -468,6 +494,8 @@ $SLANG = array(
'OpGt' => 'maior que',
'OpGtEq' => 'maior que ou igual a',
'OpIn' => 'no set',
'OpIs' => 'is', // Added - 2018-08-30
'OpIsNot' => 'is not', // Added - 2018-08-30
'OpLt' => 'menor que',
'OpLtEq' => 'menor que ou igual a',
'OpMatches' => 'combina',
@ -477,6 +505,7 @@ $SLANG = array(
'Open' => 'Open',
'OptionHelp' => 'OpçãoAjuda',
'OptionRestartWarning' => 'Reinicie o Zoneminder para que as mudanças tenham efeito',
'OptionalEncoderParam' => 'Optional Encoder Parameters', // Added - 2018-08-30
'Options' => 'Opções',
'OrEnterNewName' => 'ou defina novo nome',
'Order' => 'Order',
@ -514,9 +543,13 @@ $SLANG = array(
'ProfileProbeIntro' => 'The list below shows the existing stream profiles of the selected camera .<br/><br/>Select the desired entry from the list below.<br/><br/>Please note that ZoneMinder cannot configure additional profiles and that choosing a camera here may overwrite any values you already have configured for the current monitor.<br/><br/>', // Added - 2015-04-18
'Progress' => 'Progress', // Added - 2015-04-18
'Protocol' => 'Protocol',
'RTSPDescribe' => 'Use RTSP Response Media URL', // Added - 2018-08-30
'RTSPTransport' => 'RTSP Transport Protocol', // Added - 2018-08-30
'Rate' => 'Vel.',
'Real' => 'Real',
'RecaptchaWarning' => 'Your reCaptcha secret key is invalid. Please correct it, or reCaptcha will not work', // Added - 2018-08-30
'Record' => 'Gravar',
'RecordAudio' => 'Whether to store the audio stream when saving an event.', // Added - 2018-08-30
'RefImageBlendPct' => 'Referência de imagem Blend %ge',
'Refresh' => 'Atualizar',
'Remote' => 'Remoto',
@ -532,6 +565,7 @@ $SLANG = array(
'ReplayAll' => 'All Events',
'ReplayGapless' => 'Gapless Events',
'ReplaySingle' => 'Single Event',
'ReportEventAudit' => 'Audit Events Report', // Added - 2018-08-30
'Reset' => 'Reset',
'ResetEventCounts' => 'Resetar contagem de eventos',
'Restart' => 'Reiniciar',
@ -550,6 +584,7 @@ $SLANG = array(
'Save' => 'Salvar',
'SaveAs' => 'Salvar Como',
'SaveFilter' => 'Salvar Filtro',
'SaveJPEGs' => 'Save JPEGs', // Added - 2018-08-30
'Scale' => 'Tamanho',
'Score' => 'Score',
'Secs' => 'Segs',
@ -566,6 +601,7 @@ $SLANG = array(
'ShowFilterWindow' => 'MostrarJanelaDeFiltros',
'ShowTimeline' => 'Show Timeline',
'SignalCheckColour' => 'Signal Check Colour',
'SignalCheckPoints' => 'Signal Check Points', // Added - 2018-08-30
'Size' => 'Size',
'SkinDescription' => 'Change the default skin for this computer', // Added - 2011-01-30
'Sleep' => 'Sleep',
@ -585,6 +621,10 @@ $SLANG = array(
'State' => 'Estado',
'Stats' => 'Status',
'Status' => 'Status',
'StatusConnected' => 'Capturing', // Added - 2018-08-30
'StatusNotRunning' => 'Not Running', // Added - 2018-08-30
'StatusRunning' => 'Not Capturing', // Added - 2018-08-30
'StatusUnknown' => 'Unknown', // Added - 2018-08-30
'Step' => 'Step',
'StepBack' => 'Step Back',
'StepForward' => 'Step Forward',
@ -595,6 +635,8 @@ $SLANG = array(
'Stills' => 'Imagens',
'Stop' => 'Parar',
'Stopped' => 'Parado',
'StorageArea' => 'Storage Area', // Added - 2018-08-30
'StorageScheme' => 'Scheme', // Added - 2018-08-30
'Stream' => 'Contínuo',
'StreamReplayBuffer' => 'Stream Replay Image Buffer',
'Submit' => 'Submit',
@ -614,6 +656,7 @@ $SLANG = array(
'TimelineTip4' => 'Use the controls below to zoom out or navigate back and forward through the time range.', // Added 2013.08.15.
'Timestamp' => 'Tempo',
'TimestampLabelFormat' => 'Formato de etiqueta de tempo',
'TimestampLabelSize' => 'Font Size', // Added - 2018-08-30
'TimestampLabelX' => 'posição de etiqueta X',
'TimestampLabelY' => 'posição de etiqueta Y',
'Today' => 'Today',
@ -660,6 +703,7 @@ $SLANG = array(
'VideoGenParms' => 'Parametros de geração de vídeo',
'VideoGenSucceeded' => 'Video Generation Succeeded!',
'VideoSize' => 'Tamanho do vídeo',
'VideoWriter' => 'Video Writer', // Added - 2018-08-30
'View' => 'Ver',
'ViewAll' => 'Ver Tudo',
'ViewEvent' => 'View Event',
@ -669,6 +713,7 @@ $SLANG = array(
'Watch' => 'Assistir',
'Web' => 'Web',
'WebColour' => 'Web Colour',
'WebSiteUrl' => 'Website URL', // Added - 2018-08-30
'Week' => 'Semana',
'White' => 'White',
'WhiteBalance' => 'White Balance',

View File

@ -49,6 +49,8 @@ $SLANG = array(
'Actual' => 'Real',
'AddNewControl' => 'Adaug&#259; control nou',
'AddNewMonitor' => 'Adaug&#259; monitor',
'AddNewServer' => 'Add New Server', // Added - 2018-08-30
'AddNewStorage' => 'Add New Storage', // Added - 2018-08-30
'AddNewUser' => 'Adaug&#259; utilizator',
'AddNewZone' => 'Adaug&#259; zon&#259;',
'Alarm' => 'Alarma',
@ -76,22 +78,32 @@ $SLANG = array(
'AttrArchiveStatus' => 'Stare arhiva',
'AttrAvgScore' => 'Cota medie',
'AttrCause' => 'Cauza',
'AttrDate' => 'Data',
'AttrDateTime' => 'Data/Timp',
'AttrDiskBlocks' => 'Disk Blocks',
'AttrDiskPercent' => 'Procentaj disc',
'AttrDiskSpace' => 'Disk Space', // Added - 2018-08-30
'AttrDuration' => 'Durata',
'AttrEndDate' => 'End Date', // Added - 2018-08-30
'AttrEndDateTime' => 'End Date/Time', // Added - 2018-08-30
'AttrEndTime' => 'End Time', // Added - 2018-08-30
'AttrEndWeekday' => 'End Weekday', // Added - 2018-08-30
'AttrFilterServer' => 'Server Filter is Running On', // Added - 2018-08-30
'AttrFrames' => 'Cadre',
'AttrId' => 'Nr.',
'AttrMaxScore' => 'Cota max',
'AttrMonitorId' => 'Monitor nr.',
'AttrMonitorName' => 'Nume monitor',
'AttrMonitorServer' => 'Server Monitor is Running On', // Added - 2018-08-30
'AttrName' => 'Nume',
'AttrNotes' => 'Notes',
'AttrStartDate' => 'Start Date', // Added - 2018-08-30
'AttrStartDateTime' => 'Start Date/Time', // Added - 2018-08-30
'AttrStartTime' => 'Start Time', // Added - 2018-08-30
'AttrStartWeekday' => 'Start Weekday', // Added - 2018-08-30
'AttrStateId' => 'Run State', // Added - 2018-08-30
'AttrStorageArea' => 'Storage Area', // Added - 2018-08-30
'AttrStorageServer' => 'Server Hosting Storage', // Added - 2018-08-30
'AttrSystemLoad' => 'System Load',
'AttrTime' => 'Time',
'AttrTotalScore' => 'Cota total',
'AttrWeekday' => 'Zi s&#259;pt.',
'Auto' => 'Auto',
'AutoStopTimeout' => 'Auto Stop Timeout',
'Available' => 'Available', // Added - 2009-03-31
@ -124,9 +136,11 @@ $SLANG = array(
'BadRefBlendPerc' => 'Reference blend percentage must be a positive integer',
'BadSectionLength' => 'Section length must be an integer of 30 or more',
'BadSignalCheckColour' => 'Signal check colour must be a valid RGB colour string',
'BadSourceType' => 'Source Type \"Web Site\" requires the Function to be set to \"Monitor\"', // Added - 2018-08-30
'BadStreamReplayBuffer'=> 'Stream replay buffer must be an integer of zero or more',
'BadWarmupCount' => 'Warmup frames must be an integer of zero or more',
'BadWebColour' => 'Web colour must be a valid web colour string',
'BadWebSitePath' => 'Please enter a complete website url, including the http:// or https:// prefix.', // Added - 2018-08-30
'BadWidth' => 'Width must be set to a valid value',
'Bandwidth' => 'La&#355;ime de band&#259;',
'BandwidthHead' => 'Bandwidth', // This is the end of the bandwidth status on the top of the console, different in many language due to phrasing
@ -190,10 +204,12 @@ $SLANG = array(
'ChooseLogSelection' => 'Choose a log selection', // Added - 2011-06-17
'ChoosePreset' => 'Choose Preset',
'Clear' => 'Clear', // Added - 2011-06-16
'CloneMonitor' => 'Clone', // Added - 2018-08-30
'Close' => '&#206;nchide',
'Colour' => 'Culoare',
'Command' => 'Comanda',
'Component' => 'Component', // Added - 2011-06-16
'ConcurrentFilter' => 'Run filter concurrently', // Added - 2018-08-30
'Config' => 'Config',
'ConfiguredFor' => 'Configurat pentru',
'ConfirmDeleteEvents' => 'Are you sure you wish to delete the selected events?',
@ -251,9 +267,11 @@ $SLANG = array(
'DonateRemindWeek' => 'Not yet, remind again in 1 week',
'DonateYes' => 'Yes, I\'d like to donate now',
'Download' => 'Download',
'DownloadVideo' => 'Download Video', // Added - 2018-08-30
'DuplicateMonitorName' => 'Duplicate Monitor Name', // Added - 2009-03-31
'Duration' => 'Durata',
'Edit' => 'Modific',
'EditLayout' => 'Edit Layout', // Added - 2018-08-30
'Email' => 'Email',
'EnableAlarms' => 'Enable Alarms',
'Enabled' => 'Activ',
@ -270,6 +288,7 @@ $SLANG = array(
'Events' => 'Evenim.',
'Exclude' => 'Exclude',
'Execute' => 'Execute',
'Exif' => 'Embed EXIF data into image', // Added - 2018-08-30
'Export' => 'Export',
'ExportDetails' => 'Export Event Details',
'ExportFailed' => 'Export Failed',
@ -299,8 +318,10 @@ $SLANG = array(
'FilterExecuteEvents' => 'Execut&#259; comanda pentru toate rezultatele',
'FilterLog' => 'Filter log', // Added - 2015-04-18
'FilterMessageEvents' => 'Trimite mesaj pentru toate rezultatele',
'FilterMoveEvents' => 'Move all matches', // Added - 2018-08-30
'FilterPx' => 'Filter Px',
'FilterUnset' => 'You must specify a filter width and height',
'FilterUpdateDiskSpace'=> 'Update used disk space', // Added - 2018-08-30
'FilterUploadEvents' => '&#206;ncarc&#259; toate rezultatele',
'FilterVideoEvents' => 'Create video for all matches',
'Filters' => 'Filters',
@ -325,6 +346,7 @@ $SLANG = array(
'Function' => 'Func&#355;ie',
'Gain' => 'Gain',
'General' => 'General',
'GenerateDownload' => 'Generate Download', // Added - 2018-08-30
'GenerateVideo' => 'Genereaz&#259; video',
'GeneratingVideo' => 'Generez video',
'GoToZoneMinder' => 'Du-te la ZoneMinder.com',
@ -345,6 +367,7 @@ $SLANG = array(
'High' => 'Mare',
'HighBW' => 'B/W&nbsp;mare',
'Home' => 'Home',
'Hostname' => 'Hostname', // Added - 2018-08-30
'Hour' => 'Ora',
'Hue' => 'Nuan&#355;&#259;',
'Id' => 'Nr.',
@ -369,6 +392,7 @@ $SLANG = array(
'Line' => 'Line', // Added - 2011-06-16
'LinkedMonitors' => 'Linked Monitors',
'List' => 'List',
'ListMatches' => 'List Matches', // Added - 2018-08-30
'Load' => 'Load',
'Local' => 'Local',
'Log' => 'Log', // Added - 2011-06-16
@ -455,6 +479,7 @@ $SLANG = array(
'MonitorProbeIntro' => 'The list below shows detected analog and network cameras and whether they are already being used or available for selection.<br/><br/>Select the desired entry from the list below.<br/><br/>Please note that not all cameras may be detected and that choosing a camera here may overwrite any values you already have configured for the current monitor.<br/><br/>', // Added - 2009-03-31
'Monitors' => 'Monitoare',
'Montage' => 'Montage',
'MontageReview' => 'Montage Review', // Added - 2018-08-30
'Month' => 'Luna',
'More' => 'More', // Added - 2011-06-16
'MotionFrameSkip' => 'Motion Frame Skip',
@ -481,6 +506,7 @@ $SLANG = array(
'Next' => 'Urmator',
'No' => 'Nu',
'NoDetectedCameras' => 'No Detected Cameras', // Added - 2009-03-31
'NoDetectedProfiles' => 'No Detected Profiles', // Added - 2018-08-30
'NoFramesRecorded' => 'Nu exista cadre inregistrate pentru acest eveniment.',
'NoGroup' => 'No Group',
'NoSavedFilters' => 'LipsaFiltruSalvat',
@ -499,6 +525,8 @@ $SLANG = array(
'OpGt' => 'mai mare ca',
'OpGtEq' => 'mai mare sau egal cu',
'OpIn' => 'in set',
'OpIs' => 'is', // Added - 2018-08-30
'OpIsNot' => 'is not', // Added - 2018-08-30
'OpLt' => 'mai mic dec&#226;t',
'OpLtEq' => 'mai mic sau egal cu',
'OpMatches' => 'matches',
@ -508,6 +536,7 @@ $SLANG = array(
'Open' => 'Deschide',
'OptionHelp' => 'OptionHelp',
'OptionRestartWarning' => 'Aceste schimbari nu se aplica in timpul rularii.\n Dupa ce ati terminat setarile va rugam reporniti ZoneMinder.',
'OptionalEncoderParam' => 'Optional Encoder Parameters', // Added - 2018-08-30
'Options' => 'Op&#355;iuni',
'OrEnterNewName' => 'sau denumire nou&#259;',
'Order' => 'Order',
@ -545,9 +574,13 @@ $SLANG = array(
'ProfileProbeIntro' => 'The list below shows the existing stream profiles of the selected camera .<br/><br/>Select the desired entry from the list below.<br/><br/>Please note that ZoneMinder cannot configure additional profiles and that choosing a camera here may overwrite any values you already have configured for the current monitor.<br/><br/>', // Added - 2015-04-18
'Progress' => 'Progress', // Added - 2015-04-18
'Protocol' => 'Protocol',
'RTSPDescribe' => 'Use RTSP Response Media URL', // Added - 2018-08-30
'RTSPTransport' => 'RTSP Transport Protocol', // Added - 2018-08-30
'Rate' => 'Rate',
'Real' => 'Real',
'RecaptchaWarning' => 'Your reCaptcha secret key is invalid. Please correct it, or reCaptcha will not work', // Added - 2018-08-30
'Record' => '&#206;nregistrare',
'RecordAudio' => 'Whether to store the audio stream when saving an event.', // Added - 2018-08-30
'RefImageBlendPct' => 'Combinare imagine referinta(%)',
'Refresh' => 'Actualizeaz&#259;',
'Remote' => 'Remote',
@ -563,6 +596,7 @@ $SLANG = array(
'ReplayAll' => 'All Events',
'ReplayGapless' => 'Gapless Events',
'ReplaySingle' => 'Single Event',
'ReportEventAudit' => 'Audit Events Report', // Added - 2018-08-30
'Reset' => 'Reset',
'ResetEventCounts' => 'Reset Event Counts',
'Restart' => 'Reporne&#351;te',
@ -581,6 +615,7 @@ $SLANG = array(
'Save' => 'Salvez',
'SaveAs' => 'Salveaz&#259; ca',
'SaveFilter' => 'Salveaz&#259; filtru',
'SaveJPEGs' => 'Save JPEGs', // Added - 2018-08-30
'Scale' => 'Scara',
'Score' => 'Cota',
'Secs' => 'Sec',
@ -597,6 +632,7 @@ $SLANG = array(
'ShowFilterWindow' => 'Fereastra filtre',
'ShowTimeline' => 'Show Timeline',
'SignalCheckColour' => 'Signal Check Colour',
'SignalCheckPoints' => 'Signal Check Points', // Added - 2018-08-30
'Size' => 'Size',
'SkinDescription' => 'Change the default skin for this computer', // Added - 2011-01-30
'Sleep' => 'Sleep',
@ -616,6 +652,10 @@ $SLANG = array(
'State' => 'Stare',
'Stats' => 'Statistici',
'Status' => 'Stare',
'StatusConnected' => 'Capturing', // Added - 2018-08-30
'StatusNotRunning' => 'Not Running', // Added - 2018-08-30
'StatusRunning' => 'Not Capturing', // Added - 2018-08-30
'StatusUnknown' => 'Unknown', // Added - 2018-08-30
'Step' => 'Step',
'StepBack' => 'Step Back',
'StepForward' => 'Step Forward',
@ -626,6 +666,8 @@ $SLANG = array(
'Stills' => 'Statice',
'Stop' => 'Opre&#351;te',
'Stopped' => 'Oprit',
'StorageArea' => 'Storage Area', // Added - 2018-08-30
'StorageScheme' => 'Scheme', // Added - 2018-08-30
'Stream' => 'Flux',
'StreamReplayBuffer' => 'Stream Replay Image Buffer',
'Submit' => 'Trimite',
@ -645,6 +687,7 @@ $SLANG = array(
'TimelineTip4' => 'Use the controls below to zoom out or navigate back and forward through the time range.', // Added 2013.08.15.
'Timestamp' => 'Format&nbsp;timp',
'TimestampLabelFormat' => 'Format eticheta format timp',
'TimestampLabelSize' => 'Font Size', // Added - 2018-08-30
'TimestampLabelX' => 'Format timp eticheta X',
'TimestampLabelY' => 'Format timp eticheta Y',
'Today' => 'Azi',
@ -691,6 +734,7 @@ $SLANG = array(
'VideoGenParms' => 'Parametrii generare video',
'VideoGenSucceeded' => 'Video Generation Succeeded!',
'VideoSize' => 'M&#259;rime video',
'VideoWriter' => 'Video Writer', // Added - 2018-08-30
'View' => 'Vizual',
'ViewAll' => 'Vizual. tot',
'ViewEvent' => 'View Event',
@ -700,6 +744,7 @@ $SLANG = array(
'Watch' => 'Watch',
'Web' => 'Web',
'WebColour' => 'Web Colour',
'WebSiteUrl' => 'Website URL', // Added - 2018-08-30
'Week' => 'S&#259;pt.',
'White' => 'Alb',
'WhiteBalance' => 'Balans alb',

View File

@ -76,8 +76,11 @@ $SLANG = array(
'32BitColour' => '32 битный цвет', // Added - 2011-06-15
'8BitGrey' => '256 оттенков серого',
'Action' => 'Действие',
'Actual' => 'Actual', // Added - 2018-08-30
'AddNewControl' => 'Добавить новый',
'AddNewMonitor' => 'Добавить монитор',
'AddNewServer' => 'Add New Server', // Added - 2018-08-30
'AddNewStorage' => 'Add New Storage', // Added - 2018-08-30
'AddNewUser' => 'Добавить пользователя',
'AddNewZone' => 'Добавить зону',
'Alarm' => 'Тревога',
@ -89,7 +92,6 @@ $SLANG = array(
'AlarmPx' => 'Пкс&nbsp;трев.',
'AlarmRGBUnset' => 'You must set an alarm RGB colour',
'AlarmRefImageBlendPct'=> 'Смешение опорного кадра тревоги, %', // Added - 2015-04-18
'AlmRefImageBlendPct' => 'Смешение опорного кадра тревоги, %',
'Alert' => 'Настороже',
'All' => 'Все',
'AnalysisFPS' => 'Частота анализа (к/с)', // Added - 2015-07-22
@ -106,24 +108,32 @@ $SLANG = array(
'AttrArchiveStatus' => 'Статус архивации',
'AttrAvgScore' => 'Сред. оценка',
'AttrCause' => 'Причина',
'AttrDate' => 'Дата',
'AttrDateTime' => 'Дата/Время',
'AttrDiskBlocks' => 'Диск, блоки',
'AttrDiskPercent' => 'Диск, проценты',
'AttrDiskSpace' => 'Disk Space', // Added - 2018-08-30
'AttrDuration' => 'Длительность',
'AttrEndDate' => 'End Date', // Added - 2018-08-30
'AttrEndDateTime' => 'End Date/Time', // Added - 2018-08-30
'AttrEndTime' => 'End Time', // Added - 2018-08-30
'AttrEndWeekday' => 'End Weekday', // Added - 2018-08-30
'AttrFilterServer' => 'Server Filter is Running On', // Added - 2018-08-30
'AttrFrames' => 'Кол-во кадров',
'AttrId' => 'ИД',
'AttrMaxScore' => 'Макс. оценка',
'AttrMonitorId' => 'ИД Монитора',
'AttrMonitorName' => 'Название Монитора',
'AttrMonitorServer' => 'Server Monitor is Running On', // Added - 2018-08-30
'AttrName' => 'Имя',
'AttrNotes' => 'Примечание',
'AttrServerId' => 'ИД сервера',
'AttrServerName' => 'Имя сервера',
'AttrStartDate' => 'Start Date', // Added - 2018-08-30
'AttrStartDateTime' => 'Start Date/Time', // Added - 2018-08-30
'AttrStartTime' => 'Start Time', // Added - 2018-08-30
'AttrStartWeekday' => 'Start Weekday', // Added - 2018-08-30
'AttrStateId' => 'Run State', // Added - 2018-08-30
'AttrStorageArea' => 'Storage Area', // Added - 2018-08-30
'AttrStorageServer' => 'Server Hosting Storage', // Added - 2018-08-30
'AttrSystemLoad' => 'Нагрузка проц.',
'AttrTime' => 'Время',
'AttrTotalScore' => 'Сумм. оценка',
'AttrWeekday' => 'День недели',
'Auto' => 'Auto',
'AutoStopTimeout' => 'Тайм-аут автоостановки',
'Available' => 'Доступно', // Added - 2009-03-31
@ -156,9 +166,11 @@ $SLANG = array(
'BadRefBlendPerc' => 'Смешение опорного кадра должно быть положительным и целочисленным',
'BadSectionLength' => 'Длина секции должна быть целочисленной и большей либо равной тридцати',
'BadSignalCheckColour' => 'Цвет проверки сигнала должен быть правильной строкой формата RGB',
'BadSourceType' => 'Source Type \"Web Site\" requires the Function to be set to \"Monitor\"', // Added - 2018-08-30
'BadStreamReplayBuffer'=> 'Буфер потока повторного воспроизведения должен быть целочисленным и большим либо равным нулю',
'BadWarmupCount' => 'Кол-во кадров разогрева должно быть целочисленным и большим либо равным нулю',
'BadWebColour' => 'Цвет отметки должен быть правильным Web-цветом',
'BadWebSitePath' => 'Please enter a complete website url, including the http:// or https:// prefix.', // Added - 2018-08-30
'BadWidth' => 'Неправильная ширина',
'Bandwidth' => 'канал',
'BandwidthHead' => 'канал', // This is the end of the bandwidth status on the top of the console, different in many language due to phrasing;
@ -222,10 +234,12 @@ $SLANG = array(
'ChooseLogSelection' => 'Choose a log selection', // Added - 2011-06-17
'ChoosePreset' => 'Выберите предустановку',
'Clear' => 'Очистить', // Added - 2011-06-16
'CloneMonitor' => 'Clone', // Added - 2018-08-30
'Close' => 'Закрыть',
'Colour' => 'Цвет',
'Command' => 'Command',
'Component' => 'Компонент', // Added - 2011-06-16
'ConcurrentFilter' => 'Run filter concurrently', // Added - 2018-08-30
'Config' => 'Config',
'ConfiguredFor' => 'настроен на',
'ConfirmDeleteEvents' => 'Вы действительно хотите удалить выбранные события?',
@ -283,9 +297,11 @@ $SLANG = array(
'DonateRemindWeek' => 'Нет, не сейчас, напомнить через неделю',
'DonateYes' => 'Да, я хотел бы сделать пожертвование',
'Download' => 'Скачать',
'DownloadVideo' => 'Download Video', // Added - 2018-08-30
'DuplicateMonitorName' => 'Duplicate Monitor Name', // Added - 2009-03-31
'Duration' => 'Длительность',
'Edit' => 'Редактирование',
'EditLayout' => 'Edit Layout', // Added - 2018-08-30
'Email' => 'Email',
'EnableAlarms' => 'Разрешить тревогу',
'Enabled' => 'Включен',
@ -302,6 +318,7 @@ $SLANG = array(
'Events' => 'События',
'Exclude' => 'Исключить',
'Execute' => 'Выполнить',
'Exif' => 'Embed EXIF data into image', // Added - 2018-08-30
'Export' => 'Экспорт',
'ExportDetails' => 'Экспортировать описание события',
'ExportFailed' => 'Ошибка экспорта',
@ -331,8 +348,10 @@ $SLANG = array(
'FilterExecuteEvents' => 'Выполнить команду над выбранным',
'FilterLog' => 'Фильтр лога', // Added - 2015-04-18
'FilterMessageEvents' => 'Message details of all matches',
'FilterMoveEvents' => 'Move all matches', // Added - 2018-08-30
'FilterPx' => 'Пкс фильтра',
'FilterUnset' => 'You must specify a filter width and height',
'FilterUpdateDiskSpace'=> 'Update used disk space', // Added - 2018-08-30
'FilterUploadEvents' => 'Upload all matches',
'FilterVideoEvents' => 'Create video for all matches',
'Filters' => 'Фильтры',
@ -357,6 +376,7 @@ $SLANG = array(
'Function' => 'Функция',
'Gain' => 'Gain',
'General' => 'Основные',
'GenerateDownload' => 'Generate Download', // Added - 2018-08-30
'GenerateVideo' => 'Генерировать видео',
'GeneratingVideo' => 'Генерируется видео',
'GoToZoneMinder' => 'Перейти на ZoneMinder.com',
@ -377,6 +397,7 @@ $SLANG = array(
'High' => 'широкий',
'HighBW' => 'Широкий канал',
'Home' => 'Домой',
'Hostname' => 'Hostname', // Added - 2018-08-30
'Hour' => 'Час',
'Hue' => 'Оттенок',
'Id' => 'ИД',
@ -401,6 +422,7 @@ $SLANG = array(
'Line' => 'Строка', // Added - 2011-06-16
'LinkedMonitors' => 'Привязанные мониторы',
'List' => 'Список',
'ListMatches' => 'List Matches', // Added - 2018-08-30
'Load' => 'Нагрузка',
'Local' => 'Локальный',
'Log' => 'Лог', // Added - 2011-06-16;
@ -487,6 +509,7 @@ $SLANG = array(
'MonitorProbeIntro' => 'В этом списке показаны найденные аналоговые и сетевые камеры, как уже заведенные, так и доступные для выбора.<br/><br/>Выберите нужную из списка ниже.<br/><br/>Обратите внимание, что не все камеры могут быть найдены, и что выбор камеры может переписать настройки определенные для этого монитора.<br/><br/>', // Added - 2009-03-31
'Monitors' => 'Мониторы',
'Montage' => 'Монтаж',
'MontageReview' => 'Montage Review', // Added - 2018-08-30
'Month' => 'Месяц',
'More' => 'Еще', // Added - 2011-06-16
'MotionFrameSkip' => 'Кол-во пропуск. кадров движения',
@ -513,6 +536,7 @@ $SLANG = array(
'Next' => 'След.',
'No' => 'Нет',
'NoDetectedCameras' => 'No Detected Cameras', // Added - 2009-03-31
'NoDetectedProfiles' => 'No Detected Profiles', // Added - 2018-08-30
'NoFramesRecorded' => 'Это событие не содержит кадров',
'NoGroup' => 'No Group',
'NoSavedFilters' => 'нет сохраненных фильтров',
@ -531,6 +555,8 @@ $SLANG = array(
'OpGt' => 'больше',
'OpGtEq' => 'больше либо равно',
'OpIn' => 'в списке',
'OpIs' => 'is', // Added - 2018-08-30
'OpIsNot' => 'is not', // Added - 2018-08-30
'OpLt' => 'меньше',
'OpLtEq' => 'меньше или равно',
'OpMatches' => 'совпадает',
@ -540,6 +566,7 @@ $SLANG = array(
'Open' => 'Открыть',
'OptionHelp' => 'Справка',
'OptionRestartWarning' => 'Эти изменения подействуют только после перезапуска программы.',
'OptionalEncoderParam' => 'Optional Encoder Parameters', // Added - 2018-08-30
'Options' => 'Опции',
'OrEnterNewName' => 'или введите новое имя',
'Order' => 'Сортировка',
@ -556,7 +583,6 @@ $SLANG = array(
'PasswordsDifferent' => 'Пароли не совпадают',
'Paths' => 'Пути',
'Pause' => 'Пауза',
'Paused' => 'Пауза',
'Phone' => 'Phone',
'PhoneBW' => 'Телефонная линия',
'Pid' => 'PID', // Added - 2011-06-16
@ -578,9 +604,13 @@ $SLANG = array(
'ProfileProbeIntro' => 'В этом списке показаны существующие профили потока выбранной камеры.<br/><br/>Выберите нужный из списка ниже.<br/><br/>Обратите внимание, что ZoneMinder не может добавить дополнительный профиль, и что выбор профиля может переписать настройки определенные для этого монитора.<br/><br/>', // Added - 2015-04-18
'Progress' => 'Прогресс', // Added - 2015-04-18
'Protocol' => 'Протокол',
'RTSPDescribe' => 'Use RTSP Response Media URL', // Added - 2018-08-30
'RTSPTransport' => 'RTSP Transport Protocol', // Added - 2018-08-30
'Rate' => 'Скорость',
'Real' => 'Реальная',
'RecaptchaWarning' => 'Your reCaptcha secret key is invalid. Please correct it, or reCaptcha will not work', // Added - 2018-08-30
'Record' => 'Record',
'RecordAudio' => 'Whether to store the audio stream when saving an event.', // Added - 2018-08-30
'RefImageBlendPct' => 'Смешение опорного кадра, %',
'Refresh' => 'Обновить',
'Remote' => 'Удаленный',
@ -596,6 +626,7 @@ $SLANG = array(
'ReplayAll' => 'Все события',
'ReplayGapless' => 'События подряд',
'ReplaySingle' => 'Одно событие',
'ReportEventAudit' => 'Audit Events Report', // Added - 2018-08-30
'Reset' => 'Сбросить',
'ResetEventCounts' => 'Обнулить счетчик событий',
'Restart' => 'Перезапустить',
@ -614,6 +645,7 @@ $SLANG = array(
'Save' => 'Сохранить',
'SaveAs' => 'Сохранить как',
'SaveFilter' => 'Сохранить фильтр',
'SaveJPEGs' => 'Save JPEGs', // Added - 2018-08-30
'Scale' => 'Масштаб',
'Score' => 'Оценка',
'Secs' => 'Сек.',
@ -623,7 +655,6 @@ $SLANG = array(
'SelectLog' => 'Выберите лог', // Added - 2011-06-17
'SelectMonitors' => 'Select Monitors',
'SelfIntersecting' => 'Polygon edges must not intersect',
'Server' => 'Сервер',
'Set' => 'Set',
'SetNewBandwidth' => 'Установка новой ширина канала',
'SetPreset' => 'Set Preset',
@ -631,6 +662,7 @@ $SLANG = array(
'ShowFilterWindow' => 'Показать окно фильтра',
'ShowTimeline' => 'Показать график',
'SignalCheckColour' => 'Цвет проверки сигнала',
'SignalCheckPoints' => 'Signal Check Points', // Added - 2018-08-30
'Size' => 'Size',
'SkinDescription' => 'Change the default skin for this computer', // Added - 2011-01-30
'Sleep' => 'Sleep',
@ -650,6 +682,10 @@ $SLANG = array(
'State' => 'Состояние',
'Stats' => 'Статистика',
'Status' => 'Статус',
'StatusConnected' => 'Capturing', // Added - 2018-08-30
'StatusNotRunning' => 'Not Running', // Added - 2018-08-30
'StatusRunning' => 'Not Capturing', // Added - 2018-08-30
'StatusUnknown' => 'Unknown', // Added - 2018-08-30
'Step' => 'Шаг',
'StepBack' => 'Кадр назад',
'StepForward' => 'Кадр вперед',
@ -660,6 +696,8 @@ $SLANG = array(
'Stills' => 'Стоп-кадры',
'Stop' => 'Остановить',
'Stopped' => 'Остановлен',
'StorageArea' => 'Storage Area', // Added - 2018-08-30
'StorageScheme' => 'Scheme', // Added - 2018-08-30
'Stream' => 'Поток',
'StreamReplayBuffer' => 'Буфер потока повторного воспр.',
'Submit' => 'Применить',
@ -679,9 +717,9 @@ $SLANG = array(
'TimelineTip4' => 'Используйте кнопки снизу для отдаления и перемещения по временной шкале.', // Added 2013.08.15.
'Timestamp' => 'Метка времени',
'TimestampLabelFormat' => 'Формат метки',
'TimestampLabelSize' => 'Размер метки',
'TimestampLabelX' => 'X-координата метки',
'TimestampLabelY' => 'Y-координата метки',
'TimestampLabelSize' => 'Размер метки',
'Today' => 'Сегодня',
'Tools' => 'Инструменты',
'Total' => 'Всего', // Added - 2011-06-16
@ -726,6 +764,7 @@ $SLANG = array(
'VideoGenParms' => 'Параметры генерации видео',
'VideoGenSucceeded' => 'Video Generation Succeeded!',
'VideoSize' => 'Размер изображения',
'VideoWriter' => 'Video Writer', // Added - 2018-08-30
'View' => 'Просмотр',
'ViewAll' => 'Просм. все',
'ViewEvent' => 'View Event',
@ -735,6 +774,7 @@ $SLANG = array(
'Watch' => 'Watch',
'Web' => 'Интерфейс',
'WebColour' => 'Цвет отметки',
'WebSiteUrl' => 'Website URL', // Added - 2018-08-30
'Week' => 'Неделя',
'White' => 'Бал. белого',
'WhiteBalance' => 'White Balance',

View File

@ -79,6 +79,8 @@ $SLANG = array(
'Actual' => 'Verklig',
'AddNewControl' => 'Ny kontroll',
'AddNewMonitor' => 'Ny bevakare',
'AddNewServer' => 'Add New Server', // Added - 2018-08-30
'AddNewStorage' => 'Add New Storage', // Added - 2018-08-30
'AddNewUser' => 'Ny användare',
'AddNewZone' => 'Ny zon',
'Alarm' => 'Larm',
@ -106,22 +108,32 @@ $SLANG = array(
'AttrArchiveStatus' => 'Arkivstatus',
'AttrAvgScore' => 'Ung. värde',
'AttrCause' => 'Orsak',
'AttrDate' => 'Datum',
'AttrDateTime' => 'Datum/Tid',
'AttrDiskBlocks' => 'Diskblock',
'AttrDiskPercent' => 'Diskprocent',
'AttrDiskSpace' => 'Disk Space', // Added - 2018-08-30
'AttrDuration' => 'Längd',
'AttrEndDate' => 'End Date', // Added - 2018-08-30
'AttrEndDateTime' => 'End Date/Time', // Added - 2018-08-30
'AttrEndTime' => 'End Time', // Added - 2018-08-30
'AttrEndWeekday' => 'End Weekday', // Added - 2018-08-30
'AttrFilterServer' => 'Server Filter is Running On', // Added - 2018-08-30
'AttrFrames' => 'Ramar',
'AttrId' => 'Id',
'AttrMaxScore' => 'Max. värde',
'AttrMonitorId' => 'Bevakningsid',
'AttrMonitorName' => 'Bevakningsnamn',
'AttrMonitorServer' => 'Server Monitor is Running On', // Added - 2018-08-30
'AttrName' => 'Namn',
'AttrNotes' => 'Notering',
'AttrStartDate' => 'Start Date', // Added - 2018-08-30
'AttrStartDateTime' => 'Start Date/Time', // Added - 2018-08-30
'AttrStartTime' => 'Start Time', // Added - 2018-08-30
'AttrStartWeekday' => 'Start Weekday', // Added - 2018-08-30
'AttrStateId' => 'Run State', // Added - 2018-08-30
'AttrStorageArea' => 'Storage Area', // Added - 2018-08-30
'AttrStorageServer' => 'Server Hosting Storage', // Added - 2018-08-30
'AttrSystemLoad' => 'Systemlast',
'AttrTime' => 'Tid',
'AttrTotalScore' => 'Totalvärde',
'AttrWeekday' => 'Veckodag',
'Auto' => 'Automatik',
'AutoStopTimeout' => 'Tidsutlösning för automatstop',
'Available' => 'Available', // Added - 2009-03-31
@ -154,9 +166,11 @@ $SLANG = array(
'BadRefBlendPerc' => 'Mixprocenten för referensen måste hara ett positivt heltal',
'BadSectionLength' => 'Sektionslängden måste vara ett heltal på minst 30 eller högre',
'BadSignalCheckColour' => 'Kontrollfärgen på signalen måste vara en giltig RGB färgsträng',
'BadSourceType' => 'Source Type \"Web Site\" requires the Function to be set to \"Monitor\"', // Added - 2018-08-30
'BadStreamReplayBuffer'=> 'Buffern för strömmande uppspelning måste vara ett heltal på 0 eller högre',
'BadWarmupCount' => 'Uppvärmingsramen måste vara ett heltal på 0 eller högre',
'BadWebColour' => 'Webbfärgen måste vara en giltig sträng för webbfärg',
'BadWebSitePath' => 'Please enter a complete website url, including the http:// or https:// prefix.', // Added - 2018-08-30
'BadWidth' => 'Bredden måste sättas til ett giltigt värde',
'Bandwidth' => 'Bandbredd',
'BandwidthHead' => 'Bandwidth', // This is the end of the bandwidth status on the top of the console, different in many language due to phrasing
@ -220,10 +234,12 @@ $SLANG = array(
'ChooseLogSelection' => 'Choose a log selection', // Added - 2011-06-17
'ChoosePreset' => 'Välj standard',
'Clear' => 'Clear', // Added - 2011-06-16
'CloneMonitor' => 'Clone', // Added - 2018-08-30
'Close' => 'Stäng',
'Colour' => 'Färg',
'Command' => 'Kommando',
'Component' => 'Component', // Added - 2011-06-16
'ConcurrentFilter' => 'Run filter concurrently', // Added - 2018-08-30
'Config' => 'Konfigurera',
'ConfiguredFor' => 'Konfigurerad för',
'ConfirmDeleteEvents' => 'Är du säker på att du vill ta bort dom valda händelserna?',
@ -281,9 +297,11 @@ $SLANG = array(
'DonateRemindWeek' => 'Inte än, påminn om 1 vecka',
'DonateYes' => 'Ja, jag vill gärna donera nu',
'Download' => 'Ladda ner',
'DownloadVideo' => 'Download Video', // Added - 2018-08-30
'DuplicateMonitorName' => 'Duplicate Monitor Name', // Added - 2009-03-31
'Duration' => 'Längd',
'Edit' => 'Redigera',
'EditLayout' => 'Edit Layout', // Added - 2018-08-30
'Email' => 'E-post',
'EnableAlarms' => 'Aktivera larm',
'Enabled' => 'Aktiverad',
@ -300,6 +318,7 @@ $SLANG = array(
'Events' => 'Händelser',
'Exclude' => 'Exkludera',
'Execute' => 'Utför',
'Exif' => 'Embed EXIF data into image', // Added - 2018-08-30
'Export' => 'Exportera',
'ExportDetails' => 'Exportera händelsedetaljer',
'ExportFailed' => 'Exporten misslyckades',
@ -329,8 +348,10 @@ $SLANG = array(
'FilterExecuteEvents' => 'Utför kommando på alla träffar',
'FilterLog' => 'Filter log', // Added - 2015-04-18
'FilterMessageEvents' => 'Meddela detaljer om alla träffar',
'FilterMoveEvents' => 'Move all matches', // Added - 2018-08-30
'FilterPx' => 'Filter Px',
'FilterUnset' => 'Du måste specificera filtrets bredd och höjd',
'FilterUpdateDiskSpace'=> 'Update used disk space', // Added - 2018-08-30
'FilterUploadEvents' => 'Ladda upp alla träffar',
'FilterVideoEvents' => 'Skapa video för alla träffar',
'Filters' => 'Filter',
@ -355,6 +376,7 @@ $SLANG = array(
'Function' => 'Funktion',
'Gain' => 'Nivå',
'General' => 'Generell',
'GenerateDownload' => 'Generate Download', // Added - 2018-08-30
'GenerateVideo' => 'Skapa video',
'GeneratingVideo' => 'Skapar video',
'GoToZoneMinder' => 'Gå till ZoneMinder.com',
@ -375,6 +397,7 @@ $SLANG = array(
'High' => 'Hög',
'HighBW' => 'Hög bandbredd',
'Home' => 'Hem',
'Hostname' => 'Hostname', // Added - 2018-08-30
'Hour' => 'Timme',
'Hue' => 'Hue',
'Id' => 'nr',
@ -399,6 +422,7 @@ $SLANG = array(
'Line' => 'Line', // Added - 2011-06-16
'LinkedMonitors' => 'Länkade övervakare',
'List' => 'Lista',
'ListMatches' => 'List Matches', // Added - 2018-08-30
'Load' => 'Belastning',
'Local' => 'Lokal',
'Log' => 'Log', // Added - 2011-06-16
@ -485,6 +509,7 @@ $SLANG = array(
'MonitorProbeIntro' => 'The list below shows detected analog and network cameras and whether they are already being used or available for selection.<br/><br/>Select the desired entry from the list below.<br/><br/>Please note that not all cameras may be detected and that choosing a camera here may overwrite any values you already have configured for the current monitor.<br/><br/>', // Added - 2009-03-31
'Monitors' => 'Bevakare',
'Montage' => 'Montera',
'MontageReview' => 'Montage Review', // Added - 2018-08-30
'Month' => 'Månad',
'More' => 'More', // Added - 2011-06-16
'MotionFrameSkip' => 'Motion Frame Skip',
@ -511,6 +536,7 @@ $SLANG = array(
'Next' => 'Nästa',
'No' => 'Nej',
'NoDetectedCameras' => 'No Detected Cameras', // Added - 2009-03-31
'NoDetectedProfiles' => 'No Detected Profiles', // Added - 2018-08-30
'NoFramesRecorded' => 'Det finns inga ramar inspelade för denna händelse',
'NoGroup' => 'Ingen grupp',
'NoSavedFilters' => 'Inga sparade filter',
@ -529,6 +555,8 @@ $SLANG = array(
'OpGt' => 'större än',
'OpGtEq' => 'större än eller lika med',
'OpIn' => 'in set',
'OpIs' => 'is', // Added - 2018-08-30
'OpIsNot' => 'is not', // Added - 2018-08-30
'OpLt' => 'mindre än',
'OpLtEq' => 'mindre än eller lika med',
'OpMatches' => 'matchar',
@ -538,6 +566,7 @@ $SLANG = array(
'Open' => 'Öppna',
'OptionHelp' => 'Optionhjälp',
'OptionRestartWarning' => 'Dessa ändringar kommer inte att vara implementerade\nnär systemet körs. När du är klar starta om\n ZoneMinder.',
'OptionalEncoderParam' => 'Optional Encoder Parameters', // Added - 2018-08-30
'Options' => 'Alternativ',
'OrEnterNewName' => 'eller skriv in nytt namn',
'Order' => 'Sortera',
@ -575,9 +604,13 @@ $SLANG = array(
'ProfileProbeIntro' => 'The list below shows the existing stream profiles of the selected camera .<br/><br/>Select the desired entry from the list below.<br/><br/>Please note that ZoneMinder cannot configure additional profiles and that choosing a camera here may overwrite any values you already have configured for the current monitor.<br/><br/>', // Added - 2015-04-18
'Progress' => 'Progress', // Added - 2015-04-18
'Protocol' => 'Protokol',
'RTSPDescribe' => 'Use RTSP Response Media URL', // Added - 2018-08-30
'RTSPTransport' => 'RTSP Transport Protocol', // Added - 2018-08-30
'Rate' => 'Hastighet',
'Real' => 'Verklig',
'RecaptchaWarning' => 'Your reCaptcha secret key is invalid. Please correct it, or reCaptcha will not work', // Added - 2018-08-30
'Record' => 'Spela in',
'RecordAudio' => 'Whether to store the audio stream when saving an event.', // Added - 2018-08-30
'RefImageBlendPct' => 'Reference Image Blend %ge',
'Refresh' => 'Uppdatera',
'Remote' => 'Fjärr',
@ -593,6 +626,7 @@ $SLANG = array(
'ReplayAll' => 'Alla händelser',
'ReplayGapless' => 'Gapless Events',
'ReplaySingle' => 'Ensam händelse',
'ReportEventAudit' => 'Audit Events Report', // Added - 2018-08-30
'Reset' => 'Återställ',
'ResetEventCounts' => 'Återställ händelseräknare',
'Restart' => 'Återstart',
@ -611,6 +645,7 @@ $SLANG = array(
'Save' => 'Spara',
'SaveAs' => 'Spara som',
'SaveFilter' => 'Spara filter',
'SaveJPEGs' => 'Save JPEGs', // Added - 2018-08-30
'Scale' => 'Skala',
'Score' => 'Resultat',
'Secs' => 'Sek',
@ -627,6 +662,7 @@ $SLANG = array(
'ShowFilterWindow' => 'Visa fönsterfilter',
'ShowTimeline' => 'Visa tidslinje',
'SignalCheckColour' => 'Signal Check Colour',
'SignalCheckPoints' => 'Signal Check Points', // Added - 2018-08-30
'Size' => 'Storlek',
'SkinDescription' => 'Change the default skin for this computer', // Added - 2011-01-30
'Sleep' => 'Vila',
@ -646,6 +682,10 @@ $SLANG = array(
'State' => 'Läge',
'Stats' => 'Statistik',
'Status' => 'Status',
'StatusConnected' => 'Capturing', // Added - 2018-08-30
'StatusNotRunning' => 'Not Running', // Added - 2018-08-30
'StatusRunning' => 'Not Capturing', // Added - 2018-08-30
'StatusUnknown' => 'Unknown', // Added - 2018-08-30
'Step' => 'Steg',
'StepBack' => 'Stepga bakåt',
'StepForward' => 'Stega framåt',
@ -656,6 +696,8 @@ $SLANG = array(
'Stills' => 'Stillbilder',
'Stop' => 'Stopp',
'Stopped' => 'Stoppad',
'StorageArea' => 'Storage Area', // Added - 2018-08-30
'StorageScheme' => 'Scheme', // Added - 2018-08-30
'Stream' => 'Strömmande',
'StreamReplayBuffer' => 'Buffert för strömmande uppspelning',
'Submit' => 'Skicka',
@ -675,6 +717,7 @@ $SLANG = array(
'TimelineTip4' => 'Use the controls below to zoom out or navigate back and forward through the time range.', // Added 2013.08.15.
'Timestamp' => 'Tidsstämpel',
'TimestampLabelFormat' => 'Format på tidsstämpel',
'TimestampLabelSize' => 'Font Size', // Added - 2018-08-30
'TimestampLabelX' => 'Värde på tidsstämpel X',
'TimestampLabelY' => 'Värde på tidsstämpel Y',
'Today' => 'Idag',
@ -721,6 +764,7 @@ $SLANG = array(
'VideoGenParms' => 'Inställningar för videogenerering',
'VideoGenSucceeded' => 'Videogenereringen lyckades!',
'VideoSize' => 'Videostorlek',
'VideoWriter' => 'Video Writer', // Added - 2018-08-30
'View' => 'Visa',
'ViewAll' => 'Visa alla',
'ViewEvent' => 'Visa händelse',
@ -730,6 +774,7 @@ $SLANG = array(
'Watch' => 'Se',
'Web' => 'Webb',
'WebColour' => 'Webbfärg',
'WebSiteUrl' => 'Website URL', // Added - 2018-08-30
'Week' => 'Vecka',
'White' => 'Vit',
'WhiteBalance' => 'Vitbalans',

View File

@ -1,2 +1,3 @@
User-agent: *
Disallow: /
###

View File

@ -21,7 +21,7 @@
}
.ptzControls input[type=image] {
border: 0px;
border: 0;
}
.ptzControls .controlsPanel .arrowControl {
@ -115,7 +115,7 @@
}
.ptzControls .controlsPanel .pantiltPanel .pantiltControls .centerBtn {
background: url("../skins/classic/graphics/graphics/center.png") no-repeat 0 0;
background: url("../skins/classic/graphics/center.png") no-repeat 0 0;
}
.ptzControls .controlsPanel .pantiltPanel .pantiltControls .rightBtn {

View File

@ -119,6 +119,16 @@ echo output_link_if_exists( array(
<script src="skins/<?php echo $skin; ?>/js/chosen/chosen.jquery.min.js"></script>
<script src="skins/<?php echo $skin; ?>/js/dateTimePicker/jquery-ui-timepicker-addon.js"></script>
<script>
jQuery(document).ready(function(){
jQuery("#flip").click(function(){
jQuery("#panel").slideToggle("slow");
jQuery("#flip").toggleClass('glyphicon-menu-down').toggleClass('glyphicon-menu-up');
Cookie.write( 'zmHeaderFlip', jQuery('#flip').hasClass('glyphicon-menu-up') ? 'up' : 'down', { duration: 10*365 } );
});
});
</script>
<script>
//<![CDATA[
<!--
@ -181,6 +191,12 @@ echo output_link_if_exists( array(
<?php } ?>
<script src="<?php echo cache_bust($skinJsFile) ?>"></script>
<script src="js/logger.js"></script>
<?php
if ($basename == 'watch') {
// This is used in the log popup for the export function. Not sure if it's used anywhere else
?>
<script type="text/javascript" src="js/overlay.js"></script>
<?php } ?>
<?php
if ( $viewJsFile ) {
?>
@ -193,6 +209,9 @@ echo output_link_if_exists( array(
} // end function xhtmlHeaders( $file, $title )
function getNavBarHTML($reload = null) {
# Provide a facility to turn off the headers if you put headers=0 into the url
if ( isset($_REQUEST['navbar']) and $_REQUEST['navbar']=='0' )
return '';
$versionClass = (ZM_DYN_DB_VERSION&&(ZM_DYN_DB_VERSION!=ZM_VERSION))?'errorText':'';
global $running;
@ -288,6 +307,7 @@ if (isset($_REQUEST['filter']['Query']['terms']['attr'])) {
}
?>
<li><a href="?view=report_event_audit"<?php echo $view=='report_event_audit'?' class="selected"':''?>><?php echo translate('ReportEventAudit') ?></a></li>
<li><a href="#"><span id="flip" class="glyphicon glyphicon-menu-<?php echo ( isset($_COOKIE['zmHeaderFlip']) and $_COOKIE['zmHeaderFlip'] == 'down') ? 'down' : 'up' ?> pull-right"></span></a></li>
</ul>
<?php } // end if canView('Monitors') ?>
@ -305,6 +325,7 @@ if (isset($_REQUEST['filter']['Query']['terms']['attr'])) {
</div>
</div><!-- End .navbar-collapse -->
</div> <!-- End .container-fluid -->
<div id="panel"<?php echo ( isset($_COOKIE['zmHeaderFlip']) and $_COOKIE['zmHeaderFlip'] == 'down' ) ? 'style="display:none;"' : '' ?>>
<?php
}//end reload null. Runs on full page load
@ -361,12 +382,13 @@ if ($reload == 'reload') ob_start();
<?php } ?>
<!-- End .footer/reload --></div>
<?php
if ($reload == 'reload') return( ob_get_clean() );
if ($reload == 'reload') return ob_get_clean();
} // end if (!ZM_OPT_USE_AUTH) or $user )
?>
</div>
</div><!-- End .navbar .navbar-default -->
<?php
return( ob_get_clean() );
return ob_get_clean();
} // end function getNavBarHTML()
function xhtmlFooter() {

View File

@ -195,11 +195,12 @@ if ( currentView != 'none' && currentView != 'login' ) {
$j.getJSON(thisUrl + '?view=request&request=status&entity=navBar')
.done(setNavBar)
.fail(function( jqxhr, textStatus, error ) {
var err = textStatus + ", " + error;
console.log( "Request Failed: " + err );
console.log( "Request Failed: " + textStatus + ", " + error);
if ( textStatus != "timeout" ) {
// The idea is that this should only fail due to auth, so reload the page
// which should go to login if it can't stay logged in.
window.location.href = thisUrl+'?view='+currentView;
window.location.reload( true );
}
});
}

View File

@ -56,7 +56,7 @@ foreach ( Group::find() as $G ) {
$groupSql = '';
if ( count($GroupsById) ) {
$html .= '<span id="groupControl"><label>'. translate('Group') .':</label>';
$html .= '<span id="groupControl"><label>'. translate('Group') .'</label>';
# This will end up with the group_id of the deepest selection
$group_id = isset($_SESSION['Group']) ? $_SESSION['Group'] : null;
$html .= Group::get_group_dropdown();
@ -114,7 +114,7 @@ $html .= htmlSelect('Function[]', $Functions,
$html .= '</span>';
if ( count($ServersById) > 1 ) {
$html .= '<span class="ServerFilter"><label>'. translate('Server').':</label>';
$html .= '<span class="ServerFilter"><label>'. translate('Server').'</label>';
$html .= htmlSelect('ServerId[]', $ServersById,
(isset($_SESSION['ServerId'])?$_SESSION['ServerId']:''),
array(
@ -128,7 +128,7 @@ if ( count($ServersById) > 1 ) {
} # end if have Servers
if ( count($StorageById) > 1 ) {
$html .= '<span class="StorageFilter"><label>'.translate('Storage').':</label>';
$html .= '<span class="StorageFilter"><label>'.translate('Storage').'</label>';
$html .= htmlSelect('StorageId[]', $StorageById,
(isset($_SESSION['StorageId'])?$_SESSION['StorageId']:''),
array(
@ -140,7 +140,7 @@ if ( count($StorageById) > 1 ) {
$html .= '</span>';
} # end if have Storage Areas
$html .= '<span class="StatusFilter"><label>'. translate('Status') . ':</label>';
$html .= '<span class="StatusFilter"><label>'. translate('Status') . '</label>';
$status_options = array(
'Unknown' => translate('StatusUnknown'),
'NotRunning' => translate('StatusNotRunning'),
@ -157,7 +157,7 @@ $html .= htmlSelect( 'Status[]', $status_options,
) );
$html .= '</span>';
$html .= '<span class="SourceFilter"><label>'.translate('Source').':</label>';
$html .= '<span class="SourceFilter"><label>'.translate('Source').'</label>';
$html .= '<input type="text" name="Source" value="'.(isset($_SESSION['Source'])?$_SESSION['Source']:'').'" onkeydown="if(event&&event.keyCode==13){this.form.submit();}" placeholder="text or regular expression"/>';
$html .= '</span>';
@ -232,7 +232,7 @@ $html .= htmlSelect( 'Status[]', $status_options,
$displayMonitors[] = $monitors[$i];
} # end foreach monitor
$html .= '<span class="MonitorFilter"><label>'.translate('Monitor').':</label>';
$html .= '<span class="MonitorFilter"><label>'.translate('Monitor').'</label>';
$html .= htmlSelect('MonitorId[]', $monitors_dropdown, $selected_monitor_ids,
array(
'onchange'=>'this.form.submit();',

View File

@ -217,7 +217,7 @@ ob_start();
echo '<th class="colEvents">'. $j .'</th>';
}
?>
<th class="colZones"><a href="<?php echo $_SERVER['PHP_SELF'] ?>?view=zones_overview"><?php echo translate('Zones') ?></a></th>
<th class="colZones"><?php echo translate('Zones') ?></th>
<?php if ( canEdit('Monitors') ) { ?>
<th class="colMark"><input type="checkbox" name="toggleCheck" value="1" onclick="toggleCheckbox(this, 'markMids[]');setButtonStates(this);"/> <?php echo translate('All') ?></th>
<?php } ?>

View File

@ -192,7 +192,6 @@ if ( ZM_WEB_STREAM_METHOD == 'mpeg' && ZM_MPEG_LIVE_FORMAT ) {
outputVideoStream( "evtStream", $streamSrc, reScale( $Event->Width(), $scale ), reScale( $Event->Height(), $scale ), ZM_MPEG_LIVE_FORMAT );
} else {
$streamSrc = $Event->getStreamSrc( array( 'mode'=>'jpeg', 'frame'=>$fid, 'scale'=>$scale, 'rate'=>$rate, 'maxfps'=>ZM_WEB_VIDEO_MAXFPS, 'replay'=>$replayMode) );
Warning("Streamsrc: $streamSrc");
if ( canStreamNative() ) {
outputImageStream( 'evtStream', $streamSrc, reScale( $Event->Width(), $scale ), reScale( $Event->Height(), $scale ), validHtmlStr($Event->Name()) );
} else {

View File

@ -44,7 +44,7 @@ if ( $_REQUEST['filter']['sql'] ) {
$countSql .= $_REQUEST['filter']['sql'];
$eventsSql .= $_REQUEST['filter']['sql'];
}
$eventsSql .= " ORDER BY $sortColumn $sortOrder";
$eventsSql .= " ORDER BY $sortColumn $sortOrder,Id $sortOrder";
$page = isset($_REQUEST['page']) ? validInt($_REQUEST['page']) : 0;
$limit = isset($_REQUEST['limit']) ? validInt($_REQUEST['limit']) : 0;
@ -191,7 +191,8 @@ while ( $event_row = dbFetchNext($results) ) {
<td class="colId"><a href="?view=event&amp;eid=<?php echo $event->Id().$filterQuery.$sortQuery.'&amp;page=1"> '.$event->Id().($event->Archived()?'*':'') ?></a></td>
<td class="colName"><a href="?view=event&amp;eid=<?php echo $event->Id().$filterQuery.$sortQuery.'&amp;page=1"> '.validHtmlStr($event->Name()).($event->Archived()?'*':'') ?></a></td>
<td class="colMonitorName"><?php echo makePopupLink( '?view=monitor&amp;mid='.$event->MonitorId(), 'zmMonitor'.$event->Monitorid(), 'monitor', $event->MonitorName(), canEdit( 'Monitors' ) ) ?></td>
<td class="colCause"><?php echo makePopupLink( '?view=eventdetail&amp;eid='.$event->Id(), 'zmEventDetail', 'eventdetail', validHtmlStr($event->Cause()), canEdit( 'Events' ), 'title="'.htmlspecialchars($event->Notes()).'"' ) ?></td>
<td class="colCause"><?php echo makePopupLink( '?view=eventdetail&amp;eid='.$event->Id(), 'zmEventDetail', 'eventdetail', validHtmlStr($event->Cause()), canEdit( 'Events' ), 'title="'.htmlspecialchars($event->Notes()).'"' ) ?>
<?php if ($event->Notes() && ($event->Notes() != 'Forced Web: ')) echo "<br/><div class=\"small text-nowrap text-muted\">".$event->Notes()."</div>" ?></td>
<td class="colTime"><?php echo strftime(STRF_FMT_DATETIME_SHORTER, strtotime($event->StartTime())) .
( $event->EndTime() ? ' until ' . strftime(STRF_FMT_DATETIME_SHORTER, strtotime($event->EndTime()) ) : '' ) ?>
</td>

View File

@ -253,7 +253,7 @@ for ( $i=0; $i < count($terms); $i++ ) {
<td><?php echo htmlSelect( "filter[Query][terms][$i][op]", $opTypes, $term['op'] ); ?></td>
<td>
<input type="text" name="filter[Query][terms][<?php echo $i ?>][val]" id="filter[Query][terms][<?php echo $i ?>][val]" value="<?php echo isset($term['val'])?validHtmlStr(str_replace('T', ' ', $term['val'])):'' ?>"/>
<script type="text/javascript">$j("[name$='\\[<?php echo $i ?>\\]\\[val\\]']").timepicker({timeFormat: "HH:mm:ss", constrainInput: falsepi}); </script>
<script type="text/javascript">$j("[name$='\\[<?php echo $i ?>\\]\\[val\\]']").timepicker({timeFormat: "HH:mm:ss", constrainInput: false}); </script>
</td>
<?php
} elseif ( $term['attr'] == 'StateId' ) {

View File

@ -42,7 +42,7 @@ function vjsReplay() {
$j.ajaxSetup ({timeout: AJAX_TIMEOUT }); //sets timeout for all getJSON.
var cueFrames = null; //make cueFrames availaible even if we don't send another ajax query
var cueFrames = null; //make cueFrames available even if we don't send another ajax query
function initialAlarmCues (eventId) {
$j.getJSON(thisUrl + '?view=request&request=status&entity=frames&id=' + eventId, setAlarmCues); //get frames data for alarmCues and inserts into html
@ -55,7 +55,12 @@ function setAlarmCues (data) {
}
function renderAlarmCues (containerEl) {
if (cueFrames) {
if ( !( cueFrames && cueFrames.length ) ) {
console.log("No cue frames for event");
return;
}
// This uses the Delta of the last frame to get the length of the event. I can't help but wonder though
// if we shouldn't just use the event length endtime-starttime
var cueRatio = containerEl.width() / (cueFrames[cueFrames.length - 1].Delta * 100);
var minAlarm = Math.ceil(1/cueRatio);
var spanTimeStart = 0;
@ -64,7 +69,8 @@ function renderAlarmCues (containerEl) {
var alarmHtml = "";
var pixSkew = 0;
var skip = 0;
for (let i = 0; i < cueFrames.length; i++) {
var num_cueFrames = cueFrames.length;
for ( let i = 0; i < num_cueFrames; i++ ) {
skip = 0;
frame = cueFrames[i];
if (frame.Type == "Alarm" && alarmed == 0) { //From nothing to alarm. End nothing and start alarm.
@ -84,7 +90,10 @@ function renderAlarmCues (containerEl) {
} else if (frame.Type !== "Alarm" && alarmed == 1) { //from alarm to nothing. End alarm and start nothing.
futNone = 0;
indexPlus = i+1;
if (((frame.Delta * 100) - spanTimeStart) < minAlarm && indexPlus < cueFrames.length) continue; //alarm is too short and there is more event
if (((frame.Delta * 100) - spanTimeStart) < minAlarm && indexPlus < num_cueFrames) {
//alarm is too short and there is more event
continue;
}
while (futNone < minAlarm) { //check ahead to see if there's enough for a nonespan
if (indexPlus >= cueFrames.length) break; //check if end of event.
futNone = (cueFrames[indexPlus].Delta *100) - (frame.Delta *100);
@ -118,7 +127,6 @@ function renderAlarmCues (containerEl) {
}
}
return alarmHtml;
}
}
function setButtonState( element, butClass ) {
@ -151,7 +159,7 @@ function changeScale() {
} else {
eventViewer = $j(vid ? '#videoobj' : '#evtStream');
}
if (scale == "auto") {
if ( scale == "auto" ) {
let newSize = scaleToFit(eventData.Width, eventData.Height, eventViewer, bottomEl);
newWidth = newSize.width;
newHeight = newSize.height;
@ -161,21 +169,22 @@ function changeScale() {
newWidth = eventData.Width * scale / SCALE_BASE;
newHeight = eventData.Height * scale / SCALE_BASE;
}
if (!(streamMode == 'stills')) eventViewer.width(newWidth); //stills handles its own width
if ( !(streamMode == 'stills') )
eventViewer.width(newWidth); //stills handles its own width
eventViewer.height(newHeight);
if ( !vid ) { // zms needs extra sizing
streamScale(scale == "auto" ? autoScale : scale);
drawProgressBar();
}
if (streamMode == 'stills') {
if ( streamMode == 'stills' ) {
slider.autosize();
alarmCue.html(renderAlarmCues($j('#thumbsSliderPanel')));
} else {
alarmCue.html(renderAlarmCues(eventViewer));//just re-render alarmCues. skip ajax call
}
if (scale == "auto") {
if ( scale == "auto" ) {
Cookie.write('zmEventScaleAuto', 'auto', {duration: 10*365});
}else{
} else {
Cookie.write('zmEventScale'+eventData.MonitorId, scale, {duration: 10*365});
Cookie.dispose('zmEventScaleAuto');
}
@ -197,7 +206,7 @@ var lastEventId = 0;
var zmsBroke = false; //Use alternate navigation if zms has crashed
function getCmdResponse( respObj, respText ) {
if ( checkStreamForErrors( "getCmdResponse", respObj ) ) {
if ( checkStreamForErrors("getCmdResponse", respObj) ) {
console.log('Got an error from getCmdResponse');
console.log(respObj);
console.log(respText);
@ -243,7 +252,7 @@ function getCmdResponse( respObj, respText ) {
if ( streamStatus.auth ) {
// Try to reload the image stream.
var streamImg = document.getElementById('evtStream');
var streamImg = $j('#evtStream');
if ( streamImg )
streamImg.src = streamImg.src.replace( /auth=\w+/i, 'auth='+streamStatus.auth );
} // end if haev a new auth hash
@ -996,12 +1005,17 @@ function initPage() {
progressBarNav ();
streamCmdTimer = streamQuery.delay( 250 );
if ( canStreamNative ) {
var streamImg = $('imageFeed').getElement('img');
var imageFeed = $('imageFeed');
if ( !imageFeed ) {
console.log('No element with id tag imageFeed found.');
} else {
var streamImg = imageFeed.getElement('img');
if ( !streamImg )
streamImg = $('imageFeed').getElement('object');
streamImg = imageFeed.getElement('object');
$(streamImg).addEvent( 'click', function( event ) { handleClick( event ); } );
}
}
}
nearEventsQuery(eventData.Id);
initialAlarmCues(eventData.Id); //call ajax+renderAlarmCues
if (scale == "auto") changeScale();

View File

@ -3,11 +3,11 @@ var requestQueue = new Request.Queue( { concurrent: monitorData.length, stopOnFa
function Monitor( monitorData ) {
this.id = monitorData.id;
this.connKey = monitorData.connKey;
this.server_url = monitorData.server_url;
this.url = monitorData.url;
this.status = null;
this.alarmState = STATE_IDLE;
this.lastAlarmState = STATE_IDLE;
this.streamCmdParms = this.server_url+'?view=request&request=stream&connkey='+this.connKey;
this.streamCmdParms = 'view=request&request=stream&connkey='+this.connKey;
this.onclick = monitorData.onclick;
if ( auth_hash )
this.streamCmdParms += '&auth='+auth_hash;
@ -38,14 +38,14 @@ function Monitor( monitorData ) {
console.log('onerror: ' + text + ' error:'+error);
// Requeue, but want to wait a while.
var streamCmdTimeout = 1000*statusRefreshTimeout;
this.streamCmdTimer = this.streamCmdQuery.delay( streamCmdTimeout, this );
this.streamCmdTimer = this.streamCmdQuery.delay(streamCmdTimeout, this);
};
this.onFailure = function( xhr ) {
console.log('onFailure: ' + this.connKey);
console.log(xhr );
console.log(xhr);
if ( ! requestQueue.hasNext("cmdReq"+this.id) ) {
console.log("Not requeuing because there is one already");
requestQueue.addRequest( "cmdReq"+this.id, this.streamCmdReq );
requestQueue.addRequest("cmdReq"+this.id, this.streamCmdReq);
}
if ( 0 ) {
// Requeue, but want to wait a while.
@ -153,7 +153,7 @@ function Monitor( monitorData ) {
if ( this.type != 'WebSite' ) {
this.streamCmdReq = new Request.JSON( {
url: this.server_url,
url: this.url,
method: 'get',
timeout: 1000+AJAX_TIMEOUT,
onSuccess: this.getStreamCmdResponse.bind( this ),
@ -395,6 +395,20 @@ function reloadWebSite(ndx) {
var monitors = new Array();
function initPage() {
jQuery(document).ready(function(){
jQuery("#hdrbutton").click(function(){
jQuery("#flipMontageHeader").slideToggle("slow");
jQuery("#hdrbutton").toggleClass('glyphicon-menu-down').toggleClass('glyphicon-menu-up');
Cookie.write( 'zmMontageHeaderFlip', jQuery('#hdrbutton').hasClass('glyphicon-menu-up') ? 'up' : 'down', { duration: 10*365 } );
});
});
if ( Cookie.read('zmMontageHeaderFlip') == 'down' ) {
// The chosen dropdowns require the selects to be visible, so once chosen has initialized, we can hide the header
jQuery("#flipMontageHeader").slideToggle("fast");
jQuery("#hdrbutton").toggleClass('glyphicon-menu-down').toggleClass('glyphicon-menu-up');
}
for ( var i = 0; i < monitorData.length; i++ ) {
monitors[i] = new Monitor(monitorData[i]);
var delay = Math.round( (Math.random()+0.5)*statusRefreshTimeout );
@ -406,6 +420,9 @@ function initPage() {
}
selectLayout('#zmMontageLayout');
if ( 0 ) {
// What is the purpose of this code? I think it just starts up a second ajax thread,
//increasing the load on the server.
for ( var i = 0; i < monitorData.length; i++ ) {
if ( monitors[i].type == 'WebSite' )
continue;
@ -414,6 +431,7 @@ function initPage() {
monitors[i].streamCmdQuery.delay( delay, monitors[i] );
//monitors[i].zm_startup(delay);
}
}
}
// Kick everything off
window.addEvent( 'domready', initPage );

View File

@ -35,7 +35,7 @@ monitorData[monitorData.length] = {
'connKey': <?php echo $monitor->connKey() ?>,
'width': <?php echo $monitor->Width() ?>,
'height':<?php echo $monitor->Height() ?>,
'server_url': '<?php echo $monitor->Server()->Url().$_SERVER['PHP_SELF'] ?>',
'url': '<?php echo $monitor->Url() ?>',
'onclick': function(){createPopup( '?view=watch&mid=<?php echo $monitor->Id() ?>', 'zmWatch<?php echo $monitor->Id() ?>', 'watch', <?php echo reScale( $monitor->Width(), $monitor->PopupScale() ); ?>, <?php echo reScale( $monitor->Height(), $monitor->PopupScale() ); ?> );},
'type': '<?php echo $monitor->Type() ?>',
'refresh': '<?php echo $monitor->Refresh() ?>'

View File

@ -869,6 +869,14 @@ function changeDateTime(e) {
// >>>>>>>>> Initialization that runs on window load by being at the bottom
function initPage() {
jQuery(document).ready(function(){
jQuery("#hdrbutton").click(function(){
jQuery("#flipMontageHeader").slideToggle("slow");
jQuery("#hdrbutton").toggleClass('glyphicon-menu-down').toggleClass('glyphicon-menu-up');
});
});
for ( var i = 0, len = monitorPtr.length; i < len; i += 1 ) {
var monId = monitorPtr[i];
if ( ! monId ) continue;

View File

@ -119,11 +119,11 @@ echo " };\n";
} // end if initialmodeislive
echo "var Storage = [];\n";
foreach ( Storage::find_all() as $Storage ) {
foreach ( Storage::find() as $Storage ) {
echo 'Storage[' . $Storage->Id() . '] = ' . json_encode($Storage). ";\n";
}
echo "\nvar Servers = [];\n";
foreach ( Server::find_all() as $Server ) {
foreach ( Server::find() as $Server ) {
echo 'Servers[' . $Server->Id() . '] = ' . json_encode($Server). ";\n";
}
echo '

View File

@ -110,7 +110,7 @@ if ( monitorType != 'WebSite' ) {
if ( auth_hash )
streamCmdParms += '&auth='+auth_hash;
var streamCmdReq = new Request.JSON( {
url: monitorUrl+thisUrl,
url: monitorUrl,
method: 'get',
timeout: AJAX_TIMEOUT,
link: 'chain',
@ -367,7 +367,7 @@ if ( monitorType != 'WebSite' ) {
var statusCmdParms = "view=request&request=status&entity=monitor&id="+monitorId+"&element[]=Status&element[]=FrameRate";
if ( auth_hash )
statusCmdParms += '&auth='+auth_hash;
var statusCmdReq = new Request.JSON( { url: monitorUrl+thisUrl, method: 'get', data: statusCmdParms, timeout: AJAX_TIMEOUT, link: 'cancel', onSuccess: getStatusCmdResponse } );
var statusCmdReq = new Request.JSON( { url: monitorUrl, method: 'get', data: statusCmdParms, timeout: AJAX_TIMEOUT, link: 'cancel', onSuccess: getStatusCmdResponse } );
var statusCmdTimer = null;
}
@ -397,8 +397,8 @@ if ( monitorType != 'WebSite' ) {
if ( auth_hash )
alarmCmdParms += '&auth='+auth_hash;
var alarmCmdReq = new Request.JSON( {
url: monitorUrl+thisUrl,
method: 'post',
url: monitorUrl,
method: 'get',
timeout: AJAX_TIMEOUT,
link: 'cancel',
onSuccess: getAlarmCmdResponse,
@ -455,7 +455,15 @@ if ( monitorType != 'WebSite' ) {
var eventCmdParms = "view=request&request=status&entity=events&id="+monitorId+"&count="+maxDisplayEvents+"&sort=Id%20desc";
if ( auth_hash )
eventCmdParms += '&auth='+auth_hash;
var eventCmdReq = new Request.JSON( { url: thisUrl, method: 'post', timeout: AJAX_TIMEOUT, data: eventCmdParms, link: 'cancel', onSuccess: getEventCmdResponse, onTimeout: eventCmdQuery } );
var eventCmdReq = new Request.JSON( {
url: monitorUrl,
method: 'get',
timeout: AJAX_TIMEOUT,
data: eventCmdParms,
link: 'cancel',
onSuccess: getEventCmdResponse,
onTimeout: eventCmdQuery
} );
var eventCmdTimer = null;
var eventCmdFirst = true;
}
@ -565,7 +573,7 @@ if ( monitorType != 'WebSite' ) {
var controlParms = "view=request&request=control&id="+monitorId;
if ( auth_hash )
controlParms += '&auth='+auth_hash;
var controlReq = new Request.JSON( { url: thisUrl, method: 'post', timeout: AJAX_TIMEOUT, link: 'cancel', onSuccess: getControlResponse } );
var controlReq = new Request.JSON( { url: monitorUrl, method: 'post', timeout: AJAX_TIMEOUT, link: 'cancel', onSuccess: getControlResponse } );
}
function getControlResponse( respObj, respText ) {

View File

@ -48,7 +48,7 @@ var maxDisplayEvents = <?php echo 2 * MAX_EVENTS ?>;
var monitorId = <?php echo $monitor->Id() ?>;
var monitorWidth = <?php echo $monitor->Width() ?>;
var monitorHeight = <?php echo $monitor->Height() ?>;
var monitorUrl = '<?php echo ( $monitor->Server()->Url() . ( ZM_MIN_STREAMING_PORT ? ':'. (ZM_MIN_STREAMING_PORT+$monitor->Id()) : '' ) ) ?>';
var monitorUrl = '<?php echo $monitor->Url(); ?>';
var monitorType = '<?php echo ( $monitor->Type() ) ?>';
var monitorRefresh = '<?php echo ( $monitor->Refresh() ) ?>';

View File

@ -174,11 +174,11 @@ if ( !empty($_REQUEST['preset']) ) {
}
}
if ( !empty($_REQUEST['probe']) ) {
$probe = unserialize($_REQUEST['probe']);
$probe = unserialize(base64_decode($_REQUEST['probe']));
foreach ( $probe as $name=>$value ) {
if ( isset($value) ) {
# Does isset handle NULL's? I don't think this code is correct.
$monitor->$name = $value;
$monitor->$name = urldecode($value);
}
}
if ( ZM_HAS_V4L && $monitor->Type() == 'Local' ) {
@ -929,12 +929,18 @@ if ( $monitor->Type() == 'Local' ) {
<?php
$videowriteropts = array(
0 => 'Disabled',
1 => 'X264 Encode',
);
if (stripos(php_uname('m'), 'arm') === false )
$videowriteropts[1] = 'X264 Encode';
else
$videowriteropts[1] = array('text'=>'X264 Encode - Not compatible on Arm','disabled'=>1);
if ($monitor->Type() == 'Ffmpeg' )
$videowriteropts[2] = 'H264 Camera Passthrough';
else
$videowriteropts[2] = array('text'=>'H264 Camera Passthrough - only for FFMPEG','disabled'=>1);
echo htmlselect( 'newMonitor[VideoWriter]', $videowriteropts, $monitor->VideoWriter() );
?>
</td></tr>

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