git-svn-id: http://svn.zoneminder.com/svn/zm/trunk@2508 e3e1d417-86f3-4887-817a-d78f3d33393f

This commit is contained in:
stan 2008-07-14 13:54:50 +00:00
parent f2cd98f99b
commit 2824cb7355
309 changed files with 34786 additions and 35449 deletions

View File

@ -1,6 +1,7 @@
AC_INIT(zm,1.23.3,support@zoneminder.com,ZoneMinder) AC_PREREQ(2.61)
AC_CONFIG_SRCDIR(src/zm.h) AC_INIT(zm,1.24.0,support@zoneminder.com,ZoneMinder)
AM_INIT_AUTOMAKE AM_INIT_AUTOMAKE
AC_CONFIG_SRCDIR(src/zm.h)
AM_CONFIG_HEADER(config.h) AM_CONFIG_HEADER(config.h)
PATH_BUILD=`pwd` PATH_BUILD=`pwd`
@ -162,42 +163,18 @@ if test "$ENABLE_CRASHTRACE" != "yes"; then
AC_DEFINE(ZM_NO_CRASHTRACE,1,"Whether crash tracing is switched off and compiled out") AC_DEFINE(ZM_NO_CRASHTRACE,1,"Whether crash tracing is switched off and compiled out")
fi fi
AC_PROG_CC # Compiler
AC_PROG_CXX
AC_PROG_INSTALL
AC_PROG_MAKE_SET
AC_HEADER_STDC
AC_LANG_CPLUSPLUS AC_LANG_CPLUSPLUS
AC_SUBST(LDFLAGS) # Checks for programs.
AC_PROG_CXX
AC_PROG_CC
AC_PROG_INSTALL
AC_PROG_LN_S
AC_PROG_RANLIB
AC_PROG_MAKE_SET
AC_TYPE_SIZE_T # Checks for libraries.
AC_TYPE_SIGNAL
AC_CHECK_TYPES(siginfo_t,,,[#include <signal.h>])
AC_CHECK_TYPES(struct sigcontext,,,[#include <signal.h>])
AC_CHECK_MEMBERS([struct sigcontext.eip],,,[#include <signal.h>])
AC_CHECK_TYPES(ucontext_t,,,[#include <signal.h>])
AC_CHECK_HEADERS(mysql/mysql.h,,AC_MSG_ERROR(zm requires mysql/mysql.h),)
AC_CHECK_HEADERS(ffmpeg/avformat.h,,,)
AC_CHECK_HEADERS(libavformat/avformat.h,,,)
AC_CHECK_HEADERS(ffmpeg/swscale.h,,,)
AC_CHECK_HEADERS(libswscale/swscale.h,,,)
AC_CHECK_HEADERS(pcre/pcre.h,,,)
AC_CHECK_HEADERS(pcre.h,,,)
AC_CHECK_DECLS(round,,,[#include <math.h>])
AC_CHECK_DECLS(strsignal,,,[#include <string.h>])
if test "$ZM_SSL_LIB" == "openssl"; then
AC_CHECK_DECLS(MD5,,AC_MSG_ERROR([zm requires openssl/md5.h - use ZM_SSL_LIB option to select gnutls instead]),[#include <stdlib.h>
#include <openssl/md5.h>])
else
AC_CHECK_DECLS(MD5,,AC_MSG_ERROR([zm requires gnutls/openssl.h - use ZM_SSL_LIB option to select openssl instead]),[#include <stdlib.h>
#include <gnutls/openssl.h>])
fi
AC_CHECK_DECLS(backtrace,,,[#include <execinfo.h>])
AC_CHECK_LIB(jpeg,jpeg_start_compress,,AC_MSG_ERROR(zm requires libjpeg.a)) AC_CHECK_LIB(jpeg,jpeg_start_compress,,AC_MSG_ERROR(zm requires libjpeg.a))
AC_CHECK_LIB(z,compress,,AC_MSG_ERROR(zm requires libz.a)) AC_CHECK_LIB(z,compress,,AC_MSG_ERROR(zm requires libz.a))
AC_CHECK_LIB(dl,dlsym,,AC_MSG_ERROR(zm requires libdl.a)) AC_CHECK_LIB(dl,dlsym,,AC_MSG_ERROR(zm requires libdl.a))
@ -213,6 +190,56 @@ AC_CHECK_LIB(avcodec,avcodec_init,,AC_MSG_WARN(libavcodec.a is required for MPEG
AC_CHECK_LIB(avformat,av_new_stream,,AC_MSG_WARN(libavformat.a is required for MPEG streaming),-lavcodec) AC_CHECK_LIB(avformat,av_new_stream,,AC_MSG_WARN(libavformat.a is required for MPEG streaming),-lavcodec)
AC_CHECK_LIB(swscale,sws_scale,,,-lswscale) AC_CHECK_LIB(swscale,sws_scale,,,-lswscale)
# Checks for header files.
AC_FUNC_ALLOCA
AC_HEADER_STDC
AC_CHECK_HEADERS([fcntl.h limits.h memory.h netdb.h netinet/in.h stddef.h stdlib.h string.h strings.h sys/ioctl.h sys/param.h sys/socket.h sys/time.h syslog.h unistd.h values.h])
AC_CHECK_HEADERS(mysql/mysql.h,,AC_MSG_ERROR(zm requires mysql/mysql.h),)
AC_CHECK_HEADERS(pcre/pcre.h,,,)
AC_CHECK_HEADERS(pcre.h,,,)
# Checks for typedefs, structures, and compiler characteristics.
AC_HEADER_STDBOOL
AC_C_CONST
AC_TYPE_UID_T
AC_C_INLINE
AC_TYPE_MODE_T
AC_TYPE_SIZE_T
AC_TYPE_SSIZE_T
AC_HEADER_TIME
AC_STRUCT_TM
AC_TYPE_UINT8_T
AC_TYPE_SIGNAL
AC_CHECK_TYPES(siginfo_t,,,[#include <signal.h>])
AC_CHECK_TYPES(struct sigcontext,,,[#include <signal.h>])
AC_CHECK_MEMBERS([struct sigcontext.eip],,,[#include <signal.h>])
AC_CHECK_TYPES(ucontext_t,,,[#include <signal.h>])
# Checks for library functions.
AC_PROG_GCC_TRADITIONAL
AC_FUNC_MALLOC
AC_FUNC_MMAP
AC_FUNC_SELECT_ARGTYPES
AC_FUNC_STAT
AC_FUNC_STRFTIME
AC_FUNC_STRTOD
AC_FUNC_VPRINTF
AC_CHECK_FUNCS([gethostbyname gethostname gettimeofday memmove memset mkdir munmap putenv select socket sqrt strcasecmp strchr strcspn strerror strncasecmp strrchr strspn strstr strtol strtoull])
AC_CHECK_DECLS(round,,,[#include <math.h>])
AC_CHECK_DECLS(strsignal,,,[#include <string.h>])
if test "$ZM_SSL_LIB" == "openssl"; then
AC_CHECK_DECLS(MD5,,AC_MSG_ERROR([zm requires openssl/md5.h - use ZM_SSL_LIB option to select gnutls instead]),[#include <stdlib.h>
#include <openssl/md5.h>])
else
AC_CHECK_DECLS(MD5,,AC_MSG_ERROR([zm requires gnutls/openssl.h - use ZM_SSL_LIB option to select openssl instead]),[#include <stdlib.h>
#include <gnutls/openssl.h>])
fi
AC_CHECK_DECLS(backtrace,,,[#include <execinfo.h>])
AC_SUBST(LDFLAGS)
AC_PROG_PERL_VERSION(5.6.0) AC_PROG_PERL_VERSION(5.6.0)
AC_PROG_PERL_MODULES(Sys::Syslog,,AC_MSG_ERROR(zm requires SYS:Syslog)) AC_PROG_PERL_MODULES(Sys::Syslog,,AC_MSG_ERROR(zm requires SYS:Syslog))
@ -242,9 +269,49 @@ AC_SUBST(ZM_PID,"$ZM_RUNDIR/zm.pid")
AC_DEFINE_DIR([SYSCONFDIR],[sysconfdir],[Expanded configuration directory]) AC_DEFINE_DIR([SYSCONFDIR],[sysconfdir],[Expanded configuration directory])
AC_SUBST(ZM_CONFIG,"$SYSCONFDIR/zm.conf") AC_SUBST(ZM_CONFIG,"$SYSCONFDIR/zm.conf")
AC_OUTPUT(Makefile src/Makefile web/Makefile web/graphics/Makefile scripts/Makefile db/Makefile) AC_CONFIG_FILES([Makefile
AC_OUTPUT(zm.conf src/zm_config.h web/zm_config.php scripts/zm db/zm_create.sql) zm.conf
AC_OUTPUT(scripts/ZoneMinder/lib/ZoneMinder/Base.pm scripts/ZoneMinder/lib/ZoneMinder/Config.pm scripts/ZoneMinder/lib/ZoneMinder/ConfigAdmin.pm) db/Makefile
AC_OUTPUT(scripts/zmdbbackup scripts/zmdbrestore scripts/zmeventdump scripts/zmlogrotate.conf) db/zm_create.sql
scripts/Makefile
scripts/zm
scripts/zmdbbackup
scripts/zmdbrestore
scripts/zmeventdump
scripts/zmlogrotate.conf
scripts/ZoneMinder/lib/ZoneMinder/Base.pm
scripts/ZoneMinder/lib/ZoneMinder/Config.pm
scripts/ZoneMinder/lib/ZoneMinder/ConfigAdmin.pm
src/Makefile
src/zm_config.h
web/Makefile
web/ajax/Makefile
web/css/Makefile
web/graphics/Makefile
web/includes/Makefile
web/includes/config.php
web/js/Makefile
web/lang/Makefile
web/skins/Makefile
web/skins/classic/Makefile
web/skins/classic/ajax/Makefile
web/skins/classic/css/Makefile
web/skins/classic/graphics/Makefile
web/skins/classic/includes/Makefile
web/skins/classic/js/Makefile
web/skins/classic/lang/Makefile
web/skins/classic/views/Makefile
web/skins/classic/views/css/Makefile
web/skins/classic/views/js/Makefile
web/skins/mobile/Makefile
web/skins/mobile/ajax/Makefile
web/skins/mobile/css/Makefile
web/skins/mobile/graphics/Makefile
web/skins/mobile/includes/Makefile
web/skins/mobile/lang/Makefile
web/skins/mobile/views/Makefile
web/skins/mobile/views/css/Makefile
web/views/Makefile])
AC_OUTPUT
AC_CHECK_FILE(scripts/ZoneMinder/Makefile,,[cd scripts/ZoneMinder;perl Makefile.PL]) AC_CHECK_FILE(scripts/ZoneMinder/Makefile,,[cd scripts/ZoneMinder;perl Makefile.PL])

View File

@ -823,8 +823,8 @@ insert into Config set Id = 173, Name = 'ZM_WEB_P_DEFAULT_RATE', Value = '100',
insert into Config set Id = 174, Name = 'ZM_WEB_P_SCALE_THUMBS', Value = '1', Type = 'boolean', DefaultValue = 'yes', Hint = 'yes|no', Pattern = '(?i-xsm:^([yn]))', Format = ' ($1 =~ /^y/) ? \"yes\" : \"no\" ', Prompt = 'Whether to scale thumbnails in events, bandwidth versus cpu in rescaling', Help = 'If unset, this option sends the whole image to the browser which resizes it in the window. If set the image is scaled down on the server before sending a reduced size image to the browser to conserve bandwidth at the cost of cpu on the server', Category = 'phoneband', Readonly = '0', Requires = 'ZM_PATH_NETPBM=/'; insert into Config set Id = 174, Name = 'ZM_WEB_P_SCALE_THUMBS', Value = '1', Type = 'boolean', DefaultValue = 'yes', Hint = 'yes|no', Pattern = '(?i-xsm:^([yn]))', Format = ' ($1 =~ /^y/) ? \"yes\" : \"no\" ', Prompt = 'Whether to scale thumbnails in events, bandwidth versus cpu in rescaling', Help = 'If unset, this option sends the whole image to the browser which resizes it in the window. If set the image is scaled down on the server before sending a reduced size image to the browser to conserve bandwidth at the cost of cpu on the server', Category = 'phoneband', Readonly = '0', Requires = 'ZM_PATH_NETPBM=/';
insert into Config set Id = 175, Name = 'ZM_WEB_P_AJAX_TIMEOUT', Value = '10000', Type = 'integer', DefaultValue = '10000', Hint = 'integer', Pattern = '(?-xism:^(\d+)$)', Format = ' $1 ', Prompt = 'How long to wait for Ajax request responses (ms)', Help = 'The newer versions of the live feed and event views use Ajax to request information from the server and populate the views dynamically. This option allows you to specify a timeout if required after which requests are abandoned. A timeout may be necessary if requests would overwise hang such as on a slow connection. This would tend to consume a lot of browser memory and make the interface unresponsive. Ordinarily no requests should timeout so this setting should be set to a value greater than the slowest expected response. This value is in milliseconds but if set to zero then no timeout will be used.', Category = 'phoneband', Readonly = '0', Requires = ''; insert into Config set Id = 175, Name = 'ZM_WEB_P_AJAX_TIMEOUT', Value = '10000', Type = 'integer', DefaultValue = '10000', Hint = 'integer', Pattern = '(?-xism:^(\d+)$)', Format = ' $1 ', Prompt = 'How long to wait for Ajax request responses (ms)', Help = 'The newer versions of the live feed and event views use Ajax to request information from the server and populate the views dynamically. This option allows you to specify a timeout if required after which requests are abandoned. A timeout may be necessary if requests would overwise hang such as on a slow connection. This would tend to consume a lot of browser memory and make the interface unresponsive. Ordinarily no requests should timeout so this setting should be set to a value greater than the slowest expected response. This value is in milliseconds but if set to zero then no timeout will be used.', Category = 'phoneband', Readonly = '0', Requires = '';
insert into Config set Id = 176, Name = 'ZM_DYN_LAST_VERSION', Value = '', Type = 'string', DefaultValue = '', Hint = 'string', Pattern = '(?-xism:^(.+)$)', Format = ' $1 ', Prompt = 'What the last version of ZoneMinder recorded from zoneminder.com is', Help = '', Category = 'dynamic', Readonly = '1', Requires = ''; insert into Config set Id = 176, Name = 'ZM_DYN_LAST_VERSION', Value = '', Type = 'string', DefaultValue = '', Hint = 'string', Pattern = '(?-xism:^(.+)$)', Format = ' $1 ', Prompt = 'What the last version of ZoneMinder recorded from zoneminder.com is', Help = '', Category = 'dynamic', Readonly = '1', Requires = '';
insert into Config set Id = 177, Name = 'ZM_DYN_CURR_VERSION', Value = '@VERSION@', Type = 'string', DefaultValue = '1.23.2', Hint = 'string', Pattern = '(?-xism:^(.+)$)', Format = ' $1 ', Prompt = 'What the effective current version of ZoneMinder is, might be different from actual if versions ignored', Help = '', Category = 'dynamic', Readonly = '1', Requires = ''; insert into Config set Id = 177, Name = 'ZM_DYN_CURR_VERSION', Value = '@VERSION@', Type = 'string', DefaultValue = '1.23.3', Hint = 'string', Pattern = '(?-xism:^(.+)$)', Format = ' $1 ', Prompt = 'What the effective current version of ZoneMinder is, might be different from actual if versions ignored', Help = '', Category = 'dynamic', Readonly = '1', Requires = '';
insert into Config set Id = 178, Name = 'ZM_DYN_DB_VERSION', Value = '@VERSION@', Type = 'string', DefaultValue = '1.23.2', Hint = 'string', Pattern = '(?-xism:^(.+)$)', Format = ' $1 ', Prompt = 'What the version of the database is, from zmupdate', Help = '', Category = 'dynamic', Readonly = '1', Requires = ''; insert into Config set Id = 178, Name = 'ZM_DYN_DB_VERSION', Value = '@VERSION@', Type = 'string', DefaultValue = '1.23.3', Hint = 'string', Pattern = '(?-xism:^(.+)$)', Format = ' $1 ', Prompt = 'What the version of the database is, from zmupdate', Help = '', Category = 'dynamic', Readonly = '1', Requires = '';
insert into Config set Id = 179, Name = 'ZM_DYN_LAST_CHECK', Value = '', Type = 'integer', DefaultValue = '', Hint = 'integer', Pattern = '(?-xism:^(\d+)$)', Format = ' $1 ', Prompt = 'When the last check for version from zoneminder.com was', Help = '', Category = 'dynamic', Readonly = '1', Requires = ''; insert into Config set Id = 179, Name = 'ZM_DYN_LAST_CHECK', Value = '', Type = 'integer', DefaultValue = '', Hint = 'integer', Pattern = '(?-xism:^(\d+)$)', Format = ' $1 ', Prompt = 'When the last check for version from zoneminder.com was', Help = '', Category = 'dynamic', Readonly = '1', Requires = '';
insert into Config set Id = 180, Name = 'ZM_DYN_NEXT_REMINDER', Value = '', Type = 'string', DefaultValue = '', Hint = 'string', Pattern = '(?-xism:^(.+)$)', Format = ' $1 ', Prompt = 'When the earliest time to remind about versions will be', Help = '', Category = 'dynamic', Readonly = '1', Requires = ''; insert into Config set Id = 180, Name = 'ZM_DYN_NEXT_REMINDER', Value = '', Type = 'string', DefaultValue = '', Hint = 'string', Pattern = '(?-xism:^(.+)$)', Format = ' $1 ', Prompt = 'When the earliest time to remind about versions will be', Help = '', Category = 'dynamic', Readonly = '1', Requires = '';
insert into Config set Id = 181, Name = 'ZM_DYN_DONATE_REMINDER_TIME', Value = '0', Type = 'integer', DefaultValue = '0', Hint = 'integer', Pattern = '(?-xism:^(\d+)$)', Format = ' $1 ', Prompt = 'When the earliest time to remind about donations will be', Help = '', Category = 'dynamic', Readonly = '1', Requires = ''; insert into Config set Id = 181, Name = 'ZM_DYN_DONATE_REMINDER_TIME', Value = '0', Type = 'integer', DefaultValue = '0', Hint = 'integer', Pattern = '(?-xism:^(\d+)$)', Format = ' $1 ', Prompt = 'When the earliest time to remind about donations will be', Help = '', Category = 'dynamic', Readonly = '1', Requires = '';

View File

@ -631,30 +631,6 @@ our @options =
type => $types{boolean}, type => $types{boolean},
category => "web", category => "web",
}, },
{
name => "ZM_WEB_MONTAGE_MAX_COLS",
default => "2",
description => "The maximum number of monitor columns in the montage view",
help => "The 'montage' view shows images from all your monitors at once. This parameter defines how many monitors to place across your screen before moving to the next row. If you have a very wide screen and/or small images from your cameras this can be a bigger value however if not, of if you prefer the images stacked vertically it should be small.",
type => $types{integer},
category => "web",
},
{
name => "ZM_WEB_MONTAGE_WIDTH",
default => "0",
description => "What width should each monitor in the montage view be",
help => "In the montage view it is possible to view all of your monitors at once. If they are all different sizes this can be fairly untidy. Setting this option allows you to constrain the width of each of the monitor views to a fixed value to make the window tidier overall. Leaving it at the default of zero lets each monitor be displayed at it's normal native size.",
type => $types{integer},
category => "web",
},
{
name => "ZM_WEB_MONTAGE_HEIGHT",
default => "0",
description => "What height should each monitor in the montage view be",
help => "In the montage view it is possible to view all of your monitors at once. If they are all different sizes this can be fairly untidy. Setting this option allows you to constrain the height of each of the monitor views to a fixed value to make the window tidier overall. Leaving it at the default of zero lets each monitor be displayed at it's normal native size.",
type => $types{integer},
category => "web",
},
{ {
name => "ZM_OPT_FAST_DELETE", name => "ZM_OPT_FAST_DELETE",
default => "yes", default => "yes",
@ -1140,15 +1116,6 @@ body = "ZM alarm detected - %EL% secs, %EF%/%EFA% frames, t%EST%/m%ESM%/a%ESA% s
type => { db_type=>"string", hint=>"javascript|http", pattern=>qr|^([jh])|i, format=>q( $1 =~ /^j/ ? "javascript" : "http" ) }, type => { db_type=>"string", hint=>"javascript|http", pattern=>qr|^([jh])|i, format=>q( $1 =~ /^j/ ? "javascript" : "http" ) },
category => "web", category => "web",
}, },
{
name => "ZM_WEB_DOUBLE_BUFFER",
default => "yes",
description => "Whether still images should be double buffered to avoid flickering",
requires => [ { name => "ZM_WEB_REFRESH_METHOD", value => "javascript" } ],
help => "From version 1.18.0 ZoneMinder can use a double buffering method to preload still image prior to displaying them on screen. This reduces flickering and makes viewing still images a more pleasant experience. However some devices may not support the JavaScript/frames combination needed to make this possible in which case this option should be switched off. As this option uses JavaScript it will only have an effect if the ZM_WEB_REFRESH_METHOD option is set to JavaScript also.",
type => $types{boolean},
category => "web",
},
{ {
name => "ZM_WEB_EVENT_SORT_FIELD", name => "ZM_WEB_EVENT_SORT_FIELD",
default => "DateTime", default => "DateTime",
@ -1173,22 +1140,6 @@ body = "ZM alarm detected - %EL% secs, %EF%/%EFA% frames, t%EST%/m%ESM%/a%ESA% s
type => $types{integer}, type => $types{integer},
category => "web", category => "web",
}, },
{
name => "ZM_WEB_FRAMES_PER_LINE",
default => "4",
description => "How many frames to list per line in the frame view",
help => "In the event frame view you can view the individual frames that comprise an event. This option allows you to specify how many frames go on each line. The product of this option and the frame lines option are the number of frames per page",
type => $types{integer},
category => "web",
},
{
name => "ZM_WEB_FRAME_LINES",
default => "4",
description => "How many lines of frames to list in the frame view",
help => "In the event frame view you can view the individual frames that comprise an event. This option allows you to specify how many lines of frames are shown per page. The product of this option and the frames per line option are the number of frames per page.",
type => $types{integer},
category => "web",
},
{ {
name => "ZM_WEB_LIST_THUMBS", name => "ZM_WEB_LIST_THUMBS",
default => "no", default => "no",
@ -1217,17 +1168,9 @@ body = "ZM alarm detected - %EL% secs, %EF%/%EFA% frames, t%EST%/m%ESM%/a%ESA% s
}, },
{ {
name => "ZM_WEB_USE_OBJECT_TAGS", name => "ZM_WEB_USE_OBJECT_TAGS",
default => "no", default => "yes",
description => "Whether to wrap embed in object tags for media content", description => "Whether to wrap embed in object tags for media content",
help => "There are two methods of including media content in web pages. The most common way is use the EMBED tag which is able to give some indication of the type of content. However this is not a standard part of HTML. The official method is to use OBJECT tags which are able to give more information allowing the correct media viewers etc to be loaded. However these are less widely supported and content may be specifically tailored to a particular platform or player. This option controls whether media content is enclosed in EMBED tags only or whether, where appropriate, it is additionally wrapped in OBJECT tags. Currently OBJECT tags are only used in a limited number of circumstances but they may become more widespread in the future. It is suggested that you leave this option off unless you encounter problems playing some content.", help => "There are two methods of including media content in web pages. The most common way is use the EMBED tag which is able to give some indication of the type of content. However this is not a standard part of HTML. The official method is to use OBJECT tags which are able to give more information allowing the correct media viewers etc to be loaded. However these are less widely supported and content may be specifically tailored to a particular platform or player. This option controls whether media content is enclosed in EMBED tags only or whether, where appropriate, it is additionally wrapped in OBJECT tags. Currently OBJECT tags are only used in a limited number of circumstances but they may become more widespread in the future. It is suggested that you leave this option on unless you encounter problems playing some content.",
type => $types{boolean},
category => "web",
},
{
name => "ZM_WEB_DVR_STREAMING",
default => "no",
description => "Whether to use new DVR style streaming (beta)",
help => "There are now two methods of viewing monitor and event streams. The default is to use the old framed style pages which allowed limited control over the streams but which have been thoroughly tested. The alternative is to use the newer pure CSS and Ajax views which are precursors to a number of changes that will be taking place in the web view over the next view versions. These views allow full DVR control including pause, rewind, pan and zoom etc, but which have not received so much testing and which may not work partly or at all on some browsers. It is recommended that you select the new views unless you find problems with them.",
type => $types{boolean}, type => $types{boolean},
category => "web", category => "web",
}, },

View File

@ -839,7 +839,7 @@ void Monitor::DumpZoneImage( const char *zone_string )
} }
static char filename[PATH_MAX]; static char filename[PATH_MAX];
snprintf( filename, sizeof(filename), "%s-Zones.jpg", name ); snprintf( filename, sizeof(filename), "Zones%d.jpg", id );
zone_image.WriteJpeg( filename ); zone_image.WriteJpeg( filename );
} }
@ -2758,6 +2758,7 @@ void MonitorStream::processCommand( const CmdMsg *msg )
} }
struct { struct {
int id;
double fps; double fps;
int state; int state;
int buffer_level; int buffer_level;
@ -2770,6 +2771,7 @@ void MonitorStream::processCommand( const CmdMsg *msg )
bool forced; bool forced;
} status_data; } status_data;
status_data.id = monitor->Id();
status_data.fps = monitor->GetFPS(); status_data.fps = monitor->GetFPS();
status_data.state = monitor->shared_data->state; status_data.state = monitor->shared_data->state;
status_data.buffer_level = (MOD_ADD( (temp_write_index-temp_read_index), 0, temp_image_buffer_count )*100)/temp_image_buffer_count; status_data.buffer_level = (MOD_ADD( (temp_write_index-temp_read_index), 0, temp_image_buffer_count )*100)/temp_image_buffer_count;

View File

@ -7,256 +7,28 @@ webuser = @WEB_USER@
webgroup = @WEB_GROUP@ webgroup = @WEB_GROUP@
SUBDIRS = \ SUBDIRS = \
graphics ajax \
css \
graphics \
includes \
js \
lang \
skins \
views
web_DATA = \ dist_web_DATA = \
favicon.ico \ favicon.ico \
mootools.ext.js \ index.php
zm.php \
zm_actions.php \
zm_config.php \
zm_control_funcs.php \
zm_control_funcsX.php \
zm_db.php \
zm_export_funcs.php \
zm_funcs.php \
zm_request_alarm.php \
zm_request_control.php \
zm_request_event.php \
zm_request_status.php \
zm_request_stream.php \
zm_html.php \
zm_html.js \
zm_html_js.php \
zm_html_reset.css \
zm_html_base.css \
zm_html_styles.css \
zm_html_config.php \
zm_html_view_bandwidth.php \
zm_html_view_blank.php \
zm_html_view_console.php \
zm_html_view_control.php \
zm_html_view_controlcaps.php \
zm_html_view_controlmenu.php \
zm_html_view_controlpanel.php \
zm_html_view_controlpreset.php \
zm_html_view_controlcaps.php \
zm_html_view_controlcap.php \
zm_html_view_cycle.php \
zm_html_view_device.php \
zm_html_view_devices.php \
zm_html_view_donate.php \
zm_html_view_error.php \
zm_html_view_event.php \
zm_html_view_eventX.php \
zm_html_view_eventX.css \
zm_html_view_eventdetail.php \
zm_html_view_events.php \
zm_html_view_export.php \
zm_html_view_filter.php \
zm_html_view_filtersave.php \
zm_html_view_frame.php \
zm_html_view_frames.php \
zm_html_view_function.php \
zm_html_view_login.php \
zm_html_view_group.php \
zm_html_view_groups.php \
zm_html_view_logout.php \
zm_html_view_monitor.php \
zm_html_view_monitorpreset.php \
zm_html_view_monitorselect.php \
zm_html_view_montagefeed.php \
zm_html_view_montageframe.php \
zm_html_view_montagemenu.php \
zm_html_view_montage.php \
zm_html_view_montagestatus.php \
zm_html_view_none.php \
zm_html_view_optionhelp.php \
zm_html_view_options.php \
zm_html_view_postlogin.php \
zm_html_view_settings.php \
zm_html_view_siren.php \
zm_html_view_state.php \
zm_html_view_stats.php \
zm_html_view_status.php \
zm_html_view_timeline.php \
zm_html_view_user.php \
zm_html_view_version.php \
zm_html_view_video.php \
zm_html_view_watchevents.php \
zm_html_view_watchfeed.php \
zm_html_view_watchmenu.php \
zm_html_view_watch.php \
zm_html_view_watchstatus.php \
zm_html_view_watchX.php \
zm_html_view_watchX.css \
zm_html_view_zone.php \
zm_html_view_zones.php \
zm_xhtml.php \
zm_xhtml_styles.css \
zm_xhtml_config.php \
zm_xhtml_view_console.php \
zm_xhtml_view_devices.php \
zm_xhtml_view_error.php \
zm_xhtml_view_eventdetails.php \
zm_xhtml_view_event.php \
zm_xhtml_view_events.php \
zm_xhtml_view_filter.php \
zm_xhtml_view_frame.php \
zm_xhtml_view_function.php \
zm_xhtml_view_login.php \
zm_xhtml_view_montage.php \
zm_xhtml_view_state.php \
zm_xhtml_view_video.php \
zm_xhtml_view_watch.php \
zm_lang.php \
zm_lang_big5_big5.php \
zm_lang_de_de.php \
zm_lang_en_gb.php \
zm_lang_en_us.php \
zm_lang_fr_fr.php \
zm_lang_ja_jp.php \
zm_lang_pl_pl.php \
zm_lang_ru_ru.php \
zm_lang_nl_nl.php \
zm_lang_it_it.php \
zm_lang_es_ar.php \
zm_lang_pt_br.php \
zm_lang_dk_dk.php \
zm_lang_cs_cz.php \
zm_lang_ro_ro.php \
zm_lang_he_il.php \
zm_lang_hu_hu.php
EXTRA_DIST = \
retag.sh \
swap.pl \
favicon.ico \
mootools.ext.js \
zm.php \
zm_actions.php \
zm_config.php.in \
zm_control_funcs.php \
zm_control_funcsX.php \
zm_db.php \
zm_export_funcs.php \
zm_funcs.php \
zm_request_alarm.php \
zm_request_control.php \
zm_request_event.php \
zm_request_status.php \
zm_request_stream.php \
zm_html.php \
zm_html.js \
zm_html_js.php \
zm_html_reset.css \
zm_html_base.css \
zm_html_styles.css \
zm_html_config.php \
zm_html_view_bandwidth.php \
zm_html_view_blank.php \
zm_html_view_console.php \
zm_html_view_control.php \
zm_html_view_controlmenu.php \
zm_html_view_controlpanel.php \
zm_html_view_controlpreset.php \
zm_html_view_controlcaps.php \
zm_html_view_controlcap.php \
zm_html_view_cycle.php \
zm_html_view_device.php \
zm_html_view_devices.php \
zm_html_view_donate.php \
zm_html_view_error.php \
zm_html_view_event.php \
zm_html_view_eventX.php \
zm_html_view_eventX.css \
zm_html_view_eventdetail.php \
zm_html_view_events.php \
zm_html_view_export.php \
zm_html_view_filter.php \
zm_html_view_filtersave.php \
zm_html_view_frame.php \
zm_html_view_frames.php \
zm_html_view_function.php \
zm_html_view_group.php \
zm_html_view_groups.php \
zm_html_view_login.php \
zm_html_view_logout.php \
zm_html_view_monitor.php \
zm_html_view_monitorpreset.php \
zm_html_view_monitorselect.php \
zm_html_view_montagefeed.php \
zm_html_view_montageframe.php \
zm_html_view_montage.php \
zm_html_view_montagemenu.php \
zm_html_view_montagestatus.php \
zm_html_view_none.php \
zm_html_view_optionhelp.php \
zm_html_view_options.php \
zm_html_view_postlogin.php \
zm_html_view_settings.php \
zm_html_view_siren.php \
zm_html_view_state.php \
zm_html_view_stats.php \
zm_html_view_status.php \
zm_html_view_timeline.php \
zm_html_view_user.php \
zm_html_view_version.php \
zm_html_view_video.php \
zm_html_view_watchevents.php \
zm_html_view_watchfeed.php \
zm_html_view_watchmenu.php \
zm_html_view_watch.php \
zm_html_view_watchX.php \
zm_html_view_watchX.css \
zm_html_view_watchstatus.php \
zm_html_view_zone.php \
zm_html_view_zones.php \
zm_xhtml.php \
zm_xhtml_styles.css \
zm_xhtml_config.php \
zm_xhtml_view_console.php \
zm_xhtml_view_devices.php \
zm_xhtml_view_error.php \
zm_xhtml_view_eventdetails.php \
zm_xhtml_view_event.php \
zm_xhtml_view_events.php \
zm_xhtml_view_filter.php \
zm_xhtml_view_frame.php \
zm_xhtml_view_function.php \
zm_xhtml_view_login.php \
zm_xhtml_view_montage.php \
zm_xhtml_view_state.php \
zm_xhtml_view_video.php \
zm_xhtml_view_watch.php \
zm_lang.php \
zm_lang_big5_big5.php \
zm_lang_de_de.php \
zm_lang_en_gb.php \
zm_lang_en_us.php \
zm_lang_fr_fr.php \
zm_lang_ja_jp.php \
zm_lang_pl_pl.php \
zm_lang_ru_ru.php \
zm_lang_nl_nl.php \
zm_lang_it_it.php \
zm_lang_es_ar.php \
zm_lang_pt_br.php \
zm_lang_dk_dk.php \
zm_lang_cs_cz.php \
zm_lang_ro_ro.php \
zm_lang_he_il.php \
zm_lang_hu_hu.php
# Yes, you are correct. This is a HACK! # Yes, you are correct. This is a HACK!
install-data-hook: install-data-hook:
( cd $(DESTDIR)$(webdir); chown $(webuser):$(webgroup) $(web_DATA) ) ( cd $(DESTDIR)$(webdir); chown $(webuser):$(webgroup) $(dist_web_DATA) )
( cd $(DESTDIR)$(webdir); chown -R $(webuser):$(webgroup) $(SUBDIRS) )
@-( cd $(DESTDIR)$(webdir); if ! test -e events; then mkdir events; fi; chown $(webuser):$(webgroup) events; chmod u+w events ) @-( cd $(DESTDIR)$(webdir); if ! test -e events; then mkdir events; fi; chown $(webuser):$(webgroup) events; chmod u+w events )
@-( cd $(DESTDIR)$(webdir); if ! test -e graphics; then mkdir graphics; fi; chown $(webuser):$(webgroup) graphics; chmod u+w graphics )
@-( cd $(DESTDIR)$(webdir); if ! test -e images; then mkdir images; fi; chown $(webuser):$(webgroup) images; chmod u+w images ) @-( cd $(DESTDIR)$(webdir); if ! test -e images; then mkdir images; fi; chown $(webuser):$(webgroup) images; chmod u+w images )
@-( cd $(DESTDIR)$(webdir); if ! test -e sounds; then mkdir sounds; fi; chown $(webuser):$(webgroup) sounds; chmod u+w sounds ) @-( cd $(DESTDIR)$(webdir); if ! test -e sounds; then mkdir sounds; fi; chown $(webuser):$(webgroup) sounds; chmod u+w sounds )
@-( cd $(DESTDIR)$(webdir); if ! test -e temp; then mkdir temp; fi; chown $(webuser):$(webgroup) temp; chmod u+w temp ) @-( cd $(DESTDIR)$(webdir); if ! test -e temp; then mkdir temp; fi; chown $(webuser):$(webgroup) temp; chmod u+w temp )
-( cd $(DESTDIR)$(webdir); ln -s zm.php index.php )
uninstall-hook: uninstall-hook:
@-( cd $(DESTDIR)$(webdir); rm -rf events graphics images sounds temp ) @-( cd $(DESTDIR)$(webdir); rm -rf $(SUBDIRS) )
@-( cd $(DESTDIR)$(webdir); rm -rf events images sounds temp )

11
web/ajax/Makefile.am Normal file
View File

@ -0,0 +1,11 @@
AUTOMAKE_OPTIONS = gnu
webdir = @WEB_PREFIX@/ajax
dist_web_DATA = \
alarm.php \
control.php \
event.php \
status.php \
stream.php \
zone.php

View File

@ -5,8 +5,6 @@ if ( !canView( 'Stream' ) )
return; return;
} }
error_reporting( E_ALL );
define( "MSG_TIMEOUT", 2.0 ); define( "MSG_TIMEOUT", 2.0 );
define( "MSG_DATA_SIZE", 4+256 ); define( "MSG_DATA_SIZE", 4+256 );

View File

@ -16,14 +16,14 @@ if ( !$_REQUEST['id'] )
$monitor = dbFetchOne( "select C.*,M.* from Monitors as M inner join Controls as C on (M.ControlId = C.Id ) where M.Id = '".$_REQUEST['id']."'" ); $monitor = dbFetchOne( "select C.*,M.* from Monitors as M inner join Controls as C on (M.ControlId = C.Id ) where M.Id = '".$_REQUEST['id']."'" );
$ctrl_command = ZM_PATH_BIN."/zmcontrol.pl"; $ctrlCommand = ZM_PATH_BIN."/zmcontrol.pl";
if ( isset($xge) || isset($yge) ) if ( isset($_REQUEST['xge']) || isset($_REQUEST['yge']) )
{ {
$slow = 0.9; // Threshold for slow speed/timeouts $slow = 0.9; // Threshold for slow speed/timeouts
$turbo = 0.9; // Threshold for turbo speed $turbo = 0.9; // Threshold for turbo speed
if ( preg_match( '/^([a-z]+)([A-Z][a-z]+)([A-Z][a-z]+)+$/', $control, $matches ) ) if ( preg_match( '/^([a-z]+)([A-Z][a-z]+)([A-Z][a-z]+)+$/', $_REQUEST['control'], $matches ) )
{ {
$command = $matches[1]; $command = $matches[1];
$mode = $matches[2]; $mode = $matches[2];
@ -33,11 +33,11 @@ if ( isset($xge) || isset($yge) )
{ {
case 'focus' : case 'focus' :
{ {
$factor = $yge/100; $factor = $_REQUEST['yge']/100;
if ( $monitor['HasFocusSpeed'] ) if ( $monitor['HasFocusSpeed'] )
{ {
$speed = intval(round($monitor['MinFocusSpeed']+(($monitor['MaxFocusSpeed']-$monitor['MinFocusSpeed'])*$factor))); $speed = intval(round($monitor['MinFocusSpeed']+(($monitor['MaxFocusSpeed']-$monitor['MinFocusSpeed'])*$factor)));
$ctrl_command .= " --speed=".$speed; $ctrlCommand .= " --speed=".$speed;
} }
switch( $mode ) switch( $mode )
{ {
@ -45,17 +45,17 @@ if ( isset($xge) || isset($yge) )
case 'Rel' : case 'Rel' :
{ {
$step = intval(round($monitor['MinFocusStep']+(($monitor['MaxFocusStep']-$monitor['MinFocusStep'])*$factor))); $step = intval(round($monitor['MinFocusStep']+(($monitor['MaxFocusStep']-$monitor['MinFocusStep'])*$factor)));
$ctrl_command .= " --step=".$step; $ctrlCommand .= " --step=".$step;
break; break;
} }
case 'Con' : case 'Con' :
{ {
if ( $monitor['AutoStopTimeout'] ) if ( $monitor['AutoStopTimeout'] )
{ {
$slow_speed = intval(round($monitor['MinFocusSpeed']+(($monitor['MaxFocusSpeed']-$monitor['MinFocusSpeed'])*$slow))); $slowSpeed = intval(round($monitor['MinFocusSpeed']+(($monitor['MaxFocusSpeed']-$monitor['MinFocusSpeed'])*$slow)));
if ( $speed < $slow_speed ) if ( $speed < $slowSpeed )
{ {
$ctrl_command .= " --autostop"; $ctrlCommand .= " --autostop";
} }
} }
break; break;
@ -65,11 +65,11 @@ if ( isset($xge) || isset($yge) )
} }
case 'zoom' : case 'zoom' :
{ {
$factor = $yge/100; $factor = $_REQUEST['yge']/100;
if ( $monitor['HasZoomSpeed'] ) if ( $monitor['HasZoomSpeed'] )
{ {
$speed = intval(round($monitor['MinZoomSpeed']+(($monitor['MaxZoomSpeed']-$monitor['MinZoomSpeed'])*$factor))); $speed = intval(round($monitor['MinZoomSpeed']+(($monitor['MaxZoomSpeed']-$monitor['MinZoomSpeed'])*$factor)));
$ctrl_command .= " --speed=".$speed; $ctrlCommand .= " --speed=".$speed;
} }
switch( $mode ) switch( $mode )
{ {
@ -77,17 +77,17 @@ if ( isset($xge) || isset($yge) )
case 'Rel' : case 'Rel' :
{ {
$step = intval(round($monitor['MinZoomStep']+(($monitor['MaxZoomStep']-$monitor['MinZoomStep'])*$factor))); $step = intval(round($monitor['MinZoomStep']+(($monitor['MaxZoomStep']-$monitor['MinZoomStep'])*$factor)));
$ctrl_command .= " --step=".$step; $ctrlCommand .= " --step=".$step;
break; break;
} }
case 'Con' : case 'Con' :
{ {
if ( $monitor['AutoStopTimeout'] ) if ( $monitor['AutoStopTimeout'] )
{ {
$slow_speed = intval(round($monitor['MinZoomSpeed']+(($monitor['MaxZoomSpeed']-$monitor['MinZoomSpeed'])*$slow))); $slowSpeed = intval(round($monitor['MinZoomSpeed']+(($monitor['MaxZoomSpeed']-$monitor['MinZoomSpeed'])*$slow)));
if ( $speed < $slow_speed ) if ( $speed < $slowSpeed )
{ {
$ctrl_command .= " --autostop"; $ctrlCommand .= " --autostop";
} }
} }
break; break;
@ -97,11 +97,11 @@ if ( isset($xge) || isset($yge) )
} }
case 'iris' : case 'iris' :
{ {
$factor = $yge/100; $factor = $_REQUEST['yge']/100;
if ( $monitor['HasIrisSpeed'] ) if ( $monitor['HasIrisSpeed'] )
{ {
$speed = intval(round($monitor['MinIrisSpeed']+(($monitor['MaxIrisSpeed']-$monitor['MinIrisSpeed'])*$factor))); $speed = intval(round($monitor['MinIrisSpeed']+(($monitor['MaxIrisSpeed']-$monitor['MinIrisSpeed'])*$factor)));
$ctrl_command .= " --speed=".$speed; $ctrlCommand .= " --speed=".$speed;
} }
switch( $mode ) switch( $mode )
{ {
@ -109,7 +109,7 @@ if ( isset($xge) || isset($yge) )
case 'Rel' : case 'Rel' :
{ {
$step = intval(round($monitor['MinIrisStep']+(($monitor['MaxIrisStep']-$monitor['MinIrisStep'])*$factor))); $step = intval(round($monitor['MinIrisStep']+(($monitor['MaxIrisStep']-$monitor['MinIrisStep'])*$factor)));
$ctrl_command .= " --step=".$step; $ctrlCommand .= " --step=".$step;
break; break;
} }
} }
@ -117,11 +117,11 @@ if ( isset($xge) || isset($yge) )
} }
case 'white' : case 'white' :
{ {
$factor = $yge/100; $factor = $_REQUEST['yge']/100;
if ( $monitor['HasWhiteSpeed'] ) if ( $monitor['HasWhiteSpeed'] )
{ {
$speed = intval(round($monitor['MinWhiteSpeed']+(($monitor['MaxWhiteSpeed']-$monitor['MinWhiteSpeed'])*$factor))); $speed = intval(round($monitor['MinWhiteSpeed']+(($monitor['MaxWhiteSpeed']-$monitor['MinWhiteSpeed'])*$factor)));
$ctrl_command .= " --speed=".$speed; $ctrlCommand .= " --speed=".$speed;
} }
switch( $mode ) switch( $mode )
{ {
@ -129,7 +129,7 @@ if ( isset($xge) || isset($yge) )
case 'Rel' : case 'Rel' :
{ {
$step = intval(round($monitor['MinWhiteStep']+(($monitor['MaxWhiteStep']-$monitor['MinWhiteStep'])*$factor))); $step = intval(round($monitor['MinWhiteStep']+(($monitor['MaxWhiteStep']-$monitor['MinWhiteStep'])*$factor)));
$ctrl_command .= " --step=".$step; $ctrlCommand .= " --step=".$step;
break; break;
} }
} }
@ -137,11 +137,11 @@ if ( isset($xge) || isset($yge) )
} }
case 'gain' : case 'gain' :
{ {
$factor = $yge/100; $factor = $_REQUEST['yge']/100;
if ( $monitor['HasGainSpeed'] ) if ( $monitor['HasGainSpeed'] )
{ {
$speed = intval(round($monitor['MinGainSpeed']+(($monitor['MaxGainSpeed']-$monitor['MinGainSpeed'])*$factor))); $speed = intval(round($monitor['MinGainSpeed']+(($monitor['MaxGainSpeed']-$monitor['MinGainSpeed'])*$factor)));
$ctrl_command .= " --speed=".$speed; $ctrlCommand .= " --speed=".$speed;
} }
switch( $mode ) switch( $mode )
{ {
@ -149,7 +149,7 @@ if ( isset($xge) || isset($yge) )
case 'Rel' : case 'Rel' :
{ {
$step = intval(round($monitor['MinGainStep']+(($monitor['MaxGainStep']-$monitor['MinGainStep'])*$factor))); $step = intval(round($monitor['MinGainStep']+(($monitor['MaxGainStep']-$monitor['MinGainStep'])*$factor)));
$ctrl_command .= " --step=".$step; $ctrlCommand .= " --step=".$step;
break; break;
} }
} }
@ -157,8 +157,8 @@ if ( isset($xge) || isset($yge) )
} }
case 'move' : case 'move' :
{ {
$x_factor = empty($xge)?0:$xge/100; $xFactor = empty($_REQUEST['xge'])?0:$_REQUEST['xge']/100;
$y_factor = empty($yge)?0:$yge/100; $yFactor = empty($_REQUEST['yge'])?0:$_REQUEST['yge']/100;
if ( $monitor['Orientation'] != '0' ) if ( $monitor['Orientation'] != '0' )
{ {
@ -215,49 +215,49 @@ if ( isset($xge) || isset($yge) )
), ),
); );
$new_dirn = $conversions[$monitor['Orientation']][$dirn]; $new_dirn = $conversions[$monitor['Orientation']][$dirn];
$control = preg_replace( "/_$dirn\$/", "_$new_dirn", $control ); $_REQUEST['control'] = preg_replace( "/_$dirn\$/", "_$new_dirn", $_REQUEST['control'] );
$dirn = $new_dirn; $dirn = $new_dirn;
} }
if ( $monitor['HasPanSpeed'] && $x_factor ) if ( $monitor['HasPanSpeed'] && $xFactor )
{ {
if ( $monitor['HasTurboPan'] ) if ( $monitor['HasTurboPan'] )
{ {
if ( $x_factor >= $turbo ) if ( $xFactor >= $turbo )
{ {
$pan_speed = $monitor['TurboPanSpeed']; $panSpeed = $monitor['TurboPanSpeed'];
} }
else else
{ {
$x_factor = $x_factor/$turbo; $xFactor = $xFactor/$turbo;
$pan_speed = intval(round($monitor['MinPanSpeed']+(($monitor['MaxPanSpeed']-$monitor['MinPanSpeed'])*$x_factor))); $panSpeed = intval(round($monitor['MinPanSpeed']+(($monitor['MaxPanSpeed']-$monitor['MinPanSpeed'])*$xFactor)));
} }
} }
else else
{ {
$pan_speed = intval(round($monitor['MinPanSpeed']+(($monitor['MaxPanSpeed']-$monitor['MinPanSpeed'])*$x_factor))); $panSpeed = intval(round($monitor['MinPanSpeed']+(($monitor['MaxPanSpeed']-$monitor['MinPanSpeed'])*$xFactor)));
} }
$ctrl_command .= " --panspeed=".$pan_speed; $ctrlCommand .= " --panspeed=".$panSpeed;
} }
if ( $monitor['HasTiltSpeed'] && $y_factor ) if ( $monitor['HasTiltSpeed'] && $yFactor )
{ {
if ( $monitor['HasTurboTilt'] ) if ( $monitor['HasTurboTilt'] )
{ {
if ( $y_factor >= $turbo ) if ( $yFactor >= $turbo )
{ {
$tilt_speed = $monitor['TurboTiltSpeed']; $tiltSpeed = $monitor['TurboTiltSpeed'];
} }
else else
{ {
$y_factor = $y_factor/$turbo; $yFactor = $yFactor/$turbo;
$tilt_speed = intval(round($monitor['MinTiltSpeed']+(($monitor['MaxTiltSpeed']-$monitor['MinTiltSpeed'])*$y_factor))); $tiltSpeed = intval(round($monitor['MinTiltSpeed']+(($monitor['MaxTiltSpeed']-$monitor['MinTiltSpeed'])*$yFactor)));
} }
} }
else else
{ {
$tilt_speed = intval(round($monitor['MinTiltSpeed']+(($monitor['MaxTiltSpeed']-$monitor['MinTiltSpeed'])*$y_factor))); $tiltSpeed = intval(round($monitor['MinTiltSpeed']+(($monitor['MaxTiltSpeed']-$monitor['MinTiltSpeed'])*$yFactor)));
} }
$ctrl_command .= " --tiltspeed=".$tilt_speed; $ctrlCommand .= " --tiltspeed=".$tiltSpeed;
} }
switch( $mode ) switch( $mode )
{ {
@ -266,13 +266,13 @@ if ( isset($xge) || isset($yge) )
{ {
if ( preg_match( '/(Left|Right)$/', $dirn ) ) if ( preg_match( '/(Left|Right)$/', $dirn ) )
{ {
$pan_step = intval(round($monitor['MinPanStep']+(($monitor['MaxPanStep']-$monitor['MinPanStep'])*$x_factor))); $panStep = intval(round($monitor['MinPanStep']+(($monitor['MaxPanStep']-$monitor['MinPanStep'])*$xFactor)));
$ctrl_command .= " --panstep=".$pan_step; $ctrlCommand .= " --panstep=".$panStep;
} }
if ( preg_match( '/^(Up|Down)/', $dirn ) ) if ( preg_match( '/^(Up|Down)/', $dirn ) )
{ {
$tilt_step = intval(round($monitor['MinTiltStep']+(($monitor['MaxTiltStep']-$monitor['MinTiltStep'])*$y_factor))); $tiltStep = intval(round($monitor['MinTiltStep']+(($monitor['MaxTiltStep']-$monitor['MinTiltStep'])*$yFactor)));
$ctrl_command .= " --tiltstep=".$tilt_step; $ctrlCommand .= " --tiltstep=".$tiltStep;
} }
break; break;
} }
@ -280,11 +280,11 @@ if ( isset($xge) || isset($yge) )
{ {
if ( $monitor['AutoStopTimeout'] ) if ( $monitor['AutoStopTimeout'] )
{ {
$slow_pan_speed = intval(round($monitor['MinPanSpeed']+(($monitor['MaxPanSpeed']-$monitor['MinPanSpeed'])*$slow))); $slowPanSpeed = intval(round($monitor['MinPanSpeed']+(($monitor['MaxPanSpeed']-$monitor['MinPanSpeed'])*$slow)));
$slow_tilt_speed = intval(round($monitor['MinTiltSpeed']+(($monitor['MaxTiltSpeed']-$monitor['MinTiltSpeed'])*$slow))); $slowTiltSpeed = intval(round($monitor['MinTiltSpeed']+(($monitor['MaxTiltSpeed']-$monitor['MinTiltSpeed'])*$slow)));
if ( (!isset($pan_speed) || ($pan_speed < $slow_pan_speed)) && (!isset($tilt_speed) || ($tilt_speed < $slow_tilt_speed)) ) if ( (!isset($panSpeed) || ($panSpeed < $slowPanSpeed)) && (!isset($tiltSpeed) || ($tiltSpeed < $slowTiltSpeed)) )
{ {
$ctrl_command .= " --autostop"; $ctrlCommand .= " --autostop";
} }
} }
break; break;
@ -294,12 +294,12 @@ if ( isset($xge) || isset($yge) )
} }
} }
} }
elseif ( isset($x) && isset($y) ) elseif ( isset($_REQUEST['x']) && isset($_REQUEST['y']) )
{ {
if ( $control == "moveMap" ) if ( $_REQUEST['control'] == "moveMap" )
{ {
$x = deScale( $x, $scale ); $x = deScale( $_REQUEST['x'], $_REQUEST['scale'] );
$y = deScale( $y, $scale ); $y = deScale( $_REQUEST['y'], $_REQUEST['scale'] );
switch ( $monitor['Orientation'] ) switch ( $monitor['Orientation'] )
{ {
case '0' : case '0' :
@ -318,18 +318,18 @@ elseif ( isset($x) && isset($y) )
switch ( $monitor['Orientation'] ) switch ( $monitor['Orientation'] )
{ {
case '90' : case '90' :
$temp_y = $y; $tempY = $y;
$y = $height - $x; $y = $height - $x;
$x = $temp_y; $x = $tempY;
break; break;
case '180' : case '180' :
$x = $width - $x; $x = $width - $x;
$y = $height - $y; $y = $height - $y;
break; break;
case '270' : case '270' :
$temp_x = $x; $tempX = $x;
$x = $width - $y; $x = $width - $y;
$y = $temp_x; $y = $tempX;
break; break;
case 'hori' : case 'hori' :
$x = $width - $x; $x = $width - $x;
@ -338,158 +338,158 @@ elseif ( isset($x) && isset($y) )
$y = $height - $y; $y = $height - $y;
break; break;
} }
//$ctrl_command .= " --xcoord=$x --ycoord=$y --width=$width --height=$height"; //$ctrlCommand .= " --xcoord=$x --ycoord=$y --width=$width --height=$height";
$ctrl_command .= " --xcoord=$x --ycoord=$y"; $ctrlCommand .= " --xcoord=$x --ycoord=$y";
} }
elseif ( $control == "movePseudoMap" ) elseif ( $_REQUEST['control'] == "movePseudoMap" )
{ {
$x = deScale( $x, $scale ); $x = deScale( $_REQUEST['x'], $_REQUEST['scale'] );
$y = deScale( $y, $scale ); $y = deScale( $_REQUEST['y'], $_REQUEST['scale'] );
$half_width = $monitor['Width'] / 2; $halfWidth = $monitor['Width'] / 2;
$half_height = $monitor['Height'] / 2; $halfHeight = $monitor['Height'] / 2;
$x_factor = ($x - $half_width)/$half_width; $xFactor = ($x - $halfWidth)/$halfWidth;
$y_factor = ($y - $half_height)/$half_height; $yFactor = ($y - $halfHeight)/$halfHeight;
switch ( $monitor['Orientation'] ) switch ( $monitor['Orientation'] )
{ {
case '90' : case '90' :
$temp_y_factor = $y; $tempYFactor = $y;
$y_factor = -$x_factor; $yFactor = -$xFactor;
$x_factor = $temp_y_factor; $xFactor = $tempYFactor;
break; break;
case '180' : case '180' :
$x_factor = -$x_factor; $xFactor = -$xFactor;
$y_factor = -$y_factor; $yFactor = -$yFactor;
break; break;
case '270' : case '270' :
$temp_x_factor = $x; $tempXFactor = $x;
$x_factor = -$y_factor; $xFactor = -$yFactor;
$y_factor = $tenp_x_factor; $yFactor = $tempXFactor;
break; break;
case 'hori' : case 'hori' :
$x_factor = -$x_factor; $xFactor = -$xFactor;
break; break;
case 'vert' : case 'vert' :
$y_factor = -$y_factor; $yFactor = -$yFactor;
break; break;
} }
$turbo = 0.9; // Threshold for turbo speed $turbo = 0.9; // Threshold for turbo speed
$blind = 0.1; // Threshold for blind spot $blind = 0.1; // Threshold for blind spot
$pan_control = ''; $panControl = '';
$tilt_control = ''; $tiltControl = '';
if ( $x_factor > $blind ) if ( $xFactor > $blind )
{ {
$pan_control = 'Right'; $panControl = 'Right';
} }
elseif ( $x_factor < -$blind ) elseif ( $xFactor < -$blind )
{ {
$pan_control = 'Left'; $panControl = 'Left';
} }
if ( $y_factor > $blind ) if ( $yFactor > $blind )
{ {
$tilt_control = 'Down'; $tiltControl = 'Down';
} }
elseif ( $y_factor < -$blind ) elseif ( $yFactor < -$blind )
{ {
$tilt_control = 'Up'; $tiltControl = 'Up';
} }
$dirn = $tilt_control.$pan_control; $dirn = $tiltControl.$panControl;
if ( !$dirn ) if ( !$dirn )
{ {
// No command, probably in blind spot in middle // No command, probably in blind spot in middle
$control = 'null'; $_REQUEST['control'] = 'null';
} }
else else
{ {
$control = 'moveRel'.$dirn; $_REQUEST['control'] = 'moveRel'.$dirn;
$x_factor = abs($x_factor); $xFactor = abs($xFactor);
$y_factor = abs($y_factor); $yFactor = abs($yFactor);
if ( $monitor['HasPanSpeed'] && $x_factor ) if ( $monitor['HasPanSpeed'] && $xFactor )
{ {
if ( $monitor['HasTurboPan'] ) if ( $monitor['HasTurboPan'] )
{ {
if ( $x_factor >= $turbo ) if ( $xFactor >= $turbo )
{ {
$pan_speed = $monitor['TurboPanSpeed']; $panSpeed = $monitor['TurboPanSpeed'];
} }
else else
{ {
$x_factor = $x_factor/$turbo; $xFactor = $xFactor/$turbo;
$pan_speed = intval(round($monitor['MinPanSpeed']+(($monitor['MaxPanSpeed']-$monitor['MinPanSpeed'])*$x_factor))); $panSpeed = intval(round($monitor['MinPanSpeed']+(($monitor['MaxPanSpeed']-$monitor['MinPanSpeed'])*$xFactor)));
} }
} }
else else
{ {
$pan_speed = intval(round($monitor['MinPanSpeed']+(($monitor['MaxPanSpeed']-$monitor['MinPanSpeed'])*$x_factor))); $panSpeed = intval(round($monitor['MinPanSpeed']+(($monitor['MaxPanSpeed']-$monitor['MinPanSpeed'])*$xFactor)));
} }
} }
if ( $monitor['HasTiltSpeed'] && $y_factor ) if ( $monitor['HasTiltSpeed'] && $yFactor )
{ {
if ( $monitor['HasTurboTilt'] ) if ( $monitor['HasTurboTilt'] )
{ {
if ( $y_factor >= $turbo ) if ( $yFactor >= $turbo )
{ {
$tilt_speed = $monitor['TurboTiltSpeed']; $tiltSpeed = $monitor['TurboTiltSpeed'];
} }
else else
{ {
$y_factor = $y_factor/$turbo; $yFactor = $yFactor/$turbo;
$tilt_speed = intval(round($monitor['MinTiltSpeed']+(($monitor['MaxTiltSpeed']-$monitor['MinTiltSpeed'])*$y_factor))); $tiltSpeed = intval(round($monitor['MinTiltSpeed']+(($monitor['MaxTiltSpeed']-$monitor['MinTiltSpeed'])*$yFactor)));
} }
} }
else else
{ {
$tilt_speed = intval(round($monitor['MinTiltSpeed']+(($monitor['MaxTiltSpeed']-$monitor['MinTiltSpeed'])*$y_factor))); $tiltSpeed = intval(round($monitor['MinTiltSpeed']+(($monitor['MaxTiltSpeed']-$monitor['MinTiltSpeed'])*$yFactor)));
} }
} }
if ( preg_match( '/(Left|Right)$/', $dirn ) ) if ( preg_match( '/(Left|Right)$/', $dirn ) )
{ {
$pan_step = intval(round($monitor['MinPanStep']+(($monitor['MaxPanStep']-$monitor['MinPanStep'])*$x_factor))); $panStep = intval(round($monitor['MinPanStep']+(($monitor['MaxPanStep']-$monitor['MinPanStep'])*$xFactor)));
$ctrl_command .= " --panstep=".$pan_step." --panspeed=".$pan_speed; $ctrlCommand .= " --panstep=".$panStep." --panspeed=".$panSpeed;
} }
if ( preg_match( '/^(Up|Down)/', $dirn ) ) if ( preg_match( '/^(Up|Down)/', $dirn ) )
{ {
$tilt_step = intval(round($monitor['MinTiltStep']+(($monitor['MaxTiltStep']-$monitor['MinTiltStep'])*$y_factor))); $tiltStep = intval(round($monitor['MinTiltStep']+(($monitor['MaxTiltStep']-$monitor['MinTiltStep'])*$yFactor)));
$ctrl_command .= " --tiltstep=".$tilt_step." --tiltspeed=".$tilt_speed; $ctrlCommand .= " --tiltstep=".$tiltStep." --tiltspeed=".$tiltSpeed;
} }
} }
} }
elseif ( $control == "moveConMap" ) elseif ( $_REQUEST['control'] == "moveConMap" )
{ {
$x = deScale( $x, $scale ); $x = deScale( $_REQUEST['x'], $_REQUEST['scale'] );
$y = deScale( $y, $scale ); $y = deScale( $_REQUEST['y'], $_REQUEST['scale'] );
$half_width = $monitor['Width'] / 2; $halfWidth = $monitor['Width'] / 2;
$half_height = $monitor['Height'] / 2; $halfHeight = $monitor['Height'] / 2;
$x_factor = ($x - $half_width)/$half_width; $xFactor = ($x - $halfWidth)/$halfWidth;
$y_factor = ($y - $half_height)/$half_height; $yFactor = ($y - $halfHeight)/$halfHeight;
switch ( $monitor['Orientation'] ) switch ( $monitor['Orientation'] )
{ {
case '90' : case '90' :
$temp_y_factor = $y; $tempYFactor = $y;
$y_factor = -$x_factor; $yFactor = -$xFactor;
$x_factor = $temp_y_factor; $xFactor = $tempYFactor;
break; break;
case '180' : case '180' :
$x_factor = -$x_factor; $xFactor = -$xFactor;
$y_factor = -$y_factor; $yFactor = -$yFactor;
break; break;
case '270' : case '270' :
$temp_x_factor = $x; $tempXFactor = $x;
$x_factor = -$y_factor; $xFactor = -$yFactor;
$y_factor = $tenp_x_factor; $yFactor = $tempXFactor;
break; break;
case 'hori' : case 'hori' :
$x_factor = -$x_factor; $xFactor = -$xFactor;
break; break;
case 'vert' : case 'vert' :
$y_factor = -$y_factor; $yFactor = -$yFactor;
break; break;
} }
@ -497,90 +497,90 @@ elseif ( isset($x) && isset($y) )
$turbo = 0.9; // Threshold for turbo speed $turbo = 0.9; // Threshold for turbo speed
$blind = 0.1; // Threshold for blind spot $blind = 0.1; // Threshold for blind spot
$pan_control = ''; $panControl = '';
$tilt_control = ''; $tiltControl = '';
if ( $x_factor > $blind ) if ( $xFactor > $blind )
{ {
$pan_control = 'Right'; $panControl = 'Right';
} }
elseif ( $x_factor < -$blind ) elseif ( $xFactor < -$blind )
{ {
$pan_control = 'Left'; $panControl = 'Left';
} }
if ( $y_factor > $blind ) if ( $yFactor > $blind )
{ {
$tilt_control = 'Down'; $tiltControl = 'Down';
} }
elseif ( $y_factor < -$blind ) elseif ( $yFactor < -$blind )
{ {
$tilt_control = 'Up'; $tiltControl = 'Up';
} }
$dirn = $tilt_control.$pan_control; $dirn = $tiltControl.$panControl;
if ( !$dirn ) if ( !$dirn )
{ {
// No command, probably in blind spot in middle // No command, probably in blind spot in middle
$control = 'moveStop'; $_REQUEST['control'] = 'moveStop';
} }
else else
{ {
$control = 'moveCon'.$dirn; $_REQUEST['control'] = 'moveCon'.$dirn;
$x_factor = abs($x_factor); $xFactor = abs($xFactor);
$y_factor = abs($y_factor); $yFactor = abs($yFactor);
if ( $monitor['HasPanSpeed'] && $x_factor ) if ( $monitor['HasPanSpeed'] && $xFactor )
{ {
if ( $monitor['HasTurboPan'] ) if ( $monitor['HasTurboPan'] )
{ {
if ( $x_factor >= $turbo ) if ( $xFactor >= $turbo )
{ {
$pan_speed = $monitor['TurboPanSpeed']; $panSpeed = $monitor['TurboPanSpeed'];
} }
else else
{ {
$x_factor = $x_factor/$turbo; $xFactor = $xFactor/$turbo;
$pan_speed = intval(round($monitor['MinPanSpeed']+(($monitor['MaxPanSpeed']-$monitor['MinPanSpeed'])*$x_factor))); $panSpeed = intval(round($monitor['MinPanSpeed']+(($monitor['MaxPanSpeed']-$monitor['MinPanSpeed'])*$xFactor)));
} }
} }
else else
{ {
$pan_speed = intval(round($monitor['MinPanSpeed']+(($monitor['MaxPanSpeed']-$monitor['MinPanSpeed'])*$x_factor))); $panSpeed = intval(round($monitor['MinPanSpeed']+(($monitor['MaxPanSpeed']-$monitor['MinPanSpeed'])*$xFactor)));
} }
} }
if ( $monitor['HasTiltSpeed'] && $y_factor ) if ( $monitor['HasTiltSpeed'] && $yFactor )
{ {
if ( $monitor['HasTurboTilt'] ) if ( $monitor['HasTurboTilt'] )
{ {
if ( $y_factor >= $turbo ) if ( $yFactor >= $turbo )
{ {
$tilt_speed = $monitor['TurboTiltSpeed']; $tiltSpeed = $monitor['TurboTiltSpeed'];
} }
else else
{ {
$y_factor = $y_factor/$turbo; $yFactor = $yFactor/$turbo;
$tilt_speed = intval(round($monitor['MinTiltSpeed']+(($monitor['MaxTiltSpeed']-$monitor['MinTiltSpeed'])*$y_factor))); $tiltSpeed = intval(round($monitor['MinTiltSpeed']+(($monitor['MaxTiltSpeed']-$monitor['MinTiltSpeed'])*$yFactor)));
} }
} }
else else
{ {
$tilt_speed = intval(round($monitor['MinTiltSpeed']+(($monitor['MaxTiltSpeed']-$monitor['MinTiltSpeed'])*$y_factor))); $tiltSpeed = intval(round($monitor['MinTiltSpeed']+(($monitor['MaxTiltSpeed']-$monitor['MinTiltSpeed'])*$yFactor)));
} }
} }
if ( preg_match( '/(Left|Right)$/', $dirn ) ) if ( preg_match( '/(Left|Right)$/', $dirn ) )
{ {
$ctrl_command .= " --panspeed=".$pan_speed; $ctrlCommand .= " --panspeed=".$panSpeed;
} }
if ( preg_match( '/^(Up|Down)/', $dirn ) ) if ( preg_match( '/^(Up|Down)/', $dirn ) )
{ {
$ctrl_command .= " --tiltspeed=".$tilt_speed; $ctrlCommand .= " --tiltspeed=".$tiltSpeed;
} }
if ( $monitor['AutoStopTimeout'] ) if ( $monitor['AutoStopTimeout'] )
{ {
$slow_pan_speed = intval(round($monitor['MinPanSpeed']+(($monitor['MaxPanSpeed']-$monitor['MinPanSpeed'])*$slow))); $slowPanSpeed = intval(round($monitor['MinPanSpeed']+(($monitor['MaxPanSpeed']-$monitor['MinPanSpeed'])*$slow)));
$slow_tilt_speed = intval(round($monitor['MinTiltSpeed']+(($monitor['MaxTiltSpeed']-$monitor['MinTiltSpeed'])*$slow))); $slowTiltSpeed = intval(round($monitor['MinTiltSpeed']+(($monitor['MaxTiltSpeed']-$monitor['MinTiltSpeed'])*$slow)));
if ( (!isset($pan_speed) || ($pan_speed < $slow_pan_speed)) && (!isset($tilt_speed) || ($tilt_speed < $slow_tilt_speed)) ) if ( (!isset($panSpeed) || ($panSpeed < $slowPanSpeed)) && (!isset($tiltSpeed) || ($tiltSpeed < $slowTiltSpeed)) )
{ {
$ctrl_command .= " --autostop"; $ctrlCommand .= " --autostop";
} }
} }
} }
@ -593,7 +593,7 @@ elseif ( isset($x) && isset($y) )
$short_x = 32; $short_x = 32;
$short_y = 32; $short_y = 32;
if ( preg_match( '/^([a-z]+)([A-Z][a-z]+)([A-Z][a-z]+)$/', $control, $matches ) ) if ( preg_match( '/^([a-z]+)([A-Z][a-z]+)([A-Z][a-z]+)$/', $_REQUEST['control'], $matches ) )
{ {
$command = $matches[1]; $command = $matches[1];
$mode = $matches[2]; $mode = $matches[2];
@ -619,7 +619,7 @@ elseif ( isset($x) && isset($y) )
if ( $monitor['HasFocusSpeed'] ) if ( $monitor['HasFocusSpeed'] )
{ {
$speed = intval(round($monitor['MinFocusSpeed']+(($monitor['MaxFocusSpeed']-$monitor['MinFocusSpeed'])*$factor))); $speed = intval(round($monitor['MinFocusSpeed']+(($monitor['MaxFocusSpeed']-$monitor['MinFocusSpeed'])*$factor)));
$ctrl_command .= " --speed=".$speed; $ctrlCommand .= " --speed=".$speed;
} }
switch( $mode ) switch( $mode )
{ {
@ -627,17 +627,17 @@ elseif ( isset($x) && isset($y) )
case 'Rel' : case 'Rel' :
{ {
$step = intval(round($monitor['MinFocusStep']+(($monitor['MaxFocusStep']-$monitor['MinFocusStep'])*$factor))); $step = intval(round($monitor['MinFocusStep']+(($monitor['MaxFocusStep']-$monitor['MinFocusStep'])*$factor)));
$ctrl_command .= " --step=".$step; $ctrlCommand .= " --step=".$step;
break; break;
} }
case 'Con' : case 'Con' :
{ {
if ( $monitor['AutoStopTimeout'] ) if ( $monitor['AutoStopTimeout'] )
{ {
$slow_speed = intval(round($monitor['MinFocusSpeed']+(($monitor['MaxFocusSpeed']-$monitor['MinFocusSpeed'])*$slow))); $slowSpeed = intval(round($monitor['MinFocusSpeed']+(($monitor['MaxFocusSpeed']-$monitor['MinFocusSpeed'])*$slow)));
if ( $speed < $slow_speed ) if ( $speed < $slowSpeed )
{ {
$ctrl_command .= " --autostop"; $ctrlCommand .= " --autostop";
} }
} }
break; break;
@ -663,7 +663,7 @@ elseif ( isset($x) && isset($y) )
if ( $monitor['HasZoomSpeed'] ) if ( $monitor['HasZoomSpeed'] )
{ {
$speed = intval(round($monitor['MinZoomSpeed']+(($monitor['MaxZoomSpeed']-$monitor['MinZoomSpeed'])*$factor))); $speed = intval(round($monitor['MinZoomSpeed']+(($monitor['MaxZoomSpeed']-$monitor['MinZoomSpeed'])*$factor)));
$ctrl_command .= " --speed=".$speed; $ctrlCommand .= " --speed=".$speed;
} }
switch( $mode ) switch( $mode )
{ {
@ -671,17 +671,17 @@ elseif ( isset($x) && isset($y) )
case 'Rel' : case 'Rel' :
{ {
$step = intval(round($monitor['MinZoomStep']+(($monitor['MaxZoomStep']-$monitor['MinZoomStep'])*$factor))); $step = intval(round($monitor['MinZoomStep']+(($monitor['MaxZoomStep']-$monitor['MinZoomStep'])*$factor)));
$ctrl_command .= " --step=".$step; $ctrlCommand .= " --step=".$step;
break; break;
} }
case 'Con' : case 'Con' :
{ {
if ( $monitor['AutoStopTimeout'] ) if ( $monitor['AutoStopTimeout'] )
{ {
$slow_speed = intval(round($monitor['MinZoomSpeed']+(($monitor['MaxZoomSpeed']-$monitor['MinZoomSpeed'])*$slow))); $slowSpeed = intval(round($monitor['MinZoomSpeed']+(($monitor['MaxZoomSpeed']-$monitor['MinZoomSpeed'])*$slow)));
if ( $speed < $slow_speed ) if ( $speed < $slowSpeed )
{ {
$ctrl_command .= " --autostop"; $ctrlCommand .= " --autostop";
} }
} }
break; break;
@ -707,7 +707,7 @@ elseif ( isset($x) && isset($y) )
if ( $monitor['HasIrisSpeed'] ) if ( $monitor['HasIrisSpeed'] )
{ {
$speed = intval(round($monitor['MinIrisSpeed']+(($monitor['MaxIrisSpeed']-$monitor['MinIrisSpeed'])*$factor))); $speed = intval(round($monitor['MinIrisSpeed']+(($monitor['MaxIrisSpeed']-$monitor['MinIrisSpeed'])*$factor)));
$ctrl_command .= " --speed=".$speed; $ctrlCommand .= " --speed=".$speed;
} }
switch( $mode ) switch( $mode )
{ {
@ -715,7 +715,7 @@ elseif ( isset($x) && isset($y) )
case 'Rel' : case 'Rel' :
{ {
$step = intval(round($monitor['MinIrisStep']+(($monitor['MaxIrisStep']-$monitor['MinIrisStep'])*$factor))); $step = intval(round($monitor['MinIrisStep']+(($monitor['MaxIrisStep']-$monitor['MinIrisStep'])*$factor)));
$ctrl_command .= " --step=".$step; $ctrlCommand .= " --step=".$step;
break; break;
} }
} }
@ -739,7 +739,7 @@ elseif ( isset($x) && isset($y) )
if ( $monitor['HasWhiteSpeed'] ) if ( $monitor['HasWhiteSpeed'] )
{ {
$speed = intval(round($monitor['MinWhiteSpeed']+(($monitor['MaxWhiteSpeed']-$monitor['MinWhiteSpeed'])*$factor))); $speed = intval(round($monitor['MinWhiteSpeed']+(($monitor['MaxWhiteSpeed']-$monitor['MinWhiteSpeed'])*$factor)));
$ctrl_command .= " --speed=".$speed; $ctrlCommand .= " --speed=".$speed;
} }
switch( $mode ) switch( $mode )
{ {
@ -747,7 +747,7 @@ elseif ( isset($x) && isset($y) )
case 'Rel' : case 'Rel' :
{ {
$step = intval(round($monitor['MinWhiteStep']+(($monitor['MaxWhiteStep']-$monitor['MinWhiteStep'])*$factor))); $step = intval(round($monitor['MinWhiteStep']+(($monitor['MaxWhiteStep']-$monitor['MinWhiteStep'])*$factor)));
$ctrl_command .= " --step=".$step; $ctrlCommand .= " --step=".$step;
break; break;
} }
} }
@ -771,7 +771,7 @@ elseif ( isset($x) && isset($y) )
if ( $monitor['HasGainSpeed'] ) if ( $monitor['HasGainSpeed'] )
{ {
$speed = intval(round($monitor['MinGainSpeed']+(($monitor['MaxGainSpeed']-$monitor['MinGainSpeed'])*$factor))); $speed = intval(round($monitor['MinGainSpeed']+(($monitor['MaxGainSpeed']-$monitor['MinGainSpeed'])*$factor)));
$ctrl_command .= " --speed=".$speed; $ctrlCommand .= " --speed=".$speed;
} }
switch( $mode ) switch( $mode )
{ {
@ -779,7 +779,7 @@ elseif ( isset($x) && isset($y) )
case 'Rel' : case 'Rel' :
{ {
$step = intval(round($monitor['MinGainStep']+(($monitor['MaxGainStep']-$monitor['MinGainStep'])*$factor))); $step = intval(round($monitor['MinGainStep']+(($monitor['MaxGainStep']-$monitor['MinGainStep'])*$factor)));
$ctrl_command .= " --step=".$step; $ctrlCommand .= " --step=".$step;
break; break;
} }
} }
@ -787,24 +787,24 @@ elseif ( isset($x) && isset($y) )
} }
case 'move' : case 'move' :
{ {
$x_factor = 0; $xFactor = 0;
$y_factor = 0; $yFactor = 0;
if ( preg_match( '/^Up/', $dirn ) ) if ( preg_match( '/^Up/', $dirn ) )
{ {
$y_factor = ($short_y-($y+1))/$short_y; $yFactor = ($short_y-($y+1))/$short_y;
} }
elseif ( preg_match( '/^Down/', $dirn ) ) elseif ( preg_match( '/^Down/', $dirn ) )
{ {
$y_factor = ($y+1)/$short_y; $yFactor = ($y+1)/$short_y;
} }
if ( preg_match( '/Left$/', $dirn ) ) if ( preg_match( '/Left$/', $dirn ) )
{ {
$x_factor = ($short_x-($x+1))/$short_x; $xFactor = ($short_x-($x+1))/$short_x;
} }
elseif ( preg_match( '/Right$/', $dirn ) ) elseif ( preg_match( '/Right$/', $dirn ) )
{ {
$x_factor = ($x+1)/$short_x; $xFactor = ($x+1)/$short_x;
} }
if ( $monitor['Orientation'] != '0' ) if ( $monitor['Orientation'] != '0' )
@ -862,49 +862,49 @@ elseif ( isset($x) && isset($y) )
), ),
); );
$new_dirn = $conversions[$monitor['Orientation']][$dirn]; $new_dirn = $conversions[$monitor['Orientation']][$dirn];
$control = preg_replace( "/_$dirn\$/", "_$new_dirn", $control ); $_REQUEST['control'] = preg_replace( "/_$dirn\$/", "_$new_dirn", $_REQUEST['control'] );
$dirn = $new_dirn; $dirn = $new_dirn;
} }
if ( $monitor['HasPanSpeed'] && $x_factor ) if ( $monitor['HasPanSpeed'] && $xFactor )
{ {
if ( $monitor['HasTurboPan'] ) if ( $monitor['HasTurboPan'] )
{ {
if ( $x_factor >= $turbo ) if ( $xFactor >= $turbo )
{ {
$pan_speed = $monitor['TurboPanSpeed']; $panSpeed = $monitor['TurboPanSpeed'];
} }
else else
{ {
$x_factor = $x_factor/$turbo; $xFactor = $xFactor/$turbo;
$pan_speed = intval(round($monitor['MinPanSpeed']+(($monitor['MaxPanSpeed']-$monitor['MinPanSpeed'])*$x_factor))); $panSpeed = intval(round($monitor['MinPanSpeed']+(($monitor['MaxPanSpeed']-$monitor['MinPanSpeed'])*$xFactor)));
} }
} }
else else
{ {
$pan_speed = intval(round($monitor['MinPanSpeed']+(($monitor['MaxPanSpeed']-$monitor['MinPanSpeed'])*$x_factor))); $panSpeed = intval(round($monitor['MinPanSpeed']+(($monitor['MaxPanSpeed']-$monitor['MinPanSpeed'])*$xFactor)));
} }
$ctrl_command .= " --panspeed=".$pan_speed; $ctrlCommand .= " --panspeed=".$panSpeed;
} }
if ( $monitor['HasTiltSpeed'] && $y_factor ) if ( $monitor['HasTiltSpeed'] && $yFactor )
{ {
if ( $monitor['HasTurboTilt'] ) if ( $monitor['HasTurboTilt'] )
{ {
if ( $y_factor >= $turbo ) if ( $yFactor >= $turbo )
{ {
$tilt_speed = $monitor['TurboTiltSpeed']; $tiltSpeed = $monitor['TurboTiltSpeed'];
} }
else else
{ {
$y_factor = $y_factor/$turbo; $yFactor = $yFactor/$turbo;
$tilt_speed = intval(round($monitor['MinTiltSpeed']+(($monitor['MaxTiltSpeed']-$monitor['MinTiltSpeed'])*$y_factor))); $tiltSpeed = intval(round($monitor['MinTiltSpeed']+(($monitor['MaxTiltSpeed']-$monitor['MinTiltSpeed'])*$yFactor)));
} }
} }
else else
{ {
$tilt_speed = intval(round($monitor['MinTiltSpeed']+(($monitor['MaxTiltSpeed']-$monitor['MinTiltSpeed'])*$y_factor))); $tiltSpeed = intval(round($monitor['MinTiltSpeed']+(($monitor['MaxTiltSpeed']-$monitor['MinTiltSpeed'])*$yFactor)));
} }
$ctrl_command .= " --tiltspeed=".$tilt_speed; $ctrlCommand .= " --tiltspeed=".$tiltSpeed;
} }
switch( $mode ) switch( $mode )
{ {
@ -913,13 +913,13 @@ elseif ( isset($x) && isset($y) )
{ {
if ( preg_match( '/(Left|Right)$/', $dirn ) ) if ( preg_match( '/(Left|Right)$/', $dirn ) )
{ {
$pan_step = intval(round($monitor['MinPanStep']+(($monitor['MaxPanStep']-$monitor['MinPanStep'])*$x_factor))); $panStep = intval(round($monitor['MinPanStep']+(($monitor['MaxPanStep']-$monitor['MinPanStep'])*$xFactor)));
$ctrl_command .= " --panstep=".$pan_step; $ctrlCommand .= " --panstep=".$panStep;
} }
if ( preg_match( '/^(Up|Down)/', $dirn ) ) if ( preg_match( '/^(Up|Down)/', $dirn ) )
{ {
$tilt_step = intval(round($monitor['MinTiltStep']+(($monitor['MaxTiltStep']-$monitor['MinTiltStep'])*$y_factor))); $tiltStep = intval(round($monitor['MinTiltStep']+(($monitor['MaxTiltStep']-$monitor['MinTiltStep'])*$yFactor)));
$ctrl_command .= " --tiltstep=".$tilt_step; $ctrlCommand .= " --tiltstep=".$tiltStep;
} }
break; break;
} }
@ -927,11 +927,11 @@ elseif ( isset($x) && isset($y) )
{ {
if ( $monitor['AutoStopTimeout'] ) if ( $monitor['AutoStopTimeout'] )
{ {
$slow_pan_speed = intval(round($monitor['MinPanSpeed']+(($monitor['MaxPanSpeed']-$monitor['MinPanSpeed'])*$slow))); $slowPanSpeed = intval(round($monitor['MinPanSpeed']+(($monitor['MaxPanSpeed']-$monitor['MinPanSpeed'])*$slow)));
$slow_tilt_speed = intval(round($monitor['MinTiltSpeed']+(($monitor['MaxTiltSpeed']-$monitor['MinTiltSpeed'])*$slow))); $slowTiltSpeed = intval(round($monitor['MinTiltSpeed']+(($monitor['MaxTiltSpeed']-$monitor['MinTiltSpeed'])*$slow)));
if ( (!isset($pan_speed) || ($pan_speed < $slow_pan_speed)) && (!isset($tilt_speed) || ($tilt_speed < $slow_tilt_speed)) ) if ( (!isset($panSpeed) || ($panSpeed < $slowPanSpeed)) && (!isset($tiltSpeed) || ($tiltSpeed < $slowTiltSpeed)) )
{ {
$ctrl_command .= " --autostop"; $ctrlCommand .= " --autostop";
} }
} }
break; break;
@ -944,12 +944,12 @@ elseif ( isset($x) && isset($y) )
} }
else else
{ {
if ( preg_match( '/^presetGoto(\d+)$/', $control, $matches ) ) if ( preg_match( '/^presetGoto(\d+)$/', $_REQUEST['control'], $matches ) )
{ {
$control = 'presetGoto'; $_REQUEST['control'] = 'presetGoto';
$ctrl_command .= " --preset=".$matches[1]; $ctrlCommand .= " --preset=".$matches[1];
} }
elseif ( $control == "presetSet" ) elseif ( $_REQUEST['control'] == "presetSet" )
{ {
if ( canEdit( 'Control' ) ) if ( canEdit( 'Control' ) )
{ {
@ -965,17 +965,17 @@ else
$refresh_parent = true; $refresh_parent = true;
} }
} }
$ctrl_command .= " --preset=".$preset; $ctrlCommand .= " --preset=".$preset;
$view = 'none'; $view = 'none';
} }
elseif ( $control == "moveMap" ) elseif ( $_REQUEST['control'] == "moveMap" )
{ {
$ctrl_command .= " --xcoord=$x --ycoord=$y"; $ctrlCommand .= " --xcoord=$x --ycoord=$y";
} }
} }
if ( $control != 'null' ) if ( $_REQUEST['control'] != 'null' )
{ {
$ctrl_command .= " --command=".$control; $ctrlCommand .= " --command=".$_REQUEST['control'];
$socket = socket_create( AF_UNIX, SOCK_STREAM, 0 ); $socket = socket_create( AF_UNIX, SOCK_STREAM, 0 );
if ( $socket < 0 ) if ( $socket < 0 )
{ {
@ -985,7 +985,7 @@ if ( $control != 'null' )
if ( @socket_connect( $socket, $sock_file ) ) if ( @socket_connect( $socket, $sock_file ) )
{ {
$options = array(); $options = array();
foreach ( split( " ", $ctrl_command ) as $option ) foreach ( split( " ", $ctrlCommand ) as $option )
{ {
if ( preg_match( '/--([^=]+)(?:=(.+))?/', $option, $matches ) ) if ( preg_match( '/--([^=]+)(?:=(.+))?/', $option, $matches ) )
{ {
@ -1006,13 +1006,13 @@ if ( $control != 'null' )
} }
else else
{ {
$ctrl_command .= " --id=".$monitor['Id']; $ctrlCommand .= " --id=".$monitor['Id'];
//error_log( "Command: $ctrl_command" ); //error_log( "Command: $ctrlCommand" );
// Can't connect so use script // Can't connect so use script
$ctrl_status = ''; $ctrl_status = '';
$ctrl_output = array(); $ctrl_output = array();
exec( escapeshellcmd( $ctrl_command ), $ctrl_output, $ctrl_status ); exec( escapeshellcmd( $ctrlCommand ), $ctrl_output, $ctrl_status );
//error_log( "Status: $ctrl_status" ); //error_log( "Status: $ctrl_status" );
//error_log( "Output: ".join( "\n", $ctrl_output ) ); //error_log( "Output: ".join( "\n", $ctrl_output ) );
if ( !$ctrl_status ) if ( !$ctrl_status )

177
web/ajax/event.php Normal file
View File

@ -0,0 +1,177 @@
<?php
header("Content-type: text/plain" );
$response = array(
'result' => 'Ok',
);
if ( empty($_REQUEST['id']) )
{
$response['result'] = 'Error';
$response['message'] = 'No event id(s) supplied';
}
if ( $response['result'] != 'Error' )
{
$refreshEvent = false;
$refreshParent = false;
if ( canEdit( 'Events' ) )
{
$response['result'] = 'Ok';
switch ( $_REQUEST['action'] )
{
case "rename" :
{
if ( !empty($_REQUEST['eventName']) )
{
dbQuery( "update Events set Name = '".dbEscape($_REQUEST['eventName'])."' where Id = '".dbEscape($_REQUEST['id'])."'" );
}
else
{
$response['result'] = 'Error';
$response['message'] = 'No new event name supplied';
}
break;
}
case "eventdetail" :
{
dbQuery( "update Events set Cause = '".dbEscape($_REQUEST['newEvent']['Cause'])."', Notes = '".dbEscape($_REQUEST['newEvent']['Notes'])."' where Id = '".dbEscape($_REQUEST['id'])."'" );
$refreshEvent = true;
$refreshParent = true;
break;
}
case "archive" :
case "unarchive" :
{
$archiveVal = ($_REQUEST['action'] == "archive")?1:0;
dbQuery( "update Events set Archived = ".$archiveVal." where Id = '".dbEscape($_REQUEST['id'])."'" );
$refreshEvent = true;
break;
}
case "delete" :
{
deleteEvent( dbEscape($_REQUEST['id']) );
break;
}
default :
{
$response['result'] = 'Error';
break;
}
}
}
if ( canView( 'Events' ) )
{
$response['result'] = 'Ok';
switch ( $_REQUEST['action'] )
{
case "video" :
{
if ( empty($_REQUEST['videoFormat']) )
{
$response['result'] = 'Error';
$response['message'] = "Video Generation Failure, no format given";
}
elseif ( empty($_REQUEST['rate']) )
{
$response['result'] = 'Error';
$response['message'] = "Video Generation Failure, no rate given";
}
elseif ( empty($_REQUEST['scale']) )
{
$response['result'] = 'Error';
$response['message'] = "Video Generation Failure, no scale given";
}
else
{
$sql = "select E.*,M.Name as MonitorName,M.DefaultRate,M.DefaultScale from Events as E inner join Monitors as M on E.MonitorId = M.Id where E.Id = ".dbEscape($_REQUEST['id']).monitorLimitSql();
if ( !($event = dbFetchOne( $sql )) )
{
$response['result'] = 'Error';
$response['message'] = "Video Generation Failure, can't load event";
}
else
{
if ( $videoFile = createVideo( $event, $_REQUEST['videoFormat'], $_REQUEST['rate'], $_REQUEST['scale'], !empty($_REQUEST['overwrite']) ) )
{
//$eventPath = getEventPath( $event );
//$response['videoPath'] = $eventPath.'/'.$videoFile;
$response['videoPath'] = $videoFile;
}
else
{
$response['result'] = 'Error';
$response['message'] = "Video Generation Failed";
}
}
}
break;
}
case 'deleteVideo' :
{
unlink( $videoFiles[$_REQUEST['id']] );
unset( $videoFiles[$_REQUEST['id']] );
break;
}
case "export" :
{
require_once( 'zm_export_funcs.php' );
if ( !empty($_REQUEST['exportDetail']) )
$exportDetail = $_SESSION['export']['detail'] = $_REQUEST['exportDetail'];
else
$exportDetail = false;
if ( !empty($_REQUEST['exportFrames']) )
$exportFrames = $_SESSION['export']['frames'] = $_REQUEST['exportFrames'];
else
$exportFrames = false;
if ( !empty($_REQUEST['exportImages']) )
$exportImages = $_SESSION['export']['images'] = $_REQUEST['exportImages'];
else
$exportImages = false;
if ( !empty($_REQUEST['exportVideo']) )
$exportVideo = $_SESSION['export']['video'] = $_REQUEST['exportVideo'];
else
$exportVideo = false;
if ( !empty($_REQUEST['exportMisc']) )
$exportMisc = $_SESSION['export']['misc'] = $_REQUEST['exportMisc'];
else
$exportMisc = false;
if ( !empty($_REQUEST['exportFormat']) )
$exportFormat = $_SESSION['export']['format'] = $_REQUEST['exportFormat'];
else
$exportFormat = '';
if ( $exportFile = exportEvents( $_REQUEST['id'], $exportDetail, $exportFrames, $exportImages, $exportVideo, $exportMisc, $exportFormat ) )
{
$response['exportFile'] = $exportFile;
}
else
{
$response['result'] = 'Error';
$response['message'] = 'Export Failed';
}
break;
}
default :
{
$response['result'] = 'Error';
break;
}
}
}
if ( $response['result'] == 'Ok' )
{
$response['refreshParent'] = $refreshParent;
$response['refreshEvent'] = $refreshEvent;
}
elseif ( !$response['message'] )
$response['message'] = 'Unrecognised action or insufficient permissions';
}
echo jsValue( $response );
?>

422
web/ajax/status.php Normal file
View File

@ -0,0 +1,422 @@
<?php
$statusData = array(
"system" => array(
"permission" => "System",
"table" => "Monitors",
"limit" => 1,
"elements" => array(
"MonitorCount" => array( "sql" => "count(*)" ),
"ActiveMonitorCount" => array( "sql" => "count(if(Function != 'None',1,NULL))" ),
"State" => array( "func" => "daemonCheck()?".$SLANG['Running'].":".$SLANG['Stopped'] ),
"Load" => array( "func" => "getLoad()" ),
"Disk" => array( "func" => "getDiskPercent()" ),
),
),
"monitor" => array(
"permission" => "Monitors",
"table" => "Monitors",
"limit" => 1,
"selector" => "Monitors.Id",
"elements" => array(
"Id" => array( "sql" => "Monitors.Id" ),
"Name" => array( "sql" => "Monitors.Name" ),
"Type" => true,
"Function" => true,
"Enabled" => true,
"LinkedMonitors" => true,
"Triggers" => true,
"Device" => true,
"Channel" => true,
"Format" => true,
"Host" => true,
"Port" => true,
"Path" => true,
"Width" => array( "sql" => "Monitors.Width" ),
"Height" => array( "sql" => "Monitors.Height" ),
"Palette" => true,
"Orientation" => true,
"Brightness" => true,
"Contrast" => true,
"Hue" => true,
"Colour" => true,
"EventPrefix" => true,
"LabelFormat" => true,
"LabelX" => true,
"LabelY" => true,
"ImageBufferCount" => true,
"WarmupCount" => true,
"PreEventCount" => true,
"PostEventCount" => true,
"AlarmFrameCount" => true,
"SectionLength" => true,
"FrameSkip" => true,
"MaxFPS" => true,
"AlarmMaxFPS" => true,
"FPSReportInterval" => true,
"RefBlendPerc" => true,
"Controllable" => true,
"ControlId" => true,
"ControlDevice" => true,
"ControlAddress" => true,
"AutoStopTimeout" => true,
"TrackMotion" => true,
"TrackDelay" => true,
"ReturnLocation" => true,
"ReturnDelay" => true,
"DefaultView" => true,
"DefaultRate" => true,
"DefaultScale" => true,
"WebColour" => true,
"Sequence" => true,
"MinEventId" => array( "sql" => "min(Events.Id)", "table" => "Events", "join" => "Events.MonitorId = Monitors.Id", "group" => "Events.MonitorId" ),
"MaxEventId" => array( "sql" => "max(Events.Id)", "table" => "Events", "join" => "Events.MonitorId = Monitors.Id", "group" => "Events.MonitorId" ),
"TotalEvents" => array( "sql" => "count(Events.Id)", "table" => "Events", "join" => "Events.MonitorId = Monitors.Id", "group" => "Events.MonitorId" ),
"Status" => array( "zmu" => "-m ".$_REQUEST['id'][0]." -s" ),
"FrameRate" => array( "zmu" => "-m ".$_REQUEST['id'][0]." -f" ),
),
),
"events" => array(
"permission" => "Events",
"table" => "Events",
"selector" => "Events.MonitorId",
"elements" => array(
"Id" => true,
"Name" => true,
"Cause" => true,
"StartTime" => true,
"StartTimeShort" => array( "sql" => "date_format( StartTime, '".MYSQL_FMT_DATETIME_SHORT."' )" ),
"EndTime" => true,
"Width" => true,
"Height" => true,
"Length" => true,
"Frames" => true,
"AlarmFrames" => true,
"TotScore" => true,
"AvgScore" => true,
"MaxScore" => true,
),
),
"event" => array(
"permission" => "Events",
"table" => "Events",
"limit" => 1,
"selector" => "Events.Id",
"elements" => array(
"Id" => array( "sql" => "Events.Id" ),
"MonitorId" => true,
"Name" => true,
"Cause" => true,
"StartTime" => true,
"StartTimeShort" => array( "sql" => "date_format( StartTime, '".MYSQL_FMT_DATETIME_SHORT."' )" ),
"EndTime" => true,
"Width" => true,
"Height" => true,
"Length" => true,
"Frames" => true,
"AlarmFrames" => true,
"TotScore" => true,
"AvgScore" => true,
"MaxScore" => true,
"Archived" => true,
"Videoed" => true,
"Uploaded" => true,
"Emailed" => true,
"Messaged" => true,
"Executed" => true,
"LearnState" => true,
"Notes" => true,
"MinFrameId" => array( "sql" => "min(Frames.FrameId)", "table" => "Frames", "join" => "Events.Id = Frames.EventId", "group" => "Frames.EventId" ),
"MaxFrameId" => array( "sql" => "max(Frames.FrameId)", "table" => "Frames", "join" => "Events.Id = Frames.EventId", "group" => "Frames.EventId" ),
"MinFrameDelta" => array( "sql" => "min(Frames.Delta)", "table" => "Frames", "join" => "Events.Id = Frames.EventId", "group" => "Frames.EventId" ),
"MaxFrameDelta" => array( "sql" => "max(Frames.Delta)", "table" => "Frames", "join" => "Events.Id = Frames.EventId", "group" => "Frames.EventId" ),
//"Path" => array( "postFunc" => "getEventPath" ),
),
),
"frame" => array(
"permission" => "Events",
"table" => "Frames",
"limit" => 1,
"selector" => array( array( "table" => "Events", "join" => "Events.Id = Frames.EventId", "selector"=>"Events.Id" ), "Frames.FrameId" ),
"elements" => array(
//"Id" => array( "sql" => "Frames.FrameId" ),
"FrameId" => true,
"EventId" => true,
"Type" => true,
"TimeStamp" => true,
"TimeStampShort" => array( "sql" => "date_format( StartTime, '".MYSQL_FMT_DATETIME_SHORT."' )" ),
"Delta" => true,
"Score" => true,
//"Image" => array( "postFunc" => "getFrameImage" ),
),
),
"frameimage" => array(
"permission" => "Events",
"func" => "getFrameImage()"
),
"nearframe" => array(
"permission" => "Events",
"func" => "getNearFrame()"
),
"nearevents" => array(
"permission" => "Events",
"func" => "getNearEvents()"
)
);
function throwError( $message, $code=400 )
{
error_log( $message );
header( "HTTP/1.0 $code $message" );
exit();
}
function collectData()
{
global $statusData;
$entitySpec = &$statusData[strtolower($_REQUEST['entity'])];
#print_r( $entitySpec );
if ( !canView( $entitySpec['permission'] ) )
{
error_log( "Invalid permissions" );
return;
}
if ( !empty($entitySpec['func']) )
{
$data = eval( "return( ".$entitySpec['func']." );" );
}
else
{
$data = array();
$postFuncs = array();
$fieldSql = array();
$joinSql = array();
$groupSql = array();
$elements = &$entitySpec['elements'];
$lc_elements = array_change_key_case( $elements );
if ( !isset($_REQUEST['id']) )
$_REQUEST['id'] = array_keys( $id );
else if ( !is_array($_REQUEST['id']) )
$_REQUEST['id'] = array( $_REQUEST['id'] );
if ( !isset($_REQUEST['element']) )
$_REQUEST['element'] = array_keys( $elements );
else if ( !is_array($_REQUEST['element']) )
$_REQUEST['element'] = array( $_REQUEST['element'] );
if ( isset($entitySpec['selector']) )
{
if ( !is_array($entitySpec['selector']) )
$entitySpec['selector'] = array( $entitySpec['selector'] );
foreach( $entitySpec['selector'] as $selector )
if ( is_array( $selector ) && isset($selector['table']) && isset($selector['join']) )
$joinSql[] = "left join ".$selector['table']." on ".$selector['join'];
}
foreach ( $_REQUEST['element'] as $element )
{
if ( !($elementData = $lc_elements[strtolower($element)]) )
throwError( "Bad ".$_REQUEST['entity']." element ".$element );
if ( isset($elementData['func']) )
$data[$element] = eval( "return( ".$elementData['func']." );" );
else if ( isset($elementData['postFunc']) )
$postFuncs[$element] = $elementData['postFunc'];
else if ( isset($elementData['zmu']) )
$data[$element] = exec( escapeshellcmd( getZmuCommand( " ".$elementData['zmu'] ) ) );
else
{
if ( isset($elementData['sql']) )
$fieldSql[] = $elementData['sql']." as ".$element;
else
$fieldSql[] = $element;
if ( isset($elementData['table']) && isset($elementData['join']) )
{
$joinSql[] = "left join ".$elementData['table']." on ".$elementData['join'];
}
if ( isset($elementData['group']) )
{
$groupSql[] = $elementData['group'];
}
}
}
if ( count($fieldSql) )
{
$sql = "select ".join( ", ", $fieldSql )." from ".$entitySpec['table'];
if ( $joinSql )
$sql .= " ".join( " ", array_unique( $joinSql ) );
if ( $entitySpec['selector'] )
{
$index = 0;
$where = array();
foreach( $entitySpec['selector'] as $selector )
{
if ( is_array( $selector ) )
$where[] = $selector['selector']." = ".dbEscape($_REQUEST['id'][$index]);
else
$where[] = $selector." = ".dbEscape($_REQUEST['id'][$index]);
$index++;
}
$sql .= " where ".join( " and ", $where );
}
if ( $groupSql )
$sql .= " group by ".join( ",", array_unique( $groupSql ) );
if ( !empty($_REQUEST['sort']) )
$sql .= " order by ".dbEscape($_REQUEST['sort']);
if ( !empty($entitySpec['limit']) )
$limit = $entitySpec['limit'];
elseif ( $_REQUEST['count'] )
$limit = dbEscape($_REQUEST['count']);
if ( !empty( $limit ) )
$sql .= " limit ".$limit;
if ( isset($limit) && $limit == 1 )
{
if ( $sqlData = dbFetchOne( $sql ) )
{
foreach ( $postFuncs as $element=>$func )
$sqlData[$element] = eval( 'return( '.$func.'( $sqlData ) );' );
$data = array_merge( $data, $sqlData );
}
}
else
{
$count = 0;
foreach( dbFetchAll( $sql ) as $sqlData )
{
foreach ( $postFuncs as $element=>$func )
$sqlData[$element] = eval( 'return( '.$func.'( $sqlData ) );' );
$data[] = $sqlData;
if ( ++$count >= $limit )
break;
}
}
}
}
#print_r( $data );
return( $data );
}
$data = collectData();
if ( !isset($_REQUEST['layout']) )
{
$_REQUEST['layout'] = "json";
}
switch( $_REQUEST['layout'] )
{
case 'xml NOT CURRENTLY SUPPORTED' :
{
header("Content-type: application/xml" );
echo( '<?xml version="1.0" encoding="iso-8859-1"?>'."\n" );
echo "<".strtolower($_REQUEST['entity']).">\n";
foreach ( $data as $key=>$value )
{
$key = strtolower( $key );
echo "<$key>".htmlentities($value)."</$key>\n";
}
echo "</".strtolower($_REQUEST['entity']).">\n";
break;
}
case 'json' :
{
header("Content-type: text/plain" );
$response = array( 'result'=>'Ok', strtolower($_REQUEST['entity']) => $data );
if ( isset($_REQUEST['loopback']) )
$response['loopback'] = $_REQUEST['loopback'];
echo jsValue( $response );
break;
}
case 'text' :
{
header("Content-type: text/plain" );
echo join( " ", array_values( $data ) );
break;
}
}
function getFrameImage()
{
$eventId = dbEscape($_REQUEST['id'][0]);
$frameId = dbEscape($_REQUEST['id'][1]);
$sql = "select * from Frames where EventId = '".$eventId."' and FrameId = '".$frameId."'";
if ( !($frame = dbFetchOne( $sql )) )
{
$frame = array();
$frame['EventId'] = $eventId;
$frame['FrameId'] = $frameId;
$frame['Type'] = "Virtual";
}
$event = dbFetchOne( "select * from Events where Id = '".$frame['EventId']."'" );
$frame['Image'] = getImageSrc( $event, $frame, SCALE_BASE );
return( $frame );
}
function getNearFrame()
{
$eventId = dbEscape($_REQUEST['id'][0]);
$frameId = dbEscape($_REQUEST['id'][1]);
$sql = "select FrameId from Frames where EventId = '".$eventId."' and FrameId <= '".$frameId."' order by FrameId desc limit 1";
if ( !$nearFrameId = dbFetchOne( $sql, 'FrameId' ) )
{
$sql = "select * from Frames where EventId = '".$eventId."' and FrameId > '".$frameId."' order by FrameId asc limit 1";
if ( !$nearFrameId = dbFetchOne( $sql, 'FrameId' ) )
{
return( array() );
}
}
$_REQUEST['entity'] = "frame";
$_REQUEST['id'][1] = $nearFrameId;
return( collectData() );
}
function getNearEvents()
{
global $user, $sortColumn, $sortOrder;
$eventId = dbEscape($_REQUEST['id']);
$event = dbFetchOne( "select * from Events where Id = '".$eventId."'" );
parseFilter( $_REQUEST['filter'] );
parseSort();
if ( $user['MonitorIds'] )
$midSql = " and MonitorId in (".join( ",", preg_split( '/["\'\s]*,["\'\s]*/', $user['MonitorIds'] ) ).")";
else
$midSql = '';
$sql = "select E.Id as Id 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');
$result = dbQuery( $sql );
while ( $id = dbFetchNext( $result, 'Id' ) )
{
if ( $id == $eventId )
{
$prevId = dbFetchNext( $result, 'Id' );
break;
}
}
$sql = "select E.Id as Id 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";
$result = dbQuery( $sql );
while ( $id = dbFetchNext( $result, 'Id' ) )
{
if ( $id == $eventId )
{
$nextId = dbFetchNext( $result, 'Id' );
break;
}
}
$result = array( 'EventId'=>$eventId );
$result['PrevEventId'] = empty($prevId)?0:$prevId;
$result['NextEventId'] = empty($nextId)?0:$nextId;
return( $result );
}
?>

View File

@ -106,7 +106,7 @@ switch ( $data['type'] )
{ {
case MSG_DATA_WATCH : case MSG_DATA_WATCH :
{ {
$data = unpack( "ltype/dfps/istate/ilevel/Cdelayed/Cpaused/C/C/irate/ddelay/izoom/Cenabled/Cforced", $msg ); $data = unpack( "ltype/imonitor/dfps/istate/ilevel/Cdelayed/Cpaused/C/C/irate/ddelay/izoom/Cenabled/Cforced", $msg );
$data['fps'] = sprintf( "%.2f", $data['fps'] ); $data['fps'] = sprintf( "%.2f", $data['fps'] );
$data['rate'] /= 100; $data['rate'] /= 100;
$data['delay'] = sprintf( "%.2f", $data['delay'] ); $data['delay'] = sprintf( "%.2f", $data['delay'] );

82
web/ajax/zone.php Normal file
View File

@ -0,0 +1,82 @@
<?php
header("Content-type: text/plain" );
$response = array(
'result' => 'Ok',
'x' => 1
);
if ( empty($_REQUEST['mid']) )
{
$response['result'] = 'Error';
$response['message'] = 'No monitor id supplied';
}
elseif ( !isset($_REQUEST['zid']) )
{
$response['result'] = 'Error';
$response['message'] = 'No zone id(s) supplied';
}
if ( $response['result'] != 'Error' )
{
$refreshEvent = false;
$refreshParent = false;
if ( canEdit( 'Monitors' ) )
{
$response['result'] = 'Ok';
switch ( $_REQUEST['action'] )
{
default :
{
$response['result'] = 'Error';
break;
}
}
}
if ( canView( 'Monitors' ) )
{
$response['result'] = 'Ok';
switch ( $_REQUEST['action'] )
{
case "zoneImage" :
{
chdir( ZM_DIR_IMAGES );
$hicolor = "0x00ff00";
$command = getZmuCommand( " -m ".$_REQUEST['mid']." -z" );
if ( !isset($_REQUEST['zid']) )
$_REQUEST['zid'] = 0;
$command .= '"'.$_REQUEST['zid'].' '.$hicolor.' '.$_REQUEST['coords'].'"';
$status = exec( escapeshellcmd( $command ) );
//$response['zoneImage'] = ZM_DIR_IMAGES.'/Zones'.$_REQUEST['mid'].'.jpg?'.time();
$monitor = dbFetchOne( "select * from Monitors where Id = '".dbEscape($_REQUEST['mid'])."'" );
$response['zoneImage'] = ZM_DIR_IMAGES.'/Zones'.$monitor['Id'].'.jpg?'.time();
$points = coordsToPoints( $_REQUEST['coords'] );
$response['selfIntersecting'] = isSelfIntersecting( $points );
$response['area'] = getPolyArea( $points );
break;
}
default :
{
$response['result'] = 'Error';
break;
}
}
}
if ( $response['result'] == 'Ok' )
{
$response['refreshParent'] = $refreshParent;
$response['refreshEvent'] = $refreshEvent;
}
elseif ( !$response['message'] )
$response['message'] = 'Unrecognised action or insufficient permissions';
}
echo jsValue( $response );
?>

6
web/css/Makefile.am Normal file
View File

@ -0,0 +1,6 @@
AUTOMAKE_OPTIONS = gnu
webdir = @WEB_PREFIX@/css
dist_web_DATA = \
reset.css

View File

@ -1,12 +1,8 @@
AUTOMAKE_OPTIONS = gnu AUTOMAKE_OPTIONS = gnu
# This should be set to your web directory
webdir = @WEB_PREFIX@/graphics webdir = @WEB_PREFIX@/graphics
# And these to the user and group of your webserver
webuser = @WEB_USER@
webgroup = @WEB_GROUP@
web_DATA = \ dist_web_DATA = \
arrow-d.gif \ arrow-d.gif \
arrow-dl.gif \ arrow-dl.gif \
arrow-dr.gif \ arrow-dr.gif \
@ -23,10 +19,5 @@ web_DATA = \
point-g.gif \ point-g.gif \
point-o.gif \ point-o.gif \
point-r.gif \ point-r.gif \
spacer.gif spacer.gif \
transparent.gif
EXTRA_DIST = $(web_DATA)
# Yes, you are correct. This is a HACK!
install-data-hook:
( cd $(DESTDIR)$(webdir); chown $(webuser):$(webgroup) $(web_DATA) )

Binary file not shown.

After

Width:  |  Height:  |  Size: 61 B

10
web/includes/Makefile.am Normal file
View File

@ -0,0 +1,10 @@
AUTOMAKE_OPTIONS = gnu
webdir = @WEB_PREFIX@/includes
dist_web_DATA = \
actions.php \
config.php \
database.php \
functions.php \
lang.php

1530
web/includes/actions.php Normal file

File diff suppressed because it is too large Load Diff

148
web/includes/config.php.in Normal file
View File

@ -0,0 +1,148 @@
<?php
//
// ZoneMinder web configuration file, $Date$, $Revision$
// Copyright (C) 2003, 2004, 2005, 2006 Philip Coombes
//
// This program 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 program 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
//
//
// This section contains options substituted by the zmconfig.pl utility, do not edit these directly
//
define( "ZM_CONFIG", "@ZM_CONFIG@" ); // Path to config file
$cfg = fopen( ZM_CONFIG, "r") or die("Could not open config file.");
while ( !feof($cfg) )
{
$str = fgets( $cfg, 256 );
if ( preg_match( '/^\s*$/', $str ))
continue;
elseif ( preg_match( '/^\s*#/', $str ))
continue;
elseif ( preg_match( '/^\s*([^=\s]+)\s*=\s*(.+?)\s*$/', $str, $matches ))
define( $matches[1], $matches[2] );
}
fclose( $cfg );
//
// This section is options normally derived from other options or configuration
//
define( "ZMU_PATH", ZM_PATH_BIN."/zmu" ); // Local path to the ZoneMinder Utility
//
// Alarm states
//
define( "STATE_IDLE", 0 );
define( "STATE_PREALARM", 1 );
define( "STATE_ALARM", 2 );
define( "STATE_ALERT", 3 );
define( "STATE_TAPE", 4 );
//
// DVR Control Commands
//
define( "MSG_CMD", 1 );
define( "MSG_DATA_WATCH", 2 );
define( "MSG_DATA_EVENT", 3 );
define( "CMD_NONE", 0 );
define( "CMD_PAUSE", 1 );
define( "CMD_PLAY", 2 );
define( "CMD_STOP", 3 );
define( "CMD_FASTFWD", 4 );
define( "CMD_SLOWFWD", 5 );
define( "CMD_SLOWREV", 6 );
define( "CMD_FASTREV", 7 );
define( "CMD_ZOOMIN", 8 );
define( "CMD_ZOOMOUT", 9 );
define( "CMD_PAN", 10 );
define( "CMD_SCALE", 11 );
define( "CMD_PREV", 12 );
define( "CMD_NEXT", 13 );
define( "CMD_SEEK", 14 );
define( "CMD_QUERY", 99 );
//
// These are miscellaneous options you won't normally need to change
//
define( "MAX_EVENTS", 10 ); // The maximum number of events to show in the monitor event listing
define( "RATE_BASE", 100 ); // The additional scaling factor used to help get fractional rates in integer format
define( "SCALE_BASE", 100 ); // The additional scaling factor used to help get fractional scales in integer format
define( "LEARN_MODE", false ); // Currently unimplemented, do not change
//
// Date and time formats, eventually some of these may end up in the language files
//
define( "DATE_FMT_CONSOLE_LONG", "D jS M, g:ia" ); // This is the main console date/time, date() or strftime() format
define( "DATE_FMT_CONSOLE_SHORT", "%H:%M" ); // This is the xHTML console date/time, date() or strftime() format
define( "STRF_FMT_DATETIME_DB", "%Y-%m-%d %H:%M:%S" ); // Strftime format for database queries, don't change
define( "STRF_FMT_DATETIME", "%c" ); // Strftime locale aware format for dates with times
define( "STRF_FMT_DATE", "%x" ); // Strftime locale aware format for dates without times
define( "STRF_FMT_TIME", "%X" ); // Strftime locale aware format for times without dates
define( "STRF_FMT_DATETIME_SHORT", "%y/%m/%d %H:%M:%S" ); // Strftime shorter format for dates with time, not locale aware
define( "STRF_FMT_DATETIME_SHORTER", "%m/%d %H:%M:%S" ); // Strftime shorter format for dates with time, not locale aware, used where space is tight
define( "MYSQL_FMT_DATETIME_SHORT", "%y/%m/%d %H:%i:%S" ); // MySQL date_format shorter format for dates with time
require_once( 'database.php' );
loadConfig();
$GLOBALS['defaultUser'] = array(
"Username" => "admin",
"Password" => "",
"Language" => "",
"Enabled" => 1,
"Stream" => 'View',
"Events" => 'Edit',
"Control" => 'Edit',
"Monitors" => 'Edit',
"Devices" => 'Edit',
"System" => 'Edit',
);
function loadConfig( $defineConsts=true )
{
global $config;
global $configCats;
$config = array();
$configCat = array();
$sql = "select * from Config order by Id asc";
$result = mysql_query( $sql );
if ( !$result )
echo mysql_error();
$monitors = array();
while( $row = mysql_fetch_assoc( $result ) )
{
if ( $defineConsts )
define( $row['Name'], $row['Value'] );
$config[$row['Name']] = $row;
if ( !($configCat = &$configCats[$row['Category']]) )
{
$configCats[$row['Category']] = array();
$configCat = &$configCats[$row['Category']];
}
$configCat[$row['Name']] = $row;
}
//print_r( $config );
//print_r( $configCats );
}
?>

View File

@ -18,34 +18,59 @@
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
// //
$db_debug = false; define( "DB_LOG_OFF", 0 );
$db_log = false; define( "DB_LOG_ONLY", 1 );
define( "DB_LOG_DEBUG", 2 );
$GLOBALS['dbLogLevel'] = DB_LOG_OFF;
$GLOBALS['dbConn'] = false;
function dbConnect() function dbConnect()
{ {
global $db_conn; global $dbConn;
$db_conn = mysql_pconnect( ZM_DB_HOST, ZM_DB_USER, ZM_DB_PASS ) or die("Could not connect to database: ".mysql_error()); $dbConn = mysql_pconnect( ZM_DB_HOST, ZM_DB_USER, ZM_DB_PASS ) or die( "Could not connect to database: ".mysql_error() );
mysql_select_db( ZM_DB_NAME, $db_conn) or die("Could not select database: ".mysql_error()); mysql_select_db( ZM_DB_NAME, $dbConn ) or die( "Could not select database: ".mysql_error() );
} }
dbConnect(); dbConnect();
function dbDebug( $sql ) function dbDisconnect()
{ {
global $db_debug; global $dbConn;
mysql_close( $dbConn ) or die( "Could not disconnect from database" );
if ( $db_debug )
error_log( "SQL-DEBUG: $sql" );
return( $db_debug );
} }
function dbLog( $sql ) function dbLogOff()
{ {
global $db_log; global $dbLogLevel;
$dbLogLevel = DB_LOG_OFF;
}
if ( $db_log ) function dbLogOn()
error_log( "SQL-LOG:$sql" ); {
return( $db_log ); global $dbLogLevel;
$dbLogLevel = DB_LOG_ONLY;
}
function dbLogDebug()
{
global $dbLogLevel;
$dbLogLevel = DB_LOG_DEBUG;
}
function dbDebug()
{
dbLogDebug();
}
function dbLog( $sql, $update=false )
{
global $dbLogLevel;
$noExecute = $update && ($dbLogLevel >= DB_LOG_DEBUG);
if ( $dbLogLevel > DB_LOG_OFF )
error_log( "SQL-LOG: $sql".($noExecute?" (not executed)":"") );
return( $noExecute );
} }
function dbError( $sql ) function dbError( $sql )
@ -53,7 +78,7 @@ function dbError( $sql )
$err_ref = sprintf( "%X", rand( 0x100000, 0xffffff ) ); $err_ref = sprintf( "%X", rand( 0x100000, 0xffffff ) );
error_log( "SQL-ERROR($err_ref): ".$sql ); error_log( "SQL-ERROR($err_ref): ".$sql );
error_log( "SQL-ERROR($err_ref): ".mysql_error() ); error_log( "SQL-ERROR($err_ref): ".mysql_error() );
die( "An error has occurred and this operation cannot continue.<br>For full details check your web logs for the code '$err_ref'" ); die( "An error has occurred and this operation cannot continue.<br/>For full details check your web logs for the code '$err_ref'" );
} }
function dbEscape( $string ) function dbEscape( $string )
@ -72,9 +97,8 @@ function dbEscape( $string )
function dbQuery( $sql ) function dbQuery( $sql )
{ {
if ( dbDebug( $sql ) ) if ( dbLog( $sql, true ) )
return; return;
dbLog( $sql );
if (!($result = mysql_query( $sql ))) if (!($result = mysql_query( $sql )))
dbError( $sql ); dbError( $sql );
return( $result ); return( $result );
@ -82,28 +106,25 @@ function dbQuery( $sql )
function dbFetchOne( $sql, $col=false ) function dbFetchOne( $sql, $col=false )
{ {
dbDebug( $sql );
dbLog( $sql ); dbLog( $sql );
if (!($result = mysql_query( $sql ))) if (!($result = mysql_query( $sql )))
dbError( $sql ); dbError( $sql );
$db_row = mysql_fetch_assoc( $result ); if ( $dbRow = mysql_fetch_assoc( $result ) )
return( $col?$db_row[$col]:$db_row ); return( $col?$dbRow[$col]:$dbRow );
return( false );
} }
function dbFetchAll( $sql, $col=false ) function dbFetchAll( $sql, $col=false )
{ {
dbDebug( $sql );
dbLog( $sql ); dbLog( $sql );
if (!($result = mysql_query( $sql ))) if (!($result = mysql_query( $sql )))
dbError( $sql ); dbError( $sql );
$db_rows = array(); $dbRows = array();
while( $db_row = mysql_fetch_assoc( $result ) ) while( $dbRow = mysql_fetch_assoc( $result ) )
$db_rows[] = $col?$db_row[$col]:$db_row; $dbRows[] = $col?$dbRow[$col]:$dbRow;
return( $db_rows ); return( $dbRows );
} }
function dbFetch( $sql, $col=false ) function dbFetch( $sql, $col=false )
@ -113,13 +134,13 @@ function dbFetch( $sql, $col=false )
function dbFetchNext( $result, $col=false ) function dbFetchNext( $result, $col=false )
{ {
$db_row = mysql_fetch_assoc( $result ); if ( $dbRow = mysql_fetch_assoc( $result ) )
return( $col?$db_row[$col]:$db_row ); return( $col?$dbRow[$col]:$dbRow );
return( false );
} }
function dbNumRows( $sql ) function dbNumRows( $sql )
{ {
dbDebug( $sql );
dbLog( $sql ); dbLog( $sql );
if (!($result = mysql_query( $sql ))) if (!($result = mysql_query( $sql )))
dbError( $sql ); dbError( $sql );
@ -133,11 +154,9 @@ function dbInsertId()
function getEnumValues( $table, $column ) function getEnumValues( $table, $column )
{ {
$enum_values = array(); $row = dbFetchOne( "describe $table $column" );
$row = dbFetchOne( "DESCRIBE $table $column" ); preg_match_all( "/'([^']+)'/", $row['Type'], $matches );
preg_match_all( "/'([^']+)'/", $row['Type'], $enum_matches ); return( $matches[1] );
$enum_values = $enum_matches[1];
return( $enum_values );
} }
function getSetValues( $table, $column ) function getSetValues( $table, $column )
@ -145,27 +164,28 @@ function getSetValues( $table, $column )
return( getEnumValues( $table, $column ) ); return( getEnumValues( $table, $column ) );
} }
function getUniqueValues( $table, $column, $as_string=1 ) function getUniqueValues( $table, $column, $asString=1 )
{ {
$values = array(); $values = array();
$sql = "SELECT DISTINCT $column FROM $table WHERE (NOT ISNULL($column) AND $column != '') ORDER BY $column"; $sql = "select distinct $column from $table where (not isnull($column) and $column != '') order by $column";
foreach( dbFetchAll( $sql ) as $row ) foreach( dbFetchAll( $sql ) as $row )
{ {
if ( $as_string ) if ( $asString )
$values[$row[0]] = $row[0]; $values[$row[$column]] = $row[$column];
else else
$values = $row[0]; $values[] = $row[$column];
} }
return( $values ); return( $values );
} }
function getTableColumns( $table, $as_string=1 ) function getTableColumns( $table, $asString=1 )
{ {
$columns = array(); $columns = array();
$sql = "DESCRIBE $table"; $table = dbEscape($table);
$sql = "describe $table";
foreach( dbFetchAll( $sql ) as $row ) foreach( dbFetchAll( $sql ) as $row )
{ {
if ( $as_string ) if ( $asString )
$columns[$row[Field]] = $row[Type]; $columns[$row[Field]] = $row[Type];
else else
$columns[] = $row[Type]; $columns[] = $row[Type];
@ -175,12 +195,12 @@ function getTableColumns( $table, $as_string=1 )
function dbFetchMonitor( $mid ) function dbFetchMonitor( $mid )
{ {
return( dbFetchOne( "select * from Monitors where Id = '$mid'" ) ); return( dbFetchOne( "select * from Monitors where Id = '".dbEscape($mid)."'" ) );
} }
function dbFetchGroup( $gid ) function dbFetchGroup( $gid )
{ {
return( dbFetchOne( "select * from Groups where Id = '$gid'" ) ); return( dbFetchOne( "select * from Groups where Id = '".dbEscape($gid)."'" ) );
} }
?> ?>

2164
web/includes/functions.php Normal file

File diff suppressed because it is too large Load Diff

46
web/includes/lang.php Normal file
View File

@ -0,0 +1,46 @@
<?php
//
// ZoneMinder web language file, $Date$, $Revision$
// Copyright (C) 2003, 2004, 2005, 2006 Philip Coombes
//
// This program 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 program 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
//
function loadLanguage( $prefix="" )
{
global $user;
if ( $prefix )
$prefix = $prefix.'/';
$fallbackLangFile = $prefix.'lang/en_gb.php';
$systemLangFile = $prefix.'lang/'.ZM_LANG_DEFAULT.'.php';
if ( isset($user['Language']) )
$userLangFile = $prefix.$user['Language'].'.php';
if ( isset($userLangFile) && file_exists( $userLangFile ) )
return( $userLangFile );
elseif ( file_exists( $systemLangFile ) )
return( $systemLangFile );
elseif ( file_exists( $fallbackLangFile ) )
return( $fallbackLangFile );
else
return( false );
}
if ( $langFile = loadLanguage() )
require_once( $langFile );
?>

119
web/index.php Normal file
View File

@ -0,0 +1,119 @@
<?php
//
// ZoneMinder main web interface file, $Date$, $Revision$
// Copyright (C) 2003, 2004, 2005, 2006 Philip Coombes
//
// This program 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 program 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
//
error_reporting( E_ALL );
$debug = false;
if ( $debug )
{
// Use these for debugging, though not both at once!
phpinfo( INFO_VARIABLES );
//error_reporting( E_ALL );
}
// Use new style autoglobals where possible
if ( version_compare( phpversion(), "4.1.0", "<") )
{
$_SESSION = &$HTTP_SESSION_VARS;
$_SERVER = &$HTTP_SERVER_VARS;
}
// Useful debugging lines for mobile devices
if ( false )
{
ob_start();
phpinfo( INFO_VARIABLES );
$fp = fopen( "/tmp/env.html", "w" );
fwrite( $fp, ob_get_contents() );
fclose( $fp );
ob_end_clean();
}
if ( isset($_SERVER["HTTPS"]) && $_SERVER["HTTPS"] == 'on' )
{
$protocol = 'https';
}
else
{
$protocol = 'http';
}
define( "ZM_BASE_URL", $protocol.'://'.$_SERVER['HTTP_HOST'] );
if ( isset($_GET['skin']) )
$skin = $_GET['skin'];
elseif ( isset($_COOKIE['zmSkin']) )
$skin = $_COOKIE['zmSkin'];
else
$skin = "classic";
define( "ZM_SKIN_PATH", "skins/$skin" );
$skinSeq = array(); // To allow for inheritance of skins
if ( !file_exists( ZM_SKIN_PATH ) )
die( "Invalid skin '$skin'" );
require_once( ZM_SKIN_PATH.'/includes/init.php' );
$skinSeq[] = $skin;
ini_set( "session.name", "ZMSESSID" );
session_start();
if ( !isset($_SESSION['skin']) || isset($_REQUEST['skin']) )
{
$_SESSION['skin'] = $skin;
setcookie( "zmSkin", $skin );
}
require_once( 'includes/config.php' );
if ( ZM_OPT_USE_AUTH )
if ( isset( $_SESSION['user'] ) )
$user = $_SESSION['user'];
else
unset( $user );
else
$user = $default_user;
require_once( 'includes/lang.php' );
require_once( 'includes/functions.php' );
require_once( 'includes/actions.php' );
foreach ( getSkinIncludes( 'skin.php' ) as $includeFile )
require_once $includeFile;
if ( isset( $_REQUEST['request'] ) )
{
foreach ( getSkinIncludes( 'ajax/'.$_REQUEST['request'].'.php', true, true ) as $includeFile )
require_once $includeFile;
}
else
{
if ( $includeFiles = getSkinIncludes( 'views/'.$_REQUEST['view'].'.php', true, true ) )
{
foreach ( $includeFiles as $includeFile )
require_once $includeFile;
}
else
{
foreach ( getSkinIncludes( 'views/error.php', true, true ) as $includeFile )
require_once $includeFile;
}
}
?>

6
web/js/Makefile.am Normal file
View File

@ -0,0 +1,6 @@
AUTOMAKE_OPTIONS = gnu
webdir = @WEB_PREFIX@/js
dist_web_DATA = \
mootools.ext.js

23
web/lang/Makefile.am Normal file
View File

@ -0,0 +1,23 @@
AUTOMAKE_OPTIONS = gnu
webdir = @WEB_PREFIX@/lang
dist_web_DATA = \
big5_big5.php \
cs_cz.php \
de_de.php \
dk_dk.php \
en_gb.php \
en_us.php \
es_ar.php \
fr_fr.php \
he_il.php \
hu_hu.php \
it_it.php \
ja_jp.php \
nl_nl.php \
pl_pl.php \
pt_br.php \
ro_ro.php \
ru_ru.php \
se_se.php

809
web/lang/big5_big5.php Normal file
View File

@ -0,0 +1,809 @@
<?php
//
// ZoneMinder web Chinese Traditional language file, $Date$, $Revision$
// Copyright (C) 2003, 2004, 2005 Philip Coombes
//
// This program 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 program 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
//
// ZoneMinder <Chinese Traditional> Translation by <Greener C. Chiou>
// Notes for Translators
// 0. Get some credit, put your name in the line above (optional)
// 1. When composing the language tokens in your language you should try and keep to roughly the
// same length text if possible. Abbreviate where necessary as spacing is quite close in a number of places.
// 2. There are four types of string replacement
// a) Simple replacements are words or short phrases that are static and used directly. This type of
// replacement can be used 'as is'.
// b) Complex replacements involve some dynamic element being included and so may require substitution
// or changing into a different order. The token listed in this file will be passed through sprintf as
// a formatting string. If the dynamic element is a number you will usually need to use a variable
// replacement also as described below.
// c) Variable replacements are used in conjunction with complex replacements and involve the generation
// of a singular or plural noun depending on the number passed into the zmVlang function. See the
// the zmVlang section below for a further description of this.
// d) Optional strings which can be used to replace the prompts and/or help text for the Options section
// of the web interface. These are not listed below as they are quite large and held in the database
// so that they can also be used by the zmconfig.pl script. However you can build up your own list
// quite easily from the Config table in the database if necessary.
// 3. The tokens listed below are not used to build up phrases or sentences from single words. Therefore
// you can safely assume that a single word token will only be used in that context.
// 4. In new language files, or if you are changing only a few words or phrases it makes sense from a
// maintenance point of view to include the original language file and override the old definitions rather
// than copy all the language tokens across. To do this change the line below to whatever your base language
// is and uncomment it.
//require_once( 'zm_lang_en_gb.php' );
// You may need to change the character set here, if your web server does not already
// do this by default, uncomment this if required.
//
// Example
//header( "Content-Type: text/html; charset=Big5" );
// You may need to change your locale here if your default one is incorrect for the
// language described in this file, or if you have multiple languages supported.
// If you do need to change your locale, be aware that the format of this function
// is subtlely different in versions of PHP before and after 4.3.0, see
// http://uk2.php.net/manual/en/function.setlocale.php for details.
// Also be aware that changing the whole locale may affect some floating point or decimal
// arithmetic in the database, if this is the case change only the individual locale areas
// that don't affect this rather than all at once. See the examples below.
// Finally, depending on your setup, PHP may not enjoy have multiple locales in a shared
// threaded environment, if you get funny errors it may be this.
//
// Examples
//setlocale( 'LC_ALL', 'en_GB' ); All locale settings pre-4.3.0
//setlocale( LC_ALL, 'en_GB' ); All locale settings 4.3.0 and after
// setlocale( LC_CTYPE, 'en_GB' ); Character class settings 4.3.0 and after
// setlocale( LC_TIME, 'en_GB' ); Date and time formatting 4.3.0 and after
setlocale( 'LC_ALL', 'Big5' ); //All locale settings pre-4.3.0
//setlocale( LC_ALL, 'Big5' ); //All locale settings 4.3.0 and after
setlocale( 'LC_CTYPE', 'Big5' ); //Character class settings 4.3.0 and after
setlocale( 'LC_TIME', 'Big5' ); //Date and time formatting 4.3.0 and after
// Simple String Replacements
$SLANG = array(
'24BitColour' => '24 位元色彩',
'8BitGrey' => '8 位元灰階',
'Action' => 'Action',
'Actual' => 'Actual',
'AddNewControl' => '新增控制',
'AddNewMonitor' => '新增監視',
'AddNewUser' => '新增使用者',
'AddNewZone' => '新增監視區',
'AlarmBrFrames' => '警報<br/>框架',
'AlarmFrameCount' => '警報框架數',
'AlarmFrame' => '警報框架',
'AlarmLimits' => 'Alarm Limits',
'AlarmMaximumFPS' => 'Alarm Maximum FPS',
'AlarmPx' => 'Alarm Px',
'AlarmRGBUnset' => 'You must set an alarm RGB colour',
'Alarm' => '警報',
'Alert' => '警告',
'All' => '全部',
'ApplyingStateChange' => '確定狀態改變',
'Apply' => '確定',
'ArchArchived' => 'Archived Only',
'Archived' => '已存檔',
'Archive' => '存檔',
'ArchUnarchived' => 'Unarchived Only',
'Area' => 'Area',
'AreaUnits' => 'Area (px/%)',
'AttrAlarmFrames' => 'Alarm Frames',
'AttrArchiveStatus' => 'Archive Status',
'AttrAvgScore' => 'Average Score',
'AttrCause' => 'Cause',
'AttrDate' => 'Date',
'AttrDateTime' => 'Date/Time',
'AttrDiskBlocks' => 'Disk Blocks',
'AttrDiskPercent' => 'Disk Percent',
'AttrDuration' => 'Duration',
'AttrFrames' => 'Frames',
'AttrId' => 'Id',
'AttrMaxScore' => 'Max. Score',
'AttrMonitorId' => 'Monitor Id',
'AttrMonitorName' => 'Monitor Name',
'AttrName' => 'Name',
'AttrNotes' => 'Notes',
'AttrSystemLoad' => 'System Load',
'AttrTime' => 'Time',
'AttrTotalScore' => 'Total Score',
'AttrWeekday' => 'Weekday',
'AutoStopTimeout' => '時間過自動停止',
'Auto' => '自動',
'AvgBrScore' => '平均<br/>分數',
'Background' => 'Background',
'BackgroundFilter' => 'Run filter in background',
'BadAlarmFrameCount' => 'Alarm frame count must be an integer of one or more',
'BadAlarmMaxFPS' => 'Alarm Maximum FPS must be a positive integer or floating point value',
'BadChannel' => 'Channel must be set to an integer of zero or more',
'BadDevice' => 'Device must be set to a valid value',
'BadFormat' => 'Format must be set to an integer of zero or more',
'BadFPSReportInterval' => 'FPS report interval buffer count must be an integer of 100 or more',
'BadFrameSkip' => 'Frame skip count must be an integer of zero or more',
'BadHeight' => 'Height must be set to a valid value',
'BadHost' => 'Host must be set to a valid ip address or hostname, do not include http://',
'BadImageBufferCount' => 'Image buffer size must be an integer of 10 or more',
'BadLabelX' => 'Label X co-ordinate must be set to an integer of zero or more',
'BadLabelY' => 'Label Y co-ordinate must be set to an integer of zero or more',
'BadMaxFPS' => 'Maximum FPS must be a positive integer or floating point value',
'BadNameChars' => 'Names may only contain alphanumeric characters plus hyphen and underscore',
'BadPath' => 'Path must be set to a valid value',
'BadPort' => 'Port must be set to a valid number',
'BadPostEventCount' => 'Post event image count must be an integer of zero or more',
'BadPreEventCount' => 'Pre event image count must be at least zero, and less than image buffer size',
'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',
'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',
'BadWidth' => 'Width must be set to a valid value',
'Bandwidth' => '頻寬',
'BlobPx' => 'Blob Px',
'Blobs' => 'Blobs',
'BlobSizes' => 'Blob Sizes',
'Brightness' => '亮度',
'Buffers' => '緩衝',
'CanAutoFocus' => 'Can Auto Focus',
'CanAutoGain' => 'Can Auto Gain',
'CanAutoIris' => 'Can Auto Iris',
'CanAutoWhite' => 'Can Auto White Bal.',
'CanAutoZoom' => 'Can Auto Zoom',
'CancelForcedAlarm' => 'Cancel Forced Alarm',
'Cancel' => '取消',
'CanFocusAbs' => 'Can Focus Absolute',
'CanFocus' => 'Can Focus',
'CanFocusCon' => 'Can Focus Continuous',
'CanFocusRel' => 'Can Focus Relative',
'CanGainAbs' => 'Can Gain Absolute',
'CanGain' => 'Can Gain ',
'CanGainCon' => 'Can Gain Continuous',
'CanGainRel' => 'Can Gain Relative',
'CanIrisAbs' => 'Can Iris Absolute',
'CanIris' => 'Can Iris',
'CanIrisCon' => 'Can Iris Continuous',
'CanIrisRel' => 'Can Iris Relative',
'CanMoveAbs' => 'Can Move Absolute',
'CanMove' => 'Can Move',
'CanMoveCon' => 'Can Move Continuous',
'CanMoveDiag' => 'Can Move Diagonally',
'CanMoveMap' => 'Can Move Mapped',
'CanMoveRel' => 'Can Move Relative',
'CanPan' => 'Can Pan' ,
'CanReset' => 'Can Reset',
'CanSetPresets' => 'Can Set Presets',
'CanSleep' => 'Can Sleep',
'CanTilt' => 'Can Tilt',
'CanWake' => 'Can Wake',
'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',
'CanZoomCon' => 'Can Zoom Continuous',
'CanZoomRel' => 'Can Zoom Relative',
'CaptureHeight' => '捕捉高度',
'CapturePalette' => '捕捉格式',
'CaptureWidth' => '捕捉寬度',
'Cause' => '因素',
'CheckMethod' => 'Alarm Check Method',
'ChooseFilter' => 'Choose Filter',
'ChoosePreset' => 'Choose Preset',
'Close' => '關閉',
'Colour' => 'Colour',
'Command' => 'Command',
'Config' => 'Config',
'ConfiguredFor' => '配置為',
'ConfirmDeleteEvents' => 'Are you sure you wish to delete the selected events?',
'ConfirmPassword' => '確認密碼',
'ConjAnd' => 'and',
'ConjOr' => 'or',
'Console' => '操控台',
'ContactAdmin' => '請與系統管理者聯繫.',
'Continue' => '連續',
'Contrast' => 'Contrast',
'ControlAddress' => 'Control Address',
'ControlCap' => 'Control Capability',
'ControlCaps' => 'Control Capabilities',
'Control' => 'Control',
'ControlDevice' => 'Control Device',
'Controllable' => 'Controllable',
'ControlType' => 'Control Type',
'CycleWatch' => '分區輪流檢視',
'Cycle' => '分區輪流檢視',
'Day' => '日',
'Debug' => 'debug',
'DefaultRate' => '預設速率',
'DefaultScale' => '預設尺寸',
'DefaultView' => 'Default View',
'DeleteAndNext' => '刪除 &amp; 下一事件',
'DeleteAndPrev' => '刪除 &amp; 上一事件',
'DeleteSavedFilter' => '刪除儲存過濾',
'Delete' => '刪除',
'Description' => '描述',
'DeviceChannel' => '裝置通道',
'DeviceFormat' => '裝置格式',
'DeviceNumber' => '裝置編號',
'DevicePath' => '裝置路徑',
'Devices' => 'Devices',
'Dimensions' => '尺寸',
'DisableAlarms' => '取消警報',
'Disk' => '磁碟',
'DonateAlready' => 'No, I\'ve already donated',
'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' => 'Please Donate',
'DonateRemindDay' => 'Not yet, remind again in 1 day',
'DonateRemindHour' => 'Not yet, remind again in 1 hour',
'DonateRemindMonth' => 'Not yet, remind again in 1 month',
'DonateRemindNever' => 'No, I don\'t want to donate, never remind',
'DonateRemindWeek' => 'Not yet, remind again in 1 week',
'DonateYes' => 'Yes, I\'d like to donate now',
'Download' => '下載',
'Duration' => '歷時',
'Edit' => '編輯',
'Email' => 'Email',
'EnableAlarms' => '啟動警報',
'Enabled' => '啟用',
'EnterNewFilterName' => 'Enter new filter name',
'ErrorBrackets' => 'Error, please check you have an equal number of opening and closing brackets',
'ErrorValidValue' => 'Error, please check that all terms have a valid value',
'Error' => '錯誤',
'Etc' => 'etc',
'EventFilter' => '事件過濾',
'EventId' => '事件Id',
'EventName' => '事件名稱',
'EventPrefix' => '事件字首',
'Events' => '事件',
'Event' => '事件',
'Exclude' => '不包含',
'Execute' => 'Execute',
'ExportDetails' => '輸出事件細項',
'ExportFailed' => '輸出失敗',
'ExportFormatTar' => 'Tar',
'ExportFormatZip' => 'Zip',
'ExportFormat' => '輸出檔案格式',
'ExportFrames' => '輸出框架細項',
'ExportImageFiles' => '輸出圖片檔',
'Exporting' => '輸出中',
'ExportMiscFiles' => '輸出其他檔(若有)',
'ExportOptions' => '輸出選項',
'ExportVideoFiles' => '輸出影片檔(若有)',
'Export' => '輸出',
'Far' => 'Far',
'FastForward' => 'Fast Forward',
'Feed' => 'Feed',
'FileColours' => '檔案色彩',
'File' => 'File',
'FilePath' => '檔案路徑',
'FilterArchiveEvents' => '自動儲存符合項目',
'FilterDeleteEvents' => '自動刪除符合項目',
'FilterEmailEvents' => '自動寄出詳細符合項目',
'FilterExecuteEvents' => '自動執行符合指令',
'FilterMessageEvents' => '自動發出符合訊息',
'FilterPx' => 'Filter Px',
'Filters' => '濾鏡',
'FilterUnset' => '您必需設定濾鏡的寬度和高度',
'FilterUploadEvents' => '自動上傳符合項目',
'FilterVideoEvents' => '自動產生符合的影像檔',
'First' => 'First',
'FlippedHori' => '水平反轉',
'FlippedVert' => '垂直反轉',
'Focus' => 'Focus',
'ForceAlarm' => 'Force Alarm',
'Format' => '格式',
'FPS' => 'fps',
'FPSReportInterval' => 'FPS 報告間距',
'FrameId' => '框架 Id',
'FrameRate' => '框架速率',
'FrameSkip' => '框架忽略',
'Frames' => '框架',
'Frame' => '框架',
'FTP' => 'FTP',
'Func' => 'Func',
'Function' => '功能',
'Gain' => 'Gain',
'General' => '一般',
'GenerateVideo' => '輸出影片',
'GeneratingVideo' => '輸出影片中',
'GoToZoneMinder' => 'Go to ZoneMinder.com',
'Grey' => 'Grey',
'Group' => 'Group',
'Groups' => 'Groups',
'HasFocusSpeed' => 'Has Focus Speed',
'HasGainSpeed' => 'Has Gain Speed',
'HasHomePreset' => 'Has Home Preset',
'HasIrisSpeed' => 'Has Iris Speed',
'HasPanSpeed' => 'Has Pan Speed',
'HasPresets' => 'Has Presets',
'HasTiltSpeed' => 'Has Tilt Speed',
'HasTurboPan' => 'Has Turbo Pan',
'HasTurboTilt' => 'Has Turbo Tilt',
'HasWhiteSpeed' => 'Has White Bal. Speed',
'HasZoomSpeed' => 'Has Zoom Speed',
'HighBW' => 'High&nbsp;B/W',
'High' => '高',
'Home' => 'Home',
'Hour' => '時',
'Hue' => 'Hue',
'Id' => 'Id',
'Idle' => 'Idle',
'Ignore' => 'Ignore',
'ImageBufferSize' => '影像緩衝大小',
'Images' => 'Images',
'Image' => '影像',
'Include' => '包含',
'In' => 'In',
'Inverted' => '反轉',
'Iris' => 'Iris',
'KeyString' => 'Key String',
'Label' => 'Label',
'Language' => '語言',
'Last' => 'Last',
'LimitResultsPost' => 'results only;', // This is used at the end of the phrase 'Limit to first N results only'
'LimitResultsPre' => 'Limit to first', // This is used at the beginning of the phrase 'Limit to first N results only'
'LinkedMonitors' => 'Linked Monitors',
'List' => '列出',
'Load' => '載入',
'Local' => 'Local',
'LoggedInAs' => '登入名稱',
'LoggingIn' => '登入中... 請稍後...',
'Login' => '登入',
'Logout' => '登出',
'LowBW' => 'Low&nbsp;B/W',
'Low' => '低',
'Main' => 'Main',
'Man' => 'Man',
'Manual' => 'Manual',
'Mark' => '標註',
'MaxBrScore' => '最高<br/>分數',
'MaxFocusRange' => 'Max Focus Range',
'MaxFocusSpeed' => 'Max Focus Speed',
'MaxFocusStep' => 'Max Focus Step',
'MaxGainRange' => 'Max Gain Range',
'MaxGainSpeed' => 'Max Gain Speed',
'MaxGainStep' => 'Max Gain Step',
'MaximumFPS' => '最大每秒框架數 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',
'MaxTiltRange' => 'Max Tilt Range',
'MaxTiltSpeed' => 'Max Tilt Speed',
'MaxTiltStep' => 'Max Tilt Step',
'MaxWhiteRange' => 'Max White Bal. Range',
'MaxWhiteSpeed' => 'Max White Bal. Speed',
'MaxWhiteStep' => 'Max White Bal. Step',
'MaxZoomRange' => 'Max Zoom Range',
'MaxZoomSpeed' => 'Max Zoom Speed',
'MaxZoomStep' => 'Max Zoom Step',
'MediumBW' => 'Medium&nbsp;B/W',
'Medium' => '中',
'MinAlarmAreaLtMax' => 'Minimum alarm area should be less than maximum',
'MinAlarmAreaUnset' => 'You must specify the minimum alarm pixel count',
'MinBlobAreaLtMax' => 'Minimum blob area should be less than maximum',
'MinBlobAreaUnset' => 'You must specify the minimum blob pixel count',
'MinBlobLtMinFilter' => 'Minimum blob area should be less than or equal to minimum filter area',
'MinBlobsLtMax' => 'Minimum blobs should be less than maximum',
'MinBlobsUnset' => 'You must specify the minimum blob count',
'MinFilterAreaLtMax' => 'Minimum filter area should be less than maximum',
'MinFilterAreaUnset' => 'You must specify the minimum filter pixel count',
'MinFilterLtMinAlarm' => 'Minimum filter area should be less than or equal to minimum alarm area',
'MinFocusRange' => 'Min Focus Range',
'MinFocusSpeed' => 'Min Focus Speed',
'MinFocusStep' => 'Min Focus Step',
'MinGainRange' => 'Min Gain Range',
'MinGainSpeed' => 'Min Gain Speed',
'MinGainStep' => 'Min Gain Step',
'MinIrisRange' => 'Min Iris Range',
'MinIrisSpeed' => 'Min Iris Speed',
'MinIrisStep' => 'Min Iris Step',
'MinPanRange' => 'Min Pan Range',
'MinPanSpeed' => 'Min Pan Speed',
'MinPanStep' => 'Min Pan Step',
'MinPixelThresLtMax' => 'Minimum pixel threshold should be less than maximum',
'MinPixelThresUnset' => 'You must specify a minimum pixel threshold',
'MinTiltRange' => 'Min Tilt Range',
'MinTiltSpeed' => 'Min Tilt Speed',
'MinTiltStep' => 'Min Tilt Step',
'MinWhiteRange' => 'Min White Bal. Range',
'MinWhiteSpeed' => 'Min White Bal. Speed',
'MinWhiteStep' => 'Min White Bal. Step',
'MinZoomRange' => 'Min Zoom Range',
'MinZoomSpeed' => 'Min Zoom Speed',
'MinZoomStep' => 'Min Zoom Step',
'Misc' => '細項',
'MonitorIds' => 'Monitor&nbsp;Ids',
'MonitorPresetIntro' => 'Select an appropriate preset from the list below.<br><br>Please note that this may overwrite any values you already have configured for this monitor.<br><br>',
'MonitorPreset' => 'Monitor Preset',
'Monitors' => '監視',
'Monitor' => '監視',
'Montage' => '全部顯示',
'Month' => '月',
'Move' => '移動',
'MustBeGe' => '需大於或等於',
'MustBeLe' => '需小於或等於',
'MustConfirmPassword' => '您必需確認密碼',
'MustSupplyPassword' => '您必需提供密碼',
'MustSupplyUsername' => '您必需提供使用者名稱',
'Name' => '名稱',
'Near' => 'Near',
'Network' => 'Network',
'NewGroup' => '新群組',
'NewLabel' => 'New Label',
'NewPassword' => '新密碼',
'NewState' => '新狀態',
'NewUser' => '新使用者',
'New' => '新增',
'Next' => '下一步',
'NoFramesRecorded' => 'There are no frames recorded for this event',
'NoGroups' => 'No groups have been defined',
'NoneAvailable' => 'None available',
'None' => '無選取',
'No' => 'No',
'Normal' => 'Normal',
'NoSavedFilters' => 'NoSavedFilters',
'NoStatisticsRecorded' => 'There are no statistics recorded for this event/frame',
'Notes' => 'Notes',
'NumPresets' => 'Num Presets',
'Off' => 'Off',
'On' => 'On',
'Open' => 'Open',
'OpEq' => 'equal to',
'OpGtEq' => 'greater than or equal to',
'OpGt' => 'greater than',
'OpIn' => 'in set',
'OpLtEq' => 'less than or equal to',
'OpLt' => 'less than',
'OpMatches' => 'matches',
'OpNe' => 'not equal to',
'OpNotIn' => 'not in set',
'OpNotMatches' => 'does not match',
'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.',
'Options' => '銓垣專用',//進階選項
'Order' => '順序',
'OrEnterNewName' => 'or enter new name',
'Orientation' => '方向',
'Out' => 'Out',
'OverwriteExisting' => 'Overwrite Existing',
'Paged' => 'Paged',
'PanLeft' => 'Pan Left',
'Pan' => 'Pan',
'PanRight' => 'Pan Right',
'PanTilt' => 'Pan/Tilt',
'Parameter' => '參數',
'PasswordsDifferent' => 'The new and confirm passwords are different',
'Password' => '密碼',
'Paths' => 'Paths',
'Pause' => 'Pause',
'PhoneBW' => 'Phone&nbsp;B/W',
'Phone' => 'Phone',
'PixelDiff' => 'Pixel Diff',
'Pixels' => 'pixels',
'PlayAll' => '全部播放',
'Play' => 'Play',
'PleaseWait' => 'Please Wait',
'Point' => '點',
'PostEventImageBuffer' => '後置事件影像緩衝',
'PreEventImageBuffer' => '前置事件影像緩衝',
'PreserveAspect' => 'Preserve Aspect Ratio',
'Preset' => 'Preset',
'Presets' => 'Presets',
'Prev' => '上一事件',
'Protocol' => 'Protocol',
'Rate' => 'Rate',
'Real' => 'Real',
'Record' => '錄影',
'RefImageBlendPct' => '參考影像混合 %ge',
'Refresh' => '更新',
'RemoteHostName' => '遠端主機名稱',
'RemoteHostPath' => '遠端主機路徑',
'RemoteHostPort' => '遠端主機端口',
'RemoteImageColours' => 'Remote Image Colours',
'Remote' => 'Remote',
'Rename' => '重新命名',
'ReplayAll' => 'All Events',
'ReplayGapless' => 'Gapless Events',
'Replay' => 'Replay',
'ReplaySingle' => 'Single Event',
'Replay' => '重新播放',
'ResetEventCounts' => 'Reset Event Counts',
'Reset' => 'Reset',
'Restarting' => 'Restarting',
'Restart' => '重新啟動',
'RestrictedCameraIds' => 'Restricted Camera Ids',
'RestrictedMonitors' => 'Restricted Monitors',
'ReturnDelay' => 'Return Delay',
'ReturnLocation' => 'Return Location',
'Rewind' => 'Rewind',
'RotateLeft' => 'Rotate Left',
'RotateRight' => 'Rotate Right',
'RunMode' => '監視模式',
'Running' => '運行中',
'RunState' => '運作狀態',
'SaveAs' => '儲存為',
'SaveFilter' => 'Save Filter',
'Save' => '存檔',
'Scale' => 'Scale',
'Score' => '分數',
'Secs' => 'Secs',
'Sectionlength' => '片段長度',
'SelectMonitors' => 'Select Monitors',
'Select' => '選取',
'SelfIntersecting' => 'Polygon edges must not intersect',
'SetLearnPrefs' => 'Set Learn Prefs', // This can be ignored for now
'SetNewBandwidth' => '設定新頻寬速度',
'SetPreset' => 'Set Preset',
'Set' => 'Set',
'Settings' => 'Settings',
'ShowFilterWindow' => '顯示過濾視窗',
'ShowTimeline' => 'Show Timeline',
'SignalCheckColour' => 'Signal Check Colour',
'Size' => 'Size',
'Sleep' => 'Sleep',
'SortAsc' => 'Asc',
'SortBy' => 'Sort by',
'SortDesc' => 'Desc',
'SourceType' => '來源形式',
'Source' => '來源',
'SpeedHigh' => '高 速',
'SpeedLow' => '低 速',
'SpeedMedium' => '中速',
'SpeedTurbo' => 'Turbo Speed',
'Speed' => '速度',
'Start' => 'Start',
'State' => 'State',
'Stats' => 'Stats',
'Status' => 'Status',
'StepBack' => 'Step Back',
'StepForward' => 'Step Forward',
'StepLarge' => 'Large Step',
'StepMedium' => 'Medium Step',
'StepNone' => 'No Step',
'StepSmall' => 'Small Step',
'Step' => 'Step',
'Stills' => '靜止',
'Stopped' => '已停止',
'Stop' => '停止',
'StreamReplayBuffer' => 'Stream Replay Image Buffer',
'Stream' => '串流',
'Submit' => 'Submit',
'System' => 'System',
'Tele' => 'Tele',
'Thumbnail' => '小圖檢視',
'Tilt' => 'Tilt',
'TimeDelta' => 'Time Delta',
'TimestampLabelFormat' => '時間標示格式',
'TimestampLabelX' => '時間標示 X',
'TimestampLabelY' => '時間標示 Y',
'Timestamp' => '時間格式',
'Time' => '時間',
'Today' => 'Today',
'Tools' => 'Tools',
'TotalBrScore' => '全部<br/>分數',
'TrackDelay' => 'Track Delay',
'TrackMotion' => 'Track Motion',
'Triggers' => '觸發',
'TurboPanSpeed' => 'Turbo Pan Speed',
'TurboTiltSpeed' => 'Turbo Tilt Speed',
'Type' => 'Type',
'Unarchive' => '不存檔',
'Units' => 'Units',
'Unknown' => 'Unknown',
'UpdateAvailable' => 'An update to ZoneMinder is available.',
'UpdateNotNecessary' => 'No update is necessary.',
'UseFilterExprsPost' => '&nbsp;filter&nbsp;expressions', // This is used at the end of the phrase 'use N filter expressions'
'UseFilterExprsPre' => 'Use&nbsp;', // This is used at the beginning of the phrase 'use N filter expressions'
'UseFilter' => 'Use Filter',
'Username' => '使用者名稱',
'Users' => 'Users',
'User' => 'User',
'Value' => '設定值',
'VersionIgnore' => 'Ignore this version',
'VersionRemindDay' => 'Remind again in 1 day',
'VersionRemindHour' => 'Remind again in 1 hour',
'VersionRemindNever' => 'Don\'t remind about new versions',
'VersionRemindWeek' => 'Remind again in 1 week',
'Version' => '版本',
'VideoGenFailed' => '輸出影片失敗!',
'VideoGenParms' => '輸出影片參數',
'VideoSize' => '影片尺寸',
'Video' => 'Video',
'ViewAll' => '全部檢視',
'ViewPaged' => '分頁檢視',
'View' => '檢視',
'Wake' => 'Wake',
'WarmupFrames' => '熱機框架',
'Watch' => 'Watch',
'Web' => 'Web',
'Week' => '週',
'WhiteBalance' => 'White Balance',
'White' => 'White',
'Wide' => 'Wide',
'X10ActivationString' => 'X10 Activation String',
'X10InputAlarmString' => 'X10 Input Alarm String',
'X10OutputAlarmString' => 'X10 Output Alarm String',
'X10' => 'X10',
'X' => 'X',
'Yes' => 'Yes',
'YouNoPerms' => 'You do not have permissions to access this resource.',
'ZoneAlarmColour' => 'Alarm Colour (Red/Green/Blue)',
'ZoneAlarmColour' => 'Alarm Colour (RGB)',
'ZoneArea' => 'Zone Area',
'ZoneFilterHeight' => 'Filter Height (pixels)',
'ZoneFilterSize' => 'Filter Width/Height (pixels)',
'ZoneFilterWidth' => 'Filter Width (pixels)',
'ZoneMaxAlarmedArea' => 'Maximum Alarmed Area',
'ZoneMaxBlobArea' => 'Maximum Blob Area',
'ZoneMaxBlobs' => 'Maximum Blobs',
'ZoneMaxFilteredArea' => 'Maximum Filtered Area',
'ZoneMaxX' => 'Maximum X (right)',
'ZoneMaxY' => 'Maximum Y (bottom)',
'ZoneMinAlarmedArea' => 'Minimum Alarmed Area',
'ZoneMinBlobArea' => 'Minimum Blob Area',
'ZoneMinBlobs' => 'Minimum Blobs',
'ZoneMinFilteredArea' => 'Minimum Filtered Area',
'ZoneMinMaxAlarmArea' => 'Min/Max Alarmed Area',
'ZoneMinMaxBlobArea' => 'Min/Max Blob Area',
'ZoneMinMaxBlobs' => 'Min/Max Blobs',
'ZoneMinMaxFiltArea' => 'Min/Max Filtered Area',
'ZoneMinMaxPixelThres' => 'Min/Max Pixel Threshold (0-255)',
'ZoneMinPixelThres' => 'Minimum Pixel Threshold (0-255)',
'ZoneMinX' => 'Minimum X (left)',
'ZoneMinY' => 'Minimum Y (top)',
'ZoneOverloadFrames' => 'Overload Frame Ignore Count',
'Zones' => '監視區',
'Zone' => 'Zone',
'Zoom' => 'Zoom',
);
// Complex replacements with formatting and/or placements, must be passed through sprintf
$CLANG = array(
'CurrentLogin' => '目前登入者是 \'%1$s\'',
'EventCount' => '%1$s %2$s', // For example '37 Events' (from Vlang below)
'LastEvents' => 'Last %1$s %2$s', // For example 'Last 37 Events' (from Vlang below)
'LatestRelease' => 'The latest release is v%1$s, you have v%2$s.',
'MonitorCount' => '%1$s %2$s', // For example '4 Monitors' (from Vlang below)
'MonitorFunction' => 'Monitor %1$s Function',
'RunningRecentVer' => 'You are running the most recent version of ZoneMinder, v%s.',
);
// The next section allows you to describe a series of word ending and counts used to
// generate the correctly conjugated forms of words depending on a count that is associated
// with that word.
// This intended to allow phrases such a '0 potatoes', '1 potato', '2 potatoes' etc to
// conjugate correctly with the associated count.
// In some languages such as English this is fairly simple and can be expressed by assigning
// a count with a singular or plural form of a word and then finding the nearest (lower) value.
// So '0' of something generally ends in 's', 1 of something is singular and has no extra
// ending and 2 or more is a plural and ends in 's' also. So to find the ending for '187' of
// something you would find the nearest lower count (2) and use that ending.
//
// So examples of this would be
// $zmVlangPotato = array( 0=>'Potatoes', 1=>'Potato', 2=>'Potatoes' );
// $zmVlangSheep = array( 0=>'Sheep' );
//
// where you can have as few or as many entries in the array as necessary
// If your language is similar in form to this then use the same format and choose the
// appropriate zmVlang function below.
// If however you have a language with a different format of plural endings then another
// approach is required . For instance in Russian the word endings change continuously
// depending on the last digit (or digits) of the numerator. In this case then zmVlang
// arrays could be written so that the array index just represents an arbitrary 'type'
// and the zmVlang function does the calculation about which version is appropriate.
//
// So an example in Russian might be (using English words, and made up endings as I
// don't know any Russian!!)
// $zmVlangPotato = array( 1=>'Potati', 2=>'Potaton', 3=>'Potaten' );
//
// and the zmVlang function decides that the first form is used for counts ending in
// 0, 5-9 or 11-19 and the second form when ending in 1 etc.
//
// Variable arrays expressing plurality, see the zmVlang description above
$VLANG = array(
'Event' => array( 0=>'事件', 1=>'事件', 2=>'事件' ),
'Monitor' => array( 0=>'監視', 1=>'監視', 2=>'監視' ),
);
// You will need to choose or write a function that can correlate the plurality string arrays
// with variable counts. This is used to conjugate the Vlang arrays above with a number passed
// in to generate the correct noun form.
//
// In languages such as English this is fairly simple
// Note this still has to be used with printf etc to get the right formating
function zmVlang( $langVarArray, $count )
{
krsort( $langVarArray );
foreach ( $langVarArray as $key=>$value )
{
if ( abs($count) >= $key )
{
return( $value );
}
}
die( 'Error, unable to correlate variable language string' );
}
// This is an version that could be used in the Russian example above
// The rules are that the first word form is used if the count ends in
// 0, 5-9 or 11-19. The second form is used then the count ends in 1
// (not including 11 as above) and the third form is used when the
// count ends in 2-4, again excluding any values ending in 12-14.
//
// function zmVlang( $langVarArray, $count )
// {
// $secondlastdigit = substr( $count, -2, 1 );
// $lastdigit = substr( $count, -1, 1 );
// // or
// // $secondlastdigit = ($count/10)%10;
// // $lastdigit = $count%10;
//
// // Get rid of the special cases first, the teens
// if ( $secondlastdigit == 1 && $lastdigit != 0 )
// {
// return( $langVarArray[1] );
// }
// switch ( $lastdigit )
// {
// case 0 :
// case 5 :
// case 6 :
// case 7 :
// case 8 :
// case 9 :
// {
// return( $langVarArray[1] );
// break;
// }
// case 1 :
// {
// return( $langVarArray[2] );
// break;
// }
// case 2 :
// case 3 :
// case 4 :
// {
// return( $langVarArray[3] );
// break;
// }
// }
// die( 'Error, unable to correlate variable language string' );
// }
// This is an example of how the function is used in the code which you can uncomment and
// use to test your custom function.
//$monitors = array();
//$monitors[] = 1; // Choose any number
//echo sprintf( $zmClangMonitorCount, count($monitors), zmVlang( $zmVlangMonitor, count($monitors) ) );
// In this section you can override the default prompt and help texts for the options area
// These overrides are in the form show below where the array key represents the option name minus the initial ZM_
// So for example, to override the help text for ZM_LANG_DEFAULT do
$OLANG = array(
// 'LANG_DEFAULT' => array(
// 'Prompt' => "This is a new prompt for this option",
// 'Help' => "This is some new help for this option which will be displayed in the popup window when the ? is clicked"
// ),
);
?>

802
web/lang/cs_cz.php Normal file
View File

@ -0,0 +1,802 @@
<?php
//
// ZoneMinder web UK English language file, $Date$, $Revision$
// Copyright (C) 2003, 2004, 2005, 2006 Philip Coombes
//
// This program 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 program 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
//
// ZoneMinder Czech Translation by Lukas Pokorny/Mlada Boleslav
// Notes for Translators
// 0. Get some credit, put your name in the line above (optional)
// 1. When composing the language tokens in your language you should try and keep to roughly the
// same length text if possible. Abbreviate where necessary as spacing is quite close in a number of places.
// 2. There are four types of string replacement
// a) Simple replacements are words or short phrases that are static and used directly. This type of
// replacement can be used 'as is'.
// b) Complex replacements involve some dynamic element being included and so may require substitution
// or changing into a different order. The token listed in this file will be passed through sprintf as
// a formatting string. If the dynamic element is a number you will usually need to use a variable
// replacement also as described below.
// c) Variable replacements are used in conjunction with complex replacements and involve the generation
// of a singular or plural noun depending on the number passed into the zmVlang function. See the
// the zmVlang section below for a further description of this.
// d) Optional strings which can be used to replace the prompts and/or help text for the Options section
// of the web interface. These are not listed below as they are quite large and held in the database
// so that they can also be used by the zmconfig.pl script. However you can build up your own list
// quite easily from the Config table in the database if necessary.
// 3. The tokens listed below are not used to build up phrases or sentences from single words. Therefore
// you can safely assume that a single word token will only be used in that context.
// 4. In new language files, or if you are changing only a few words or phrases it makes sense from a
// maintenance point of view to include the original language file and override the old definitions rather
// than copy all the language tokens across. To do this change the line below to whatever your base language
// is and uncomment it.
//require_once( 'zm_lang_en_gb.php' );
// You may need to change the character set here, if your web server does not already
// do this by default, uncomment this if required.
//
// Example
//header( "Content-Type: text/html; charset=iso-8859-2" );
// You may need to change your locale here if your default one is incorrect for the
// language described in this file, or if you have multiple languages supported.
// If you do need to change your locale, be aware that the format of this function
// is subtlely different in versions of PHP before and after 4.3.0, see
// http://uk2.php.net/manual/en/function.setlocale.php for details.
// Also be aware that changing the whole locale may affect some floating point or decimal
// arithmetic in the database, if this is the case change only the individual locale areas
// that don't affect this rather than all at once. See the examples below.
// Finally, depending on your setup, PHP may not enjoy have multiple locales in a shared
// threaded environment, if you get funny errors it may be this.
//
// Examples
//setlocale( 'LC_ALL', 'cs_CZ' ); All locale settings pre-4.3.0
// setlocale( LC_ALL, 'en_GB' ); All locale settings 4.3.0 and after
// setlocale( LC_CTYPE, 'en_GB' ); Character class settings 4.3.0 and after
// setlocale( LC_TIME, 'en_GB' ); Date and time formatting 4.3.0 and after
// Simple String Replacements
$SLANG = array(
'24BitColour' => '24 bit barevná',
'8BitGrey' => '8 bit ¹edá ¹kála',
'Action' => 'Akce',
'Actual' => 'Skuteèná',
'AddNewControl' => 'Pøidat nové øízení',
'AddNewMonitor' => 'Pøidat kameru',
'AddNewUser' => 'Pøidat u¾ivatele',
'AddNewZone' => 'Pøidat zónu',
'Alarm' => 'Alarm',
'AlarmBrFrames' => 'Alarm<br/>Snímky',
'AlarmFrame' => 'Alarm snímek',
'AlarmFrameCount' => 'Poèet alarm snímkù',
'AlarmLimits' => 'Limity alarmu',
'AlarmMaximumFPS' => 'Alarm Maximum FPS',
'AlarmPx' => 'Alarm Px',
'AlarmRGBUnset' => 'You must set an alarm RGB colour',
'Alert' => 'Pozor',
'All' => 'V¹echny',
'ApplyingStateChange' => 'Aplikuji zmìnu stavu',
'Apply' => 'Pou¾ít',
'ArchArchived' => 'Pouze archivované',
'Archive' => 'Archiv',
'Archived' => 'Archivován',
'ArchUnarchived' => 'Pouze nearchivované',
'Area' => 'Area',
'AreaUnits' => 'Area (px/%)',
'AttrAlarmFrames' => 'Alarm snímky',
'AttrArchiveStatus' => 'Archiv status',
'AttrAvgScore' => 'Prùm. skóre',
'AttrCause' => 'Pøíèina',
'AttrDate' => 'Datum',
'AttrDateTime' => 'Datum/Èas',
'AttrDiskBlocks' => 'Bloky disku',
'AttrDiskPercent' => 'Zaplnìní disku',
'AttrDuration' => 'Prùbìh',
'AttrFrames' => 'Snímky',
'AttrId' => 'Id',
'AttrMaxScore' => 'Max. skóre',
'AttrMonitorId' => 'Kamera Id',
'AttrMonitorName' => 'Jméno kamery',
'AttrName' => 'Jméno',
'AttrNotes' => 'Notes',
'AttrSystemLoad' => 'System Load',
'AttrTime' => 'Èas',
'AttrTotalScore' => 'Celkové skóre',
'AttrWeekday' => 'Den v týdnu',
'Auto' => 'Auto',
'AutoStopTimeout' => 'Èasový limit pro vypr¹ení',
'AvgBrScore' => 'Prùm.<br/>Skóre',
'Background' => 'Background',
'BackgroundFilter' => 'Run filter in background',
'BadAlarmFrameCount' => 'Alarm frame count must be an integer of one or more',
'BadAlarmMaxFPS' => 'Alarm Maximum FPS must be a positive integer or floating point value',
'BadChannel' => 'Channel must be set to an integer of zero or more',
'BadDevice' => 'Device must be set to a valid value',
'BadFormat' => 'Format must be set to an integer of zero or more',
'BadFPSReportInterval' => 'FPS report interval buffer count must be an integer of 100 or more',
'BadFrameSkip' => 'Frame skip count must be an integer of zero or more',
'BadHeight' => 'Height must be set to a valid value',
'BadHost' => 'Host must be set to a valid ip address or hostname, do not include http://',
'BadImageBufferCount' => 'Image buffer size must be an integer of 10 or more',
'BadLabelX' => 'Label X co-ordinate must be set to an integer of zero or more',
'BadLabelY' => 'Label Y co-ordinate must be set to an integer of zero or more',
'BadMaxFPS' => 'Maximum FPS must be a positive integer or floating point value',
'BadNameChars' => 'Jména moho obsahovat pouze alfanumerické znaky a podtr¾ítko èi pomlèku',
'BadPath' => 'Path must be set to a valid value',
'BadPort' => 'Port must be set to a valid number',
'BadPostEventCount' => 'Post event image count must be an integer of zero or more',
'BadPreEventCount' => 'Pre event image count must be at least zero, and less than image buffer size',
'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',
'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',
'BadWidth' => 'Width must be set to a valid value',
'Bandwidth' => 'Rychlost sítì',
'BlobPx' => 'Znaèka Px',
'BlobSizes' => 'Velikost znaèky',
'Blobs' => 'Znaèky',
'Brightness' => 'Svìtlost',
'Buffers' => 'Bufery',
'CanAutoFocus' => 'Umí automaticky zaostøit',
'CanAutoGain' => 'Umí automatický zisk',
'CanAutoIris' => 'Umí auto iris',
'CanAutoWhite' => 'Umí automaticky vyvá¾it bílou',
'CanAutoZoom' => 'Umí automaticky zoomovat',
'CancelForcedAlarm' => 'Zastavit spu¹tìný alarm',
'Cancel' => 'Zru¹it',
'CanFocusAbs' => 'Umí zaostøit absolutnì',
'CanFocusCon' => 'Umí prùbì¾nì zaostøit',
'CanFocusRel' => 'Umí relativnì zaostøit',
'CanFocus' => 'Umí zaostøit',
'CanGainAbs' => 'Umí absolutní zisk',
'CanGainCon' => 'Umí prùbì¾ný zisk',
'CanGainRel' => 'Umí relativní zisk',
'CanGain' => 'Umí zisk',
'CanIrisAbs' => 'Umí absolutní iris',
'CanIrisCon' => 'Umí prùbì¾ný iris',
'CanIrisRel' => 'Umí relativní iris',
'CanIris' => 'Umí iris',
'CanMoveAbs' => 'Umí absoultní pohyb',
'CanMoveCon' => 'Umí prùbì¾ný pohyb',
'CanMoveDiag' => 'Umí diagonální pohyb',
'CanMoveMap' => 'Umí mapovaný pohyb',
'CanMoveRel' => 'Umí relativní pohyb',
'CanMove' => 'Umí pohyb',
'CanPan' => 'Umí otáèení',
'CanReset' => 'Umí reset',
'CanSetPresets' => 'Umí navolit pøedvolby',
'CanSleep' => 'Mù¾e spát',
'CanTilt' => 'Umí náklon',
'CanWake' => 'Lze vzbudit',
'CanWhiteAbs' => 'Umí absolutní vyvá¾ení bílé',
'CanWhiteBal' => 'Umí vyvá¾ení bílé',
'CanWhiteCon' => 'Umí prùbì¾né vyvá¾ení bílé',
'CanWhiteRel' => 'Umí relativní vyvá¾ení bílé',
'CanWhite' => 'Umí vyvá¾ení bílé',
'CanZoomAbs' => 'Umí absolutní zoom',
'CanZoomCon' => 'Umí prùbì¾ný zoom',
'CanZoomRel' => 'Umí relativní zoom',
'CanZoom' => 'Umí zoom',
'CaptureHeight' => 'Vý¹ka zdrojového snímku',
'CapturePalette' => 'Paleta zdrojového snímku',
'CaptureWidth' => '©íøka zdrojového snímku',
'Cause' => 'Pøíèina',
'CheckMethod' => 'Metoda znaèkování alarmem',
'ChooseFilter' => 'Vybrat filtr',
'ChoosePreset' => 'Choose Preset',
'Close' => 'Zavøít',
'Colour' => 'Barva',
'Command' => 'Pøíkaz',
'Config' => 'Nastavení',
'ConfiguredFor' => 'Nastaveno pro',
'ConfirmDeleteEvents' => 'Are you sure you wish to delete the selected events?',
'ConfirmPassword' => 'Potvrdit heslo',
'ConjAnd' => 'a',
'ConjOr' => 'nebo',
'Console' => 'Konzola',
'ContactAdmin' => 'Pro detailní info kontaktujte Va¹eho administrátora.',
'Continue' => 'Pokraèovat',
'Contrast' => 'Kontrast',
'ControlAddress' => 'Adresa øízení',
'ControlCap' => 'Schopnosti øízení',
'ControlCaps' => 'Typy øízení',
'ControlDevice' => 'Zaøízení øízení',
'Controllable' => 'Øíditelná',
'ControlType' => 'Typ øízení',
'Control' => 'Øízení',
'Cycle' => 'Cyklus',
'CycleWatch' => 'Cyklické prohlí¾ení',
'Day' => 'Den',
'Debug' => 'Debug',
'DefaultRate' => 'Default Rate',
'DefaultScale' => 'Pøednastavená velikost',
'DefaultView' => 'Default View',
'DeleteAndNext' => 'Smazat &amp; Dal¹í',
'DeleteAndPrev' => 'Smazat &amp; Pøedchozí',
'DeleteSavedFilter' => 'Smazat filtr',
'Delete' => 'Smazat',
'Description' => 'Popis',
'DeviceChannel' => 'Kanál zaøízení',
'DeviceFormat' => 'Formát zaøízení',
'DeviceNumber' => 'Èíslo zarízení',
'DevicePath' => 'Cesta k zaøízení',
'Devices' => 'Devices',
'Dimensions' => 'Rozmìry',
'DisableAlarms' => 'Zakázat alarmy',
'Disk' => 'Disk',
'DonateAlready' => 'Ne, u¾ jsem podpoøil',
'DonateEnticement' => 'Ji¾ nìjakou dobu pou¾íváte software ZoneMinder k ochranì svého majetku a pøedpokládám, ¾e jej shledáváte u¾iteèným. Pøesto¾e je ZoneMinder, znovu pøipomínám, zdarma a volnì ¹íøený software, stojí jeho vývoj a podpora nìjaké peníze. Pokud byste chtìl/a podpoøit budoucí vývoj a nové mo¾nosti softwaru, prosím zva¾te darování finanèní pomoci. Darování je, samozøejmì, dobrovolné, ale zato velmi cenìné mù¾ete pøispìt jakou èástkou chcete.<br><br>Pokud máte zájem podpoøit ná¹ tým, prosím, vyberte ní¾e uvedenou mo¾nost, nebo nav¹tivte http://www.zoneminder.com/donate.html.<br><br>Dìkuji Vám ¾e jste si vybral/a software ZoneMinder a nezapomeòte nav¹tívit fórum na ZoneMinder.com pro podporu a návrhy jak udìlat ZoneMinder je¹tì lep¹ím ne¾ je dnes.',
'Donate' => 'Prosím podpoøte',
'DonateRemindDay' => 'Nyní ne, pøipomenout za 1 den',
'DonateRemindHour' => 'Nyní ne, pøipomenout za hodinu',
'DonateRemindMonth' => 'Nyní ne, pøipomenout za mìsíc',
'DonateRemindNever' => 'Ne, nechci podpoøit ZoneMinder, nepøipomínat',
'DonateRemindWeek' => 'Nyní ne, pøipomenout za týden',
'DonateYes' => 'Ano, chcit podpoøit ZoneMinder nyní',
'Download' => 'Stáhnout',
'Duration' => 'Prùbìh',
'Edit' => 'Editovat',
'Email' => 'Email',
'EnableAlarms' => 'Povolit alarmy',
'Enabled' => 'Povoleno',
'EnterNewFilterName' => 'Zadejte nové jméno filtru',
'ErrorBrackets' => 'Chyba, zkontrolujte prosím závorky',
'Error' => 'Chyba',
'ErrorValidValue' => 'Chyba, zkontrolujte ¾e podmínky mají správné hodnoty',
'Etc' => 'atd',
'EventFilter' => 'Filtr záznamù',
'EventId' => 'Id záznamu',
'EventName' => 'Jméno záznamu',
'EventPrefix' => 'Prefix záznamu',
'Events' => 'Záznamy',
'Event' => 'Záznam',
'Exclude' => 'Vyjmout',
'Execute' => 'Execute',
'ExportDetails' => 'Exportovat detaily záznamu',
'Export' => 'Exportovat',
'ExportFailed' => 'Chyba pøi exportu',
'ExportFormat' => 'Formát exportovaného souboru',
'ExportFormatTar' => 'Tar',
'ExportFormatZip' => 'Zip',
'ExportFrames' => 'Exportovat detaily snímku',
'ExportImageFiles' => 'Exportovat obrazové soubory',
'Exporting' => 'Exportuji',
'ExportMiscFiles' => 'Exportovat ostatní soubory (jestli existují)',
'ExportOptions' => 'Mo¾nosti exportu',
'ExportVideoFiles' => 'Exportovat video soubory (jestli existují)',
'Far' => 'Daleko',
'FastForward' => 'Fast Forward',
'Feed' => 'Nasytit',
'FileColours' => 'Barvy souboru',
'FilePath' => 'Cesta k souboru',
'File' => 'Soubor',
'FilterArchiveEvents' => 'Archivovat v¹echny nalezené',
'FilterDeleteEvents' => 'Smazat v¹echny nalezené',
'FilterEmailEvents' => 'Poslat email s detaily nalezených',
'FilterExecuteEvents' => 'Spustit pøíkaz na v¹ech nalezených',
'FilterMessageEvents' => 'Podat zprávu o v¹ech nalezených',
'FilterPx' => 'Filtr Px',
'Filters' => 'Filtry',
'FilterUnset' => 'You must specify a filter width and height',
'FilterUploadEvents' => 'Uploadovat nalezené',
'FilterVideoEvents' => 'Create video for all matches',
'First' => 'První',
'FlippedHori' => 'Pøeklopený vodorovnì',
'FlippedVert' => 'Pøeklopený svisle',
'Focus' => 'Zaostøení',
'ForceAlarm' => 'Spustit alarm',
'Format' => 'Formát',
'FPS' => 'fps',
'FPSReportInterval' => 'FPS Interval pro report',
'FrameId' => 'Snímek Id',
'FrameRate' => 'Rychlost snímkù',
'FrameSkip' => 'Vynechat snímek',
'Frame' => 'Snímek',
'Frames' => 'Snímky',
'FTP' => 'FTP',
'Func' => 'Funkce',
'Function' => 'Funkce',
'Gain' => 'Zisk',
'General' => 'General',
'GenerateVideo' => 'Generovat video',
'GeneratingVideo' => 'Generuji video',
'GoToZoneMinder' => 'Jít na ZoneMinder.com',
'Grey' => '©edá',
'Group' => 'Group',
'Groups' => 'Skupiny',
'HasFocusSpeed' => 'Má rychlost zaostøení',
'HasGainSpeed' => 'Má rychlost zisku',
'HasHomePreset' => 'Má Home volbu',
'HasIrisSpeed' => 'Má rychlost irisu',
'HasPanSpeed' => 'Má rychlost otáèení',
'HasPresets' => 'Má pøedvolby',
'HasTiltSpeed' => 'Má rychlost náklonu',
'HasTurboPan' => 'Má Turbo otáèení',
'HasTurboTilt' => 'Má Turbo náklon',
'HasWhiteSpeed' => 'Má rychlost vyvá¾ení bílé',
'HasZoomSpeed' => 'Má rychlost zoomu',
'HighBW' => 'Rychlá&nbsp;B/W',
'High' => 'Rychlá',
'Home' => 'Domù',
'Hour' => 'Hodina',
'Hue' => 'Odstín',
'Id' => 'Id',
'Idle' => 'Pøipraven',
'Ignore' => 'Ignorovat',
'ImageBufferSize' => 'Velikost buferu snímkù',
'Image' => 'Obraz',
'Images' => 'Images',
'Include' => 'Vlo¾it',
'In' => 'Dovnitø',
'Inverted' => 'Pøevrácenì',
'Iris' => 'Iris',
'KeyString' => 'Key String',
'Label' => 'Label',
'Language' => 'Jazyk',
'Last' => 'Poslední',
'LimitResultsPost' => 'výsledkù', // This is used at the end of the phrase 'Limit to first N results only'
'LimitResultsPre' => 'Zobrazit pouze prvních', // This is used at the beginning of the phrase 'Limit to first N results only'
'LinkedMonitors' => 'Linked Monitors',
'List' => 'Seznam',
'Load' => 'Load',
'Local' => 'Lokální',
'LoggedInAs' => 'Pøihlá¹en jako',
'LoggingIn' => 'Pøihla¹uji',
'Login' => 'Pøihlásit',
'Logout' => 'Odhlásit',
'LowBW' => 'Pomalá&nbsp;B/W',
'Low' => 'Pomalá',
'Main' => 'Hlavní',
'Man' => 'Man',
'Manual' => 'Manuál',
'Mark' => 'Oznaèit',
'MaxBandwidth' => 'Max bandwidth',
'MaxBrScore' => 'Max.<br/>skóre',
'MaxFocusRange' => 'Max rozsah zaostøení',
'MaxFocusSpeed' => 'Max rychlost zaostøení',
'MaxFocusStep' => 'Max krok zaostøení',
'MaxGainRange' => 'Max rozsah zisku',
'MaxGainSpeed' => 'Max rychlost zisku',
'MaxGainStep' => 'Max krok zisku',
'MaximumFPS' => 'Maximum FPS',
'MaxIrisRange' => 'Max rozsah iris',
'MaxIrisSpeed' => 'Max rychlost iris',
'MaxIrisStep' => 'Max krok iris',
'Max' => 'Max',
'MaxPanRange' => 'Max rozsah otáèení',
'MaxPanSpeed' => 'Max rychlost otáèení',
'MaxPanStep' => 'Max krok otáèení',
'MaxTiltRange' => 'Max rozsah náklonu',
'MaxTiltSpeed' => 'Max rychlost náklonu',
'MaxTiltStep' => 'Max krok náklonu',
'MaxWhiteRange' => 'Max rozsah vyvá¾ení bílé',
'MaxWhiteSpeed' => 'Max rychlost vyvá¾ení bílé',
'MaxWhiteStep' => 'Max krok vyvá¾ení bílé',
'MaxZoomRange' => 'Max rozsah zoomu',
'MaxZoomSpeed' => 'Max rychlost zoomu',
'MaxZoomStep' => 'Max krok zoomu',
'MediumBW' => 'Støední&nbsp;B/W',
'Medium' => 'Støední',
'MinAlarmAreaLtMax' => 'Minimum alarm area should be less than maximum',
'MinAlarmAreaUnset' => 'You must specify the minimum alarm pixel count',
'MinBlobAreaLtMax' => 'Minimum znaèkované oblasti by mìlo být men¹í ne¾ maximum',
'MinBlobAreaUnset' => 'You must specify the minimum blob pixel count',
'MinBlobLtMinFilter' => 'Minimum blob area should be less than or equal to minimum filter area',
'MinBlobsLtMax' => 'Minimum znaèek by mìlo být men¹í ne¾ maximum',
'MinBlobsUnset' => 'You must specify the minimum blob count',
'MinFilterAreaLtMax' => 'Minimum filter area should be less than maximum',
'MinFilterAreaUnset' => 'You must specify the minimum filter pixel count',
'MinFilterLtMinAlarm' => 'Minimum filter area should be less than or equal to minimum alarm area',
'MinFocusRange' => 'Min rozsah zaostøení',
'MinFocusSpeed' => 'Min rychlost zaostøení',
'MinFocusStep' => 'Min krok zaostøení',
'MinGainRange' => 'Min rozsah zisku',
'MinGainSpeed' => 'Min rychlost zisku',
'MinGainStep' => 'Min krok zisku',
'MinIrisRange' => 'Min rozsah iris',
'MinIrisSpeed' => 'Min rychlost iris',
'MinIrisStep' => 'Min krok iris',
'MinPanRange' => 'Min rozsah otáèení',
'MinPanSpeed' => 'Min rychlost otáèení',
'MinPanStep' => 'Min krok otáèení',
'MinPixelThresLtMax' => 'Minimální práh pixelu by mìl být men¹í ne¾ maximumální',
'MinPixelThresUnset' => 'You must specify a minimum pixel threshold',
'MinTiltRange' => 'Min rozsah náklonu',
'MinTiltSpeed' => 'Min rychlost náklonu',
'MinTiltStep' => 'Min krok náklonu',
'MinWhiteRange' => 'Min rozsah vyvá¾ení bílé',
'MinWhiteSpeed' => 'Min rychlost vyvá¾ení bílé',
'MinWhiteStep' => 'Min krok vyvá¾ení bílé',
'MinZoomRange' => 'Min rozsah zoomu',
'MinZoomSpeed' => 'Min rychlost zoomu',
'MinZoomStep' => 'Min krok zoomu',
'Misc' => 'Ostatní',
'MonitorIds' => 'Id&nbsp;kamer',
'Monitor' => 'Kamera',
'MonitorPresetIntro' => 'Select an appropriate preset from the list below.<br><br>Please note that this may overwrite any values you already have configured for this monitor.<br><br>',
'MonitorPreset' => 'Monitor Preset',
'Monitors' => 'Kamery',
'Montage' => 'Sestøih',
'Month' => 'Mìsíc',
'Move' => 'Pohyb',
'MustBeGe' => 'musí být vìt¹í nebo rovno ne¾',
'MustBeLe' => 'musí být men¹í nebo rovno ne¾',
'MustConfirmPassword' => 'Musíte potvrdit heslo',
'MustSupplyPassword' => 'Musíte zadat heslo',
'MustSupplyUsername' => 'Musíte zadat u¾ivatelské jméno',
'Name' => 'Jméno',
'Near' => 'Blízko',
'Network' => 'Sí»',
'NewGroup' => 'Nová skupina',
'NewLabel' => 'New Label',
'New' => 'Nový',
'NewPassword' => 'Nové heslo',
'NewState' => 'Nový stav',
'NewUser' => 'Nový u¾ivatel',
'Next' => 'Dal¹í',
'NoFramesRecorded' => 'Pro tento snímek nejsou ¾ádné záznamy',
'NoGroup' => 'No Group',
'No' => 'Ne',
'NoneAvailable' => '®ádná není dostupná',
'None' => 'Zakázat',
'Normal' => 'Normalní',
'NoSavedFilters' => '®ádné ulo¾ené filtry',
'NoStatisticsRecorded' => 'Pro tento záznam/snímek nejsou zaznamenány ¾ádné statistiky',
'Notes' => 'Poznámky',
'NumPresets' => 'Poèet pøedvoleb',
'Off' => 'Off',
'On' => 'On',
'Open' => 'Otevøít',
'OpEq' => 'rovno',
'OpGtEq' => 'vìt¹í nebo rovno',
'OpGt' => 'vìt¹í',
'OpIn' => 'nin set',
'OpLtEq' => 'men¹í nebo rovno',
'OpLt' => 'men¹í',
'OpMatches' => 'obsahuje',
'OpNe' => 'nerovná se',
'OpNotIn' => 'nnot in set',
'OpNotMatches' => 'neobsahuje',
'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.',
'Options' => 'Mo¾nosti',
'Order' => 'Poøadí',
'OrEnterNewName' => 'nebo vlo¾te nové jméno',
'Orientation' => 'Orientace',
'Out' => 'Ven',
'OverwriteExisting' => 'Pøepsat existující',
'Paged' => 'Strákovì',
'PanLeft' => 'Posunout vlevo',
'Pan' => 'Otáèení',
'PanRight' => 'Posunout vpravo',
'PanTilt' => 'Otáèení/Náklon',
'Parameter' => 'Parametr',
'Password' => 'Heslo',
'PasswordsDifferent' => 'Hesla se neshodují',
'Paths' => 'Cesty',
'Pause' => 'Pause',
'PhoneBW' => 'Modem&nbsp;B/W',
'Phone' => 'Modem',
'PixelDiff' => 'Pixel Diff',
'Pixels' => 'pixely',
'PlayAll' => 'Pøehrát v¹e',
'Play' => 'Play',
'PleaseWait' => 'Prosím èekejte',
'Point' => 'Point',
'PostEventImageBuffer' => 'Pozáznamový bufer',
'PreEventImageBuffer' => 'Pøedzáznamový bufer',
'PreserveAspect' => 'Preserve Aspect Ratio',
'Preset' => 'Pøedvolba',
'Presets' => 'Pøedvolby',
'Prev' => 'Zpìt',
'Protocol' => 'Protocol',
'Rate' => 'Rychlost',
'Real' => 'Skuteèná',
'Record' => 'Nahrávat',
'RefImageBlendPct' => 'Reference Image Blend %ge',
'Refresh' => 'Obnovit',
'RemoteHostName' => 'Adresa',
'RemoteHostPath' => 'Cesta',
'RemoteHostPort' => 'Port',
'RemoteImageColours' => 'Barvy',
'Remote' => 'Sí»ová',
'Rename' => 'Pøejmenovat',
'ReplayAll' => 'All Events',
'ReplayGapless' => 'Gapless Events',
'Replay' => 'Pøehrát znovu',
'Replay' => 'Replay',
'ReplaySingle' => 'Single Event',
'ResetEventCounts' => 'Resetovat poèty záznamù',
'Reset' => 'Reset',
'Restarting' => 'Restartuji',
'Restart' => 'Restartovat',
'RestrictedCameraIds' => 'Povolené id kamer',
'RestrictedMonitors' => 'Restricted Monitors',
'ReturnDelay' => 'Prodleva vracení',
'ReturnLocation' => 'Lokace vrácení',
'Rewind' => 'Rewind',
'RotateLeft' => 'Otoèit vlevo',
'RotateRight' => 'Otoèit vpravo',
'RunMode' => 'Re¾im',
'Running' => 'Bì¾í',
'RunState' => 'Stav',
'SaveAs' => 'Ulo¾it jako',
'SaveFilter' => 'Ulo¾it filtr',
'Save' => 'Ulo¾it',
'Scale' => 'Velikost',
'Score' => 'Skóre',
'Secs' => 'Délka(s)',
'Sectionlength' => 'Délka sekce',
'SelectMonitors' => 'Select Monitors',
'Select' => 'Vybrat',
'SelfIntersecting' => 'Polygon edges must not intersect',
'SetLearnPrefs' => 'Set Learn Prefs', // This can be ignored for now
'Set' => 'Nastavit',
'SetNewBandwidth' => 'Nastavit novou rychlost sítì',
'SetPreset' => 'Nastavit pøedvolbu',
'Settings' => 'Nastavení',
'ShowFilterWindow' => 'Zobrazit filtr',
'ShowTimeline' => 'Zobrazit èasovou linii ',
'SignalCheckColour' => 'Signal Check Colour',
'Size' => 'Velikost',
'Sleep' => 'Spát',
'SortAsc' => 'Vzestupnì',
'SortBy' => 'Øadit dle',
'SortDesc' => 'Sestupnì',
'SourceType' => 'Typ zdroje',
'Source' => 'Zdroj',
'SpeedHigh' => 'Vysoká rychlost',
'SpeedLow' => 'Nízká rychlost',
'SpeedMedium' => 'Støední rychlost',
'Speed' => 'Rychlost',
'SpeedTurbo' => 'Turbo rychlost',
'Start' => 'Start',
'State' => 'Stav',
'Stats' => 'Statistiky',
'Status' => 'Status',
'StepBack' => 'Step Back',
'StepForward' => 'Step Forward',
'Step' => 'Krok',
'StepLarge' => 'Velký krok',
'StepMedium' => 'Støední krok',
'StepNone' => '®ádný krok',
'StepSmall' => 'Malý krok',
'Stills' => 'Snímky',
'Stopped' => 'Zastaven',
'Stop' => 'Zastavit',
'StreamReplayBuffer' => 'Stream Replay Image Buffer',
'Stream' => 'Stream',
'Submit' => 'Potvrdit',
'System' => 'System',
'Tele' => 'Pøiblí¾it',
'Thumbnail' => 'Miniatura',
'Tilt' => 'Náklon',
'Time' => 'Èas',
'TimeDelta' => 'Delta èasu',
'Timeline' => 'Èasová linie',
'TimeStamp' => 'Èasové razítko',
'TimestampLabelFormat' => 'Formát èasového razítka',
'TimestampLabelX' => 'Èasové razítko X',
'TimestampLabelY' => 'Èasové razítko Y',
'Timestamp' => 'Razítko',
'Today' => 'Dnes',
'Tools' => 'Nástroje',
'TotalBrScore' => 'Celkové<br/>skóre',
'TrackDelay' => 'Prodleva dráhy',
'TrackMotion' => 'Pohyb po dráze',
'Triggers' => 'Trigery',
'TurboPanSpeed' => 'Rychlost Turbo otáèení',
'TurboTiltSpeed' => 'Rychlost Turbo náklonu',
'Type' => 'Typ',
'Unarchive' => 'Vyjmout z archivu',
'Units' => 'Jednotky',
'Unknown' => 'Neznámý',
'UpdateAvailable' => 'Je dostupný nový update ZoneMinder.',
'UpdateNotNecessary' => 'Update není potøeba.',
'Update' => 'Update',
'UseFilterExprsPost' => '&nbsp;výrazù', // This is used at the end of the phrase 'use N filter expressions'
'UseFilterExprsPre' => 'Pou¾ít&nbsp;', // This is used at the beginning of the phrase 'use N filter expressions'
'UseFilter' => 'Pou¾ít filtr',
'Username' => 'U¾ivatelské jméno',
'Users' => 'U¾ivatelé',
'User' => 'U¾ivatel',
'Value' => 'Hodnota',
'VersionIgnore' => 'Ignorovat tuto verzi',
'VersionRemindDay' => 'Pøipomenout za 1 den',
'VersionRemindHour' => 'Pøipomenout za hodinu',
'VersionRemindNever' => 'Nepøipomínat nové veze',
'VersionRemindWeek' => 'Pøipomenout za týden',
'Version' => 'Verze',
'VideoFormat' => 'Video formát',
'VideoGenFailed' => 'Chyba pøi generování videa!',
'VideoGenFiles' => 'Existující video soubory',
'VideoGenNoFiles' => '®ádné video soubory nenalezeny',
'VideoGenParms' => 'Parametry generování videa',
'VideoGenSucceeded' => 'Video vygenerováno úspì¹nì!',
'VideoSize' => 'Velikost videa',
'Video' => 'Video',
'ViewAll' => 'Zobrazit v¹echny',
'ViewEvent' => 'Zobrazit záznam',
'ViewPaged' => 'Zobrazit strákovì',
'View' => 'Zobrazit',
'Wake' => 'Vzbudit',
'WarmupFrames' => 'Zahøívací snímky',
'Watch' => 'Sledovat',
'WebColour' => 'Webová barva',
'Web' => 'Web',
'Week' => 'Týden',
'WhiteBalance' => 'Vyvá¾ení bílé',
'White' => 'Bílá',
'Wide' => 'Oddálit',
'X10ActivationString' => 'X10 aktivaèní øetìzec',
'X10InputAlarmString' => 'X10 input alarm øetìzec',
'X10OutputAlarmString' => 'X10 output alarm øetìzec',
'X10' => 'X10',
'X' => 'X',
'Yes' => 'Ano',
'YouNoPerms' => 'K tomuto zdroji nemáte oprávnìní.',
'Y' => 'Y',
'ZoneAlarmColour' => 'Barva alarmu (Red/Green/Blue)',
'ZoneArea' => 'Zone Area',
'ZoneFilterSize' => 'Filter Width/Height (pixels)',
'ZoneMinMaxAlarmArea' => 'Min/Max Alarmed Area',
'ZoneMinMaxBlobArea' => 'Min/Max Blob Area',
'ZoneMinMaxBlobs' => 'Min/Max Blobs',
'ZoneMinMaxFiltArea' => 'Min/Max Filtered Area',
'ZoneMinMaxPixelThres' => 'Min/Max Pixel Threshold (0-255)',
'ZoneOverloadFrames' => 'Overload Frame Ignore Count',
'Zones' => 'Zóny',
'Zone' => 'Zóna',
'ZoomIn' => 'Zvìt¹it',
'ZoomOut' => 'Zmen¹it',
'Zoom' => 'Zoom',
);
// Complex replacements with formatting and/or placements, must be passed through sprintf
$CLANG = array(
'CurrentLogin' => 'Právì je pøihlá¹en \'%1$s\'',
'EventCount' => '%1$s %2$s', // For example '37 Events' (from Vlang below)
'LastEvents' => 'Posledních %1$s %2$s', // For example 'Last 37 Events' (from Vlang below)
'LatestRelease' => 'Poslední verze je v%1$s, vy máte v%2$s.',
'MonitorCount' => '%1$s %2$s', // For example '4 Monitors' (from Vlang below)
'MonitorFunction' => 'Funkce %1$s kamery',
'RunningRecentVer' => 'Pou¾íváte poslední verzi ZoneMinder, v%s.',
);
// The next section allows you to describe a series of word ending and counts used to
// generate the correctly conjugated forms of words depending on a count that is associated
// with that word.
// This intended to allow phrases such a '0 potatoes', '1 potato', '2 potatoes' etc to
// conjugate correctly with the associated count.
// In some languages such as English this is fairly simple and can be expressed by assigning
// a count with a singular or plural form of a word and then finding the nearest (lower) value.
// So '0' of something generally ends in 's', 1 of something is singular and has no extra
// ending and 2 or more is a plural and ends in 's' also. So to find the ending for '187' of
// something you would find the nearest lower count (2) and use that ending.
//
// So examples of this would be
// $zmVlangPotato = array( 0=>'Potatoes', 1=>'Potato', 2=>'Potatoes' );
// $zmVlangSheep = array( 0=>'Sheep' );
//
// where you can have as few or as many entries in the array as necessary
// If your language is similar in form to this then use the same format and choose the
// appropriate zmVlang function below.
// If however you have a language with a different format of plural endings then another
// approach is required . For instance in Russian the word endings change continuously
// depending on the last digit (or digits) of the numerator. In this case then zmVlang
// arrays could be written so that the array index just represents an arbitrary 'type'
// and the zmVlang function does the calculation about which version is appropriate.
//
// So an example in Russian might be (using English words, and made up endings as I
// don't know any Russian!!)
// $zmVlangPotato = array( 1=>'Potati', 2=>'Potaton', 3=>'Potaten' );
//
// and the zmVlang function decides that the first form is used for counts ending in
// 0, 5-9 or 11-19 and the second form when ending in 1 etc.
//
// Variable arrays expressing plurality, see the zmVlang description above
$VLANG = array(
'Event' => array( 0=>'Záznamù', 1=>'Záznam', 2=>'Záznamy', 5=>'Záznamù' ),
'Monitor' => array( 0=>'Kamer', 1=>'Kamera', 2=>'Kamery', 5=>'Kamer' ),
);
// You will need to choose or write a function that can correlate the plurality string arrays
// with variable counts. This is used to conjugate the Vlang arrays above with a number passed
// in to generate the correct noun form.
//
// In languages such as English this is fairly simple
// Note this still has to be used with printf etc to get the right formating
function zmVlang( $langVarArray, $count )
{
krsort( $langVarArray );
foreach ( $langVarArray as $key=>$value )
{
if ( abs($count) >= $key )
{
return( $value );
}
}
die( 'Error, unable to correlate variable language string' );
}
// This is an version that could be used in the Russian example above
// The rules are that the first word form is used if the count ends in
// 0, 5-9 or 11-19. The second form is used then the count ends in 1
// (not including 11 as above) and the third form is used when the
// count ends in 2-4, again excluding any values ending in 12-14.
//
// function zmVlang( $langVarArray, $count )
// {
// $secondlastdigit = substr( $count, -2, 1 );
// $lastdigit = substr( $count, -1, 1 );
// // or
// // $secondlastdigit = ($count/10)%10;
// // $lastdigit = $count%10;
//
// // Get rid of the special cases first, the teens
// if ( $secondlastdigit == 1 && $lastdigit != 0 )
// {
// return( $langVarArray[1] );
// }
// switch ( $lastdigit )
// {
// case 0 :
// case 5 :
// case 6 :
// case 7 :
// case 8 :
// case 9 :
// {
// return( $langVarArray[1] );
// break;
// }
// case 1 :
// {
// return( $langVarArray[2] );
// break;
// }
// case 2 :
// case 3 :
// case 4 :
// {
// return( $langVarArray[3] );
// break;
// }
// }
// die( 'Error, unable to correlate variable language string' );
// }
// This is an example of how the function is used in the code which you can uncomment and
// use to test your custom function.
//$monitors = array();
//$monitors[] = 1; // Choose any number
//echo sprintf( $zmClangMonitorCount, count($monitors), zmVlang( $zmVlangMonitor, count($monitors) ) );
// In this section you can override the default prompt and help texts for the options area
// These overrides are in the form show below where the array key represents the option name minus the initial ZM_
// So for example, to override the help text for ZM_LANG_DEFAULT do
$OLANG = array(
// 'LANG_DEFAULT' => array(
// 'Prompt' => "This is a new prompt for this option",
// 'Help' => "This is some new help for this option which will be displayed in the popup window when the ? is clicked"
// ),
);
?>

802
web/lang/de_de.php Normal file
View File

@ -0,0 +1,802 @@
<?php
//
// ZoneMinder web German language file, $Date$, $Revision$
// Copyright (C) 2003, 2004, 2005, 2006 Philip Coombes
//
// This program 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 program 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
//
// ZoneMinder german Translation by Robert Schumann (rs at core82 dot de)
// Notes for Translators
// 0. Get some credit, put your name in the line above (optional)
// 1. When composing the language tokens in your language you should try and keep to roughly the
// same length text if possible. Abbreviate where necessary as spacing is quite close in a number of places.
// 2. There are four types of string replacement
// a) Simple replacements are words or short phrases that are static and used directly. This type of
// replacement can be used 'as is'.
// b) Complex replacements involve some dynamic element being included and so may require substitution
// or changing into a different order. The token listed in this file will be passed through sprintf as
// a formatting string. If the dynamic element is a number you will usually need to use a variable
// replacement also as described below.
// c) Variable replacements are used in conjunction with complex replacements and involve the generation
// of a singular or plural noun depending on the number passed into the zmVlang function. See the
// the zmVlang section below for a further description of this.
// d) Optional strings which can be used to replace the prompts and/or help text for the Options section
// of the web interface. These are not listed below as they are quite large and held in the database
// so that they can also be used by the zmconfig.pl script. However you can build up your own list
// quite easily from the Config table in the database if necessary.
// 3. The tokens listed below are not used to build up phrases or sentences from single words. Therefore
// you can safely assume that a single word token will only be used in that context.
// 4. In new language files, or if you are changing only a few words or phrases it makes sense from a
// maintenance point of view to include the original language file and override the old definitions rather
// than copy all the language tokens across. To do this change the line below to whatever your base language
// is and uncomment it.
// require_once( 'zm_lang_en_gb.php' );
// You may need to change the character set here, if your web server does not already
// do this by default, uncomment this if required.
//
// Example
// header( "Content-Type: text/html; charset=iso-8859-1" );
// You may need to change your locale here if your default one is incorrect for the
// language described in this file, or if you have multiple languages supported.
// If you do need to change your locale, be aware that the format of this function
// is subtlely different in versions of PHP before and after 4.3.0, see
// http://uk2.php.net/manual/en/function.setlocale.php for details.
// Also be aware that changing the whole locale may affect some floating point or decimal
// arithmetic in the database, if this is the case change only the individual locale areas
// that don't affect this rather than all at once. See the examples below.
// Finally, depending on your setup, PHP may not enjoy have multiple locales in a shared
// threaded environment, if you get funny errors it may be this.
//
// Examples
// setlocale( 'LC_ALL', 'en_GB' ); All locale settings pre-4.3.0
// setlocale( LC_ALL, 'en_GB' ); All locale settings 4.3.0 and after
// setlocale( LC_CTYPE, 'en_GB' ); Character class settings 4.3.0 and after
// setlocale( LC_TIME, 'en_GB' ); Date and time formatting 4.3.0 and after
// Simple String Replacements
$SLANG = array(
'24BitColour' => '24-Bit-Farbe',
'8BitGrey' => '8-Bit-Grau',
'Action' => 'Aktion',
'Actual' => 'Original',
'AddNewControl' => 'Neues Kontrollelement hinzuf&uuml;gen',
'AddNewMonitor' => 'Neuer Monitor',
'AddNewUser' => 'Neuer Benutzer',
'AddNewZone' => 'Neue Zone',
'Alarm' => 'Alarm',
'AlarmBrFrames' => 'Alarm-<br />Bilder',
'AlarmFrame' => 'Alarm-Bilder',
'AlarmFrameCount' => 'Alarm-Bildanzahl',
'AlarmLimits' => 'Alarm-Limits',
'AlarmMaximumFPS' => 'Alarm-Maximum-FPS',
'AlarmPx' => 'Alarm-Pixel',
'AlarmRGBUnset' => 'Sie m&uuml;ssen eine RGB-Alarmfarbe setzen',
'Alert' => 'Alarm',
'All' => 'Alle',
'ApplyingStateChange' => 'Aktiviere neuen Status',
'Apply' => 'OK',
'ArchArchived' => 'Nur Archivierte',
'Archive' => 'Archivieren',
'Archived' => 'Archivierte',
'ArchUnarchived' => 'Nur Nichtarchivierte',
'Area' => 'Bereich',
'AreaUnits' => 'Bereich (px/%)',
'AttrAlarmFrames' => 'Alarmbilder',
'AttrArchiveStatus' => 'Archivstatus',
'AttrAvgScore' => 'Mittlere Punktzahl',
'AttrCause' => 'Grund',
'AttrDate' => 'Datum',
'AttrDateTime' => 'Datum/Zeit',
'AttrDiskBlocks' => 'Disk-Bloecke',
'AttrDiskPercent' => 'Disk-Prozent',
'AttrDuration' => 'Dauer',
'AttrFrames' => 'Bilder',
'AttrId' => 'ID',
'AttrMaxScore' => 'Maximale Punktzahl',
'AttrMonitorId' => 'Monitor-ID',
'AttrMonitorName' => 'Monitorname',
'AttrName' => 'Name',
'AttrNotes' => 'Bemerkungen',
'AttrSystemLoad' => 'Systemlast',
'AttrTime' => 'Zeit',
'AttrTotalScore' => 'Totale Punktzahl',
'AttrWeekday' => 'Wochentag',
'Auto' => 'Auto',
'AutoStopTimeout' => 'Auto-Stopp-Zeit&uuml;berschreitung',
'AvgBrScore' => 'Mittlere<br/>Punktzahl',
'Background' => 'Hintergrund',
'BackgroundFilter' => 'Filter im Hintergrund laufen lassen',
'BadAlarmFrameCount' => 'Die Bildanzahl muss ganzzahlig 1 oder gr&ouml;&szlig;er sein',
'BadAlarmMaxFPS' => 'Alarm-Maximum-FPS muss eine positive Ganzzahl oder eine Gleitkommazahl sein',
'BadChannel' => 'Der Kanal muss ganzzahlig 0 oder gr&ouml;&szlig;er sein',
'BadDevice' => 'Das Ger&auml;t muss eine g&uuml;ltige Systemresource sein',
'BadFormat' => 'Das Format muss ganzzahlig 0 oder gr&ouml;&szlig;er sein',
'BadFPSReportInterval' => 'Der FPS-Intervall-Puffer-Z&auml;hler muss ganzzahlig 100 oder gr&ouml;&szlig;er sein',
'BadFrameSkip' => 'Der Auslassz&auml;hler f&uuml;r Frames muss ganzzahlig 0 oder gr&ouml;&szlig;er sein',
'BadHeight' => 'Die H&ouml;he muss auf einen g&uuml;ltigen Wert eingestellt sein',
'BadHost' => 'Der Host muss auf eine g&uuml;ltige IP-Adresse oder einen Hostnamen (ohne http://) eingestellt sein',
'BadImageBufferCount' => 'Die Gr&ouml;&szlig;e des Bildpuffers muss ganzzahlig 10 oder gr&ouml;&szlig;er sein',
'BadLabelX' => 'Die x-Koordinate der Bezeichnung muss ganzzahlig 0 oder gr&ouml;&szlig;er sein',
'BadLabelY' => 'Die y-Koordinate der Bezeichnung muss ganzzahlig 0 oder gr&ouml;&szlig;er sein',
'BadMaxFPS' => 'Maximum-FPS muss eine positive Ganzzahl oder eine Gleitkommazahl sein',
'BadNameChars' => 'Namen d&uuml;rfen nur aus Buchstaben, Zahlen und Trenn- oder Unterstrichen bestehen',
'BadPath' => 'Der Pfad muss auf einen g&uuml;ltigen Wert eingestellt sein',
'BadPort' => 'Der Port muss auf eine g&uuml;ltige Zahl eingestellt sein',
'BadPostEventCount' => 'Der Z&auml;hler f&uuml;r die Ereignisfolgebilder muss ganzzahlig 0 oder gr&ouml;&szlig;er sein',
'BadPreEventCount' => 'Der Z&auml;hler f&uuml;r die Ereignisvorlaufbilder muss mindestens ganzzahlig 0 und kleiner als die Bildpuffergr&ouml;&szlig;e sein',
'BadRefBlendPerc' => 'Der Referenz-Blenden-Prozentwert muss ganzzahlig 0 oder gr&ouml;&szlig;er sein',
'BadSectionLength' => 'Die Bereichsl&auml;nge muss ganzzahlig 0 oder gr&ouml;&szlig;er sein',
'BadSignalCheckColour' => 'Die Signalpr&uuml;ffarbe muss auf einen g&uuml;ltigen Farbwert eingestellt sein',
'BadStreamReplayBuffer'=> 'Der Wiedergabestrompuffer tream replay buffer must be an integer of zero or more',
'BadWarmupCount' => 'Die Anzahl der Vorwärmbilder muss ganzzahlig 0 oder gr&ouml;&szlig;er sein',
'BadWebColour' => 'Die Webfarbe muss auf einen g&uuml;ltigen Farbwert eingestellt sein',
'BadWidth' => 'Die Breite muss auf einen g&uuml;ltigen Wert eingestellt sein',
'Bandwidth' => 'Bandbreite',
'BlobPx' => 'Blob-Pixel',
'Blobs' => 'Blobs',
'BlobSizes' => 'Blobgr&ouml;&szlig;e',
'Brightness' => 'Helligkeit',
'Buffers' => 'Puffer',
'CanAutoFocus' => 'Kann Autofokus',
'CanAutoGain' => 'Kann Auto-Verst&auml;rkung',
'CanAutoIris' => 'Kann Auto-Iris',
'CanAutoWhite' => 'Kann Auto-Wei&szlig;-Abgleich',
'CanAutoZoom' => 'Kann Auto-Zoom',
'Cancel' => 'Abbruch',
'CancelForcedAlarm' => 'Abbruch des unbedingten Alarms',
'CanFocusAbs' => 'Kann absoluten Fokus',
'CanFocusCon' => 'Kann kontinuierlichen Fokus',
'CanFocus' => 'Kann&nbsp;Fokus',
'CanFocusRel' => 'Kann relativen Fokus',
'CanGainAbs' => 'Kann absolute Verst&auml;rkung',
'CanGainCon' => 'Kann kontinuierliche Verst&auml;rkung',
'CanGain' => 'Kann Verst&auml;rkung',
'CanGainRel' => 'Kann relative Verst&auml;kung',
'CanIrisAbs' => 'Kann absolute Iris',
'CanIrisCon' => 'Kann kontinuierliche Iris',
'CanIris' => 'Kann&nbsp;Iris',
'CanIrisRel' => 'Kann relative Iris',
'CanMoveAbs' => 'Kann absolute Bewegung',
'CanMoveCon' => 'Kann kontinuierliche Bewegung',
'CanMoveDiag' => 'Kann diagonale Bewegung',
'CanMove' => 'Kann&nbsp;Bewegung',
'CanMoveMap' => 'Kann Mapped-Bewegung',
'CanMoveRel' => 'Kann relative Bewegung',
'CanPan' => 'Kann&nbsp;Pan' ,
'CanReset' => 'Kann&nbsp;Reset',
'CanSetPresets' => 'Kann Voreinstellungen setzen',
'CanSleep' => 'Kann&nbsp;Sleep',
'CanTilt' => 'Kann&nbsp;Neigung',
'CanWake' => 'Kann&nbsp;Wake',
'CanWhiteAbs' => 'Kann absoluten Wei&szlig;-Abgleich',
'CanWhiteBal' => 'Kann Wei&szlig;-Abgleich',
'CanWhiteCon' => 'Kann kontinuierlichen Wei&szlig;-Abgleich',
'CanWhite' => 'Kann Wei&szlig;-Abgleich',
'CanWhiteRel' => 'Kann relativen Wei&szlig;-Abgleich',
'CanZoomAbs' => 'Kann absoluten Zoom',
'CanZoomCon' => 'Kann kontinuierlichen Zoom',
'CanZoom' => 'Kann&nbsp;Zoom',
'CanZoomRel' => 'Kann relativen Zoom',
'CaptureHeight' => 'Erfasse H&ouml;he',
'CapturePalette' => 'Erfasse Farbpalette',
'CaptureWidth' => 'Erfasse Breite',
'Cause' => 'Grund',
'CheckMethod' => 'Alarm-Pr&uuml;fmethode',
'ChooseFilter' => 'Filterauswahl',
'ChoosePreset' => 'Voreinstellung ausw&auml;hlen',
'Close' => 'Schlie&szlig;en',
'Colour' => 'Farbe',
'Command' => 'Kommando',
'Config' => 'Konfig.',
'ConfiguredFor' => 'Konfiguriert f&uuml;r',
'ConfirmDeleteEvents' => 'Sind Sie sicher, dass Sie die ausgew&auml;hlten Ereignisse l&ouml;schen wollen?',
'ConfirmPassword' => 'Passwortbest&auml;tigung',
'ConjAnd' => 'und',
'ConjOr' => 'oder',
'Console' => 'Konsole',
'ContactAdmin' => 'Bitte kontaktieren Sie den Administrator f&uuml;r weitere Details',
'Continue' => 'Weiter',
'Contrast' => 'Kontrast',
'ControlAddress' => 'Kontrolladresse',
'ControlCap' => 'Kontrollm&ouml;glichkeit',
'ControlCaps' => 'Kontrollm&ouml;glichkeiten',
'ControlDevice' => 'Kontrollger&auml;t',
'Control' => 'Kontrolle',
'Controllable' => 'Kontrollierbar',
'ControlType' => 'Kontrolltyp',
'CycleWatch' => 'Zeitzyklus',
'Cycle' => 'Zyklus',
'Day' => 'Tag',
'Debug' => 'Debug',
'DefaultRate' => 'Standardrate',
'DefaultScale' => 'Standardskalierung',
'DefaultView' => 'Standardansicht',
'DeleteAndNext' => 'L&ouml;schen &amp; N&auml;chstes',
'DeleteAndPrev' => 'L&ouml;schen &amp; Vorheriges',
'Delete' => 'L&ouml;schen',
'DeleteSavedFilter' => 'L&ouml;sche gespeichertes Filter',
'Description' => 'Beschreibung',
'DeviceChannel' => 'Ger&auml;tekanal',
'DeviceFormat' => 'Ger&auml;teformat',
'DeviceNumber' => 'Ger&auml;tenummer',
'DevicePath' => 'Ger&auml;tepfad',
'Devices' => 'Ger&auml;te',
'Dimensions' => 'Abmessungen',
'DisableAlarms' => 'Alarme abschalten',
'Disk' => 'Disk',
'DonateAlready' => 'Nein, ich habe schon gespendet',
'DonateEnticement' => 'Sie benutzen ZoneMinder nun schon eine Weile und es ist hoffentlich eine n&uuml;tzliche Applikation zur Verbesserung Ihrer Heim- oder Arbeitssicherheit. Obwohl ZoneMinder eine freie Open-Source-Software ist und bleiben wird, entstehen Kosten bei der Entwicklung und dem Support.<br><br>Falls Sie ZoneMinder für Weiterentwicklung in der Zukunft unterst&uuml;tzen m&ouml;chten, denken Sie bitte über eine Spende f&uuml;r das Projekt unter der Webadresse http://www.zoneminder.com/donate.html oder &uuml;ber nachfolgend stehende Option nach. Spenden sind, wie der Name schon sagt, immer freiwillig. Dem Projekt helfen kleine genauso wie gr&ouml;&szlig;ere Spenden sehr weiter und ein herzlicher Dank ist jedem Spender sicher.<br><br>Vielen Dank daf&uuml;r, dass sie ZoneMinder benutzen. Vergessen Sie nicht die Foren unter ZoneMinder.com, um Support zu erhalten und Ihre Erfahrung mit ZoneMinder zu verbessern!',
'Donate' => 'Bitte spenden Sie.',
'DonateRemindDay' => 'Noch nicht, erinnere mich in einem Tag noch mal.',
'DonateRemindHour' => 'Noch nicht, erinnere mich in einer Stunde noch mal.',
'DonateRemindMonth' => 'Noch nicht, erinnere mich in einem Monat noch mal.',
'DonateRemindNever' => 'Nein, ich m&ouml;chte nicht spenden, niemals erinnern.',
'DonateRemindWeek' => 'Noch nicht, erinnere mich in einer Woche noch mal.',
'DonateYes' => 'Ja, ich m&ouml;chte jetzt spenden.',
'Download' => 'Download',
'Duration' => 'Dauer',
'Edit' => 'Bearbeiten',
'Email' => 'E-Mail',
'EnableAlarms' => 'Alarme aktivieren',
'Enabled' => 'Aktiviert',
'EnterNewFilterName' => 'Neuen Filternamen eingeben',
'ErrorBrackets' => 'Fehler. Bitte nur gleiche Anzahl offener und geschlossener Klammern.',
'Error' => 'Fehler',
'ErrorValidValue' => 'Fehler. Bitte alle Werte auf richtige Eingabe pr&uuml;fen',
'Etc' => 'etc.',
'Event' => 'Ereignis',
'EventFilter' => 'Ereignisfilter',
'EventId' => 'Ereignis-ID',
'EventName' => 'Ereignisname',
'EventPrefix' => 'Ereignis-Pr&auml;fix',
'Events' => 'Ereignisse',
'Exclude' => 'Ausschluss;',
'Execute' => 'Ausf&uuml;hren',
'ExportDetails' => 'Exportiere Ereignis-Details',
'Export' => 'Exportieren',
'ExportFailed' => 'Exportieren fehlgeschlagen',
'ExportFormat' => 'Exportiere Dateiformat',
'ExportFormatTar' => 'TAR (Bandarchiv)',
'ExportFormatZip' => 'ZIP (Komprimiert)',
'ExportFrames' => 'Exportiere Bilddetails',
'ExportImageFiles' => 'Exportiere Bilddateien',
'Exporting' => 'Exportiere',
'ExportMiscFiles' => 'Exportiere andere Dateien (falls vorhanden)',
'ExportOptions' => 'Exportierungsoptionen',
'ExportVideoFiles' => 'Exportiere Videodateien (falls vorhanden)',
'Far' => 'Weit',
'FastForward' => 'Schnell vorw&auml;rts',
'Feed' => 'Eingabe',
'FileColours' => 'Dateifarben',
'File' => 'Datei',
'FilePath' => 'Dateipfad',
'FilterArchiveEvents' => 'Archivierung aller Treffer',
'FilterDeleteEvents' => 'L&ouml;schen aller Treffer',
'FilterEmailEvents' => 'Detaillierte E-Mail zu allen Treffern',
'FilterExecuteEvents' => 'Ausf&uuml;hren bei allen Treffern',
'FilterMessageEvents' => 'Detaillierte Nachricht zu allen Treffern',
'FilterPx' => 'Filter-Pixel',
'Filters' => 'Filter',
'FilterUnset' => 'Sie m&uuml;ssen eine Breite und H&ouml;he f&uuml;r das Filter angeben',
'FilterUploadEvents' => 'Hochladen aller Treffer',
'FilterVideoEvents' => 'Video f&uuml;r alle Treffer erstellen',
'First' => 'Erstes',
'FlippedHori' => 'Horizontal gespiegelt',
'FlippedVert' => 'Vertikal gespiegelt',
'Focus' => 'Fokus',
'ForceAlarm' => 'Unbedingter Alarm',
'Format' => 'Format',
'FPS' => 'fps',
'FPSReportInterval' => 'fps-Meldeintervall',
'Frame' => 'Bild',
'FrameId' => 'Bild-ID',
'FrameRate' => 'Abspielgeschwindigkeit',
'Frames' => 'Bilder',
'FrameSkip' => 'Bilder auslassen',
'FTP' => 'FTP',
'Func' => 'Fkt.',
'Function' => 'Funktion',
'Gain' => 'Verst&auml;rkung',
'General' => 'Allgemeines',
'GenerateVideo' => 'Erzeuge Video',
'GeneratingVideo' => 'Erzeuge Video...',
'GoToZoneMinder' => 'Gehe zu ZoneMinder.com',
'Grey' => 'Grau',
'Group' => 'Gruppe',
'Groups' => 'Gruppen',
'HasFocusSpeed' => 'Hat Fokus-Geschwindigkeit',
'HasGainSpeed' => 'Hat Verst&auml;kungs-Geschwindigkeit',
'HasHomePreset' => 'Hat Standardvoreinstellungen',
'HasIrisSpeed' => 'Hat Irisgeschwindigkeit',
'HasPanSpeed' => 'Hat Pan-Geschwindigkeit',
'HasPresets' => 'Hat Voreinstellungen',
'HasTiltSpeed' => 'Hat Neigungsgeschwindigkeit',
'HasTurboPan' => 'Hat Turbo-Pan',
'HasTurboTilt' => 'Hat Turbo-Neigung',
'HasWhiteSpeed' => 'Hat Wei&szlig;-Abgleichgeschwindigkeit',
'HasZoomSpeed' => 'Hat Zoom-Geschwindigkeit',
'HighBW' => 'Hohe&nbsp;B/W',
'High' => 'hohe',
'Home' => 'Home',
'Hour' => 'Stunde',
'Hue' => 'Farbton',
'Id' => 'ID',
'Idle' => 'Leerlauf',
'Ignore' => 'Ignoriere',
'Image' => 'Bild',
'ImageBufferSize' => 'Bildpuffergr&ouml;&szlig;e',
'Images' => 'Bilder',
'Include' => 'Einschluss',
'In' => 'In',
'Inverted' => 'Invertiert',
'Iris' => 'Iris',
'KeyString' => 'Schl&uuml;sselwort',
'Label' => 'Bezeichnung',
'Language' => 'Sprache',
'Last' => 'Letztes',
'LimitResultsPost' => 'Ergebnisse;', // This is used at the end of the phrase 'Limit to first N results only'
'LimitResultsPre' => 'Begrenze nur auf die ersten', // This is used at the beginning of the phrase 'Limit to first N results only'
'LinkedMonitors' => 'Verbundene Monitore',
'List' => 'Liste',
'Load' => 'Last',
'Local' => 'Lokal',
'LoggedInAs' => 'Angemeldet als',
'LoggingIn' => 'Anmelden',
'Login' => 'Anmeldung',
'Logout' => 'Abmelden',
'LowBW' => 'Niedrige&nbsp;B/W',
'Low' => 'niedrige',
'Main' => 'Haupt',
'Man' => 'Man',
'Manual' => 'Manual',
'Mark' => 'Markieren',
'MaxBandwidth' => 'Maximale Bandbreite',
'MaxBrScore' => 'Maximale<br />Punktzahl',
'MaxFocusRange' => 'Maximaler Fokusbereich',
'MaxFocusSpeed' => 'Maximale Fokusgeschwindigkeit',
'MaxFocusStep' => 'Maximale Fokusstufe',
'MaxGainRange' => 'Maximaler Verst&auml;rkungsbereich',
'MaxGainSpeed' => 'Maximale Verst&auml;rkungsgeschwindigkeit',
'MaxGainStep' => 'Maximale Verst&auml;rkungsstufe',
'MaximumFPS' => 'Maximale FPS',
'MaxIrisRange' => 'Maximaler Irisbereich',
'MaxIrisSpeed' => 'Maximale Irisgeschwindigkeit',
'MaxIrisStep' => 'Maximale Irisstufe',
'Max' => 'Max',
'MaxPanRange' => 'Maximaler Pan-Bereich',
'MaxPanSpeed' => 'Maximale Pan-Geschw.',
'MaxPanStep' => 'Maximale Pan-Stufe',
'MaxTiltRange' => 'Maximaler Neig.-Bereich',
'MaxTiltSpeed' => 'Maximale Neig.-Geschw.',
'MaxTiltStep' => 'Maximale Neig.-Stufe',
'MaxWhiteRange' => 'Maximaler Wei&szlig;-Abgl.bereich',
'MaxWhiteSpeed' => 'Maximale Wei&szlig;-Abgl.geschw.',
'MaxWhiteStep' => 'Maximale Wei&szlig;-Abgl.stufe',
'MaxZoomRange' => 'Maximaler Zoom-Bereich',
'MaxZoomSpeed' => 'Maximale Zoom-Geschw.',
'MaxZoomStep' => 'Maximale Zoom-Stufe',
'MediumBW' => 'Mittlere&nbsp;B/W',
'Medium' => 'mittlere',
'MinAlarmAreaLtMax' => 'Der minimale Alarmbereich sollte kleiner sein als der maximale',
'MinAlarmAreaUnset' => 'Sie m&uuml;ssen einen Minimumwert an Alarmfl&auml;chenpixeln angeben',
'MinBlobAreaLtMax' => 'Die minimale Blob-Fl&auml;che muss kleiner sein als die maximale',
'MinBlobAreaUnset' => 'Sie m&uuml;ssen einen Minimumwert an Blobfl&auml;chenpixeln angeben',
'MinBlobLtMinFilter' => 'Die minimale Blob-Fl&auml;che sollte kleiner oder gleich der minimalen Filterfl&auml;che sein',
'MinBlobsLtMax' => 'Die minimalen Blobs m&uuml;ssen kleiner sein als die maximalen',
'MinBlobsUnset' => 'Sie m&uuml;ssen einen Minimumwert an Blobs angeben',
'MinFilterAreaLtMax' => 'Die minimale Filterfl&auml;che sollte kleiner sein als die maximale',
'MinFilterAreaUnset' => 'Sie m&uuml;ssen einen Minimumwert an Filterpixeln angeben',
'MinFilterLtMinAlarm' => 'Die minimale Filterfl&auml;che sollte kleiner oder gleich der minimalen Alarmfl&auml;che sein',
'MinFocusRange' => 'Min. Fokusbereich',
'MinFocusSpeed' => 'Min. Fokusgeschw.',
'MinFocusStep' => 'Min. Fokusstufe',
'MinGainRange' => 'Min. Verst&auml;rkungsbereich',
'MinGainSpeed' => 'Min. Verst&auml;rkungsgeschwindigkeit',
'MinGainStep' => 'Min. Verst&auml;rkungsstufe',
'MinIrisRange' => 'Min. Irisbereich',
'MinIrisSpeed' => 'Min. Irisgeschwindigkeit',
'MinIrisStep' => 'Min. Irisstufe',
'MinPanRange' => 'Min. Pan-Bereich',
'MinPanSpeed' => 'Min. Pan-Geschwindigkeit',
'MinPanStep' => 'Min. Pan-Stufe',
'MinPixelThresLtMax' => 'Der minimale Pixelschwellwert muss kleiner sein als der maximale',
'MinPixelThresUnset' => 'Sie m&uuml;ssen einen minimalen Pixel-Schwellenwert angeben',
'MinTiltRange' => 'Min. Neigungsbereich',
'MinTiltSpeed' => 'Min. Neigungsgeschwindigkeit',
'MinTiltStep' => 'Min. Neigungsstufe',
'MinWhiteRange' => 'Min. Wei&szlig;-Abgleichbereich',
'MinWhiteSpeed' => 'Min. Wei&szlig;-Abgleichgeschwindigkeit',
'MinWhiteStep' => 'Min. Wei&szlig;-Abgleichstufe',
'MinZoomRange' => 'Min. Zoom-Bereich',
'MinZoomSpeed' => 'Min. Zoom-Geschwindigkeit',
'MinZoomStep' => 'Min. Zoom-Stufe',
'Misc' => 'Verschiedenes',
'MonitorIds' => 'Monitor-ID',
'Monitor' => 'Monitor',
'MonitorPresetIntro' => 'W&auml;hlen Sie eine geeignete Voreinstellung aus der folgenden Liste.<br><br>Bitte beachten Sie, dass dies m&ouml;gliche Einstellungen von Ihnen am Monitor &uuml;berschreiben kann.<br><br>',
'MonitorPreset' => 'Monitor-Voreinstellung',
'Monitors' => 'Monitore',
'Montage' => 'Montage',
'Month' => 'Monat',
'Move' => 'Bewegung',
'MustBeGe' => 'muss groesser oder gleich sein wie',
'MustBeLe' => 'muss kleiner oder gleich sein wie',
'MustConfirmPassword' => 'Sie m&uuml;ssen das Passwort best&auml;tigen.',
'MustSupplyPassword' => 'Sie m&uuml;ssen ein Passwort vergeben.',
'MustSupplyUsername' => 'Sie m&uuml;ssen einen Usernamen vergeben.',
'Name' => 'Name',
'Near' => 'Nah',
'Network' => 'Netzwerk',
'NewGroup' => 'Neue Gruppe',
'NewLabel' => 'Neuer Bezeichner',
'New' => 'Neu',
'NewPassword' => 'Neues Passwort',
'NewState' => 'Neuer Status',
'NewUser' => 'Neuer Benutzer',
'Next' => 'N&auml;chstes',
'NoFramesRecorded' => 'Es gibt keine Aufnahmen von diesem Ereignis.',
'NoGroup' => 'Keine Gruppe',
'NoneAvailable' => 'Nichts verf&uuml;gbar',
'No' => 'Nein',
'None' => 'ohne',
'Normal' => 'Normal',
'NoSavedFilters' => 'Keine gespeicherten Filter',
'NoStatisticsRecorded' => 'Keine Statistik f&uuml;r dieses Ereignis/diese Bilder',
'Notes' => 'Bemerkungen',
'NumPresets' => 'Nummerierte Voreinstellungen',
'Off' => 'Aus',
'On' => 'An',
'Open' => '&Ouml;ffnen',
'OpEq' => 'gleich zu',
'OpGtEq' => 'groesser oder gleich wie',
'OpGt' => 'groesser als',
'OpIn' => 'in Satz',
'OpLtEq' => 'kleiner oder gleich wie',
'OpLt' => 'kleiner als',
'OpMatches' => 'zutreffend',
'OpNe' => 'nicht gleich',
'OpNotIn' => 'nicht im Satz',
'OpNotMatches' => 'nicht zutreffend',
'OptionHelp' => 'Hilfe',
'OptionRestartWarning' => 'Ver&auml;nderungen werden erst nach einem Neustart des Programms aktiv.\nF&uuml;r eine sofortige &Auml;nderung starten Sie das Programm bitte neu.',
'Options' => 'Optionen',
'Order' => 'Reihenfolge',
'OrEnterNewName' => 'oder neuen Namen eingeben',
'Orientation' => 'Ausrichtung',
'Out' => 'Aus',
'OverwriteExisting' => '&Uuml;berschreibe bestehende',
'Paged' => 'Seitennummeriert',
'PanLeft' => 'Pan-Left',
'Pan' => 'Pan',
'PanRight' => 'Pan-Right',
'PanTilt' => 'Pan/Neigung',
'Parameter' => 'Parameter',
'Password' => 'Passwort',
'PasswordsDifferent' => 'Die Passw&ouml;rter sind unterschiedlich',
'Paths' => 'Pfade',
'Pause' => 'Pause',
'PhoneBW' => 'Tel.&nbsp;B/W',
'Phone' => 'Telefon',
'PixelDiff' => 'Pixel-Differenz',
'Pixels' => 'Pixel',
'PlayAll' => 'Alle zeigen',
'Play' => 'Abspielen',
'PleaseWait' => 'Bitte warten',
'Point' => 'Punkt',
'PostEventImageBuffer' => 'Nachereignispuffer',
'PreEventImageBuffer' => 'Vorereignispuffer',
'PreserveAspect' => 'Seitenverh&auml;ltnis beibehalten',
'Presets' => 'Voreinstellungen',
'Preset' => 'Voreinstellung',
'Prev' => 'Vorheriges',
'Protocol' => 'Protokoll',
'Rate' => 'Abspielgeschwindigkeit',
'Real' => 'Real',
'Record' => 'Aufnahme',
'RefImageBlendPct' => 'Referenz-Bildblende',
'Refresh' => 'Aktualisieren',
'Remote' => 'Entfernt',
'RemoteHostName' => 'Entfernter Hostname',
'RemoteHostPath' => 'Entfernter Hostpfad',
'RemoteHostPort' => 'Entfernter Hostport',
'RemoteImageColours' => 'Entfernte Bildfarbe',
'Rename' => 'Umbenennen',
'ReplayAll' => 'Alle Ereignisse',
'ReplayGapless' => 'L&uuml;ckenlose Ereignisse',
'Replay' => 'Wiederholung',
'ReplaySingle' => 'Einzelereignis',
'Replay' => 'Wiederholung',
'ResetEventCounts' => 'L&ouml;sche Ereignispunktzahl',
'Reset' => 'Zur&uuml;cksetzen',
'Restarting' => 'Neustarten',
'Restart' => 'Neustart',
'RestrictedCameraIds' => 'Verbotene Kamera-ID',
'RestrictedMonitors' => 'Eingeschr&auml;nkte Monitore',
'ReturnDelay' => 'R&uuml;ckkehr-Verz&ouml;gerung',
'ReturnLocation' => 'R&uuml;ckkehrpunkt',
'Rewind' => 'Zur&uuml;ckspulen',
'RotateLeft' => 'Drehung links',
'RotateRight' => 'Drehung rechts',
'RunMode' => 'Betriebsmodus',
'Running' => 'In Betrieb',
'RunState' => 'Laufender Status',
'SaveAs' => 'Speichere als',
'SaveFilter' => 'Speichere Filter',
'Save' => 'OK',
'Scale' => 'Skalierung',
'Score' => 'Punktzahl',
'Secs' => 'Sekunden',
'Sectionlength' => 'Sektionsl&auml;nge',
'SelectMonitors' => 'W&auml;hle Monitore',
'Select' => 'Auswahl',
'SelfIntersecting' => 'Die Polygonr&auml;nder d&uuml;rfen sich nicht &uuml;berschneiden.',
'SetLearnPrefs' => 'Setze Lernmerkmale', // This can be ignored for now
'SetNewBandwidth' => 'Setze neue Bandbreite',
'SetPreset' => 'Setze Voreinstellung',
'Set' => 'Setze',
'Settings' => 'Einstellungen',
'ShowFilterWindow' => 'Zeige Filterfenster',
'ShowTimeline' => 'Zeige Zeitlinie',
'SignalCheckColour' => 'Farbe des Signalchecks',
'Size' => 'Gr&ouml;&szlig;e',
'Sleep' => 'Schlaf',
'SortAsc' => 'aufsteigend',
'SortBy' => 'Sortieren nach',
'SortDesc' => 'absteigend',
'Source' => 'Quelle',
'SourceType' => 'Quellentyp',
'Speed' => 'Geschwindigkeit',
'SpeedHigh' => 'Hohe Geschwindigkeit',
'SpeedLow' => 'Niedrige Geschwindigkeit',
'SpeedMedium' => 'Mittlere Geschwindigkeit',
'SpeedTurbo' => 'Turbo-Geschwindigkeit',
'Start' => 'Start',
'State' => 'Status',
'Stats' => 'Status',
'Status' => 'Status',
'StepBack' => 'Einen Schritt r&uuml;ckw&auml;rts',
'StepForward' => 'Einen Schritt vorw&auml;rts',
'StepLarge' => 'Gro&szlig;e Stufe',
'StepMedium' => 'Mittlere Stufe',
'StepNone' => 'Keine Stufe',
'StepSmall' => 'Kleine Stufe',
'Step' => 'Stufe',
'Stills' => 'Bilder',
'Stopped' => 'Gestoppt',
'Stop' => 'Stop',
'StreamReplayBuffer' => 'Stream-Wiedergabe-Bildpuffer',
'Stream' => 'Stream',
'Submit' => 'Absenden',
'System' => 'System',
'Tele' => 'Tele',
'Thumbnail' => 'Miniatur',
'Tilt' => 'Neigung',
'TimeDelta' => 'Zeitdifferenz',
'Timeline' => 'Zeitlinie',
'TimestampLabelFormat' => 'Format des Zeitstempels',
'TimestampLabelX' => 'Zeitstempel-X',
'TimestampLabelY' => 'Zeitstempel-Y',
'Timestamp' => 'Zeitstempel',
'TimeStamp' => 'Zeitstempel',
'Time' => 'Zeit',
'Today' => 'Heute',
'Tools' => 'Werkzeuge',
'TotalBrScore' => 'Totale<br/>Punktzahl',
'TrackDelay' => 'Nachf&uuml;hrungsverz&ouml;gerung',
'TrackMotion' => 'Bewegungs-Nachf&uuml;hrung',
'Triggers' => 'Ausl&ouml;ser',
'TurboPanSpeed' => 'Turbo-Pan-Geschwindigkeit',
'TurboTiltSpeed' => 'Turbo-Neigungsgeschwindigkeit',
'Type' => 'Typ',
'Unarchive' => 'Aus Archiv entfernen',
'Units' => 'Einheiten',
'Unknown' => 'Unbekannt',
'UpdateAvailable' => 'Eine Aktualisierung f&uuml;r ZoneMinder ist verf&uuml;gbar.',
'UpdateNotNecessary' => 'Es ist keine Aktualisierung verf&uuml;gbar.',
'Update' => 'Aktualisieren',
'UseFilter' => 'Benutze Filter',
'UseFilterExprsPost' => '&nbsp;Filter&nbsp;Ausdr&uuml;cke', // This is used at the end of the phrase 'use N filter expressions'
'UseFilterExprsPre' => 'Benutze&nbsp;', // This is used at the beginning of the phrase 'use N filter expressions'
'User' => 'Benutzer',
'Username' => 'Benutzername',
'Users' => 'Benutzer',
'Value' => 'Wert',
'VersionIgnore' => 'Ignoriere diese Version',
'VersionRemindDay' => 'Erinnere mich wieder in 1 Tag.',
'VersionRemindHour' => 'Erinnere mich wieder in 1 Stunde.',
'VersionRemindNever' => 'Informiere mich nicht mehr &uuml;ber neue Versionen.',
'VersionRemindWeek' => 'Erinnere mich wieder in 1 Woche.',
'Version' => 'Version',
'VideoFormat' => 'Videoformat',
'VideoGenFailed' => 'Videoerzeugung fehlgeschlagen!',
'VideoGenFiles' => 'Existierende Videodateien',
'VideoGenNoFiles' => 'Keine Videodateien gefunden.',
'VideoGenParms' => 'Parameter der Videoerzeugung',
'VideoGenSucceeded' => 'Videoerzeugung erfolgreich!',
'VideoSize' => 'Videogr&ouml;&szlig;e',
'Video' => 'Video',
'ViewAll' => 'Alles ansehen',
'View' => 'Ansicht',
'ViewEvent' => 'Zeige Ereignis',
'ViewPaged' => 'Seitenansicht',
'Wake' => 'Aufwachen',
'WarmupFrames' => 'Aufw&auml;rmbilder',
'Watch' => 'Beobachte',
'WebColour' => 'Webfarbe',
'Web' => 'Web',
'Week' => 'Woche',
'WhiteBalance' => 'Wei&szlig;-Abgleich',
'White' => 'Wei&szlig;',
'Wide' => 'Weit',
'X10ActivationString' => 'X10-Aktivierungswert',
'X10InputAlarmString' => 'X10-Eingabe-Alarmwert',
'X10OutputAlarmString' => 'X10-Ausgabe-Alarmwert',
'X10' => 'X10',
'X' => 'X',
'Yes' => 'Ja',
'YouNoPerms' => 'Keine Erlaubnis zum Zugang dieser Resource.',
'Y' => 'Y',
'ZoneAlarmColour' => 'Alarmfarbe (Rot/Gr&uuml;n/Blau)',
'ZoneArea' => 'Zone Area',
'ZoneFilterSize' => 'Filter-Breite/-H&ouml;he (Pixel)',
'ZoneMinMaxAlarmArea' => 'Min./max. Alarmfl&auml;che',
'ZoneMinMaxBlobArea' => 'Min./max. Blobfl&auml;che',
'ZoneMinMaxBlobs' => 'Min./max. Blobs',
'ZoneMinMaxFiltArea' => 'Min./max. Filterfl&auml;che',
'ZoneMinMaxPixelThres' => 'Min./max. Pixelschwellwert',
'ZoneOverloadFrames' => 'Bildauslassrate bei System&uuml;berlastung',
'Zones' => 'Zonen',
'Zone' => 'Zone',
'ZoomIn' => 'Hineinzoomen',
'ZoomOut' => 'Herauszoomen',
'Zoom' => 'Zoom',
);
// Complex replacements with formatting and/or placements, must be passed through sprintf
$CLANG = array(
'CurrentLogin' => 'Momentan angemeldet ist \'%1$s\'',
'EventCount' => '%1$s %2$s', // For example '37 Events' (from Vlang below)
'LastEvents' => 'Letzte %1$s %2$s', // For example 'Last 37 Events' (from Vlang below)
'LatestRelease' => 'Die letzte Version ist v%1$s, Sie haben v%2$s.',
'MonitorCount' => '%1$s %2$s', // For example '4 Monitors' (from Vlang below)
'MonitorFunction' => 'Monitor %1$s Funktion',
'RunningRecentVer' => 'Sie benutzen die aktuellste Version von Zoneminder, v%s.',
);
// The next section allows you to describe a series of word ending and counts used to
// generate the correctly conjugated forms of words depending on a count that is associated
// with that word.
// This intended to allow phrases such a '0 potatoes', '1 potato', '2 potatoes' etc to
// conjugate correctly with the associated count.
// In some languages such as English this is fairly simple and can be expressed by assigning
// a count with a singular or plural form of a word and then finding the nearest (lower) value.
// So '0' of something generally ends in 's', 1 of something is singular and has no extra
// ending and 2 or more is a plural and ends in 's' also. So to find the ending for '187' of
// something you would find the nearest lower count (2) and use that ending.
//
// So examples of this would be
// $zmVlangPotato = array( 0=>'Potatoes', 1=>'Potato', 2=>'Potatoes' );
// $zmVlangSheep = array( 0=>'Sheep' );
//
// where you can have as few or as many entries in the array as necessary
// If your language is similar in form to this then use the same format and choose the
// appropriate zmVlang function below.
// If however you have a language with a different format of plural endings then another
// approach is required . For instance in Russian the word endings change continuously
// depending on the last digit (or digits) of the numerator. In this case then zmVlang
// arrays could be written so that the array index just represents an arbitrary 'type'
// and the zmVlang function does the calculation about which version is appropriate.
//
// So an example in Russian might be (using English words, and made up endings as I
// don't know any Russian!!)
// $zmVlangPotato = array( 1=>'Potati', 2=>'Potaton', 3=>'Potaten' );
//
// and the zmVlang function decides that the first form is used for counts ending in
// 0, 5-9 or 11-19 and the second form when ending in 1 etc.
//
// Variable arrays expressing plurality, see the zmVlang description above
$VLANG = array(
'Event' => array( 0=>'Ereignisse', 1=>'Ereignis;', 2=>'Ereignisse' ),
'Monitor' => array( 0=>'Monitore', 1=>'Monitor', 2=>'Monitore' ),
);
// You will need to choose or write a function that can correlate the plurality string arrays
// with variable counts. This is used to conjugate the Vlang arrays above with a number passed
// in to generate the correct noun form.
//
// In languages such as English this is fairly simple
// Note this still has to be used with printf etc to get the right formating
function zmVlang( $langVarArray, $count )
{
krsort( $langVarArray );
foreach ( $langVarArray as $key=>$value )
{
if ( abs($count) >= $key )
{
return( $value );
}
}
die( 'Error, unable to correlate variable language string' );
}
// This is an version that could be used in the Russian example above
// The rules are that the first word form is used if the count ends in
// 0, 5-9 or 11-19. The second form is used then the count ends in 1
// (not including 11 as above) and the third form is used when the
// count ends in 2-4, again excluding any values ending in 12-14.
//
// function zmVlang( $langVarArray, $count )
// {
// $secondlastdigit = substr( $count, -2, 1 );
// $lastdigit = substr( $count, -1, 1 );
// // or
// // $secondlastdigit = ($count/10)%10;
// // $lastdigit = $count%10;
//
// // Get rid of the special cases first, the teens
// if ( $secondlastdigit == 1 && $lastdigit != 0 )
// {
// return( $langVarArray[1] );
// }
// switch ( $lastdigit )
// {
// case 0 :
// case 5 :
// case 6 :
// case 7 :
// case 8 :
// case 9 :
// {
// return( $langVarArray[1] );
// break;
// }
// case 1 :
// {
// return( $langVarArray[2] );
// break;
// }
// case 2 :
// case 3 :
// case 4 :
// {
// return( $langVarArray[3] );
// break;
// }
// }
// die( 'Error, unable to correlate variable language string' );
// }
// This is an example of how the function is used in the code which you can uncomment and
// use to test your custom function.
//$monitors = array();
//$monitors[] = 1; // Choose any number
//echo sprintf( $zmClangMonitorCount, count($monitors), zmVlang( $zmVlangMonitor, count($monitors) ) );
// In this section you can override the default prompt and help texts for the options area
// These overrides are in the form show below where the array key represents the option name minus the initial ZM_
// So for example, to override the help text for ZM_LANG_DEFAULT do
$OLANG = array(
// 'LANG_DEFAULT' => array(
// 'Prompt' => "This is a new prompt for this option",
// 'Help' => "This is some new help for this option which will be displayed in the popup window when the ? is clicked"
// ),
);
?>

803
web/lang/dk_dk.php Normal file
View File

@ -0,0 +1,803 @@
<?php
//
// ZoneMinder web Danish language file, $Date$, $Revision$
// Copyright (C) 2003, 2004, 2005, 2006 Philip Coombes
//
// This program 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 program 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
//
// ZoneMinder Danish Translation by Tom Stage
// Notes for Translators
// 0. Get some credit, put your name in the line above (optional)
// 1. When composing the language tokens in your language you should try and keep to roughly the
// same length text if possible. Abbreviate where necessary as spacing is quite close in a number of places.
// 2. There are four types of string replacement
// a) Simple replacements are words or short phrases that are static and used directly. This type of
// replacement can be used 'as is'.
// b) Complex replacements involve some dynamic element being included and so may require substitution
// or changing into a different order. The token listed in this file will be passed through sprintf as
// a formatting string. If the dynamic element is a number you will usually need to use a variable
// replacement also as described below.
// c) Variable replacements are used in conjunction with complex replacements and involve the generation
// of a singular or plural noun depending on the number passed into the zmVlang function. See the
// the zmVlang section below for a further description of this.
// d) Optional strings which can be used to replace the prompts and/or help text for the Options section
// of the web interface. These are not listed below as they are quite large and held in the database
// so that they can also be used by the zmconfig.pl script. However you can build up your own list
// quite easily from the Config table in the database if necessary.
// 3. The tokens listed below are not used to build up phrases or sentences from single words. Therefore
// you can safely assume that a single word token will only be used in that context.
// 4. In new language files, or if you are changing only a few words or phrases it makes sense from a
// maintenance point of view to include the original language file and override the old definitions rather
// than copy all the language tokens across. To do this change the line below to whatever your base language
// is and uncomment it.
// require_once( 'zm_lang_en_gb.php' );
// You may need to change the character set here, if your web server does not already
// do this by default, uncomment this if required.
//
// Example
// header( "Content-Type: text/html; charset=iso-8859-1" );
header( "Content-Type: text/html; charset=windows-1252" );
// You may need to change your locale here if your default one is incorrect for the
// language described in this file, or if you have multiple languages supported.
// If you do need to change your locale, be aware that the format of this function
// is subtlely different in versions of PHP before and after 4.3.0, see
// http://uk2.php.net/manual/en/function.setlocale.php for details.
// Also be aware that changing the whole locale may affect some floating point or decimal
// arithmetic in the database, if this is the case change only the individual locale areas
// that don't affect this rather than all at once. See the examples below.
// Finally, depending on your setup, PHP may not enjoy have multiple locales in a shared
// threaded environment, if you get funny errors it may be this.
//
// Examples
// setlocale( 'LC_ALL', 'en_GB' ); All locale settings pre-4.3.0
// setlocale( LC_ALL, 'en_GB' ); All locale settings 4.3.0 and after
// setlocale( LC_CTYPE, 'en_GB' ); Character class settings 4.3.0 and after
// setlocale( LC_TIME, 'en_GB' ); Date and time formatting 4.3.0 and after
// Simple String Replacements
$SLANG = array(
'24BitColour' => '24 bit farve',
'8BitGrey' => '8 bit greyscale',
'Action' => 'Action',
'Actual' => 'Aktuel',
'AddNewControl' => 'Tilføj Ny kontrol',
'AddNewMonitor' => 'Tilføj Ny Monitor',
'AddNewUser' => 'Tilføj Ny Bruger',
'AddNewZone' => 'Tilføj Ny Zone',
'Alarm' => 'Alarm',
'AlarmBrFrames' => 'Alarm<br/>Billeder',
'AlarmFrame' => 'Alarm Billede',
'AlarmFrameCount' => 'Alarm Billede Tæller',
'AlarmLimits' => 'Alarm Begrændsing',
'AlarmMaximumFPS' => 'Alarm Maximum FPS',
'AlarmPx' => 'Alarm Px',
'AlarmRGBUnset' => 'You must set an alarm RGB colour',
'Alert' => 'Alarm',
'All' => 'Alle',
'Apply' => 'Aktiver',
'ApplyingStateChange' => 'Aktivere State Ændring',
'ArchArchived' => 'Kun Arkiverede',
'Archive' => 'Arkiver',
'Archived' => 'Archived',
'ArchUnarchived' => 'Kun Ikke Arkiverede',
'Area' => 'Area',
'AreaUnits' => 'Area (px/%)',
'AttrAlarmFrames' => 'Alarm Billeder',
'AttrArchiveStatus' => 'Arkiverings Status',
'AttrAvgScore' => 'Avg. Skore',
'AttrCause' => 'Årsag',
'AttrDate' => 'Dato',
'AttrDateTime' => 'Dato/Tid',
'AttrDiskBlocks' => 'Disk Blocks',
'AttrDiskPercent' => 'Disk Procent',
'AttrDuration' => 'Forløb',
'AttrFrames' => 'Billeder',
'AttrId' => 'Id',
'AttrMaxScore' => 'Max. Skore',
'AttrMonitorId' => 'Monitor Id',
'AttrMonitorName' => 'Monitor Navn',
'AttrName' => 'Navn',
'AttrNotes' => 'Notes',
'AttrSystemLoad' => 'System Load',
'AttrTime' => 'Tid',
'AttrTotalScore' => 'Total Skore',
'AttrWeekday' => 'Uge Dag',
'Auto' => 'Auto',
'AutoStopTimeout' => 'Auto Stop Timeout',
'AvgBrScore' => 'Avg.<br/>Skore',
'Background' => 'Background',
'BackgroundFilter' => 'Run filter in background',
'BadAlarmFrameCount' => 'Alarm frame count must be an integer of one or more',
'BadAlarmMaxFPS' => 'Alarm Maximum FPS must be a positive integer or floating point value',
'BadChannel' => 'Channel must be set to an integer of zero or more',
'BadDevice' => 'Device must be set to a valid value',
'BadFormat' => 'Format must be set to an integer of zero or more',
'BadFPSReportInterval' => 'FPS report interval buffer count must be an integer of 100 or more',
'BadFrameSkip' => 'Frame skip count must be an integer of zero or more',
'BadHeight' => 'Height must be set to a valid value',
'BadHost' => 'Host must be set to a valid ip address or hostname, do not include http://',
'BadImageBufferCount' => 'Image buffer size must be an integer of 10 or more',
'BadLabelX' => 'Label X co-ordinate must be set to an integer of zero or more',
'BadLabelY' => 'Label Y co-ordinate must be set to an integer of zero or more',
'BadMaxFPS' => 'Maximum FPS must be a positive integer or floating point value',
'BadNameChars' => 'Navne må kun indeholde alphanumeric karaktere plus hyphen og underscore',
'BadPath' => 'Path must be set to a valid value',
'BadPort' => 'Port must be set to a valid number',
'BadPostEventCount' => 'Post event image count must be an integer of zero or more',
'BadPreEventCount' => 'Pre event image count must be at least zero, and less than image buffer size',
'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',
'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',
'BadWidth' => 'Width must be set to a valid value',
'Bandwidth' => 'Båndbrede',
'BlobPx' => 'Blob Px',
'Blobs' => 'Blobs',
'BlobSizes' => 'Blob Størelse',
'Brightness' => 'Brightness',
'Buffers' => 'Buffere',
'CanAutoFocus' => 'Kan Auto Focus',
'CanAutoGain' => 'Kan Auto Gain',
'CanAutoIris' => 'Kan Auto Iris',
'CanAutoWhite' => 'Kan Auto White Bal.',
'CanAutoZoom' => 'Kan Auto Zoom',
'CancelForcedAlarm' => 'Fortryd Forced Alarm',
'Cancel' => 'Fortryd',
'CanFocusAbs' => 'Kan Focus Absolut',
'CanFocusCon' => 'Kan Focus Kontinuerligt',
'CanFocus' => 'Kan Focus',
'CanFocusRel' => 'Kan Focus Relativt',
'CanGainAbs' => 'Kan Gain Absolut',
'CanGainCon' => 'Kan Gain Kontinuerligt',
'CanGain' => 'Kan Gain ',
'CanGainRel' => 'Kan Gain Relativt',
'CanIrisAbs' => 'Kan Iris Absolut',
'CanIrisCon' => 'Kan Iris Kontinuerligt',
'CanIris' => 'Kan Iris',
'CanIrisRel' => 'Kan Iris Relativt',
'CanMoveAbs' => 'Kan Bevæge Absolut',
'CanMoveCon' => 'Kan Bevæge Kontinuerligt',
'CanMoveDiag' => 'Kan Bevæge Diagonalt',
'CanMove' => 'Kan Bevæge',
'CanMoveMap' => 'Kan Bevæge Mapped',
'CanMoveRel' => 'Kan Bevæge Relativt',
'CanPan' => 'Kan Pan' ,
'CanReset' => 'Kan Reset',
'CanSetPresets' => 'Kan Set Presets',
'CanSleep' => 'Kan Sove',
'CanTilt' => 'Kan Tilt',
'CanWake' => 'Kan Vågne',
'CanWhiteAbs' => 'Kan White Bal. Absolut',
'CanWhiteBal' => 'Kan White Bal.',
'CanWhiteCon' => 'Kan White Bal. Kontinuerligt',
'CanWhite' => 'Kan White Balance',
'CanWhiteRel' => 'Kan White Bal. Relativt',
'CanZoomAbs' => 'Kan Zoom Absolut',
'CanZoomCon' => 'Kan Zoom Kontinuerligt',
'CanZoom' => 'Kan Zoom',
'CanZoomRel' => 'Kan Zoom Relativt',
'CaptureHeight' => 'Capture Height',
'CapturePalette' => 'Capture Palette',
'CaptureWidth' => 'Capture Width',
'Cause' => 'Årsag',
'CheckMethod' => 'Alarm Check Methode',
'ChooseFilter' => 'Vælg Filter',
'ChoosePreset' => 'Choose Preset',
'Close' => 'Luk',
'Colour' => 'Farve',
'Command' => 'Kommando',
'Config' => 'konfig',
'ConfiguredFor' => 'Konfigureret for',
'ConfirmDeleteEvents' => 'Are you sure you wish to delete the selected events?',
'ConfirmPassword' => 'Verifiser Password',
'ConjAnd' => 'og',
'ConjOr' => 'eller',
'Console' => 'Konsol',
'ContactAdmin' => 'Kontakt Din adminstrator for detalier.',
'Continue' => 'Fortsæt',
'Contrast' => 'Kontrast',
'ControlAddress' => 'Kontrol Addresse',
'ControlCap' => 'Kontrol Capability',
'ControlCaps' => 'Kontrol Capabilities',
'ControlDevice' => 'Kontrol Enhed',
'Control' => 'Kontrol',
'Controllable' => 'Controllable',
'ControlType' => 'Kontrol Type',
'Cycle' => 'Cycle',
'CycleWatch' => 'Cycle Watch',
'Day' => 'Dag',
'Debug' => 'Debug',
'DefaultRate' => 'Default Rate',
'DefaultScale' => 'Default Scale',
'DefaultView' => 'Default View',
'DeleteAndNext' => 'Slet &amp; Næste',
'DeleteAndPrev' => 'Slet &amp; Forrige',
'DeleteSavedFilter' => 'Slet Gemte filter',
'Delete' => 'Slet',
'Description' => 'Beskrivelse',
'DeviceChannel' => 'Enheds Kanal',
'DeviceFormat' => 'Enheds Format',
'DeviceNumber' => 'Enheds Nummer',
'DevicePath' => 'Device Path',
'Devices' => 'Devices',
'Dimensions' => 'Dimentioner',
'DisableAlarms' => 'Disable Alarms',
'Disk' => 'Disk',
'DonateAlready' => 'No, I\'ve already donated',
'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' => 'Please Donate',
'DonateRemindDay' => 'Not yet, remind again in 1 day',
'DonateRemindHour' => 'Not yet, remind again in 1 hour',
'DonateRemindMonth' => 'Not yet, remind again in 1 month',
'DonateRemindNever' => 'No, I don\'t want to donate, never remind',
'DonateRemindWeek' => 'Not yet, remind again in 1 week',
'DonateYes' => 'Yes, I\'d like to donate now',
'Download' => 'Download',
'Duration' => 'Forløb',
'Edit' => 'Rediger',
'Email' => 'Email',
'EnableAlarms' => 'Enable Alarms',
'Enabled' => 'Aktiv',
'EnterNewFilterName' => 'Skriv Nyt filter navn',
'ErrorBrackets' => 'Fejl, check at du har lige antal af Åbnings og Lukkende brackets',
'Error' => 'Fejl',
'ErrorValidValue' => 'Fejl, check at alle terms har en valid værdig',
'Etc' => 'etc',
'Event' => 'Event',
'EventFilter' => 'Event Filter',
'EventId' => 'Event Id',
'EventName' => 'Event Navn',
'EventPrefix' => 'Event Prefix',
'Events' => 'Events',
'Exclude' => 'Exclude',
'Execute' => 'Execute',
'ExportDetails' => 'Export Event Details',
'Export' => 'Export',
'ExportFailed' => 'Export Failed',
'ExportFormat' => 'Export File Format',
'ExportFormatTar' => 'Tar',
'ExportFormatZip' => 'Zip',
'ExportFrames' => 'Export Frame Details',
'ExportImageFiles' => 'Export Image Files',
'Exporting' => 'Exporting',
'ExportMiscFiles' => 'Export Other Files (if present)',
'ExportOptions' => 'Export Options',
'ExportVideoFiles' => 'Export Video Files (if present)',
'Far' => 'Far',
'FastForward' => 'Fast Forward',
'Feed' => 'Feed',
'FileColours' => 'File Colours',
'File' => 'File',
'FilePath' => 'File Path',
'FilterArchiveEvents' => 'Arkiver alle matchende',
'FilterDeleteEvents' => 'Slet alle matchende',
'FilterEmailEvents' => 'Email detalier af alle matchende',
'FilterExecuteEvents' => 'Kør kommando på alle matchende',
'FilterMessageEvents' => 'Send detalier af alle matchende',
'FilterPx' => 'Filter Px',
'Filters' => 'Filters',
'FilterUnset' => 'You must specify a filter width and height',
'FilterUploadEvents' => 'Upload alle matchende',
'FilterVideoEvents' => 'Create video for all matches',
'First' => 'Første',
'FlippedHori' => 'Flipped Horizontally',
'FlippedVert' => 'Flipped Vertically',
'Focus' => 'Fokus',
'ForceAlarm' => 'Tving Alarm',
'Format' => 'Format',
'FPS' => 'fps',
'FPSReportInterval' => 'FPS Raport Interval',
'Frame' => 'Billede',
'FrameId' => 'Billede Id',
'FrameRate' => 'Billede Rate',
'Frames' => 'Billede',
'FrameSkip' => 'Billede Skip',
'FTP' => 'FTP',
'Func' => 'Func',
'Function' => 'Funktion',
'Gain' => 'Gain',
'General' => 'General',
'GenerateVideo' => 'Generer Video',
'GeneratingVideo' => 'Generere Video',
'GoToZoneMinder' => 'Gå til ZoneMinder.com',
'Grey' => 'Grå',
'Group' => 'Group',
'Groups' => 'Grupper',
'HasFocusSpeed' => 'Har Fokus Hastighed',
'HasGainSpeed' => 'Har Gain Hastighed',
'HasHomePreset' => 'Har Hjem Preset',
'HasIrisSpeed' => 'Har Iris Hastighed',
'HasPanSpeed' => 'Har Pan Hastighed',
'HasPresets' => 'Har Presets',
'HasTiltSpeed' => 'Har Tilt Hastighed',
'HasTurboPan' => 'Har Turbo Pan',
'HasTurboTilt' => 'Har Turbo Tilt',
'HasWhiteSpeed' => 'Har White Bal. Hastighed',
'HasZoomSpeed' => 'Har Zoom Hastighed',
'HighBW' => 'Høj&nbsp;B/B',
'High' => 'Høj',
'Home' => 'Hjem',
'Hour' => 'Time',
'Hue' => 'Hue',
'Id' => 'Id',
'Idle' => 'Idle',
'Ignore' => 'Ignorer',
'Image' => 'Billede',
'ImageBufferSize' => 'Billede Buffer Størelse (Billeder)',
'Images' => 'Images',
'Include' => 'Inkluder',
'In' => 'Ind',
'Inverted' => 'Inverteret',
'Iris' => 'Iris',
'KeyString' => 'Key String',
'Label' => 'Label',
'Language' => 'Sprog',
'Last' => 'Sidste',
'LimitResultsPost' => 'results only;', // This is used at the end of the phrase 'Limit to first N results only'
'LimitResultsPre' => 'Limit to first', // This is used at the beginning of the phrase 'Limit to first N results only'
'LinkedMonitors' => 'Linked Monitors',
'List' => 'List',
'Load' => 'Load',
'Local' => 'Lokal',
'LoggedInAs' => 'Logget Ind Som',
'LoggingIn' => 'Logger Ind',
'Login' => 'Logind',
'Logout' => 'Logud',
'LowBW' => 'Lav&nbsp;B/B',
'Low' => 'Lav',
'Main' => 'Main',
'Man' => 'Man',
'Manual' => 'Manual',
'Mark' => 'Marker',
'MaxBandwidth' => 'Max Bandwidth',
'MaxBrScore' => 'Max.<br/>Skore',
'MaxFocusRange' => 'Max Focus Range',
'MaxFocusSpeed' => 'Max Focus Speed',
'MaxFocusStep' => 'Max Focus Step',
'MaxGainRange' => 'Max Gain Range',
'MaxGainSpeed' => 'Max Gain Speed',
'MaxGainStep' => 'Max Gain Step',
'MaximumFPS' => 'Maximale 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',
'MaxTiltRange' => 'Max Tilt Range',
'MaxTiltSpeed' => 'Max Tilt Speed',
'MaxTiltStep' => 'Max Tilt Step',
'MaxWhiteRange' => 'Max White Bal. Range',
'MaxWhiteSpeed' => 'Max White Bal. Speed',
'MaxWhiteStep' => 'Max White Bal. Step',
'MaxZoomRange' => 'Max Zoom Range',
'MaxZoomSpeed' => 'Max Zoom Speed',
'MaxZoomStep' => 'Max Zoom Step',
'MediumBW' => 'Medium&nbsp;B/B',
'Medium' => 'Medium',
'MinAlarmAreaLtMax' => 'Minimum alarm area should be less than maximum',
'MinAlarmAreaUnset' => 'You must specify the minimum alarm pixel count',
'MinBlobAreaLtMax' => 'Minimum blob område bør være mindre end maximum',
'MinBlobAreaUnset' => 'You must specify the minimum blob pixel count',
'MinBlobLtMinFilter' => 'Minimum blob area should be less than or equal to minimum filter area',
'MinBlobsLtMax' => 'Minimum blobs bør være mindre end maximum',
'MinBlobsUnset' => 'You must specify the minimum blob count',
'MinFilterAreaLtMax' => 'Minimum filter area should be less than maximum',
'MinFilterAreaUnset' => 'You must specify the minimum filter pixel count',
'MinFilterLtMinAlarm' => 'Minimum filter area should be less than or equal to minimum alarm area',
'MinFocusRange' => 'Min Focus Range',
'MinFocusSpeed' => 'Min Focus Speed',
'MinFocusStep' => 'Min Focus Step',
'MinGainRange' => 'Min Gain Range',
'MinGainSpeed' => 'Min Gain Speed',
'MinGainStep' => 'Min Gain Step',
'MinIrisRange' => 'Min Iris Range',
'MinIrisSpeed' => 'Min Iris Speed',
'MinIrisStep' => 'Min Iris Step',
'MinPanRange' => 'Min Pan Range',
'MinPanSpeed' => 'Min Pan Speed',
'MinPanStep' => 'Min Pan Step',
'MinPixelThresLtMax' => 'Minimum pixel threshold bør være mindre end maximum',
'MinPixelThresUnset' => 'You must specify a minimum pixel threshold',
'MinTiltRange' => 'Min Tilt Range',
'MinTiltSpeed' => 'Min Tilt Speed',
'MinTiltStep' => 'Min Tilt Step',
'MinWhiteRange' => 'Min White Bal. Range',
'MinWhiteSpeed' => 'Min White Bal. Speed',
'MinWhiteStep' => 'Min White Bal. Step',
'MinZoomRange' => 'Min Zoom Range',
'MinZoomSpeed' => 'Min Zoom Speed',
'MinZoomStep' => 'Min Zoom Step',
'Misc' => 'Misc',
'MonitorIds' => 'Monitor&nbsp;Ids',
'Monitor' => 'Monitor',
'MonitorPresetIntro' => 'Select an appropriate preset from the list below.<br><br>Please note that this may overwrite any values you already have configured for this monitor.<br><br>',
'MonitorPreset' => 'Monitor Preset',
'Monitors' => 'Monitore',
'Montage' => 'Montage',
'Month' => 'Måned',
'Move' => 'Flyt',
'MustBeGe' => 'skal være støre end eller ligmed',
'MustBeLe' => 'Skal være mindre end eller ligmed',
'MustConfirmPassword' => 'Du skal konfimere password',
'MustSupplyPassword' => 'Du skal angive et password',
'MustSupplyUsername' => 'Du skal opgive et username',
'Name' => 'Navn',
'Near' => 'Near',
'Network' => 'Netværk',
'NewGroup' => 'Ny Gruppe',
'NewLabel' => 'New Label',
'New' => 'Ny',
'NewPassword' => 'Nyt Password',
'NewState' => 'Ny State',
'NewUser' => 'Ny User',
'Next' => 'Næste',
'NoFramesRecorded' => 'Der er ingen billeder optaget for denne event',
'NoGroup' => 'No Group',
'NoneAvailable' => 'Ingen Tilstede',
'None' => 'Ingen',
'No' => 'Nej',
'Normal' => 'Normal',
'NoSavedFilters' => 'NoSavedFilters',
'NoStatisticsRecorded' => 'Der er ingen statestikker optaget for denne event/frame',
'Notes' => 'Notes',
'NumPresets' => 'Num Presets',
'Off' => 'Off',
'On' => 'On',
'Open' => 'Åben',
'OpEq' => 'ligmed',
'OpGtEq' => 'støre end eller ligmed',
'OpGt' => 'støre end',
'OpIn' => 'i sættet',
'OpLtEq' => 'mindre end eller ligmed',
'OpLt' => 'mindre end',
'OpMatches' => 'matches',
'OpNe' => 'ikke ligmed',
'OpNotIn' => 'ikke i sættet',
'OpNotMatches' => 'does not match',
'OptionHelp' => 'OptionHelp',
'OptionRestartWarning' => 'Disse ændringer træder ikke i fuld effect\nmens systemt køre. Når du har\nafsluttet ændringer bedes du\ngenstarte ZoneMinder.',
'Options' => 'Indstillinger',
'Order' => 'Order',
'OrEnterNewName' => 'eller skriv nyt navn',
'Orientation' => 'Orientation',
'Out' => 'Ud',
'OverwriteExisting' => 'Overskriv Eksisterende',
'Paged' => 'Paged',
'PanLeft' => 'Pan Left',
'Pan' => 'Pan',
'PanRight' => 'Pan Right',
'PanTilt' => 'Pan/Tilt',
'Parameter' => 'Parameter',
'Password' => 'Password',
'PasswordsDifferent' => 'Det nye og konfimerede passwords er forskellige',
'Paths' => 'Stiger',
'Pause' => 'Pause',
'PhoneBW' => 'Telefon&nbsp;B/B',
'Phone' => 'Telefon',
'PixelDiff' => 'Pixel Diff',
'Pixels' => 'pixels',
'PlayAll' => 'Afspil Alle',
'Play' => 'Play',
'PleaseWait' => 'Vent venligst',
'Point' => 'Point',
'PostEventImageBuffer' => 'Efter Event Billed Buffer',
'PreEventImageBuffer' => 'Før Event Billed Buffer',
'PreserveAspect' => 'Preserve Aspect Ratio',
'Preset' => 'Preset',
'Presets' => 'Presets',
'Prev' => 'Prev',
'Protocol' => 'Protocol',
'Rate' => 'Rate',
'Real' => 'Real',
'Record' => 'Optag',
'RefImageBlendPct' => 'Reference Billede Blend %ge',
'Refresh' => 'Opdater',
'RemoteHostName' => 'Remote Host Navn',
'RemoteHostPath' => 'Remote Host Stig',
'RemoteHostPort' => 'Remote Host Port',
'RemoteImageColours' => 'Remote Image Farver',
'Remote' => 'Remote',
'Rename' => 'Omdøb',
'ReplayAll' => 'All Events',
'ReplayGapless' => 'Gapless Events',
'Replay' => 'Replay',
'ReplaySingle' => 'Single Event',
'Replay' => 'Spil Igen',
'ResetEventCounts' => 'Reset Event Counts',
'Reset' => 'Nulstil',
'Restart' => 'Genstart',
'Restarting' => 'Genstarter',
'RestrictedCameraIds' => 'Begranset Kamera Ids',
'RestrictedMonitors' => 'Restricted Monitors',
'ReturnDelay' => 'Return Delay',
'ReturnLocation' => 'Return Location',
'Rewind' => 'Rewind',
'RotateLeft' => 'Rotate Left',
'RotateRight' => 'Rotate Right',
'RunMode' => 'Kørsels Mode',
'Running' => 'Køre',
'RunState' => 'Run State',
'SaveAs' => 'Gem Som',
'SaveFilter' => 'Gem Filter',
'Save' => 'Gem',
'Scale' => 'Scale',
'Score' => 'Skore',
'Secs' => 'Sekunder',
'Sectionlength' => 'Sektion længde',
'SelectMonitors' => 'Select Monitors',
'Select' => 'Vælg',
'SelfIntersecting' => 'Polygon edges must not intersect',
'SetLearnPrefs' => 'Set Learn Prefs', // This can be ignored for now
'SetNewBandwidth' => 'Sæt Ny Båndbrede',
'SetPreset' => 'Sæt Preset',
'Set' => 'Sæt',
'Settings' => 'Indstillinger',
'ShowFilterWindow' => 'VisFilterVindue',
'ShowTimeline' => 'Show Timeline',
'SignalCheckColour' => 'Signal Check Colour',
'Size' => 'Size',
'Sleep' => 'Sov',
'SortAsc' => 'Asc',
'SortBy' => 'Sorter efter',
'SortDesc' => 'Desc',
'Source' => 'Enhed',
'SourceType' => 'Enheds Type',
'Speed' => 'Hastighed',
'SpeedHigh' => 'Høj Hastighed',
'SpeedLow' => 'Lav Hastighed',
'SpeedMedium' => 'Medium Hastighed',
'SpeedTurbo' => 'Turbo Hastighed',
'Start' => 'Start',
'State' => 'State',
'Stats' => 'Stats',
'Status' => 'Status',
'StepBack' => 'Step Back',
'StepForward' => 'Step Forward',
'StepLarge' => 'Large Step',
'StepMedium' => 'Medium Step',
'StepNone' => 'No Step',
'StepSmall' => 'Small Step',
'Step' => 'Step',
'Stills' => 'Stills',
'Stopped' => 'Stoppet',
'Stop' => 'Stop',
'StreamReplayBuffer' => 'Stream Replay Image Buffer',
'Stream' => 'Stream',
'Submit' => 'Submit',
'System' => 'System',
'Tele' => 'Tele',
'Thumbnail' => 'Thumbnail',
'Tilt' => 'Tilt',
'TimeDelta' => 'Time Delta',
'Timeline' => 'Timeline',
'TimestampLabelFormat' => 'Tidsstempel Mærkning´s Format',
'TimestampLabelX' => 'Tidsstempel Mærkning X',
'TimestampLabelY' => 'Tidsstempel Mærkning Y',
'Timestamp' => 'Tidsstempel',
'TimeStamp' => 'Tids Stempel',
'Time' => 'Tid',
'Today' => 'Idag',
'Tools' => 'Tools',
'TotalBrScore' => 'Total<br/>Skore',
'TrackDelay' => 'Track Delay',
'TrackMotion' => 'Track Motion',
'Triggers' => 'Triggers',
'TurboPanSpeed' => 'Turbo Pan Hastighed',
'TurboTiltSpeed' => 'Turbo Tilt Hastighed',
'Type' => 'Type',
'Unarchive' => 'Unarchive',
'Units' => 'Units',
'Unknown' => 'Unknown',
'UpdateAvailable' => 'En updatering til ZoneMinder er tilstede.',
'UpdateNotNecessary' => 'Ingen updatering er nødvendig.',
'Update' => 'Update',
'UseFilter' => 'Brug Filter',
'UseFilterExprsPost' => '&nbsp;filter&nbsp;expressions', // This is used at the end of the phrase 'use N filter expressions'
'UseFilterExprsPre' => 'Brug&nbsp;', // This is used at the beginning of the phrase 'use N filter expressions'
'User' => 'Bruger',
'Username' => 'Bruger Navn',
'Users' => 'Brugere',
'Value' => 'Værdig',
'VersionIgnore' => 'Ignorer denne version',
'VersionRemindDay' => 'Påmind igen om 1 dag',
'VersionRemindHour' => 'Påmind igen om 1 time',
'VersionRemindNever' => 'Mind ikke om nye versioner',
'VersionRemindWeek' => 'Påmind igen om 1 uge',
'Version' => 'Version',
'VideoFormat' => 'Video Format',
'VideoGenFailed' => 'Video Generering Fejlede!',
'VideoGenFiles' => 'Existing Video Files',
'VideoGenNoFiles' => 'No Video Files Found',
'VideoGenParms' => 'Video Generaring Parametre',
'VideoGenSucceeded' => 'Video Generation Succeeded!',
'VideoSize' => 'Video Størelse',
'Video' => 'Video',
'ViewAll' => 'Vis Alle',
'ViewEvent' => 'View Event',
'ViewPaged' => 'View Paged',
'View' => 'Vis',
'Wake' => 'Wake',
'WarmupFrames' => 'Varmop Billeder',
'Watch' => 'Se',
'WebColour' => 'Web Colour',
'Web' => 'Web',
'Week' => 'Uge',
'WhiteBalance' => 'White Balance',
'White' => 'White',
'Wide' => 'Wide',
'X10ActivationString' => 'X10 Activerings Streng',
'X10InputAlarmString' => 'X10 Input Alarm Streng',
'X10OutputAlarmString' => 'X10 Output Alarm Streng',
'X10' => 'X10',
'X' => 'X',
'Yes' => 'Ja',
'YouNoPerms' => 'Du har ikke adgang til denne resourse.',
'Y' => 'Y',
'ZoneAlarmColour' => 'Alarm Farve (Red/Green/Blue)',
'ZoneArea' => 'Zone Area',
'ZoneFilterSize' => 'Filter Width/Height (pixels)',
'ZoneMinMaxAlarmArea' => 'Min/Max Alarmed Area',
'ZoneMinMaxBlobArea' => 'Min/Max Blob Area',
'ZoneMinMaxBlobs' => 'Min/Max Blobs',
'ZoneMinMaxFiltArea' => 'Min/Max Filtered Area',
'ZoneMinMaxPixelThres' => 'Min/Max Pixel Threshold (0-255)',
'ZoneOverloadFrames' => 'Overload Frame Ignore Count',
'Zones' => 'Zoner',
'Zone' => 'Zone',
'ZoomIn' => 'Zoom In',
'ZoomOut' => 'Zoom Out',
'Zoom' => 'Zoom',
);
// Complex replacements with formatting and/or placements, must be passed through sprintf
$CLANG = array(
'CurrentLogin' => 'Nuværende login er \'%1$s\'',
'EventCount' => '%1$s %2$s', // For example '37 Events' (from Vlang below)
'LastEvents' => 'Sidste %1$s %2$s', // For example 'Last 37 Events' (from Vlang below)
'LatestRelease' => 'Den Seneste version er v%1$s, du har v%2$s.',
'MonitorCount' => '%1$s %2$s', // For example '4 Monitors' (from Vlang below)
'MonitorFunction' => 'Monitor %1$s Function',
'RunningRecentVer' => 'Du Køre med seneste version af ZoneMinder, v%s.',
);
// The next section allows you to describe a series of word ending and counts used to
// generate the correctly conjugated forms of words depending on a count that is associated
// with that word.
// This intended to allow phrases such a '0 potatoes', '1 potato', '2 potatoes' etc to
// conjugate correctly with the associated count.
// In some languages such as English this is fairly simple and can be expressed by assigning
// a count with a singular or plural form of a word and then finding the nearest (lower) value.
// So '0' of something generally ends in 's', 1 of something is singular and has no extra
// ending and 2 or more is a plural and ends in 's' also. So to find the ending for '187' of
// something you would find the nearest lower count (2) and use that ending.
//
// So examples of this would be
// $zmVlangPotato = array( 0=>'Potatoes', 1=>'Potato', 2=>'Potatoes' );
// $zmVlangSheep = array( 0=>'Sheep' );
//
// where you can have as few or as many entries in the array as necessary
// If your language is similar in form to this then use the same format and choose the
// appropriate zmVlang function below.
// If however you have a language with a different format of plural endings then another
// approach is required . For instance in Russian the word endings change continuously
// depending on the last digit (or digits) of the numerator. In this case then zmVlang
// arrays could be written so that the array index just represents an arbitrary 'type'
// and the zmVlang function does the calculation about which version is appropriate.
//
// So an example in Russian might be (using English words, and made up endings as I
// don't know any Russian!!)
// $zmVlangPotato = array( 1=>'Potati', 2=>'Potaton', 3=>'Potaten' );
//
// and the zmVlang function decides that the first form is used for counts ending in
// 0, 5-9 or 11-19 and the second form when ending in 1 etc.
//
// Variable arrays expressing plurality, see the zmVlang description above
$VLANG = array(
'Event' => array( 0=>'Events', 1=>'Event', 2=>'Events' ),
'Monitor' => array( 0=>'Monitors', 1=>'Monitor', 2=>'Monitors' ),
);
// You will need to choose or write a function that can correlate the plurality string arrays
// with variable counts. This is used to conjugate the Vlang arrays above with a number passed
// in to generate the correct noun form.
//
// In languages such as English this is fairly simple
// Note this still has to be used with printf etc to get the right formating
function zmVlang( $langVarArray, $count )
{
krsort( $langVarArray );
foreach ( $langVarArray as $key=>$value )
{
if ( abs($count) >= $key )
{
return( $value );
}
}
die( 'Error, unable to correlate variable language string' );
}
// This is an version that could be used in the Russian example above
// The rules are that the first word form is used if the count ends in
// 0, 5-9 or 11-19. The second form is used then the count ends in 1
// (not including 11 as above) and the third form is used when the
// count ends in 2-4, again excluding any values ending in 12-14.
//
// function zmVlang( $langVarArray, $count )
// {
// $secondlastdigit = substr( $count, -2, 1 );
// $lastdigit = substr( $count, -1, 1 );
// // or
// // $secondlastdigit = ($count/10)%10;
// // $lastdigit = $count%10;
//
// // Get rid of the special cases first, the teens
// if ( $secondlastdigit == 1 && $lastdigit != 0 )
// {
// return( $langVarArray[1] );
// }
// switch ( $lastdigit )
// {
// case 0 :
// case 5 :
// case 6 :
// case 7 :
// case 8 :
// case 9 :
// {
// return( $langVarArray[1] );
// break;
// }
// case 1 :
// {
// return( $langVarArray[2] );
// break;
// }
// case 2 :
// case 3 :
// case 4 :
// {
// return( $langVarArray[3] );
// break;
// }
// }
// die( 'Error, unable to correlate variable language string' );
// }
// This is an example of how the function is used in the code which you can uncomment and
// use to test your custom function.
//$monitors = array();
//$monitors[] = 1; // Choose any number
//echo sprintf( $zmClangMonitorCount, count($monitors), zmVlang( $zmVlangMonitor, count($monitors) ) );
// In this section you can override the default prompt and help texts for the options area
// These overrides are in the form show below where the array key represents the option name minus the initial ZM_
// So for example, to override the help text for ZM_LANG_DEFAULT do
$OLANG = array(
// 'LANG_DEFAULT' => array(
// 'Prompt' => "This is a new prompt for this option",
// 'Help' => "This is some new help for this option which will be displayed in the popup window when the ? is clicked"
// ),
);
?>

803
web/lang/en_gb.php Normal file
View File

@ -0,0 +1,803 @@
<?php
//
// ZoneMinder web UK English language file, $Date$, $Revision$
// Copyright (C) 2003, 2004, 2005, 2006 Philip Coombes
//
// This program 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 program 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
//
// ZoneMinder <your language> Translation by <your name>
// Notes for Translators
// 0. Get some credit, put your name in the line above (optional)
// 1. When composing the language tokens in your language you should try and keep to roughly the
// same length text if possible. Abbreviate where necessary as spacing is quite close in a number of places.
// 2. There are four types of string replacement
// a) Simple replacements are words or short phrases that are static and used directly. This type of
// replacement can be used 'as is'.
// b) Complex replacements involve some dynamic element being included and so may require substitution
// or changing into a different order. The token listed in this file will be passed through sprintf as
// a formatting string. If the dynamic element is a number you will usually need to use a variable
// replacement also as described below.
// c) Variable replacements are used in conjunction with complex replacements and involve the generation
// of a singular or plural noun depending on the number passed into the zmVlang function. See the
// the zmVlang section below for a further description of this.
// d) Optional strings which can be used to replace the prompts and/or help text for the Options section
// of the web interface. These are not listed below as they are quite large and held in the database
// so that they can also be used by the zmconfig.pl script. However you can build up your own list
// quite easily from the Config table in the database if necessary.
// 3. The tokens listed below are not used to build up phrases or sentences from single words. Therefore
// you can safely assume that a single word token will only be used in that context.
// 4. In new language files, or if you are changing only a few words or phrases it makes sense from a
// maintenance point of view to include the original language file and override the old definitions rather
// than copy all the language tokens across. To do this change the line below to whatever your base language
// is and uncomment it.
// require_once( 'zm_lang_en_gb.php' );
// You may need to change the character set here, if your web server does not already
// do this by default, uncomment this if required.
//
// Example
// header( "Content-Type: text/html; charset=iso-8859-1" );
// You may need to change your locale here if your default one is incorrect for the
// language described in this file, or if you have multiple languages supported.
// If you do need to change your locale, be aware that the format of this function
// is subtlely different in versions of PHP before and after 4.3.0, see
// http://uk2.php.net/manual/en/function.setlocale.php for details.
// Also be aware that changing the whole locale may affect some floating point or decimal
// arithmetic in the database, if this is the case change only the individual locale areas
// that don't affect this rather than all at once. See the examples below.
// Finally, depending on your setup, PHP may not enjoy have multiple locales in a shared
// threaded environment, if you get funny errors it may be this.
//
// Examples
// setlocale( 'LC_ALL', 'en_GB' ); All locale settings pre-4.3.0
// setlocale( LC_ALL, 'en_GB' ); All locale settings 4.3.0 and after
// setlocale( LC_CTYPE, 'en_GB' ); Character class settings 4.3.0 and after
// setlocale( LC_TIME, 'en_GB' ); Date and time formatting 4.3.0 and after
// Simple String Replacements
$SLANG = array(
'24BitColour' => '24 bit colour',
'8BitGrey' => '8 bit greyscale',
'Action' => 'Action',
'Actual' => 'Actual',
'AddNewControl' => 'Add New Control',
'AddNewMonitor' => 'Add New Monitor',
'AddNewUser' => 'Add New User',
'AddNewZone' => 'Add New Zone',
'Alarm' => 'Alarm',
'AlarmBrFrames' => 'Alarm<br/>Frames',
'AlarmFrame' => 'Alarm Frame',
'AlarmFrameCount' => 'Alarm Frame Count',
'AlarmLimits' => 'Alarm Limits',
'AlarmMaximumFPS' => 'Alarm Maximum FPS',
'AlarmPx' => 'Alarm Px',
'AlarmRGBUnset' => 'You must set an alarm RGB colour',
'Alert' => 'Alert',
'All' => 'All',
'Apply' => 'Apply',
'ApplyingStateChange' => 'Applying State Change',
'ArchArchived' => 'Archived Only',
'Archive' => 'Archive',
'Archived' => 'Archived',
'ArchUnarchived' => 'Unarchived Only',
'Area' => 'Area',
'AreaUnits' => 'Area (px/%)',
'AttrAlarmFrames' => 'Alarm Frames',
'AttrArchiveStatus' => 'Archive Status',
'AttrAvgScore' => 'Avg. Score',
'AttrCause' => 'Cause',
'AttrDate' => 'Date',
'AttrDateTime' => 'Date/Time',
'AttrDiskBlocks' => 'Disk Blocks',
'AttrDiskPercent' => 'Disk Percent',
'AttrDuration' => 'Duration',
'AttrFrames' => 'Frames',
'AttrId' => 'Id',
'AttrMaxScore' => 'Max. Score',
'AttrMonitorId' => 'Monitor Id',
'AttrMonitorName' => 'Monitor Name',
'AttrName' => 'Name',
'AttrNotes' => 'Notes',
'AttrSystemLoad' => 'System Load',
'AttrTime' => 'Time',
'AttrTotalScore' => 'Total Score',
'AttrWeekday' => 'Weekday',
'Auto' => 'Auto',
'AutoStopTimeout' => 'Auto Stop Timeout',
'AvgBrScore' => 'Avg.<br/>Score',
'Background' => 'Background',
'BackgroundFilter' => 'Run filter in background',
'BadAlarmFrameCount' => 'Alarm frame count must be an integer of one or more',
'BadAlarmMaxFPS' => 'Alarm Maximum FPS must be a positive integer or floating point value',
'BadChannel' => 'Channel must be set to an integer of zero or more',
'BadDevice' => 'Device must be set to a valid value',
'BadFormat' => 'Format must be set to an integer of zero or more',
'BadFPSReportInterval' => 'FPS report interval buffer count must be an integer of 100 or more',
'BadFrameSkip' => 'Frame skip count must be an integer of zero or more',
'BadHeight' => 'Height must be set to a valid value',
'BadHost' => 'Host must be set to a valid ip address or hostname, do not include http://',
'BadImageBufferCount' => 'Image buffer size must be an integer of 10 or more',
'BadLabelX' => 'Label X co-ordinate must be set to an integer of zero or more',
'BadLabelY' => 'Label Y co-ordinate must be set to an integer of zero or more',
'BadMaxFPS' => 'Maximum FPS must be a positive integer or floating point value',
'BadNameChars' => 'Names may only contain alphanumeric characters plus hyphen and underscore',
'BadPath' => 'Path must be set to a valid value',
'BadPort' => 'Port must be set to a valid number',
'BadPostEventCount' => 'Post event image count must be an integer of zero or more',
'BadPreEventCount' => 'Pre event image count must be at least zero, and less than image buffer size',
'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',
'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',
'BadWidth' => 'Width must be set to a valid value',
'Bandwidth' => 'Bandwidth',
'BlobPx' => 'Blob Px',
'Blobs' => 'Blobs',
'BlobSizes' => 'Blob Sizes',
'Brightness' => 'Brightness',
'Buffers' => 'Buffers',
'CanAutoFocus' => 'Can Auto Focus',
'CanAutoGain' => 'Can Auto Gain',
'CanAutoIris' => 'Can Auto Iris',
'CanAutoWhite' => 'Can Auto White Bal.',
'CanAutoZoom' => 'Can Auto Zoom',
'Cancel' => 'Cancel',
'CancelForcedAlarm' => 'Cancel Forced Alarm',
'CanFocusAbs' => 'Can Focus Absolute',
'CanFocus' => 'Can Focus',
'CanFocusCon' => 'Can Focus Continuous',
'CanFocusRel' => 'Can Focus Relative',
'CanGainAbs' => 'Can Gain Absolute',
'CanGain' => 'Can Gain ',
'CanGainCon' => 'Can Gain Continuous',
'CanGainRel' => 'Can Gain Relative',
'CanIrisAbs' => 'Can Iris Absolute',
'CanIris' => 'Can Iris',
'CanIrisCon' => 'Can Iris Continuous',
'CanIrisRel' => 'Can Iris Relative',
'CanMoveAbs' => 'Can Move Absolute',
'CanMove' => 'Can Move',
'CanMoveCon' => 'Can Move Continuous',
'CanMoveDiag' => 'Can Move Diagonally',
'CanMoveMap' => 'Can Move Mapped',
'CanMoveRel' => 'Can Move Relative',
'CanPan' => 'Can Pan' ,
'CanReset' => 'Can Reset',
'CanSetPresets' => 'Can Set Presets',
'CanSleep' => 'Can Sleep',
'CanTilt' => 'Can Tilt',
'CanWake' => 'Can Wake',
'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',
'CanZoomCon' => 'Can Zoom Continuous',
'CanZoomRel' => 'Can Zoom Relative',
'CaptureHeight' => 'Capture Height',
'CapturePalette' => 'Capture Palette',
'CaptureWidth' => 'Capture Width',
'Cause' => 'Cause',
'Layout' => 'Layout',
'CheckMethod' => 'Alarm Check Method',
'ChooseFilter' => 'Choose Filter',
'ChoosePreset' => 'Choose Preset',
'Close' => 'Close',
'Colour' => 'Colour',
'Command' => 'Command',
'Config' => 'Config',
'ConfiguredFor' => 'Configured for',
'ConfirmDeleteEvents' => 'Are you sure you wish to delete the selected events?',
'ConfirmPassword' => 'Confirm Password',
'ConjAnd' => 'and',
'ConjOr' => 'or',
'Console' => 'Console',
'ContactAdmin' => 'Please contact your adminstrator for details.',
'Continue' => 'Continue',
'Contrast' => 'Contrast',
'ControlAddress' => 'Control Address',
'ControlCap' => 'Control Capability',
'ControlCaps' => 'Control Capabilities',
'Control' => 'Control',
'ControlDevice' => 'Control Device',
'Controllable' => 'Controllable',
'ControlType' => 'Control Type',
'Cycle' => 'Cycle',
'CycleWatch' => 'Cycle Watch',
'Day' => 'Day',
'Debug' => 'Debug',
'DefaultRate' => 'Default Rate',
'DefaultScale' => 'Default Scale',
'DefaultView' => 'Default View',
'DeleteAndNext' => 'Delete &amp; Next',
'DeleteAndPrev' => 'Delete &amp; Prev',
'Delete' => 'Delete',
'DeleteSavedFilter' => 'Delete saved filter',
'Description' => 'Description',
'DeviceChannel' => 'Device Channel',
'DeviceFormat' => 'Device Format',
'DeviceNumber' => 'Device Number',
'DevicePath' => 'Device Path',
'Device' => 'Device',
'Devices' => 'Devices',
'Dimensions' => 'Dimensions',
'DisableAlarms' => 'Disable Alarms',
'Disk' => 'Disk',
'DonateAlready' => 'No, I\'ve already donated',
'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' => 'Please Donate',
'DonateRemindDay' => 'Not yet, remind again in 1 day',
'DonateRemindHour' => 'Not yet, remind again in 1 hour',
'DonateRemindMonth' => 'Not yet, remind again in 1 month',
'DonateRemindNever' => 'No, I don\'t want to donate, never remind',
'DonateRemindWeek' => 'Not yet, remind again in 1 week',
'DonateYes' => 'Yes, I\'d like to donate now',
'Download' => 'Download',
'Duration' => 'Duration',
'Edit' => 'Edit',
'Email' => 'Email',
'EnableAlarms' => 'Enable Alarms',
'Enabled' => 'Enabled',
'EnterNewFilterName' => 'Enter new filter name',
'ErrorBrackets' => 'Error, please check you have an equal number of opening and closing brackets',
'Error' => 'Error',
'ErrorValidValue' => 'Error, please check that all terms have a valid value',
'Etc' => 'etc',
'Event' => 'Event',
'EventFilter' => 'Event Filter',
'EventId' => 'Event Id',
'EventName' => 'Event Name',
'EventPrefix' => 'Event Prefix',
'Events' => 'Events',
'Exclude' => 'Exclude',
'Execute' => 'Execute',
'ExportDetails' => 'Export Event Details',
'Export' => 'Export',
'ExportFailed' => 'Export Failed',
'ExportFormat' => 'Export File Format',
'ExportFormatTar' => 'Tar',
'ExportFormatZip' => 'Zip',
'ExportFrames' => 'Export Frame Details',
'ExportImageFiles' => 'Export Image Files',
'Exporting' => 'Exporting',
'ExportMiscFiles' => 'Export Other Files (if present)',
'ExportOptions' => 'Export Options',
'ExportSucceeded' => 'Export Succeeded',
'ExportVideoFiles' => 'Export Video Files (if present)',
'Far' => 'Far',
'FastForward' => 'Fast Forward',
'Feed' => 'Feed',
'FileColours' => 'File Colours',
'File' => 'File',
'FilePath' => 'File Path',
'FilterArchiveEvents' => 'Archive all matches',
'FilterDeleteEvents' => 'Delete all matches',
'FilterEmailEvents' => 'Email details of all matches',
'FilterExecuteEvents' => 'Execute command on all matches',
'FilterMessageEvents' => 'Message details of all matches',
'FilterPx' => 'Filter Px',
'Filters' => 'Filters',
'FilterUnset' => 'You must specify a filter width and height',
'FilterUploadEvents' => 'Upload all matches',
'FilterVideoEvents' => 'Create video for all matches',
'First' => 'First',
'FlippedHori' => 'Flipped Horizontally',
'FlippedVert' => 'Flipped Vertically',
'Focus' => 'Focus',
'ForceAlarm' => 'Force Alarm',
'Format' => 'Format',
'FPS' => 'fps',
'FPSReportInterval' => 'FPS Report Interval',
'Frame' => 'Frame',
'FrameId' => 'Frame Id',
'FrameRate' => 'Frame Rate',
'Frames' => 'Frames',
'FrameSkip' => 'Frame Skip',
'FTP' => 'FTP',
'Func' => 'Func',
'Function' => 'Function',
'Gain' => 'Gain',
'General' => 'General',
'GenerateVideo' => 'Generate Video',
'GeneratingVideo' => 'Generating Video',
'GoToZoneMinder' => 'Go to ZoneMinder.com',
'Grey' => 'Grey',
'Group' => 'Group',
'Groups' => 'Groups',
'HasFocusSpeed' => 'Has Focus Speed',
'HasGainSpeed' => 'Has Gain Speed',
'HasHomePreset' => 'Has Home Preset',
'HasIrisSpeed' => 'Has Iris Speed',
'HasPanSpeed' => 'Has Pan Speed',
'HasPresets' => 'Has Presets',
'HasTiltSpeed' => 'Has Tilt Speed',
'HasTurboPan' => 'Has Turbo Pan',
'HasTurboTilt' => 'Has Turbo Tilt',
'HasWhiteSpeed' => 'Has White Bal. Speed',
'HasZoomSpeed' => 'Has Zoom Speed',
'HighBW' => 'High&nbsp;B/W',
'High' => 'High',
'Home' => 'Home',
'Hour' => 'Hour',
'Hue' => 'Hue',
'Id' => 'Id',
'Idle' => 'Idle',
'Ignore' => 'Ignore',
'ImageBufferSize' => 'Image Buffer Size (frames)',
'Image' => 'Image',
'Images' => 'Images',
'Include' => 'Include',
'In' => 'In',
'Inverted' => 'Inverted',
'Iris' => 'Iris',
'KeyString' => 'Key String',
'Label' => 'Label',
'Language' => 'Language',
'Last' => 'Last',
'LimitResultsPost' => 'results only', // This is used at the end of the phrase 'Limit to first N results only'
'LimitResultsPre' => 'Limit to first', // This is used at the beginning of the phrase 'Limit to first N results only'
'LinkedMonitors' => 'Linked Monitors',
'List' => 'List',
'Load' => 'Load',
'Local' => 'Local',
'LoggedInAs' => 'Logged in as',
'LoggingIn' => 'Logging In',
'Login' => 'Login',
'Logout' => 'Logout',
'LowBW' => 'Low&nbsp;B/W',
'Low' => 'Low',
'Main' => 'Main',
'Man' => 'Man',
'Manual' => 'Manual',
'Mark' => 'Mark',
'MaxBandwidth' => 'Max Bandwidth',
'MaxBrScore' => 'Max.<br/>Score',
'MaxFocusRange' => 'Max Focus Range',
'MaxFocusSpeed' => 'Max Focus Speed',
'MaxFocusStep' => 'Max Focus Step',
'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',
'MaxTiltRange' => 'Max Tilt Range',
'MaxTiltSpeed' => 'Max Tilt Speed',
'MaxTiltStep' => 'Max Tilt Step',
'MaxWhiteRange' => 'Max White Bal. Range',
'MaxWhiteSpeed' => 'Max White Bal. Speed',
'MaxWhiteStep' => 'Max White Bal. Step',
'MaxZoomRange' => 'Max Zoom Range',
'MaxZoomSpeed' => 'Max Zoom Speed',
'MaxZoomStep' => 'Max Zoom Step',
'MediumBW' => 'Medium&nbsp;B/W',
'Medium' => 'Medium',
'MinAlarmAreaLtMax' => 'Minimum alarm area should be less than maximum',
'MinAlarmAreaUnset' => 'You must specify the minimum alarm pixel count',
'MinBlobAreaLtMax' => 'Minimum blob area should be less than maximum',
'MinBlobAreaUnset' => 'You must specify the minimum blob pixel count',
'MinBlobLtMinFilter' => 'Minimum blob area should be less than or equal to minimum filter area',
'MinBlobsLtMax' => 'Minimum blobs should be less than maximum',
'MinBlobsUnset' => 'You must specify the minimum blob count',
'MinFilterAreaLtMax' => 'Minimum filter area should be less than maximum',
'MinFilterAreaUnset' => 'You must specify the minimum filter pixel count',
'MinFilterLtMinAlarm' => 'Minimum filter area should be less than or equal to minimum alarm area',
'MinFocusRange' => 'Min Focus Range',
'MinFocusSpeed' => 'Min Focus Speed',
'MinFocusStep' => 'Min Focus Step',
'MinGainRange' => 'Min Gain Range',
'MinGainSpeed' => 'Min Gain Speed',
'MinGainStep' => 'Min Gain Step',
'MinIrisRange' => 'Min Iris Range',
'MinIrisSpeed' => 'Min Iris Speed',
'MinIrisStep' => 'Min Iris Step',
'MinPanRange' => 'Min Pan Range',
'MinPanSpeed' => 'Min Pan Speed',
'MinPanStep' => 'Min Pan Step',
'MinPixelThresLtMax' => 'Minimum pixel threshold should be less than maximum',
'MinPixelThresUnset' => 'You must specify a minimum pixel threshold',
'MinTiltRange' => 'Min Tilt Range',
'MinTiltSpeed' => 'Min Tilt Speed',
'MinTiltStep' => 'Min Tilt Step',
'MinWhiteRange' => 'Min White Bal. Range',
'MinWhiteSpeed' => 'Min White Bal. Speed',
'MinWhiteStep' => 'Min White Bal. Step',
'MinZoomRange' => 'Min Zoom Range',
'MinZoomSpeed' => 'Min Zoom Speed',
'MinZoomStep' => 'Min Zoom Step',
'Misc' => 'Misc',
'MonitorIds' => 'Monitor&nbsp;Ids',
'Monitor' => 'Monitor',
'MonitorPresetIntro' => 'Select an appropriate preset from the list below.<br><br>Please note that this may overwrite any values you already have configured for this monitor.<br><br>',
'MonitorPreset' => 'Monitor Preset',
'Monitors' => 'Monitors',
'Montage' => 'Montage',
'Month' => 'Month',
'Move' => 'Move',
'MustBeGe' => 'must be greater than or equal to',
'MustBeLe' => 'must be less than or equal to',
'MustConfirmPassword' => 'You must confirm the password',
'MustSupplyPassword' => 'You must supply a password',
'MustSupplyUsername' => 'You must supply a username',
'Name' => 'Name',
'Near' => 'Near',
'Network' => 'Network',
'NewGroup' => 'New Group',
'NewLabel' => 'New Label',
'New' => 'New',
'NewPassword' => 'New Password',
'NewState' => 'New State',
'NewUser' => 'New User',
'Next' => 'Next',
'NoFramesRecorded' => 'There are no frames recorded for this event',
'NoGroup' => 'No Group',
'NoneAvailable' => 'None available',
'None' => 'None',
'No' => 'No',
'Normal' => 'Normal',
'NoSavedFilters' => 'NoSavedFilters',
'NoStatisticsRecorded' => 'There are no statistics recorded for this event/frame',
'Notes' => 'Notes',
'NumPresets' => 'Num Presets',
'Off' => 'Off',
'On' => 'On',
'Open' => 'Open',
'OpEq' => 'equal to',
'OpGtEq' => 'greater than or equal to',
'OpGt' => 'greater than',
'OpIn' => 'in set',
'OpLtEq' => 'less than or equal to',
'OpLt' => 'less than',
'OpMatches' => 'matches',
'OpNe' => 'not equal to',
'OpNotIn' => 'not in set',
'OpNotMatches' => 'does not match',
'OptionHelp' => 'Option Help',
'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.',
'Options' => 'Options',
'Order' => 'Order',
'OrEnterNewName' => 'or enter new name',
'Orientation' => 'Orientation',
'Out' => 'Out',
'OverwriteExisting' => 'Overwrite Existing',
'Paged' => 'Paged',
'PanLeft' => 'Pan Left',
'Pan' => 'Pan',
'PanRight' => 'Pan Right',
'PanTilt' => 'Pan/Tilt',
'Parameter' => 'Parameter',
'Password' => 'Password',
'PasswordsDifferent' => 'The new and confirm passwords are different',
'Paths' => 'Paths',
'Pause' => 'Pause',
'PhoneBW' => 'Phone&nbsp;B/W',
'Phone' => 'Phone',
'PixelDiff' => 'Pixel Diff',
'Pixels' => 'pixels',
'PlayAll' => 'Play All',
'Play' => 'Play',
'PleaseWait' => 'Please Wait',
'Point' => 'Point',
'PostEventImageBuffer' => 'Post Event Image Count',
'PreEventImageBuffer' => 'Pre Event Image Count',
'PreserveAspect' => 'Preserve Aspect Ratio',
'Preset' => 'Preset',
'Presets' => 'Presets',
'Prev' => 'Prev',
'Protocol' => 'Protocol',
'Rate' => 'Rate',
'Real' => 'Real',
'Record' => 'Record',
'RefImageBlendPct' => 'Reference Image Blend %ge',
'Refresh' => 'Refresh',
'RemoteHostName' => 'Remote Host Name',
'RemoteHostPath' => 'Remote Host Path',
'RemoteHostPort' => 'Remote Host Port',
'RemoteImageColours' => 'Remote Image Colours',
'Remote' => 'Remote',
'Rename' => 'Rename',
'ReplayAll' => 'All Events',
'ReplayGapless' => 'Gapless Events',
'Replay' => 'Replay',
'ReplaySingle' => 'Single Event',
'ResetEventCounts' => 'Reset Event Counts',
'Reset' => 'Reset',
'Restarting' => 'Restarting',
'Restart' => 'Restart',
'RestrictedCameraIds' => 'Restricted Camera Ids',
'RestrictedMonitors' => 'Restricted Monitors',
'ReturnDelay' => 'Return Delay',
'ReturnLocation' => 'Return Location',
'Rewind' => 'Rewind',
'RotateLeft' => 'Rotate Left',
'RotateRight' => 'Rotate Right',
'RunMode' => 'Run Mode',
'Running' => 'Running',
'RunState' => 'Run State',
'SaveAs' => 'Save as',
'SaveFilter' => 'Save Filter',
'Save' => 'Save',
'Scale' => 'Scale',
'Score' => 'Score',
'Secs' => 'Secs',
'Sectionlength' => 'Section length',
'SelectMonitors' => 'Select Monitors',
'Select' => 'Select',
'SelfIntersecting' => 'Polygon edges must not intersect',
'SetLearnPrefs' => 'Set Learn Prefs', // This can be ignored for now
'SetNewBandwidth' => 'Set New Bandwidth',
'SetPreset' => 'Set Preset',
'Set' => 'Set',
'Settings' => 'Settings',
'ShowFilterWindow' => 'Show Filter Window',
'ShowTimeline' => 'Show Timeline',
'SignalCheckColour' => 'Signal Check Colour',
'Size' => 'Size',
'Sleep' => 'Sleep',
'SortAsc' => 'Asc',
'SortBy' => 'Sort by',
'SortDesc' => 'Desc',
'Source' => 'Source',
'SourceType' => 'Source Type',
'SpeedHigh' => 'High Speed',
'SpeedLow' => 'Low Speed',
'SpeedMedium' => 'Medium Speed',
'Speed' => 'Speed',
'SpeedTurbo' => 'Turbo Speed',
'Start' => 'Start',
'State' => 'State',
'Stats' => 'Stats',
'Status' => 'Status',
'StepBack' => 'Step Back',
'StepForward' => 'Step Forward',
'StepLarge' => 'Large Step',
'StepMedium' => 'Medium Step',
'StepNone' => 'No Step',
'StepSmall' => 'Small Step',
'Step' => 'Step',
'Stills' => 'Stills',
'Stopped' => 'Stopped',
'Stop' => 'Stop',
'StreamReplayBuffer' => 'Stream Replay Image Buffer',
'Stream' => 'Stream',
'Submit' => 'Submit',
'System' => 'System',
'Tele' => 'Tele',
'Thumbnail' => 'Thumbnail',
'Tilt' => 'Tilt',
'TimeDelta' => 'Time Delta',
'Timeline' => 'Timeline',
'TimestampLabelFormat' => 'Timestamp Label Format',
'TimestampLabelX' => 'Timestamp Label X',
'TimestampLabelY' => 'Timestamp Label Y',
'Timestamp' => 'Timestamp',
'TimeStamp' => 'Time Stamp',
'Time' => 'Time',
'Today' => 'Today',
'Tools' => 'Tools',
'TotalBrScore' => 'Total<br/>Score',
'TrackDelay' => 'Track Delay',
'TrackMotion' => 'Track Motion',
'Triggers' => 'Triggers',
'TurboPanSpeed' => 'Turbo Pan Speed',
'TurboTiltSpeed' => 'Turbo Tilt Speed',
'Type' => 'Type',
'Unarchive' => 'Unarchive',
'Units' => 'Units',
'Unknown' => 'Unknown',
'UpdateAvailable' => 'An update to ZoneMinder is available.',
'UpdateNotNecessary' => 'No update is necessary.',
'Update' => 'Update',
'UseFilterExprsPost' => '&nbsp;filter&nbsp;expressions', // This is used at the end of the phrase 'use N filter expressions'
'UseFilterExprsPre' => 'Use&nbsp;', // This is used at the beginning of the phrase 'use N filter expressions'
'UseFilter' => 'Use Filter',
'Username' => 'Username',
'Users' => 'Users',
'User' => 'User',
'Value' => 'Value',
'VersionIgnore' => 'Ignore this version',
'VersionRemindDay' => 'Remind again in 1 day',
'VersionRemindHour' => 'Remind again in 1 hour',
'VersionRemindNever' => 'Don\'t remind about new versions',
'VersionRemindWeek' => 'Remind again in 1 week',
'Version' => 'Version',
'VideoFormat' => 'Video Format',
'VideoGenFailed' => 'Video Generation Failed!',
'VideoGenFiles' => 'Existing Video Files',
'VideoGenNoFiles' => 'No Video Files Found',
'VideoGenParms' => 'Video Generation Parameters',
'VideoGenSucceeded' => 'Video Generation Succeeded!',
'VideoSize' => 'Video Size',
'Video' => 'Video',
'ViewAll' => 'View All',
'ViewEvent' => 'View Event',
'ViewPaged' => 'View Paged',
'View' => 'View',
'Wake' => 'Wake',
'WarmupFrames' => 'Warmup Frames',
'Watch' => 'Watch',
'WebColour' => 'Web Colour',
'Web' => 'Web',
'Week' => 'Week',
'WhiteBalance' => 'White Balance',
'White' => 'White',
'Wide' => 'Wide',
'X10ActivationString' => 'X10 Activation String',
'X10InputAlarmString' => 'X10 Input Alarm String',
'X10OutputAlarmString' => 'X10 Output Alarm String',
'X10' => 'X10',
'X' => 'X',
'Yes' => 'Yes',
'YouNoPerms' => 'You do not have permissions to access this resource.',
'Y' => 'Y',
'ZoneAlarmColour' => 'Alarm Colour (Red/Green/Blue)',
'ZoneArea' => 'Zone Area',
'ZoneFilterSize' => 'Filter Width/Height (pixels)',
'ZoneMinMaxAlarmArea' => 'Min/Max Alarmed Area',
'ZoneMinMaxBlobArea' => 'Min/Max Blob Area',
'ZoneMinMaxBlobs' => 'Min/Max Blobs',
'ZoneMinMaxFiltArea' => 'Min/Max Filtered Area',
'ZoneMinMaxPixelThres' => 'Min/Max Pixel Threshold (0-255)',
'ZoneOverloadFrames' => 'Overload Frame Ignore Count',
'Zones' => 'Zones',
'Zone' => 'Zone',
'ZoomIn' => 'Zoom In',
'ZoomOut' => 'Zoom Out',
'Zoom' => 'Zoom',
);
// Complex replacements with formatting and/or placements, must be passed through sprintf
$CLANG = array(
'CurrentLogin' => 'Current login is \'%1$s\'',
'EventCount' => '%1$s %2$s', // For example '37 Events' (from Vlang below)
'LastEvents' => 'Last %1$s %2$s', // For example 'Last 37 Events' (from Vlang below)
'LatestRelease' => 'The latest release is v%1$s, you have v%2$s.',
'MonitorCount' => '%1$s %2$s', // For example '4 Monitors' (from Vlang below)
'MonitorFunction' => 'Monitor %1$s Function',
'RunningRecentVer' => 'You are running the most recent version of ZoneMinder, v%s.',
);
// The next section allows you to describe a series of word ending and counts used to
// generate the correctly conjugated forms of words depending on a count that is associated
// with that word.
// This intended to allow phrases such a '0 potatoes', '1 potato', '2 potatoes' etc to
// conjugate correctly with the associated count.
// In some languages such as English this is fairly simple and can be expressed by assigning
// a count with a singular or plural form of a word and then finding the nearest (lower) value.
// So '0' of something generally ends in 's', 1 of something is singular and has no extra
// ending and 2 or more is a plural and ends in 's' also. So to find the ending for '187' of
// something you would find the nearest lower count (2) and use that ending.
//
// So examples of this would be
// $zmVlangPotato = array( 0=>'Potatoes', 1=>'Potato', 2=>'Potatoes' );
// $zmVlangSheep = array( 0=>'Sheep' );
//
// where you can have as few or as many entries in the array as necessary
// If your language is similar in form to this then use the same format and choose the
// appropriate zmVlang function below.
// If however you have a language with a different format of plural endings then another
// approach is required . For instance in Russian the word endings change continuously
// depending on the last digit (or digits) of the numerator. In this case then zmVlang
// arrays could be written so that the array index just represents an arbitrary 'type'
// and the zmVlang function does the calculation about which version is appropriate.
//
// So an example in Russian might be (using English words, and made up endings as I
// don't know any Russian!!)
// 'Potato' => array( 1=>'Potati', 2=>'Potaton', 3=>'Potaten' ),
//
// and the zmVlang function decides that the first form is used for counts ending in
// 0, 5-9 or 11-19 and the second form when ending in 1 etc.
//
// Variable arrays expressing plurality, see the zmVlang description above
$VLANG = array(
'Event' => array( 0=>'Events', 1=>'Event', 2=>'Events' ),
'Monitor' => array( 0=>'Monitors', 1=>'Monitor', 2=>'Monitors' ),
);
// You will need to choose or write a function that can correlate the plurality string arrays
// with variable counts. This is used to conjugate the Vlang arrays above with a number passed
// in to generate the correct noun form.
//
// In languages such as English this is fairly simple
// Note this still has to be used with printf etc to get the right formating
function zmVlang( $langVarArray, $count )
{
krsort( $langVarArray );
foreach ( $langVarArray as $key=>$value )
{
if ( abs($count) >= $key )
{
return( $value );
}
}
die( 'Error, unable to correlate variable language string' );
}
// This is an version that could be used in the Russian example above
// The rules are that the first word form is used if the count ends in
// 0, 5-9 or 11-19. The second form is used then the count ends in 1
// (not including 11 as above) and the third form is used when the
// count ends in 2-4, again excluding any values ending in 12-14.
//
// function zmVlang( $langVarArray, $count )
// {
// $secondlastdigit = substr( $count, -2, 1 );
// $lastdigit = substr( $count, -1, 1 );
// // or
// // $secondlastdigit = ($count/10)%10;
// // $lastdigit = $count%10;
//
// // Get rid of the special cases first, the teens
// if ( $secondlastdigit == 1 && $lastdigit != 0 )
// {
// return( $langVarArray[1] );
// }
// switch ( $lastdigit )
// {
// case 0 :
// case 5 :
// case 6 :
// case 7 :
// case 8 :
// case 9 :
// {
// return( $langVarArray[1] );
// break;
// }
// case 1 :
// {
// return( $langVarArray[2] );
// break;
// }
// case 2 :
// case 3 :
// case 4 :
// {
// return( $langVarArray[3] );
// break;
// }
// }
// die( 'Error, unable to correlate variable language string' );
// }
// This is an example of how the function is used in the code which you can uncomment and
// use to test your custom function.
//$monitors = array();
//$monitors[] = 1; // Choose any number
//echo sprintf( $CLANG['MonitorCount'], count($monitors), zmVlang( $VLANG['VlangMonitor'], count($monitors) ) );
// In this section you can override the default prompt and help texts for the options area
// These overrides are in the form show below where the array key represents the option name minus the initial ZM_
// So for example, to override the help text for ZM_LANG_DEFAULT do
$OLANG = array(
// 'LANG_DEFAULT' => array(
// 'Prompt' => "This is a new prompt for this option",
// 'Help' => "This is some new help for this option which will be displayed in the popup window when the ? is clicked"
// ),
);
?>

View File

@ -70,11 +70,11 @@ require_once( 'zm_lang_en_gb.php' );
// setlocale( LC_TIME, 'en_GB' ); Date and time formatting 4.3.0 and after // setlocale( LC_TIME, 'en_GB' ); Date and time formatting 4.3.0 and after
// Simple String Replacements // Simple String Replacements
$zmSlang24BitColour = '24 bit color'; $SLANG['24BitColour'] = '24 bit color';
$zmSlang8BitGrey = '8 bit grayscale'; $SLANG['8BitGrey'] = '8 bit grayscale';
$zmSlangColour = 'Color'; $SLANG['Colour'] = 'Color';
$zmSlangGrey = 'Gray'; $SLANG['Grey'] = 'Gray';
$zmSlangRemoteImageColours = 'Remote Image Colors'; $SLANG['RemoteImageColours'] = 'Remote Image Colors';
$zmSlangZoneAlarmColour = 'Alarm Color (Red/Green/Blue)'; $SLANG['ZoneAlarmColour'] = 'Alarm Color (Red/Green/Blue)';
?> ?>

657
web/lang/es_ar.php Normal file
View File

@ -0,0 +1,657 @@
<?php
//
// ZoneMinder web Argentinian Spanish language file, $Date$, $Revision$
// Copyright (C) 2003, 2004, 2005, 2006 Philip Coombes
//
// This program 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 program 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
//
// ZoneMinder Spanish 'Argentina' Translation by Fernando Diaz.
// Simple String Replacements
$SLANG = array(
'24BitColour' => 'Color 24 bits',
'8BitGrey' => 'Grises 8 bits',
'Action' => 'Action',
'Actual' => 'Actual',
'AddNewControl' => 'Add New Control',
'AddNewMonitor' => 'Agregar Nuevo Monitor',
'AddNewUser' => 'Agregar Nuevo Usuario',
'AddNewZone' => 'Agregar Nueva Zona',
'Alarm' => 'Alarma',
'AlarmBrFrames' => 'Alarma<br/>Cuadros',
'AlarmFrameCount' => 'Alarm Frame Count',
'AlarmFrame' => 'Cuadro Alarma',
'AlarmLimits' => 'Alarm Limits',
'AlarmMaximumFPS' => 'Alarm Maximum FPS',
'AlarmPx' => 'Alarm Px',
'AlarmRGBUnset' => 'You must set an alarm RGB colour',
'Alert' => 'Alerta',
'All' => 'Todo',
'Apply' => 'Aplicar',
'ApplyingStateChange' => 'Aplicar Cambio Estado',
'ArchArchived' => 'Solo Archivados',
'Archive' => 'Archivar',
'Archived' => 'Archived',
'ArchUnarchived' => 'Solo Sin Archivar',
'Area' => 'Area',
'AreaUnits' => 'Area (px/%)',
'AttrAlarmFrames' => 'Alarm Frames',
'AttrArchiveStatus' => 'Estado Archivo',
'AttrAvgScore' => 'Puntaje Prom.',
'AttrCause' => 'Cause',
'AttrDate' => 'Fecha',
'AttrDateTime' => 'Fecha/Hora',
'AttrDiskBlocks' => 'Disk Blocks',
'AttrDiskPercent' => 'Disk Percent',
'AttrDuration' => 'Duración',
'AttrFrames' => 'Cuadros',
'AttrId' => 'Id',
'AttrMaxScore' => 'Puntaje Máximo',
'AttrMonitorId' => 'Monitor Id',
'AttrMonitorName' => 'Nombre Monitor',
'AttrMontage' => 'Cámara Múltiple',
'AttrName' => 'Name',
'AttrNotes' => 'Notes',
'AttrSystemLoad' => 'System Load',
'AttrTime' => 'Hora',
'AttrTotalScore' => 'Puntaje Total',
'AttrWeekday' => 'Día Semana',
'Auto' => 'Auto',
'AutoStopTimeout' => 'Auto Stop Timeout',
'AvgBrScore' => 'Punt.<br/>Promedio',
'Background' => 'Background',
'BackgroundFilter' => 'Run filter in background',
'BadAlarmFrameCount' => 'Alarm frame count must be an integer of one or more',
'BadAlarmMaxFPS' => 'Alarm Maximum FPS must be a positive integer or floating point value',
'BadChannel' => 'Channel must be set to an integer of zero or more',
'BadDevice' => 'Device must be set to a valid value',
'BadFormat' => 'Format must be set to an integer of zero or more',
'BadFPSReportInterval' => 'FPS report interval buffer count must be an integer of 100 or more',
'BadFrameSkip' => 'Frame skip count must be an integer of zero or more',
'BadHeight' => 'Height must be set to a valid value',
'BadHost' => 'Host must be set to a valid ip address or hostname, do not include http://',
'BadImageBufferCount' => 'Image buffer size must be an integer of 10 or more',
'BadLabelX' => 'Label X co-ordinate must be set to an integer of zero or more',
'BadLabelY' => 'Label Y co-ordinate must be set to an integer of zero or more',
'BadMaxFPS' => 'Maximum FPS must be a positive integer or floating point value',
'BadNameChars' => 'Los nombres pueden contener solamente caracteres alfanuméricos más el guión y la raya',
'BadPath' => 'Path must be set to a valid value',
'BadPort' => 'Port must be set to a valid number',
'BadPostEventCount' => 'Post event image count must be an integer of zero or more',
'BadPreEventCount' => 'Pre event image count must be at least zero, and less than image buffer size',
'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',
'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',
'BadWidth' => 'Width must be set to a valid value',
'Bandwidth' => 'Velocidad',
'BlobPx' => 'Blob Px',
'Blobs' => 'Blobs',
'BlobSizes' => 'Blob Sizes',
'Brightness' => 'Brillo',
'Buffers' => 'Buffers',
'CanAutoFocus' => 'Can Auto Focus',
'CanAutoGain' => 'Can Auto Gain',
'CanAutoIris' => 'Can Auto Iris',
'CanAutoWhite' => 'Can Auto White Bal.',
'CanAutoZoom' => 'Can Auto Zoom',
'Cancel' => 'Cancelar',
'CancelForcedAlarm' => 'Cancelar Alarma Forzada',
'CanFocusAbs' => 'Can Focus Absolute',
'CanFocus' => 'Can Focus',
'CanFocusCon' => 'Can Focus Continuous',
'CanFocusRel' => 'Can Focus Relative',
'CanGainAbs' => 'Can Gain Absolute',
'CanGain' => 'Can Gain ',
'CanGainCon' => 'Can Gain Continuous',
'CanGainRel' => 'Can Gain Relative',
'CanIrisAbs' => 'Can Iris Absolute',
'CanIris' => 'Can Iris',
'CanIrisCon' => 'Can Iris Continuous',
'CanIrisRel' => 'Can Iris Relative',
'CanMoveAbs' => 'Can Move Absolute',
'CanMove' => 'Can Move',
'CanMoveCon' => 'Can Move Continuous',
'CanMoveDiag' => 'Can Move Diagonally',
'CanMoveMap' => 'Can Move Mapped',
'CanMoveRel' => 'Can Move Relative',
'CanPan' => 'Can Pan' ,
'CanReset' => 'Can Reset',
'CanSetPresets' => 'Can Set Presets',
'CanSleep' => 'Can Sleep',
'CanTilt' => 'Can Tilt',
'CanWake' => 'Can Wake',
'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',
'CanZoomCon' => 'Can Zoom Continuous',
'CanZoomRel' => 'Can Zoom Relative',
'CaptureHeight' => 'Captura Alto',
'CapturePalette' => 'Captura Paleta',
'CaptureWidth' => 'Captura Ancho',
'Cause' => 'Cause',
'CheckMethod' => 'Alarm Check Method',
'ChooseFilter' => 'Elegir Filtro',
'ChoosePreset' => 'Choose Preset',
'Close' => 'Cerrar',
'Colour' => 'Color',
'Command' => 'Command',
'Config' => 'Config.',
'ConfiguredFor' => 'Configurado Para',
'ConfirmDeleteEvents' => 'Are you sure you wish to delete the selected events?',
'ConfirmPassword' => 'Confirmar Contraseña',
'ConjAnd' => 'y',
'ConjOr' => 'o',
'Console' => 'Consola',
'Console' => 'Console',
'ContactAdmin' => 'Contacte el Administrador para detalles.',
'Continue' => 'Continue',
'Contrast' => 'Contraste',
'ControlAddress' => 'Control Address',
'ControlCap' => 'Control Capability',
'ControlCaps' => 'Control Capabilities',
'Control' => 'Control',
'ControlDevice' => 'Control Device',
'Controllable' => 'Controllable',
'ControlType' => 'Control Type',
'Cycle' => 'Cycle',
'CycleWatch' => 'Cycle Watch',
'Day' => 'Día',
'Debug' => 'Debug',
'DefaultRate' => 'Default Rate',
'DefaultScale' => 'Default Scale',
'DefaultView' => 'Default View',
'DeleteAndNext' => 'Borrar &amp; Próximo',
'DeleteAndPrev' => 'Borrar &amp; Anterior',
'Delete' => 'Borrar',
'DeleteSavedFilter' => 'Borrar Filtro Guardado',
'Description' => 'Descripción',
'DeviceChannel' => 'Canal',
'DeviceFormat' => 'Señal',
'DeviceNumber' => 'Fuente',
'DevicePath' => 'Device Path',
'Devices' => 'Devices',
'Dimensions' => 'Dimensiones',
'DisableAlarms' => 'Disable Alarms',
'Disk' => 'Disco',
'DonateAlready' => 'No, I\'ve already donated',
'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' => 'Please Donate',
'DonateRemindDay' => 'Not yet, remind again in 1 day',
'DonateRemindHour' => 'Not yet, remind again in 1 hour',
'DonateRemindMonth' => 'Not yet, remind again in 1 month',
'DonateRemindNever' => 'No, I don\'t want to donate, never remind',
'DonateRemindWeek' => 'Not yet, remind again in 1 week',
'DonateYes' => 'Yes, I\'d like to donate now',
'Download' => 'Download',
'Duration' => 'Duración',
'Edit' => 'Editar',
'Email' => 'Email',
'EnableAlarms' => 'Enable Alarms',
'Enabled' => 'Habilitado',
'EnterNewFilterName' => 'Ingresar Nuevo Nombre De Filtro',
'ErrorBrackets' => 'Error, Revisar si tiene la misma cantidad de paréntesis de apertura',
'Error' => 'Error',
'ErrorValidValue' => 'Error, Revisar si los términos tienen nombres validos',
'Etc' => 'etc',
'Event' => 'Evento',
'EventFilter' => 'Filtro de Evento',
'EventId' => 'Event Id',
'EventName' => 'Event Name',
'EventPrefix' => 'Event Prefix',
'Events' => 'Eventos',
'Exclude' => 'Excluir',
'Execute' => 'Execute',
'ExportDetails' => 'Export Event Details',
'Export' => 'Export',
'ExportFailed' => 'Export Failed',
'ExportFormat' => 'Export File Format',
'ExportFormatTar' => 'Tar',
'ExportFormatZip' => 'Zip',
'ExportFrames' => 'Export Frame Details',
'ExportImageFiles' => 'Export Image Files',
'Exporting' => 'Exporting',
'ExportMiscFiles' => 'Export Other Files (if present)',
'ExportOptions' => 'Export Options',
'ExportVideoFiles' => 'Export Video Files (if present)',
'Far' => 'Far',
'FastForward' => 'Fast Forward',
'Feed' => 'Vista',
'FileColours' => 'File Colours',
'File' => 'File',
'FilePath' => 'File Path',
'FilterArchiveEvents' => 'Archivar todos los eventos',
'FilterDeleteEvents' => 'Borrar todos los eventos',
'FilterEmailEvents' => 'Mandar un mail de todos los eventos',
'FilterExecuteEvents' => 'Ejecutar un comando en las coincidencias',
'FilterMessageEvents' => 'Mandar un mensaje de los eventos',
'FilterPx' => 'Filtro Px',
'Filters' => 'Filters',
'FilterUnset' => 'You must specify a filter width and height',
'FilterUploadEvents' => 'Subir los eventos que coincidan',
'FilterVideoEvents' => 'Create video for all matches',
'First' => 'Primero',
'FlippedHori' => 'Flipped Horizontally',
'FlippedVert' => 'Flipped Vertically',
'Focus' => 'Focus',
'ForceAlarm' => 'Forzar Alarma',
'Format' => 'Format',
'FPS' => 'fps',
'FPSReportInterval' => 'Intervalo de Reporte FPS',
'Frame' => 'Cuadro',
'FrameId' => 'Id Cuadro',
'FrameRate' => 'Velocidad del video',
'Frames' => 'Cuadros',
'FrameSkip' => 'Saltear Cuadro',
'FTP' => 'FTP',
'Func' => 'Func',
'Function' => 'Función',
'Gain' => 'Gain',
'General' => 'General',
'GenerateVideo' => 'Crear Video',
'GeneratingVideo' => 'Creando Video',
'GoToZoneMinder' => 'Ir a Zoneminder.com',
'Grey' => 'Gris',
'Group' => 'Group',
'Groups' => 'Groups',
'HasFocusSpeed' => 'Has Focus Speed',
'HasGainSpeed' => 'Has Gain Speed',
'HasHomePreset' => 'Has Home Preset',
'HasIrisSpeed' => 'Has Iris Speed',
'HasPanSpeed' => 'Has Pan Speed',
'HasPresets' => 'Has Presets',
'HasTiltSpeed' => 'Has Tilt Speed',
'HasTurboPan' => 'Has Turbo Pan',
'HasTurboTilt' => 'Has Turbo Tilt',
'HasWhiteSpeed' => 'Has White Bal. Speed',
'HasZoomSpeed' => 'Has Zoom Speed',
'High' => 'Alta',
'HighBW' => 'Alta&nbsp;B/W',
'Home' => 'Home',
'Hour' => 'Hora',
'Hue' => 'Saturación',
'Id' => 'Id',
'Idle' => 'Pasivo',
'Ignore' => 'Ignorar',
'ImageBufferSize' => 'Tamaño del Buffer de Imagen',
'Image' => 'Imagen',
'Images' => 'Images',
'Include' => 'Incluir',
'In' => 'In',
'Inverted' => 'Invertido',
'Iris' => 'Iris',
'Isequalto' => 'Es igual a',
'IsEqualTo' => 'is equal to',
'KeyString' => 'Key String',
'Label' => 'Label',
'Language' => 'Lenguaje',
'Last' => 'Ultimo',
'LimitResultsPost' => 'Resultados;', // This is used at the end of the phrase 'Limit to first N results only'
'LimitResultsPre' => 'Solo los primeros', // This is used at the beginning of the phrase 'Limit to first N results only'
'LinkedMonitors' => 'Linked Monitors',
'List' => 'List',
'Load' => 'Carga',
'Local' => 'Local',
'LoggedInAs' => 'Registrado Como',
'LoggingIn' => 'Ingresando',
'Login' => 'Ingresar',
'Logout' => 'Salir',
'Low' => 'Baja',
'LowBW' => 'Baja&nbsp;B/W',
'Main' => 'Main',
'Man' => 'Man',
'Manual' => 'Manual',
'Mark' => 'Marca',
'MaxBandwidth' => 'Max Bandwidth',
'MaxBrScore' => 'Puntaje<br/>Max.',
'MaxFocusRange' => 'Max Focus Range',
'MaxFocusSpeed' => 'Max Focus Speed',
'MaxFocusStep' => 'Max Focus Step',
'MaxGainRange' => 'Max Gain Range',
'MaxGainSpeed' => 'Max Gain Speed',
'MaxGainStep' => 'Max Gain Step',
'MaximumFPS' => 'Maximos 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',
'MaxTiltRange' => 'Max Tilt Range',
'MaxTiltSpeed' => 'Max Tilt Speed',
'MaxTiltStep' => 'Max Tilt Step',
'MaxWhiteRange' => 'Max White Bal. Range',
'MaxWhiteSpeed' => 'Max White Bal. Speed',
'MaxWhiteStep' => 'Max White Bal. Step',
'MaxZoomRange' => 'Max Zoom Range',
'MaxZoomSpeed' => 'Max Zoom Speed',
'MaxZoomStep' => 'Max Zoom Step',
'MediumBW' => 'Media&nbsp;B/W',
'Medium' => 'Media',
'MinAlarmAreaLtMax' => 'Minimum alarm area should be less than maximum',
'MinAlarmAreaUnset' => 'You must specify the minimum alarm pixel count',
'MinBlobAreaLtMax' => 'Minimum blob area should be less than maximum',
'MinBlobAreaUnset' => 'You must specify the minimum blob pixel count',
'MinBlobLtMinFilter' => 'Minimum blob area should be less than or equal to minimum filter area',
'MinBlobsLtMax' => 'Minimum blobs should be less than maximum',
'MinBlobsUnset' => 'You must specify the minimum blob count',
'MinFilterAreaLtMax' => 'Minimum filter area should be less than maximum',
'MinFilterAreaUnset' => 'You must specify the minimum filter pixel count',
'MinFilterLtMinAlarm' => 'Minimum filter area should be less than or equal to minimum alarm area',
'MinFocusRange' => 'Min Focus Range',
'MinFocusSpeed' => 'Min Focus Speed',
'MinFocusStep' => 'Min Focus Step',
'MinGainRange' => 'Min Gain Range',
'MinGainSpeed' => 'Min Gain Speed',
'MinGainStep' => 'Min Gain Step',
'MinIrisRange' => 'Min Iris Range',
'MinIrisSpeed' => 'Min Iris Speed',
'MinIrisStep' => 'Min Iris Step',
'MinPanRange' => 'Min Pan Range',
'MinPanSpeed' => 'Min Pan Speed',
'MinPanStep' => 'Min Pan Step',
'MinPixelThresLtMax' => 'Minimum pixel threshold should be less than maximum',
'MinPixelThresUnset' => 'You must specify a minimum pixel threshold',
'MinTiltRange' => 'Min Tilt Range',
'MinTiltSpeed' => 'Min Tilt Speed',
'MinTiltStep' => 'Min Tilt Step',
'MinWhiteRange' => 'Min White Bal. Range',
'MinWhiteSpeed' => 'Min White Bal. Speed',
'MinWhiteStep' => 'Min White Bal. Step',
'MinZoomRange' => 'Min Zoom Range',
'MinZoomSpeed' => 'Min Zoom Speed',
'MinZoomStep' => 'Min Zoom Step',
'Misc' => 'Otros',
'MonitorIds' => 'Ids&nbsp;Monitor',
'Monitor' => 'Monitor',
'MonitorPresetIntro' => 'Select an appropriate preset from the list below.<br><br>Please note that this may overwrite any values you already have configured for this monitor.<br><br>',
'MonitorPreset' => 'Monitor Preset',
'Monitors' => 'Monitores',
'Montage' => 'Cámara Múltiple',
'Month' => 'Mes',
'Move' => 'Move',
'MustBeGe' => 'Debe ser mayor o igual que',
'MustBeLe' => 'Debe ser menor o igual que',
'MustConfirmPassword' => 'Debe confirmar la contraseña',
'MustSupplyPassword' => 'Debe ingresar una contraseña',
'Name' => 'Nombre',
'Near' => 'Near',
'Network' => 'Red',
'NewGroup' => 'New Group',
'NewLabel' => 'New Label',
'New' => 'Nuevo',
'NewPassword' => 'Nueva Contraseña',
'NewState' => 'Nuevo Estado',
'NewUser' => 'Nuevo Usuario',
'Next' => 'Siguiente',
'NoFramesRecorded' => 'No hay movimientos grabados para este evento',
'NoGroup' => 'No Group',
'NoneAvailable' => 'Ninguno Disponible',
'None' => 'Ninguno',
'No' => 'No',
'Normal' => 'Normal',
'NoSavedFilters' => 'FiltrosNoGuardados',
'NoStatisticsRecorded' => 'No hay estadisticas guardadas para este evento/marco',
'Notes' => 'Notes',
'NumPresets' => 'Num Presets',
'Off' => 'Off',
'On' => 'On',
'Open' => 'Open',
'OpEq' => 'igual que',
'OpGtEq' => 'mayor o igual que',
'OpGt' => 'mayor que',
'OpIn' => 'En sistema',
'OpLtEq' => 'menor o igual que',
'OpLt' => 'menor que',
'OpMatches' => 'Coincide',
'OpNe' => 'distinto que',
'OpNotIn' => 'No en sistema',
'OpNotMatches' => 'No coincide',
'OptionHelp' => 'Ayuda',
'OptionRestartWarning' => 'Estos cambios no se guardaran completamente\nmientras el sistema se ejecute. Cuando termine\nde realizar los cambios asegurese de\nreiniciar Zoneminder.',
'Options' => 'Opciones',
'Order' => 'Order',
'OrEnterNewName' => 'o agregue nombre',
'Orientation' => 'Orientación',
'Out' => 'Out',
'OverwriteExisting' => 'Sobreescribir Exitente',
'Paged' => 'Paged',
'PanLeft' => 'Pan Left',
'Pan' => 'Pan',
'PanRight' => 'Pan Right',
'PanTilt' => 'Pan/Tilt',
'Parameter' => 'Parametro',
'Password' => 'Contraseña',
'PasswordsDifferent' => 'Las contraseñas nueva y de confirmacion son diferentes',
'Paths' => 'Enlaces',
'Pause' => 'Pause',
'PhoneBW' => 'Tel.&nbsp;B/N',
'Phone' => 'Phone',
'Pixels' => 'pixels',
'PlayAll' => 'Play All',
'Play' => 'Play',
'PleaseWait' => 'Espere por favor',
'Point' => 'Point',
'PostEventImageBuffer' => 'Buffer Imagenes despues evento',
'PreEventImageBuffer' => 'Buffer Imagenes antes evento',
'PreserveAspect' => 'Preserve Aspect Ratio',
'Preset' => 'Preset',
'Presets' => 'Presets',
'Prev' => 'Prev',
'Protocol' => 'Protocol',
'Rate' => 'Ritmo',
'Real' => 'Real',
'Record' => 'Registro',
'RefImageBlendPct' => 'Reference Image Blend %ge',
'Refresh' => 'Actualizar',
'RemoteHostName' => 'Nombre Servidor Remoto',
'RemoteHostPath' => 'Enlace Servidor Remoto',
'RemoteHostPort' => 'Puerto Servidor Remoto',
'RemoteImageColours' => 'Remote Image Colours',
'Remote' => 'Remote',
'Rename' => 'Renombrar',
'ReplayAll' => 'All Events',
'ReplayGapless' => 'Gapless Events',
'Replay' => 'Replay',
'ReplaySingle' => 'Single Event',
'ResetEventCounts' => 'Borrar Contador Eventos',
'Reset' => 'Reset',
'Restarting' => 'Reiniciando',
'Restart' => 'Reiniciar',
'RestrictedCameraIds' => 'Id. Camara restringida',
'RestrictedMonitors' => 'Restricted Monitors',
'ReturnDelay' => 'Return Delay',
'ReturnLocation' => 'Return Location',
'Rewind' => 'Rewind',
'RotateLeft' => 'Rotar a la derecha',
'RotateRight' => 'Rotar a la izquierda',
'RunMode' => 'Metodo Ejecucion',
'Running' => 'Ejecutando',
'RunState' => 'Estado de Ejecución',
'SaveAs' => 'Guardar Como',
'SaveFilter' => 'Guardar Filtro',
'Save' => 'Guardar',
'Scale' => 'Escala',
'Score' => 'Res.',
'Secs' => 'Seg',
'Sectionlength' => 'Longitud Sección',
'SelectMonitors' => 'Select Monitors',
'Select' => 'Select',
'SelfIntersecting' => 'Polygon edges must not intersect',
'ServerLoad' => 'Carga Servidor',
'SetLearnPrefs' => 'Set Learn Prefs', // This can be ignored for now
'SetNewBandwidth' => 'Nuevo Ancho de Banda',
'SetPreset' => 'Set Preset',
'Set' => 'Set',
'Settings' => 'Configuracion',
'ShowFilterWindow' => 'Abrir Filtro',
'ShowTimeline' => 'Show Timeline',
'SignalCheckColour' => 'Signal Check Colour',
'Size' => 'Size',
'Sleep' => 'Sleep',
'SortAsc' => 'Asc',
'SortBy' => 'Ordenar por',
'SortDesc' => 'Desc',
'Source' => 'Origen',
'SourceType' => 'Tipo Origen',
'SpeedHigh' => 'High Speed',
'SpeedLow' => 'Low Speed',
'SpeedMedium' => 'Medium Speed',
'Speed' => 'Speed',
'SpeedTurbo' => 'Turbo Speed',
'Start' => 'Iniciar',
'State' => 'Estado',
'Stats' => 'Est.',
'Status' => 'Estado',
'StepBack' => 'Step Back',
'StepForward' => 'Step Forward',
'StepLarge' => 'Large Step',
'StepMedium' => 'Medium Step',
'StepNone' => 'No Step',
'StepSmall' => 'Small Step',
'Step' => 'Step',
'Stills' => 'Fotos',
'Stop' => 'Desactivar',
'Stopped' => 'Apagado',
'StreamReplayBuffer' => 'Stream Replay Image Buffer',
'Stream' => 'Stream',
'Submit' => 'Submit',
'System' => 'Sistema',
'Tele' => 'Tele',
'Thumbnail' => 'Thumbnail',
'Tilt' => 'Tilt',
'TimeDelta' => 'Hora Delta',
'Time' => 'Hora',
'Timeline' => 'Timeline',
'Timestamp' => 'Etiqueta Hora',
'TimeStamp' => 'Etiqueta Hora',
'TimestampLabelFormat' => 'Formato Etiqueta Hora',
'TimestampLabelX' => 'Eje X Etiqueta Hora',
'TimestampLabelY' => 'Eje Y Etiqueta Hora',
'Today' => 'Today',
'Tools' => 'Herra.',
'TotalBrScore' => 'Total<br/>puntuación',
'TrackDelay' => 'Track Delay',
'TrackMotion' => 'Track Motion',
'Triggers' => 'Gatillos',
'TurboPanSpeed' => 'Turbo Pan Speed',
'TurboTiltSpeed' => 'Turbo Tilt Speed',
'Type' => 'Tipo',
'Unarchive' => 'Desarchivar',
'Units' => 'Unidades',
'Unknown' => 'Desconocido',
'UpdateAvailable' => 'Una Actualización a ZoneMinder esta disponible',
'UpdateNotNecessary' => 'No se requiere Actualización',
'Update' => 'Update',
'UseFilterExprsPost' => '&nbsp;filtrar&nbsp;sentencias', // This is used at the end of the phrase 'use N filter expressions'
'UseFilterExprsPre' => 'Utilizar&nbsp;', // This is used at the beginning of the phrase 'use N filter expressions'
'UseFilter' => 'Usar Filtro',
'Username' => 'Nombre',
'Users' => 'Usuarios',
'User' => 'Usuario',
'Value' => 'Valor',
'VersionIgnore' => 'Ignore esta versión',
'VersionRemindDay' => 'Recordar en 1 día',
'VersionRemindHour' => 'Recordar en 1 hora',
'VersionRemindNever' => 'No avizar de nuevas versiones',
'VersionRemindWeek' => 'Recordar en 1 semana',
'Version' => 'Versión',
'VideoFormat' => 'Video Format',
'VideoGenFailed' => 'Fallo la creacion del video!',
'VideoGenFiles' => 'Existing Video Files',
'VideoGenNoFiles' => 'No Video Files Found',
'VideoGenParms' => 'Parametros Generacion Video',
'VideoGenSucceeded' => 'Video Generation Succeeded!',
'VideoSize' => 'Tamaño Video',
'Video' => 'Video',
'ViewAll' => 'Ver Todo',
'ViewEvent' => 'View Event',
'ViewPaged' => 'View Paged',
'View' => 'Ver',
'Wake' => 'Wake',
'WarmupFrames' => 'Avisos Movimiento',
'Watch' => 'Monitor',
'WebColour' => 'Web Colour',
'Web' => 'Web',
'Week' => 'Semana',
'WhiteBalance' => 'White Balance',
'White' => 'White',
'Wide' => 'Wide',
'X10ActivationString' => 'X10 Comando Activación',
'X10InputAlarmString' => 'X10 Comando Entrada Alarma',
'X10OutputAlarmString' => 'X10 Output Alarm String',
'X10' => 'X10',
'X' => 'X',
'Yes' => 'Si',
'YouNoPerms' => 'No tiene permisos para acceder a este recurso.',
'Y' => 'Y',
'ZoneAlarmColour' => 'Color Alarma (Red/Green/Blue)',
'ZoneArea' => 'Zone Area',
'ZoneFilterSize' => 'Filter Width/Height (pixels)',
'ZoneMinMaxAlarmArea' => 'Min/Max Alarmed Area',
'ZoneMinMaxBlobArea' => 'Min/Max Blob Area',
'ZoneMinMaxBlobs' => 'Min/Max Blobs',
'ZoneMinMaxFiltArea' => 'Min/Max Filtered Area',
'ZoneMinMaxPixelThres' => 'Min/Max Pixel Threshold (0-255)',
'ZoneOverloadFrames' => 'Overload Frame Ignore Count',
'Zones' => 'Zonas',
'Zone' => 'Zona',
'ZoomIn' => 'Zoom In',
'ZoomOut' => 'Zoom Out',
'Zoom' => 'Zoom',
);
// Complex replacements with formatting and/or placements, must be passed through sprintf
$CLANG = array(
'CurrentLogin' => 'Usuario actual es \'%1$s\'',
'EventCount' => '%1$s %2$s',
'LastEvents' => 'Ultimo %1$s %2$s',
'LatestRelease' => 'The latest release is v%1$s, you have v%2$s.',
'MonitorCount' => '%1$s %2$s',
'MonitorFunction' => 'Monitor %1$s Funcion',
'RunningRecentVer' => 'You are running the most recent version of Zoneminder, v%s.',
);
// Variable arrays expressing plurality, see the zmVlang description above
$VLANG = array(
'Event' => array( 0=>'Eventos', 1=>'Evento', 2=>'Eventos' ),
'Monitor' => array( 0=>'Monitores', 1=>'Monitor', 2=>'Monitores' ),
);
function zmVlang( $langVarArray, $count )
{
krsort( $langVarArray );
foreach ( $langVarArray as $key=>$value )
{
if ( abs($count) >= $key )
{
return( $value );
}
}
die( 'Error, unable to correlate variable language string' );
}
$OLANG = array(
);
?>

802
web/lang/fr_fr.php Normal file
View File

@ -0,0 +1,802 @@
<?php
//
// ZoneMinder web UK French language file, $Date$, $Revision$
// Copyright (C) 2003, 2004, 2005, 2006 Philip Coombes
//
// This program 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 program 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
//
// ZoneMinder French Translation by Jerome Hanoteau
// Notes for Translators
// 0. Get some credit, put your name in the line above (optional)
// 1. When composing the language tokens in your language you should try and keep to roughly the
// same length text if possible. Abbreviate where necessary as spacing is quite close in a number of places.
// 2. There are four types of string replacement
// a) Simple replacements are words or short phrases that are static and used directly. This type of
// replacement can be used 'as is'.
// b) Complex replacements involve some dynamic element being included and so may require substitution
// or changing into a different order. The token listed in this file will be passed through sprintf as
// a formatting string. If the dynamic element is a number you will usually need to use a variable
// replacement also as described below.
// c) Variable replacements are used in conjunction with complex replacements and involve the generation
// of a singular or plural noun depending on the number passed into the zmVlang function. See the
// the zmVlang section below for a further description of this.
// d) Optional strings which can be used to replace the prompts and/or help text for the Options section
// of the web interface. These are not listed below as they are quite large and held in the database
// so that they can also be used by the zmconfig.pl script. However you can build up your own list
// quite easily from the Config table in the database if necessary.
// 3. The tokens listed below are not used to build up phrases or sentences from single words. Therefore
// you can safely assume that a single word token will only be used in that context.
// 4. In new language files, or if you are changing only a few words or phrases it makes sense from a
// maintenance point of view to include the original language file and override the old definitions rather
// than copy all the language tokens across. To do this change the line below to whatever your base language
// is and uncomment it.
// require_once( 'zm_lang_en_gb.php' );
// You may need to change the character set here, if your web server does not already
// do this by default, uncomment this if required.
//
// Example
// header( "Content-Type: text/html; charset=iso-8859-1" );
// You may need to change your locale here if your default one is incorrect for the
// language described in this file, or if you have multiple languages supported.
// If you do need to change your locale, be aware that the format of this function
// is subtlely different in versions of PHP before and after 4.3.0, see
// http://uk2.php.net/manual/en/function.setlocale.php for details.
// Also be aware that changing the whole locale may affect some floating point or decimal
// arithmetic in the database, if this is the case change only the individual locale areas
// that don't affect this rather than all at once. See the examples below.
// Finally, depending on your setup, PHP may not enjoy have multiple locales in a shared
// threaded environment, if you get funny errors it may be this.
//
// Examples
// setlocale( 'LC_ALL', 'en_GB' ); All locale settings pre-4.3.0
// setlocale( LC_ALL, 'en_GB' ); All locale settings 4.3.0 and after
// setlocale( LC_CTYPE, 'en_GB' ); Character class settings 4.3.0 and after
// setlocale( LC_TIME, 'en_GB' ); Date and time formatting 4.3.0 and after
// Simple String Replacements
$SLANG = array(
'24BitColour' => 'Couleur 24 bit',
'8BitGrey' => 'Gris 8 bit',
'Action' => 'Action',
'Actual' => 'Réel',
'AddNewControl' => 'Add New Control',
'AddNewMonitor' => 'Aj. nouv. écran',
'AddNewUser' => 'Aj. nouv. util.',
'AddNewZone' => 'Aj. nouv. zone',
'Alarm' => 'Alarme',
'AlarmBrFrames' => 'Images<br/>alarme',
'AlarmFrameCount' => 'Alarm Frame Count',
'AlarmFrame' => 'Image alarme',
'AlarmLimits' => 'Limites alarme',
'AlarmMaximumFPS' => 'Alarm Maximum FPS',
'AlarmPx' => 'Px Alarme',
'AlarmRGBUnset' => 'You must set an alarm RGB colour',
'Alert' => 'Alerte',
'All' => 'Tous',
'Apply' => 'Appliquer',
'ApplyingStateChange' => 'Appl. chgt état',
'ArchArchived' => 'Archivé seul.',
'Archive' => 'Archiver',
'Archived' => 'Archived',
'ArchUnarchived' => 'Non-arch. seul.',
'Area' => 'Area',
'AreaUnits' => 'Area (px/%)',
'AttrAlarmFrames' => 'Images alarme',
'AttrArchiveStatus' => 'Etat Archive',
'AttrAvgScore' => 'Score moy.',
'AttrCause' => 'Cause',
'AttrDate' => 'Date',
'AttrDateTime' => 'Date/temps',
'AttrDiskBlocks' => 'Disk Blocks',
'AttrDiskPercent' => 'Disk Percent',
'AttrDuration' => 'Durée',
'AttrFrames' => 'Images',
'AttrId' => 'Id',
'AttrMaxScore' => 'Score max.',
'AttrMonitorId' => 'N° écran',
'AttrMonitorName' => 'Nom écran',
'AttrName' => 'Name',
'AttrNotes' => 'Notes',
'AttrSystemLoad' => 'System Load',
'AttrTime' => 'Temps',
'AttrTotalScore' => 'Score total',
'AttrWeekday' => 'Semaine',
'Auto' => 'Auto',
'AutoStopTimeout' => 'Auto Stop Timeout',
'AvgBrScore' => 'Score<br/>moy.',
'Background' => 'Background',
'BackgroundFilter' => 'Run filter in background',
'BadAlarmFrameCount' => 'Alarm frame count must be an integer of one or more',
'BadAlarmMaxFPS' => 'Alarm Maximum FPS must be a positive integer or floating point value',
'BadChannel' => 'Channel must be set to an integer of zero or more',
'BadDevice' => 'Device must be set to a valid value',
'BadFormat' => 'Format must be set to an integer of zero or more',
'BadFPSReportInterval' => 'FPS report interval buffer count must be an integer of 100 or more',
'BadFrameSkip' => 'Frame skip count must be an integer of zero or more',
'BadHeight' => 'Height must be set to a valid value',
'BadHost' => 'Host must be set to a valid ip address or hostname, do not include http://',
'BadImageBufferCount' => 'Image buffer size must be an integer of 10 or more',
'BadLabelX' => 'Label X co-ordinate must be set to an integer of zero or more',
'BadLabelY' => 'Label Y co-ordinate must be set to an integer of zero or more',
'BadMaxFPS' => 'Maximum FPS must be a positive integer or floating point value',
'BadNameChars' => 'Les noms ne peuvent contenir que des lettres, chiffres, trait d\'union ou souligné',
'BadPath' => 'Path must be set to a valid value',
'BadPort' => 'Port must be set to a valid number',
'BadPostEventCount' => 'Post event image count must be an integer of zero or more',
'BadPreEventCount' => 'Pre event image count must be at least zero, and less than image buffer size',
'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',
'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',
'BadWidth' => 'Width must be set to a valid value',
'Bandwidth' => 'Bande-pass.',
'BlobPx' => 'Px forme',
'Blobs' => 'Formes',
'BlobSizes' => 'Taille forme',
'Brightness' => 'Luminosité;',
'Buffers' => 'Tampons',
'CanAutoFocus' => 'Can Auto Focus',
'CanAutoGain' => 'Can Auto Gain',
'CanAutoIris' => 'Can Auto Iris',
'CanAutoWhite' => 'Can Auto White Bal.',
'CanAutoZoom' => 'Can Auto Zoom',
'Cancel' => 'Annul.',
'CancelForcedAlarm' => 'Annul. Forc&eacute; Alarme',
'CanFocusAbs' => 'Can Focus Absolute',
'CanFocus' => 'Can Focus',
'CanFocusCon' => 'Can Focus Continuous',
'CanFocusRel' => 'Can Focus Relative',
'CanGainAbs' => 'Can Gain Absolute',
'CanGain' => 'Can Gain ',
'CanGainCon' => 'Can Gain Continuous',
'CanGainRel' => 'Can Gain Relative',
'CanIrisAbs' => 'Can Iris Absolute',
'CanIris' => 'Can Iris',
'CanIrisCon' => 'Can Iris Continuous',
'CanIrisRel' => 'Can Iris Relative',
'CanMoveAbs' => 'Can Move Absolute',
'CanMove' => 'Can Move',
'CanMoveCon' => 'Can Move Continuous',
'CanMoveDiag' => 'Can Move Diagonally',
'CanMoveMap' => 'Can Move Mapped',
'CanMoveRel' => 'Can Move Relative',
'CanPan' => 'Can Pan' ,
'CanReset' => 'Can Reset',
'CanSetPresets' => 'Can Set Presets',
'CanSleep' => 'Can Sleep',
'CanTilt' => 'Can Tilt',
'CanWake' => 'Can Wake',
'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',
'CanZoomCon' => 'Can Zoom Continuous',
'CanZoomRel' => 'Can Zoom Relative',
'CaptureHeight' => 'Haut. capture',
'CapturePalette' => 'palette capture',
'CaptureWidth' => 'Larg. capture',
'Cause' => 'Cause',
'CheckMethod' => 'Méthode vérif. alarme',
'ChooseFilter' => 'Choisir filtre',
'ChoosePreset' => 'Choose Preset',
'Close' => 'Fermer',
'Colour' => 'Couleur',
'Command' => 'Command',
'Config' => 'Config',
'ConfiguredFor' => 'Configuré pour',
'ConfirmDeleteEvents' => 'Are you sure you wish to delete the selected events?',
'ConfirmPassword' => 'Confirmer mt de pass.',
'ConjAnd' => 'et',
'ConjOr' => 'ou',
'Console' => 'Console',
'ContactAdmin' => 'Contactez votre administrateur SVP',
'Continue' => 'Continue',
'Contrast' => 'Contraste',
'ControlAddress' => 'Control Address',
'ControlCap' => 'Control Capability',
'ControlCaps' => 'Control Capabilities',
'Control' => 'Control',
'ControlDevice' => 'Control Device',
'Controllable' => 'Controllable',
'ControlType' => 'Control Type',
'Cycle' => 'Cycle',
'CycleWatch' => 'Cycle vision',
'Day' => 'Jour',
'Debug' => 'Debug',
'DefaultRate' => 'Default Rate',
'DefaultScale' => 'Default Scale',
'DefaultView' => 'Default View',
'DeleteAndNext' => 'Eff. &amp; suiv.',
'DeleteAndPrev' => 'Eff. &amp; prec.',
'Delete' => 'Eff.',
'DeleteSavedFilter' => 'Eff. filtre sauvé',
'Description' => 'Description',
'DeviceChannel' => 'Canal caméra',
'DeviceFormat' => 'Format caméra',
'DeviceNumber' => 'Numéro caméra',
'DevicePath' => 'Device Path',
'Devices' => 'Devices',
'Dimensions' => 'Dimensions',
'DisableAlarms' => 'Disable Alarms',
'Disk' => 'Disk',
'DonateAlready' => 'No, I\'ve already donated',
'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' => 'Please Donate',
'DonateRemindDay' => 'Not yet, remind again in 1 day',
'DonateRemindHour' => 'Not yet, remind again in 1 hour',
'DonateRemindMonth' => 'Not yet, remind again in 1 month',
'DonateRemindNever' => 'No, I don\'t want to donate, never remind',
'DonateRemindWeek' => 'Not yet, remind again in 1 week',
'DonateYes' => 'Yes, I\'d like to donate now',
'Download' => 'Download',
'Duration' => 'Durée',
'Edit' => 'Editer',
'Email' => 'Courriel',
'EnableAlarms' => 'Enable Alarms',
'Enabled' => 'Activé',
'EnterNewFilterName' => 'Entrer nom nouv. filtre',
'ErrorBrackets' => 'Erreur, vérifiez que toutes les parenthèses ouvertes sont fermées',
'Error' => 'Erreur',
'ErrorValidValue' => 'Erreur, vérifiez que tous les termes ont une valeur valide',
'Etc' => 'etc',
'Event' => 'Evènt',
'EventFilter' => 'Filtre evènt',
'EventId' => 'Event Id',
'EventName' => 'Event Name',
'EventPrefix' => 'Event Prefix',
'Events' => 'Evènts',
'Exclude' => 'Exclure',
'Execute' => 'Execute',
'ExportDetails' => 'Export Event Details',
'Export' => 'Export',
'ExportFailed' => 'Export Failed',
'ExportFormat' => 'Export File Format',
'ExportFormatTar' => 'Tar',
'ExportFormatZip' => 'Zip',
'ExportFrames' => 'Export Frame Details',
'ExportImageFiles' => 'Export Image Files',
'Exporting' => 'Exporting',
'ExportMiscFiles' => 'Export Other Files (if present)',
'ExportOptions' => 'Export Options',
'ExportVideoFiles' => 'Export Video Files (if present)',
'Far' => 'Far',
'FastForward' => 'Fast Forward',
'Feed' => 'Feed',
'FileColours' => 'File Colours',
'File' => 'File',
'FilePath' => 'File Path',
'FilterArchiveEvents' => 'Archive all matches',
'FilterDeleteEvents' => 'Delete all matches',
'FilterEmailEvents' => 'Email details of all matches',
'FilterExecuteEvents' => 'Execute command on all matches',
'FilterMessageEvents' => 'Message details of all matches',
'FilterPx' => 'Filter Px',
'Filters' => 'Filters',
'FilterUnset' => 'You must specify a filter width and height',
'FilterUploadEvents' => 'Upload all matches',
'FilterVideoEvents' => 'Create video for all matches',
'First' => 'Prem.',
'FlippedHori' => 'Flipped Horizontally',
'FlippedVert' => 'Flipped Vertically',
'Focus' => 'Focus',
'ForceAlarm' => 'Force Alarme',
'Format' => 'Format',
'FPS' => 'i/s',
'FPSReportInterval' => 'FPS Report Interval',
'FrameId' => 'N° image',
'Frame' => 'Image',
'FrameRate' => 'Débit image',
'Frames' => 'images',
'FrameSkip' => 'Saut image',
'FTP' => 'FTP',
'Func' => 'Fct',
'Function' => 'Fonction',
'Gain' => 'Gain',
'General' => 'General',
'GenerateVideo' => 'Générer Vidéo',
'GeneratingVideo' => 'Génération Vidéo',
'GoToZoneMinder' => 'Aller sur ZoneMinder.com',
'Grey' => 'Gris',
'Group' => 'Group',
'Groups' => 'Groups',
'HasFocusSpeed' => 'Has Focus Speed',
'HasGainSpeed' => 'Has Gain Speed',
'HasHomePreset' => 'Has Home Preset',
'HasIrisSpeed' => 'Has Iris Speed',
'HasPanSpeed' => 'Has Pan Speed',
'HasPresets' => 'Has Presets',
'HasTiltSpeed' => 'Has Tilt Speed',
'HasTurboPan' => 'Has Turbo Pan',
'HasTurboTilt' => 'Has Turbo Tilt',
'HasWhiteSpeed' => 'Has White Bal. Speed',
'HasZoomSpeed' => 'Has Zoom Speed',
'HighBW' => 'Haut&nbsp;N/B',
'High' => 'Haut',
'Home' => 'Home',
'Hour' => 'Heure',
'Hue' => 'Teinte',
'Idle' => 'Vide',
'Id' => 'N°',
'Ignore' => 'Ignorer',
'ImageBufferSize' => 'Taille tampon image',
'Image' => 'Image',
'Images' => 'Images',
'Include' => 'Inclure',
'In' => 'In',
'Inverted' => 'Inversé',
'Iris' => 'Iris',
'KeyString' => 'Key String',
'Label' => 'Label',
'Language' => 'Langue',
'Last' => 'Dernier',
'LimitResultsPost' => 'results only;', // This is used at the end of the phrase 'Limit to first N results only'
'LimitResultsPre' => 'Limit to first', // This is used at the beginning of the phrase 'Limit to first N results only'
'LinkedMonitors' => 'Linked Monitors',
'List' => 'List',
'Load' => 'Load',
'Local' => 'Local',
'LoggedInAs' => 'Connecté cô',
'LoggingIn' => 'Connexion',
'Login' => 'Login',
'Logout' => 'Déconnexion',
'Low' => 'Bas',
'LowBW' => 'Basse&nbsp;N/B',
'Main' => 'Main',
'Man' => 'Man',
'Manual' => 'Manual',
'Mark' => 'Marque',
'MaxBandwidth' => 'Max Bandwidth',
'MaxBrScore' => 'Score<br/>max',
'MaxFocusRange' => 'Max Focus Range',
'MaxFocusSpeed' => 'Max Focus Speed',
'MaxFocusStep' => 'Max Focus Step',
'MaxGainRange' => 'Max Gain Range',
'MaxGainSpeed' => 'Max Gain Speed',
'MaxGainStep' => 'Max Gain Step',
'MaximumFPS' => 'i/s maximum',
'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',
'MaxTiltRange' => 'Max Tilt Range',
'MaxTiltSpeed' => 'Max Tilt Speed',
'MaxTiltStep' => 'Max Tilt Step',
'MaxWhiteRange' => 'Max White Bal. Range',
'MaxWhiteSpeed' => 'Max White Bal. Speed',
'MaxWhiteStep' => 'Max White Bal. Step',
'MaxZoomRange' => 'Max Zoom Range',
'MaxZoomSpeed' => 'Max Zoom Speed',
'MaxZoomStep' => 'Max Zoom Step',
'MediumBW' => 'Moy.&nbsp;N/B',
'Medium' => 'Medium',
'MinAlarmAreaLtMax' => 'Minimum alarm area should be less than maximum',
'MinAlarmAreaUnset' => 'You must specify the minimum alarm pixel count',
'MinBlobAreaLtMax' => 'Aire blob min. doit ê < aire blob maximum',
'MinBlobAreaUnset' => 'You must specify the minimum blob pixel count',
'MinBlobLtMinFilter' => 'Minimum blob area should be less than or equal to minimum filter area',
'MinBlobsLtMax' => 'Blobs min. doit ê < blobs max.',
'MinBlobsUnset' => 'You must specify the minimum blob count',
'MinFilterAreaLtMax' => 'Minimum filter area should be less than maximum',
'MinFilterAreaUnset' => 'You must specify the minimum filter pixel count',
'MinFilterLtMinAlarm' => 'Minimum filter area should be less than or equal to minimum alarm area',
'MinFocusRange' => 'Min Focus Range',
'MinFocusSpeed' => 'Min Focus Speed',
'MinFocusStep' => 'Min Focus Step',
'MinGainRange' => 'Min Gain Range',
'MinGainSpeed' => 'Min Gain Speed',
'MinGainStep' => 'Min Gain Step',
'MinIrisRange' => 'Min Iris Range',
'MinIrisSpeed' => 'Min Iris Speed',
'MinIrisStep' => 'Min Iris Step',
'MinPanRange' => 'Min Pan Range',
'MinPanSpeed' => 'Min Pan Speed',
'MinPanStep' => 'Min Pan Step',
'MinPixelThresLtMax' => 'Seuil pixel min. doit ê < seuil pixel max.',
'MinPixelThresUnset' => 'You must specify a minimum pixel threshold',
'MinTiltRange' => 'Min Tilt Range',
'MinTiltSpeed' => 'Min Tilt Speed',
'MinTiltStep' => 'Min Tilt Step',
'MinWhiteRange' => 'Min White Bal. Range',
'MinWhiteSpeed' => 'Min White Bal. Speed',
'MinWhiteStep' => 'Min White Bal. Step',
'MinZoomRange' => 'Min Zoom Range',
'MinZoomSpeed' => 'Min Zoom Speed',
'MinZoomStep' => 'Min Zoom Step',
'Misc' => 'Div.',
'Monitor' => 'Ecran',
'MonitorIds' => 'N°&nbsp;écran',
'MonitorPresetIntro' => 'Select an appropriate preset from the list below.<br><br>Please note that this may overwrite any values you already have configured for this monitor.<br><br>',
'MonitorPreset' => 'Monitor Preset',
'Monitors' => 'Ecrans',
'Montage' => 'Montage',
'Month' => 'Mois',
'Move' => 'Move',
'MustBeGe' => 'doit être sup. ou égal à',
'MustBeLe' => 'doit être inf. ou égal à',
'MustConfirmPassword' => 'Confirmez le mot de passe',
'MustSupplyPassword' => 'Entrez un mot de passe',
'MustSupplyUsername' => 'Entrez un nom d\'utilisateur',
'Name' => 'Nom',
'Near' => 'Near',
'Network' => 'Réseau',
'NewGroup' => 'New Group',
'NewLabel' => 'New Label',
'New' => 'Nouv.',
'NewPassword' => 'Nouv. mt de passe',
'NewState' => 'Nv état',
'NewUser' => 'Nv util.',
'Next' => 'Suiv.',
'NoFramesRecorded' => 'Pas d\'image enregistrée pour cet évènement',
'NoGroup' => 'No Group',
'None' => 'Aucun',
'NoneAvailable' => 'Aucun disponible',
'No' => 'Non',
'Normal' => 'Normal',
'NoSavedFilters' => 'Pasfiltressauv',
'NoStatisticsRecorded' => 'Pas de statistiques disponibles pour cet évènmnt/imag.',
'Notes' => 'Notes',
'NumPresets' => 'Num Presets',
'Off' => 'Off',
'On' => 'On',
'Open' => 'Open',
'OpEq' => 'égal à',
'OpGtEq' => 'plus grand ou égal à',
'OpGt' => 'sup. à',
'OpIn' => 'en lot',
'OpLtEq' => 'inf. ou égal à',
'OpLt' => 'inf. à',
'OpMatches' => 'correspond',
'OpNe' => 'diff. de',
'OpNotIn' => 'pas en lot',
'OpNotMatches' => 'ne correspond pas',
'OptionHelp' => 'OptionAide',
'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.',
'Options' => 'Options',
'Order' => 'Order',
'OrEnterNewName' => 'ou entrez nv nom',
'Orientation' => 'Orientation',
'Out' => 'Out',
'OverwriteExisting' => 'Ecraser l\'existant',
'Paged' => 'Paged',
'PanLeft' => 'Pan Left',
'Pan' => 'Pan',
'PanRight' => 'Pan Right',
'PanTilt' => 'Pan/Tilt',
'Parameter' => 'Paramètre',
'Password' => 'Mt de passe',
'PasswordsDifferent' => 'Les 2 mots de passe sont différents',
'Paths' => 'Paths',
'Pause' => 'Pause',
'PhoneBW' => 'Phone&nbsp;B/W',
'Phone' => 'Phone',
'PixelDiff' => 'Pixel Diff',
'Pixels' => 'pixels',
'PlayAll' => 'Play All',
'Play' => 'Play',
'PleaseWait' => 'Attendez',
'Point' => 'Point',
'PostEventImageBuffer' => 'Post Event Image Count',
'PreEventImageBuffer' => 'Pre Event Image Count',
'PreserveAspect' => 'Preserve Aspect Ratio',
'Preset' => 'Preset',
'Presets' => 'Presets',
'Prev' => 'Prec.',
'Protocol' => 'Protocol',
'Rate' => 'Débit',
'Real' => 'Réel',
'Record' => 'Enreg.',
'RefImageBlendPct' => 'Reference Image Blend %ge',
'Refresh' => 'Rafraîchir',
'RemoteHostName' => 'Remote Host Name',
'RemoteHostPath' => 'Remote Host Path',
'RemoteHostPort' => 'Remote Host Port',
'RemoteImageColours' => 'Remote Image Colours',
'Remote' => 'Remote',
'Rename' => 'Renommer',
'ReplayAll' => 'All Events',
'ReplayGapless' => 'Gapless Events',
'Replay' => 'Ralenti',
'Replay' => 'Replay',
'ReplaySingle' => 'Single Event',
'ResetEventCounts' => 'Rem. à 0 comptage des évts',
'Reset' => 'Reset',
'Restarting' => 'Redémarrage',
'Restart' => 'Redémarrer',
'RestrictedCameraIds' => 'N° caméras confid.',
'RestrictedMonitors' => 'Restricted Monitors',
'ReturnDelay' => 'Return Delay',
'ReturnLocation' => 'Return Location',
'Rewind' => 'Rewind',
'RotateLeft' => 'Rotation g.',
'RotateRight' => 'Rotation d.',
'RunMode' => 'Run Mode',
'Running' => 'Ca tourne',
'RunState' => 'Run State',
'SaveAs' => 'Enr. ss',
'Save' => 'Enr.',
'SaveFilter' => 'Save Filter',
'Scale' => 'Echelle',
'Score' => 'Score',
'Secs' => 'Secs',
'Sectionlength' => 'Longueur section',
'SelectMonitors' => 'Select Monitors',
'Select' => 'Select',
'SelfIntersecting' => 'Polygon edges must not intersect',
'SetLearnPrefs' => 'Régler préf. apprises', // This can be ignored for now
'SetNewBandwidth' => 'Régler la bande passante',
'SetPreset' => 'Set Preset',
'Set' => 'Set',
'Settings' => 'Réglages',
'ShowFilterWindow' => 'Montrerfen.filtre',
'ShowTimeline' => 'Show Timeline',
'SignalCheckColour' => 'Signal Check Colour',
'Size' => 'Size',
'Sleep' => 'Sleep',
'SortAsc' => 'Asc',
'SortBy' => 'Sort by',
'SortDesc' => 'Desc',
'Source' => 'Source',
'SourceType' => 'Source Type',
'SpeedHigh' => 'High Speed',
'SpeedLow' => 'Low Speed',
'SpeedMedium' => 'Medium Speed',
'Speed' => 'Speed',
'SpeedTurbo' => 'Turbo Speed',
'Start' => 'Démarrer',
'State' => 'Etat',
'Stats' => 'Stats',
'Status' => 'Statut',
'StepBack' => 'Step Back',
'StepForward' => 'Step Forward',
'StepLarge' => 'Large Step',
'StepMedium' => 'Medium Step',
'StepNone' => 'No Step',
'StepSmall' => 'Small Step',
'Step' => 'Step',
'Stills' => 'Photos',
'Stopped' => 'Arrêté',
'Stop' => 'Stop',
'Stream' => 'Flux',
'StreamReplayBuffer' => 'Stream Replay Image Buffer',
'Submit' => 'Submit',
'System' => 'Système',
'Tele' => 'Tele',
'Thumbnail' => 'Thumbnail',
'Tilt' => 'Tilt',
'TimeDelta' => 'Time Delta',
'Timeline' => 'Timeline',
'TimestampLabelFormat' => 'Timestamp Label Format',
'TimestampLabelX' => 'Timestamp Label X',
'TimestampLabelY' => 'Timestamp Label Y',
'Timestamp' => 'Timestamp',
'TimeStamp' => 'Time Stamp',
'Time' => 'Temps',
'Today' => 'Today',
'Tools' => 'Outils',
'TotalBrScore' => 'Score<br/>total',
'TrackDelay' => 'Track Delay',
'TrackMotion' => 'Track Motion',
'Triggers' => 'Déclenchements',
'TurboPanSpeed' => 'Turbo Pan Speed',
'TurboTiltSpeed' => 'Turbo Tilt Speed',
'Type' => 'Type',
'Unarchive' => 'Désarchiv.',
'Units' => 'Unités',
'Unknown' => 'Inconnu',
'UpdateAvailable' => 'Mise à jour de ZM dispo.',
'UpdateNotNecessary' => 'Pas de mise à jour dispo.',
'Update' => 'Update',
'UseFilterExprsPost' => '&nbsp;filter&nbsp;expressions', // This is used at the end of the phrase 'use N filter expressions'
'UseFilterExprsPre' => 'Util.&nbsp;', // This is used at the beginning of the phrase 'use N filter expressions'
'UseFilter' => 'Util. Filtre',
'Username' => 'nom util.',
'Users' => 'Utils',
'User' => 'Util.',
'Value' => 'Valeur',
'VersionIgnore' => 'Ignorer cette version',
'VersionRemindDay' => 'Me rappeler ds 1 j.',
'VersionRemindHour' => 'Me rappleler dans 1 h.',
'VersionRemindNever' => 'Ne pas avertir des nvelles versions',
'VersionRemindWeek' => 'Me rappeler ds 1 sem.',
'Version' => 'Version',
'VideoFormat' => 'Video Format',
'VideoGenFailed' => 'Echec génération vidéo!',
'VideoGenFiles' => 'Existing Video Files',
'VideoGenNoFiles' => 'No Video Files Found',
'VideoGenParms' => 'Paramètres génération vidéo',
'VideoGenSucceeded' => 'Video Generation Succeeded!',
'VideoSize' => 'taille vidéo',
'Video' => 'Vidéo',
'ViewAll' => 'Voir tt',
'ViewEvent' => 'View Event',
'ViewPaged' => 'Vue recherchée',
'View' => 'Voir',
'Wake' => 'Wake',
'WarmupFrames' => 'Images test',
'Watch' => 'Regarder',
'WebColour' => 'Web Colour',
'Web' => 'Web',
'Week' => 'Semaine',
'WhiteBalance' => 'White Balance',
'White' => 'White',
'Wide' => 'Wide',
'X10ActivationString' => 'X10:chaîne activation',
'X10InputAlarmString' => 'X10:chaîne alarme entrée',
'X10OutputAlarmString' => 'X10:chaîne alarme sortie',
'X10' => 'X10',
'X' => 'X',
'Yes' => 'Oui',
'YouNoPerms' => 'Permissions nécessaires pour cette ressource.',
'Y' => 'Y',
'ZoneAlarmColour' => 'Couleur alarme (Red/Green/Blue)',
'ZoneArea' => 'Zone Area',
'ZoneFilterSize' => 'Filter Width/Height (pixels)',
'ZoneMinMaxAlarmArea' => 'Min/Max Alarmed Area',
'ZoneMinMaxBlobArea' => 'Min/Max Blob Area',
'ZoneMinMaxBlobs' => 'Min/Max Blobs',
'ZoneMinMaxFiltArea' => 'Min/Max Filtered Area',
'ZoneMinMaxPixelThres' => 'Min/Max Pixel Threshold (0-255)',
'ZoneOverloadFrames' => 'Overload Frame Ignore Count',
'Zones' => 'Zones',
'Zone' => 'Zone',
'ZoomIn' => 'Zoom In',
'ZoomOut' => 'Zoom Out',
'Zoom' => 'Zoom',
);
// Complex replacements with formatting and/or placements, must be passed through sprintf
$CLANG = array(
'CurrentLogin' => 'Util. Actuel: \'%1$s\'',
'EventCount' => '%1$s %2$s', // par ex. '37 évènts' (voir Vlang ci-dessous)
'LastEvents' => '%1$s derniers %2$s', // par ex. '37 derniers évènts' (voir Vlang ci-dessous)
'LatestRelease' => 'La dernière version est v%1$s, vous avez v%2$s.',
'MonitorCount' => '%1$s %2$s', // par exemple '4 écrans' (voir Vlang ci-dessous)
'MonitorFunction' => 'Ecran %1$s Fonction',
'RunningRecentVer' => 'Vs avez la dernière version de ZoneMinder, v%s.',
);
// The next section allows you to describe a series of word ending and counts used to
// generate the correctly conjugated forms of words depending on a count that is associated
// with that word.
// This intended to allow phrases such a '0 potatoes', '1 potato', '2 potatoes' etc to
// conjugate correctly with the associated count.
// In some languages such as English this is fairly simple and can be expressed by assigning
// a count with a singular or plural form of a word and then finding the nearest (lower) value.
// So '0' of something generally ends in 's', 1 of something is singular and has no extra
// ending and 2 or more is a plural and ends in 's' also. So to find the ending for '187' of
// something you would find the nearest lower count (2) and use that ending.
//
// So examples of this would be
// $zmVlangPotato = array( 0=>'Potatoes', 1=>'Potato', 2=>'Potatoes' );
// $zmVlangSheep = array( 0=>'Sheep' );
//
// where you can have as few or as many entries in the array as necessary
// If your language is similar in form to this then use the same format and choose the
// appropriate zmVlang function below.
// If however you have a language with a different format of plural endings then another
// approach is required . For instance in Russian the word endings change continuously
// depending on the last digit (or digits) of the numerator. In this case then zmVlang
// arrays could be written so that the array index just represents an arbitrary 'type'
// and the zmVlang function does the calculation about which version is appropriate.
//
// So an example in Russian might be (using English words, and made up endings as I
// don't know any Russian!!)
// $zmVlangPotato = array( 1=>'Potati', 2=>'Potaton', 3=>'Potaten' );
//
// and the zmVlang function decides that the first form is used for counts ending in
// 0, 5-9 or 11-19 and the second form when ending in 1 etc.
//
// Variable arrays expressing plurality, see the zmVlang description above
$VLANG = array(
'Event' => array( 0=>'évènts', 1=>'évènt', 2=>'évènts' ),
'Monitor' => array( 0=>'écrans', 1=>'écran', 2=>'écrans' ),
);
// You will need to choose or write a function that can correlate the plurality string arrays
// with variable counts. This is used to conjugate the Vlang arrays above with a number passed
// in to generate the correct noun form.
//
// In languages such as English this is fairly simple
// Note this still has to be used with printf etc to get the right formating
function zmVlang( $langVarArray, $count )
{
krsort( $langVarArray );
foreach ( $langVarArray as $key=>$value )
{
if ( abs($count) >= $key )
{
return( $value );
}
}
die( 'Error, unable to correlate variable language string' );
}
// This is an version that could be used in the Russian example above
// The rules are that the first word form is used if the count ends in
// 0, 5-9 or 11-19. The second form is used then the count ends in 1
// (not including 11 as above) and the third form is used when the
// count ends in 2-4, again excluding any values ending in 12-14.
//
// function zmVlang( $langVarArray, $count )
// {
// $secondlastdigit = substr( $count, -2, 1 );
// $lastdigit = substr( $count, -1, 1 );
// // or
// // $secondlastdigit = ($count/10)%10;
// // $lastdigit = $count%10;
//
// // Get rid of the special cases first, the teens
// if ( $secondlastdigit == 1 && $lastdigit != 0 )
// {
// return( $langVarArray[1] );
// }
// switch ( $lastdigit )
// {
// case 0 :
// case 5 :
// case 6 :
// case 7 :
// case 8 :
// case 9 :
// {
// return( $langVarArray[1] );
// break;
// }
// case 1 :
// {
// return( $langVarArray[2] );
// break;
// }
// case 2 :
// case 3 :
// case 4 :
// {
// return( $langVarArray[3] );
// break;
// }
// }
// die( 'Error, unable to correlate variable language string' );
// }
// This is an example of how the function is used in the code which you can uncomment and
// use to test your custom function.
//$monitors = array();
//$monitors[] = 1; // Choose any number
//echo sprintf( $zmClangMonitorCount, count($monitors), zmVlang( $zmVlangMonitor, count($monitors) ) );
// In this section you can override the default prompt and help texts for the options area
// These overrides are in the form show below where the array key represents the option name minus the initial ZM_
// So for example, to override the help text for ZM_LANG_DEFAULT do
$OLANG = array(
// 'LANG_DEFAULT' => array(
// 'Prompt' => "This is a new prompt for this option",
// 'Help' => "This is some new help for this option which will be displayed in the popup window when the ? is clicked"
// ),
);
?>

802
web/lang/he_il.php Executable file
View File

@ -0,0 +1,802 @@
<?php
//
// ZoneMinder web IL Hebrew language file, $Date$, $Revision$
// Copyright (C) 2003, 2004, 2005, 2006, 2007 Philip Coombes
//
// This program 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 program 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
//
// ZoneMinder Hebrew Translation by oc666@netvision.net.il
// Notes for Translators
// 0. Get some credit, put your name in the line above (optional)
// 1. When composing the language tokens in your language you should try and keep to roughly the
// same length text if possible. Abbreviate where necessary as spacing is quite close in a number of places.
// 2. There are four types of string replacement
// a) Simple replacements are words or short phrases that are static and used directly. This type of
// replacement can be used 'as is'.
// b) Complex replacements involve some dynamic element being included and so may require substitution
// or changing into a different order. The token listed in this file will be passed through sprintf as
// a formatting string. If the dynamic element is a number you will usually need to use a variable
// replacement also as described below.
// c) Variable replacements are used in conjunction with complex replacements and involve the generation
// of a singular or plural noun depending on the number passed into the zmVlang function. See the
// the zmVlang section below for a further description of this.
// d) Optional strings which can be used to replace the prompts and/or help text for the Options section
// of the web interface. These are not listed below as they are quite large and held in the database
// so that they can also be used by the zmconfig.pl script. However you can build up your own list
// quite easily from the Config table in the database if necessary.
// 3. The tokens listed below are not used to build up phrases or sentences from single words. Therefore
// you can safely assume that a single word token will only be used in that context.
// 4. In new language files, or if you are changing only a few words or phrases it makes sense from a
// maintenance point of view to include the original language file and override the old definitions rather
// than copy all the language tokens across. To do this change the line below to whatever your base language
// is and uncomment it.
// require_once( 'zm_lang_en_gb.php' );
// You may need to change the character set here, if your web server does not already
// do this by default, uncomment this if required.
//
// Example
header( "Content-Type: text/html; charset=iso-8859-8-i" );
// You may need to change your locale here if your default one is incorrect for the
// language described in this file, or if you have multiple languages supported.
// If you do need to change your locale, be aware that the format of this function
// is subtlely different in versions of PHP before and after 4.3.0, see
// http://uk2.php.net/manual/en/function.setlocale.php for details.
// Also be aware that changing the whole locale may affect some floating point or decimal
// arithmetic in the database, if this is the case change only the individual locale areas
// that don't affect this rather than all at once. See the examples below.
// Finally, depending on your setup, PHP may not enjoy have multiple locales in a shared
// threaded environment, if you get funny errors it may be this.
//
// Examples
// setlocale( 'LC_ALL', 'he_IL' ); All locale settings pre-4.3.0
setlocale( LC_ALL, 'he_IL' ); //All locale settings 4.3.0 and after
// setlocale( LC_CTYPE, 'he_IL' ); Character class settings 4.3.0 and after
// setlocale( LC_TIME, 'he_IL' ); Date and time formatting 4.3.0 and after
// Simple String Replacements
$SLANG = array(
'24BitColour' => 'öáò 24 áéè',
'8BitGrey' => 'âååðé àôåø 8 áéè',
'Action' => 'ôòåìä',
'Actual' => 'î÷åøé',
'AddNewControl' => 'äåñó ÷åðèøåì çãù',
'AddNewMonitor' => 'äåñó îåðéèåø çãù',
'AddNewUser' => 'äåñó îùúîù çãù',
'AddNewZone' => 'äåñó àéæåø çãù',
'Alarm' => 'àæò÷ä',
'AlarmBrFrames' => 'àæò÷ú<br/>ôøééîéí',
'AlarmFrame' => 'àæò÷ú ôøééîéí',
'AlarmFrameCount' => 'ñôéøú àæò÷åú ôøééîéí',
'AlarmLimits' => 'äâáìåú àæò÷ä',
'AlarmMaximumFPS' => 'Alarm Maximum FPS',
'AlarmPx' => 'àæò÷ú Px',
'AlarmRGBUnset' => 'äéðê çééá ìàúçì àæò÷ú öáò',
'Alert' => 'äúøàä',
'All' => 'äëì',
'Apply' => 'äçì',
'ApplyingStateChange' => 'äçì ùéðåé îöá',
'ArchArchived' => 'àøëéá áìáã',
'Archive' => 'àøëéá',
'Archived' => 'àåøëá',
'ArchUnarchived' => 'ìà ìàøëéá áìáã',
'Area' => 'àæåø',
'AreaUnits' => 'àæåø (px/%)',
'AttrAlarmFrames' => 'Alarm Frames',
'AttrArchiveStatus' => 'Archive Status',
'AttrAvgScore' => 'ðé÷åã îîåöò',
'AttrCause' => 'ñéáä',
'AttrDate' => 'úàøéê',
'AttrDateTime' => 'úàøéê/ùòä',
'AttrDiskBlocks' => 'Disk Blocks',
'AttrDiskPercent' => 'Disk Percent',
'AttrDuration' => 'îùê æîï',
'AttrFrames' => 'ôøééîéí',
'AttrId' => 'Id',
'AttrMaxScore' => 'ðé÷åã î÷ñéîìé',
'AttrMonitorId' => 'Monitor Id',
'AttrMonitorName' => 'ùí îåðéèåø',
'AttrName' => 'ùí',
'AttrNotes' => 'äòøåú',
'AttrSystemLoad' => 'System Load',
'AttrTime' => 'ùòä',
'AttrTotalScore' => 'ñê ñëåí',
'AttrWeekday' => 'éåí áùáåò',
'Auto' => 'àåèå',
'AutoStopTimeout' => 'ôñ÷ æîï òöéøä àåèå',
'AvgBrScore' => 'ðé÷åã<br/>îîåöò',
'Background' => 'ø÷ò',
'BackgroundFilter' => 'äøõ îñðï áø÷ò',
'BadAlarmFrameCount' => 'Alarm frame count must be an integer of one or more',
'BadAlarmMaxFPS' => 'Alarm Maximum FPS must be a positive integer or floating point value',
'BadChannel' => 'Channel must be set to an integer of zero or more',
'BadDevice' => 'Device must be set to a valid value',
'BadFormat' => 'Format must be set to an integer of zero or more',
'BadFPSReportInterval' => 'FPS report interval buffer count must be an integer of 100 or more',
'BadFrameSkip' => 'Frame skip count must be an integer of zero or more',
'BadHeight' => 'Height must be set to a valid value',
'BadHost' => 'Host must be set to a valid ip address or hostname, do not include http://',
'BadImageBufferCount' => 'Image buffer size must be an integer of 10 or more',
'BadLabelX' => 'Label X co-ordinate must be set to an integer of zero or more',
'BadLabelY' => 'Label Y co-ordinate must be set to an integer of zero or more',
'BadMaxFPS' => 'Maximum FPS must be a positive integer or floating point value',
'BadNameChars' => 'Names may only contain alphanumeric characters plus hyphen and underscore',
'BadPath' => 'Path must be set to a valid value',
'BadPort' => 'Port must be set to a valid number',
'BadPostEventCount' => 'Post event image count must be an integer of zero or more',
'BadPreEventCount' => 'Pre event image count must be at least zero, and less than image buffer size',
'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',
'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',
'BadWidth' => 'Width must be set to a valid value',
'Bandwidth' => 'øåçá ôñ',
'BlobPx' => 'Blob Px',
'Blobs' => 'Blobs',
'BlobSizes' => 'Blob Sizes',
'Brightness' => 'áäéøåú',
'Buffers' => 'Buffers',
'CanAutoFocus' => 'àôùø äúî÷ãåú àåèåîèé',
'CanAutoGain' => 'Can Auto Gain',
'CanAutoIris' => 'Can Auto Iris',
'CanAutoWhite' => 'Can Auto White Bal.',
'CanAutoZoom' => 'àôùø æåí àåèåîèé',
'Cancel' => 'áèì',
'CancelForcedAlarm' => 'Cancel Forced Alarm',
'CanFocus' => 'àôùø äúî÷ãåú',
'CanFocusAbs' => 'àôùø äúî÷ãåú àáñåìåèé',
'CanFocusCon' => 'àôùø äúî÷ãåú îúîùê',
'CanFocusRel' => 'àôùø äúî÷ãåú éçñé',
'CanGainAbs' => 'Can Gain Absolute',
'CanGain' => 'Can Gain ',
'CanGainCon' => 'Can Gain Continuous',
'CanGainRel' => 'Can Gain Relative',
'CanIrisAbs' => 'Can Iris Absolute',
'CanIris' => 'Can Iris',
'CanIrisCon' => 'Can Iris Continuous',
'CanIrisRel' => 'Can Iris Relative',
'CanMove' => 'àôùø úðåòä',
'CanMoveAbs' => 'àôùø úðåòä àáñåìåèéú',
'CanMoveCon' => 'àôùø úæåæä îúîùëú',
'CanMoveDiag' => 'Can Move Diagonally',
'CanMoveMap' => 'Can Move Mapped',
'CanMoveRel' => 'àôùø úæåæä éçñéú',
'CanPan' => 'Can Pan' ,
'CanReset' => 'àôùø àúçåì',
'CanSetPresets' => 'Can Set Presets',
'CanSleep' => 'àôùø îöá ùéðä',
'CanTilt' => 'àôùø æòæåò',
'CanWake' => 'àôùø éöéàä îîöá ùéðä',
'CanWhiteAbs' => 'Can White Bal. Absolute',
'CanWhiteBal' => 'Can White Bal.',
'CanWhite' => 'Can White Balance',
'CanWhiteCon' => 'Can White Bal. Continuous',
'CanWhiteRel' => 'Can White Bal. Relative',
'CanZoom' => 'àôùø æåí',
'CanZoomAbs' => 'àôùø æåí àáñåìåèé',
'CanZoomCon' => 'àôùø æåí îúîùê',
'CanZoomRel' => 'àôùø æåí éçñé',
'CaptureHeight' => 'Capture Height',
'CapturePalette' => 'Capture Palette',
'CaptureWidth' => 'Capture Width',
'Cause' => 'ñéáä',
'CheckMethod' => 'Alarm Check Method',
'ChooseFilter' => 'áçø îñðï',
'ChoosePreset' => 'Choose Preset',
'Close' => 'ñâåø',
'Colour' => 'öáò',
'Command' => 'ô÷åãä',
'Config' => 'úöåøä',
'ConfiguredFor' => 'úöåøä òáåø',
'ConfirmDeleteEvents' => 'Are you sure you wish to delete the selected events?',
'ConfirmPassword' => 'àùø ñéñîà',
'ConjAnd' => 'å',
'ConjOr' => 'àå',
'Console' => '÷åðñåì',
'ContactAdmin' => 'öåø ÷ùø òí îðäì äîòøëú áùáéì ôøèéí ðåñôéí.',
'Continue' => 'äîùê',
'Contrast' => 'ðéâåãéåú',
'Control' => '÷åðèøåì',
'ControlAddress' => 'ëúåáú ä÷åðèøåì',
'ControlCap' => 'éëåìú ä÷åðèøåì',
'ControlCaps' => 'éëåìåú ä÷åðèøåì',
'ControlDevice' => 'äú÷ï ä÷åðèøåì',
'Controllable' => 'Controllable',
'ControlType' => 'ñåâ ä÷åðèøåì',
'Cycle' => 'îçæåøé',
'CycleWatch' => 'öôééä îçæåøéú',
'Day' => 'éåí',
'Debug' => 'Debug',
'DefaultRate' => 'Default Rate',
'DefaultScale' => 'Default Scale',
'DefaultView' => 'Default View',
'Delete' => 'îç÷',
'DeleteAndNext' => 'îç÷ &amp; äáà',
'DeleteAndPrev' => 'îç÷ &amp; ä÷åãí',
'DeleteSavedFilter' => 'îç÷ îñðï ùîåø',
'Description' => 'úéàåø',
'DeviceChannel' => 'òøåõ ääú÷ï',
'DeviceFormat' => 'úáðéú ääú÷ï',
'DeviceNumber' => 'îñôø ääú÷ï',
'DevicePath' => 'ðúéá ääú÷ï',
'Devices' => 'äú÷ðéí',
'Dimensions' => 'îéîãéí',
'DisableAlarms' => 'ðèøì àæò÷åú',
'Disk' => 'ãéñ÷',
'Donate' => 'úøåí áá÷ùä',
'DonateAlready' => 'ìà, úøîúé ëáø',
'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.',
'DonateRemindDay' => 'òãééï ìà, äæëø ìà áòåã éåí àçã',
'DonateRemindHour' => 'òãééï ìà, äæëø ìé áòåã ùòä àçú',
'DonateRemindMonth' => 'òãééï ìà, äæëø ìé áòåã çåãù àçã',
'DonateRemindNever' => 'ìà, àðé ìà øåöä ìúøåí, àì úúæëø àåúé',
'DonateRemindWeek' => 'òãééï ìà, äæëø ìé áòåã ùáåò àçã',
'DonateYes' => 'ëï, àðé îòåðééï ìúøåí òëùéå',
'Download' => 'äåøã',
'Duration' => 'îùê æîï',
'Edit' => 'òøåê',
'Email' => 'ãåà"ì',
'EnableAlarms' => 'àôùø àæò÷åú',
'Enabled' => 'àôùø',
'EnterNewFilterName' => 'äæï îñðï çãù',
'Error' => 'ùâéàä',
'ErrorBrackets' => 'Error, please check you have an equal number of opening and closing brackets',
'ErrorValidValue' => 'Error, please check that all terms have a valid value',
'Etc' => 'åëå\'',
'Event' => 'àéøåò',
'EventFilter' => 'îñðï àéøåò',
'EventId' => 'æéäåé àéøåò',
'EventName' => 'ùí àéøåò',
'EventPrefix' => 'Event Prefix',
'Events' => 'àéøåòéí',
'Exclude' => 'ììà',
'Execute' => 'áöò',
'Export' => 'éöà',
'ExportDetails' => 'éöà ôøèé àéøåò',
'ExportFailed' => 'éöåà ðëùì',
'ExportFormat' => 'éöà úáðéú ÷åáõ',
'ExportFormatTar' => 'Tar',
'ExportFormatZip' => 'Zip',
'ExportFrames' => 'Export Frame Details',
'ExportImageFiles' => 'éöà ÷áöé úîåðä',
'Exporting' => 'îééöà',
'ExportMiscFiles' => 'éöà ÷áöéí àçøéí (àí éùðí)',
'ExportOptions' => 'éöà àôùøåéåú',
'ExportVideoFiles' => 'Export Video Files (if present)',
'Far' => 'Far',
'FastForward' => 'Fast Forward',
'Feed' => 'Feed',
'File' => '÷åáõ',
'FileColours' => 'öáòé ÷åáõ',
'FilePath' => 'ðúéá ÷åáõ',
'FilterArchiveEvents' => 'àøëá úåàîéí',
'FilterDeleteEvents' => 'îç÷ úåàîéí',
'FilterEmailEvents' => 'ùìç ãåàø ùì ëì äúåàîéí',
'FilterExecuteEvents' => 'Execute command on all matches',
'FilterMessageEvents' => 'Message details of all matches',
'FilterPx' => 'Filter Px',
'Filters' => 'îñððéí',
'FilterUnset' => 'òìéê ìöééï øåçá åâåáä îñðï',
'FilterUploadEvents' => 'òìä àú ëì äúåàîéí',
'FilterVideoEvents' => 'öåø åéãàå ìëì äúåàîéí',
'First' => 'äøàùåï',
'FlippedHori' => 'Flipped Horizontally',
'FlippedVert' => 'Flipped Vertically',
'Focus' => 'äúî÷ã',
'ForceAlarm' => 'äëøç àæò÷ä',
'Format' => 'úáðéú',
'FPS' => 'fps',
'FPSReportInterval' => 'FPS Report Interval',
'Frame' => 'ôøééí',
'FrameId' => 'Frame Id',
'FrameRate' => 'Frame Rate',
'Frames' => 'ôøééîéí',
'FrameSkip' => 'ãìâ ôøééí',
'FTP' => 'FTP',
'Func' => 'ôåð÷',
'Function' => 'ôåð÷öéä',
'Gain' => 'Gain',
'General' => 'ëììé',
'GenerateVideo' => 'öåø åéãàå',
'GeneratingVideo' => 'îééöø åéãàå',
'GoToZoneMinder' => 'á÷ø ZoneMinder.com',
'Grey' => 'àôåø',
'Group' => '÷áåöä',
'Groups' => '÷áåöåú',
'HasFocusSpeed' => 'Has Focus Speed',
'HasGainSpeed' => 'Has Gain Speed',
'HasHomePreset' => 'Has Home Preset',
'HasIrisSpeed' => 'Has Iris Speed',
'HasPanSpeed' => 'Has Pan Speed',
'HasPresets' => 'Has Presets',
'HasTiltSpeed' => 'Has Tilt Speed',
'HasTurboPan' => 'Has Turbo Pan',
'HasTurboTilt' => 'Has Turbo Tilt',
'HasWhiteSpeed' => 'Has White Bal. Speed',
'HasZoomSpeed' => 'Has Zoom Speed',
'High' => 'âáåä',
'HighBW' => 'âáåä&nbsp;ø/ô',
'Home' => 'áéú',
'Hour' => 'ùòä',
'Hue' => 'Hue',
'Id' => 'æéäåé',
'Idle' => 'äîúðä',
'Ignore' => 'äúòìí',
'Image' => 'úîåðä',
'ImageBufferSize' => 'Image Buffer Size (frames)',
'Images' => 'úîåðåú',
'In' => 'áúåê',
'Include' => 'ëìåì',
'Inverted' => 'äôåê',
'Iris' => 'Iris',
'KeyString' => 'îçøåæú úåéí',
'Label' => 'úååéú',
'Language' => 'ùôä',
'Last' => 'àçøåï',
'LimitResultsPost' => 'úåöàåú áìáã;', // This is used at the end of the phrase 'Limit to first N results only'
'LimitResultsPre' => 'äâáì ìøàùåï', // This is used at the beginning of the phrase 'Limit to first N results only'
'LinkedMonitors' => 'îåðéèåøéí î÷åùøéí',
'List' => 'øùéîä',
'Load' => 'èòï',
'Local' => 'î÷åîé',
'LoggedInAs' => 'äúçáø ë',
'LoggingIn' => 'îúçáø',
'Login' => 'äúçáø',
'Logout' => 'äúðú÷',
'Low' => 'ðîåê',
'LowBW' => 'ðîåê&nbsp;ø/ô',
'Main' => 'îøëæé',
'Man' => 'îãøéê',
'Manual' => 'îãøéê',
'Mark' => 'ñîï',
'Max' => 'î÷ñ',
'MaxBandwidth' => 'øåçá ôñ î÷ñ',
'MaxBrScore' => 'ðé÷åã<br/>î÷ñéîìé',
'MaxFocusRange' => 'Max Focus Range',
'MaxFocusSpeed' => 'Max Focus Speed',
'MaxFocusStep' => 'Max Focus Step',
'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',
'MaxPanRange' => 'Max Pan Range',
'MaxPanSpeed' => 'Max Pan Speed',
'MaxPanStep' => 'Max Pan Step',
'MaxTiltRange' => 'Max Tilt Range',
'MaxTiltSpeed' => 'Max Tilt Speed',
'MaxTiltStep' => 'Max Tilt Step',
'MaxWhiteRange' => 'Max White Bal. Range',
'MaxWhiteSpeed' => 'Max White Bal. Speed',
'MaxWhiteStep' => 'Max White Bal. Step',
'MaxZoomRange' => 'Max Zoom Range',
'MaxZoomSpeed' => 'Max Zoom Speed',
'MaxZoomStep' => 'Max Zoom Step',
'Medium' => 'áéðåðé',
'MediumBW' => 'Medium&nbsp;B/W',
'MinAlarmAreaLtMax' => 'Minimum alarm area should be less than maximum',
'MinAlarmAreaUnset' => 'You must specify the minimum alarm pixel count',
'MinBlobAreaLtMax' => 'Minimum blob area should be less than maximum',
'MinBlobAreaUnset' => 'You must specify the minimum blob pixel count',
'MinBlobLtMinFilter' => 'Minimum blob area should be less than or equal to minimum filter area',
'MinBlobsLtMax' => 'Minimum blobs should be less than maximum',
'MinBlobsUnset' => 'You must specify the minimum blob count',
'MinFilterAreaLtMax' => 'Minimum filter area should be less than maximum',
'MinFilterAreaUnset' => 'You must specify the minimum filter pixel count',
'MinFilterLtMinAlarm' => 'Minimum filter area should be less than or equal to minimum alarm area',
'MinFocusRange' => 'Min Focus Range',
'MinFocusSpeed' => 'Min Focus Speed',
'MinFocusStep' => 'Min Focus Step',
'MinGainRange' => 'Min Gain Range',
'MinGainSpeed' => 'Min Gain Speed',
'MinGainStep' => 'Min Gain Step',
'MinIrisRange' => 'Min Iris Range',
'MinIrisSpeed' => 'Min Iris Speed',
'MinIrisStep' => 'Min Iris Step',
'MinPanRange' => 'Min Pan Range',
'MinPanSpeed' => 'Min Pan Speed',
'MinPanStep' => 'Min Pan Step',
'MinPixelThresLtMax' => 'Minimum pixel threshold should be less than maximum',
'MinPixelThresUnset' => 'You must specify a minimum pixel threshold',
'MinTiltRange' => 'Min Tilt Range',
'MinTiltSpeed' => 'Min Tilt Speed',
'MinTiltStep' => 'Min Tilt Step',
'MinWhiteRange' => 'Min White Bal. Range',
'MinWhiteSpeed' => 'Min White Bal. Speed',
'MinWhiteStep' => 'Min White Bal. Step',
'MinZoomRange' => 'Min Zoom Range',
'MinZoomSpeed' => 'Min Zoom Speed',
'MinZoomStep' => 'Min Zoom Step',
'Misc' => 'Misc',
'Monitor' => 'îåðéèåø',
'MonitorIds' => 'Monitor&nbsp;Ids',
'MonitorPresetIntro' => 'Select an appropriate preset from the list below.<br><br>Please note that this may overwrite any values you already have configured for this monitor.<br><br>',
'MonitorPreset' => 'Monitor Preset',
'Monitors' => 'îåðéèåøéí',
'Montage' => 'Montage',
'Month' => 'çåãù',
'Move' => 'äææ',
'MustBeGe' => 'must be greater than or equal to',
'MustBeLe' => 'must be less than or equal to',
'MustConfirmPassword' => 'You must confirm the password',
'MustSupplyPassword' => 'You must supply a password',
'MustSupplyUsername' => 'You must supply a username',
'Name' => 'ùí',
'Near' => 'ìéã',
'Network' => 'øùú',
'New' => 'çãù',
'NewGroup' => '÷áåöä çãùä',
'NewLabel' => 'úååéú çãùä',
'NewPassword' => 'ñéñîà çãùä',
'NewState' => 'îöá çãù',
'NewUser' => 'îùúîù çãù',
'Next' => 'äáà',
'No' => 'ìà',
'NoFramesRecorded' => 'There are no frames recorded for this event',
'NoGroup' => 'ììà ÷áåöä',
'None' => 'øé÷',
'NoneAvailable' => 'áìúé æîéï',
'Normal' => 'ðåøîìé',
'NoSavedFilters' => 'NoSavedFilters',
'NoStatisticsRecorded' => 'There are no statistics recorded for this event/frame',
'Notes' => 'Notes',
'NumPresets' => 'Num Presets',
'Off' => 'ëáåé',
'On' => 'ãìå÷',
'Open' => 'ôúç',
'OpEq' => 'ùååä ì',
'OpGt' => 'âãåì î',
'OpGtEq' => 'greater than or equal to',
'OpIn' => 'in set',
'OpLt' => 'ôçåú î',
'OpLtEq' => 'less than or equal to',
'OpMatches' => 'matches',
'OpNe' => 'àéðå ùååä',
'OpNotIn' => 'not in set',
'OpNotMatches' => 'àéðå úåàí',
'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.',
'Options' => 'àôùøåéåú',
'Order' => 'îéåï',
'OrEnterNewName' => 'or enter new name',
'Orientation' => 'Orientation',
'Out' => 'Out',
'OverwriteExisting' => 'Overwrite Existing',
'Paged' => 'Paged',
'PanLeft' => 'Pan Left',
'Pan' => 'Pan',
'PanRight' => 'Pan Right',
'PanTilt' => 'Pan/Tilt',
'Parameter' => 'ôøîèø',
'Password' => 'ñéñîà',
'PasswordsDifferent' => 'The new and confirm passwords are different',
'Paths' => 'ðúéáéí',
'Pause' => 'Pause',
'Phone' => 'èìôåï',
'PhoneBW' => 'ø/ô&nbsp;èìôåï',
'PixelDiff' => 'Pixel Diff',
'Pixels' => 'ôé÷ñìéí',
'PlayAll' => 'ðâï äëì',
'Play' => 'Play',
'PleaseWait' => 'äîúï áá÷ùä',
'Point' => 'ð÷åãä',
'PostEventImageBuffer' => 'Post Event Image Count',
'PreEventImageBuffer' => 'Pre Event Image Count',
'PreserveAspect' => 'Preserve Aspect Ratio',
'Preset' => 'Preset',
'Presets' => 'Presets',
'Prev' => 'ä÷åãí',
'Protocol' => 'Protocol',
'Rate' => 'ãéøåâ',
'Real' => 'àîéúé',
'Record' => 'ä÷ìèä',
'RefImageBlendPct' => 'Reference Image Blend %ge',
'Refresh' => 'øòðåï',
'Remote' => 'îøåç÷',
'RemoteHostName' => 'ùí îàøç îøåç÷',
'RemoteHostPath' => 'ðúéá îàøç îøåç÷',
'RemoteHostPort' => 'ôåøè îàøç îøåç÷',
'RemoteImageColours' => 'Remote Image Colours',
'Rename' => 'ùðä ùí',
'Replay' => 'ðâï ùåá',
'ReplayAll' => 'All Events',
'ReplayGapless' => 'Gapless Events',
'Replay' => 'Replay',
'ReplaySingle' => 'Single Event',
'Reset' => 'àôñ',
'ResetEventCounts' => 'Reset Event Counts',
'Restart' => 'àúçì',
'Restarting' => 'îàúçì',
'RestrictedCameraIds' => 'Restricted Camera Ids',
'RestrictedMonitors' => 'Restricted Monitors',
'ReturnDelay' => 'çæøä îäùäéä',
'ReturnLocation' => 'îé÷åí çæøä',
'Rewind' => 'Rewind',
'RotateLeft' => 'ñåáá ùîàìä',
'RotateRight' => 'ñåáá éîéðä',
'RunMode' => 'öåøú øéöä',
'Running' => 'îøéõ',
'RunState' => 'îöá øéöä',
'Save' => 'ùîåø',
'SaveAs' => 'ùîåø áùí',
'SaveFilter' => 'ùîåø îñðï',
'Scale' => 'ñ÷àìä',
'Score' => 'ðé÷åã',
'Secs' => 'ùðéåú',
'Sectionlength' => 'àåøê ÷èò',
'Select' => 'áçø',
'SelectMonitors' => 'áçø îåðéèåøéí',
'SelfIntersecting' => 'Polygon edges must not intersect',
'Set' => '÷áò',
'SetLearnPrefs' => 'Set Learn Prefs', // This can be ignored for now
'SetNewBandwidth' => 'Set New Bandwidth',
'SetPreset' => 'Set Preset',
'Settings' => 'äâãøåú',
'ShowFilterWindow' => 'Show Filter Window',
'ShowTimeline' => 'Show Timeline',
'SignalCheckColour' => 'Signal Check Colour',
'Size' => 'âåãì',
'Sleep' => 'ùéðä',
'SortAsc' => 'Asc',
'SortBy' => 'Sort by',
'SortDesc' => 'Desc',
'Source' => 'î÷åø',
'SourceType' => 'ñåâ î÷åø',
'Speed' => 'îäéøåú',
'SpeedHigh' => 'îäéøåú âáåää',
'SpeedLow' => 'îäéøåú ðîåëä',
'SpeedMedium' => 'îöìîä áéðåðéú',
'SpeedTurbo' => 'îäéøåú èåøáå',
'Start' => 'äúçì',
'State' => 'îöá',
'Stats' => 'îöáéí',
'Status' => 'ñèèåñ',
'Step' => 'öòã',
'StepBack' => 'Step Back',
'StepForward' => 'Step Forward',
'StepLarge' => 'öòã âãåì',
'StepMedium' => 'öòã áéðåðé',
'StepNone' => 'àì úöòã',
'StepSmall' => 'öòã ÷èï',
'Stills' => 'ñèéìñ',
'Stop' => 'òöåø',
'Stopped' => 'ðòöø',
'Stream' => 'ñèøéí',
'StreamReplayBuffer' => 'Stream Replay Image Buffer',
'Submit' => 'Submit',
'System' => 'îòøëú',
'Tele' => 'èì',
'Thumbnail' => 'Thumbnail',
'Tilt' => 'Tilt',
'Time' => 'æîï',
'TimeDelta' => 'ùéðåé áæîï',
'Timeline' => '÷å æîï',
'Timestamp' => 'çåúîú æîï',
'TimeStamp' => 'çåúîú æîï',
'TimestampLabelFormat' => 'Timestamp Label Format',
'TimestampLabelX' => 'Timestamp Label X',
'TimestampLabelY' => 'Timestamp Label Y',
'Today' => 'äéåí',
'Tools' => 'ëìéí',
'TotalBrScore' => 'ñê<br/>ðé÷åã',
'TrackDelay' => 'Track Delay',
'TrackMotion' => 'Track Motion',
'Triggers' => 'èøéâøéí',
'TurboPanSpeed' => 'Turbo Pan Speed',
'TurboTiltSpeed' => 'Turbo Tilt Speed',
'Type' => 'ñåâ',
'Unarchive' => 'áìúé àøëéá',
'Units' => 'éçéãåú',
'Unknown' => 'áìúé éãåò',
'Update' => 'òãëåï',
'UpdateAvailable' => 'òãëåï ìæåï-îéðãø àôùøé.',
'UpdateNotNecessary' => 'òãëåï àéðå äëøçé.',
'UseFilter' => 'ùéîåù áîñðï',
'UseFilterExprsPost' => '&nbsp;filter&nbsp;expressions', // This is used at the end of the phrase 'use N filter expressions'
'UseFilterExprsPre' => 'ùéîåù&nbsp;', // This is used at the beginning of the phrase 'use N filter expressions'
'User' => 'îùúîù',
'Username' => 'ùí îùúîù',
'Users' => 'îùúîùéí',
'Value' => 'òøê',
'Version' => 'âéøñä',
'VersionIgnore' => 'äúòìí îâéøñä æå',
'VersionRemindDay' => 'äæëø ìé áòåã éåí àçã',
'VersionRemindHour' => 'äæëø ìé áòåã ùòä àçú',
'VersionRemindNever' => 'Don\'t remind about new versions',
'VersionRemindWeek' => 'Remind again in 1 week',
'Video' => 'åéãàå',
'VideoFormat' => 'úáðéú åéãàå',
'VideoGenFailed' => 'Video Generation Failed!',
'VideoGenFiles' => 'Existing Video Files',
'VideoGenNoFiles' => 'No Video Files Found',
'VideoGenParms' => 'Video Generation Parameters',
'VideoGenSucceeded' => 'Video Generation Succeeded!',
'VideoSize' => 'âåãì åéãàå',
'View' => 'äöâ',
'ViewAll' => 'äöâ äëì',
'ViewEvent' => 'äöâ àéøåò',
'ViewPaged' => 'View Paged',
'Wake' => 'äòø',
'WarmupFrames' => 'Warmup Frames',
'Watch' => 'öôä',
'Web' => 'àéðèøðè',
'WebColour' => 'öáò àéðèøðè',
'Week' => 'ùáåò',
'White' => 'ìáï',
'WhiteBalance' => 'White Balance',
'Wide' => 'øçá',
'X10ActivationString' => 'X10 Activation String',
'X10InputAlarmString' => 'X10 Input Alarm String',
'X10OutputAlarmString' => 'X10 Output Alarm String',
'X10' => 'X10',
'X' => 'X',
'Yes' => 'ëï',
'YouNoPerms' => 'àéï ìê äøùàä ìäéëðñ ìî÷åø æä.',
'Y' => 'Y',
'Zone' => 'àæåø',
'ZoneAlarmColour' => 'Alarm Colour (Red/Green/Blue)',
'ZoneArea' => 'Zone Area',
'ZoneFilterSize' => 'Filter Width/Height (pixels)',
'ZoneMinMaxAlarmArea' => 'Min/Max Alarmed Area',
'ZoneMinMaxBlobArea' => 'Min/Max Blob Area',
'ZoneMinMaxBlobs' => 'Min/Max Blobs',
'ZoneMinMaxFiltArea' => 'Min/Max Filtered Area',
'ZoneMinMaxPixelThres' => 'Min/Max Pixel Threshold (0-255)',
'ZoneOverloadFrames' => 'Overload Frame Ignore Count',
'Zones' => 'àæåøéí',
'Zoom' => 'æåí',
'ZoomIn' => 'æåí ôðéîä',
'ZoomOut' => 'æåí äçåöä',
);
// Complex replacements with formatting and/or placements, must be passed through sprintf
$CLANG = array(
'CurrentLogin' => 'Current login is \'%1$s\'',
'EventCount' => '%1$s %2$s', // For example '37 Events' (from Vlang below)
'LastEvents' => 'Last %1$s %2$s', // For example 'Last 37 Events' (from Vlang below)
'LatestRelease' => 'The latest release is v%1$s, you have v%2$s.',
'MonitorCount' => '%1$s %2$s', // For example '4 Monitors' (from Vlang below)
'MonitorFunction' => 'Monitor %1$s Function',
'RunningRecentVer' => 'You are running the most recent version of ZoneMinder, v%s.',
);
// The next section allows you to describe a series of word ending and counts used to
// generate the correctly conjugated forms of words depending on a count that is associated
// with that word.
// This intended to allow phrases such a '0 potatoes', '1 potato', '2 potatoes' etc to
// conjugate correctly with the associated count.
// In some languages such as English this is fairly simple and can be expressed by assigning
// a count with a singular or plural form of a word and then finding the nearest (lower) value.
// So '0' of something generally ends in 's', 1 of something is singular and has no extra
// ending and 2 or more is a plural and ends in 's' also. So to find the ending for '187' of
// something you would find the nearest lower count (2) and use that ending.
//
// So examples of this would be
// $zmVlangPotato = array( 0=>'Potatoes', 1=>'Potato', 2=>'Potatoes' );
// $zmVlangSheep = array( 0=>'Sheep' );
//
// where you can have as few or as many entries in the array as necessary
// If your language is similar in form to this then use the same format and choose the
// appropriate zmVlang function below.
// If however you have a language with a different format of plural endings then another
// approach is required . For instance in Russian the word endings change continuously
// depending on the last digit (or digits) of the numerator. In this case then zmVlang
// arrays could be written so that the array index just represents an arbitrary 'type'
// and the zmVlang function does the calculation about which version is appropriate.
//
// So an example in Russian might be (using English words, and made up endings as I
// don't know any Russian!!)
// $zmVlangPotato = array( 1=>'Potati', 2=>'Potaton', 3=>'Potaten' );
//
// and the zmVlang function decides that the first form is used for counts ending in
// 0, 5-9 or 11-19 and the second form when ending in 1 etc.
//
// Variable arrays expressing plurality, see the zmVlang description above
$VLANG = array(
'Event' => array( 0=>'Events', 1=>'Event', 2=>'Events' ),
'Monitor' => array( 0=>'Monitors', 1=>'Monitor', 2=>'Monitors' ),
);
// You will need to choose or write a function that can correlate the plurality string arrays
// with variable counts. This is used to conjugate the Vlang arrays above with a number passed
// in to generate the correct noun form.
//
// In languages such as English this is fairly simple
// Note this still has to be used with printf etc to get the right formating
function zmVlang( $langVarArray, $count )
{
krsort( $langVarArray );
foreach ( $langVarArray as $key=>$value )
{
if ( abs($count) >= $key )
{
return( $value );
}
}
die( 'Error, unable to correlate variable language string' );
}
// This is an version that could be used in the Russian example above
// The rules are that the first word form is used if the count ends in
// 0, 5-9 or 11-19. The second form is used then the count ends in 1
// (not including 11 as above) and the third form is used when the
// count ends in 2-4, again excluding any values ending in 12-14.
//
// function zmVlang( $langVarArray, $count )
// {
// $secondlastdigit = substr( $count, -2, 1 );
// $lastdigit = substr( $count, -1, 1 );
// // or
// // $secondlastdigit = ($count/10)%10;
// // $lastdigit = $count%10;
//
// // Get rid of the special cases first, the teens
// if ( $secondlastdigit == 1 && $lastdigit != 0 )
// {
// return( $langVarArray[1] );
// }
// switch ( $lastdigit )
// {
// case 0 :
// case 5 :
// case 6 :
// case 7 :
// case 8 :
// case 9 :
// {
// return( $langVarArray[1] );
// break;
// }
// case 1 :
// {
// return( $langVarArray[2] );
// break;
// }
// case 2 :
// case 3 :
// case 4 :
// {
// return( $langVarArray[3] );
// break;
// }
// }
// die( 'Error, unable to correlate variable language string' );
// }
// This is an example of how the function is used in the code which you can uncomment and
// use to test your custom function.
//$monitors = array();
//$monitors[] = 1; // Choose any number
//echo sprintf( $zmClangMonitorCount, count($monitors), zmVlang( $zmVlangMonitor, count($monitors) ) );
// In this section you can override the default prompt and help texts for the options area
// These overrides are in the form show below where the array key represents the option name minus the initial ZM_
// So for example, to override the help text for ZM_LANG_DEFAULT do
$OLANG = array(
// 'LANG_DEFAULT' => array(
// 'Prompt' => "This is a new prompt for this option",
// 'Help' => "This is some new help for this option which will be displayed in the popup window when the ? is clicked"
// ),
);
?>

811
web/lang/hu_hu.php Normal file
View File

@ -0,0 +1,811 @@
<?php
//
// ZoneMinder web HU Hungarian language file, $Date$, $Revision$
// Copyright (C) 2003, 2004, 2005, 2006 Philip Coombes
//
// This program 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 program 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
//
// ZoneMinder Hungarian Translation by szimszon at oregpreshaz dot eu, robi
// version: 0.5 - 2007.12.30. - frissítés 1.23.1-hez (robi)
// version: 0.4 - 2007.12.30. - frissítés 1.23.0-hoz (robi)
// version: 0.3 - 2006.04.27. - fordítás befejezése, elrendezése elféréshez (robi)
// version: 0.2 - 2006.12.05. - par javitas
// version: 0.1 - 2006.11.27. - sok typoval es par leforditatlan resszel
// Notes for Translators
// 0. Get some credit, put your name in the line above (optional)
// 1. When composing the language tokens in your language you should try and keep to roughly the
// same length text if possible. Abbreviate where necessary as spacing is quite close in a number of places.
// 2. There are four types of string replacement
// a) Simple replacements are words or short phrases that are static and used directly. This type of
// replacement can be used 'as is'.
// b) Complex replacements involve some dynamic element being included and so may require substitution
// or changing into a different order. The token listed in this file will be passed through sprintf as
// a formatting string. If the dynamic element is a number you will usually need to use a variable
// replacement also as described below.
// c) Variable replacements are used in conjunction with complex replacements and involve the generation
// of a singular or plural noun depending on the number passed into the zmVlang function. See the
// the zmVlang section below for a further description of this.
// d) Optional strings which can be used to replace the prompts and/or help text for the Options section
// of the web interface. These are not listed below as they are quite large and held in the database
// so that they can also be used by the zmconfig.pl script. However you can build up your own list
// quite easily from the Config table in the database if necessary.
// 3. The tokens listed below are not used to build up phrases or sentences from single words. Therefore
// you can safely assume that a single word token will only be used in that context.
// 4. In new language files, or if you are changing only a few words or phrases it makes sense from a
// maintenance point of view to include the original language file and override the old definitions rather
// than copy all the language tokens across. To do this change the line below to whatever your base language
// is and uncomment it.
// require_once( 'zm_lang_en_gb.php' );
// You may need to change the character set here, if your web server does not already
// do this by default, uncomment this if required.
//
// Example
header( "Content-Type: text/html; charset=iso8859-2" );
// You may need to change your locale here if your default one is incorrect for the
// language described in this file, or if you have multiple languages supported.
// If you do need to change your locale, be aware that the format of this function
// is subtlely different in versions of PHP before and after 4.3.0, see
// http://uk2.php.net/manual/en/function.setlocale.php for details.
// Also be aware that changing the whole locale may affect some floating point or decimal
// arithmetic in the database, if this is the case change only the individual locale areas
// that don't affect this rather than all at once. See the examples below.
// Finally, depending on your setup, PHP may not enjoy have multiple locales in a shared
// threaded environment, if you get funny errors it may be this.
//
// Examples
// setlocale( 'LC_ALL', 'en_GB' ); All locale settings pre-4.3.0
// setlocale( LC_ALL, 'hu_HU' ); //All locale settings 4.3.0 and after
//setlocale( LC_CTYPE, 'hu_HU'); //Character class settings 4.3.0 and after
//setlocale( LC_TIME, 'hu_HU'); //Date and time formatting 4.3.0 and after
setlocale( LC_TIME, 'hu_HU' );
setlocale( LC_ALL, 'hu_HU' );
// Simple String Replacements
$SLANG = array(
'24BitColour' => '24 bites szín',
'8BitGrey' => '8 bit szürkeárnyalat',
'Action' => 'Mûvelet',
'Actual' => 'Tényleges',
'AddNewControl' => 'Új vezérlés',
'AddNewMonitor' => 'Új monitor',
'AddNewUser' => 'Új felhasználó',
'AddNewZone' => 'Új zóna',
'AlarmBrFrames' => 'Riadó<br/>képek',
'AlarmFrameCount' => 'Riadó képek száma',
'AlarmFrame' => 'Riadó kép',
'AlarmLimits' => 'Riasztási határok',
'AlarmMaximumFPS' => 'Maximális FPS riasztásnál',
'AlarmPx' => 'Riadó képpont',
'AlarmRGBUnset' => 'Be kell állítani egy RGB színt a riasztáshoz',
'Alarm' => 'Riadó',
'Alert' => 'Riasztás',
'All' => 'Mind',
'Apply' => 'Alkalmaz',
'ApplyingStateChange' => 'Állapot váltás...',
'ArchArchived' => 'Csak archivált',
'Archive' => 'Archiválás',
'Archived' => 'Archívum',
'ArchUnarchived' => 'Csak archiválatlan',
'Area' => 'Terület',
'AreaUnits' => 'Terület (px/%)',
'AttrAlarmFrames' => 'Riadó képkockák',
'AttrArchiveStatus' => 'Archivált állapot',
'AttrAvgScore' => 'Átlagos érték',
'AttrCause' => 'Okozó',
'AttrDate' => 'Dátum',
'AttrDateTime' => 'Dátum/Idõ',
'AttrDiskBlocks' => 'Lemez blokkok',
'AttrDiskPercent' => 'Lemez százalék',
'AttrDuration' => 'Idõtartam',
'AttrFrames' => 'Képkockák',
'AttrId' => 'Azonosító',
'AttrMaxScore' => 'Max. érték',
'AttrMonitorId' => 'Monitor azon.',
'AttrMonitorName' => 'Monitor név',
'AttrName' => 'Név',
'AttrNotes' => 'Megjegyzés',
'AttrSystemLoad' => 'Rendszer terhelés',
'AttrTime' => 'Idõ',
'AttrTotalScore' => 'Össz. érték',
'AttrWeekday' => 'Hétköznap',
'Auto' => 'Auto',
'AutoStopTimeout' => 'Auto megállási idõ túllépés',
'AvgBrScore' => 'Átlag<br/>érték',
'BackgroundFilter' => 'Szûrõ futtatása a háttérben',
'Background' => 'Háttér',
'BadAlarmFrameCount' => 'Riadó képek száma 1 vagy nagyobb egész szám legyen',
'BadAlarmMaxFPS' => 'A riadó maximális FPS száma pozitív szám legyen',
'BadChannel' => 'A csatorna száma 0 vagy nagyobb egész szám legyen',
'BadDevice' => 'Az eszköz érték valós legyen',
'BadFormat' => 'A típus 0 vagy nagyobb egész szám legyen',
'BadFPSReportInterval' => 'FPS információs idõköz puffer számlálója 100 vagy nagyobb egész legyen',
'BadFrameSkip' => 'Képkocka eldobások száma 0 vagy nagyobb egész szám legyen',
'BadHeight' => 'A képmagasság érvényes érték legyen képpontban',
'BadHost' => 'A hoszt valós IP cím vagy hosztnév legyen, http:// nélkül',
'BadImageBufferCount' => 'Kép puffer mérete legyen 10 vagy nagyobb szám',
'BadLabelX' => 'A cimke X koordinátája legyen 0 vagy nagyobb egész szám',
'BadLabelY' => 'A cimke Y koordinátája legyen 0 vagy nagyobb egész szám',
'BadMaxFPS' => 'A maximális FPS nullánál nagyobb szám legyen',
'BadNameChars' => 'A név csak alfanumerikus karaktereket, plusz-, kötõ-, és aláhúzásjelet tartalmazhat',
'BadPath' => 'A kép elérési útvonala valós legyen',
'BadPort' => 'A portszám valós legyen',
'BadPostEventCount' => 'Az esemény utáni képek puffere 0 vagy nagyobb egész szám legyen',
'BadPreEventCount' => 'Az esemény elõtti képek puffere 0 vagy nagyobb egész szám legyen',
'BadRefBlendPerc' => 'A referencia képkeverék-százalék pozitív egész szám legyen',
'BadSectionLength' => 'Egy egység hossza 30 vagy hosszabb legyen',
'BadSignalCheckColour' => 'A jel ellenõrzési szín egy érvényes RGP kód kell legyen',
'BadStreamReplayBuffer'=> 'Folyam visszajátszó puffer 0 vagy nagyobb egész szám legyen',
'BadWarmupCount' => 'Bemelegítõ képek száma 0 vagy nagyobb egész szám legyen',
'BadWebColour' => 'A web szín érvényes web szín kód legyen',
'BadWidth' => 'A képszélesség érvényes érték legyen képpontban',
'Bandwidth' => 'Sávszélességre',
'BlobPx' => 'Blob képpont',
'Blobs' => 'Blob-ok',
'BlobSizes' => 'Blob mérete',
'Brightness' => 'Fényerõ',
'Buffers' => 'Pufferek',
'CanAutoFocus' => 'Auto fókusz van',
'CanAutoGain' => 'Auto gain van',
'CanAutoIris' => 'Auto írisz van',
'CanAutoWhite' => 'Van autómata fehér egyensúly',
'CanAutoZoom' => 'Auto zoom van',
'CancelForcedAlarm' => 'Kézi riasztás leállítása',
'Cancel' => 'Mégsem',
'CanFocusAbs' => 'Tud abszolút fókuszt',
'CanFocusCon' => 'Tud folyamatos fókuszt',
'CanFocusRel' => 'Tud relatív fókuszt',
'CanFocus' => 'Tud fókuszálni',
'CanGainAbs' => 'Tud abszolút erõsítést',
'CanGainCon' => 'Tud folyamatos erõsítést',
'CanGainRel' => 'Tud relatív erõsítést',
'CanGain' => 'Tud erõsíteni',
'CanIrisAbs' => 'Tud abszolut íriszt',
'CanIrisCon' => 'Folyamatosan tud íriszt változtatni',
'CanIrisRel' => 'Relatíven tud íriszt változtatni',
'CanIris' => 'Tud íriszt változtatni',
'CanMoveAbs' => 'Tud abszolult mozgást',
'CanMoveCon' => 'Folyamatosan tud mozogni',
'CanMoveDiag' => 'Diagonálban tud mozogni',
'CanMoveMap' => 'Útvonalon tud mozogni',
'CanMoveRel' => 'Relatíven tud mozogni',
'CanMove' => 'Tud mozogni',
'CanPan' => 'Tud jobb-bal mozgást' ,
'CanReset' => 'Tud alaphelyzetbe jönni',
'CanSetPresets' => 'Tud menteni profilokat',
'CanSleep' => 'Tud phihenõ üzemmódot',
'CanTilt' => 'Tud fel-le mozgást',
'CanWake' => 'Tud feléledni',
'CanWhiteAbs' => 'Tud abszolut fehér egyensúlyt',
'CanWhiteBal' => 'Tud fehér egyensúlyt',
'CanWhiteCon' => 'Tud folyamatos fehér egyensúlyt',
'CanWhiteRel' => 'Tud relatív fehér egyensúlyt',
'CanWhite' => 'Tud fehér egyensúlyt',
'CanZoomAbs' => 'Tud abszolut zoom-ot',
'CanZoomCon' => 'Tud folyamatos zoom-ot',
'CanZoomRel' => 'Tud relatív zoom-ot',
'CanZoom' => 'Tud zoom-olni',
'CaptureHeight' => 'Képmagasság',
'CapturePalette' => 'Felvétel szín-paletta',
'CaptureWidth' => 'Képszélesség',
'Cause' => 'Okozó',
'CheckMethod' => 'A riasztás figyelésének módja',
'ChooseFilter' => 'Válassz szûrõt',
'ChoosePreset' => 'Válassz profilt',
'Close' => 'Bezár',
'Colour' => 'Szín',
'Command' => 'Parancs',
'Config' => 'Beállítás',
'ConfiguredFor' => 'Beállítva',
'ConfirmDeleteEvents' => 'Biztos benne, hogy törli a kiválasztott eseményeket?',
'ConfirmPassword' => 'Jelszó megerõsítés',
'ConjAnd' => 'és',
'ConjOr' => 'vagy',
'Console' => 'Konzol',
'ContactAdmin' => 'Kérem vegye fel a kapcsolatot a rendszergazdával a részletekért.',
'Continue' => 'Folytatás',
'Contrast' => 'Kontraszt',
'ControlAddress' => 'Vezérlési jogok',
'ControlCaps' => 'Vezérlési lehetõségek',
'ControlCap' => 'Vezérlési lehetõség',
'ControlDevice' => 'Vezérlõ eszköz',
'Controllable' => 'Vezérelhetõ',
'ControlType' => 'Vezérlés típusa',
'Control' => 'Vezérlés',
'Cycle' => 'Körkapcsolás',
'CycleWatch' => 'Körkapcsolás',
'Day' => 'Napon',
'Debug' => 'Nyomon<br>követés',
'DefaultRate' => 'Alapértelmezett FPS',
'DefaultScale' => 'Alapértelmezett arány',
'DefaultView' => 'Alapértelmezett nézet',
'DeleteAndNext' => 'Töröl &amp;<br>következõ',
'DeleteAndPrev' => 'Töröl &amp;<br>elõzõ',
'DeleteSavedFilter' => 'Mentett szûrõ törlése',
'Delete' => 'Töröl',
'Description' => 'Leírás',
'DeviceChannel' => 'Eszköz csatornája',
'DeviceFormat' => 'Eszköz formátuma',
'DeviceNumber' => 'Eszköz szám',
'DevicePath' => 'Eszköz elérési útvonala',
'Devices' => 'Eszközök',
'Dimensions' => 'Dimenziók',
'DisableAlarms' => 'Riasztás tiltása',
'Disk' => 'Tárhely',
'DonateAlready' => 'Nem, én már támogattam',
'DonateEnticement' => 'Ön már jó ideje használja a ZoneMindert remélhetõleg hasznos kiegészítésnek tartja háza vagy munkahelye biztosításában. Bár ZoneMinder szabad, nyílt forráskódú, és az is marad; a fejlesztése pénzbe kerül. Ha támogatni szeretné a jövõbeni fejlesztéseket és az új funkciókat kérem támogasson. A támogatás teljesen önkéntes, de nagyon megbecsült és annyival tud támogatni amennyivel kíván.<br><br>Ha támogatni szertne kérem válasszon az alábbi lehetõségekbõl vagy látogassa meg a http://www.zoneminder.com/donate.html oldalt.<br><br>Köszönöm, hogy használja a ZoneMinder-t és ne felejtse el meglátogatni a fórumokat a ZoneMinder.com oldalon támogatásért és ötletekért, hogy tudja még jobban használni a ZoneMinder-t.',
'Donate' => 'Kérem támogasson',
'DonateRemindDay' => 'Nem most, figyelmeztess 1 nap múlva',
'DonateRemindHour' => 'Nem most, figyelmeztess 1 óra múlva',
'DonateRemindMonth' => 'Nem most, figyelmeztess 1 hónap múlva',
'DonateRemindNever' => 'Nem akarom támogatni, ne is emlékeztess',
'DonateRemindWeek' => 'Nem most, figyelmeztess 1 hét múlva',
'DonateYes' => 'Igen, most szeretném támogatni',
'Download' => 'Letölt',
'Duration' => 'Idõtartam',
'Edit' => 'Szerkeszt',
'Email' => 'Email',
'EnableAlarms' => 'Riasztás feloldása',
'Enabled' => 'Engedélyezve',
'EnterNewFilterName' => 'Írd be az új szûrõ nevét',
'ErrorBrackets' => 'Hiba, ellenõrizd, hogy ugyanannyi nyitó és záró zárójel van',
'Error' => 'Hiba',
'ErrorValidValue' => 'Hiba, ellenõrizd, hogy minden beállításnak érvényes értéke van',
'Etc' => 'stb',
'Event' => 'Esemény',
'EventFilter' => 'Esemény szûrõ',
'EventId' => 'Esemény azonosító',
'EventName' => 'Esemény név',
'EventPrefix' => 'Esemény elõtag',
'Events' => 'Események',
'Exclude' => 'Kizár',
'Execute' => 'Futtat',
'ExportDetails' => 'Esemény adatainak exportálása',
'Export' => 'Exportál',
'ExportFailed' => 'Hibás exportálás',
'ExportFormat' => 'Exportált fájl formátuma',
'ExportFormatTar' => 'TAR',
'ExportFormatZip' => 'ZIP',
'ExportFrames' => 'Képek adatainak exportálása',
'ExportImageFiles' => 'Képek exportálása',
'Exporting' => 'Exportálás...',
'ExportMiscFiles' => 'Egyéb fájlok exportálása (ha vannak)',
'ExportOptions' => 'Exportálás beállításai',
'ExportVideoFiles' => 'Videó fájlok exportálása (ha vannak)',
'Far' => 'Távol',
'FastForward' => 'Elõre tekerés',
'Feed' => 'Folyam',
'FileColours' => 'Fájl színei',
'File' => 'Fájl',
'FilePath' => 'Fájl elérési útvonala',
'FilterArchiveEvents' => 'Minden találat archiválása',
'FilterDeleteEvents' => 'Minden találat törlése',
'FilterEmailEvents' => 'Minden találat adatainak elküldése E-mailben',
'FilterExecuteEvents' => 'Parancs futtatása minden találaton',
'FilterMessageEvents' => 'Minden találat adatainak üzenése',
'FilterPx' => 'Szûrt képkockák',
'Filters' => 'Szûrõk',
'FilterUnset' => 'Meg kell adnod a szûrõ szélességét és magasságát',
'FilterUploadEvents' => 'Minden találat feltöltése',
'FilterVideoEvents' => 'Videó készítése minden találatról',
'First' => 'Elsõ',
'FlippedHori' => 'Vízszintes tükrözés',
'FlippedVert' => 'Függõleges tükrözés',
'Focus' => 'Fókusz',
'ForceAlarm' => 'Kézi riasztás',
'Format' => 'Formátum',
'FPS' => 'fps',
'FPSReportInterval' => 'FPS jelentés idõköze',
'FrameId' => 'Képkocka azonosító',
'Frame' => 'Képkocka',
'FrameRate' => 'FPS',
'FrameSkip' => 'Képk. kihagyás',
'Frames' => 'Képkocka',
'FTP' => 'FTP',
'Func' => 'Funk.',
'Function' => 'Funkció',
'Gain' => 'Erõsítés',
'General' => 'Általános',
'GenerateVideo' => 'Videó készítés',
'GeneratingVideo' => 'Videó készítése...',
'GoToZoneMinder' => 'Látogatás a ZoneMinder.com-ra',
'Grey' => 'Szürke',
'Group' => 'Csoport',
'Groups' => 'Csoportok',
'HasFocusSpeed' => 'Van fókusz sebesség',
'HasGainSpeed' => 'Van erõsítés sebesség',
'HasHomePreset' => 'Van kedvenc profilja',
'HasIrisSpeed' => 'Van írisz sebesség',
'HasPanSpeed' => 'Van jobb-bal sebesség',
'HasPresets' => 'Vannak profiljai',
'HasTiltSpeed' => 'Van le-fel sebesség',
'HasTurboPan' => 'Van turbó jobb-bal',
'HasTurboTilt' => 'Van turbó le-fel',
'HasWhiteSpeed' => 'Van fehér egyensúly sebesség',
'HasZoomSpeed' => 'Van zoom sebesség',
'HighBW' => 'Magas<br>sávsz.',
'High' => 'Magas',
'Home' => 'Home',
'Hour' => 'Órában',
'Hue' => 'Színárnyalat',
'Id' => 'Az.',
'Idle' => 'Nyugalom',
'Ignore' => 'Figyelmen kívül hagy',
'ImageBufferSize' => 'Képpuffer mérete (képkockák)',
'Image' => 'Kép',
'Images' => 'Kép',
'Include' => 'Beágyaz',
'In' => 'In',
'Inverted' => 'Invertálva',
'Iris' => 'Írisz',
'KeyString' => 'Kulcs karaktersor',
'Label' => 'Cimke',
'Language' => 'Nyelv',
'Last' => 'Utolsó',
'LimitResultsPost' => 'találatig korlátoz', // This is used at the end of the phrase 'Limit to first N results only'
'LimitResultsPre' => 'Az elsõ', // This is used at the beginning of the phrase 'Limit to first N results only'
'LinkedMonitors' => 'Összefüggõ monitorok',
'List' => 'Lista',
'Load' => 'Terhelés',
'Local' => 'Helyi',
'LoggedInAs' => 'Bejelentkezve mint',
'LoggingIn' => 'Bejelentkezés folyamatban',
'Login' => 'Bejelentkezés',
'Logout' => 'Kilépés',
'Low' => 'Alacsony',
'LowBW' => 'Alacsony<br>sávsz.',
'Main' => 'Fõ',
'Man' => 'Man',
'Manual' => 'Kézikönyv',
'Mark' => 'Jelölés',
'MaxBandwidth' => 'Max. sávszélesség',
'MaxBrScore' => 'Max.<br/>érték',
'MaxFocusRange' => 'Max. fókusz tartomány',
'MaxFocusSpeed' => 'Max. fókusz sebesség',
'MaxFocusStep' => 'Max. fókusz lépés',
'MaxGainRange' => 'Max Gain Range',
'MaxGainSpeed' => 'Max Gain Speed',
'MaxGainStep' => 'Max Gain Step',
'MaximumFPS' => 'Maximum FPS',
'MaxIrisRange' => 'Max. írisz tartomány',
'MaxIrisSpeed' => 'Max. írisz sebesség',
'MaxIrisStep' => 'Max. írisz lépés',
'Max' => 'Max.',
'MaxPanRange' => 'Max. jobb-bal tartomány',
'MaxPanSpeed' => 'Max. jobb-bal sebesség',
'MaxPanStep' => 'Max. jobb-bal lépés',
'MaxTiltRange' => 'Max. fel-le tartomány',
'MaxTiltSpeed' => 'Max. fel-le sebesség',
'MaxTiltStep' => 'Max. fel-le lépés',
'MaxWhiteRange' => 'Max. fehér egyensúly tartomány',
'MaxWhiteSpeed' => 'Max. fehér egyensúly sebesség',
'MaxWhiteStep' => 'Max. fehér egyensúly lépés',
'MaxZoomRange' => 'Max. zoom tartomány',
'MaxZoomSpeed' => 'Max. zoom sebesség',
'MaxZoomStep' => 'Max. zoom lépés',
'MediumBW' => 'Közepes<br>sávsz.',
'Medium' => 'Közepes',
'MinAlarmAreaLtMax' => 'A minimum riasztott területnek kisebbnek kell lennie mint a maximumnak',
'MinAlarmAreaUnset' => 'Meg kell adnod a minimum riasztott képpontok számát',
'MinBlobAreaLtMax' => 'A minimum blob területnek kisebbnek kell lennie mint a maximumnak',
'MinBlobAreaUnset' => 'Meg kell adnod a minimum blob képpontok számát',
'MinBlobLtMinFilter' => 'A minimum blob területnek kisebbnek vagy egyenlõnek kell lennie a megszûrt területtel',
'MinBlobsLtMax' => 'A minimum bloboknak kisebbeknek kell lenniük, mint a maximum',
'MinBlobsUnset' => 'Meg kell adnod a blobok számát',
'MinFilterAreaLtMax' => 'A minimum megszûrt területnek kisebbnek kell lennie mint a maximum',
'MinFilterAreaUnset' => 'Meg kell adnod a megszûrt terület képpontjainak számát',
'MinFilterLtMinAlarm' => 'A megszûrt területnek kisebbnek vagy ugyanakkorának kell lennie mint a riasztott terület',
'MinFocusRange' => 'Min. fókusz terület',
'MinFocusSpeed' => 'Min. fókusz sebesség',
'MinFocusStep' => 'Min. fókusz lépés',
'MinGainRange' => 'Min Gain Range',
'MinGainSpeed' => 'Min Gain Speed',
'MinGainStep' => 'Min Gain Step',
'MinIrisRange' => 'Min. írisz terület',
'MinIrisSpeed' => 'Min. írisz sebesség',
'MinIrisStep' => 'Min. írisz lépés',
'MinPanRange' => 'Min. jobb-bal tartomány',
'MinPanSpeed' => 'Min. jobb-bal sebesség',
'MinPanStep' => 'Min. jobb-bal lépés',
'MinPixelThresLtMax' => 'A minimum küszöb képpontnak kisebbnek kell lennie, mint a maximum',
'MinPixelThresUnset' => 'Meg kell adnod a minimum képpont küszöböt',
'MinTiltRange' => 'Min. fel-le tartomány',
'MinTiltSpeed' => 'Min. fel-le sebesség',
'MinTiltStep' => 'Min. fel-le lépés',
'MinWhiteRange' => 'Min. fehér egyensúly terület',
'MinWhiteSpeed' => 'Min. fehér egyensúly sebesség',
'MinWhiteStep' => 'Min. fehér egyensúly lépés',
'MinZoomRange' => 'Min. zoom terület',
'MinZoomSpeed' => 'Min. zoom sebesség',
'MinZoomStep' => 'Min. zoom lépés',
'Misc' => 'Egyéb',
'MonitorIds' => 'Monitor&nbsp;Azonosítók',
'Monitor' => 'Monitor',
'MonitorPreset' => 'Elõre beállított értékprofilok megfigyeléshez',
'MonitorPresetIntro' => 'Válassz egy, az elõre meghatározott<br> értékprofilt az alábbiak közül.<br><br>Vedd figyelembe, hogy ez felülírhatja <br>az általad már beállított értékeket.<br><br>',
'Monitors' => 'Megfigyelések',
'Montage' => 'Többkamerás nézet',
'Month' => 'Hónapban',
'Move' => 'Mozgás',
'MustBeGe' => 'nagyobbnak vagy egyenlõnek kell lennie',
'MustBeLe' => 'kisebbnek vagy egyenlõnek kell lennie',
'MustConfirmPassword' => 'Meg kell erõsítened a jelszót',
'MustSupplyPassword' => 'Meg kell adnod a jelszót',
'MustSupplyUsername' => 'Meg kell adnod felhasználói nevet',
'Name' => 'Név',
'Near' => 'Közel',
'Network' => 'Hálózat',
'NewGroup' => 'Új csoport',
'NewLabel' => 'Új cimke',
'NewPassword' => 'Új jelszó',
'NewState' => 'Új állapot',
'New' => 'Uj',
'NewUser' => 'Új felhasználó',
'Next' => 'Következõ',
'NoFramesRecorded' => 'Nincs felvett képkocka ehhez az eseményhez',
'NoGroup' => 'Nincs csoport',
'NoneAvailable' => 'Nincs elérhetõ',
'No' => 'Nem',
'None' => 'Nincs kiválasztva',
'Normal' => 'Normális',
'NoSavedFilters' => 'Nincs mentett szûrõ',
'NoStatisticsRecorded' => 'Nincs mentett statisztika ehhez az eseményhez/képkockához',
'Notes' => 'Megjegyzések',
'NumPresets' => 'Profilok száma',
'Off' => 'Ki',
'On' => 'Be',
'Open' => 'Megnyitás',
'OpEq' => 'egyenlõ',
'OpGtEq' => 'nagyobb van egyenlõ',
'OpGt' => 'nagyobb mint',
'OpIn' => 'beállítva',
'OpLtEq' => 'kisebb vagy egyenlõ',
'OpLt' => 'kisebb mint',
'OpMatches' => 'találatok',
'OpNe' => 'nem egyenlõ',
'OpNotIn' => 'nincs beállítva',
'OpNotMatches' => 'nincs találat',
'OptionHelp' => 'Beállítási segítség',
'OptionRestartWarning' => 'Ez a beállítás nem jut teljesen érvényre\namíg a rendszer fut. Ha megtettél minden\nbeállítást, indítsd újra a ZoneMinder szolgáltatást.',
'Options' => 'Beállítások',
'Order' => 'Sorrend',
'OrEnterNewName' => 'vagy adj meg új nevet',
'Orientation' => 'Orientáció',
'Out' => 'Kifelé',
'OverwriteExisting' => 'Meglévõ felülírása',
'Paged' => 'Lapozva',
'Pan' => 'Jobb-bal mozgás',
'PanLeft' => 'Mozgás balra',
'PanRight' => 'Mozgás jobbra',
'PanTilt' => 'Mozgat',
'Parameter' => 'Paraméter',
'Password' => 'Jelszó',
'PasswordsDifferent' => 'Az új és a megerõsített jelszó különbözik!',
'Paths' => 'Útvonalak',
'Pause' => 'Szünet',
'PhoneBW' => 'Betárcsázó<br>sávsz.',
'Phone' => 'Telefonon betárcsázva',
'PixelDiff' => 'Képpont eltérés',
'Pixels' => 'képpont',
'PlayAll' => 'Mind lejátszása',
'Play' => 'Lejátszás',
'PleaseWait' => 'Kérlek várj...',
'Point' => 'Pont',
'PostEventImageBuffer' => 'Esemény utáni képpuffer',
'PreEventImageBuffer' => 'Esemény elötti képpuffer',
'PreserveAspect' => 'Képarány megtartása',
'Preset' => 'Elõre beállított profil',
'Presets' => 'Elõre beállított profilok',
'Prev' => 'Elõzõ',
'Protocol' => 'Protocol',
'Rate' => 'FPS',
'Real' => 'Valós',
'Record' => 'Felvétel',
'RefImageBlendPct' => 'Változás a referenciaképtõl %-ban',
'Refresh' => 'Frissít',
'Remote' => 'Hálózati',
'RemoteHostName' => 'Hálózati IP cím/hosztnév',
'RemoteHostPath' => 'A kép elérési útja',
'RemoteHostPort' => 'Hálózati gép portszáma',
'RemoteImageColours' => 'A kép színe',
'Rename' => 'Átnevez',
'ReplayAll' => 'Minden eseményt',
'Replay' => 'Az elejétõl',
'ReplayGapless' => 'Folyamatos eseményeket',
'ReplaySingle' => 'Egyéni esemény',
'Replay' => 'Visszajátszás',
'Reset' => 'Alapértékre állít',
'ResetEventCounts' => 'Esemény számláló nullázása',
'Restarting' => 'Újraindítás',
'Restart' => 'Újraindít',
'RestrictedCameraIds' => 'Korlátozott kamerák azonosítói',
'RestrictedMonitors' => 'Korlátozott kamerák',
'ReturnDelay' => 'Visszaérkezés késleltetése',
'ReturnLocation' => 'Visszaérkezés helye',
'Rewind' => 'Visszatekerés',
'RotateLeft' => 'Balra forgatás',
'RotateRight' => 'Jobbra forgatás',
'RunMode' => 'Futási mód',
'Running' => 'Éles',
'RunState' => 'Futási állapot',
'SaveAs' => 'Mentés mint',
'SaveFilter' => 'Szûrõ mentése',
'Save' => 'Mentés',
'Scale' => 'Méret',
'Score' => 'Pontszám',
'Secs' => 'mp.',
'Sectionlength' => 'Rész hossz',
'Select' => 'Kiválasztás',
'SelectMonitors' => 'Monitorok kiválasztása',
'SelfIntersecting' => 'A sokszög szélei nem keresztezõdhetnek',
'Set' => 'Beállít',
'SetLearnPrefs' => 'Set Learn Prefs', // This can be ignored for now
'SetNewBandwidth' => 'Új sávszélesség beállítás',
'SetPreset' => 'Alapértelmezett beállítása',
'Settings' => 'Beállítások',
'ShowFilterWindow' => 'Szûrõablak megjelenítés',
'ShowTimeline' => 'Idõvonal megjelenítés',
'SignalCheckColour' => 'Szín a jel kimaradásakor',
'Size' => 'Fájlméret',
'Sleep' => 'Alvás',
'SortAsc' => 'Növekvõ',
'SortBy' => 'Sorbarendezés:',
'SortDesc' => 'Csökkenõ',
'Source' => 'Forrás',
'SourceType' => 'Forrás típusa',
'SpeedHigh' => 'Nagy sebsség',
'SpeedLow' => 'Alacsony sebesség',
'SpeedMedium' => 'Közepes sebesség',
'Speed' => 'Sebesség',
'SpeedTurbo' => 'Turbó sebesség',
'Start' => 'Indít',
'State' => 'Állapot',
'Stats' => 'Statisztikák',
'Status' => 'Státusz',
'StepBack' => 'Visszalépés',
'StepForward' => 'Elõrelépés',
'StepLarge' => 'Nagy ugrás',
'StepMedium' => 'Közepes ugrás',
'StepNone' => 'Nincs ugrás',
'StepSmall' => 'Kis ugrás',
'Step' => 'Ugrás',
'Stills' => 'Állóképek',
'Stop' => 'Megállítás',
'Stopped' => 'Megállítva',
'Stream' => 'Élõ folyam',
'StreamReplayBuffer' => 'Folyam visszajátszó képpuffer',
'Submit' => 'Elküld',
'System' => 'Rendszer',
'Tele' => 'Táv',
'Thumbnail' => 'Elõnézet',
'Tilt' => 'Fel-le mozgás',
'TimeDelta' => 'Idõ változás',
'Time' => 'Idõpont',
'Timeline' => 'Idõvonal',
'Timestamp' => 'Idõbélyeg',
'TimeStamp' => 'Idõbélyeg',
'TimestampLabelFormat' => 'Idõbélyeg formátum',
'TimestampLabelX' => 'Elhelyezés X pozició',
'TimestampLabelY' => 'Elhelyezés Y pozició',
'Today' => 'Ma',
'Tools' => 'Eszközök',
'TotalBrScore' => 'Össz.<br/>pontszám',
'TrackDelay' => 'Késleltetés követése',
'TrackMotion' => 'Mozgás követése',
'Triggers' => 'Elõidézõk',
'TurboPanSpeed' => 'Turbó jobb-bal sebesség',
'TurboTiltSpeed' => 'Turbo fel-le sebesség',
'Type' => 'Típus',
'Unarchive' => 'Archívumból ki',
'Units' => 'Egységek',
'Unknown' => 'Ismeretlen',
'UpdateAvailable' => 'Elérhetõ ZoneMinder frissítés.',
'Update' => 'Frissítés',
'UpdateNotNecessary' => 'Nem szükséges a frissítés.',
'UseFilterExprsPost' => '&nbsp;szürõ&nbsp;kifejezés használata', // This is used at the end of the phrase 'use N filter expressions'
'UseFilterExprsPre' => '&nbsp;', // This is used at the beginning of the phrase 'use N filter expressions'
'UseFilter' => 'Szûrõt használ',
'User' => 'Felhasználó',
'Username' => 'Felhasználónév',
'Users' => 'Felhasználók',
'Value' => 'Érték',
'VersionIgnore' => 'Ennek a verziónak a figyelmen kívül hagyása',
'VersionRemindDay' => '1 nap múlva emlékeztess',
'VersionRemindHour' => '1 óra múlva emlékeztess',
'VersionRemindNever' => 'Ne emlékeztess az új verzióról',
'VersionRemindWeek' => '1 hét múlva emlékeztess',
'Version' => 'Verzió',
'VideoFormat' => 'Videó formátum',
'VideoGenFailed' => 'Hiba a videó készítésekor!',
'VideoGenFiles' => 'Létezõ videók',
'VideoGenNoFiles' => 'Nem találhatók videók',
'VideoGenParms' => 'Videó készítési paraméterek',
'VideoGenSucceeded' => 'A videó elkészült!',
'VideoSize' => 'Kép mérete',
'Video' => 'Videó',
'ViewAll' => 'Az összes listázása',
'ViewEvent' => 'Események nézet',
'View' => 'Megtekint',
'ViewPaged' => 'Oldal nézet',
'Wake' => 'Ébreszt',
'WarmupFrames' => 'Bemelegítõ képkockák',
'Watch' => 'Figyel',
'WebColour' => 'Szín az idõvonal ablakban',
'Web' => 'Web',
'Week' => 'Héten',
'WhiteBalance' => 'Fehér egyensúly',
'White' => 'Fehér',
'Wide' => 'Széles',
'X10ActivationString' => 'X10 élesítõ karaktersor',
'X10InputAlarmString' => 'X10 bemeneti riadó karaktersor',
'X10OutputAlarmString' => 'X10 kimeneti riadó karaktersor',
'X10' => 'X10',
'X' => 'X',
'Yes' => 'Igen',
'YouNoPerms' => 'Nincs jogod az erõforrás eléréséhez.',
'Y' => 'Y',
'ZoneAlarmColour' => 'Riadó szín (R/G/B)',
'ZoneArea' => 'Zóna terület',
'ZoneFilterSize' => 'Szûrt szélesség/magasság (képpontok)',
'ZoneMinMaxAlarmArea' => 'Min/Max riadó terület',
'ZoneMinMaxBlobArea' => 'Min/Max Blob terület',
'ZoneMinMaxBlobs' => 'Min/Max Blobok',
'ZoneMinMaxFiltArea' => 'Min/Max szûrt terület',
'ZoneMinMaxPixelThres' => 'Min/Max képpont küszöb (0-255)',
'ZoneOverloadFrames' => 'Túlterhelés esetén ennyi képkocka hagyható ki',
'Zones' => 'Zónák',
'Zone' => 'Zóna:',
'ZoomIn' => 'Zoom be',
'ZoomOut' => 'Zoom ki',
'Zoom' => 'Zoom',
);
// Complex replacements with formatting and/or placements, must be passed through sprintf
$CLANG = array(
'CurrentLogin' => 'Jelenleg belépve mint \'%1$s\'',
'EventCount' => '%1$s %2$s', // For example '37 Events' (from Vlang below)
'LastEvents' => 'Utolsó %1$s %2$s', // For example 'Last 37 Events' (from Vlang below)
'LatestRelease' => 'Az utolsó kiadás v%1$s, ami neked van v%2$s.',
'MonitorCount' => '%1$s %2$s', // For example '4 Monitors' (from Vlang below)
'MonitorFunction' => 'Megfigyelés funkció: %1$s',
'RunningRecentVer' => 'A legfrissebb ZoneMinder verziót használod, v%s.',
);
// The next section allows you to describe a series of word ending and counts used to
// generate the correctly conjugated forms of words depending on a count that is associated
// with that word.
// This intended to allow phrases such a '0 potatoes', '1 potato', '2 potatoes' etc to
// conjugate correctly with the associated count.
// In some languages such as English this is fairly simple and can be expressed by assigning
// a count with a singular or plural form of a word and then finding the nearest (lower) value.
// So '0' of something generally ends in 's', 1 of something is singular and has no extra
// ending and 2 or more is a plural and ends in 's' also. So to find the ending for '187' of
// something you would find the nearest lower count (2) and use that ending.
//
// So examples of this would be
// $zmVlangPotato = array( 0=>'Potatoes', 1=>'Potato', 2=>'Potatoes' );
// $zmVlangSheep = array( 0=>'Sheep' );
//
// where you can have as few or as many entries in the array as necessary
// If your language is similar in form to this then use the same format and choose the
// appropriate zmVlang function below.
// If however you have a language with a different format of plural endings then another
// approach is required . For instance in Russian the word endings change continuously
// depending on the last digit (or digits) of the numerator. In this case then zmVlang
// arrays could be written so that the array index just represents an arbitrary 'type'
// and the zmVlang function does the calculation about which version is appropriate.
//
// So an example in Russian might be (using English words, and made up endings as I
// don't know any Russian!!)
// $zmVlangPotato = array( 1=>'Potati', 2=>'Potaton', 3=>'Potaten' );
//
// and the zmVlang function decides that the first form is used for counts ending in
// 0, 5-9 or 11-19 and the second form when ending in 1 etc.
//
// Variable arrays expressing plurality, see the zmVlang description above
$VLANG = array(
'Event' => array( 0=>'Események', 1=>'Esemény', 2=>'Esemény' ),
'Monitor' => array( 0=>'Monitorok', 1=>'Monitor', 2=>'Monitor' ),
);
// You will need to choose or write a function that can correlate the plurality string arrays
// with variable counts. This is used to conjugate the Vlang arrays above with a number passed
// in to generate the correct noun form.
//
// In languages such as English this is fairly simple
// Note this still has to be used with printf etc to get the right formating
function zmVlang( $langVarArray, $count )
{
krsort( $langVarArray );
foreach ( $langVarArray as $key=>$value )
{
if ( abs($count) >= $key )
{
return( $value );
}
}
die( 'Error, unable to correlate variable language string' );
}
// This is an version that could be used in the Russian example above
// The rules are that the first word form is used if the count ends in
// 0, 5-9 or 11-19. The second form is used then the count ends in 1
// (not including 11 as above) and the third form is used when the
// count ends in 2-4, again excluding any values ending in 12-14.
//
// function zmVlang( $langVarArray, $count )
// {
// $secondlastdigit = substr( $count, -2, 1 );
// $lastdigit = substr( $count, -1, 1 );
// // or
// // $secondlastdigit = ($count/10)%10;
// // $lastdigit = $count%10;
//
// // Get rid of the special cases first, the teens
// if ( $secondlastdigit == 1 && $lastdigit != 0 )
// {
// return( $langVarArray[1] );
// }
// switch ( $lastdigit )
// {
// case 0 :
// case 5 :
// case 6 :
// case 7 :
// case 8 :
// case 9 :
// {
// return( $langVarArray[1] );
// break;
// }
// case 1 :
// {
// return( $langVarArray[2] );
// break;
// }
// case 2 :
// case 3 :
// case 4 :
// {
// return( $langVarArray[3] );
// break;
// }
// }
// die( 'Error, unable to correlate variable language string' );
// }
// This is an example of how the function is used in the code which you can uncomment and
// use to test your custom function.
//$monitors = array();
//$monitors[] = 1; // Choose any number
//echo sprintf( $zmClangMonitorCount, count($monitors), zmVlang( $zmVlangMonitor, count($monitors) ) );
// In this section you can override the default prompt and help texts for the options area
// These overrides are in the form show below where the array key represents the option name minus the initial ZM_
// So for example, to override the help text for ZM_LANG_DEFAULT do
$OLANG = array(
// 'LANG_DEFAULT' => array(
// 'Prompt' => "This is a new prompt for this option",
// 'Help' => "This is some new help for this option which will be displayed in the popup window when the ? is clicked"
// ),
);
?>

831
web/lang/it_it.php Normal file
View File

@ -0,0 +1,831 @@
<?php
//
// ZoneMinder web Italian language file, $Date$, $Revision$
// Copyright (C) 2003, 2004, 2005 Philip Coombes
//
// This program 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 program 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
//
// ZoneMinder IT modified by Nicola Murino (23/09/2007)
// ZoneMinder IT modified by Alessio Chemeri (18/01/2006) (based on the translation done by
// Davide Morelli
// Tolmino Muccitelli - Sicurezza Informatica: info@tolmino.it
// Nicola Murino - IT Consultant: nicola.murino@gmail.com
// Notes for Translators
// 0. Get some credit, put your name in the line above (optional)
// 1. When composing the language tokens in your language you should try and keep to roughly the
// same length text if possible. Abbreviate where necessary as spacing is quite close in a number of places.
// 2. There are four types of string replacement
// a) Simple replacements are words or short phrases that are static and used directly. This type of
// replacement can be used 'as is'.
// b) Complex replacements involve some dynamic element being included and so may require substitution
// or changing into a different order. The token listed in this file will be passed through sprintf as
// a formatting string. If the dynamic element is a number you will usually need to use a variable
// replacement also as described below.
// c) Variable replacements are used in conjunction with complex replacements and involve the generation
// of a singular or plural noun depending on the number passed into the zmVlang function. See the
// the zmVlang section below for a further description of this.
// d) Optional strings which can be used to replace the prompts and/or help text for the Options section
// of the web interface. These are not listed below as they are quite large and held in the database
// so that they can also be used by the zmconfig.pl script. However you can build up your own list
// quite easily from the Config table in the database if necessary.
// 3. The tokens listed below are not used to build up phrases or sentences from single words. Therefore
// you can safely assume that a single word token will only be used in that context.
// 4. In new language files, or if you are changing only a few words or phrases it makes sense from a
// maintenance point of view to include the original language file and override the old definitions rather
// than copy all the language tokens across. To do this change the line below to whatever your base language
// is and uncomment it.
// require_once( 'zm_lang_en_gb.php' );
// You may need to change the character set here, if your web server does not already
// do this by default, uncomment this if required.
//
// Example
//header( "Content-Type: text/html; charset=iso-8859-1" );
// You may need to change your locale here if your default one is incorrect for the
// language described in this file, or if you have multiple languages supported.
// If you do need to change your locale, be aware that the format of this function
// is subtlely different in versions of PHP before and after 4.3.0, see
// http://uk2.php.net/manual/en/function.setlocale.php for details.
// Also be aware that changing the whole locale may affect some floating point or decimal
// arithmetic in the database, if this is the case change only the individual locale areas
// that don't affect this rather than all at once. See the examples below.
// Finally, depending on your setup, PHP may not enjoy have multiple locales in a shared
// threaded environment, if you get funny errors it may be this.
//
// Examples
// setlocale( 'LC_ALL', 'en_GB' ); All locale settings pre-4.3.0
// setlocale( LC_ALL, 'en_GB' ); All locale settings 4.3.0 and after
// setlocale( LC_CTYPE, 'en_GB' ); Character class settings 4.3.0 and after
// setlocale( LC_TIME, 'en_GB' ); Date and time formatting 4.3.0 and after
//setlocale( LC_ALL, 'it_IT.UTF-8' ); Date and time formatting 4.3.0 and after
// Simple String Replacements
$SLANG = array(
'24BitColour' => 'colori a 24 bit',
'8BitGrey' => '8 bit scala di grigio',
'Action' => 'Azione',
'Actual' => 'Attuale',
'AddNewControl' => 'Aggiungi nuovo Controllo',
'AddNewMonitor' => 'Aggiungi nuovo Monitor',
'AddNewUser' => 'Aggiungi nuovo Utente',
'AddNewZone' => 'Aggiungi nuova Zona',
'Alarm' => 'Allarme',
'AlarmBrFrames' => 'Immagini<br/>Allarme',
'AlarmFrameCount' => 'Allarme Conta frame',
'AlarmFrame' => 'Immagine Allarme',
'AlarmLimits' => 'Limiti Allarme',
'AlarmMaximumFPS' => 'FPS massimi durante l\'allarme',
'AlarmPx' => 'Pixel Allarme',
'AlarmRGBUnset' => 'Devi settare un colore RGB di allarme',
'Alert' => 'Attenzione',
'All' => 'Tutto',
'Apply' => 'Applica',
'ApplyingStateChange' => 'Sto applicando le modifiche',
'ArchArchived' => 'Archiviato',
'Archive' => 'Archivio',
'Archived' => 'Archiviato',
'ArchUnarchived' => 'Non archiviare',
'Area' => 'Area',
'AreaUnits' => 'Area (px/%)',
'AttrAlarmFrames' => 'Immagini in Allarme',
'AttrArchiveStatus' => 'Stato Archivio',
'AttrAvgScore' => 'Punteggio medio',
'AttrCause' => 'Causa',
'AttrDate' => 'Data',
'AttrDateTime' => 'Data/Ora',
'AttrDiskBlocks' => 'Blocchi del Disco',
'AttrDiskPercent' => 'Percentuale del Disco',
'AttrDuration' => 'Durata',
'AttrFrames' => 'Immagini',
'AttrId' => 'Id',
'AttrMaxScore' => 'Punteggio massimo',
'AttrMonitorId' => 'Id Monitor',
'AttrMonitorName' => 'Nome Monitor',
'AttrName' => 'Nome',
'AttrNotes' => 'Note',
'AttrSystemLoad' => 'Carico del Sistema',
'AttrSystemLoad' => 'System Load',
'AttrTime' => 'Ora',
'AttrTotalScore' => 'Punteggio totale',
'AttrWeekday' => 'Giorno della settimana',
'Auto' => 'Auto',
'AutoStopTimeout' => 'Auto Stop Timeout',
'AvgBrScore' => 'Punteggio<br/>medio',
'Background' => 'Background',
'BackgroundFilter' => 'Esegui filtro in background',
'BadAlarmFrameCount' => 'Il numero di frame di un allarme deve essere un numero intero superiore a uno',
'BadAlarmMaxFPS' => 'Il numero massimo di FPS dell\'allarme deve essere un numero intero positivo o un valore in virgola mobile',
'BadChannel' => 'Il canale deve essere settato con un numero intero uguale o maggiore di zero',
'BadDevice' => 'Il dispositivo deve essere impostato con un valore valido',
'BadFormat' => 'Il formato deve essere impostato con un numero intero come 0 o maggiore',
'BadFPSReportInterval' => 'L\'intervallo di FPS per i report deve essere un numero intero superiore a 100',
'BadFrameSkip' => 'Il numero di Frame da scartare deve essere un intero uguale a 0 o superiore',
'BadHeight' => 'L\'altezza deve essere impostata con un valore valido',
'BadHost' => 'L\'host deve essere impostato con un indirizzo ip valido o con un hostname, non includendo http://',
'BadImageBufferCount' => 'La dimensione del buffer dell\'immagine deve essere impostata con un numero intero pari a 10 o maggiore',
'BadLabelX' => 'L\'etichetta della coordinata X deve essere un numero intero pari a 0 o maggiore',
'BadLabelY' => 'L\'etichetta della coordinata Y deve essere un numero intero pari a 0 o maggiore',
'BadMaxFPS' => 'I frame per secondo (FPS) massimi devono essere un numero intero positivo o un valore in virgola mobile',
'BadNameChars' => 'I nomi possono contenere solo caratteri alfanumerici pi&ugrave; i caratteri - e _',
'BadPath' => 'Il percorso deve essere impostato con un valore valido',
'BadPort' => 'La porta deve essere settata con un valore valido',
'BadPostEventCount' => 'Il buffer d\'immagine successivo ad un evento deve essere un numero maggiore o uguale a zero',
'BadPreEventCount' => 'Il buffer d\'immagine antecedente ad un evento deve essere minimo 0 e comunque minore della dimensione del buffer d\'immagine',
'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' => 'Il colore del controllo di segnale deve essere una stringa RGB valida',
'BadSignalCheckColour' => 'Signal check colour must be a valid RGB colour string',
'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',
'BadWidth' => 'La larghezza deve essere impostata con un valore valido',
'Bandwidth' => 'Banda',
'BlobPx' => 'Blob Px',
'Blobs' => 'Blobs',
'BlobSizes' => 'Dimensioni Blob',
'Brightness' => 'Luminosit&agrave;',
'Buffers' => 'Buffers',
'CanAutoFocus' => 'Puo\' Auto Focus',
'CanAutoGain' => 'Puo\' Auto Gains',
'CanAutoIris' => 'Puo\' Auto Iris',
'CanAutoWhite' => 'Puo\' Auto bil bianco',
'CanAutoZoom' => 'Puo\' Auto Zoom',
'Cancel' => 'Annulla',
'CancelForcedAlarm' => 'Annulla Allarme Forzato',
'CanFocusAbs' => 'Puo\' Fuoco Assoluto',
'CanFocusCon' => 'Puo\' Fuoco Continuo ',
'CanFocus' => 'Puo\' Fuoco',
'CanFocusRel' => 'Puo\' Fuoco Relativo',
'CanGainAbs' => 'Puo\' Gain Assoluto',
'CanGainCon' => 'Puo\' Gain Continuo ',
'CanGain' => 'Puo\' Gain ',
'CanGainRel' => 'Puo\' Gain Relativo',
'CanIrisAbs' => 'Puo\' Iris Assoluto',
'CanIrisCon' => 'Puo\' Iris Continuo ',
'CanIris' => 'Puo\' Iris',
'CanIrisRel' => 'Puo\' Iris Relativo',
'CanMoveAbs' => 'Puo\' Mov. Assoluto',
'CanMoveCon' => 'Puo\' Mov. Continuo ',
'CanMoveDiag' => 'Puo\' Mov. Diagonale ',
'CanMoveMap' => 'Puo\' Mov Mappato',
'CanMove' => 'Puo\' Mov.',
'CanMoveRel' => 'Puo\' Mov. Relativo',
'CanPan' => 'Puo\' Pan' ,
'CanReset' => 'Puo\' Reset',
'CanSetPresets' => 'Puo\' impostare preset',
'CanSleep' => 'Puo\' andare in sleep',
'CanTilt' => 'Puo\' Tilt',
'CanWake' => 'Puo\' essere riattivato',
'CanWhiteAbs' => 'Puo\' bilanciare il bianco assoluto',
'CanWhiteBal' => 'Puo\' bilanciare il bianco',
'CanWhiteCon' => 'Puo\' bilanciare il bianco Continuo',
'CanWhite' => 'Puo\' bilanciare il bianco',
'CanWhiteRel' => 'Puo\' bilanciare il bianco Relativo',
'CanZoomAbs' => 'Puo\' Zoom Assoluto',
'CanZoomCon' => 'Puo\' Zoom Continuo',
'CanZoom' => 'Puo\' Zoom',
'CanZoomRel' => 'Puo\' Zoom Relativo',
'CaptureHeight' => 'Altezza img catturata',
'CapturePalette' => 'Paletta img Catturata',
'CaptureWidth' => 'Larghezza img Catturata',
'Cause' => 'Causa',
'CheckMethod' => 'Metodo di Controllo Allarme',
'ChooseFilter' => 'Scegli Filtro',
'ChoosePreset' => 'Scegli Preset',
'Close' => 'Chiudi',
'Colour' => 'Colori',
'Command' => 'Comando',
'Config' => 'Configura',
'ConfiguredFor' => 'Configurato per',
'ConfirmDeleteEvents' => 'Sei sicuro di voler cancellare gli eventi selezionati',
'ConfirmPassword' => 'Conferma Password',
'ConjAnd' => 'e',
'ConjOr' => 'o',
'Console' => 'Console',
'ContactAdmin' => 'Contatta il tuo amministratore per dettagli.',
'Continue' => 'Continuo',
'Contrast' => 'Contrasto',
'ControlAddress' => 'Indirizzo di controllo',
'ControlCap' => 'Capacita\' di controllo',
'ControlCaps' => 'Capacita\' di controllo',
'Control' => 'Controllo',
'ControlDevice' => 'Dispositivo di controllo',
'Controllable' => 'Controllabile',
'ControlType' => 'Tipo Controllo',
'Cycle' => 'Cicla',
'CycleWatch' => 'Vista Ciclica',
'Day' => 'Giorno',
'Debug' => 'Debug',
'DefaultRate' => 'Default Rate',
'DefaultScale' => 'Scala di default',
'DefaultView' => 'Visualizzazione di default',
'DeleteAndNext' => 'Elimina &amp; Prossimo',
'DeleteAndPrev' => 'Elimina &amp; Precedente',
'Delete' => 'Elimina',
'DeleteSavedFilter' => 'Elimina il filtro salvato',
'Description' => 'Descrizione',
'DeviceChannel' => 'Canale Periferica',
'DeviceFormat' => 'Formato',
'DeviceNumber' => 'Numero Periferica',
'DevicePath' => 'Percorso Dispositivo',
'Devices' => 'Dispositivi',
'Dimensions' => 'Dimensioni',
'DisableAlarms' => 'Disabil Allarme',
'Disk' => 'Utilizzo Disco',
'DonateAlready' => 'No, ho gia donato... ',
'Donate' => 'Donate,per favore',
'DonateEnticement' => 'Stai usando ZoneMinder da un po\' di tempo e spero che tu lo stia trovando utile per la sicurezza di casa tua o del tuo posto di lavoro..Anche se ZoneMinder e\' distribuito liberamente come software libero,costa soldi sia svilupparlo che supportarlo. Se preferisci che questo software continui ad avere supporto e sviluppo in futuro allora considera l\idea di fare una piccola donazione. Donare e\' ovviamente opzionale, ma apprezzato e puoi donare quanto vuoi,quel poco o tanto che tu desideri.<br><br>Se hai voglia per cortesia seleziona l\'opzione sotto o punta il tuo browser a http://www.zoneminder.com/donate.html .<br><br>Grazie per usare ZoneMinder e non dimenticare di visitare il forum in ZoneMinder.com se cerchi supporto o hai suggerimenti riguardo a come rendere migliore Zoneminder.',
'DonateRemindDay' => 'Non ancora, ricordamelo ancora tra 1 giorno',
'DonateRemindHour' => 'Non ancora, ricordamelo ancora tra 1 ora',
'DonateRemindMonth' => 'Non ancora, ricordamelo ancora tra 1 mese',
'DonateRemindNever' => 'No, io non voglio donare, non lo faro\' mai',
'DonateRemindWeek' => 'Non ancora, ricordamelo ancora tra 1 settimana',
'DonateYes' => 'Si,mi piacerebbe donare qualcosa ora',
'Download' => 'Download',
'Duration' => 'Durata',
'Edit' => 'Modifica',
'Email' => 'Email',
'EnableAlarms' => 'Abilita Allarmi',
'Enabled' => 'Attivo',
'EnterNewFilterName' => 'Inserisci il nome del nuovo filtro',
'ErrorBrackets' => 'Errore, controlla di avere un ugual numero di parentesti aperte e chiuse.',
'Error' => 'Errore',
'ErrorValidValue' => 'Errore, controlla che tutti i termini abbiano un valore valido',
'Etc' => 'ecc.',
'Event' => 'Evento',
'EventFilter' => 'Filtro Eventi',
'EventId' => 'Id Evento',
'EventName' => 'Nome Evento',
'EventPrefix' => 'Prefisso Evento',
'Events' => 'Eventi',
'Exclude' => 'Escludi',
'Execute' => 'Esegui',
'ExportDetails' => 'Esp. dettagli eventi',
'Export' => 'Esporta',
'ExportFailed' => 'Esp. Fallita ',
'ExportFormat' => 'Formato File Esp. ',
'ExportFormatTar' => 'Tar',
'ExportFormatZip' => 'Zip',
'ExportFrames' => 'Dettagli frame espo.',
'ExportImageFiles' => 'Esporta le immagini',
'Exporting' => 'In corso.',
'ExportMiscFiles' => 'Esporto Altri file (se presenti)',
'ExportOptions' => 'Opzioni Esportazione',
'ExportVideoFiles' => 'Esporto File Video (se presenti)',
'Far' => 'Lontano',
'FastForward' => 'Avanti Veloce',
'FastForward' => 'Fast Forward',
'Feed' => 'Feed',
'FileColours' => 'Colori File',
'File' => 'File',
'FilePath' => 'Percorso File',
'FilterArchiveEvents' => 'Archivia gli eventi',
'FilterDeleteEvents' => 'Elimina gli eventi',
'FilterEmailEvents' => 'Invia dettagli via email',
'FilterExecuteEvents' => 'Esegui un comando',
'FilterMessageEvents' => 'Invia dettagli tramite messaggio',
'FilterPx' => 'Px Filtro',
'Filters' => 'Filtri',
'FilterUnset' => 'Devi specificare altezza e larghezza per il filtro',
'FilterUploadEvents' => 'Fai upload eventi (FTP)',
'FilterVideoEvents' => 'Crea video per tutte le corrispondenze',
'First' => 'Primo',
'FlippedHori' => 'ribaltato orizzontale',
'FlippedVert' => 'ribaltato verticale',
'Focus' => 'Focus',
'ForceAlarm' => 'Forza Allarme',
'Format' => 'Formato',
'FPS' => 'fps',
'FPSReportInterval' => 'Intervallo Report FPS',
'FrameId' => 'Id Immagine',
'Frame' => 'Immagini',
'FrameRate' => 'Immagini al secondo',
'Frames' => 'Immagini',
'FrameSkip' => 'Immagini saltate',
'FTP' => 'FTP',
'Func' => 'Funz',
'Function' => 'Funzione',
'Gain' => 'Gain',
'General' => 'Generale',
'GenerateVideo' => 'Genera Video',
'GeneratingVideo' => 'Sto generando il Video',
'GoToZoneMinder' => 'Vai su zoneminder.com',
'Grey' => 'Grigio',
'Group' => 'Gruppo',
'Groups' => 'Gruppi',
'HasFocusSpeed' => 'Ha velocita\' di focus',
'HasGainSpeed' => 'Ha velocita\' di guadagno',
'HasHomePreset' => 'Ha posizioni di present',
'HasIrisSpeed' => 'Ha velocota\' di iris',
'HasPanSpeed' => 'Ha velocita\' di Pan',
'HasPresets' => 'Ha preset',
'HasTiltSpeed' => 'Ha velocita\' di Tilt',
'HasTurboPan' => 'Ha il Turbo Pan',
'HasTurboTilt' => 'Ha il Turbo Tilt',
'HasWhiteSpeed' => 'Ha velocita\' di bilanciamento del bianco',
'HasZoomSpeed' => 'Ha velocita\' di zoom',
'High' => 'Alta',
'HighBW' => 'Banda&nbsp;Alta',
'Home' => 'Home',
'Hour' => 'Ora',
'Hue' => 'Tinta',
'Id' => 'Id',
'Idle' => 'Inattivo',
'Ignore' => 'Ignora',
'ImageBufferSize' => 'Grandezza Buffer Immagine (frames)',
'Image' => 'Immagine',
'Images' => 'Immagini',
'Include' => 'Includi',
'In' => 'In',
'Inverted' => 'Invertito',
'Iris' => 'Iris',
'KeyString' => 'Stringa Chiave',
'Label' => 'Etichetta',
'Language' => 'Linguaggio',
'Last' => 'Ultimo',
'LimitResultsPost' => 'risultati;', // This is used at the end of the phrase 'Limit to first N results only'
'LimitResultsPre' => 'Limita ai primi', // This is used at the beginning of the phrase 'Limit to first N results only'
'LinkedMonitors' => 'Monitor Collegati',
'List' => 'Lista',
'Load' => 'Carico Sistema',
'Local' => 'Locale',
'LoggedInAs' => 'Collegato come:',
'LoggingIn' => 'Mi Sto Collegando',
'Login' => 'Login',
'Logout' => 'Logout',
'Low' => 'Bassa',
'LowBW' => 'Banda&nbsp;Bassa',
'Main' => 'Principale',
'Man' => 'Man',
'Manual' => 'Manuale',
'Mark' => 'Seleziona',
'MaxBandwidth' => 'Banda Massima',
'MaxBrScore' => 'Punteggio<br/>Massimo',
'MaxFocusRange' => 'Massimo range del focus',
'MaxFocusSpeed' => 'Massima velocita\' del focus',
'MaxFocusStep' => 'Massimo step del focus',
'MaxGainRange' => 'Massimo range del guadagno',
'MaxGainSpeed' => 'Massima velocita\' del guadagno',
'MaxGainStep' => 'Massimo step del guadagno',
'MaximumFPS' => 'Massimi FPS',
'MaxIrisRange' => 'Massima range dell\'Iris',
'MaxIrisSpeed' => 'Massima velocita\' dell\'Iris',
'MaxIrisStep' => 'Massimo step dell\'Iris',
'Max' => 'Massima',
'MaxPanRange' => 'Massimo range del pan',
'MaxPanSpeed' => 'Massima velocita\' del tilt',
'MaxPanStep' => 'Massimo step del pan',
'MaxTiltRange' => 'Massimo range del tilt',
'MaxTiltSpeed' => 'Massima velocita\' del tilt',
'MaxTiltStep' => 'Massimo passo del tilt',
'MaxWhiteRange' => 'Massimo range del bilanciamento del bianco',
'MaxWhiteSpeed' => 'Massima velocita\' del bilanciamento del bianco',
'MaxWhiteStep' => 'Massimo Step del bilanciamento del bianco',
'MaxZoomRange' => 'Massimo range dello zoom',
'MaxZoomSpeed' => 'Massima velocita\' dello zoom',
'MaxZoomStep' => 'Massimo step dello zoom',
'MediumBW' => 'Banda&nbsp;Media',
'Medium' => 'Media',
'MinAlarmAreaLtMax' => 'L\'area minima dell\'allarme deve essere minore di quella massima',
'MinAlarmAreaUnset' => 'Devi specificare il numero minimo di pixel per l\'allarme',
'MinAlarmGeMinBlob' => 'I pixel minimi dell\'allarme devono essere grandi almeno quanto i pixel minimi del blob',
'MinAlarmGeMinFilter' => 'I pixel minimi dell\'allarme devono essere grandi almeno quanto i pixel minimi del filtro',
'MinAlarmPixelsLtMax' => 'I pixel minimi dell\'allarme devono essere minori dei pixel massimi dell\'allarme',
'MinBlobAreaLtMax' => 'L\'area di blob minima deve essere minore dell\'area di blob massima',
'MinBlobAreaUnset' => 'Devi specificare il numero minimo di pixel per il blob',
'MinBlobLtMinFilter' => 'L\'area minima di blob deve essere minore o uguale dell\'area minima del filtro',
'MinBlobsLtMax' => 'I blob minimi devono essere minori dei blob massimi',
'MinBlobsUnset' => 'Devi specificare il numero minimo di blob',
'MinFilterAreaLtMax' => 'L\'area minima del filtro deve essere minore di quella massima',
'MinFilterAreaUnset' => 'Devi specificare il numero minimo di pixel per il filtro',
'MinFilterLtMinAlarm' => 'L\'area minima di filtro deve essere minore o uguale dell\area minima di allarme',
'MinFilterPixelsLtMax' => 'I pixel minimi del filtro devono essere minori di pixel massimi del filtro',
'MinFocusRange' => 'Range minimo del Focus',
'MinFocusSpeed' => 'Velocita\' minima del Focus',
'MinFocusStep' => 'Minimo step del Focus',
'MinGainRange' => 'Minimo range del Guadagno',
'MinGainSpeed' => 'Velocita\' minima del Guadagno',
'MinGainStep' => 'Step minimo del guadagno',
'MinIrisRange' => 'Range minimo dell\'Iris',
'MinIrisSpeed' => 'Velocita\' minima dell\'Iris',
'MinIrisStep' => 'Step minimo dell\'Iris',
'MinPanRange' => 'Range minimo del pan',
'MinPanSpeed' => 'Velocita\' minima del Pan',
'MinPanStep' => 'Step minimo del Pan',
'MinPixelThresLtMax' => 'I pixel minimi della soglia devono essere minori dei pixel massimi della soglia',
'MinTiltRange' => 'Range minimo del Tilt',
'MinTiltSpeed' => 'Velocita\' minima del Tilt',
'MinTiltStep' => 'Step minimo del Tilt',
'MinWhiteRange' => 'Range minimo del bilanciamento del bianco',
'MinWhiteSpeed' => 'Velocita\' minima del bialnciamento del bianco',
'MinWhiteStep' => 'Minimo step del bilanciamento del bianco',
'MinZoomRange' => 'Range minimo dello zoom',
'MinZoomSpeed' => 'Velocita\' minima dello zoom',
'MinZoomStep' => 'Step minimo dello zoom',
'Misc' => 'Altro',
'MonitorIds' => 'Monitor&nbsp;Ids',
'Monitor' => 'Monitor',
'MonitorPresetIntro' => 'Selezionare un appropriato pre settaggio dalla lista riportata qui sotto.<br><br>Per favore notare che questo potrebbe sovrascrivere ogni valore che hai già configurato su questo monitor.<br><br>',
'MonitorPreset' => 'Monitor Presenti',
'Monitors' => 'Monitors',
'Montage' => 'Montaggio',
'Month' => 'Mese',
'Move' => 'Sposta',
'MustBeGe' => 'deve essere superiore a',
'MustBeLe' => 'deve essere inferiore o pari a',
'MustConfirmPassword' => 'Devi confermare la password',
'MustSupplyPassword' => 'Devi inserire una password',
'MustSupplyUsername' => 'Devi specificare un nome utente',
'Name' => 'Nome',
'Near' => 'Vicino',
'Network' => 'Rete',
'NewGroup' => 'Nuovo Gruppo',
'NewLabel' => 'Nuova Etichetta',
'New' => 'Nuovo',
'NewPassword' => 'Nuova Password',
'NewState' => 'Nuovo Stato',
'NewUser' => 'Nuovo Utente',
'Next' => 'Prossimo',
'NoFramesRecorded' => 'Non ci sono immagini salvate per questo evento',
'NoGroups' => 'Nessun Gruppo e\' stato definito',
'NoneAvailable' => 'Nessuno disponibile',
'None' => 'Nessuno',
'No' => 'No',
'Normal' => 'Normale',
'NoSavedFilters' => 'NessunFiltroSalvato',
'NoStatisticsRecorded' => 'Non ci sono statistiche salvate per questo evento/immagine',
'Notes' => 'Note',
'NumPresets' => 'Num Presets',
'Off' => 'Off',
'On' => 'On',
'Open' => 'Apri',
'OpEq' => 'uguale a',
'OpGtEq' => 'maggiore o uguale a',
'OpGt' => 'maggiore di',
'OpIn' => 'impostato',
'OpLtEq' => 'minore o uguale a',
'OpLt' => 'minore di',
'OpMatches' => 'corrisponde',
'OpNe' => 'diverso da',
'OpNotIn' => 'non impostato',
'OpNotMatches' => 'non corrisponde',
'OptionHelp' => 'Opzioni di Aiuto',
'OptionRestartWarning' => 'Queste modifiche potrebbero essere attive solo dopo un riavvio del sistema. Riavviare ZoneMinder.',
'Options' => 'Opzioni',
'Order' => 'Ordine',
'OrEnterNewName' => 'o inserisci un nuovo nome',
'Orientation' => 'Orientamento',
'Out' => 'Out',
'OverwriteExisting' => 'Sovrascrivi',
'Paged' => 'Con paginazione',
'PanLeft' => 'Pan Sinistra',
'Pan' => 'Pan',
'PanRight' => 'Pan Destra',
'PanTilt' => 'Pan/Tilt',
'Parameter' => 'Parametri',
'Password' => 'Password',
'PasswordsDifferent' => 'Le password non coincidono',
'Paths' => 'Percorsi',
'Pause' => 'Pausa',
'Pause' => 'Pause',
'PhoneBW' => 'Banda&nbsp;Tel',
'Phone' => 'Telefono',
'PixelDiff' => 'Pixel Diff',
'Pixels' => 'pixels',
'PlayAll' => 'Vedi tutti',
'Play' => 'Play',
'PleaseWait' => 'Attendere prego',
'Point' => 'Punto',
'PostEventImageBuffer' => 'Buffer di immagini Dopo Evento',
'PreEventImageBuffer' => 'Buffer di immagini Pre Evento',
'PreserveAspect' => 'Preserve Aspect Ratio',
'Preset' => 'Preset',
'Presets' => 'Presets',
'Prev' => 'Prec',
'Protocol' => 'Protocol',
'Rate' => 'Velocita\'',
'Real' => 'Reale',
'Record' => 'Registra',
'RefImageBlendPct' => 'Riferimento Miscela Immagine percentuale',
'Refresh' => 'Aggiorna',
'RemoteHostName' => 'Nome dell\'Host Remoto',
'RemoteHostPath' => 'Percorso dell\'Host Remoto',
'RemoteHostPort' => 'Porta dell\'Host Remoto',
'RemoteImageColours' => 'Colori delle immagini Remote',
'Remote' => 'Remoto',
'Rename' => 'Rinomina',
'ReplayAll' => 'All Events',
'ReplayGapless' => 'Gapless Events',
'Replay' => 'Replay',
'ReplaySingle' => 'Single Event',
'ResetEventCounts' => 'Resetta Contatore Eventi',
'Reset' => 'Resetta',
'Restarting' => 'Sto riavviando',
'Restart' => 'Riavvia',
'RestrictedCameraIds' => 'Camera Ids Riservati',
'RestrictedMonitors' => 'Monitor limitati',
'ReturnDelay' => 'Ritardo del ritorno',
'ReturnLocation' => 'Posizione del ritorno',
'Rewind' => 'Rewind',
'Rewind' => 'Riavvolgi',
'RotateLeft' => 'Ruota a Sinista',
'RotateRight' => 'Ruota a Destra',
'RunMode' => 'Modalita funzionamento',
'Running' => 'Avviato',
'RunState' => 'Stato Avviato',
'SaveAs' => 'Salva come',
'SaveFilter' => 'salva Filtro',
'Save' => 'Salva',
'Scale' => 'Scala',
'Score' => 'Punteggio',
'Secs' => 'Secs',
'Sectionlength' => 'Lunghezza Sezione',
'SelectMonitors' => 'Monitor Selezionati',
'Select' => 'Seleziona',
'SelfIntersecting' => 'I vertici del poligono non devono intersecarsi',
'Set' => 'Imposta',
'SetLearnPrefs' => 'Seleziona le preferenze di autoapprendimento', // This can be ignored for now
'SetNewBandwidth' => 'Imposta nuova Banda',
'SetPreset' => 'Imposta Preset',
'Settings' => 'Impostazioni',
'ShowFilterWindow' => 'MostraFinestraFiltri',
'ShowTimeline' => 'Mostra linea temporale',
'SignalCheckColour' => 'Colore del controllo di segnale',
'SignalCheckColour' => 'Signal Check Colour',
'Size' => 'grandezza',
'Sleep' => 'Sleep',
'SortAsc' => 'Cresc',
'SortBy' => 'Ordina per',
'SortDesc' => 'Decr',
'Source' => 'Sorgente',
'SourceType' => 'Tipo Sorgente',
'SpeedHigh' => 'Alta Velocita\'',
'SpeedLow' => 'Bassa Velocita\'',
'SpeedMedium' => 'Media Velocita\'',
'SpeedTurbo' => 'Turbo Velocita\'',
'Speed' => 'Velocita\'',
'Start' => 'Avvia',
'State' => 'Stato',
'Stats' => 'Statistiche',
'Status' => 'Stato',
'StepBack' => 'Step Back',
'StepForward' => 'Step Forward',
'StepLarge' => 'Lungo passo',
'StepMedium' => 'Medio passo',
'StepNone' => 'No passo',
'Step' => 'Passo',
'StepSmall' => 'Piccolo passo',
'Stills' => 'Foto',
'Stopped' => 'Fermo-immagine',
'Stop' => 'Stop',
'Stream' => 'Flusso',
'StreamReplayBuffer' => 'Stream Replay Image Buffer',
'Submit' => 'Accetta',
'System' => 'Sistema',
'Tele' => 'Tele',
'Thumbnail' => 'Anteprima',
'Tilt' => 'Tilt',
'TimeDelta' => 'Tempo di Delta',
'Timeline' => 'Linea Temporale',
'Time' => 'Ora',
'TimestampLabelFormat' => 'Formato etichetta timestamp',
'TimestampLabelX' => 'coordinata X etichetta',
'TimestampLabelY' => 'coordinata Y etichetta',
'Timestamp' => 'Timestamp',
'TimeStamp' => 'Time Stamp',
'Today' => 'Oggi ',
'Tools' => 'Strumenti',
'TotalBrScore' => 'Punteggio<br/>Totale',
'TrackDelay' => 'Track Delay',
'TrackMotion' => 'Track Motion',
'Triggers' => 'Triggers',
'TurboPanSpeed' => 'Velocita\' Turbo Pan',
'TurboTiltSpeed' => 'Velocita\' Turbo Tilt',
'Type' => 'Tipo',
'Unarchive' => 'Togli dall\'archivio',
'Units' => 'Unit&agrave;',
'Unknown' => 'Sconosciuto',
'Update' => 'Aggiorna',
'UpdateAvailable' => 'Un aggiornamento di ZoneMinder &egrave; disponibilie.',
'UpdateNotNecessary' => 'Nessun aggiornamento necessario.',
'UseFilterExprsPost' => '&nbsp;espressioni&nbsp;filtri', // This is used at the end of the phrase 'use N filter expressions'
'UseFilterExprsPre' => 'Usa&nbsp;', // This is used at the beginning of the phrase 'use N filter expressions'
'UseFilter' => 'Usa Filtro',
'Username' => 'Nome Utente',
'Users' => 'Utenti',
'User' => 'Utente',
'Value' => 'Valore',
'VersionIgnore' => 'Ignora questa versione',
'VersionRemindDay' => 'Ricordami ancora tra un giorno',
'VersionRemindHour' => 'Ricordami ancora tra un\'ora',
'VersionRemindNever' => 'Non ricordarmi di nuove versioni',
'VersionRemindWeek' => 'Ricordami ancora tra una settimana',
'Version' => 'Versione',
'VideoFormat' => 'Formato Video',
'VideoGenFailed' => 'Generazione Video Fallita!',
'VideoGenFiles' => 'File Video Esistenti',
'VideoGenNoFiles' => 'Non ho trovato file ',
'VideoGenParms' => 'Parametri Generazione Video',
'VideoGenSucceeded' => 'Successo: Generato Video !',
'VideoSize' => 'Dimensioni Video',
'Video' => 'Video',
'ViewAll' => 'Vedi Tutto',
'ViewEvent' => 'Vedi Evento',
'ViewPaged' => 'Vedi con paginazione',
'View' => 'vedi',
'Wake' => 'Riattiva',
'WarmupFrames' => 'Immagini Allerta',
'Watch' => 'Guarda',
'WebColour' => 'Colore Web',
'Web' => 'Web',
'Week' => 'Settimana',
'WhiteBalance' => 'Bil. Bianco ',
'White' => 'Bianco',
'Wide' => 'Larghezza',
'X10ActivationString' => 'Stringa attivazione X10',
'X10InputAlarmString' => 'Stringa allarme input X10',
'X10OutputAlarmString' => 'Stringa allarme output X10',
'X10' => 'X10',
'X' => 'X',
'Yes' => 'Si',
'YouNoPerms' => 'Non hai i permessi per accedere a questa risorsa.',
'Y' => 'Y',
'ZoneAlarmColour' => 'Colore Allarme (RGB)',
'ZoneArea' => 'Zone Area',
'ZoneFilterHeight' => 'Altezza Filtro (pixels)',
'ZoneFilterSize' => 'Larghezza/Altezza Filtro (pixels)',
'ZoneFilterWidth' => 'Larghezza Filtro (pixels)',
'ZoneMaxAlarmedArea' => 'Massima Area Allarmata',
'ZoneMaxBlobArea' => 'Massima Area Blob',
'ZoneMaxBlobs' => 'Numero Massimo di Blobs',
'ZoneMaxFilteredArea' => 'Massima Area Filtrata',
'ZoneMaxPixelThres' => 'Pixel Massimi di Soglia (0-255)',
'ZoneMaxX' => 'X Massimo (destra)',
'ZoneMaxY' => 'Y Massimo (basso)',
'ZoneMinAlarmedArea' => 'Minima Area Allarmata',
'ZoneMinBlobArea' => 'Minima Area Blob',
'ZoneMinBlobs' => 'Blob Minimi',
'ZoneMinFilteredArea' => 'Minima Area Filtrata',
'ZoneMinMaxAlarmArea' => 'Min/Max Area Allarmata',
'ZoneMinMaxBlobArea' => 'Min/Max Area di Blob',
'ZoneMinMaxBlobs' => 'Min/Max Blobs',
'ZoneMinMaxFiltArea' => 'Min/Max Area Filtrata',
'ZoneMinMaxPixelThres' => 'Min/Max Soglia Pixel (0-255)',
'ZoneMinPixelThres' => 'Pixel Minimi di Soglia (0-255)',
'ZoneMinX' => 'X Minimo (sinistra)',
'ZoneMinY' => 'Y Minimo (alto)',
'ZoneOverloadFrames' => 'Overload Frame Ignore Count',
'Zones' => 'Zone',
'Zone' => 'Zona',
'ZoomIn' => 'Ingrandisci',
'ZoomOut' => 'Rimpicciolisci',
'Zoom' => 'Zoom',
);
// Complex replacements with formatting and/or placements, must be passed through sprintf
$CLANG = array(
'CurrentLogin' => 'Login attuale: \'%1$s\'',
'EventCount' => '%1$s %2$s', // For example '37 Events' (from Vlang below)
'LastEvents' => 'Ultimi %1$s %2$s', // For example 'Last 37 Events' (from Vlang below)
'LatestRelease' => 'L\'ultima release v%1$s, tu hai v%2$s.',
'MonitorCount' => '%1$s %2$s', // For example '4 Monitors' (from Vlang below)
'MonitorFunction' => 'Funzione Monitor %1$s',
'RunningRecentVer' => 'Stai usando la versione pi&ugrave; aggiornata di ZoneMinder, v%s.',
);
// The next section allows you to describe a series of word ending and counts used to
// generate the correctly conjugated forms of words depending on a count that is associated
// with that word.
// This intended to allow phrases such a '0 potatoes', '1 potato', '2 potatoes' etc to
// conjugate correctly with the associated count.
// In some languages such as English this is fairly simple and can be expressed by assigning
// a count with a singular or plural form of a word and then finding the nearest (lower) value.
// So '0' of something generally ends in 's', 1 of something is singular and has no extra
// ending and 2 or more is a plural and ends in 's' also. So to find the ending for '187' of
// something you would find the nearest lower count (2) and use that ending.
//
// So examples of this would be
// $zmVlangPotato = array( 0=>'Potatoes', 1=>'Potato', 2=>'Potatoes' );
// $zmVlangSheep = array( 0=>'Sheep' );
//
// where you can have as few or as many entries in the array as necessary
// If your language is similar in form to this then use the same format and choose the
// appropriate zmVlang function below.
// If however you have a language with a different format of plural endings then another
// approach is required . For instance in Russian the word endings change continuously
// depending on the last digit (or digits) of the numerator. In this case then zmVlang
// arrays could be written so that the array index just represents an arbitrary 'type'
// and the zmVlang function does the calculation about which version is appropriate.
//
// So an example in Russian might be (using English words, and made up endings as I
// don't know any Russian!!)
// $zmVlangPotato = array( 1=>'Potati', 2=>'Potaton', 3=>'Potaten' );
//
// and the zmVlang function decides that the first form is used for counts ending in
// 0, 5-9 or 11-19 and the second form when ending in 1 etc.
//
// Variable arrays expressing plurality, see the zmVlang description above
$VLANG = array(
'Event' => array( 0=>'Eventi', 1=>'Evento', 2=>'Eventi' ),
'Monitor' => array( 0=>'Monitor', 1=>'Monitor', 2=>'Monitor' ),
);
// You will need to choose or write a function that can correlate the plurality string arrays
// with variable counts. This is used to conjugate the Vlang arrays above with a number passed
// in to generate the correct noun form.
//
// In languages such as English this is fairly simple
// Note this still has to be used with printf etc to get the right formating
function zmVlang( $langVarArray, $count )
{
krsort( $langVarArray );
foreach ( $langVarArray as $key=>$value )
{
if ( abs($count) >= $key )
{
return( $value );
}
}
die( 'Errore, sono incapace di correlare le stringhe del file-linguaggio');
}
// This is an version that could be used in the Russian example above
// The rules are that the first word form is used if the count ends in
// 0, 5-9 or 11-19. The second form is used then the count ends in 1
// (not including 11 as above) and the third form is used when the
// count ends in 2-4, again excluding any values ending in 12-14.
//
// function zmVlang( $langVarArray, $count )
// {
// $secondlastdigit = substr( $count, -2, 1 );
// $lastdigit = substr( $count, -1, 1 );
// // or
// // $secondlastdigit = ($count/10)%10;
// // $lastdigit = $count%10;
//
// // Get rid of the special cases first, the teens
// if ( $secondlastdigit == 1 && $lastdigit != 0 )
// {
// return( $langVarArray[1] );
// }
// switch ( $lastdigit )
// {
// case 0 :
// case 5 :
// case 6 :
// case 7 :
// case 8 :
// case 9 :
// {
// return( $langVarArray[1] );
// break;
// }
// case 1 :
// {
// return( $langVarArray[2] );
// break;
// }
// case 2 :
// case 3 :
// case 4 :
// {
// return( $langVarArray[3] );
// break;
// }
// }
// die( 'Error, unable to correlate variable language string' );
// }
// This is an example of how the function is used in the code which you can uncomment and
// use to test your custom function.
//$monitors = array();
//$monitors[] = 1; // Choose any number
//echo sprintf( $zmClangMonitorCount, count($monitors), zmVlang( $zmVlangMonitor, count($monitors) ) );
// In this section you can override the default prompt and help texts for the options area
// These overrides are in the form show below where the array key represents the option name minus the initial ZM_
// So for example, to override the help text for ZM_LANG_DEFAULT do
$OLANG = array(
// 'LANG_DEFAULT' => array(
// 'Prompt' => "This is a new prompt for this option",
// 'Help' => "This is some new help for this option which will be displayed in the popup window when the ? is clicked"
// ),
);
?>

802
web/lang/ja_jp.php Normal file
View File

@ -0,0 +1,802 @@
<?php
//
// ZoneMinder web Japanese language file, $Date$, $Revision$
// Copyright (C) 2003, 2004, 2005, 2006 Philip Coombes
//
// This program 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 program 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
//
// ZoneMinder Japanese Translation by Andrew Arkley
// Notes for Translators
// 0. Get some credit, put your name in the line above (optional)
// 1. When composing the language tokens in your language you should try and keep to roughly the
// same length text if possible. Abbreviate where necessary as spacing is quite close in a number of places.
// 2. There are four types of string replacement
// a) Simple replacements are words or short phrases that are static and used directly. This type of
// replacement can be used 'as is'.
// b) Complex replacements involve some dynamic element being included and so may require substitution
// or changing into a different order. The token listed in this file will be passed through sprintf as
// a formatting string. If the dynamic element is a number you will usually need to use a variable
// replacement also as described below.
// c) Variable replacements are used in conjunction with complex replacements and involve the generation
// of a singular or plural noun depending on the number passed into the zmVlang function. See the
// the zmVlang section below for a further description of this.
// d) Optional strings which can be used to replace the prompts and/or help text for the Options section
// of the web interface. These are not listed below as they are quite large and held in the database
// so that they can also be used by the zmconfig.pl script. However you can build up your own list
// quite easily from the Config table in the database if necessary.
// 3. The tokens listed below are not used to build up phrases or sentences from single words. Therefore
// you can safely assume that a single word token will only be used in that context.
// 4. In new language files, or if you are changing only a few words or phrases it makes sense from a
// maintenance point of view to include the original language file and override the old definitions rather
// than copy all the language tokens across. To do this change the line below to whatever your base language
// is and uncomment it.
// require_once( 'zm_lang_en_gb.php' );
// You may need to change the character set here, if your web server does not already
// do this by default, uncomment this if required.
//
// Example
// header( "Content-Type: text/html; charset=iso-8859-1" );
// You may need to change your locale here if your default one is incorrect for the
// language described in this file, or if you have multiple languages supported.
// If you do need to change your locale, be aware that the format of this function
// is subtlely different in versions of PHP before and after 4.3.0, see
// http://uk2.php.net/manual/en/function.setlocale.php for details.
// Also be aware that changing the whole locale may affect some floating point or decimal
// arithmetic in the database, if this is the case change only the individual locale areas
// that don't affect this rather than all at once. See the examples below.
// Finally, depending on your setup, PHP may not enjoy have multiple locales in a shared
// threaded environment, if you get funny errors it may be this.
//
// Examples
// setlocale( 'LC_ALL', 'en_GB' ); All locale settings pre-4.3.0
// setlocale( LC_ALL, 'en_GB' ); All locale settings 4.3.0 and after
// setlocale( LC_CTYPE, 'en_GB' ); Character class settings 4.3.0 and after
// setlocale( LC_TIME, 'en_GB' ); Date and time formatting 4.3.0 and after
// Simple String Replacements
$SLANG = array(
'24BitColour' => '24ビットカラー',
'8BitGrey' => '8ビット濃淡画像',
'Action' => 'Action',
'Actual' => '生中継',
'AddNewControl' => 'Add New Control',
'AddNewMonitor' => 'モニター追加',
'AddNewUser' => 'ユーザ追加',
'AddNewZone' => 'ゾーン追加',
'Alarm' => 'アラーム',
'AlarmBrFrames' => 'アラーム<br/>フレーム',
'AlarmFrame' => 'アラーム フレーム',
'AlarmFrameCount' => 'Alarm Frame Count',
'AlarmLimits' => 'アラーム限度',
'AlarmMaximumFPS' => 'Alarm Maximum FPS',
'AlarmPx' => 'アラーム Px',
'AlarmRGBUnset' => 'You must set an alarm RGB colour',
'Alert' => '警告',
'All' => '全て',
'ApplyingStateChange' => '変更適用中',
'Apply' => '適用',
'ArchArchived' => '保存分のみ',
'Archive' => 'アーカイブ',
'Archived' => 'Archived',
'ArchUnarchived' => '保存分以外のみ',
'Area' => 'Area',
'AreaUnits' => 'Area (px/%)',
'AttrAlarmFrames' => 'アラーム フレーム',
'AttrArchiveStatus' => '保存状態',
'AttrAvgScore' => '平均スコアー',
'AttrCause' => 'Cause',
'AttrDate' => '日付',
'AttrDateTime' => '日時',
'AttrDiskBlocks' => 'Disk Blocks',
'AttrDiskPercent' => 'Disk Percent',
'AttrDuration' => '継続時間',
'AttrFrames' => 'フレーム',
'AttrId' => 'Id',
'AttrMaxScore' => '最高スコアー',
'AttrMonitorId' => 'モニター Id',
'AttrMonitorName' => 'モニター 名前',
'AttrName' => 'Name',
'AttrNotes' => 'Notes',
'AttrSystemLoad' => 'System Load',
'AttrTime' => '時間',
'AttrTotalScore' => '合計スコアー',
'AttrWeekday' => '曜日',
'Auto' => 'Auto',
'AutoStopTimeout' => 'Auto Stop Timeout',
'AvgBrScore' => '平均<br/>スコアー',
'Background' => 'Background',
'BackgroundFilter' => 'Run filter in background',
'BadAlarmFrameCount' => 'Alarm frame count must be an integer of one or more',
'BadAlarmMaxFPS' => 'Alarm Maximum FPS must be a positive integer or floating point value',
'BadChannel' => 'Channel must be set to an integer of zero or more',
'BadDevice' => 'Device must be set to a valid value',
'BadFormat' => 'Format must be set to an integer of zero or more',
'BadFPSReportInterval' => 'FPS report interval buffer count must be an integer of 100 or more',
'BadFrameSkip' => 'Frame skip count must be an integer of zero or more',
'BadHeight' => 'Height must be set to a valid value',
'BadHost' => 'Host must be set to a valid ip address or hostname, do not include http://',
'BadImageBufferCount' => 'Image buffer size must be an integer of 10 or more',
'BadLabelX' => 'Label X co-ordinate must be set to an integer of zero or more',
'BadLabelY' => 'Label Y co-ordinate must be set to an integer of zero or more',
'BadMaxFPS' => 'Maximum FPS must be a positive integer or floating point value',
'BadNameChars' => 'Names may only contain alphanumeric characters plus hyphen and underscore',
'BadPath' => 'Path must be set to a valid value',
'BadPort' => 'Port must be set to a valid number',
'BadPostEventCount' => 'Post event image count must be an integer of zero or more',
'BadPreEventCount' => 'Pre event image count must be at least zero, and less than image buffer size',
'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',
'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',
'BadWidth' => 'Width must be set to a valid value',
'Bandwidth' => '帯域幅',
'BlobPx' => 'ブロブ Px',
'Blobs' => 'ブロブ',
'BlobSizes' => 'ブロブ サイズ',
'Brightness' => '輝度',
'Buffers' => 'バッファ',
'CanAutoFocus' => 'Can Auto Focus',
'CanAutoGain' => 'Can Auto Gain',
'CanAutoIris' => 'Can Auto Iris',
'CanAutoWhite' => 'Can Auto White Bal.',
'CanAutoZoom' => 'Can Auto Zoom',
'Cancel' => 'キャンセル',
'CancelForcedAlarm' => '強制アラームキャンセル',
'CanFocusAbs' => 'Can Focus Absolute',
'CanFocus' => 'Can Focus',
'CanFocusCon' => 'Can Focus Continuous',
'CanFocusRel' => 'Can Focus Relative',
'CanGainAbs' => 'Can Gain Absolute',
'CanGain' => 'Can Gain ',
'CanGainCon' => 'Can Gain Continuous',
'CanGainRel' => 'Can Gain Relative',
'CanIrisAbs' => 'Can Iris Absolute',
'CanIris' => 'Can Iris',
'CanIrisCon' => 'Can Iris Continuous',
'CanIrisRel' => 'Can Iris Relative',
'CanMoveAbs' => 'Can Move Absolute',
'CanMove' => 'Can Move',
'CanMoveCon' => 'Can Move Continuous',
'CanMoveDiag' => 'Can Move Diagonally',
'CanMoveMap' => 'Can Move Mapped',
'CanMoveRel' => 'Can Move Relative',
'CanPan' => 'Can Pan' ,
'CanReset' => 'Can Reset',
'CanSetPresets' => 'Can Set Presets',
'CanSleep' => 'Can Sleep',
'CanTilt' => 'Can Tilt',
'CanWake' => 'Can Wake',
'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',
'CanZoomCon' => 'Can Zoom Continuous',
'CanZoomRel' => 'Can Zoom Relative',
'CaptureHeight' => '取り込み高さ',
'CapturePalette' => '取り込みパレット',
'CaptureWidth' => '取り込み幅',
'Cause' => 'Cause',
'CheckMethod' => 'アラーム チェック方法',
'ChooseFilter' => 'フィルターの選択',
'ChoosePreset' => 'Choose Preset',
'Close' => '閉じる',
'Colour' => '色',
'Command' => 'Command',
'Config' => 'Config',
'ConfiguredFor' => '設定:',
'ConfirmDeleteEvents' => 'Are you sure you wish to delete the selected events?',
'ConfirmPassword' => 'パスワードの確認',
'ConjAnd' => '及び',
'ConjOr' => '又は',
'Console' => 'コンソール',
'ContactAdmin' => '管理者にお問い合わせください。',
'Continue' => 'Continue',
'Contrast' => 'コントラスト',
'ControlAddress' => 'Control Address',
'ControlCap' => 'Control Capability',
'ControlCaps' => 'Control Capabilities',
'Control' => 'Control',
'ControlDevice' => 'Control Device',
'Controllable' => 'Controllable',
'ControlType' => 'Control Type',
'Cycle' => 'Cycle',
'CycleWatch' => 'サイクル観察',
'Day' => '曜日',
'Debug' => 'Debug',
'DefaultRate' => 'Default Rate',
'DefaultScale' => 'Default Scale',
'DefaultView' => 'Default View',
'Delete' => '削除',
'DeleteAndNext' => '次を削除',
'DeleteAndPrev' => '前を削除',
'DeleteSavedFilter' => '保存フィルターの削除',
'Description' => '説明',
'DeviceChannel' => 'デバイス チャンネル',
'DeviceFormat' => 'デバイス フォーマット',
'DeviceNumber' => 'デバイス番号',
'DevicePath' => 'Device Path',
'Devices' => 'Devices',
'Dimensions' => '寸法',
'DisableAlarms' => 'Disable Alarms',
'Disk' => 'Disk',
'DonateAlready' => 'No, I\'ve already donated',
'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' => 'Please Donate',
'DonateRemindDay' => 'Not yet, remind again in 1 day',
'DonateRemindHour' => 'Not yet, remind again in 1 hour',
'DonateRemindMonth' => 'Not yet, remind again in 1 month',
'DonateRemindNever' => 'No, I don\'t want to donate, never remind',
'DonateRemindWeek' => 'Not yet, remind again in 1 week',
'DonateYes' => 'Yes, I\'d like to donate now',
'Download' => 'Download',
'Duration' => '継続時間',
'Edit' => '編集',
'Email' => 'メール',
'EnableAlarms' => 'Enable Alarms',
'Enabled' => '使用可能\',
'EnterNewFilterName' => '新しいフィルター名の入力',
'ErrorBrackets' => 'エラー、開き括弧と閉じ括弧の数が合っているのかを確認してください',
'Error' => 'エラー',
'ErrorValidValue' => 'エラー、全ての項の数値が有効かどうかを確認してください',
'Etc' => '等',
'Event' => 'イベント',
'EventFilter' => 'イベント フィルター',
'EventId' => 'Event Id',
'EventName' => 'Event Name',
'EventPrefix' => 'Event Prefix',
'Events' => 'イベント',
'Exclude' => '排除',
'Execute' => 'Execute',
'ExportDetails' => 'Export Event Details',
'Export' => 'Export',
'ExportFailed' => 'Export Failed',
'ExportFormat' => 'Export File Format',
'ExportFormatTar' => 'Tar',
'ExportFormatZip' => 'Zip',
'ExportFrames' => 'Export Frame Details',
'ExportImageFiles' => 'Export Image Files',
'Exporting' => 'Exporting',
'ExportMiscFiles' => 'Export Other Files (if present)',
'ExportOptions' => 'Export Options',
'ExportVideoFiles' => 'Export Video Files (if present)',
'Far' => 'Far',
'FastForward' => 'Fast Forward',
'Feed' => '送り込む',
'FileColours' => 'File Colours',
'File' => 'File',
'FilePath' => 'File Path',
'FilterArchiveEvents' => 'Archive all matches',
'FilterDeleteEvents' => 'Delete all matches',
'FilterEmailEvents' => 'Email details of all matches',
'FilterExecuteEvents' => 'Execute command on all matches',
'FilterMessageEvents' => 'Message details of all matches',
'FilterPx' => 'フィルター Px',
'Filters' => 'Filters',
'FilterUnset' => 'You must specify a filter width and height',
'FilterUploadEvents' => 'Upload all matches',
'FilterVideoEvents' => 'Create video for all matches',
'First' => '最初',
'FlippedHori' => 'Flipped Horizontally',
'FlippedVert' => 'Flipped Vertically',
'Focus' => 'Focus',
'ForceAlarm' => '強制アラーム',
'Format' => 'Format',
'FPS' => 'fps',
'FPSReportInterval' => 'FPS報告間隔',
'Frame' => 'フレーム',
'FrameId' => 'フレーム ID',
'FrameRate' => 'フレームレート',
'Frames' => 'フレーム',
'FrameSkip' => 'フレームスキップ',
'FTP' => 'FTP',
'Func' => '機能\',
'Function' => '機能\',
'Gain' => 'Gain',
'General' => 'General',
'GenerateVideo' => 'ビデオの生成',
'GeneratingVideo' => 'ビデオ生成中',
'GoToZoneMinder' => 'ZoneMinder.comに行く',
'Grey' => 'グレー',
'Group' => 'Group',
'Groups' => 'Groups',
'HasFocusSpeed' => 'Has Focus Speed',
'HasGainSpeed' => 'Has Gain Speed',
'HasHomePreset' => 'Has Home Preset',
'HasIrisSpeed' => 'Has Iris Speed',
'HasPanSpeed' => 'Has Pan Speed',
'HasPresets' => 'Has Presets',
'HasTiltSpeed' => 'Has Tilt Speed',
'HasTurboPan' => 'Has Turbo Pan',
'HasTurboTilt' => 'Has Turbo Tilt',
'HasWhiteSpeed' => 'Has White Bal. Speed',
'HasZoomSpeed' => 'Has Zoom Speed',
'High' => '高',
'HighBW' => '高帯域',
'Home' => 'Home',
'Hour' => '時',
'Hue' => '色相',
'Id' => 'ID',
'Idle' => '待機状態',
'Ignore' => '無視',
'ImageBufferSize' => '画像 バッファ サイズ',
'Images' => 'Images',
'Image' => '画像',
'Include' => '組み込む',
'In' => 'In',
'Inverted' => '反転',
'Iris' => 'Iris',
'KeyString' => 'Key String',
'Label' => 'Label',
'Language' => '言語',
'Last' => '最終',
'LimitResultsPost' => 'results only;', // This is used at the end of the phrase 'Limit to first N results only'
'LimitResultsPre' => 'Limit to first', // This is used at the beginning of the phrase 'Limit to first N results only'
'LinkedMonitors' => 'Linked Monitors',
'List' => 'List',
'Load' => 'Load',
'Local' => 'ローカル',
'LoggedInAs' => 'ログイン済み:',
'LoggingIn' => 'ログイン中',
'Login' => 'ログイン',
'Logout' => 'ログアウト',
'Low' => '低',
'LowBW' => '低帯域',
'Main' => 'Main',
'Man' => 'Man',
'Manual' => 'Manual',
'Mark' => '選択',
'MaxBandwidth' => 'Max Bandwidth',
'MaxBrScore' => '最高<br/>スコアー',
'MaxFocusRange' => 'Max Focus Range',
'MaxFocusSpeed' => 'Max Focus Speed',
'MaxFocusStep' => 'Max Focus Step',
'MaxGainRange' => 'Max Gain Range',
'MaxGainSpeed' => 'Max Gain Speed',
'MaxGainStep' => 'Max Gain Step',
'MaximumFPS' => '最高 FPS',
'MaxIrisRange' => 'Max Iris Range',
'MaxIrisSpeed' => 'Max Iris Speed',
'MaxIrisStep' => 'Max Iris Step',
'Max' => '最高',
'MaxPanRange' => 'Max Pan Range',
'MaxPanSpeed' => 'Max Pan Speed',
'MaxPanStep' => 'Max Pan Step',
'MaxTiltRange' => 'Max Tilt Range',
'MaxTiltSpeed' => 'Max Tilt Speed',
'MaxTiltStep' => 'Max Tilt Step',
'MaxWhiteRange' => 'Max White Bal. Range',
'MaxWhiteSpeed' => 'Max White Bal. Speed',
'MaxWhiteStep' => 'Max White Bal. Step',
'MaxZoomRange' => 'Max Zoom Range',
'MaxZoomSpeed' => 'Max Zoom Speed',
'MaxZoomStep' => 'Max Zoom Step',
'Medium' => '中',
'MediumBW' => '中帯域',
'MinAlarmAreaLtMax' => 'Minimum alarm area should be less than maximum',
'MinAlarmAreaUnset' => 'You must specify the minimum alarm pixel count',
'MinBlobAreaLtMax' => '最低ブロッブ範囲は最高値より以下でなければいけない',
'MinBlobAreaUnset' => 'You must specify the minimum blob pixel count',
'MinBlobLtMinFilter' => 'Minimum blob area should be less than or equal to minimum filter area',
'MinBlobsLtMax' => '最低ブロッブ数は最高数より以下でなければいけない',
'MinBlobsUnset' => 'You must specify the minimum blob count',
'MinFilterAreaLtMax' => 'Minimum filter area should be less than maximum',
'MinFilterAreaUnset' => 'You must specify the minimum filter pixel count',
'MinFilterLtMinAlarm' => 'Minimum filter area should be less than or equal to minimum alarm area',
'MinFocusRange' => 'Min Focus Range',
'MinFocusSpeed' => 'Min Focus Speed',
'MinFocusStep' => 'Min Focus Step',
'MinGainRange' => 'Min Gain Range',
'MinGainSpeed' => 'Min Gain Speed',
'MinGainStep' => 'Min Gain Step',
'MinIrisRange' => 'Min Iris Range',
'MinIrisSpeed' => 'Min Iris Speed',
'MinIrisStep' => 'Min Iris Step',
'MinPanRange' => 'Min Pan Range',
'MinPanSpeed' => 'Min Pan Speed',
'MinPanStep' => 'Min Pan Step',
'MinPixelThresLtMax' => '最低ピクセル閾値は最高値より以下でなければいけない',
'MinPixelThresUnset' => 'You must specify a minimum pixel threshold',
'MinTiltRange' => 'Min Tilt Range',
'MinTiltSpeed' => 'Min Tilt Speed',
'MinTiltStep' => 'Min Tilt Step',
'MinWhiteRange' => 'Min White Bal. Range',
'MinWhiteSpeed' => 'Min White Bal. Speed',
'MinWhiteStep' => 'Min White Bal. Step',
'MinZoomRange' => 'Min Zoom Range',
'MinZoomSpeed' => 'Min Zoom Speed',
'MinZoomStep' => 'Min Zoom Step',
'Misc' => 'その他',
'Monitor' => 'モニター',
'MonitorIds' => 'モニター ID',
'MonitorPresetIntro' => 'Select an appropriate preset from the list below.<br><br>Please note that this may overwrite any values you already have configured for this monitor.<br><br>',
'MonitorPreset' => 'Monitor Preset',
'Monitors' => 'モニター',
'Montage' => 'モンタージュ',
'Month' => '月',
'Move' => 'Move',
'MustBeGe' => '同等か以上でなければいけない',
'MustBeLe' => '同等か以下でなければいけない',
'MustConfirmPassword' => 'パスワードの確認をしてください',
'MustSupplyPassword' => 'パスワードを入力してください',
'MustSupplyUsername' => 'ユーザ名を入力してください',
'Name' => '名前',
'Near' => 'Near',
'Network' => 'ネットワーク',
'NewGroup' => 'New Group',
'NewLabel' => 'New Label',
'NewPassword' => '新しいパスワード',
'NewState' => '新規状態',
'NewUser' => '新しいユーザ',
'New' => '新規',
'Next' => '次',
'No' => 'いいえ',
'NoFramesRecorded' => 'このイベントのフレームは登録されていません',
'NoGroup' => 'No Group',
'None' => 'ありません',
'NoneAvailable' => 'ありません',
'Normal' => '普通',
'NoSavedFilters' => '保存されたフィルターはありません',
'NoStatisticsRecorded' => 'このイベント/フレームの統計は登録されていません',
'Notes' => 'Notes',
'NumPresets' => 'Num Presets',
'Off' => 'Off',
'On' => 'On',
'Open' => 'Open',
'OpEq' => '同等',
'OpGtEq' => '同等か以上',
'OpGt' => '以下',
'OpIn' => 'セットに入っている',
'OpLtEq' => '同等か以下',
'OpLt' => '以下',
'OpMatches' => '一致する',
'OpNe' => '同等でない',
'OpNotIn' => 'セットに入っていない',
'OpNotMatches' => '一致しない',
'OptionHelp' => 'オプション ヘルプ',
'OptionRestartWarning' => 'この変更は起動中反映されない場合があります。\n変更してからZoneMinderを再起動してください。',
'Options' => 'オプション',
'Order' => 'Order',
'OrEnterNewName' => '又は新しい名前を入力してください',
'Orientation' => 'オリオンテーション',
'Out' => 'Out',
'OverwriteExisting' => '上書きします',
'Paged' => 'ページ化',
'PanLeft' => 'Pan Left',
'Pan' => 'Pan',
'PanRight' => 'Pan Right',
'PanTilt' => 'Pan/Tilt',
'Parameter' => 'パラメータ',
'Password' => 'パスワード',
'PasswordsDifferent' => '新しいパスワードと再入力パスワードが一致しません',
'Paths' => 'パス',
'Pause' => 'Pause',
'PhoneBW' => '携帯用',
'Phone' => 'Phone',
'PixelDiff' => 'Pixel Diff',
'Pixels' => 'ピクセル',
'PlayAll' => 'Play All',
'Play' => 'Play',
'PleaseWait' => 'お待ちください',
'Point' => 'Point',
'PostEventImageBuffer' => 'イベント イメージ バッファ後',
'PreEventImageBuffer' => 'イベント イメージ バッファ前',
'PreserveAspect' => 'Preserve Aspect Ratio',
'Preset' => 'Preset',
'Presets' => 'Presets',
'Prev' => '前',
'Protocol' => 'Protocol',
'Rate' => 'レート',
'Real' => '生中継',
'Record' => '録画',
'RefImageBlendPct' => 'イメージ ブレンド 参照 %',
'Refresh' => '最新の情報に更新',
'RemoteHostName' => 'リモート ホスト 名',
'RemoteHostPath' => 'リモート ホスト パス',
'RemoteHostPort' => 'リモート ホスト ポート',
'RemoteImageColours' => 'リモート イメージ カラー',
'Remote' => 'リモート',
'Rename' => '新しい名前をつける',
'ReplayAll' => 'All Events',
'Replay' => '再生',
'ReplayGapless' => 'Gapless Events',
'Replay' => 'Replay',
'ReplaySingle' => 'Single Event',
'ResetEventCounts' => 'イベント カウント リセット',
'Reset' => 'Reset',
'Restart' => '再起動',
'Restarting' => '再起動中',
'RestrictedCameraIds' => '制限されたカメラ ID',
'RestrictedMonitors' => 'Restricted Monitors',
'ReturnDelay' => 'Return Delay',
'ReturnLocation' => 'Return Location',
'Rewind' => 'Rewind',
'RotateLeft' => '左に回転',
'RotateRight' => '右に回転',
'RunMode' => '起動モード',
'Running' => '起動中',
'RunState' => '起動状態',
'Save' => '保存',
'SaveAs' => '名前をつけて保存',
'SaveFilter' => 'フィルターを保存',
'Scale' => 'スケール',
'Score' => 'スコアー',
'Secs' => '秒',
'Sectionlength' => '長さ',
'SelectMonitors' => 'Select Monitors',
'Select' => 'Select',
'SelfIntersecting' => 'Polygon edges must not intersect',
'SetLearnPrefs' => 'Set Learn Prefs', // 新しい設定の自動保存 This can be ignored for now
'SetNewBandwidth' => '新しい帯域幅の設定',
'SetPreset' => 'Set Preset',
'Set' => 'Set',
'Settings' => '設定',
'ShowFilterWindow' => 'フィルター ウインドーの表示',
'ShowTimeline' => 'Show Timeline',
'SignalCheckColour' => 'Signal Check Colour',
'Size' => 'Size',
'Sleep' => 'Sleep',
'SortAsc' => 'Asc',
'SortBy' => 'Sort by',
'SortDesc' => 'Desc',
'Source' => 'ソース',
'SourceType' => 'ソース タイプ',
'SpeedHigh' => 'High Speed',
'SpeedLow' => 'Low Speed',
'SpeedMedium' => 'Medium Speed',
'Speed' => 'Speed',
'SpeedTurbo' => 'Turbo Speed',
'Start' => 'スタート',
'State' => '状態',
'Stats' => '統計',
'Status' => '状態',
'StepBack' => 'Step Back',
'StepForward' => 'Step Forward',
'StepLarge' => 'Large Step',
'StepMedium' => 'Medium Step',
'StepNone' => 'No Step',
'StepSmall' => 'Small Step',
'Step' => 'Step',
'Stills' => 'スチール画像',
'Stop' => '停止',
'Stopped' => '停止状態',
'StreamReplayBuffer' => 'Stream Replay Image Buffer',
'Stream' => 'ストリーム',
'Submit' => 'Submit',
'System' => 'システム',
'Tele' => 'Tele',
'Thumbnail' => 'Thumbnail',
'Tilt' => 'Tilt',
'Time' => '時間',
'TimeDelta' => 'デルタ タイム',
'Timeline' => 'Timeline',
'Timestamp' => 'タイムスタンプ',
'TimeStamp' => 'タイム スタンプ',
'TimestampLabelFormat' => 'タイムスタンプ ラベル フォーマット',
'TimestampLabelX' => 'タイムスタンプ ラベル X',
'TimestampLabelY' => 'タイムスタンプ ラベル Y',
'Today' => 'Today',
'Tools' => 'ツール',
'TotalBrScore' => '合計<br/>スコアー',
'TrackDelay' => 'Track Delay',
'TrackMotion' => 'Track Motion',
'Triggers' => 'トリガー',
'TurboPanSpeed' => 'Turbo Pan Speed',
'TurboTiltSpeed' => 'Turbo Tilt Speed',
'Type' => 'タイプ',
'Unarchive' => '解凍',
'Units' => 'ユニット',
'Unknown' => '不明',
'UpdateAvailable' => 'ZoneMinderのアップデートがあります',
'UpdateNotNecessary' => 'アップデートの必要はありません',
'Update' => 'Update',
'UseFilterExprsPost' => '&nbsp;フィルター個数', // This is used at the end of the phrase 'use N filter expressions'
'UseFilterExprsPre' => '指定してください:&nbsp;', // This is used at the beginning of the phrase 'use N filter expressions'
'UseFilter' => 'フィルターを使用してください',
'Username' => 'ユーザ名',
'Users' => 'ユーザ',
'User' => 'ユーザ',
'Value' => '数値',
'Version' => 'バージョン',
'VersionIgnore' => 'このバージョンを無視',
'VersionRemindDay' => '1日後に再度知らせる',
'VersionRemindHour' => '1時間後に再度知らせる',
'VersionRemindNever' => '新しいバージョンの知らせは必要ない',
'VersionRemindWeek' => '1週間後に再度知らせる',
'Video' => 'ビデオ',
'VideoFormat' => 'Video Format',
'VideoGenFailed' => 'ビデオ生成の失敗!',
'VideoGenFiles' => 'Existing Video Files',
'VideoGenNoFiles' => 'No Video Files Found',
'VideoGenParms' => 'ビデオ生成 パラメータ',
'VideoGenSucceeded' => 'Video Generation Succeeded!',
'VideoSize' => 'ビデオ サイズ',
'View' => '表示',
'ViewAll' => '全部表示',
'ViewEvent' => 'View Event',
'ViewPaged' => 'ページ化の表示',
'Wake' => 'Wake',
'WarmupFrames' => 'ウォームアップ フレーム',
'Watch' => '監視',
'Web' => 'ウェブ',
'WebColour' => 'Web Colour',
'Week' => '週',
'WhiteBalance' => 'White Balance',
'White' => 'White',
'Wide' => 'Wide',
'X10ActivationString' => 'X10起動文字列',
'X10InputAlarmString' => 'X10入力アラーム文字列',
'X10OutputAlarmString' => 'X10出力アラーム文字列',
'X10' => 'X10',
'X' => 'X',
'Yes' => 'はい',
'YouNoPerms' => 'この資源のアクセス権がありません。',
'Y' => 'Y',
'Zone' => 'ゾーン',
'ZoneAlarmColour' => 'アラーム カラー (Red/Green/Blue)',
'ZoneArea' => 'Zone Area',
'ZoneFilterSize' => 'Filter Width/Height (pixels)',
'ZoneMinMaxAlarmArea' => 'Min/Max Alarmed Area',
'ZoneMinMaxBlobArea' => 'Min/Max Blob Area',
'ZoneMinMaxBlobs' => 'Min/Max Blobs',
'ZoneMinMaxFiltArea' => 'Min/Max Filtered Area',
'ZoneMinMaxPixelThres' => 'Min/Max Pixel Threshold (0-255)',
'ZoneOverloadFrames' => 'Overload Frame Ignore Count',
'Zones' => 'ゾーン',
'ZoomIn' => 'Zoom In',
'ZoomOut' => 'Zoom Out',
'Zoom' => 'Zoom',
);
// Complex replacements with formatting and/or placements, must be passed through sprintf
$CLANG = array(
'CurrentLogin' => 'ただ今\'%1$s\がログインしています',
'EventCount' => '%1$s %2$s',
'LastEvents' => '最終 %1$s %2$s',
'LatestRelease' => '最新バージョンは v%1$s、ご利用バージョンはv%2$s.',
'MonitorCount' => '%1$s %2$s',
'MonitorFunction' => 'モニター%1$s 機能\',
'RunningRecentVer' => 'あなたはZoneMinderの最新バージョン v%s.を使っています',
);
// The next section allows you to describe a series of word ending and counts used to
// generate the correctly conjugated forms of words depending on a count that is associated
// with that word.
// This intended to allow phrases such a '0 potatoes', '1 potato', '2 potatoes' etc to
// conjugate correctly with the associated count.
// In some languages such as English this is fairly simple and can be expressed by assigning
// a count with a singular or plural form of a word and then finding the nearest (lower) value.
// So '0' of something generally ends in 's', 1 of something is singular and has no extra
// ending and 2 or more is a plural and ends in 's' also. So to find the ending for '187' of
// something you would find the nearest lower count (2) and use that ending.
//
// So examples of this would be
// $zmVlangPotato = array( 0=>'Potatoes', 1=>'Potato', 2=>'Potatoes' );
// $zmVlangSheep = array( 0=>'Sheep' );
//
// where you can have as few or as many entries in the array as necessary
// If your language is similar in form to this then use the same format and choose the
// appropriate zmVlang function below.
// If however you have a language with a different format of plural endings then another
// approach is required . For instance in Russian the word endings change continuously
// depending on the last digit (or digits) of the numerator. In this case then zmVlang
// arrays could be written so that the array index just represents an arbitrary 'type'
// and the zmVlang function does the calculation about which version is appropriate.
//
// So an example in Russian might be (using English words, and made up endings as I
// don't know any Russian!!)
// $zmVlangPotato = array( 1=>'Potati', 2=>'Potaton', 3=>'Potaten' );
//
// and the zmVlang function decides that the first form is used for counts ending in
// 0, 5-9 or 11-19 and the second form when ending in 1 etc.
//
// Variable arrays expressing plurality, see the zmVlang description above
$VLANG = array(
'Event' => array( 0=>'イベント', 1=>'イベント', 2=>'イベント' ),
'Monitor' => array( 0=>'モニター', 1=>'モニター', 2=>'モニター' ),
);
// You will need to choose or write a function that can correlate the plurality string arrays
// with variable counts. This is used to conjugate the Vlang arrays above with a number passed
// in to generate the correct noun form.
//
// In languages such as English this is fairly simple
// Note this still has to be used with printf etc to get the right formating
function zmVlang( $langVarArray, $count )
{
krsort( $langVarArray );
foreach ( $langVarArray as $key=>$value )
{
if ( abs($count) >= $key )
{
return( $value );
}
}
die( 'Error, unable to correlate variable language string' );
}
// This is an version that could be used in the Russian example above
// The rules are that the first word form is used if the count ends in
// 0, 5-9 or 11-19. The second form is used then the count ends in 1
// (not including 11 as above) and the third form is used when the
// count ends in 2-4, again excluding any values ending in 12-14.
//
// function zmVlang( $langVarArray, $count )
// {
// $secondlastdigit = substr( $count, -2, 1 );
// $lastdigit = substr( $count, -1, 1 );
// // or
// // $secondlastdigit = ($count/10)%10;
// // $lastdigit = $count%10;
//
// // Get rid of the special cases first, the teens
// if ( $secondlastdigit == 1 && $lastdigit != 0 )
// {
// return( $langVarArray[1] );
// }
// switch ( $lastdigit )
// {
// case 0 :
// case 5 :
// case 6 :
// case 7 :
// case 8 :
// case 9 :
// {
// return( $langVarArray[1] );
// break;
// }
// case 1 :
// {
// return( $langVarArray[2] );
// break;
// }
// case 2 :
// case 3 :
// case 4 :
// {
// return( $langVarArray[3] );
// break;
// }
// }
// die( 'Error, unable to correlate variable language string' );
// }
// This is an example of how the function is used in the code which you can uncomment and
// use to test your custom function.
//$monitors = array();
//$monitors[] = 1; // Choose any number
//echo sprintf( $zmClangMonitorCount, count($monitors), zmVlang( $zmVlangMonitor, count($monitors) ) );
// In this section you can override the default prompt and help texts for the options area
// These overrides are in the form show below where the array key represents the option name minus the initial ZM_
// So for example, to override the help text for ZM_LANG_DEFAULT do
$OLANG = array(
// 'LANG_DEFAULT' => array(
// 'Prompt' => "This is a new prompt for this option",
// 'Help' => "This is some new help for this option which will be displayed in the popup window when the ? is clicked"
// ),
);
?>

803
web/lang/nl_nl.php Normal file
View File

@ -0,0 +1,803 @@
<?php
//
// ZoneMinder web Dutch language file, $Date$, $Revision$
// Copyright (C) 2003, 2004, 2005, 2006 Philip Coombes
//
// This program 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 program 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
//
// ZoneMinder Dutch Translation by Koen Veen
// Notes for Translators
// 0. Get some credit, put your name in the line above (optional)
// 1. When composing the language tokens in your language you should try and keep to roughly the
// same length text if possible. Abbreviate where necessary as spacing is quite close in a number of places.
// 2. There are four types of string replacement
// a) Simple replacements are words or short phrases that are static and used directly. This type of
// replacement can be used 'as is'.
// b) Complex replacements involve some dynamic element being included and so may require substitution
// or changing into a different order. The token listed in this file will be passed through sprintf as
// a formatting string. If the dynamic element is a number you will usually need to use a variable
// replacement also as described below.
// c) Variable replacements are used in conjunction with complex replacements and involve the generation
// of a singular or plural noun depending on the number passed into the zmVlang function. See the
// the zmVlang section below for a further description of this.
// d) Optional strings which can be used to replace the prompts and/or help text for the Options section
// of the web interface. These are not listed below as they are quite large and held in the database
// so that they can also be used by the zmconfig.pl script. However you can build up your own list
// quite easily from the Config table in the database if necessary.
// 3. The tokens listed below are not used to build up phrases or sentences from single words. Therefore
// you can safely assume that a single word token will only be used in that context.
// 4. In new language files, or if you are changing only a few words or phrases it makes sense from a
// maintenance point of view to include the original language file and override the old definitions rather
// than copy all the language tokens across. To do this change the line below to whatever your base language
// is and uncomment it.
// require_once( 'zm_lang_en_gb.php' );
// You may need to change the character set here, if your web server does not already
// do this by default, uncomment this if required.
//
// Example
// header( "Content-Type: text/html; charset=iso-8859-1" );
// You may need to change your locale here if your default one is incorrect for the
// language described in this file, or if you have multiple languages supported.
// If you do need to change your locale, be aware that the format of this function
// is subtlely different in versions of PHP before and after 4.3.0, see
// http://uk2.php.net/manual/en/function.setlocale.php for details.
// Also be aware that changing the whole locale may affect some floating point or decimal
// arithmetic in the database, if this is the case change only the individual locale areas
// that don't affect this rather than all at once. See the examples below.
// Finally, depending on your setup, PHP may not enjoy have multiple locales in a shared
// threaded environment, if you get funny errors it may be this.
//
// Examples
// setlocale( 'LC_ALL', 'en_GB' ); All locale settings pre-4.3.0
// setlocale( LC_ALL, 'en_GB' ); All locale settings 4.3.0 and after
// setlocale( LC_CTYPE, 'en_GB' ); Character class settings 4.3.0 and after
// setlocale( LC_TIME, 'en_GB' ); Date and time formatting 4.3.0 and after
// Simple String Replacements
$SLANG = array(
'24BitColour' => '24 bit kleuren',
'8BitGrey' => '8 bit grijstinten',
'Action' => 'Action',
'Actual' => 'Aktueel',
'AddNewControl' => 'Add New Control',
'AddNewMonitor' => 'Voeg een nieuwe monitor toe',
'AddNewUser' => 'Voeg een nieuwe gebruiker toe',
'AddNewZone' => 'Voeg een nieuwe zone toe',
'Alarm' => 'Alarm',
'AlarmBrFrames' => 'Alarm<br/>Frames',
'AlarmFrame' => 'Alarm Frame',
'AlarmFrameCount' => 'Alarm Frame Count',
'AlarmLimits' => 'Alarm Limieten',
'AlarmMaximumFPS' => 'Alarm Maximum FPS',
'AlarmPx' => 'Alarm Px',
'AlarmRGBUnset' => 'You must set an alarm RGB colour',
'Alert' => 'Waarschuwing',
'All' => 'Alle',
'ApplyingStateChange' => 'Status verandering aan het uitvoeren',
'Apply' => 'Voer uit',
'ArchArchived' => 'Alleen gearchiveerd',
'Archive' => 'Archief',
'Archived' => 'Archived',
'ArchUnarchived' => 'Alleen ongearchiveerd',
'Area' => 'Area',
'AreaUnits' => 'Area (px/%)',
'AttrAlarmFrames' => 'Alarm frames',
'AttrArchiveStatus' => 'Archief status',
'AttrAvgScore' => 'Gem. score',
'AttrCause' => 'Cause',
'AttrDate' => 'Datum',
'AttrDateTime' => 'Datum/tijd',
'AttrDiskBlocks' => 'Disk Blocks',
'AttrDiskPercent' => 'Disk Percent',
'AttrDuration' => 'Duur',
'AttrFrames' => 'Frames',
'AttrId' => 'Id',
'AttrMaxScore' => 'Max. Score',
'AttrMonitorId' => 'Monitor Id',
'AttrMonitorName' => 'Monitor Naam',
'AttrMontage' => 'Montage',
'AttrName' => 'Name',
'AttrNotes' => 'Notes',
'AttrSystemLoad' => 'System Load',
'AttrTime' => 'Tijd',
'AttrTotalScore' => 'Totale Score',
'AttrWeekday' => 'Weekdag',
'Auto' => 'Auto',
'AutoStopTimeout' => 'Auto Stop Timeout',
'AvgBrScore' => 'Gem.<br/>score',
'Background' => 'Background',
'BackgroundFilter' => 'Run filter in background',
'BadAlarmFrameCount' => 'Alarm frame count must be an integer of one or more',
'BadAlarmMaxFPS' => 'Alarm Maximum FPS must be a positive integer or floating point value',
'BadChannel' => 'Channel must be set to an integer of zero or more',
'BadDevice' => 'Device must be set to a valid value',
'BadFormat' => 'Format must be set to an integer of zero or more',
'BadFPSReportInterval' => 'FPS report interval buffer count must be an integer of 100 or more',
'BadFrameSkip' => 'Frame skip count must be an integer of zero or more',
'BadHeight' => 'Height must be set to a valid value',
'BadHost' => 'Host must be set to a valid ip address or hostname, do not include http://',
'BadImageBufferCount' => 'Image buffer size must be an integer of 10 or more',
'BadLabelX' => 'Label X co-ordinate must be set to an integer of zero or more',
'BadLabelY' => 'Label Y co-ordinate must be set to an integer of zero or more',
'BadMaxFPS' => 'Maximum FPS must be a positive integer or floating point value',
'BadNameChars' => 'Namen mogen alleen alpha numerieke karakters bevatten plus hyphens en underscores',
'BadPath' => 'Path must be set to a valid value',
'BadPort' => 'Port must be set to a valid number',
'BadPostEventCount' => 'Post event image count must be an integer of zero or more',
'BadPreEventCount' => 'Pre event image count must be at least zero, and less than image buffer size',
'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',
'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',
'BadWidth' => 'Width must be set to a valid value',
'Bandwidth' => 'Bandbreedte',
'BlobPx' => 'Blob px',
'Blobs' => 'Blobs',
'BlobSizes' => 'Blob grootte',
'Brightness' => 'Helderheid',
'Buffers' => 'Buffers',
'CanAutoFocus' => 'Can Auto Focus',
'CanAutoGain' => 'Can Auto Gain',
'CanAutoIris' => 'Can Auto Iris',
'CanAutoWhite' => 'Can Auto White Bal.',
'CanAutoZoom' => 'Can Auto Zoom',
'Cancel' => 'Cancel',
'CancelForcedAlarm' => 'Cancel geforceerd alarm',
'CanFocusAbs' => 'Can Focus Absolute',
'CanFocus' => 'Can Focus',
'CanFocusCon' => 'Can Focus Continuous',
'CanFocusRel' => 'Can Focus Relative',
'CanGainAbs' => 'Can Gain Absolute',
'CanGain' => 'Can Gain ',
'CanGainCon' => 'Can Gain Continuous',
'CanGainRel' => 'Can Gain Relative',
'CanIrisAbs' => 'Can Iris Absolute',
'CanIris' => 'Can Iris',
'CanIrisCon' => 'Can Iris Continuous',
'CanIrisRel' => 'Can Iris Relative',
'CanMoveAbs' => 'Can Move Absolute',
'CanMove' => 'Can Move',
'CanMoveCon' => 'Can Move Continuous',
'CanMoveDiag' => 'Can Move Diagonally',
'CanMoveMap' => 'Can Move Mapped',
'CanMoveRel' => 'Can Move Relative',
'CanPan' => 'Can Pan' ,
'CanReset' => 'Can Reset',
'CanSetPresets' => 'Can Set Presets',
'CanSleep' => 'Can Sleep',
'CanTilt' => 'Can Tilt',
'CanWake' => 'Can Wake',
'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',
'CanZoomCon' => 'Can Zoom Continuous',
'CanZoomRel' => 'Can Zoom Relative',
'CaptureHeight' => 'Capture hoogte',
'CapturePalette' => 'Capture pallet',
'CaptureWidth' => 'Capture breedte',
'Cause' => 'Cause',
'CheckMethod' => 'Alarm Check Methode',
'ChooseFilter' => 'Kies filter',
'ChoosePreset' => 'Choose Preset',
'Close' => 'Sluit',
'Colour' => 'Kleur',
'Command' => 'Command',
'Config' => 'Config',
'ConfiguredFor' => 'Geconfigureerd voor',
'ConfirmDeleteEvents' => 'Are you sure you wish to delete the selected events?',
'ConfirmPassword' => 'Bevestig wachtwoord',
'ConjAnd' => 'en',
'ConjOr' => 'of',
'Console' => 'Console',
'ContactAdmin' => 'Neem A.U.B. contact op met je beheerder voor details.',
'Continue' => 'Continue',
'Contrast' => 'Contrast',
'ControlAddress' => 'Control Address',
'ControlCap' => 'Control Capability',
'ControlCaps' => 'Control Capabilities',
'Control' => 'Control',
'ControlDevice' => 'Control Device',
'Controllable' => 'Controllable',
'ControlType' => 'Control Type',
'Cycle' => 'Cycle',
'CycleWatch' => 'Observeer cyclus',
'Day' => 'Dag',
'Debug' => 'Debug',
'DefaultRate' => 'Default Rate',
'DefaultScale' => 'Default Scale',
'DefaultView' => 'Default View',
'DeleteAndNext' => 'verwijder &amp; volgende',
'DeleteAndPrev' => 'verwijder &amp; vorige',
'DeleteSavedFilter' => 'verwijder opgeslagen filter',
'Delete' => 'verwijder',
'Description' => 'Omschrijving',
'DeviceChannel' => 'Apparaat kanaal',
'DeviceFormat' => 'Apparaat formaat',
'DeviceNumber' => 'apparaat nummer',
'DevicePath' => 'Device Path',
'Devices' => 'Devices',
'Dimensions' => 'Afmetingen',
'DisableAlarms' => 'Disable Alarms',
'Disk' => 'Disk',
'DonateAlready' => 'No, I\'ve already donated',
'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' => 'Please Donate',
'DonateRemindDay' => 'Not yet, remind again in 1 day',
'DonateRemindHour' => 'Not yet, remind again in 1 hour',
'DonateRemindMonth' => 'Not yet, remind again in 1 month',
'DonateRemindNever' => 'No, I don\'t want to donate, never remind',
'DonateRemindWeek' => 'Not yet, remind again in 1 week',
'DonateYes' => 'Yes, I\'d like to donate now',
'Download' => 'Download',
'Duration' => 'Duur',
'Edit' => 'Bewerk',
'Email' => 'Email',
'EnableAlarms' => 'Enable Alarms',
'Enabled' => 'Uitgeschakeld',
'EnterNewFilterName' => 'Voer nieuwe filter naam in',
'ErrorBrackets' => 'Error, controleer of je even veel openings als afsluiting brackets hebt gebruikt',
'Error' => 'Error',
'ErrorValidValue' => 'Error, Controleer of alle termen een geldige waarde hebben',
'Etc' => 'etc',
'EventFilter' => 'Gebeurtenis filter',
'Event' => 'Gebeurtenis',
'EventId' => 'Event Id',
'EventName' => 'Event Name',
'EventPrefix' => 'Event Prefix',
'Events' => 'Gebeurtenissen',
'Exclude' => 'Sluit uit',
'Execute' => 'Execute',
'ExportDetails' => 'Export Event Details',
'Export' => 'Export',
'ExportFailed' => 'Export Failed',
'ExportFormat' => 'Export File Format',
'ExportFormatTar' => 'Tar',
'ExportFormatZip' => 'Zip',
'ExportFrames' => 'Export Frame Details',
'ExportImageFiles' => 'Export Image Files',
'Exporting' => 'Exporting',
'ExportMiscFiles' => 'Export Other Files (if present)',
'ExportOptions' => 'Export Options',
'ExportVideoFiles' => 'Export Video Files (if present)',
'Far' => 'Far',
'FastForward' => 'Fast Forward',
'Feed' => 'toevoer',
'FileColours' => 'File Colours',
'File' => 'File',
'FilePath' => 'File Path',
'FilterArchiveEvents' => 'Archiveer alle overeenkomsten',
'FilterDeleteEvents' => 'Verwijder alle overeenkomsten',
'FilterEmailEvents' => 'Email de details van alle overeenkomsten',
'FilterExecuteEvents' => 'Voer opdrachten op alle overeenkomsten uit',
'FilterMessageEvents' => 'Bericht de details van alle overeenkomsten',
'FilterPx' => 'Filter px',
'Filters' => 'Filters',
'FilterUnset' => 'You must specify a filter width and height',
'FilterUploadEvents' => 'Upload alle overeenkomsten',
'FilterVideoEvents' => 'Create video for all matches',
'First' => 'Eerste',
'FlippedHori' => 'Flipped Horizontally',
'FlippedVert' => 'Flipped Vertically',
'Focus' => 'Focus',
'ForceAlarm' => 'Forceeer alarm',
'Format' => 'Format',
'FPS' => 'fps',
'FPSReportInterval' => 'FPS rapport interval',
'Frame' => 'Frame',
'FrameId' => 'Frame id',
'FrameRate' => 'Frame rate',
'Frames' => 'Frames',
'FrameSkip' => 'Frame overgeslagen',
'FTP' => 'FTP',
'Func' => 'Func',
'Function' => 'Functie',
'Gain' => 'Gain',
'General' => 'General',
'GenerateVideo' => 'Genereer Video',
'GeneratingVideo' => 'Genereren Video',
'GoToZoneMinder' => 'ga naar ZoneMinder.com',
'Grey' => 'Grijs',
'Group' => 'Group',
'Groups' => 'Groups',
'HasFocusSpeed' => 'Has Focus Speed',
'HasGainSpeed' => 'Has Gain Speed',
'HasHomePreset' => 'Has Home Preset',
'HasIrisSpeed' => 'Has Iris Speed',
'HasPanSpeed' => 'Has Pan Speed',
'HasPresets' => 'Has Presets',
'HasTiltSpeed' => 'Has Tilt Speed',
'HasTurboPan' => 'Has Turbo Pan',
'HasTurboTilt' => 'Has Turbo Tilt',
'HasWhiteSpeed' => 'Has White Bal. Speed',
'HasZoomSpeed' => 'Has Zoom Speed',
'HighBW' => 'Hoog&nbsp;B/W',
'High' => 'Hoog',
'Home' => 'Home',
'Hour' => 'Uur',
'Hue' => 'Hue',
'Id' => 'Id',
'Idle' => 'Ongebruikt',
'Ignore' => 'Negeer',
'ImageBufferSize' => 'Image buffer grootte (frames)',
'Image' => 'Image',
'Images' => 'Images',
'Include' => 'voeg in',
'In' => 'In',
'Inverted' => 'omgedraaid',
'Iris' => 'Iris',
'KeyString' => 'Key String',
'Label' => 'Label',
'Language' => 'Taal',
'Last' => 'Laatste',
'LimitResultsPost' => 'resultaten;', // This is used at the end of the phrase 'Limit to first N results only'
'LimitResultsPre' => 'beperk tot eerste', // This is used at the beginning of the phrase 'Limit to first N results only'
'LinkedMonitors' => 'Linked Monitors',
'List' => 'List',
'Load' => 'Load',
'Local' => 'Lokaal',
'LoggedInAs' => 'Ingelogd als',
'LoggingIn' => 'In loggen',
'Login' => 'Login',
'Logout' => 'Logout',
'LowBW' => 'Laag&nbsp;B/W',
'Low' => 'Laag',
'Main' => 'Main',
'Man' => 'Man',
'Manual' => 'Manual',
'Mark' => 'Markeer',
'MaxBandwidth' => 'Max Bandwidth',
'MaxBrScore' => 'Max.<br/>score',
'MaxFocusRange' => 'Max Focus Range',
'MaxFocusSpeed' => 'Max Focus Speed',
'MaxFocusStep' => 'Max Focus Step',
'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',
'MaxTiltRange' => 'Max Tilt Range',
'MaxTiltSpeed' => 'Max Tilt Speed',
'MaxTiltStep' => 'Max Tilt Step',
'MaxWhiteRange' => 'Max White Bal. Range',
'MaxWhiteSpeed' => 'Max White Bal. Speed',
'MaxWhiteStep' => 'Max White Bal. Step',
'MaxZoomRange' => 'Max Zoom Range',
'MaxZoomSpeed' => 'Max Zoom Speed',
'MaxZoomStep' => 'Max Zoom Step',
'MediumBW' => 'Medium&nbsp;B/W',
'Medium' => 'Medium',
'MinAlarmAreaLtMax' => 'Minimum alarm area should be less than maximum',
'MinAlarmAreaUnset' => 'You must specify the minimum alarm pixel count',
'MinBlobAreaLtMax' => 'minimum blob gebied moet kleiner zijn dan maximum blob gebied',
'MinBlobAreaUnset' => 'You must specify the minimum blob pixel count',
'MinBlobLtMinFilter' => 'Minimum blob area should be less than or equal to minimum filter area',
'MinBlobsLtMax' => 'minimum blobs moet kleiner zijn dan maximum blobs',
'MinBlobsUnset' => 'You must specify the minimum blob count',
'MinFilterAreaLtMax' => 'Minimum filter area should be less than maximum',
'MinFilterAreaUnset' => 'You must specify the minimum filter pixel count',
'MinFilterLtMinAlarm' => 'Minimum filter area should be less than or equal to minimum alarm area',
'MinFocusRange' => 'Min Focus Range',
'MinFocusSpeed' => 'Min Focus Speed',
'MinFocusStep' => 'Min Focus Step',
'MinGainRange' => 'Min Gain Range',
'MinGainSpeed' => 'Min Gain Speed',
'MinGainStep' => 'Min Gain Step',
'MinIrisRange' => 'Min Iris Range',
'MinIrisSpeed' => 'Min Iris Speed',
'MinIrisStep' => 'Min Iris Step',
'MinPanRange' => 'Min Pan Range',
'MinPanSpeed' => 'Min Pan Speed',
'MinPanStep' => 'Min Pan Step',
'MinPixelThresLtMax' => 'minimum pixel kleurdiepte moet kleiner zijn dan maximum pixel threshold',
'MinPixelThresUnset' => 'You must specify a minimum pixel threshold',
'MinTiltRange' => 'Min Tilt Range',
'MinTiltSpeed' => 'Min Tilt Speed',
'MinTiltStep' => 'Min Tilt Step',
'MinWhiteRange' => 'Min White Bal. Range',
'MinWhiteSpeed' => 'Min White Bal. Speed',
'MinWhiteStep' => 'Min White Bal. Step',
'MinZoomRange' => 'Min Zoom Range',
'MinZoomSpeed' => 'Min Zoom Speed',
'MinZoomStep' => 'Min Zoom Step',
'Misc' => 'Misc',
'MonitorIds' => 'Monitor&nbsp;Ids',
'Monitor' => 'Monitor',
'MonitorPresetIntro' => 'Select an appropriate preset from the list below.<br><br>Please note that this may overwrite any values you already have configured for this monitor.<br><br>',
'MonitorPreset' => 'Monitor Preset',
'Monitors' => 'Monitoren',
'Montage' => 'Montage',
'Month' => 'Maand',
'Move' => 'Move',
'MustBeGe' => 'Moet groter zijn of gelijk aan',
'MustBeLe' => 'Moet kleiner zijn of gelijk aan',
'MustConfirmPassword' => 'Je moet je wachtwoord bevestigen',
'MustSupplyPassword' => 'Je moet een wachtwoord geven',
'MustSupplyUsername' => 'Je moet een gebruikersnaam geven',
'Name' => 'Naam',
'Near' => 'Near',
'Network' => 'Netwerk',
'NewGroup' => 'New Group',
'NewLabel' => 'New Label',
'New' => 'Nieuw',
'NewPassword' => 'Nieuw Wachtwoord',
'NewState' => 'Nieuwe Status',
'NewUser' => 'Nieuwe gebruiker',
'Next' => 'Volgende',
'NoFramesRecorded' => 'Er zijn geen frames opgenomen voor deze gebeurtenis',
'NoGroup' => 'No Group',
'NoneAvailable' => 'geen beschikbaar',
'No' => 'Nee',
'None' => 'Geen',
'Normal' => 'Normaal',
'NoSavedFilters' => 'GeenOpgeslagenFilters',
'NoStatisticsRecorded' => 'er zijn geen statistieken opgenomen voor dit event/frame',
'Notes' => 'Notes',
'NumPresets' => 'Num Presets',
'Off' => 'Off',
'On' => 'On',
'Open' => 'Open',
'OpEq' => 'gelijk aan',
'OpGtEq' => 'groter dan of gelijk aan',
'OpGt' => 'groter dan',
'OpIn' => 'in set',
'OpLtEq' => 'kleiner dan of gelijk aan',
'OpLt' => 'kleiner dan',
'OpMatches' => 'Komt overeen',
'OpNe' => 'niet gelijk aan',
'OpNotIn' => 'niet in set',
'OpNotMatches' => 'Komt niet overeen',
'OptionHelp' => 'OptieHelp',
'OptionRestartWarning' => 'Deze veranderingen passen niet aan\nals het systeem loopt. Als je\nKlaar bent met veranderen vergeet dan niet dat\nje ZoneMinder herstart.',
'Options' => 'Opties',
'Order' => 'Order',
'OrEnterNewName' => 'of voer een nieuwe naam in',
'Orientation' => 'Orientatie',
'Out' => 'Out',
'OverwriteExisting' => 'Overschrijf bestaande',
'Paged' => 'Paged',
'PanLeft' => 'Pan Left',
'Pan' => 'Pan',
'PanRight' => 'Pan Right',
'PanTilt' => 'Pan/Tilt',
'Parameter' => 'Parameter',
'PasswordsDifferent' => 'Het nieuwe en bevestigde wachtwoord zijn verschillend',
'Password' => 'Wachtwoord',
'Paths' => 'Paden',
'Pause' => 'Pause',
'PhoneBW' => 'Telefoon&nbsp;B/W',
'Phone' => 'Phone',
'PixelDiff' => 'Pixel Diff',
'Pixels' => 'pixels',
'PlayAll' => 'Play All',
'Play' => 'Play',
'PleaseWait' => 'wacht A.U.B.',
'Point' => 'Point',
'PostEventImageBuffer' => 'Post gebeurtenis Image Buffer',
'PreEventImageBuffer' => 'Pre gebeurtenis Image Buffer',
'PreserveAspect' => 'Preserve Aspect Ratio',
'Preset' => 'Preset',
'Presets' => 'Presets',
'Prev' => 'vorige',
'Protocol' => 'Protocol',
'Rate' => 'Waardering',
'Real' => 'Echte',
'Record' => 'Record',
'RefImageBlendPct' => 'Referentie Image Blend %ge',
'Refresh' => 'Ververs',
'RemoteHostName' => 'Remote Host Naam',
'RemoteHostPath' => 'Remote Host Pad',
'RemoteHostPort' => 'Remote Host Poort',
'RemoteImageColours' => 'Remote Image kleuren',
'Remote' => 'Remote',
'Rename' => 'Hernoem',
'ReplayAll' => 'All Events',
'ReplayGapless' => 'Gapless Events',
'Replay' => 'Herhaal',
'Replay' => 'Replay',
'ReplaySingle' => 'Single Event',
'ResetEventCounts' => 'Reset gebeurtenis teller',
'Reset' => 'Reset',
'Restart' => 'herstart',
'Restarting' => 'herstarten',
'RestrictedCameraIds' => 'Verboden Camera Ids',
'RestrictedMonitors' => 'Restricted Monitors',
'ReturnDelay' => 'Return Delay',
'ReturnLocation' => 'Return Location',
'Rewind' => 'Rewind',
'RotateLeft' => 'Draai linksom',
'RotateRight' => 'Draai rechtsom',
'RunMode' => 'Run Mode',
'Running' => 'Running',
'RunState' => 'Run Status',
'SaveAs' => 'opslaan als',
'SaveFilter' => 'opslaan Filter',
'Save' => 'Opslaan',
'Scale' => 'Schaal',
'Score' => 'Score',
'Secs' => 'Secs',
'Sectionlength' => 'Sectie lengte',
'SelectMonitors' => 'Select Monitors',
'Select' => 'Select',
'SelfIntersecting' => 'Polygon edges must not intersect',
'SetLearnPrefs' => 'Set Learn Prefs', // This can be ignored for now
'SetNewBandwidth' => 'Zet Nieuwe Bandbreedte',
'SetPreset' => 'Set Preset',
'Set' => 'Set',
'Settings' => 'Instellingen',
'ShowFilterWindow' => 'ToonFilterWindow',
'ShowTimeline' => 'Show Timeline',
'SignalCheckColour' => 'Signal Check Colour',
'Size' => 'Size',
'Sleep' => 'Sleep',
'SortAsc' => 'Opl.',
'SortBy' => 'Sorteer op',
'SortDesc' => 'afl.',
'Source' => 'Bron',
'SourceType' => 'Bron Type',
'SpeedHigh' => 'High Speed',
'SpeedLow' => 'Low Speed',
'SpeedMedium' => 'Medium Speed',
'Speed' => 'Speed',
'SpeedTurbo' => 'Turbo Speed',
'Start' => 'Start',
'State' => 'Status',
'Stats' => 'Stats',
'Status' => 'Status',
'StepBack' => 'Step Back',
'StepForward' => 'Step Forward',
'StepLarge' => 'Large Step',
'StepMedium' => 'Medium Step',
'StepNone' => 'No Step',
'StepSmall' => 'Small Step',
'Step' => 'Step',
'Stills' => 'Plaatjes',
'Stopped' => 'gestopt',
'Stop' => 'Stop',
'StreamReplayBuffer' => 'Stream Replay Image Buffer',
'Stream' => 'Stroom',
'Submit' => 'Submit',
'System' => 'Systeem',
'Tele' => 'Tele',
'Thumbnail' => 'Thumbnail',
'Tilt' => 'Tilt',
'TimeDelta' => 'Tijd Delta',
'Timeline' => 'Timeline',
'TimestampLabelFormat' => 'Tijdstempel Label Format',
'TimestampLabelX' => 'Tijdstempel Label X',
'TimestampLabelY' => 'Tijdstempel Label Y',
'Timestamp' => 'Tijdstempel',
'TimeStamp' => 'Tijdstempel',
'Time' => 'Tijd',
'Today' => 'Today',
'Tools' => 'Gereedschappen',
'TotalBrScore' => 'Totaal<br/>Score',
'TrackDelay' => 'Track Delay',
'TrackMotion' => 'Track Motion',
'Triggers' => 'Triggers',
'TurboPanSpeed' => 'Turbo Pan Speed',
'TurboTiltSpeed' => 'Turbo Tilt Speed',
'Type' => 'Type',
'Unarchive' => 'Dearchiveer',
'Units' => 'Eenheden',
'Unknown' => 'Onbekend',
'UpdateAvailable' => 'een update voor ZoneMinder is beschikbaar',
'UpdateNotNecessary' => 'geen update noodzakelijk',
'Update' => 'Update',
'UseFilterExprsPost' => '&nbsp;filter&nbsp;expressies', // This is used at the end of the phrase 'use N filter expressions'
'UseFilterExprsPre' => 'Gebruik&nbsp;', // This is used at the beginning of the phrase 'use N filter expressions'
'UseFilter' => 'Gebruik Filter',
'User' => 'Gebruiker',
'Username' => 'Gebruikersnaam',
'Users' => 'Gebruikers',
'Value' => 'Waarde',
'VersionIgnore' => 'negeer deze versie',
'VersionRemindDay' => 'herinner me na 1 dag',
'VersionRemindHour' => 'herinner me na 1 uur',
'VersionRemindNever' => 'herinner me niet aan nieuwe versies',
'VersionRemindWeek' => 'herinner me na 1 week',
'Version' => 'Versie',
'VideoFormat' => 'Video Format',
'VideoGenFailed' => 'Video Generatie mislukt!',
'VideoGenFiles' => 'Existing Video Files',
'VideoGenNoFiles' => 'No Video Files Found',
'VideoGenParms' => 'Video Generatie Parameters',
'VideoGenSucceeded' => 'Video Generation Succeeded!',
'VideoSize' => 'Video grootte',
'Video' => 'Video',
'ViewAll' => 'Bekijk Alles',
'View' => 'Bekijk',
'ViewEvent' => 'View Event',
'ViewPaged' => 'Bekijk Paged',
'Wake' => 'Wake',
'WarmupFrames' => 'Warmup Frames',
'Watch' => 'Observeer',
'WebColour' => 'Web Colour',
'Web' => 'Web',
'Week' => 'Week',
'WhiteBalance' => 'White Balance',
'White' => 'White',
'Wide' => 'Wide',
'X10ActivationString' => 'X10 Activatie String',
'X10InputAlarmString' => 'X10 Input Alarm String',
'X10OutputAlarmString' => 'X10 Output Alarm String',
'X10' => 'X10',
'X' => 'X',
'Yes' => 'Ja',
'YouNoPerms' => 'Je hebt niet de rechten om toegang te krijgen tot deze bronnen.',
'Y' => 'Y',
'ZoneAlarmColour' => 'Alarm Kleur (Red/Green/Blue)',
'ZoneArea' => 'Zone Area',
'ZoneFilterSize' => 'Filter Width/Height (pixels)',
'ZoneMinMaxAlarmArea' => 'Min/Max Alarmed Area',
'ZoneMinMaxBlobArea' => 'Min/Max Blob Area',
'ZoneMinMaxBlobs' => 'Min/Max Blobs',
'ZoneMinMaxFiltArea' => 'Min/Max Filtered Area',
'ZoneMinMaxPixelThres' => 'Min/Max Pixel Threshold (0-255)',
'ZoneOverloadFrames' => 'Overload Frame Ignore Count',
'Zones' => 'Zones',
'Zone' => 'Zone',
'ZoomIn' => 'Zoom In',
'ZoomOut' => 'Zoom Out',
'Zoom' => 'Zoom',
);
// Complex replacements with formatting and/or placements, must be passed through sprintf
$CLANG = array(
'CurrentLogin' => 'huidige login is \'%1$s\'',
'EventCount' => '%1$s %2$s', // Als voorbeeld '37 gebeurtenissen' (from Vlang below)
'LastEvents' => 'Last %1$s %2$s', // Als voorbeeld 'Laatste 37 gebeurtenissen' (from Vlang below)
'LatestRelease' => 'de laatste release is v%1$s, jij hebt v%2$s.',
'MonitorCount' => '%1$s %2$s', // Als voorbeeld '4 Monitoren' (from Vlang below)
'MonitorFunction' => 'Monitor %1$s Functie',
'RunningRecentVer' => 'Je draait al met de laatste versie van ZoneMinder, v%s.',
);
// The next section allows you to describe a series of word ending and counts used to
// generate the correctly conjugated forms of words depending on a count that is associated
// with that word.
// This intended to allow phrases such a '0 potatoes', '1 potato', '2 potatoes' etc to
// conjugate correctly with the associated count.
// In some languages such as English this is fairly simple and can be expressed by assigning
// a count with a singular or plural form of a word and then finding the nearest (lower) value.
// So '0' of something generally ends in 's', 1 of something is singular and has no extra
// ending and 2 or more is a plural and ends in 's' also. So to find the ending for '187' of
// something you would find the nearest lower count (2) and use that ending.
//
// So examples of this would be
// $zmVlangPotato = array( 0=>'Potatoes', 1=>'Potato', 2=>'Potatoes' );
// $zmVlangSheep = array( 0=>'Sheep' );
//
// where you can have as few or as many entries in the array as necessary
// If your language is similar in form to this then use the same format and choose the
// appropriate zmVlang function below.
// If however you have a language with a different format of plural endings then another
// approach is required . For instance in Russian the word endings change continuously
// depending on the last digit (or digits) of the numerator. In this case then zmVlang
// arrays could be written so that the array index just represents an arbitrary 'type'
// and the zmVlang function does the calculation about which version is appropriate.
//
// So an example in Russian might be (using English words, and made up endings as I
// don't know any Russian!!)
// $zmVlangPotato = array( 1=>'Potati', 2=>'Potaton', 3=>'Potaten' );
//
// and the zmVlang function decides that the first form is used for counts ending in
// 0, 5-9 or 11-19 and the second form when ending in 1 etc.
//
// Variable arrays expressing plurality, see the zmVlang description above
$VLANG = array(
'Event' => array( 0=>'gebeurtenissen', 1=>'gebeurtenis', 2=>'gebeurtenissen' ),
'Monitor' => array( 0=>'Monitoren', 1=>'Monitor', 2=>'Monitoren' ),
);
// You will need to choose or write a function that can correlate the plurality string arrays
// with variable counts. This is used to conjugate the Vlang arrays above with a number passed
// in to generate the correct noun form.
//
// In languages such as English this is fairly simple
// Note this still has to be used with printf etc to get the right formating
function zmVlang( $langVarArray, $count )
{
krsort( $langVarArray );
foreach ( $langVarArray as $key=>$value )
{
if ( abs($count) >= $key )
{
return( $value );
}
}
die( 'Error, unable to correlate variable language string' );
}
// This is an version that could be used in the Russian example above
// The rules are that the first word form is used if the count ends in
// 0, 5-9 or 11-19. The second form is used then the count ends in 1
// (not including 11 as above) and the third form is used when the
// count ends in 2-4, again excluding any values ending in 12-14.
//
// function zmVlang( $langVarArray, $count )
// {
// $secondlastdigit = substr( $count, -2, 1 );
// $lastdigit = substr( $count, -1, 1 );
// // or
// // $secondlastdigit = ($count/10)%10;
// // $lastdigit = $count%10;
//
// // Get rid of the special cases first, the teens
// if ( $secondlastdigit == 1 && $lastdigit != 0 )
// {
// return( $langVarArray[1] );
// }
// switch ( $lastdigit )
// {
// case 0 :
// case 5 :
// case 6 :
// case 7 :
// case 8 :
// case 9 :
// {
// return( $langVarArray[1] );
// break;
// }
// case 1 :
// {
// return( $langVarArray[2] );
// break;
// }
// case 2 :
// case 3 :
// case 4 :
// {
// return( $langVarArray[3] );
// break;
// }
// }
// die( 'Error, unable to correlate variable language string' );
// }
// This is an example of how the function is used in the code which you can uncomment and
// use to test your custom function.
//$monitors = array();
//$monitors[] = 1; // Choose any number
//echo sprintf( $zmClangMonitorCount, count($monitors), zmVlang( $zmVlangMonitor, count($monitors) ) );
// In this section you can override the default prompt and help texts for the options area
// These overrides are in the form show below where the array key represents the option name minus the initial ZM_
// So for example, to override the help text for ZM_LANG_DEFAULT do
$OLANG = array(
// 'LANG_DEFAULT' => array(
// 'Prompt' => "This is a new prompt for this option",
// 'Help' => "This is some new help for this option which will be displayed in the popup window when the ? is clicked"
// ),
);
?>

782
web/lang/pl_pl.php Normal file
View File

@ -0,0 +1,782 @@
<?php
//
// ZoneMinder web Polish language file, $Date$, $Revision$
// Copyright (C) 2003, 2004, 2005, 2006 Philip Coombes
//
// This program 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 program 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
//
// ZoneMinder Polish Translation by Robert Krysztof
// Notes for Translators
// 0. Get some credit, put your name in the line above (optional)
// 1. When composing the language tokens in your language you should try and keep to roughly the
// same length text if possible. Abbreviate where necessary as spacing is quite close in a number of places.
// 2. There are four types of string replacement
// a) Simple replacements are words or short phrases that are static and used directly. This type of
// replacement can be used 'as is'.
// b) Complex replacements involve some dynamic element being included and so may require substitution
// or changing into a different order. The token listed in this file will be passed through sprintf as
// a formatting string. If the dynamic element is a number you will usually need to use a variable
// replacement also as described below.
// c) Variable replacements are used in conjunction with complex replacements and involve the generation
// of a singular or plural noun depending on the number passed into the zmVlang function. See the
// the zmVlang section below for a further description of this.
// d) Optional strings which can be used to replace the prompts and/or help text for the Options section
// of the web interface. These are not listed below as they are quite large and held in the database
// so that they can also be used by the zmconfig.pl script. However you can build up your own list
// quite easily from the Config table in the database if necessary.
// 3. The tokens listed below are not used to build up phrases or sentences from single words. Therefore
// you can safely assume that a single word token will only be used in that context.
// 4. In new language files, or if you are changing only a few words or phrases it makes sense from a
// maintenance point of view to include the original language file and override the old definitions rather
// than copy all the language tokens across. To do this change the line below to whatever your base language
// is and uncomment it.
// require_once( 'zm_lang_en_gb.php' );
// You may need to change the character set here, if your web server does not already
// do this by default, uncomment this if required.
//
// Example
header( "Content-Type: text/html; charset=iso-8859-2" );
// You may need to change your locale here if your default one is incorrect for the
// language described in this file, or if you have multiple languages supported.
// If you do need to change your locale, be aware that the format of this function
// is subtlely different in versions of PHP before and after 4.3.0, see
// http://uk2.php.net/manual/en/function.setlocale.php for details.
// Also be aware that changing the whole locale may affect some floating point or decimal
// arithmetic in the database, if this is the case change only the individual locale areas
// that don't affect this rather than all at once. See the examples below.
// Finally, depending on your setup, PHP may not enjoy have multiple locales in a shared
// threaded environment, if you get funny errors it may be this.
//
// Examples
// setlocale( 'LC_ALL', 'pl_PL' ); // All locale settings pre-4.3.0
setlocale( LC_ALL, 'pl_PL' ); // All locale settings 4.3.0 and after
// setlocale( LC_CTYPE, 'pl_PL' ); // Character class settings 4.3.0 and after
// setlocale( LC_TIME, 'pl_PL' ); // Date and time formatting 4.3.0 and after
// Simple String Replacements
$SLANG = array(
'24BitColour' => 'Kolor (24 bity)',
'8BitGrey' => 'Cz/b (8 bitów)',
'Action' => 'Action',
'Actual' => 'Aktualny',
'AddNewControl' => 'Add New Control',
'AddNewMonitor' => 'Dodaj nowy monitor',
'AddNewUser' => 'Dodaj u¿ytkownika',
'AddNewZone' => 'Dodaj now± strefê',
'Alarm' => 'Alarm',
'AlarmBrFrames' => 'Ramki<br/>alarmowe',
'AlarmFrameCount' => 'Alarm Frame Count',
'AlarmFrame' => 'Ramka alarmowa',
'AlarmLimits' => 'Ograniczenia alarmu',
'AlarmMaximumFPS' => 'Alarm Maximum FPS',
'AlarmPx' => 'Alarm Px',
'AlarmRGBUnset' => 'You must set an alarm RGB colour',
'Alert' => 'Gotowosc',
'All' => 'Wszystko',
'ApplyingStateChange' => 'Zmieniam stan pracy',
'Apply' => 'Zastosuj',
'ArchArchived' => 'Tylko zarchiwizowane',
'Archive' => 'Archiwum',
'Archived' => 'Archived',
'ArchUnarchived' => 'Tylko niezarchiwizowane',
'Area' => 'Area',
'AreaUnits' => 'Area (px/%)',
'AttrAlarmFrames' => 'Ramki alarmowe',
'AttrArchiveStatus' => 'Status archiwum',
'AttrAvgScore' => '¦red. wynik',
'AttrCause' => 'Cause',
'AttrDate' => 'Data',
'AttrDateTime' => 'Data/Czas',
'AttrDiskBlocks' => 'Dysk Bloki',
'AttrDiskPercent' => 'Dysk Procent',
'AttrDuration' => 'Czas trwania',
'AttrFrames' => 'Ramek',
'AttrId' => 'Id',
'AttrMaxScore' => 'Maks. wynik',
'AttrMonitorId' => 'Nr monitora',
'AttrMonitorName' => 'Nazwa monitora',
'AttrMontage' => 'Monta¿',
'AttrName' => 'Nazwa',
'AttrNotes' => 'Notes',
'AttrSystemLoad' => 'System Load',
'AttrTime' => 'Czas',
'AttrTotalScore' => 'Ca³kowity wynik',
'AttrWeekday' => 'Dzieñ roboczy',
'Auto' => 'Auto',
'AutoStopTimeout' => 'Auto Stop Timeout',
'AvgBrScore' => '¦red.<br/>wynik',
'Background' => 'Background',
'BackgroundFilter' => 'Run filter in background',
'BadAlarmFrameCount' => 'Alarm frame count must be an integer of one or more',
'BadAlarmMaxFPS' => 'Alarm Maximum FPS must be a positive integer or floating point value',
'BadChannel' => 'Channel must be set to an integer of zero or more',
'BadDevice' => 'Device must be set to a valid value',
'BadFormat' => 'Format must be set to an integer of zero or more',
'BadFPSReportInterval' => 'FPS report interval buffer count must be an integer of 100 or more',
'BadFrameSkip' => 'Frame skip count must be an integer of zero or more',
'BadHeight' => 'Height must be set to a valid value',
'BadHost' => 'Host must be set to a valid ip address or hostname, do not include http://',
'BadImageBufferCount' => 'Image buffer size must be an integer of 10 or more',
'BadLabelX' => 'Label X co-ordinate must be set to an integer of zero or more',
'BadLabelY' => 'Label Y co-ordinate must be set to an integer of zero or more',
'BadMaxFPS' => 'Maximum FPS must be a positive integer or floating point value',
'BadNameChars' => 'Nazwy mog± zawieraæ tylko litery, cyfry oraz my¶lnik i podkre¶lenie',
'BadPath' => 'Path must be set to a valid value',
'BadPort' => 'Port must be set to a valid number',
'BadPostEventCount' => 'Post event image count must be an integer of zero or more',
'BadPreEventCount' => 'Pre event image count must be at least zero, and less than image buffer size',
'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',
'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',
'BadWidth' => 'Width must be set to a valid value',
'Bandwidth' => 'przepustowo¶æ',
'BlobPx' => 'Plamka Px',
'BlobSizes' => 'Rozmiary plamek',
'Blobs' => 'Plamki',
'Brightness' => 'Jaskrawo¶æ',
'Buffers' => 'Bufory',
'CanAutoFocus' => 'Can Auto Focus',
'CanAutoGain' => 'Can Auto Gain',
'CanAutoIris' => 'Can Auto Iris',
'CanAutoWhite' => 'Can Auto White Bal.',
'CanAutoZoom' => 'Can Auto Zoom',
'Cancel' => 'Anuluj',
'CancelForcedAlarm' => 'Anuluj wymuszony alarm',
'CanFocusAbs' => 'Can Focus Absolute',
'CanFocus' => 'Can Focus',
'CanFocusCon' => 'Can Focus Continuous',
'CanFocusRel' => 'Can Focus Relative',
'CanGainAbs' => 'Can Gain Absolute',
'CanGain' => 'Can Gain ',
'CanGainCon' => 'Can Gain Continuous',
'CanGainRel' => 'Can Gain Relative',
'CanIrisAbs' => 'Can Iris Absolute',
'CanIris' => 'Can Iris',
'CanIrisCon' => 'Can Iris Continuous',
'CanIrisRel' => 'Can Iris Relative',
'CanMoveAbs' => 'Can Move Absolute',
'CanMove' => 'Can Move',
'CanMoveCon' => 'Can Move Continuous',
'CanMoveDiag' => 'Can Move Diagonally',
'CanMoveMap' => 'Can Move Mapped',
'CanMoveRel' => 'Can Move Relative',
'CanPan' => 'Can Pan' ,
'CanReset' => 'Can Reset',
'CanSetPresets' => 'Can Set Presets',
'CanSleep' => 'Can Sleep',
'CanTilt' => 'Can Tilt',
'CanWake' => 'Can Wake',
'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',
'CanZoomCon' => 'Can Zoom Continuous',
'CanZoomRel' => 'Can Zoom Relative',
'CaptureHeight' => 'Wysoko¶æ obrazu',
'CapturePalette' => 'Paleta kolorów obrazu',
'CaptureWidth' => 'Szeroko¶æ obrazu',
'Cause' => 'Cause',
'CheckMethod' => 'Metoda sprawdzenia alarmu',
'ChooseFilter' => 'Wybierz filtr',
'ChoosePreset' => 'Choose Preset',
'Close' => 'Zamknij',
'Colour' => 'Nasycenie',
'Command' => 'Command',
'Config' => 'Konfiguracja',
'ConfiguredFor' => 'Ustawiona',
'ConfirmDeleteEvents' => 'Are you sure you wish to delete the selected events?',
'ConfirmPassword' => 'Potwierd¼ has³o',
'ConjAnd' => 'i',
'ConjOr' => 'lub',
'Console' => 'Konsola',
'ContactAdmin' => 'Skontaktuj siê z Twoim adminstratorem w sprawie szczegó³ów.',
'Continue' => 'Continue',
'Contrast' => 'Kontrast',
'ControlAddress' => 'Control Address',
'ControlCap' => 'Control Capability',
'ControlCaps' => 'Control Capabilities',
'Control' => 'Control',
'ControlDevice' => 'Control Device',
'Controllable' => 'Controllable',
'ControlType' => 'Control Type',
'Cycle' => 'Cycle',
'CycleWatch' => 'Cykl podgl±du',
'Day' => 'Dzieñ',
'Debug' => 'Debug',
'DefaultRate' => 'Default Rate',
'DefaultScale' => 'Default Scale',
'DefaultView' => 'Default View',
'DeleteAndNext' => 'Usuñ &amp; nastêpny',
'DeleteAndPrev' => 'Usuñ &amp; poprzedni',
'DeleteSavedFilter' => 'Usuñ zapisany filtr',
'Delete' => 'Usuñ',
'Description' => 'Opis',
'DeviceChannel' => 'Numer wej¶cia w urz±dzeniu',
'DeviceFormat' => 'System TV',
'DeviceNumber' => 'Numer urz±dzenia',
'DevicePath' => 'Device Path',
'Devices' => 'Devices',
'Dimensions' => 'Rozmiary',
'DisableAlarms' => 'Disable Alarms',
'Disk' => 'Dysk',
'DonateAlready' => 'No, I\'ve already donated',
'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' => 'Please Donate',
'DonateRemindDay' => 'Not yet, remind again in 1 day',
'DonateRemindHour' => 'Not yet, remind again in 1 hour',
'DonateRemindMonth' => 'Not yet, remind again in 1 month',
'DonateRemindNever' => 'No, I don\'t want to donate, never remind',
'DonateRemindWeek' => 'Not yet, remind again in 1 week',
'DonateYes' => 'Yes, I\'d like to donate now',
'Download' => 'Download',
'Duration' => 'Czas trwania',
'Edit' => 'Edycja',
'Email' => 'Email',
'EnableAlarms' => 'Enable Alarms',
'Enabled' => 'Zezwolono',
'EnterNewFilterName' => 'Wpisz now± nazwê filtra',
'Error' => 'B³±d',
'ErrorBrackets' => 'B³±d, proszê sprawdziæ ilo¶æ nawiasów otwieraj±cych i zamykaj±cych',
'ErrorValidValue' => 'B³±d, proszê sprawdziæ czy wszystkie warunki maj± poprawne warto¶ci',
'Etc' => 'itp',
'EventFilter' => 'Filtr zdarzeñ',
'EventId' => 'Id zdarzenia',
'EventName' => 'Event Name',
'EventPrefix' => 'Event Prefix',
'Events' => 'Zdarzenia',
'Event' => 'Zdarzenie',
'Exclude' => 'Wyklucz',
'Execute' => 'Execute',
'ExportDetails' => 'Export Event Details',
'Export' => 'Export',
'ExportFailed' => 'Export Failed',
'ExportFormat' => 'Export File Format',
'ExportFormatTar' => 'Tar',
'ExportFormatZip' => 'Zip',
'ExportFrames' => 'Export Frame Details',
'ExportImageFiles' => 'Export Image Files',
'Exporting' => 'Exporting',
'ExportMiscFiles' => 'Export Other Files (if present)',
'ExportOptions' => 'Export Options',
'ExportVideoFiles' => 'Export Video Files (if present)',
'Far' => 'Far',
'FastForward' => 'Fast Forward',
'Feed' => 'Dostarcz',
'FileColours' => 'File Colours',
'File' => 'File',
'FilePath' => 'File Path',
'FilterArchiveEvents' => 'Archiwizuj wszystkie pasuj±ce',
'FilterDeleteEvents' => 'Usuwaj wszystkie pasuj±ce',
'FilterEmailEvents' => 'Wysy³aj poczt± wszystkie pasuj±ce',
'FilterExecuteEvents' => 'Wywo³uj komendê na wszystkie pasuj±ce',
'FilterMessageEvents' => 'Wy¶wietlaj komunikat na wszystkie pasuj±ce',
'FilterPx' => 'Filtr Px',
'Filters' => 'Filters',
'FilterUnset' => 'You must specify a filter width and height',
'FilterUploadEvents' => 'Wysy³aj wszystkie pasuj±ce',
'FilterVideoEvents' => 'Create video for all matches',
'First' => 'Pierwszy',
'FlippedHori' => 'Flipped Horizontally',
'FlippedVert' => 'Flipped Vertically',
'Focus' => 'Focus',
'ForceAlarm' => 'Wymu¶ alarm',
'Format' => 'Format',
'FPS' => 'fps',
'FPSReportInterval' => 'Raport (ramek/s)',
'FrameId' => 'Nr ramki',
'Frame' => 'Ramka',
'FrameRate' => 'Tempo ramek',
'FrameSkip' => 'Pomiñ ramkê',
'Frames' => 'Ramek',
'FTP' => 'FTP',
'Func' => 'Funkcja',
'Function' => 'Funkcja',
'Gain' => 'Gain',
'General' => 'General',
'GenerateVideo' => 'Generowanie Video',
'GeneratingVideo' => 'Generujê Video',
'GoToZoneMinder' => 'Przejd¼ na ZoneMinder.com',
'Grey' => 'Cz/b',
'Group' => 'Group',
'Groups' => 'Groups',
'HasFocusSpeed' => 'Has Focus Speed',
'HasGainSpeed' => 'Has Gain Speed',
'HasHomePreset' => 'Has Home Preset',
'HasIrisSpeed' => 'Has Iris Speed',
'HasPanSpeed' => 'Has Pan Speed',
'HasPresets' => 'Has Presets',
'HasTiltSpeed' => 'Has Tilt Speed',
'HasTurboPan' => 'Has Turbo Pan',
'HasTurboTilt' => 'Has Turbo Tilt',
'HasWhiteSpeed' => 'Has White Bal. Speed',
'HasZoomSpeed' => 'Has Zoom Speed',
'HighBW' => 'Wys.&nbsp;prz.',
'High' => 'wysoka',
'Home' => 'Home',
'Hour' => 'Godzina',
'Hue' => 'Odcieñ',
'Idle' => 'Bezczynny',
'Id' => 'Nr',
'Ignore' => 'Ignoruj',
'ImageBufferSize' => 'Rozmiar bufora obrazu (ramek)',
'Image' => 'Obraz',
'Images' => 'Images',
'Include' => 'Do³±cz',
'In' => 'In',
'Inverted' => 'Odwrócony',
'Iris' => 'Iris',
'KeyString' => 'Key String',
'Label' => 'Label',
'Language' => 'Jêzyk',
'Last' => 'Ostatni',
'LimitResultsPost' => 'wyników;', // This is used at the end of the phrase 'Limit to first N results only'
'LimitResultsPre' => 'Ogranicz do pocz±tkowych', // This is used at the beginning of the phrase 'Limit to first N results only'
'LinkedMonitors' => 'Linked Monitors',
'List' => 'List',
'Load' => 'Obc.',
'Local' => 'Lokalny',
'LoggedInAs' => 'Zalogowany jako',
'LoggingIn' => 'Logowanie',
'Login' => 'Login',
'Logout' => 'Wyloguj',
'LowBW' => 'Nis.&nbsp;prz.',
'Low' => 'niska',
'Main' => 'Main',
'Man' => 'Man',
'Manual' => 'Manual',
'Mark' => 'Znacznik',
'MaxBandwidth' => 'Max Bandwidth',
'MaxBrScore' => 'Maks.<br/>wynik',
'MaxFocusRange' => 'Max Focus Range',
'MaxFocusSpeed' => 'Max Focus Speed',
'MaxFocusStep' => 'Max Focus Step',
'MaxGainRange' => 'Max Gain Range',
'MaxGainSpeed' => 'Max Gain Speed',
'MaxGainStep' => 'Max Gain Step',
'MaximumFPS' => 'Maks. FPS',
'MaxIrisRange' => 'Max Iris Range',
'MaxIrisSpeed' => 'Max Iris Speed',
'MaxIrisStep' => 'Max Iris Step',
'Max' => 'Maks.',
'MaxPanRange' => 'Max Pan Range',
'MaxPanSpeed' => 'Max Pan Speed',
'MaxPanStep' => 'Max Pan Step',
'MaxTiltRange' => 'Max Tilt Range',
'MaxTiltSpeed' => 'Max Tilt Speed',
'MaxTiltStep' => 'Max Tilt Step',
'MaxWhiteRange' => 'Max White Bal. Range',
'MaxWhiteSpeed' => 'Max White Bal. Speed',
'MaxWhiteStep' => 'Max White Bal. Step',
'MaxZoomRange' => 'Max Zoom Range',
'MaxZoomSpeed' => 'Max Zoom Speed',
'MaxZoomStep' => 'Max Zoom Step',
'MediumBW' => '¦red.&nbsp;prz.',
'Medium' => '¶rednia',
'MinAlarmAreaLtMax' => 'Minimum alarm area should be less than maximum',
'MinAlarmAreaUnset' => 'You must specify the minimum alarm pixel count',
'MinBlobAreaLtMax' => 'Minimalny obszar plamki powinien byæ mniejszy od maksymalnego obszaru plamki',
'MinBlobAreaUnset' => 'You must specify the minimum blob pixel count',
'MinBlobLtMinFilter' => 'Minimum blob area should be less than or equal to minimum filter area',
'MinBlobsLtMax' => 'Najmniejsze plamki powinny byæ mniejsze od najwiêkszych plamek' ,
'MinBlobsUnset' => 'You must specify the minimum blob count',
'MinFilterAreaLtMax' => 'Minimum filter area should be less than maximum',
'MinFilterAreaUnset' => 'You must specify the minimum filter pixel count',
'MinFilterLtMinAlarm' => 'Minimum filter area should be less than or equal to minimum alarm area',
'MinFocusRange' => 'Min Focus Range',
'MinFocusSpeed' => 'Min Focus Speed',
'MinFocusStep' => 'Min Focus Step',
'MinGainRange' => 'Min Gain Range',
'MinGainSpeed' => 'Min Gain Speed',
'MinGainStep' => 'Min Gain Step',
'MinIrisRange' => 'Min Iris Range',
'MinIrisSpeed' => 'Min Iris Speed',
'MinIrisStep' => 'Min Iris Step',
'MinPanRange' => 'Min Pan Range',
'MinPanSpeed' => 'Min Pan Speed',
'MinPanStep' => 'Min Pan Step',
'MinPixelThresLtMax' => 'Najmniejsze progi pikseli powinny byæ mniejsze od najwiêkszych progów pikseli',
'MinPixelThresUnset' => 'You must specify a minimum pixel threshold',
'MinTiltRange' => 'Min Tilt Range',
'MinTiltSpeed' => 'Min Tilt Speed',
'MinTiltStep' => 'Min Tilt Step',
'MinWhiteRange' => 'Min White Bal. Range',
'MinWhiteSpeed' => 'Min White Bal. Speed',
'MinWhiteStep' => 'Min White Bal. Step',
'MinZoomRange' => 'Min Zoom Range',
'MinZoomSpeed' => 'Min Zoom Speed',
'MinZoomStep' => 'Min Zoom Step',
'Misc' => 'Inne',
'MonitorIds' => 'Numery&nbsp;monitorów',
'Monitor' => 'Monitor',
'MonitorPresetIntro' => 'Select an appropriate preset from the list below.<br><br>Please note that this may overwrite any values you already have configured for this monitor.<br><br>',
'MonitorPreset' => 'Monitor Preset',
'Monitors' => 'Monitory',
'Montage' => 'Monta¿',
'Month' => 'Miesi±c',
'Move' => 'Move',
'MustBeGe' => 'musi byæ wiêksze lub równe od',
'MustBeLe' => 'musi byæ mniejsze lub równe od',
'MustConfirmPassword' => 'Musisz potwierdziæ has³o',
'MustSupplyPassword' => 'Musisz podaæ has³o',
'MustSupplyUsername' => 'Musisz podaæ nazwê u¿ytkownika',
'Name' => 'Nazwa',
'Near' => 'Near',
'Network' => 'Sieæ',
'NewGroup' => 'New Group',
'NewLabel' => 'New Label',
'New' => 'Nowy',
'NewPassword' => 'Nowe has³o',
'NewState' => 'Nowy stan',
'NewUser' => 'nowy',
'Next' => 'Nastêpny',
'NoFramesRecorded' => 'Brak zapisanych ramek dla tego zdarzenia',
'NoGroup' => 'No Group',
'NoneAvailable' => 'Niedostêpne',
'None' => 'Brak',
'No' => 'Nie',
'Normal' => 'Normalny',
'NoSavedFilters' => 'BrakZapisanychFiltrów',
'NoStatisticsRecorded' => 'Brak zapisanych statystyk dla tego zdarzenia/ramki',
'Notes' => 'Notes',
'NumPresets' => 'Num Presets',
'Off' => 'Off',
'On' => 'On',
'Open' => 'Open',
'OpEq' => 'równy',
'OpGtEq' => 'wiêksze lub równe od',
'OpGt' => 'wiêksze od',
'OpIn' => 'w zestawie',
'OpLtEq' => 'mniejsze lub równe od',
'OpLt' => 'mniejsze od',
'OpMatches' => 'pasuj±ce',
'OpNe' => 'ró¿ne od',
'OpNotIn' => 'brak w zestawie',
'OpNotMatches' => 'nie pasuj±ce',
'OptionHelp' => 'OpcjePomoc',
'OptionRestartWarning' => 'Te zmiany nie przynios± natychmiastowego efektu\ndopóki system pracuje. Kiedy zakoñczysz robiæ zmiany\nproszê koniecznie zrestartowaæ ZoneMinder.',
'Options' => 'Opcje',
'Order' => 'Order',
'OrEnterNewName' => 'lub wpisz now± nazwê',
'Orientation' => 'Orientacja',
'Out' => 'Out',
'OverwriteExisting' => 'Nadpisz istniej±ce',
'Paged' => 'Stronicowane',
'PanLeft' => 'Pan Left',
'Pan' => 'Pan',
'PanRight' => 'Pan Right',
'PanTilt' => 'Pan/Tilt',
'Parameter' => 'Parametr',
'Password' => 'Has³o',
'PasswordsDifferent' => 'Has³a: nowe i potwierdzone s± ró¿ne!',
'Paths' => '¦cie¿ki',
'Pause' => 'Pause',
'PhoneBW' => 'Tel.&nbsp;prz.',
'Phone' => 'Phone',
'PixelDiff' => 'Pixel Diff',
'Pixels' => 'pikseli',
'PlayAll' => 'Play All',
'Play' => 'Play',
'PleaseWait' => 'Proszê czekaæ',
'Point' => 'Point',
'PostEventImageBuffer' => 'Bufor obrazów po zdarzeniu',
'PreEventImageBuffer' => 'Bufor obrazów przed zdarzeniem',
'PreserveAspect' => 'Preserve Aspect Ratio',
'Preset' => 'Preset',
'Presets' => 'Presets',
'Prev' => 'Poprzedni',
'Protocol' => 'Protocol',
'Rate' => 'Tempo',
'Real' => 'Rzeczywiste',
'Record' => 'Zapis',
'RefImageBlendPct' => 'Miks z obrazem odniesienia',
'Refresh' => 'Od¶wie¿',
'RemoteHostName' => 'Nazwa zdalnego hosta',
'RemoteHostPath' => 'Scie¿ka zdalnego hosta',
'RemoteHostPort' => 'Port zdalnego hosta',
'RemoteImageColours' => 'Kolory zdalnego obrazu',
'Remote' => 'Zdalny',
'Rename' => 'Zmieñ nazwê',
'ReplayAll' => 'All Events',
'ReplayGapless' => 'Gapless Events',
'Replay' => 'Powtórka',
'Replay' => 'Replay',
'ReplaySingle' => 'Single Event',
'ResetEventCounts' => 'Kasuj licznik zdarzeñ',
'Reset' => 'Reset',
'Restarting' => 'Restartujê',
'Restart' => 'Restart',
'RestrictedCameraIds' => 'Numery kamer',
'RestrictedMonitors' => 'Restricted Monitors',
'ReturnDelay' => 'Return Delay',
'ReturnLocation' => 'Return Location',
'Rewind' => 'Rewind',
'RotateLeft' => 'Obróæ w lewo',
'RotateRight' => 'Obróæ w prawo',
'RunMode' => 'Tryb pracy',
'Running' => 'Pracuje',
'RunState' => 'Stan pracy',
'SaveAs' => 'Zapisz jako',
'SaveFilter' => 'Zapisz filtr',
'Save' => 'Zapisz',
'Scale' => 'Skala',
'Score' => 'Wynik',
'Secs' => 'Sekund',
'Sectionlength' => 'D³ugo¶æ sekcji',
'SelectMonitors' => 'Select Monitors',
'Select' => 'Select',
'SelfIntersecting' => 'Polygon edges must not intersect',
'SetLearnPrefs' => 'Ustaw preferencje nauki', // This can be ignored for now
'SetNewBandwidth' => 'Ustaw now± przepustowo¶æ',
'SetPreset' => 'Set Preset',
'Set' => 'Set',
'Settings' => 'Ustawienia',
'ShowFilterWindow' => 'Poka¿OknoFiltru',
'ShowTimeline' => 'Show Timeline',
'SignalCheckColour' => 'Signal Check Colour',
'Size' => 'Size',
'Sleep' => 'Sleep',
'SortAsc' => 'Nara.',
'SortBy' => 'Sortuj',
'SortDesc' => 'Opad.',
'Source' => '¬ród³o',
'SourceType' => 'Typ ¼ród³a',
'SpeedHigh' => 'High Speed',
'SpeedLow' => 'Low Speed',
'SpeedMedium' => 'Medium Speed',
'Speed' => 'Speed',
'SpeedTurbo' => 'Turbo Speed',
'Start' => 'Start',
'State' => 'Stan',
'Stats' => 'Statystyki',
'Status' => 'Status',
'StepBack' => 'Step Back',
'StepForward' => 'Step Forward',
'StepLarge' => 'Large Step',
'StepMedium' => 'Medium Step',
'StepNone' => 'No Step',
'StepSmall' => 'Small Step',
'Step' => 'Step',
'Stills' => 'Nieruchome',
'Stopped' => 'Zatrzymany',
'Stop' => 'Stop',
'StreamReplayBuffer' => 'Stream Replay Image Buffer',
'Stream' => 'Ruchomy',
'Submit' => 'Submit',
'System' => 'System',
'Tele' => 'Tele',
'Thumbnail' => 'Thumbnail',
'Tilt' => 'Tilt',
'Time' => 'Czas',
'TimeDelta' => 'Ró¿nica czasu',
'Timeline' => 'Timeline',
'Timestamp' => 'Czas',
'TimestampLabelFormat' => 'Format etykiety czasu',
'TimestampLabelX' => 'Wsp. X etykiety czasu',
'TimestampLabelY' => 'Wsp. Y etykiety czasu',
'TimeStamp' => 'Pieczêæ czasu',
'Today' => 'Today',
'Tools' => 'Narzêdzia',
'TotalBrScore' => 'Ca³kowity<br/>wynik',
'TrackDelay' => 'Track Delay',
'TrackMotion' => 'Track Motion',
'Triggers' => 'Wyzwalacze',
'TurboPanSpeed' => 'Turbo Pan Speed',
'TurboTiltSpeed' => 'Turbo Tilt Speed',
'Type' => 'Typ',
'Unarchive' => 'Nie archiwizuj',
'Units' => 'Jednostki',
'Unknown' => 'Nieznany',
'UpdateAvailable' => 'Jest dostêpne uaktualnienie ZoneMinder ',
'UpdateNotNecessary' => 'Nie jest wymagane uaktualnienie',
'Update' => 'Update',
'UseFilterExprsPost' => '&nbsp;wyra¿enie&nbsp;filtru', // This is used at the end of the phrase 'use N filter expressions'
'UseFilterExprsPre' => 'U¿yj&nbsp;', // This is used at the beginning of the phrase 'use N filter expressions'
'UseFilter' => 'U¿yj filtru',
'Username' => 'Nazwa u¿ytkownika',
'Users' => 'U¿ytkownicy',
'User' => 'U¿ytkownik',
'Value' => 'Warto¶æ',
'VersionIgnore' => 'Zignoruj t± wersjê',
'VersionRemindDay' => 'Przypomnij po 1 dniu',
'VersionRemindHour' => 'Przypomnij po 1 godzinie',
'VersionRemindNever' => 'Nie przypominaj o nowych wersjach',
'VersionRemindWeek' => 'Przypomnij po 1 tygodniu',
'Version' => 'Wersja',
'VideoFormat' => 'Video Format',
'VideoGenFailed' => 'Generowanie filmu Video nie powiod³o siê!',
'VideoGenFiles' => 'Existing Video Files',
'VideoGenNoFiles' => 'No Video Files Found',
'VideoGenParms' => 'Parametery generowania filmu Video',
'VideoGenSucceeded' => 'Video Generation Succeeded!',
'VideoSize' => 'Rozmiar filmu Video',
'Video' => 'Video',
'ViewAll' => 'Poka¿ wszystko',
'ViewEvent' => 'View Event',
'ViewPaged' => 'Poka¿ stronami',
'View' => 'Podgl±d',
'Wake' => 'Wake',
'WarmupFrames' => 'Ignorowane ramki',
'Watch' => 'podgl±d',
'WebColour' => 'Web Colour',
'Web' => 'Web',
'Week' => 'Tydzieñ',
'WhiteBalance' => 'White Balance',
'White' => 'White',
'Wide' => 'Wide',
'X10ActivationString' => 'X10: ³añcuch aktywuj±cy',
'X10InputAlarmString' => 'X10: ³añcuch wej¶cia alarmu',
'X10OutputAlarmString' => 'X10: ³añcuch wyj¶cia alarmu',
'X10' => 'X10',
'X' => 'X',
'Yes' => 'Tak',
'YouNoPerms' => 'Nie masz uprawnieñ na dostêp do tego zasobu.',
'Y' => 'Y',
'ZoneAlarmColour' => 'Kolor alarmu (Red/Green/Blue)',
'ZoneArea' => 'Zone Area',
'ZoneFilterSize' => 'Filter Width/Height (pixels)',
'ZoneMinMaxAlarmArea' => 'Min/Max Alarmed Area',
'ZoneMinMaxBlobArea' => 'Min/Max Blob Area',
'ZoneMinMaxBlobs' => 'Min/Max Blobs',
'ZoneMinMaxFiltArea' => 'Min/Max Filtered Area',
'ZoneMinMaxPixelThres' => 'Min/Max Pixel Threshold (0-255)',
'ZoneOverloadFrames' => 'Overload Frame Ignore Count',
'Zones' => 'Strefy',
'Zone' => 'Strefa',
'ZoomIn' => 'Zoom In',
'ZoomOut' => 'Zoom Out',
'Zoom' => 'Zoom',
);
// Complex replacements with formatting and/or placements, must be passed through sprintf
$CLANG = array(
'CurrentLogin' => 'Aktualny login \'%1$s\'',
'EventCount' => '%1$s %2$s',
'LastEvents' => 'Ostatnie %1$s %2$s',
'LatestRelease' => 'Najnowsza wersja to v%1$s, Ty posiadasz v%2$s.',
'MonitorCount' => '%1$s %2$s',
'MonitorFunction' => 'Monitor %1$s Funkcja',
'RunningRecentVer' => 'Uruchomi³e¶ najnowsz± wersjê ZoneMinder, v%s.',
);
// The next section allows you to describe a series of word ending and counts used to
// generate the correctly conjugated forms of words depending on a count that is associated
// with that word.
// This intended to allow phrases such a '0 potatoes', '1 potato', '2 potatoes' etc to
// conjugate correctly with the associated count.
// In some languages such as English this is fairly simple and can be expressed by assigning
// a count with a singular or plural form of a word and then finding the nearest (lower) value.
// So '0' of something generally ends in 's', 1 of something is singular and has no extra
// ending and 2 or more is a plural and ends in 's' also. So to find the ending for '187' of
// something you would find the nearest lower count (2) and use that ending.
//
// So examples of this would be
// $zmVlangPotato = array( 0=>'Potatoes', 1=>'Potato', 2=>'Potatoes' );
// $zmVlangSheep = array( 0=>'Sheep' );
//
// where you can have as few or as many entries in the array as necessary
// If your language is similar in form to this then use the same format and choose the
// appropriate zmVlang function below.
// If however you have a language with a different format of plural endings then another
// approach is required . For instance in Russian the word endings change continuously
// depending on the last digit (or digits) of the numerator. In this case then zmVlang
// arrays could be written so that the array index just represents an arbitrary 'type'
// and the zmVlang function does the calculation about which version is appropriate.
//
// So an example in Russian might be (using English words, and made up endings as I
// don't know any Russian!!)
// $zmVlangPotato = array( 1=>'Potati', 2=>'Potaton', 3=>'Potaten' );
//
// and the zmVlang function decides that the first form is used for counts ending in
// 0, 5-9 or 11-19 and the second form when ending in 1 etc.
//
// Variable arrays expressing plurality, see the zmVlang description above
$VLANG = array(
'Event' => array( 0=>'Zdarzeñ', 1=>'Zdarzenie', 2=>'Zdarzenia'),
'Monitor' => array( 0=>'Monitorów', 1=>'Monitor', 2=>'Monitory'),
);
// You will need to choose or write a function that can correlate the plurality string arrays
// with variable counts. This is used to conjugate the Vlang arrays above with a number passed
// in to generate the correct noun form.
// This is an version that could be used in the Polish language
//
function zmVlang( $langVarArray, $count )
{
$secondlastdigit = substr( $count, -2, 1 );
$lastdigit = substr( $count, -1, 1 );
if ( $count == 1 )
{
return( $langVarArray[1] );
}
if (($secondlastdigit == 0)|( $secondlastdigit == 1))
{
return( $langVarArray[0] );
}
if ( $secondlastdigit >= 2)
{
switch ( $lastdigit )
{
case 0 :
case 1 :
case 5 :
case 6 :
case 7 :
case 8 :
case 9 :
{
return( $langVarArray[0] );
break;
}
case 2 :
case 3 :
case 4 :
{
return( $langVarArray[2] );
break;
}
}
}
die( 'B£¡D! zmVlang nie mo¿e skorelowac ³añcucha!' );
}
// This is an example of how the function is used in the code which you can uncomment and
// use to test your custom function.
// $monitors = 12; // Choose any number
// echo $monitors." ";
// echo zmVlang( $zmVlangMonitor, $monitors);
// In this section you can override the default prompt and help texts for the options area
// These overrides are in the form show below where the array key represents the option name minus the initial ZM_
// So for example, to override the help text for ZM_LANG_DEFAULT do
$OLANG = array(
// 'LANG_DEFAULT' => array(
// 'Prompt' => "This is a new prompt for this option",
// 'Help' => "This is some new help for this option which will be displayed in the popup window when the ? is clicked"
// ),
);
?>

742
web/lang/pt_br.php Normal file
View File

@ -0,0 +1,742 @@
<?php
// ZoneMinder Brazilian Portuguese Traduction By Victor Diago
//
// Feel Free to contact Me at illuminati@linuxmail.org
//
// Tradução Para Português do Brasil do Zoneminder
//
// Sinta-se Livre para me contactar em illuminati@linuxmail.org
// Simple String Replacements
$SLANG = array(
'24BitColour' => 'cor 24 bits',
'8BitGrey' => 'cinza 8 bits',
'Action' => 'Action',
'Actual' => 'Atual',
'AddNewControl' => 'Add New Control',
'AddNewMonitor' => 'Adicionar Monitor',
'AddNewUser' => 'Adicionar Usuário',
'AddNewZone' => 'Adicionar Zona',
'Alarm' => 'Alarme',
'AlarmBrFrames' => 'Imagens<br/>Alarmadas',
'AlarmFrameCount' => 'Alarm Frame Count',
'AlarmFrame' => 'Imagem Alarmada',
'AlarmLimits' => 'Limites de Alarme',
'AlarmMaximumFPS' => 'Alarm Maximum FPS',
'AlarmPx' => 'Pixel de Alarme',
'AlarmRGBUnset' => 'You must set an alarm RGB colour',
'Alert' => 'Alerta',
'All' => 'Tudo',
'Apply' => 'Aplicar',
'ApplyingStateChange' => 'Aplicando mudança de estado',
'ArchArchived' => 'Somente Arquivados',
'Archive' => 'Arquivar',
'Archived' => 'Archived',
'ArchUnarchived' => 'Somente Nao Arquivados',
'Area' => 'Area',
'AreaUnits' => 'Area (px/%)',
'AttrAlarmFrames' => 'Imagens Alarmadas',
'AttrArchiveStatus' => 'Status/Arquivamento',
'AttrAvgScore' => 'Maior Score',
'AttrCause' => 'Cause',
'AttrDate' => 'Data',
'AttrDateTime' => 'Data/Horario',
'AttrDiskBlocks' => 'Blocos de Disco',
'AttrDiskPercent' => 'Porcentagem de Disco',
'AttrDuration' => 'Duração',
'AttrFrames' => 'Imagens',
'AttrId' => 'Id',
'AttrMaxScore' => 'Max. Score',
'AttrMonitorId' => 'Id do Monitor',
'AttrMonitorName' => 'Nome do Monitor',
'AttrName' => 'Nome',
'AttrNotes' => 'Notes',
'AttrSystemLoad' => 'System Load',
'AttrTime' => 'Horário',
'AttrTotalScore' => 'Score Total',
'AttrWeekday' => 'Dia/Semana',
'Auto' => 'Auto',
'AutoStopTimeout' => 'Auto Stop Timeout',
'AvgBrScore' => 'Maior<br/>Score',
'Background' => 'Background',
'BackgroundFilter' => 'Run filter in background',
'BadAlarmFrameCount' => 'Alarm frame count must be an integer of one or more',
'BadAlarmMaxFPS' => 'Alarm Maximum FPS must be a positive integer or floating point value',
'BadChannel' => 'Channel must be set to an integer of zero or more',
'BadDevice' => 'Device must be set to a valid value',
'BadFormat' => 'Format must be set to an integer of zero or more',
'BadFPSReportInterval' => 'FPS report interval buffer count must be an integer of 100 or more',
'BadFrameSkip' => 'Frame skip count must be an integer of zero or more',
'BadHeight' => 'Height must be set to a valid value',
'BadHost' => 'Host must be set to a valid ip address or hostname, do not include http://',
'BadImageBufferCount' => 'Image buffer size must be an integer of 10 or more',
'BadLabelX' => 'Label X co-ordinate must be set to an integer of zero or more',
'BadLabelY' => 'Label Y co-ordinate must be set to an integer of zero or more',
'BadMaxFPS' => 'Maximum FPS must be a positive integer or floating point value',
'BadNameChars' => 'Nomes devem ser caracteres alfanuméricos mais hífen e underscore',
'BadPath' => 'Path must be set to a valid value',
'BadPort' => 'Port must be set to a valid number',
'BadPostEventCount' => 'Post event image count must be an integer of zero or more',
'BadPreEventCount' => 'Pre event image count must be at least zero, and less than image buffer size',
'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',
'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',
'BadWidth' => 'Width must be set to a valid value',
'Bandwidth' => 'Larg/Banda',
'BlobPx' => 'Px Blob',
'Blobs' => 'Blobs',
'BlobSizes' => 'Tam Blob',
'Brightness' => 'Brilho',
'Buffers' => 'Buffers',
'CanAutoFocus' => 'Can Auto Focus',
'CanAutoGain' => 'Can Auto Gain',
'CanAutoIris' => 'Can Auto Iris',
'CanAutoWhite' => 'Can Auto White Bal.',
'CanAutoZoom' => 'Can Auto Zoom',
'Cancel' => 'Cancelar',
'CancelForcedAlarm' => 'Cancelar Alarme Forçado',
'CanFocusAbs' => 'Can Focus Absolute',
'CanFocus' => 'Can Focus',
'CanFocusCon' => 'Can Focus Continuous',
'CanFocusRel' => 'Can Focus Relative',
'CanGainAbs' => 'Can Gain Absolute',
'CanGain' => 'Can Gain ',
'CanGainCon' => 'Can Gain Continuous',
'CanGainRel' => 'Can Gain Relative',
'CanIrisAbs' => 'Can Iris Absolute',
'CanIris' => 'Can Iris',
'CanIrisCon' => 'Can Iris Continuous',
'CanIrisRel' => 'Can Iris Relative',
'CanMoveAbs' => 'Can Move Absolute',
'CanMove' => 'Can Move',
'CanMoveCon' => 'Can Move Continuous',
'CanMoveDiag' => 'Can Move Diagonally',
'CanMoveMap' => 'Can Move Mapped',
'CanMoveRel' => 'Can Move Relative',
'CanPan' => 'Can Pan' ,
'CanReset' => 'Can Reset',
'CanSetPresets' => 'Can Set Presets',
'CanSleep' => 'Can Sleep',
'CanTilt' => 'Can Tilt',
'CanWake' => 'Can Wake',
'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',
'CanZoomCon' => 'Can Zoom Continuous',
'CanZoomRel' => 'Can Zoom Relative',
'CaptureHeight' => 'Altura da Captura',
'CapturePalette' => 'Paleta de Captura',
'CaptureWidth' => 'Largura de Captura',
'Cause' => 'Cause',
'CheckMethod' => 'Metodo marcar por alarme',
'ChooseFilter' => 'Escolher Filtro',
'ChoosePreset' => 'Choose Preset',
'Close' => 'Fechar',
'Colour' => 'Cor',
'Command' => 'Command',
'Config' => 'Config',
'ConfiguredFor' => 'Configurado para',
'ConfirmDeleteEvents' => 'Are you sure you wish to delete the selected events?',
'ConfirmPassword' => 'Confirmar Senha',
'ConjAnd' => 'E',
'ConjOr' => 'OU',
'Console' => 'Console',
'ContactAdmin' => 'Por favor contate o administrador para detalhes.',
'Continue' => 'Continue',
'Contrast' => 'Contraste',
'ControlAddress' => 'Control Address',
'ControlCap' => 'Control Capability',
'ControlCaps' => 'Control Capabilities',
'Control' => 'Control',
'ControlDevice' => 'Control Device',
'Controllable' => 'Controllable',
'ControlType' => 'Control Type',
'Cycle' => 'Cycle',
'CycleWatch' => 'Ciclo Monitor',
'Day' => 'Dia',
'Debug' => 'Debug',
'DefaultRate' => 'Default Rate',
'DefaultScale' => 'Default Scale',
'DefaultView' => 'Default View',
'DeleteAndNext' => 'Deletar &amp; Próx',
'DeleteAndPrev' => 'Deletar &amp; Ant',
'Delete' => 'Deletar',
'DeleteSavedFilter' => 'Deletar Filtros Salvos',
'Description' => 'Descrição',
'DeviceChannel' => 'Canal do Dispositivo',
'DeviceFormat' => 'Formato do Dispos.',
'DeviceNumber' => 'Num. do Dispos.',
'DevicePath' => 'Device Path',
'Devices' => 'Devices',
'Dimensions' => 'Dimensões',
'DisableAlarms' => 'Disable Alarms',
'Disk' => 'Disco',
'DonateAlready' => 'No, I\'ve already donated',
'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' => 'Please Donate',
'DonateRemindDay' => 'Not yet, remind again in 1 day',
'DonateRemindHour' => 'Not yet, remind again in 1 hour',
'DonateRemindMonth' => 'Not yet, remind again in 1 month',
'DonateRemindNever' => 'No, I don\'t want to donate, never remind',
'DonateRemindWeek' => 'Not yet, remind again in 1 week',
'DonateYes' => 'Yes, I\'d like to donate now',
'Download' => 'Download',
'Duration' => 'Duração',
'Edit' => 'Editar',
'Email' => 'Email',
'EnableAlarms' => 'Enable Alarms',
'Enabled' => 'Habilitado',
'EnterNewFilterName' => 'Digite nome do novo filtro',
'ErrorBrackets' => 'Por favor cheque se você tem o mesmo numero de chaves abertas e fechadas',
'Error' => 'Erro',
'ErrorValidValue' => 'Erro, por favor cheque se os campos estão corretos',
'Etc' => 'etc',
'Event' => 'Evento',
'EventFilter' => 'Filtro de Evento',
'EventId' => 'Id do Evento',
'EventName' => 'Event Name',
'EventPrefix' => 'Event Prefix',
'Events' => 'Eventos',
'Exclude' => 'Excluir',
'Execute' => 'Execute',
'ExportDetails' => 'Export Event Details',
'Export' => 'Export',
'ExportFailed' => 'Export Failed',
'ExportFormat' => 'Export File Format',
'ExportFormatTar' => 'Tar',
'ExportFormatZip' => 'Zip',
'ExportFrames' => 'Export Frame Details',
'ExportImageFiles' => 'Export Image Files',
'Exporting' => 'Exporting',
'ExportMiscFiles' => 'Export Other Files (if present)',
'ExportOptions' => 'Export Options',
'ExportVideoFiles' => 'Export Video Files (if present)',
'Far' => 'Far',
'FastForward' => 'Fast Forward',
'Feed' => 'Alimentar',
'FileColours' => 'File Colours',
'File' => 'File',
'FilePath' => 'File Path',
'FilterArchiveEvents' => 'Arquivar resultados',
'FilterDeleteEvents' => 'Apagar resultados',
'FilterEmailEvents' => 'Enviar e-mail com detalhes dos resultados',
'FilterExecuteEvents' => 'Executar comando p/ resultados',
'FilterMessageEvents' => 'Enviar Mensagem dos resultados',
'FilterPx' => 'Px de Filtro',
'Filters' => 'Filters',
'FilterUnset' => 'You must specify a filter width and height',
'FilterUploadEvents' => 'Fazer upload dos resultados',
'FilterVideoEvents' => 'Create video for all matches',
'First' => 'Primeiro',
'FlippedHori' => 'Flipped Horizontally',
'FlippedVert' => 'Flipped Vertically',
'Focus' => 'Focus',
'ForceAlarm' => 'Forçar Alarme',
'Format' => 'Format',
'FPS' => 'fps',
'FPSReportInterval' => 'Intervalo de mostragem FPS',
'FrameId' => 'Id de Imagem',
'Frame' => 'Imagem',
'FrameRate' => 'Velocidade de Imagem',
'Frames' => 'Imagens',
'FrameSkip' => 'Salto de Imagem',
'FTP' => 'FTP',
'Func' => 'Func',
'Function' => 'Função',
'Gain' => 'Gain',
'General' => 'General',
'GenerateVideo' => 'Gerar Video',
'GeneratingVideo' => 'Gerando Video',
'GoToZoneMinder' => 'Ir Para ZoneMinder.com',
'Grey' => 'Cinza',
'Group' => 'Group',
'Groups' => 'Groups',
'HasFocusSpeed' => 'Has Focus Speed',
'HasGainSpeed' => 'Has Gain Speed',
'HasHomePreset' => 'Has Home Preset',
'HasIrisSpeed' => 'Has Iris Speed',
'HasPanSpeed' => 'Has Pan Speed',
'HasPresets' => 'Has Presets',
'HasTiltSpeed' => 'Has Tilt Speed',
'HasTurboPan' => 'Has Turbo Pan',
'HasTurboTilt' => 'Has Turbo Tilt',
'HasWhiteSpeed' => 'Has White Bal. Speed',
'HasZoomSpeed' => 'Has Zoom Speed',
'High' => 'Alto',
'HighBW' => 'Alta&nbsp;L/B',
'Home' => 'Home',
'Hour' => 'Hora',
'Hue' => 'Saturação',
'Id' => 'Id',
'Idle' => 'Parado',
'Ignore' => 'Ignorar',
'ImageBufferSize' => 'Tamanho de Buffer (imagens)',
'Image' => 'Imagem',
'Images' => 'Images',
'Include' => 'Incluir',
'In' => 'In',
'Inverted' => 'Invertido',
'Iris' => 'Iris',
'KeyString' => 'Key String',
'Label' => 'Label',
'Language' => 'Linguagem',
'Last' => 'Último',
'LimitResultsPost' => 'resultados somente;', // This is used at the end of the phrase 'Limit to first N results only'
'LimitResultsPre' => 'Limitar aos primeiros', // This is used at the beginning of the phrase 'Limit to first N results only'
'LinkedMonitors' => 'Linked Monitors',
'List' => 'List',
'Load' => 'Carga',
'Local' => 'Local',
'LoggedInAs' => 'Conectado como',
'LoggingIn' => 'Conectando',
'Login' => 'Conectar',
'Logout' => 'Sair',
'Low' => 'Baixa',
'LowBW' => 'Baixa&nbsp;L/B',
'Main' => 'Main',
'Man' => 'Man',
'Manual' => 'Manual',
'Mark' => 'Marcar',
'MaxBandwidth' => 'Max Bandwidth',
'MaxBrScore' => 'Max.<br/>Score',
'MaxFocusRange' => 'Max Focus Range',
'MaxFocusSpeed' => 'Max Focus Speed',
'MaxFocusStep' => 'Max Focus Step',
'MaxGainRange' => 'Max Gain Range',
'MaxGainSpeed' => 'Max Gain Speed',
'MaxGainStep' => 'Max Gain Step',
'MaximumFPS' => 'Maximo FPS',
'MaxIrisRange' => 'Max Iris Range',
'MaxIrisSpeed' => 'Max Iris Speed',
'MaxIrisStep' => 'Max Iris Step',
'Max' => 'Maximo',
'MaxPanRange' => 'Max Pan Range',
'MaxPanSpeed' => 'Max Pan Speed',
'MaxPanStep' => 'Max Pan Step',
'MaxTiltRange' => 'Max Tilt Range',
'MaxTiltSpeed' => 'Max Tilt Speed',
'MaxTiltStep' => 'Max Tilt Step',
'MaxWhiteRange' => 'Max White Bal. Range',
'MaxWhiteSpeed' => 'Max White Bal. Speed',
'MaxWhiteStep' => 'Max White Bal. Step',
'MaxZoomRange' => 'Max Zoom Range',
'MaxZoomSpeed' => 'Max Zoom Speed',
'MaxZoomStep' => 'Max Zoom Step',
'MediumBW' => 'Media&nbsp;L/B',
'Medium' => 'Media',
'MinAlarmAreaLtMax' => 'Minimum alarm area should be less than maximum',
'MinAlarmAreaUnset' => 'You must specify the minimum alarm pixel count',
'MinBlobAreaLtMax' => 'A area minima de blob deve ser menor do que a area máxima de blob',
'MinBlobAreaUnset' => 'You must specify the minimum blob pixel count',
'MinBlobLtMinFilter' => 'Minimum blob area should be less than or equal to minimum filter area',
'MinBlobsLtMax' => 'O minimo de Blobs deve ser menor que o maximo de blobs',
'MinBlobsUnset' => 'You must specify the minimum blob count',
'MinFilterAreaLtMax' => 'Minimum filter area should be less than maximum',
'MinFilterAreaUnset' => 'You must specify the minimum filter pixel count',
'MinFilterLtMinAlarm' => 'Minimum filter area should be less than or equal to minimum alarm area',
'MinFocusRange' => 'Min Focus Range',
'MinFocusSpeed' => 'Min Focus Speed',
'MinFocusStep' => 'Min Focus Step',
'MinGainRange' => 'Min Gain Range',
'MinGainSpeed' => 'Min Gain Speed',
'MinGainStep' => 'Min Gain Step',
'MinIrisRange' => 'Min Iris Range',
'MinIrisSpeed' => 'Min Iris Speed',
'MinIrisStep' => 'Min Iris Step',
'MinPanRange' => 'Min Pan Range',
'MinPanSpeed' => 'Min Pan Speed',
'MinPanStep' => 'Min Pan Step',
'MinPixelThresLtMax' => 'Minimum pixel threshold should be less than maximum',
'MinPixelThresUnset' => 'You must specify a minimum pixel threshold',
'MinTiltRange' => 'Min Tilt Range',
'MinTiltSpeed' => 'Min Tilt Speed',
'MinTiltStep' => 'Min Tilt Step',
'MinWhiteRange' => 'Min White Bal. Range',
'MinWhiteSpeed' => 'Min White Bal. Speed',
'MinWhiteStep' => 'Min White Bal. Step',
'MinZoomRange' => 'Min Zoom Range',
'MinZoomSpeed' => 'Min Zoom Speed',
'MinZoomStep' => 'Min Zoom Step',
'Misc' => 'Misc',
'MonitorIds' => 'Ids&nbsp;de Monitor',
'Monitor' => 'Monitor',
'MonitorPresetIntro' => 'Select an appropriate preset from the list below.<br><br>Please note that this may overwrite any values you already have configured for this monitor.<br><br>',
'MonitorPreset' => 'Monitor Preset',
'Monitors' => 'Monitores',
'Montage' => 'Montagem',
'Month' => 'Mês',
'Move' => 'Move',
'MustBeGe' => 'deve ser maior ou igual a',
'MustBeLe' => 'deve ser menor ou igual a',
'MustConfirmPassword' => 'Voce deve Confirmar a senha',
'MustSupplyPassword' => 'Voce deve informar a senha',
'MustSupplyUsername' => 'Voce deve informar nome de usuário',
'Name' => 'Nome',
'Near' => 'Near',
'Network' => 'Rede',
'NewGroup' => 'New Group',
'NewLabel' => 'New Label',
'New' => 'Novo',
'NewPassword' => 'Nova Senha',
'NewState' => 'Novo Estado',
'NewUser' => 'Novo Usuário',
'Next' => 'Próx',
'NoFramesRecorded' => 'Não há imagens gravadas neste evento',
'NoGroup' => 'No Group',
'NoneAvailable' => 'Nada disponível',
'None' => 'Nada',
'No' => 'Não',
'Normal' => 'Normal',
'NoSavedFilters' => 'SemFiltrosSalvos',
'NoStatisticsRecorded' => 'Não há estatísticas gravadas neste evento/imagem',
'Notes' => 'Notes',
'NumPresets' => 'Num Presets',
'Off' => 'Off',
'On' => 'On',
'Open' => 'Open',
'OpEq' => 'igual a',
'OpGtEq' => 'maior que ou igual a',
'OpGt' => 'maior que',
'OpIn' => 'no set',
'OpLtEq' => 'menor que ou igual a',
'OpLt' => 'menor que',
'OpMatches' => 'combina',
'OpNe' => 'diferente de',
'OpNotIn' => 'não no set',
'OpNotMatches' => 'não combina',
'OptionHelp' => 'OpçãoAjuda',
'OptionRestartWarning' => 'Reinicie o Zoneminder para que as mudanças tenham efeito',
'Options' => 'Opções',
'Order' => 'Order',
'OrEnterNewName' => 'ou defina novo nome',
'Orientation' => 'Orientação',
'Out' => 'Out',
'OverwriteExisting' => 'Sobrescrever Existente',
'Paged' => 'Paginado',
'PanLeft' => 'Pan Left',
'Pan' => 'Pan',
'PanRight' => 'Pan Right',
'PanTilt' => 'Pan/Tilt',
'Parameter' => 'Parametro',
'PasswordsDifferent' => 'A nova senha e a de confirmação são diferentes',
'Password' => 'Senha',
'Paths' => 'Caminhos',
'Pause' => 'Pause',
'PhoneBW' => 'Discada&nbsp;L/B',
'Phone' => 'Phone',
'PixelDiff' => 'Pixel Diff',
'Pixels' => 'pixels',
'PlayAll' => 'Play All',
'Play' => 'Play',
'PleaseWait' => 'Por Favor Espere',
'Point' => 'Point',
'PostEventImageBuffer' => 'Buffer de imagem pós evento',
'PreEventImageBuffer' => 'Buffer de imagem pré evento',
'PreserveAspect' => 'Preserve Aspect Ratio',
'Preset' => 'Preset',
'Presets' => 'Presets',
'Prev' => 'Ant.',
'Protocol' => 'Protocol',
'Rate' => 'Vel.',
'Real' => 'Real',
'Record' => 'Gravar',
'RefImageBlendPct' => 'Referência de imagem Blend %ge',
'Refresh' => 'Atualizar',
'RemoteHostName' => 'Nome do host remoto',
'RemoteHostPath' => 'Caminho do host remoto',
'RemoteHostPort' => 'Porta do host remoto',
'RemoteImageColours' => 'Cores de imagem remota',
'Remote' => 'Remoto',
'Rename' => 'Renomear',
'ReplayAll' => 'All Events',
'ReplayGapless' => 'Gapless Events',
'Replay' => 'Replay',
'ReplaySingle' => 'Single Event',
'Replay' => 'Ver Novamente',
'ResetEventCounts' => 'Resetar contagem de eventos',
'Reset' => 'Reset',
'Restarting' => 'Reiniciando',
'Restart' => 'Reiniciar',
'RestrictedCameraIds' => 'Ids de camera proibídos',
'RestrictedMonitors' => 'Restricted Monitors',
'ReturnDelay' => 'Return Delay',
'ReturnLocation' => 'Return Location',
'Rewind' => 'Rewind',
'RotateLeft' => 'Rotacionar à esquerda ',
'RotateRight' => 'Rotacionar à direita',
'RunMode' => 'Modo de Execução',
'Running' => 'Rodando',
'RunState' => 'Estado de Execução',
'SaveAs' => 'Salvar Como',
'SaveFilter' => 'Salvar Filtro',
'Save' => 'Salvar',
'Scale' => 'Tamanho',
'Score' => 'Score',
'Secs' => 'Segs',
'Sectionlength' => 'Tamanho de evento Fixo',
'SelectMonitors' => 'Select Monitors',
'Select' => 'Select',
'SelfIntersecting' => 'Polygon edges must not intersect',
'SetLearnPrefs' => 'Set Learn Prefs', // This can be ignored for now
'SetNewBandwidth' => 'Defina Nova L/B',
'SetPreset' => 'Set Preset',
'Set' => 'Set',
'Settings' => 'Configurações',
'ShowFilterWindow' => 'MostrarJanelaDeFiltros',
'ShowTimeline' => 'Show Timeline',
'SignalCheckColour' => 'Signal Check Colour',
'Size' => 'Size',
'Sleep' => 'Sleep',
'SortAsc' => 'Asc',
'SortBy' => 'mostrar por',
'SortDesc' => 'Desc',
'Source' => 'Origem',
'SourceType' => 'Tipo de Origem',
'SpeedHigh' => 'High Speed',
'SpeedLow' => 'Low Speed',
'SpeedMedium' => 'Medium Speed',
'Speed' => 'Speed',
'SpeedTurbo' => 'Turbo Speed',
'Start' => 'Iniciar',
'State' => 'Estado',
'Stats' => 'Status',
'Status' => 'Status',
'StepBack' => 'Step Back',
'StepForward' => 'Step Forward',
'StepLarge' => 'Large Step',
'StepMedium' => 'Medium Step',
'StepNone' => 'No Step',
'StepSmall' => 'Small Step',
'Step' => 'Step',
'Stills' => 'Imagens',
'Stop' => 'Parar',
'Stopped' => 'Parado',
'Stream' => 'Contínuo',
'StreamReplayBuffer' => 'Stream Replay Image Buffer',
'Submit' => 'Submit',
'System' => 'Sistema',
'Tele' => 'Tele',
'Thumbnail' => 'Thumbnail',
'Tilt' => 'Tilt',
'TimeDelta' => 'Tempo Delta',
'Timeline' => 'Timeline',
'TimestampLabelFormat' => 'Formato de etiqueta de tempo',
'TimestampLabelX' => 'posição de etiqueta X',
'TimestampLabelY' => 'posição de etiqueta Y',
'Timestamp' => 'Tempo',
'TimeStamp' => 'Tempo',
'Time' => 'Tempo',
'Today' => 'Today',
'Tools' => 'Ferramentas',
'TotalBrScore' => 'Score<br/>Total',
'TrackDelay' => 'Track Delay',
'TrackMotion' => 'Track Motion',
'Triggers' => 'Acionadores',
'TurboPanSpeed' => 'Turbo Pan Speed',
'TurboTiltSpeed' => 'Turbo Tilt Speed',
'Type' => 'Tipo',
'Unarchive' => 'Desarquivar',
'Units' => 'Unidades',
'Unknown' => 'Desconhecido',
'UpdateAvailable' => 'Um update ao zoneminder está disponível.',
'UpdateNotNecessary' => 'Não é necessário update.',
'Update' => 'Update',
'UseFilterExprsPost' => '&nbsp;expressões&nbsp;de&nbsp;filtragem', // This is used at the end of the phrase 'use N filter expressions'
'UseFilterExprsPre' => 'Use&nbsp;', // This is used at the beginning of the phrase 'use N filter expressions'
'UseFilter' => 'Use Filtro',
'Username' => 'Nome de Usuário',
'Users' => 'Usuários',
'User' => 'Usuário',
'Value' => 'Valor',
'VersionIgnore' => 'Ignorar esta versão',
'VersionRemindDay' => 'Lembre novamente em 1 dia',
'VersionRemindHour' => 'Lembre novamente em 1 hora',
'VersionRemindNever' => 'Nao lembrar novas versões',
'VersionRemindWeek' => 'Lembrar novamente em 1 semana',
'Version' => 'Versão',
'VideoFormat' => 'Video Format',
'VideoGenFailed' => 'Geração de Vídeo falhou!',
'VideoGenFiles' => 'Existing Video Files',
'VideoGenNoFiles' => 'No Video Files Found',
'VideoGenParms' => 'Parametros de geração de vídeo',
'VideoGenSucceeded' => 'Video Generation Succeeded!',
'VideoSize' => 'Tamanho do vídeo',
'Video' => 'Video',
'ViewAll' => 'Ver Tudo',
'ViewEvent' => 'View Event',
'ViewPaged' => 'Ver Paginado',
'View' => 'Ver',
'Wake' => 'Wake',
'WarmupFrames' => 'Imagens Desconsideradas',
'Watch' => 'Assistir',
'WebColour' => 'Web Colour',
'Web' => 'Web',
'Week' => 'Semana',
'WhiteBalance' => 'White Balance',
'White' => 'White',
'Wide' => 'Wide',
'X10ActivationString' => 'String de Ativação X10',
'X10InputAlarmString' => 'String de Entrada de alarme X10',
'X10OutputAlarmString' => 'String de Saída de Alarme X10',
'X10' => 'X10',
'X' => 'X',
'Yes' => 'Sim',
'YouNoPerms' => 'Você não tem permissões para acessar este recurso.',
'Y' => 'Y',
'ZoneAlarmColour' => 'Cor de Alarme (Red/Green/Blue)',
'ZoneArea' => 'Zone Area',
'ZoneFilterSize' => 'Filter Width/Height (pixels)',
'ZoneMinMaxAlarmArea' => 'Min/Max Alarmed Area',
'ZoneMinMaxBlobArea' => 'Min/Max Blob Area',
'ZoneMinMaxBlobs' => 'Min/Max Blobs',
'ZoneMinMaxFiltArea' => 'Min/Max Filtered Area',
'ZoneMinMaxPixelThres' => 'Min/Max Pixel Threshold (0-255)',
'ZoneOverloadFrames' => 'Overload Frame Ignore Count',
'Zones' => 'Zonas',
'Zone' => 'Zona',
'ZoomIn' => 'Zoom In',
'ZoomOut' => 'Zoom Out',
'Zoom' => 'Zoom',
);
// Complex replacements with formatting and/or placements, must be passed through sprintf
$CLANG = array(
'CurrentLogin' => 'Login atual é \'%1$s\'',
'EventCount' => '%1$s %2$s', // For example '37 Events' (from Vlang below)
'LastEvents' => 'Últimos %1$s %2$s', // For example 'Last 37 Events' (from Vlang below)
'LatestRelease' => 'A Última versão é v%1$s, você tem v%2$s.',
'MonitorCount' => '%1$s %2$s', // For example '4 Monitors' (from Vlang below)
'MonitorFunction' => 'Monitor %1$s Funcção',
'RunningRecentVer' => 'Você está usando a versão mais recente do ZoneMinder, v%s.',
);
// The next section allows you to describe a series of word ending and counts used to
// generate the correctly conjugated forms of words depending on a count that is associated
// with that word.
// This intended to allow phrases such a '0 potatoes', '1 potato', '2 potatoes' etc to
// conjugate correctly with the associated count.
// In some languages such as English this is fairly simple and can be expressed by assigning
// a count with a singular or plural form of a word and then finding the nearest (lower) value.
// So '0' of something generally ends in 's', 1 of something is singular and has no extra
// ending and 2 or more is a plural and ends in 's' also. So to find the ending for '187' of
// something you would find the nearest lower count (2) and use that ending.
//
// So examples of this would be
// $zmVlangPotato = array( 0=>'Potatoes', 1=>'Potato', 2=>'Potatoes' );
// $zmVlangSheep = array( 0=>'Sheep' );
//
// where you can have as few or as many entries in the array as necessary
// If your language is similar in form to this then use the same format and choose the
// appropriate zmVlang function below.
// If however you have a language with a different format of plural endings then another
// approach is required . For instance in Russian the word endings change continuously
// depending on the last digit (or digits) of the numerator. In this case then zmVlang
// arrays could be written so that the array index just represents an arbitrary 'type'
// and the zmVlang function does the calculation about which version is appropriate.
//
// So an example in Russian might be (using English words, and made up endings as I
// don't know any Russian!!)
// $zmVlangPotato = array( 1=>'Potati', 2=>'Potaton', 3=>'Potaten' );
//
// and the zmVlang function decides that the first form is used for counts ending in
// 0, 5-9 or 11-19 and the second form when ending in 1 etc.
//
// Variable arrays expressing plurality, see the zmVlang description above
$VLANG = array(
'Event' => array( 0=>'Events', 1=>'Event', 2=>'Events' ),
'Monitor' => array( 0=>'Monitors', 1=>'Monitor', 2=>'Monitors' ),
);
// You will need to choose or write a function that can correlate the plurality string arrays
// with variable counts. This is used to conjugate the Vlang arrays above with a number passed
// in to generate the correct noun form.
//
// In languages such as English this is fairly simple
// Note this still has to be used with printf etc to get the right formating
function zmVlang( $langVarArray, $count )
{
krsort( $langVarArray );
foreach ( $langVarArray as $key=>$value )
{
if ( abs($count) >= $key )
{
return( $value );
}
}
die( 'Error, unable to correlate variable language string' );
}
// This is an version that could be used in the Russian example above
// The rules are that the first word form is used if the count ends in
// 0, 5-9 or 11-19. The second form is used then the count ends in 1
// (not including 11 as above) and the third form is used when the
// count ends in 2-4, again excluding any values ending in 12-14.
//
// function zmVlang( $langVarArray, $count )
// {
// $secondlastdigit = substr( $count, -2, 1 );
// $lastdigit = substr( $count, -1, 1 );
// // or
// // $secondlastdigit = ($count/10)%10;
// // $lastdigit = $count%10;
//
// // Get rid of the special cases first, the teens
// if ( $secondlastdigit == 1 && $lastdigit != 0 )
// {
// return( $langVarArray[1] );
// }
// switch ( $lastdigit )
// {
// case 0 :
// case 5 :
// case 6 :
// case 7 :
// case 8 :
// case 9 :
// {
// return( $langVarArray[1] );
// break;
// }
// case 1 :
// {
// return( $langVarArray[2] );
// break;
// }
// case 2 :
// case 3 :
// case 4 :
// {
// return( $langVarArray[3] );
// break;
// }
// }
// die( 'Error, unable to correlate variable language string' );
// }
// This is an example of how the function is used in the code which you can uncomment and
// use to test your custom function.
//$monitors = array();
//$monitors[] = 1; // Choose any number
//echo sprintf( $zmClangMonitorCount, count($monitors), zmVlang( $zmVlangMonitor, count($monitors) ) );
// In this section you can override the default prompt and help texts for the options area
// These overrides are in the form show below where the array key represents the option name minus the initial ZM_
// So for example, to override the help text for ZM_LANG_DEFAULT do
$OLANG = array(
// 'LANG_DEFAULT' => array(
// 'Prompt' => "This is a new prompt for this option",
// 'Help' => "This is some new help for this option which will be displayed in the popup window when the ? is clicked"
// ),
);
?>

1239
web/lang/ro_ro.php Executable file

File diff suppressed because it is too large Load Diff

802
web/lang/ru_ru.php Normal file
View File

@ -0,0 +1,802 @@
<?php
//
// ZoneMinder web UK English language file, $Date$, $Revision$
// Copyright (C) 2003, 2004, 2005, 2006 Philip Coombes
//
// This program 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 program 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
//
// ZoneMinder Russian Translation by Borodin A.S.
// Notes for Translators
// 0. Get some credit, put your name in the line above (optional)
// 1. When composing the language tokens in your language you should try and keep to roughly the
// same length text if possible. Abbreviate where necessary as spacing is quite close in a number of places.
// 2. There are four types of string replacement
// a) Simple replacements are words or short phrases that are static and used directly. This type of
// replacement can be used 'as is'.
// b) Complex replacements involve some dynamic element being included and so may require substitution
// or changing into a different order. The token listed in this file will be passed through sprintf as
// a formatting string. If the dynamic element is a number you will usually need to use a variable
// replacement also as described below.
// c) Variable replacements are used in conjunction with complex replacements and involve the generation
// of a singular or plural noun depending on the number passed into the zmVlang function. See the
// the zmVlang section below for a further description of this.
// d) Optional strings which can be used to replace the prompts and/or help text for the Options section
// of the web interface. These are not listed below as they are quite large and held in the database
// so that they can also be used by the zmconfig.pl script. However you can build up your own list
// quite easily from the Config table in the database if necessary.
// 3. The tokens listed below are not used to build up phrases or sentences from single words. Therefore
// you can safely assume that a single word token will only be used in that context.
// 4. In new language files, or if you are changing only a few words or phrases it makes sense from a
// maintenance point of view to include the original language file and override the old definitions rather
// than copy all the language tokens across. To do this change the line below to whatever your base language
// is and uncomment it.
// require_once( 'zm_lang_en_gb.php' );
// You may need to change the character set here, if your web server does not already
// do this by default, uncomment this if required.
//
// Example
header( "Content-Type: text/html; charset=koi8-r" );
// You may need to change your locale here if your default one is incorrect for the
// language described in this file, or if you have multiple languages supported.
// If you do need to change your locale, be aware that the format of this function
// is subtlely different in versions of PHP before and after 4.3.0, see
// http://uk2.php.net/manual/en/function.setlocale.php for details.
// Also be aware that changing the whole locale may affect some floating point or decimal
// arithmetic in the database, if this is the case change only the individual locale areas
// that don't affect this rather than all at once. See the examples below.
// Finally, depending on your setup, PHP may not enjoy have multiple locales in a shared
// threaded environment, if you get funny errors it may be this.
//
// Examples
// setlocale( 'LC_ALL', 'en_GB' ); All locale settings pre-4.3.0
// setlocale( LC_ALL, 'en_GB' ); All locale settings 4.3.0 and after
// setlocale( LC_CTYPE, 'en_GB' ); Character class settings 4.3.0 and after
// setlocale( LC_TIME, 'en_GB' ); Date and time formatting 4.3.0 and after
// Simple String Replacements
$SLANG = array(
'24BitColour' => '24 ÂÉÔÎÙÊ Ã×ÅÔ',
'8BitGrey' => '256 ÏÔÔÅÎËÏ× ÓÅÒÏÇÏ',
'Action' => 'Action',
'Actual' => 'äÅÊÓÔ×ÉÔÅÌØÎÙÊ',
'AddNewControl' => 'Add New Control',
'AddNewMonitor' => 'äÏÂÁ×ÉÔØ ÍÏÎÉÔÏÒ',
'AddNewUser' => 'äÏÂÁ×ÉÔØ ÐÏÌØÚÏ×ÁÔÅÌÑ',
'AddNewZone' => 'äÏÂÁ×ÉÔØ ÚÏÎÕ',
'Alarm' => 'ôÒÅ×ÏÇÁ',
'AlarmBrFrames' => 'ëÁÄÒÙ<br/>ÔÒÅ×ÏÇÉ',
'AlarmFrame' => 'ëÁÄÒ ÔÒÅ×ÏÇÉ',
'AlarmFrameCount' => 'Alarm Frame Count',
'AlarmLimits' => 'çÒÁÎ.&nbsp;ÚÏÎÙ&nbsp;ÔÒÅ×.',
'AlarmMaximumFPS' => 'Alarm Maximum FPS',
'AlarmPx' => 'ðËÓ&nbsp;ÔÒÅ×.',
'AlarmRGBUnset' => 'You must set an alarm RGB colour',
'Alert' => 'îÁÓÔÏÒÏÖÅ',
'All' => '÷ÓÅ',
'Apply' => 'ðÒÉÍÅÎÉÔØ',
'ApplyingStateChange' => 'óÏÓÔÏÑÎÉÅ ÓÅÒ×ÉÓÁ ÉÚÍÅÎÑÅÔÓÑ',
'ArchArchived' => 'ôÏÌØËÏ × ÁÒÈÉ×Å',
'Archive' => 'áÒÈÉ×',
'Archived' => 'Archived',
'ArchUnarchived' => 'ôÏÌØËÏ ÎÅ × ÁÒÈÉ×Å',
'Area' => 'Area',
'AreaUnits' => 'Area (px/%)',
'AttrAlarmFrames' => 'ëÏÌ-×Ï ËÁÄÒÏ× ÔÒÅ×ÏÇÉ',
'AttrArchiveStatus' => 'óÔÁÔÕÓ ÁÒÈÉ×ÁÃÉÉ',
'AttrAvgScore' => 'óÒÅÄ. ÏÃÅÎËÁ',
'AttrCause' => 'Cause',
'AttrDate' => 'äÁÔÁ',
'AttrDateTime' => 'äÁÔÁ/÷ÒÅÍÑ',
'AttrDiskBlocks' => 'Disk Blocks',
'AttrDiskPercent' => 'Disk Percent',
'AttrDuration' => 'äÌÉÔÅÌØÎÏÓÔØ',
'AttrFrames' => 'ëÏÌ-×Ï ËÁÄÒÏ×',
'AttrId' => 'Id',
'AttrMaxScore' => 'íÁËÓ. ÏÃÅÎËÁ',
'AttrMonitorId' => 'Id íÏÎÉÔÏÒÁ',
'AttrMonitorName' => 'îÁÚ×ÁÎÉÅ íÏÎÉÔÏÒÁ',
'AttrMontage' => 'íÏÎÔÁÖ',
'AttrName' => 'Name',
'AttrNotes' => 'Notes',
'AttrSystemLoad' => 'System Load',
'AttrTime' => '÷ÒÅÍÑ',
'AttrTotalScore' => 'óÕÍÍ. ÏÃÅÎËÁ',
'AttrWeekday' => 'äÅÎØ ÎÅÄÅÌÉ',
'Auto' => 'Auto',
'AutoStopTimeout' => 'Auto Stop Timeout',
'AvgBrScore' => 'óÒÅÄ.<br/>ÏÃÅÎËÁ',
'Background' => 'Background',
'BackgroundFilter' => 'Run filter in background',
'BadAlarmFrameCount' => 'Alarm frame count must be an integer of one or more',
'BadAlarmMaxFPS' => 'Alarm Maximum FPS must be a positive integer or floating point value',
'BadChannel' => 'Channel must be set to an integer of zero or more',
'BadDevice' => 'Device must be set to a valid value',
'BadFormat' => 'Format must be set to an integer of zero or more',
'BadFPSReportInterval' => 'FPS report interval buffer count must be an integer of 100 or more',
'BadFrameSkip' => 'Frame skip count must be an integer of zero or more',
'BadHeight' => 'Height must be set to a valid value',
'BadHost' => 'Host must be set to a valid ip address or hostname, do not include http://',
'BadImageBufferCount' => 'Image buffer size must be an integer of 10 or more',
'BadLabelX' => 'Label X co-ordinate must be set to an integer of zero or more',
'BadLabelY' => 'Label Y co-ordinate must be set to an integer of zero or more',
'BadMaxFPS' => 'Maximum FPS must be a positive integer or floating point value',
'BadNameChars' => 'Names may only contain alphanumeric characters plus hyphen and underscore',
'BadPath' => 'Path must be set to a valid value',
'BadPort' => 'Port must be set to a valid number',
'BadPostEventCount' => 'Post event image count must be an integer of zero or more',
'BadPreEventCount' => 'Pre event image count must be at least zero, and less than image buffer size',
'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',
'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',
'BadWidth' => 'Width must be set to a valid value',
'Bandwidth' => 'ËÁÎÁÌ',
'BlobPx' => 'ðËÓ ÏÂßÅËÔÁ',
'Blobs' => 'ëÏÌ-×Ï ÏÂßÅËÔÏ×',
'BlobSizes' => 'òÁÚÍÅÒ ÏÂßÅËÔÏ×',
'Brightness' => 'ñÒËÏÓÔØ',
'Buffers' => 'âÕÆÅÒÙ',
'CanAutoFocus' => 'Can Auto Focus',
'CanAutoGain' => 'Can Auto Gain',
'CanAutoIris' => 'Can Auto Iris',
'CanAutoWhite' => 'Can Auto White Bal.',
'CanAutoZoom' => 'Can Auto Zoom',
'Cancel' => 'ïÔÍÅÎÉÔØ',
'CancelForcedAlarm' => 'ïÔÍÅÎÉÔØ ÆÏÒÓÉÒÏ×ÁÎÎÕÀ ÔÒÅ×ÏÇÕ',
'CanFocusAbs' => 'Can Focus Absolute',
'CanFocus' => 'Can Focus',
'CanFocusCon' => 'Can Focus Continuous',
'CanFocusRel' => 'Can Focus Relative',
'CanGainAbs' => 'Can Gain Absolute',
'CanGain' => 'Can Gain ',
'CanGainCon' => 'Can Gain Continuous',
'CanGainRel' => 'Can Gain Relative',
'CanIrisAbs' => 'Can Iris Absolute',
'CanIris' => 'Can Iris',
'CanIrisCon' => 'Can Iris Continuous',
'CanIrisRel' => 'Can Iris Relative',
'CanMoveAbs' => 'Can Move Absolute',
'CanMove' => 'Can Move',
'CanMoveCon' => 'Can Move Continuous',
'CanMoveDiag' => 'Can Move Diagonally',
'CanMoveMap' => 'Can Move Mapped',
'CanMoveRel' => 'Can Move Relative',
'CanPan' => 'Can Pan' ,
'CanReset' => 'Can Reset',
'CanSetPresets' => 'Can Set Presets',
'CanSleep' => 'Can Sleep',
'CanTilt' => 'Can Tilt',
'CanWake' => 'Can Wake',
'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',
'CanZoomCon' => 'Can Zoom Continuous',
'CanZoomRel' => 'Can Zoom Relative',
'CaptureHeight' => 'òÁÚÍÅÒ ÐÏ Y',
'CapturePalette' => 'òÅÖÉÍ ÚÁÈ×ÁÔÁ',
'CaptureWidth' => 'òÁÚÍÅÒ ÐÏ X',
'Cause' => 'Cause',
'CheckMethod' => 'íÅÔÏÄ ÐÒÏ×ÅÒËÉ ÔÒÅ×ÏÇÉ',
'ChooseFilter' => '÷ÙÂÒÁÔØ ÆÉÌØÔÒ',
'ChoosePreset' => 'Choose Preset',
'Close' => 'úÁËÒÙÔØ',
'Colour' => 'ã×ÅÔ',
'Command' => 'Command',
'Config' => 'Config',
'ConfiguredFor' => 'îÁÓÔÒÏÅÎ ÎÁ',
'ConfirmDeleteEvents' => 'Are you sure you wish to delete the selected events?',
'ConfirmPassword' => 'ðÏÄÔ×ÅÒÄÉÔÅ ÐÁÒÏÌØ',
'ConjAnd' => 'É',
'ConjOr' => 'ÉÌÉ',
'Console' => 'óÅÒ×ÅÒ',
'ContactAdmin' => 'ðÏÖÁÌÕÊÓÔÁ ÏÂÒÁÔÉÔÅÓØ Ë ×ÁÛÅÍÕ ÁÄÍÉÎÉÓÔÒÁÔÏÒÕ.',
'Continue' => 'Continue',
'Contrast' => 'ëÏÎÔÒÁÓÔ',
'ControlAddress' => 'Control Address',
'ControlCap' => 'Control Capability',
'ControlCaps' => 'Control Capabilities',
'Control' => 'Control',
'ControlDevice' => 'Control Device',
'Controllable' => 'Controllable',
'ControlType' => 'Control Type',
'Cycle' => 'Cycle',
'CycleWatch' => 'ãÉËÌÉÞÅÓËÉÊ ÐÒÏÓÍÏÔÒ',
'Day' => 'äÅÎØ',
'Debug' => 'Debug',
'DefaultRate' => 'Default Rate',
'DefaultScale' => 'Default Scale',
'DefaultView' => 'Default View',
'Delete' => 'õÄÁÌÉÔØ',
'DeleteAndNext' => 'õÄÁÌÉÔØ &amp; ÓÌÅÄ.',
'DeleteAndPrev' => 'õÄÁÌÉÔØ &amp; ÐÒÅÄ.',
'DeleteSavedFilter' => 'õÄÁÌÉÔØ ÓÏÈÒÁÎÅÎÎÙÊ ÆÉÌØÔÒ',
'Description' => 'ïÐÉÓÁÎÉÅ',
'DeviceChannel' => 'ëÁÎÁÌ',
'DeviceFormat' => 'æÏÒÍÁÔ',
'DeviceNumber' => 'îÏÍÅÒ ÕÓÔÒÏÊÓÔ×Á',
'DevicePath' => 'Device Path',
'Devices' => 'Devices',
'Dimensions' => 'òÁÚÍÅÒÙ',
'DisableAlarms' => 'Disable Alarms',
'Disk' => 'Disk',
'DonateAlready' => 'No, I\'ve already donated',
'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' => 'Please Donate',
'DonateRemindDay' => 'Not yet, remind again in 1 day',
'DonateRemindHour' => 'Not yet, remind again in 1 hour',
'DonateRemindMonth' => 'Not yet, remind again in 1 month',
'DonateRemindNever' => 'No, I don\'t want to donate, never remind',
'DonateRemindWeek' => 'Not yet, remind again in 1 week',
'DonateYes' => 'Yes, I\'d like to donate now',
'Download' => 'Download',
'Duration' => 'äÌÉÔÅÌØÎÏÓÔØ',
'Edit' => 'òÅÄÁËÔÉÒÏ×ÁÎÉÅ',
'Email' => 'Email',
'EnableAlarms' => 'Enable Alarms',
'Enabled' => 'ÒÁÚÒÅÛÅÎ',
'EnterNewFilterName' => '÷×ÅÄÉÔÅ ÎÏ×ÏÅ ÎÁÚ×ÁÎÉÅ ÆÉÌØÔÒÁ',
'Error' => 'ïÛÉÂËÁ',
'ErrorBrackets' => 'ïÛÉÂËÁ: ËÏÌÉÞÅÓÔ×Ï ÏÔËÒÙ×ÁÀÝÉÈ É ÚÁËÒÙ×ÁÀÝÉÈ ÓËÏÂÏË ÄÏÌÖÎÏ ÂÙÔØ ÏÄÉÎÁËÏ×ÙÍ',
'ErrorValidValue' => 'ïÛÉÂËÁ: ÐÒÏ×ÅÒØÔÅ ÞÔÏ ×ÓÅ ÔÅÒÍÙ ÉÍÅÀÔ ÄÅÊÓÔ×ÉÔÅÌØÎÏÅ ÚÎÁÞÅÎÉÅ',
'Etc' => 'É Ô.Ä.',
'Event' => 'óÏÂÙÔÉÅ',
'EventFilter' => 'æÉÌØÔÒ ÓÏÂÙÔÉÊ',
'EventId' => 'Event Id',
'EventName' => 'Event Name',
'EventPrefix' => 'Event Prefix',
'Events' => 'óÏÂÙÔÉÑ',
'Exclude' => 'éÓËÌÀÞÉÔØ',
'Execute' => 'Execute',
'ExportDetails' => 'Export Event Details',
'Export' => 'Export',
'ExportFailed' => 'Export Failed',
'ExportFormat' => 'Export File Format',
'ExportFormatTar' => 'Tar',
'ExportFormatZip' => 'Zip',
'ExportFrames' => 'Export Frame Details',
'ExportImageFiles' => 'Export Image Files',
'Exporting' => 'Exporting',
'ExportMiscFiles' => 'Export Other Files (if present)',
'ExportOptions' => 'Export Options',
'ExportVideoFiles' => 'Export Video Files (if present)',
'Far' => 'Far',
'FastForward' => 'Fast Forward',
'Feed' => 'Feed',
'FileColours' => 'File Colours',
'File' => 'File',
'FilePath' => 'File Path',
'FilterArchiveEvents' => 'Archive all matches',
'FilterDeleteEvents' => 'Delete all matches',
'FilterEmailEvents' => 'Email details of all matches',
'FilterExecuteEvents' => 'Execute command on all matches',
'FilterMessageEvents' => 'Message details of all matches',
'FilterPx' => 'ðËÓ ÆÉÌØÔÒÁ',
'Filters' => 'Filters',
'FilterUnset' => 'You must specify a filter width and height',
'FilterUploadEvents' => 'Upload all matches',
'FilterVideoEvents' => 'Create video for all matches',
'First' => 'ðÅÒ×ÙÊ',
'FlippedHori' => 'Flipped Horizontally',
'FlippedVert' => 'Flipped Vertically',
'Focus' => 'Focus',
'ForceAlarm' => '÷ËÌÀÞÉÔØ ÔÒÅ×ÏÇÕ',
'Format' => 'Format',
'FPS' => 'Ë/c',
'FPSReportInterval' => 'ðÅÒÉÏÄ ÏÂÎÏ×ÌÅÎÉÑ ÉÎÄÉËÁÃÉÉ ÓËÏÒÏÓÔÉ',
'Frame' => 'ëÁÄÒ',
'FrameId' => 'Id ËÁÄÒÁ',
'FrameRate' => 'óËÏÒÏÓÔØ',
'Frames' => 'ËÁÄÒÙ',
'FrameSkip' => 'ðÒÏÐÕÓËÁÔØ ËÁÄÒÙ',
'FTP' => 'FTP',
'Func' => 'æÕÎË.',
'Function' => 'æÕÎËÃÉÑ',
'Gain' => 'Gain',
'General' => 'General',
'GenerateVideo' => 'çÅÎÅÒÉÒÏ×ÁÔØ ×ÉÄÅÏ',
'GeneratingVideo' => 'çÅÎÅÒÉÒÕÅÔÓÑ ×ÉÄÅÏ',
'GoToZoneMinder' => 'ðÅÒÅÊÔÉ ÎÁ ZoneMinder.com',
'Grey' => 'Þ/Â',
'Group' => 'Group',
'Groups' => 'Groups',
'HasFocusSpeed' => 'Has Focus Speed',
'HasGainSpeed' => 'Has Gain Speed',
'HasHomePreset' => 'Has Home Preset',
'HasIrisSpeed' => 'Has Iris Speed',
'HasPanSpeed' => 'Has Pan Speed',
'HasPresets' => 'Has Presets',
'HasTiltSpeed' => 'Has Tilt Speed',
'HasTurboPan' => 'Has Turbo Pan',
'HasTurboTilt' => 'Has Turbo Tilt',
'HasWhiteSpeed' => 'Has White Bal. Speed',
'HasZoomSpeed' => 'Has Zoom Speed',
'High' => 'ÛÉÒÏËÉÊ',
'HighBW' => 'ûÉÒÏËÉÊ ËÁÎÁÌ',
'Home' => 'Home',
'Hour' => 'þÁÓ',
'Hue' => 'ïÔÔÅÎÏË',
'Id' => 'Id',
'Idle' => 'Idle',
'Ignore' => 'éÇÎÏÒÉÒÏ×ÁÔØ',
'Image' => 'éÚÏÂÒÁÖÅÎÉÅ',
'ImageBufferSize' => 'òÁÚÍÅÒ ÂÕÆÅÒÁ ÉÚÏÂÒÁÖÅÎÉÑ',
'Images' => 'Images',
'Include' => '÷ËÌÀÞÉÔØ',
'In' => 'In',
'Inverted' => 'éÎ×ÅÒÔÉÒÏ×ÁÔØ',
'Iris' => 'Iris',
'KeyString' => 'Key String',
'Label' => 'Label',
'Language' => 'ñÚÙË',
'Last' => 'ðÏÓÌÅÄÎÉÊ',
'LimitResultsPost' => 'results only;', // This is used at the end of the phrase 'Limit to first N results only'
'LimitResultsPre' => 'Limit to first', // This is used at the beginning of the phrase 'Limit to first N results only'
'LinkedMonitors' => 'Linked Monitors',
'List' => 'List',
'Load' => 'Load',
'Local' => 'ìÏËÁÌØÎÙÊ',
'LoggedInAs' => 'ðÏÌØÚÏ×ÁÔÅÌØ',
'LoggingIn' => '÷ÈÏÄ × ÓÉÓÔÅÍÕ',
'Login' => '÷ÏÊÔÉ',
'Logout' => '÷ÙÊÔÉ',
'Low' => 'ÕÚËÉÊ',
'LowBW' => 'õÚËÉÊ ËÁÎÁÌ',
'Main' => 'Main',
'Man' => 'Man',
'Manual' => 'Manual',
'Mark' => 'íÅÔËÁ',
'Max' => 'íÁËÓ.',
'MaxBandwidth' => 'Max Bandwidth',
'MaxBrScore' => 'íÁËÓ.<br/>ÏÃÅÎËÁ',
'MaxFocusRange' => 'Max Focus Range',
'MaxFocusSpeed' => 'Max Focus Speed',
'MaxFocusStep' => 'Max Focus Step',
'MaxGainRange' => 'Max Gain Range',
'MaxGainSpeed' => 'Max Gain Speed',
'MaxGainStep' => 'Max Gain Step',
'MaximumFPS' => 'ïÇÒÁÎÉÞÅÎÉÅ ÓËÏÒÏÓÔÉ ÚÁÐÉÓÉ (Ë/Ó)',
'MaxIrisRange' => 'Max Iris Range',
'MaxIrisSpeed' => 'Max Iris Speed',
'MaxIrisStep' => 'Max Iris Step',
'MaxPanRange' => 'Max Pan Range',
'MaxPanSpeed' => 'Max Pan Speed',
'MaxPanStep' => 'Max Pan Step',
'MaxTiltRange' => 'Max Tilt Range',
'MaxTiltSpeed' => 'Max Tilt Speed',
'MaxTiltStep' => 'Max Tilt Step',
'MaxWhiteRange' => 'Max White Bal. Range',
'MaxWhiteSpeed' => 'Max White Bal. Speed',
'MaxWhiteStep' => 'Max White Bal. Step',
'MaxZoomRange' => 'Max Zoom Range',
'MaxZoomSpeed' => 'Max Zoom Speed',
'MaxZoomStep' => 'Max Zoom Step',
'Medium' => 'ÓÒÅÄÎÉÊ',
'MediumBW' => 'ïÂÙÞÎÙÊ ËÁÎÁÌ',
'MinAlarmAreaLtMax' => 'Minimum alarm area should be less than maximum',
'MinAlarmAreaUnset' => 'You must specify the minimum alarm pixel count',
'MinBlobAreaLtMax' => 'íÉÎÉÍÁÌØÎÁÑ ÐÌÏÝÁÄØ ÏÂßÅËÔÁ ÄÏÌÖÎÁ ÂÙÔØ ÍÅÎØÛÅ ÞÅÍ ÍÁËÓÉÍÁÌØÎÁÑ ÐÌÏÝÁÄØ ÏÂßÅËÔÁ',
'MinBlobAreaUnset' => 'You must specify the minimum blob pixel count',
'MinBlobLtMinFilter' => 'Minimum blob area should be less than or equal to minimum filter area',
'MinBlobsLtMax' => 'íÉÎÉÍÁÌØÎÏÅ ÞÉÓÌÏ ÏÂßÅËÔÏ× ÄÏÌÖÎÏ ÂÙÔØ ÍÅÎØÛÅ ÞÅÍ ÍÁËÓÉÍÁÌØÎÏÅ ÞÉÓÌÏ ÏÂßÅËÔÏ×',
'MinBlobsUnset' => 'You must specify the minimum blob count',
'MinFilterAreaLtMax' => 'Minimum filter area should be less than maximum',
'MinFilterAreaUnset' => 'You must specify the minimum filter pixel count',
'MinFilterLtMinAlarm' => 'Minimum filter area should be less than or equal to minimum alarm area',
'MinFocusRange' => 'Min Focus Range',
'MinFocusSpeed' => 'Min Focus Speed',
'MinFocusStep' => 'Min Focus Step',
'MinGainRange' => 'Min Gain Range',
'MinGainSpeed' => 'Min Gain Speed',
'MinGainStep' => 'Min Gain Step',
'MinIrisRange' => 'Min Iris Range',
'MinIrisSpeed' => 'Min Iris Speed',
'MinIrisStep' => 'Min Iris Step',
'MinPanRange' => 'Min Pan Range',
'MinPanSpeed' => 'Min Pan Speed',
'MinPanStep' => 'Min Pan Step',
'MinPixelThresLtMax' => 'îÉÖÎÉÊ ÐÏÒÏÇ ËÏÌ-×Á ÐÉËÓÅÌÅÊ ÄÏÌÖÅÎ ÂÙÔØ ÎÉÖÅ ×ÅÒÈÎÅÇÏ ÐÏÒÏÇÁ ËÏÌ-×Á ÐÉËÓÅÌÅÊ',
'MinPixelThresUnset' => 'You must specify a minimum pixel threshold',
'MinTiltRange' => 'Min Tilt Range',
'MinTiltSpeed' => 'Min Tilt Speed',
'MinTiltStep' => 'Min Tilt Step',
'MinWhiteRange' => 'Min White Bal. Range',
'MinWhiteSpeed' => 'Min White Bal. Speed',
'MinWhiteStep' => 'Min White Bal. Step',
'MinZoomRange' => 'Min Zoom Range',
'MinZoomSpeed' => 'Min Zoom Speed',
'MinZoomStep' => 'Min Zoom Step',
'Misc' => 'òÁÚÎÏÅ',
'Monitor' => 'íÏÎÉÔÏÒ',
'MonitorIds' => 'Id&nbsp;íÏÎÉÔÏÒÏ×',
'MonitorPresetIntro' => 'Select an appropriate preset from the list below.<br><br>Please note that this may overwrite any values you already have configured for this monitor.<br><br>',
'MonitorPreset' => 'Monitor Preset',
'Monitors' => 'íÏÎÉÔÏÒÙ',
'Montage' => 'Montage',
'Month' => 'íÅÓÑÃ',
'Move' => 'Move',
'MustBeGe' => 'ÄÏÌÖÎÏ ÂÙÔØ ÂÏÌØÛÅ ÉÌÉ ÒÁ×ÎÏ',
'MustBeLe' => 'ÄÏÌÖÎÏ ÂÙÔØ ÍÅÎØÛÅ ÉÌÉ ÒÁ×ÎÏ',
'MustConfirmPassword' => '÷Ù ÄÏÌÖÎÙ ÐÏÄÔ×ÅÒÄÉÔØ ÐÁÒÏÌØ',
'MustSupplyPassword' => '÷Ù ÄÏÌÖÎÙ ××ÅÓÔÉ ÐÁÒÏÌØ',
'MustSupplyUsername' => '÷Ù ÄÏÌÖÎÙ ××ÅÓÔÉ ÉÍÑ ÐÏÌØÚÏ×ÁÔÅÌÑ',
'Name' => 'éÍÑ',
'Near' => 'Near',
'Network' => 'óÅÔØ',
'New' => 'îÏ×.',
'NewGroup' => 'New Group',
'NewLabel' => 'New Label',
'NewPassword' => 'îÏ×ÙÊ ÐÁÒÏÌØ',
'NewState' => 'îÏ×ÏÅ ÓÏÓÔÏÑÎÉÅ',
'NewUser' => 'îÏ×ÙÊ ÐÏÌØÚÏ×ÁÔÅÌØ',
'Next' => 'óÌÅÄ.',
'No' => 'îÅÔ',
'NoFramesRecorded' => 'üÔÏ ÓÏÂÙÔÉÅ ÎÅ ÓÏÄÅÖÉÔ ËÁÄÒÏ×',
'NoGroup' => 'No Group',
'None' => 'ÏÔÓÕÔÓÔ×ÕÅÔ',
'NoneAvailable' => 'ÎÅ ÄÏÓÔÕÐÎÙ',
'Normal' => 'îÏÒÍÁÌØÎÁÑ',
'NoSavedFilters' => 'ÎÅÔ ÓÏÈÒÁÎÅÎÎÙÈ ÆÉÌØÔÒÏ×',
'NoStatisticsRecorded' => 'óÔÁÔÉÓÔÉËÁ ÐÏ ÜÔÏÍÕ ÓÏÂÙÔÉÀ/ËÁÄÒÕ ÎÅ ÚÁÐÉÓÁÎÁ',
'Notes' => 'Notes',
'NumPresets' => 'Num Presets',
'Off' => 'Off',
'On' => 'On',
'Open' => 'Open',
'OpEq' => 'ÒÁ×ÎÏ',
'OpGt' => 'ÂÏÌØÛÅ',
'OpGtEq' => 'ÂÏÌØÛÅ ÌÉÂÏ ÒÁ×ÎÏ',
'OpIn' => '× ÓÐÉÓËÅ',
'OpLt' => 'ÍÅÎØÛÅ',
'OpLtEq' => 'ÍÅÎØÛÅ ÉÌÉ ÒÁ×ÎÏ',
'OpMatches' => 'ÓÏ×ÐÁÄÁÅÔ',
'OpNe' => 'ÎÅ ÒÁ×ÎÏ',
'OpNotIn' => 'ÎÅ × ÓÐÉÓËÅ',
'OpNotMatches' => 'ÎÅ ÓÏ×ÐÁÄÁÅÔ',
'OptionHelp' => 'OptionHelp',
'OptionRestartWarning' => 'üÔÉ ÉÚÍÅÎÅÎÉÑ ÐÏÄÅÊÓÔ×ÕÀÔ ÔÏÌØËÏ ÐÏÓÌÅ ÐÅÒÅÚÁÐÕÓËÁ ÐÒÏÇÒÁÍÍÙ.',
'Options' => 'ïÐÃÉÉ',
'Order' => 'Order',
'OrEnterNewName' => 'ÉÌÉ ××ÅÄÉÔÅ ÎÏ×ÏÅ ÉÍÑ',
'Orientation' => 'ïÒÉÅÎÔÁÃÉÑ',
'Out' => 'Out',
'OverwriteExisting' => 'ðÅÒÅÚÁÐÉÓÁÔØ ÓÕÝÅÓÔ×ÕÀÝÅÅ',
'Paged' => 'ðÏ ÓÔÒÁÎÉÃÁÍ',
'PanLeft' => 'Pan Left',
'Pan' => 'Pan',
'PanRight' => 'Pan Right',
'PanTilt' => 'Pan/Tilt',
'Parameter' => 'ðÁÒÁÍÅÒ',
'Password' => 'ðÁÒÏÌØ',
'PasswordsDifferent' => 'ðÁÒÏÌÉ ÎÅ ÓÏ×ÐÁÄÁÀÔ',
'Paths' => 'ðÕÔÉ',
'Pause' => 'Pause',
'PhoneBW' => 'ôÅÌÅÆÏÎÎÁÑ ÌÉÎÉÑ',
'Phone' => 'Phone',
'PixelDiff' => 'Pixel Diff',
'Pixels' => '× ÐÉËÓÅÌÑÈ',
'PlayAll' => 'Play All',
'Play' => 'Play',
'PleaseWait' => 'ðÏÖÁÌÕÊÓÔÁ ÐÏÄÏÖÄÉÔÅ',
'Point' => 'Point',
'PostEventImageBuffer' => 'âÕÆÅÒ ÐÏÓÌÅ ÓÏÂÙÔÉÑ',
'PreEventImageBuffer' => 'âÕÆÅÒ ÄÏ ÓÏÂÙÔÉÑ',
'PreserveAspect' => 'Preserve Aspect Ratio',
'Preset' => 'Preset',
'Presets' => 'Presets',
'Prev' => 'ðÒÅÄ.',
'Protocol' => 'Protocol',
'Rate' => 'óËÏÒÏÓÔØ',
'Real' => 'òÅÁÌØÎÁÑ',
'Record' => 'Record',
'RefImageBlendPct' => 'ðÒÏÚÒÁÞÎÏÓÔØ ÏÐÏÒÎÏÇÏ ËÁÄÒÁ, %',
'Refresh' => 'ïÂÎÏ×ÉÔØ',
'Remote' => 'õÄÁÌÅÎÎÙÊ',
'RemoteHostName' => 'éÍÑ ÕÄÁÌÅÎÎÏÇÏ ÈÏÓÔÁ',
'RemoteHostPath' => 'ðÕÔØ ÎÁ ÕÄÁÌÅÎÎÏÍ ÈÏÓÔÅ',
'RemoteHostPort' => 'ÕÄÁÌÅÎÎÙÊ ÐÏÒÔ',
'RemoteImageColours' => 'ã×ÅÔÎÏÓÔØ ÎÁ ÕÄÁÌÅÎÎÏÍ ÈÏÓÔÅ',
'Rename' => 'ðÅÒÅÉÍÅÎÏ×ÁÔØ',
'Replay' => 'ðÒÏÉÇÒÁÔØ',
'ReplayAll' => 'All Events',
'ReplayGapless' => 'Gapless Events',
'Replay' => 'Replay',
'ReplaySingle' => 'Single Event',
'ResetEventCounts' => 'ïÂÎÕÌÉÔØ ÓÞÅÔÞÉË ÓÏÂÙÔÉÊ',
'Reset' => 'Reset',
'Restart' => 'ðÅÒÅÚÁÐÕÓÔÉÔØ',
'Restarting' => 'ðÅÒÅÚÁÐÕÓËÁÅÔÓÑ',
'RestrictedCameraIds' => 'Id ÚÁÐÒÅÝÅÎÎÙÈ ËÁÍÅÒ',
'RestrictedMonitors' => 'Restricted Monitors',
'ReturnDelay' => 'Return Delay',
'ReturnLocation' => 'Return Location',
'Rewind' => 'Rewind',
'RotateLeft' => 'ðÏ×ÅÒÎÕÔØ ×ÌÅ×Ï',
'RotateRight' => 'ðÏ×ÅÒÎÕÔØ ×ÐÒÁ×Ï',
'RunMode' => 'òÅÖÉÍ ÒÁÂÏÔÙ',
'Running' => '÷ÙÐÏÌÎÑÅÔÓÑ',
'RunState' => 'óÏÓÔÏÑÎÉÅ',
'Save' => 'óÏÈÒÁÎÉÔØ',
'SaveAs' => 'óÏÈÒÁÎÉÔØ ËÁË',
'SaveFilter' => 'óÏÈÒÁÎÉÔØ ÆÉÌØÔÒ',
'Scale' => 'íÁÓÛÔÁÂ',
'Score' => 'ïÃÅÎËÁ',
'Secs' => 'óÅË.',
'Sectionlength' => 'äÌÉÎÁ ÓÅËÃÉÉ (× ËÁÄÒÁÈ)',
'SelectMonitors' => 'Select Monitors',
'Select' => 'Select',
'SelfIntersecting' => 'Polygon edges must not intersect',
'SetLearnPrefs' => 'Set Learn Prefs', // This can be ignored for now
'SetNewBandwidth' => 'õÓÔÁÎÏ×ËÁ ÎÏ×ÏÊ ÛÉÒÉÎÁ ËÁÎÁÌÁ',
'SetPreset' => 'Set Preset',
'Set' => 'Set',
'Settings' => 'îÁÓÔÒÏÊËÉ',
'ShowFilterWindow' => 'ðÏËÁÚÁÔØ ÏËÎÏ ÆÉÌØÔÒÁ',
'ShowTimeline' => 'Show Timeline',
'SignalCheckColour' => 'Signal Check Colour',
'Size' => 'Size',
'Sleep' => 'Sleep',
'SortAsc' => 'Asc',
'SortBy' => 'Sort by',
'SortDesc' => 'Desc',
'Source' => 'éÓÔÏÞÎÉË',
'SourceType' => 'ôÉÐ ÉÓÔÏÞÎÉËÁ',
'SpeedHigh' => 'High Speed',
'SpeedLow' => 'Low Speed',
'SpeedMedium' => 'Medium Speed',
'Speed' => 'Speed',
'SpeedTurbo' => 'Turbo Speed',
'Start' => 'úÁÐÕÓÔÉÔØ',
'State' => 'óÏÓÔÏÑÎÉÅ',
'Stats' => 'óÔÁÔÉÓÔÉËÁ',
'Status' => 'óÔÁÔÕÓ',
'StepBack' => 'Step Back',
'StepForward' => 'Step Forward',
'StepLarge' => 'Large Step',
'StepMedium' => 'Medium Step',
'StepNone' => 'No Step',
'StepSmall' => 'Small Step',
'Step' => 'Step',
'Stills' => 'óÔÏÐ-ËÁÄÒÙ',
'Stop' => 'ïÓÔÁÎÏ×ÉÔØ',
'Stopped' => 'ïÓÔÁÎÏ×ÌÅÎ',
'Stream' => 'ðÏÔÏË',
'StreamReplayBuffer' => 'Stream Replay Image Buffer',
'Submit' => 'Submit',
'System' => 'óÉÓÔÅÍÁ',
'Tele' => 'Tele',
'Thumbnail' => 'Thumbnail',
'Tilt' => 'Tilt',
'Time' => '÷ÒÅÍÑ',
'TimeDelta' => 'ïÔÎÏÓÉÔÅÌØÎÏÅ ×ÒÅÍÑ',
'Timeline' => 'Timeline',
'Timestamp' => 'íÅÔËÁ ×ÒÅÍÅÎÉ',
'TimeStamp' => 'íÅÔËÁ ×ÒÅÍÅÎÉ',
'TimestampLabelFormat' => 'æÏÒÍÁÔ ÍÅÔËÉ',
'TimestampLabelX' => 'X-ËÏÏÒÄÉÎÁÔÁ ÍÅÔËÉ',
'TimestampLabelY' => 'Y-ËÏÏÒÄÉÎÁÔÁ ÍÅÔËÉ',
'Today' => 'Today',
'Tools' => 'éÎÓÔÒÕÍÅÎÔÙ',
'TotalBrScore' => 'óÕÍÍ.<br/>ÏÃÅÎËÁ',
'TrackDelay' => 'Track Delay',
'TrackMotion' => 'Track Motion',
'Triggers' => 'ôÒÉÇÇÅÒÙ',
'TurboPanSpeed' => 'Turbo Pan Speed',
'TurboTiltSpeed' => 'Turbo Tilt Speed',
'Type' => 'ôÉÐ',
'Unarchive' => 'õÄ.&nbsp;ÉÚ&nbsp;ÁÒÈÉ×Á',
'Units' => 'åÄ. ÉÚÍÅÒÅÎÉÑ',
'Unknown' => 'Unknown',
'UpdateAvailable' => 'äÏÓÔÕÐÎÏ ÏÂÎÏ×ÌÅÎÉÅ ZoneMinder',
'UpdateNotNecessary' => 'ïÂÎÏ×ÌÅÎÉÅ ÎÅ ÔÒÅÂÕÅÔÓÑ',
'Update' => 'Update',
'UseFilter' => 'éÓÐÏÌØÚÏ×ÁÔØ ÆÉÌØÔÒ',
'UseFilterExprsPost' => '&nbsp;×ÙÒÁÖÅÎÉÊ&nbsp;ÄÌÑ&nbsp;ÆÉÌØÔÒÁ', // This is used at the end of the phrase 'use N filter expressions'
'UseFilterExprsPre' => 'éÓÐÏÌ.&nbsp;', // This is used at the beginning of the phrase 'use N filter expressions'
'User' => 'ðÏÌØÚÏ×ÁÔÅÌØ',
'Username' => 'éÍÑ ÐÏÌØÚÏ×ÁÔÅÌÑ',
'Users' => 'ðÏÌØÚÏ×ÁÔÅÌÉ',
'Value' => 'úÎÁÞÅÎÉÅ',
'Version' => '÷ÅÒÓÉÑ',
'VersionIgnore' => 'éÇÎÏÒÉÒÏ×ÁÔØ ÜÔÕ ×ÅÒÓÉÀ',
'VersionRemindDay' => 'îÁÐÏÍÎÉÔØ ÞÅÒÅÚ ÄÅÎØ',
'VersionRemindHour' => 'îÁÐÏÍÎÉÔØ ÞÅÒÅÚ ÞÁÓ',
'VersionRemindNever' => 'îÅ ÇÏ×ÏÒÉÔØ Ï ÎÏ×ÙÈ ×ÅÒÓÉÑÈ',
'VersionRemindWeek' => 'îÁÐÏÍÎÉÔØ ÞÅÒÅÚ ÎÅÄÅÌÀ',
'Video' => '÷ÉÄÅÏ',
'VideoFormat' => 'Video Format',
'VideoGenFailed' => 'ïÛÉÂËÁ ÇÅÎÅÒÁÃÉÉ ×ÉÄÅÏ!',
'VideoGenFiles' => 'Existing Video Files',
'VideoGenNoFiles' => 'No Video Files Found',
'VideoGenParms' => 'ðÁÒÁÍÅÔÒÙ ÇÅÎÅÒÁÃÉÉ ×ÉÄÅÏ',
'VideoGenSucceeded' => 'Video Generation Succeeded!',
'VideoSize' => 'òÁÚÍÅÒ ÉÚÏÂÒÁÖÅÎÉÑ',
'View' => 'ðÒÏÓÍÏÔÒ',
'ViewAll' => 'ðÒÏÓÍ. ×ÓÅ',
'ViewEvent' => 'View Event',
'ViewPaged' => 'ðÒÏÓÍ. ÐÏÓÔÒÁÎÉÞÎÏ',
'Wake' => 'Wake',
'WarmupFrames' => 'ëÁÄÒÙ ÒÁÚÏÇÒÅ×Á',
'Watch' => 'Watch',
'Web' => 'éÎÔÅÒÆÅÊÓ',
'WebColour' => 'Web Colour',
'Week' => 'îÅÄÅÌÑ',
'WhiteBalance' => 'White Balance',
'White' => 'White',
'Wide' => 'Wide',
'X10ActivationString' => 'X10 Activation String',
'X10InputAlarmString' => 'X10 Input Alarm String',
'X10OutputAlarmString' => 'X10 Output Alarm String',
'X10' => 'X10',
'X' => 'X',
'Yes' => 'äÁ',
'YouNoPerms' => 'õ ×ÁÓ ÎÅ ÄÏÓÔÁÔÏÞÎÏ ÐÒÁ× ÄÌÑ ÄÏÓÔÕÐÁ Ë ÜÔÏÍÕ ÒÅÓÕÒÓÕ.',
'Y' => 'Y',
'Zone' => 'úÏÎÁ',
'ZoneAlarmColour' => 'ã×ÅÔ ÔÒÅ×ÏÇÉ (Red/Green/Blue)',
'ZoneArea' => 'Zone Area',
'ZoneFilterSize' => 'Filter Width/Height (pixels)',
'ZoneMinMaxAlarmArea' => 'Min/Max Alarmed Area',
'ZoneMinMaxBlobArea' => 'Min/Max Blob Area',
'ZoneMinMaxBlobs' => 'Min/Max Blobs',
'ZoneMinMaxFiltArea' => 'Min/Max Filtered Area',
'ZoneMinMaxPixelThres' => 'Min/Max Pixel Threshold (0-255)',
'ZoneOverloadFrames' => 'Overload Frame Ignore Count',
'Zones' => 'úÏÎÙ',
'ZoomIn' => 'Zoom In',
'ZoomOut' => 'Zoom Out',
'Zoom' => 'Zoom',
);
// Complex replacements with formatting and/or placements, must be passed through sprintf
$CLANG = array(
'CurrentLogin' => 'ôÅËÕÝÉÊ ÐÏÌØÚÏ×ÁÔÅÌØ: \'%1$s\'',
'EventCount' => '%1$s %2$s', // For example '37 Events' (from Vlang below)
'LastEvents' => 'ðÏÓÌÅÄÎÉÅ %1$s %2$s', // For example 'Last 37 Events' (from Vlang below)
'LatestRelease' => 'ðÏÓÌÅÄÎÑÑ ×ÅÒÓÉÑ: v%1$s, Õ ÷ÁÓ ÕÓÔÁÎÏ×ÌÅÎÁ: v%2$s.',
'MonitorCount' => '%1$s %2$s', // For example '4 Monitors' (from Vlang below)
'MonitorFunction' => 'æÕÎËÃÉÑ ÍÏÎÉÔÏÒÁ %1$s',
'RunningRecentVer' => 'õ ×ÁÓ ÕÓÔÁÎÏ×ÌÅÎÁ ÎÏ×ÅÊÛÁÑ ×ÅÒÓÉÑ ZoneMinder, v%s.',
);
// The next section allows you to describe a series of word ending and counts used to
// generate the correctly conjugated forms of words depending on a count that is associated
// with that word.
// This intended to allow phrases such a '0 potatoes', '1 potato', '2 potatoes' etc to
// conjugate correctly with the associated count.
// In some languages such as English this is fairly simple and can be expressed by assigning
// a count with a singular or plural form of a word and then finding the nearest (lower) value.
// So '0' of something generally ends in 's', 1 of something is singular and has no extra
// ending and 2 or more is a plural and ends in 's' also. So to find the ending for '187' of
// something you would find the nearest lower count (2) and use that ending.
//
// So examples of this would be
// $zmVlangPotato = array( 0=>'Potatoes', 1=>'Potato', 2=>'Potatoes' );
// $zmVlangSheep = array( 0=>'Sheep' );
//
// where you can have as few or as many entries in the array as necessary
// If your language is similar in form to this then use the same format and choose the
// appropriate zmVlang function below.
// If however you have a language with a different format of plural endings then another
// approach is required . For instance in Russian the word endings change continuously
// depending on the last digit (or digits) of the numerator. In this case then zmVlang
// arrays could be written so that the array index just represents an arbitrary 'type'
// and the zmVlang function does the calculation about which version is appropriate.
//
// So an example in Russian might be (using English words, and made up endings as I
// don't know any Russian!!)
// $zmVlangPotato = array( 1=>'Potati', 2=>'Potaton', 3=>'Potaten' );
// --> actually, if written in 'translit', or russian words in english letters,
// the example would be ( 1=>"Kartoshek", 2=>"Katroshka", 3=>"Kartoshki"); :)
//
// and the zmVlang function decides that the first form is used for counts ending in
// 0, 5-9 or 11-19 and the second form when ending in 1 etc.
//
// Variable arrays expressing plurality, see the zmVlang description above
$VLANG = array(
'Event' => array( 1=>'óÏÂÙÔÉÊ', 2=>'óÏÂÙÔÉÅ', 3=>'óÏÂÙÔÉÑ' ),
'Monitor' => array( 1=>'íÏÎÉÔÏÒÏ×', 2=>'íÏÎÉÔÏÒ', 3=>'íÏÎÉÔÏÒÁ' ),
);
// You will need to choose or write a function that can correlate the plurality string arrays
// with variable counts. This is used to conjugate the Vlang arrays above with a number passed
// in to generate the correct noun form.
//
// In languages such as English this is fairly simple
// Note this still has to be used with printf etc to get the right formating
/*function zmVlang( $langVarArray, $count )
{
krsort( $langVarArray );
foreach ( $langVarArray as $key=>$value )
{
if ( abs($count) >= $key )
{
return( $value );
}
}
die( 'Error, unable to correlate variable language string' );
}*/
// This is an version that could be used in the Russian example above
// The rules are that the first word form is used if the count ends in
// 0, 5-9 or 11-19. The second form is used then the count ends in 1
// (not including 11 as above) and the third form is used when the
// count ends in 2-4, again excluding any values ending in 12-14.
//
function zmVlang( $langVarArray, $count )
{
$secondlastdigit = ($count/10)%10;
$lastdigit = $count%10;
// Get rid of the special cases first, the teens
if ( $secondlastdigit == 1 && $lastdigit != 0 )
{
return( $langVarArray[1] );
}
switch ( $lastdigit )
{
case 0 :
case 5 :
case 6 :
case 7 :
case 8 :
case 9 :
{
return( $langVarArray[1] );
break;
}
case 1 :
{
return( $langVarArray[2] );
break;
}
case 2 :
case 3 :
case 4 :
{
return( $langVarArray[3] );
break;
}
}
die( 'Error, unable to correlate variable language string' );
}
// This is an example of how the function is used in the code which you can uncomment and
// use to test your custom function.
//$monitors = array();
//$monitors[] = 1; // Choose any number
//echo sprintf( $zmClangMonitorCount, count($monitors), zmVlang( $zmVlangMonitor, count($monitors) ) );
// In this section you can override the default prompt and help texts for the options area
// These overrides are in the form show below where the array key represents the option name minus the initial ZM_
// So for example, to override the help text for ZM_LANG_DEFAULT do
$OLANG = array(
// 'LANG_DEFAULT' => array(
// 'Prompt' => "This is a new prompt for this option",
// 'Help' => "This is some new help for this option which will be displayed in the popup window when the ? is clicked"
// ),
);
?>

801
web/lang/se_se.php Normal file
View File

@ -0,0 +1,801 @@
<?php
//
// ZoneMinder web Swedish language file, $Date$, $Revision$
// Copyright (C) 2003, 2004, 2005, 2006 Philip Coombes
//
// This program 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 program 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
//
// ZoneMinder Swedish Translation by Mikael Carlsson
// Notes for Translators
// 0. Get some credit, put your name in the line above (optional)
// 1. When composing the language tokens in your language you should try and keep to roughly the
// same length text if possible. Abbreviate where necessary as spacing is quite close in a number of places.
// 2. There are four types of string replacement
// a) Simple replacements are words or short phrases that are static and used directly. This type of
// replacement can be used 'as is'.
// b) Complex replacements involve some dynamic element being included and so may require substitution
// or changing into a different order. The token listed in this file will be passed through sprintf as
// a formatting string. If the dynamic element is a number you will usually need to use a variable
// replacement also as described below.
// c) Variable replacements are used in conjunction with complex replacements and involve the generation
// of a singular or plural noun depending on the number passed into the zmVlang function. See the
// the zmVlang section below for a further description of this.
// d) Optional strings which can be used to replace the prompts and/or help text for the Options section
// of the web interface. These are not listed below as they are quite large and held in the database
// so that they can also be used by the zmconfig.pl script. However you can build up your own list
// quite easily from the Config table in the database if necessary.
// 3. The tokens listed below are not used to build up phrases or sentences from single words. Therefore
// you can safely assume that a single word token will only be used in that context.
// 4. In new language files, or if you are changing only a few words or phrases it makes sense from a
// maintenance point of view to include the original language file and override the old definitions rather
// than copy all the language tokens across. To do this change the line below to whatever your base language
// is and uncomment it.
// require_once( 'zm_lang_en_gb.php' );
// You may need to change the character set here, if your web server does not already
// do this by default, uncomment this if required.
//
// Example
// header( "Content-Type: text/html; charset=iso-8859-1" );
// You may need to change your locale here if your default one is incorrect for the
// language described in this file, or if you have multiple languages supported.
// If you do need to change your locale, be aware that the format of this function
// is subtlely different in versions of PHP before and after 4.3.0, see
// http://uk2.php.net/manual/en/function.setlocale.php for details.
// Also be aware that changing the whole locale may affect some floating point or decimal
// arithmetic in the database, if this is the case change only the individual locale areas
// that don't affect this rather than all at once. See the examples below.
// Finally, depending on your setup, PHP may not enjoy have multiple locales in a shared
// threaded environment, if you get funny errors it may be this.
//
// Examples
// setlocale( 'LC_ALL', 'en_GB' ); All locale settings pre-4.3.0
// setlocale( LC_ALL, 'en_GB' ); All locale settings 4.3.0 and after
// setlocale( LC_CTYPE, 'en_GB' ); Character class settings 4.3.0 and after
// setlocale( LC_TIME, 'en_GB' ); Date and time formatting 4.3.0 and after
// Simple String Replacements
$SLANG = array(
'24BitColour' => '24 bitars färg',
'8BitGrey' => '8 bit gråskala',
'Action' => 'Action',
'Actual' => 'Verklig',
'AddNewControl' => 'Ny kontroll',
'AddNewMonitor' => 'Ny bevakare',
'AddNewUser' => 'Ny användare',
'AddNewZone' => 'Ny zon',
'AlarmBrFrames' => 'Larm<br/>ramar',
'AlarmFrameCount' => 'Larmramsräknare',
'AlarmFrame' => 'Larmram',
'Alarm' => 'Larm',
'AlarmLimits' => 'Larmgränser',
'AlarmMaximumFPS' => 'Alarm Maximum FPS',
'AlarmPx' => 'Larm Pix',
'AlarmRGBUnset' => 'Du måste sätta en lam RGB färg',
'Alert' => 'Varning',
'All' => 'Alla',
'ApplyingStateChange' => 'Aktivera statusändring',
'Apply' => 'Lägg till',
'ArchArchived' => 'Arkivera endast',
'Archive' => 'Arkiv',
'Archived' => 'Arkiverad',
'ArchUnarchived' => 'Unarchived Only',
'Area' => 'Area',
'AreaUnits' => 'Area (px/%)',
'AttrAlarmFrames' => 'Larmramar',
'AttrArchiveStatus' => 'Arkivstatus',
'AttrAvgScore' => 'Ung. värde',
'AttrCause' => 'Orsak',
'AttrDate' => 'Datum',
'AttrDateTime' => 'Datum/Tid',
'AttrDiskBlocks' => 'Diskblock',
'AttrDiskPercent' => 'Diskprocent',
'AttrDuration' => 'Längd',
'AttrFrames' => 'Ramar',
'AttrId' => 'Id',
'AttrMaxScore' => 'Max. värde',
'AttrMonitorId' => 'Bevakningsid',
'AttrMonitorName' => 'Bevakningsnamn',
'AttrName' => 'Namn',
'AttrNotes' => 'Not',
'AttrSystemLoad' => 'System Load',
'AttrTime' => 'Tid',
'AttrTotalScore' => 'Totalvärde',
'AttrWeekday' => 'Veckodag',
'Auto' => 'Auto',
'AutoStopTimeout' => 'Auto Stop Timeout',
'AvgBrScore' => 'Ung.<br/>träff',
'Background' => 'Background',
'BackgroundFilter' => 'Run filter in background',
'BadAlarmFrameCount' => 'Alarm frame count must be an integer of one or more',
'BadAlarmMaxFPS' => 'Alarm Maximum FPS must be a positive integer or floating point value',
'BadChannel' => 'Channel must be set to an integer of zero or more',
'BadDevice' => 'Device must be set to a valid value',
'BadFormat' => 'Format must be set to an integer of zero or more',
'BadFPSReportInterval' => 'FPS report interval buffer count must be an integer of 100 or more',
'BadFrameSkip' => 'Frame skip count must be an integer of zero or more',
'BadHeight' => 'Height must be set to a valid value',
'BadHost' => 'Host must be set to a valid ip address or hostname, do not include http://',
'BadImageBufferCount' => 'Image buffer size must be an integer of 10 or more',
'BadLabelX' => 'Label X co-ordinate must be set to an integer of zero or more',
'BadLabelY' => 'Label Y co-ordinate must be set to an integer of zero or more',
'BadMaxFPS' => 'Maximum FPS must be a positive integer or floating point value',
'BadNameChars' => 'Namn kan endast innehålla alfanumeriska tecken, bindestreck och understreck',
'BadPath' => 'Path must be set to a valid value',
'BadPort' => 'Port must be set to a valid number',
'BadPostEventCount' => 'Post event image count must be an integer of zero or more',
'BadPreEventCount' => 'Pre event image count must be at least zero, and less than image buffer size',
'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',
'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',
'BadWidth' => 'Width must be set to a valid value',
'Bandwidth' => 'Bandbredd',
'BlobPx' => 'Blob Px',
'Blobs' => 'Blobbar',
'BlobSizes' => 'Blobstorlek',
'Brightness' => 'Ljusstyrka',
'Buffers' => 'Buffrar',
'CanAutoFocus' => 'Har autofokus',
'CanAutoGain' => 'Har autonivå',
'CanAutoIris' => 'Har autoiris',
'CanAutoWhite' => 'Har autovitbalans.',
'CanAutoZoom' => 'Har autozoom',
'CancelForcedAlarm' => 'Ångra tvingande larm',
'Cancel' => 'Ångra',
'CanFocusAbs' => 'Har absolut fokus',
'CanFocusCon' => 'har kontinuerlig fokus',
'CanFocus' => 'Har fokus',
'CanFocusRel' => 'Har relativ fokus',
'CanGainAbs' => 'Har absolut nivå',
'CanGainCon' => 'Har kontinuerlig nivå',
'CanGain' => 'Har nivå',
'CanGainRel' => 'Har relativ nivå',
'CanIrisAbs' => 'Har absolut iris',
'CanIrisCon' => 'Har kontinuerlig iris',
'CanIris' => 'Har iris',
'CanIrisRel' => 'Har relativ iris',
'CanMoveAbs' => 'Har absolut förflyttning',
'CanMoveCon' => 'Har kontinuerlig förflyttning',
'CanMoveDiag' => 'Har diagonal förflyttning',
'CanMove' => 'Har förflyttning',
'CanMoveMap' => 'Har mappad förflyttning',
'CanMoveRel' => 'Har relativ förflyttning',
'CanPan' => 'Har panorering',
'CanReset' => 'Har återställning',
'CanSetPresets' => 'Har förinställningar',
'CanSleep' => 'Kan vila',
'CanTilt' => 'Kan tilta',
'CanWake' => 'Kan vakna',
'CanWhiteAbs' => 'Har absolut vitbalans',
'CanWhiteBal' => 'Kan vitbalans',
'CanWhiteCon' => 'Kan kontinuerligt vitbalansera',
'CanWhite' => 'Kan vitbalansera',
'CanWhiteRel' => 'Kan relativt vitbalansera',
'CanZoomAbs' => 'Kan zooma absolut',
'CanZoomCon' => 'Kan zooma kontinuerligt',
'CanZoom' => 'Kan zooma',
'CanZoomRel' => 'Kan zooma realativt',
'CaptureHeight' => 'Fångsthöjd',
'CapturePalette' => 'Fångstpalett',
'CaptureWidth' => 'Fångstbredd',
'Cause' => 'Orsak',
'CheckMethod' => 'Larmkontrollmetod',
'ChooseFilter' => 'Välj filter',
'ChoosePreset' => 'Välj standard',
'Close' => 'Stäng',
'Colour' => 'Färg',
'Command' => 'Kommando',
'Config' => 'Konfigurera',
'ConfiguredFor' => 'Konfigurerad för',
'ConfirmDeleteEvents' => 'Are you sure you wish to delete the selected events?',
'ConfirmPassword' => 'Bekräfta lösenord',
'ConjAnd' => 'och',
'ConjOr' => 'eller',
'Console' => 'Konsoll',
'ContactAdmin' => 'Kontakta din administratör för detaljer.',
'Continue' => 'Fortsätt',
'Contrast' => 'Kontrast',
'ControlAddress' => 'Kontrolladress',
'ControlCap' => 'Control Capability',
'ControlCaps' => 'Control Capabilities',
'ControlDevice' => 'Kontrollenhet',
'Control' => 'Kontroll',
'Controllable' => 'Kontrollerbar',
'ControlType' => 'Kontrolltyp',
'Cycle' => 'Cycle',
'CycleWatch' => 'Cycle Watch',
'Day' => 'Dag',
'Debug' => 'Avlusa',
'DefaultRate' => 'Standard hastighet',
'DefaultScale' => 'Standardskala',
'DefaultView' => 'Default View',
'DeleteAndNext' => 'Radera &amp; Nästa',
'DeleteAndPrev' => 'Radera &amp; Föreg.',
'Delete' => 'Radera',
'DeleteSavedFilter' => 'Radera sparade filter',
'Description' => 'Beskrivning',
'DeviceChannel' => 'Enhetskanal',
'DeviceFormat' => 'Enhetsformat',
'DeviceNumber' => 'Enhetsnummer',
'DevicePath' => 'Enhetssökväg',
'Devices' => 'Devices',
'Dimensions' => 'Dimensioner',
'DisableAlarms' => 'Avaktivera larm',
'Disk' => 'Disk',
'DonateAlready' => 'Nej, Jag har redan donerat',
'DonateEnticement' => 'Du har kört ZoneMinder ett tag nu och förhoppningsvis har du sett att det fungerar bra hemma eller på ditt företag. Även om ZoneMinder är, och kommer att vara, fri programvara och öppen kallkod, så kostar det pengar att utveckla och underhålla. Om du vill hjälpa till med framtida utveckling och nya funktioner så var vanlig och bidrag med en slant. Bidragen är naturligtvis en option men mycket uppskattade och du kan bidra med precis hur mycket du vill.<br><br>Om du vill ge ett bidrag väljer du nedan eller surfar till http://www.zoneminder.com/donate.html.<br><br>Tack för att du använder ZoneMinder, glöm inte att besöka forumen på ZoneMinder.com för support och förslag om hur du får din ZoneMinder att fungera lite bättre.',
'DonateRemindDay' => 'Inte än, påminn om 1 dag',
'DonateRemindHour' => 'Inte än, påminn om en 1 timme',
'DonateRemindMonth' => 'Inte än, påminn om 1 månad',
'DonateRemindNever' => 'Nej, Jag vill inte donera, påminn mig inte mer',
'DonateRemindWeek' => 'Inte än, påminn om 1 vecka',
'Donate' => 'Var vänlig och donera',
'DonateYes' => 'Ja, jag vill gärna donera nu',
'Download' => 'Ladda ner',
'Duration' => 'Längd',
'Edit' => 'Redigera',
'Email' => 'E-post',
'EnableAlarms' => 'Aktivera larm',
'Enabled' => 'Aktiverad',
'EnterNewFilterName' => 'Mata in nytt filternamn',
'ErrorBrackets' => 'Fel, kontrollera att du har samma antal vänster som höger-hakar',
'Error' => 'Fel',
'ErrorValidValue' => 'Fel, kontrollera att alla terms har giltligt värde',
'Etc' => 'etc',
'EventFilter' => 'Händelsefilter',
'Event' => 'Händelse',
'EventId' => 'Händelse nr',
'EventName' => 'Händelsenamn',
'EventPrefix' => 'Händelseprefix',
'Events' => 'Händelser',
'Exclude' => 'Exkludera',
'Execute' => 'Execute',
'ExportDetails' => 'Exportera händelsedetaljer',
'Export' => 'Exportera',
'ExportFailed' => 'Exporten misslyckades',
'ExportFormat' => 'Exportera fileformat',
'ExportFormatTar' => 'Tar',
'ExportFormatZip' => 'Zip',
'ExportFrames' => 'Exportera ramdetaljer',
'ExportImageFiles' => 'Exportera bildfiler',
'Exporting' => 'Exporterar',
'ExportMiscFiles' => 'Exportera andra filer (om dom finns)',
'ExportOptions' => 'Konfiguera export',
'ExportVideoFiles' => 'Exportera videofiler (om dom finns)',
'Far' => 'Far',
'FastForward' => 'Fast Forward',
'Feed' => 'Matning',
'FileColours' => 'Filfärg',
'File' => 'Fil',
'FilePath' => 'Sökvag',
'FilterArchiveEvents' => 'Arkivera alla träffar',
'FilterDeleteEvents' => 'Radera alla träffar',
'FilterEmailEvents' => 'Skicka e-post med detaljer om alla träffar',
'FilterExecuteEvents' => 'Exekvera kommando på alla träffar',
'FilterMessageEvents' => 'Meddela detaljer om alla träffar',
'FilterPx' => 'Filter Px',
'Filters' => 'Filter',
'FilterUnset' => 'Du måste specificera filtrets bredd och höjd',
'FilterUploadEvents' => 'Ladda upp alla träffar',
'FilterVideoEvents' => 'Skapa video för alla träffar',
'First' => 'Först',
'FlippedHori' => 'Vänd horisontellt',
'FlippedVert' => 'Vänd vertikalt',
'Focus' => 'Fokus',
'ForceAlarm' => 'Tvinga larm',
'Format' => 'Format',
'FPS' => 'fps',
'FPSReportInterval' => 'FPS rapportintervall',
'FrameId' => 'Ram id',
'Frame' => 'Ram',
'FrameRate' => 'Ram hastighet',
'FrameSkip' => 'Hoppa över ram',
'Frames' => 'Ramar',
'FTP' => 'FTP',
'Func' => 'Funk',
'Function' => 'Funktion',
'Gain' => 'Nivå',
'General' => 'Generell',
'GenerateVideo' => 'Skapa video',
'GeneratingVideo' => 'Skapar video',
'GoToZoneMinder' => 'Gå till ZoneMinder.com',
'Grey' => 'Grå',
'Group' => 'Group',
'Groups' => 'Grupper',
'HasFocusSpeed' => 'Har focushastighet',
'HasGainSpeed' => 'Har nivåhastighet',
'HasHomePreset' => 'Har normalinställning',
'HasIrisSpeed' => 'Har irishastighet',
'HasPanSpeed' => 'Har panoramahastighet',
'HasPresets' => 'Har förinställningar',
'HasTiltSpeed' => 'Har tilthastighet',
'HasTurboPan' => 'Har turbopanorering',
'HasTurboTilt' => 'Har turbotilt',
'HasWhiteSpeed' => 'Har vitbalanshastighet',
'HasZoomSpeed' => 'Har Zoomhastighet',
'HighBW' => 'Hög&nbsp;B/W',
'High' => 'Hög',
'Home' => 'Hem',
'Hour' => 'Timme',
'Hue' => 'Hue',
'Idle' => 'Vila',
'Id' => 'nr',
'Ignore' => 'Ignorera',
'Image' => 'Bild',
'ImageBufferSize' => 'Bildbufferstorlek (ramar)',
'Images' => 'Images',
'Include' => 'Inkludera',
'In' => 'I',
'Inverted' => 'Inverterad',
'Iris' => 'Iris',
'KeyString' => 'Key String',
'Label' => 'Label',
'Language' => 'Språk',
'Last' => 'Sist',
'LimitResultsPost' => 'resultaten;', // This is used at the end of the phrase 'Limit to first N results only'
'LimitResultsPre' => 'Begränsa till första', // This is used at the beginning of the phrase 'Limit to first N results only'
'LinkedMonitors' => 'Linked Monitors',
'List' => 'Lista',
'Load' => 'Belastning',
'Local' => 'Lokal',
'LoggedInAs' => 'Inloggad som',
'LoggingIn' => 'Loggar in',
'Login' => 'Logga in',
'Logout' => 'Logga ut',
'LowBW' => 'Låg&nbsp;B/W',
'Low' => 'Låg',
'Main' => 'Huvudmeny',
'Man' => 'Man',
'Manual' => 'Manuell',
'Mark' => 'Markera',
'MaxBandwidth' => 'Max bandbredd',
'MaxBrScore' => 'Max.<br/>Score',
'MaxFocusRange' => 'Max fokusområde',
'MaxFocusSpeed' => 'Max fokushastighet',
'MaxFocusStep' => 'Max fokussteg',
'MaxGainRange' => 'Max nivåområde',
'MaxGainSpeed' => 'Max nivåhastighet',
'MaxGainStep' => 'Max nivåsteg',
'MaximumFPS' => 'Max FPS',
'MaxIrisRange' => 'Max irsiområde',
'MaxIrisSpeed' => 'Max irishastighet',
'MaxIrisStep' => 'Max irissteg',
'Max' => 'Max',
'MaxPanRange' => 'Max panoramaområde',
'MaxPanSpeed' => 'Max panoramahastighet',
'MaxPanStep' => 'Max panoramasteg',
'MaxTiltRange' => 'Max tiltområde',
'MaxTiltSpeed' => 'Max tilthastighet',
'MaxTiltStep' => 'Max tiltsteg',
'MaxWhiteRange' => 'Max vitbalansområde',
'MaxWhiteSpeed' => 'Max vitbalanshastighet',
'MaxWhiteStep' => 'Max vitbalanssteg',
'MaxZoomRange' => 'Max zoomområde',
'MaxZoomSpeed' => 'Max zoomhastighet',
'MaxZoomStep' => 'Max zoomsteg',
'MediumBW' => 'Mellan&nbsp;B/W',
'Medium' => 'Mellan',
'MinAlarmAreaLtMax' => 'Minsta larmarean skall vara mindre än största',
'MinAlarmAreaUnset' => 'Du måste ange minsta antal larmpixlar',
'MinBlobAreaLtMax' => 'Minsta blobarean skall vara mindre än högsta',
'MinBlobAreaUnset' => 'Du måste ange minsta antalet blobpixlar',
'MinBlobLtMinFilter' => 'Minsta blobarean skall vara mindre än eller lika med minsta filterarean',
'MinBlobsLtMax' => 'Minsta antalet blobbar skall vara mindre än största',
'MinBlobsUnset' => 'Du måste ange minsta antalet blobbar',
'MinFilterAreaLtMax' => 'Minsta filterarean skall vara mindre än högsta',
'MinFilterAreaUnset' => 'Du måste ange minsta antal filterpixlar',
'MinFilterLtMinAlarm' => 'Minsta filterarean skall vara mindre än eller lika med minsta larmarean',
'MinFocusRange' => 'Min fokusområde',
'MinFocusSpeed' => 'Min fokushastighet',
'MinFocusStep' => 'Min fokussteg',
'MinGainRange' => 'Min nivåområde',
'MinGainSpeed' => 'Min nivåhastighet',
'MinGainStep' => 'Min nivåsteg',
'MinIrisRange' => 'Min irisområde',
'MinIrisSpeed' => 'Min irishastighet',
'MinIrisStep' => 'Min irissteg',
'MinPanRange' => 'Min panoramaområde',
'MinPanSpeed' => 'Min panoramahastighet',
'MinPanStep' => 'Min panoramasteg',
'MinPixelThresLtMax' => 'Minsta pixel threshold skall vara mindre än högsta',
'MinPixelThresUnset' => 'Du måste ange minsta pixel threshold',
'MinTiltRange' => 'Min tiltområde',
'MinTiltSpeed' => 'Min tilthastighet',
'MinTiltStep' => 'Min tiltsteg',
'MinWhiteRange' => 'Min vitbalansområde',
'MinWhiteSpeed' => 'Min vitbalanshastighet',
'MinWhiteStep' => 'Min vitbalanssteg',
'MinZoomRange' => 'Min zoomområde',
'MinZoomSpeed' => 'Min zoomhastighet',
'MinZoomStep' => 'Min zoomsteg',
'Misc' => 'Övrigt',
'Monitor' => 'Bevakning',
'MonitorIds' => 'Bevaknings&nbsp;nr',
'MonitorPreset' => 'Förinställd bevakning',
'MonitorPresetIntro' => 'Välj en förinställning från listan.<br><br>Var medveten om att detta kan skriva över inställningar du redan gjort för denna bevakare.<br><br>',
'Monitors' => 'Bevakare',
'Montage' => 'Montera',
'Month' => 'Månad',
'Move' => 'Flytta',
'MustBeGe' => 'måste vara större än eller lika med',
'MustBeLe' => 'måste vara mindre än eller lika med',
'MustConfirmPassword' => 'Du måste bekräfta lösenordet',
'MustSupplyPassword' => 'Du måste ange ett lösenord',
'MustSupplyUsername' => 'Du måste ange ett användarnamn',
'Name' => 'Namn',
'Near' => 'Nära',
'Network' => 'Nätverk',
'NewGroup' => 'Ny grupp',
'NewLabel' => 'New Label',
'New' => 'Ny',
'NewPassword' => 'Nytt lösenord',
'NewState' => 'Nytt läge',
'NewUser' => 'Ny användare',
'Next' => 'Nästa',
'NoFramesRecorded' => 'Det finns inga ramar inspelade för denna händelse',
'NoGroup' => 'Ingen grupp',
'NoneAvailable' => 'Ingen tillgänglig',
'None' => 'Ingen',
'No' => 'Nej',
'Normal' => 'Normal',
'NoSavedFilters' => 'Inga sparade filter',
'NoStatisticsRecorded' => 'Det finns ingen statistik inspelad för denna händelse/ram',
'Notes' => 'Not.',
'NumPresets' => 'Antal förinställningar',
'Off' => 'Off',
'On' => 'On',
'Open' => 'Öppna',
'OpEq' => 'lika med',
'OpGtEq' => 'större än eller lika med',
'OpGt' => 'större än',
'OpIn' => 'in set',
'OpLtEq' => 'mindre än eller lika med',
'OpLt' => 'mindre än',
'OpMatches' => 'matchar',
'OpNe' => 'inte lika med',
'OpNotIn' => 'inte i set',
'OpNotMatches' => 'matchar inte',
'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.',
'Options' => 'Alternativ',
'Order' => 'Sortera',
'OrEnterNewName' => 'eller skriv in nytt namn',
'Orientation' => 'Orientation',
'Out' => 'Ut',
'OverwriteExisting' => 'Skriv över',
'Paged' => 'Paged',
'PanLeft' => 'Panorera vänster',
'Pan' => 'Panorera',
'PanRight' => 'Panorera höger',
'PanTilt' => 'Pan/Tilt',
'Parameter' => 'Parameter',
'Password' => 'Lösenord',
'PasswordsDifferent' => 'Lösenorden skiljer sig åt',
'Paths' => 'Sökvägar',
'Pause' => 'Pause',
'PhoneBW' => 'Mobil&nbsp;B/W',
'Phone' => 'Mobil',
'PixelDiff' => 'Pixel Diff',
'Pixels' => 'bildpunkter',
'PlayAll' => 'Visa alla',
'Play' => 'Play',
'PleaseWait' => 'Vänta...',
'Point' => 'Punkt',
'PostEventImageBuffer' => 'Post Event Image Count',
'PreEventImageBuffer' => 'Pre Event Image Count',
'PreserveAspect' => 'Preserve Aspect Ratio',
'Preset' => 'Förinställning',
'Presets' => 'Förinställningar',
'Prev' => 'Föreg.',
'Protocol' => 'Protocol',
'Rate' => 'Hastighet',
'Real' => 'Verklig',
'Record' => 'Spela in',
'RefImageBlendPct' => 'Reference Image Blend %ge',
'Refresh' => 'Uppdatera',
'Remote' => 'Fjärr',
'RemoteHostName' => 'Fjärrnamn',
'RemoteHostPath' => 'Fjärrsökväg',
'RemoteHostPort' => 'Fjärrport',
'RemoteImageColours' => 'Fjärrbildfärger',
'Rename' => 'Byt namn',
'ReplayAll' => 'All Events',
'ReplayGapless' => 'Gapless Events',
'Replay' => 'Replay',
'Replay' => 'Repris',
'ReplaySingle' => 'Single Event',
'ResetEventCounts' => 'Återställ händelseräknare',
'Reset' => 'Återställ',
'Restarting' => 'Återstartar',
'Restart' => 'Återstart',
'RestrictedCameraIds' => 'Begränsade kameranr.',
'RestrictedMonitors' => 'Restricted Monitors',
'ReturnDelay' => 'Fördröjd retur',
'ReturnLocation' => 'Återvänd till position',
'Rewind' => 'Rewind',
'RotateLeft' => 'Rotera vänster',
'RotateRight' => 'Rotera höger',
'RunMode' => 'Körläge',
'Running' => 'Körs',
'RunState' => 'Körläge',
'SaveAs' => 'Spara som',
'SaveFilter' => 'Spara filter',
'Save' => 'Spara',
'Scale' => 'Skala',
'Score' => 'Resultat',
'Secs' => 'Sek',
'Sectionlength' => 'Sektionslängd',
'SelectMonitors' => 'Select Monitors',
'Select' => 'Välj',
'SelfIntersecting' => 'Polygonändarna får inte överlappa',
'SetLearnPrefs' => 'Set Learn Prefs', // This can be ignored for now
'SetNewBandwidth' => 'Ställ in ny bandbredd',
'SetPreset' => 'Ställ in förinställning',
'Set' => 'Ställ in',
'Settings' => 'Inställningar',
'ShowFilterWindow' => 'Visa fönsterfilter',
'ShowTimeline' => 'Visa tidslinje',
'SignalCheckColour' => 'Signal Check Colour',
'Size' => 'Storlek',
'Sleep' => 'Vila',
'SortAsc' => 'Stigande',
'SortBy' => 'Sortera',
'SortDesc' => 'Fallande',
'Source' => 'Källa',
'SourceType' => 'Källtyp',
'Speed' => 'Hastighet',
'SpeedHigh' => 'Höghastighet',
'SpeedLow' => 'Låghastighet',
'SpeedMedium' => 'Normalhastighet',
'SpeedTurbo' => 'Turbohastighet',
'Start' => 'Start',
'State' => 'Läge',
'Stats' => 'Statistik',
'Status' => 'Status',
'StepBack' => 'Step Back',
'StepForward' => 'Step Forward',
'StepLarge' => 'Stora steg',
'StepMedium' => 'Normalsteg',
'StepNone' => 'Inga steg',
'StepSmall' => 'Små steg',
'Step' => 'Steg',
'Stills' => 'Stillbilder',
'Stopped' => 'Stoppad',
'Stop' => 'Stopp',
'StreamReplayBuffer' => 'Stream Replay Image Buffer',
'Stream' => 'Strömmande',
'Submit' => 'Skicka',
'System' => 'System',
'Tele' => 'Tele',
'Thumbnail' => 'Miniatyrer',
'Tilt' => 'Tilt',
'TimeDelta' => 'tidsdelta',
'Timeline' => 'Tidslinje',
'TimestampLabelFormat' => 'Format på tidsstämpel',
'TimestampLabelX' => 'Värde på tidsstämpel X',
'TimestampLabelY' => 'Värde på tidsstämpel Y',
'Timestamp' => 'Tidsstämpel',
'TimeStamp' => 'Tidsstämpel',
'Time' => 'Tid',
'Today' => 'Idag',
'Tools' => 'Verktyg',
'TotalBrScore' => 'Total<br/>Score',
'TrackDelay' => 'Spårfördröjning',
'TrackMotion' => 'Spåra rörelse',
'Triggers' => 'Triggers',
'TurboPanSpeed' => 'Turbo panoramahastighet',
'TurboTiltSpeed' => 'Turbo tilthastighet',
'Type' => 'Typ',
'Unarchive' => 'Packa upp',
'Units' => 'Enheter',
'Unknown' => 'Okänd',
'UpdateAvailable' => 'En uppdatering till ZoneMinder finns tillgänglig.',
'UpdateNotNecessary' => 'Ingen uppdatering behövs.',
'Update' => 'Uppdatera',
'UseFilter' => 'Använd filter',
'UseFilterExprsPost' => '&nbsp;filter&nbsp;expressions', // This is used at the end of the phrase 'use N filter expressions'
'UseFilterExprsPre' => 'Använd&nbsp;', // This is used at the beginning of the phrase 'use N filter expressions'
'User' => 'Användare',
'Username' => 'Användarnamn',
'Users' => 'Användare',
'Value' => 'Värde',
'VersionIgnore' => 'Ignorera denna version',
'VersionRemindDay' => 'Påminn om 1 dag',
'VersionRemindHour' => 'Påminn om 1 timme',
'VersionRemindNever' => 'Påminn inte om nya versioner',
'VersionRemindWeek' => 'Påminn om en 1 vecka',
'Version' => 'Version',
'VideoFormat' => 'Videoformat',
'VideoGenFailed' => 'Videogenereringen misslyckades!',
'VideoGenFiles' => 'Befintliga videofiler',
'VideoGenNoFiles' => 'Inga videofiler',
'VideoGenParms' => 'Inställningar för videogenerering',
'VideoGenSucceeded' => 'Videogenereringen lyckades!',
'VideoSize' => 'Videostorlek',
'Video' => 'Video',
'ViewAll' => 'Visa alla',
'ViewEvent' => 'Visa händelse',
'ViewPaged' => 'Visa Paged',
'View' => 'Visa',
'Wake' => 'Vakna',
'WarmupFrames' => 'Värm upp ramar',
'Watch' => 'Se',
'WebColour' => 'Webbfärg',
'Web' => 'Webb',
'Week' => 'Vecka',
'WhiteBalance' => 'Vitbalans',
'White' => 'Vit',
'Wide' => 'Vid',
'X10ActivationString' => 'X10 aktiveringssträng',
'X10InputAlarmString' => 'X10 larmingångssträng',
'X10OutputAlarmString' => 'X10 larmutgångssträng',
'X10' => 'X10',
'X' => 'X',
'Yes' => 'Ja',
'Y' => 'J',
'YouNoPerms' => 'Du har inte tillstånd till denna resurs.',
'ZoneAlarmColour' => 'Larmfärg (Röd/Grön/Blå)',
'ZoneArea' => 'Zonarea',
'ZoneFilterSize' => 'Filterbredd/höjd (pixlar)',
'ZoneMinMaxAlarmArea' => 'Min/Max larmarea',
'ZoneMinMaxBlobArea' => 'Min/Max blobbarea',
'ZoneMinMaxBlobs' => 'Min/Max blobbar',
'ZoneMinMaxFiltArea' => 'Min/Max filterarea',
'ZoneMinMaxPixelThres' => 'Min/Max pixel Threshold (0-255)',
'ZoneOverloadFrames' => 'Overload Frame Ignore Count',
'Zones' => 'Zoner',
'Zone' => 'Zon',
'ZoomIn' => 'Zooma in',
'ZoomOut' => 'Zooma ut',
'Zoom' => 'Zoom',
);
// Complex replacements with formatting and/or placements, must be passed through sprintf
$CLANG = array(
'CurrentLogin' => 'Aktuell inloggning är \'%1$s\'',
'EventCount' => '%1$s %2$s', // For example '37 Events' (from Vlang below)
'LastEvents' => 'Senaste %1$s %2$s', // For example 'Last 37 Events' (from Vlang below)
'LatestRelease' => 'Aktuell version är v%1$s, du har v%2$s.',
'MonitorCount' => '%1$s %2$s', // For example '4 Monitors' (from Vlang below)
'MonitorFunction' => 'Bevakare %1$s funktion',
'RunningRecentVer' => 'Du använder den senaste versionen av ZoneMinder, v%s.',
);
// The next section allows you to describe a series of word ending and counts used to
// generate the correctly conjugated forms of words depending on a count that is associated
// with that word.
// This intended to allow phrases such a '0 potatoes', '1 potato', '2 potatoes' etc to
// conjugate correctly with the associated count.
// In some languages such as English this is fairly simple and can be expressed by assigning
// a count with a singular or plural form of a word and then finding the nearest (lower) value.
// So '0' of something generally ends in 's', 1 of something is singular and has no extra
// ending and 2 or more is a plural and ends in 's' also. So to find the ending for '187' of
// something you would find the nearest lower count (2) and use that ending.
//
// So examples of this would be
// $zmVlangPotato = array( 0=>'Potatoes', 1=>'Potato', 2=>'Potatoes' );
// $zmVlangSheep = array( 0=>'Sheep' );
//
// where you can have as few or as many entries in the array as necessary
// If your language is similar in form to this then use the same format and choose the
// appropriate zmVlang function below.
// If however you have a language with a different format of plural endings then another
// approach is required . For instance in Russian the word endings change continuously
// depending on the last digit (or digits) of the numerator. In this case then zmVlang
// arrays could be written so that the array index just represents an arbitrary 'type'
// and the zmVlang function does the calculation about which version is appropriate.
//
// So an example in Russian might be (using English words, and made up endings as I
// don't know any Russian!!)
// $zmVlangPotato = array( 1=>'Potati', 2=>'Potaton', 3=>'Potaten' );
//
// and the zmVlang function decides that the first form is used for counts ending in
// 0, 5-9 or 11-19 and the second form when ending in 1 etc.
//
// Variable arrays expressing plurality, see the zmVlang description above
$VLANG = array(
'Event' => array( 0=>'Händelser', 1=>'Händelsen', 2=>'Händelserna' ),
'Monitor' => array( 0=>'Bevakare', 1=>'Bevakare', 2=>'Bevakare' ),
);
// You will need to choose or write a function that can correlate the plurality string arrays
// with variable counts. This is used to conjugate the Vlang arrays above with a number passed
// in to generate the correct noun form.
//
// In languages such as English this is fairly simple
// Note this still has to be used with printf etc to get the right formating
function zmVlang( $langVarArray, $count )
{
krsort( $langVarArray );
foreach ( $langVarArray as $key=>$value )
{
if ( abs($count) >= $key )
{
return( $value );
}
}
die( 'Fel, kan inte correlate variabel språksträng' );
}
// This is an version that could be used in the Russian example above
// The rules are that the first word form is used if the count ends in
// 0, 5-9 or 11-19. The second form is used then the count ends in 1
// (not including 11 as above) and the third form is used when the
// count ends in 2-4, again excluding any values ending in 12-14.
//
// function zmVlang( $langVarArray, $count )
// {
// $secondlastdigit = substr( $count, -2, 1 );
// $lastdigit = substr( $count, -1, 1 );
// // or
// // $secondlastdigit = ($count/10)%10;
// // $lastdigit = $count%10;
//
// // Get rid of the special cases first, the teens
// if ( $secondlastdigit == 1 && $lastdigit != 0 )
// {
// return( $langVarArray[1] );
// }
// switch ( $lastdigit )
// {
// case 0 :
// case 5 :
// case 6 :
// case 7 :
// case 8 :
// case 9 :
// {
// return( $langVarArray[1] );
// break;
// }
// case 1 :
// {
// return( $langVarArray[2] );
// break;
// }
// case 2 :
// case 3 :
// case 4 :
// {
// return( $langVarArray[3] );
// break;
// }
// }
// die( 'Error, unable to correlate variable language string' );
// }
// This is an example of how the function is used in the code which you can uncomment and
// use to test your custom function.
//$monitors = array();
//$monitors[] = 1; // Choose any number
//echo sprintf( $zmClangMonitorCount, count($monitors), zmVlang( $zmVlangMonitor, count($monitors) ) );
// In this section you can override the default prompt and help texts for the options area
// These overrides are in the form show below where the array key represents the option name minus the initial ZM_
$OLANG = array(
'LANG_DEFAULT' => array(
'Prompt' => "Välj språk för ZoneMinder",
'Help' => "ZoneMinder kan använda annat språk än engelska i menyer och texter. Välj här det språk du vill använda till ZoneMinder."
),
);
?>

6
web/skins/Makefile.am Normal file
View File

@ -0,0 +1,6 @@
AUTOMAKE_OPTIONS = gnu
SUBDIRS = \
classic \
mobile \
churchwatch

View File

@ -0,0 +1,15 @@
AUTOMAKE_OPTIONS = gnu
webdir = @WEB_PREFIX@/skins/classic
SUBDIRS = \
ajax \
css \
graphics \
includes \
js \
lang \
views
dist_web_DATA = \
skin.php

View File

@ -0,0 +1,5 @@
AUTOMAKE_OPTIONS = gnu
webdir = @WEB_PREFIX@/skins/classic/ajax
dist_web_DATA = # No files here

View File

@ -0,0 +1,8 @@
AUTOMAKE_OPTIONS = gnu
webdir = @WEB_PREFIX@/skins/classic/css
dist_web_DATA = \
skin.css \
control.css \
export.css

View File

@ -1,137 +1,3 @@
@import url(zm_html_base.css);
body {
text-align: center;
}
#container {
margin-left: auto;
margin-right: auto;
}
#menuBar {
width: 100%;
margin-top: 2px;
margin-bottom: 2px;
text-align: center;
}
#menuBar #monitorName {
position: absolute;
left: 4px;
}
#menuBar #closeWindow {
position: absolute;
right: 4px;
}
#menuBar #menuControls > span {
padding-left: 3px;
padding-right: 3px;
}
#imageFeed{
text-align: center;
}
#monitorStatus {
width: 100%;
margin-top: 3px;
margin-bottom: 2px;
text-align: center;
}
#monitorStatus #enableAlarms {
position: absolute;
left: 4px;
}
#monitorStatus #forceAlarm {
position: absolute;
right: 4px;
}
#monitorStatus #monitorState {
}
#dvrControls {
margin-top: 3px;
margin-bottom: 2px;
text-align: center;
}
#dvrControls input {
height: 20px;
width: 28px;
padding-bottom: 3px;
margin-left: 3px;
margin-right: 3px;
}
#dvrControls input[disabled] {
color: #aaaaaa;
}
#dvrControls input.active {
border: 1px solid blue;
}
#dvrControls input.inactive {
border: 1px solid green;
}
#dvrControls input.unavail {
border: 1px solid red;
}
#replayStatus {
width: 100%;
margin-top: 3px;
margin-bottom: 2px;
text-align: center;
}
#events {
width: 96%;
margin: 0 auto;
}
#eventList {
width: 100%;
}
#eventList thead td {
font-weight: bold;
}
#eventList td {
text-align: center;
}
li {
display: inline;
list-style-type: none;
}
span.alarm {
color: #DC143C;
font-weight: bold;
}
span.alert {
color: #FF8C00;
font-weight: bold;
}
#eventList tr.recent {
background-color: #B0E0E6;
}
#eventList tr.highlight {
background-color: #DCDCDC;
}
#ptzControls { #ptzControls {
vertical-align: top; vertical-align: top;
margin-top: 10px; margin-top: 10px;

View File

@ -0,0 +1,54 @@
body {
font-family: Verdana, Arial, Helvetica, sans-serif;
font-size:10px;
font-weight: normal
color: #333333;
}
table {
border-collapse: collapse;
}
th, td {
border: 1px solid #7f7fb2;
text-align: center;
padding: 2px 4px;
}
a:link {
color: #7f7fb2;
text-decoration: none
}
a:visited {
color: #7f7fb2;
text-decoration: none
}
a:hover {
color: #666699;
text-decoration: underline
}
img.thumb {
width: 40px;
}
td.monoRow {
line-height: 200%;
text-align: center;
vertical-align: middle;
}
#eventFrames tr.alarm {
background-color: #fa8072;
}
#eventFrames tr.bulk {
background-color: #cccccc;
}
#eventFrames tr.normal {
background-color: #ffffff;
}

View File

@ -0,0 +1,458 @@
/*
* ZoneMinder Base Stylesheet, $Date$, $Revision$
* Copyright (C) 2003, 2004, 2005, 2006 Philip Coombes
*
* This program 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) input[type=password], any later version.
*
* This program 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
/*
* Primary look and feel styles
*/
body {
font-family: Verdana, Arial, Helvetica, sans-serif;
font-size: 10px;
color: #333333;
font-weight: normal;
text-align: center;
}
h1 {
font-family: inherit;
font-size: 12px;
color: #000066;
font-weight: bold;
text-align: center;
}
h2 {
font-family: inherit;
font-size: 11px;
color: #000066;
font-weight: bold;
}
h3 {
font-family: inherit;
font-size: 10px;
color: #016A9D;
font-weight: bold;
}
p {
font-family: inherit;
font-size: 10px;
color: #333333;
font-weight: normal;
}
th {
font-weight: bold;
color: #016A9D;
}
a:link {
color: #7F7FB2;
text-decoration: none;
}
a:visited {
color: #7F7FB2;
text-decoration: none;
}
a:hover {
color: #666699;
text-decoration: underline;
}
label {
margin-right: 4px;
}
input,textarea,select {
border: 1px #7F7FB2 solid;
font-family: inherit;
font-size: 10px;
color: #333333;
}
input[type=text], input[type=password], textarea {
padding: 1px;
}
input.noborder {
border: 0;
}
input[disabled] {
color: #888888;
}
img.normal {
border: white solid 1px;
}
img.alarm {
border: red solid 1px;
}
hr {
height: 1px;
width: 100%;
border: 0;
color: #7f7fb2;
background-color: #7f7fb2;
}
/*
* Tabbed headings
*/
ul.tabList
{
border-bottom: #7F7FB2 solid 1px;
margin-bottom: -4px;
height: 15px;
white-space: nowrap;
padding-bottom: 1px;
text-align: left;
}
ul.tabList li
{
display: inline;
list-style: none;
font-family: inherit;
font-size: 10px;
color: #333333;
font-weight: normal;
border: #7F7FB2 solid 1px;
background: #dddddd;
text-align: center;
margin: -1px;
padding: 4px 0;
}
ul.tabList li.active {
font-weight: bold;
background-color: #ffffff;
border-left: #7F7FB2 solid 2px;
border-top: #7F7FB2 solid 2px;
border-right: #7F7FB2 solid 2px;
border-bottom: #7F7FB2 dotted 1px;
padding: 4px;
}
ul.tabList li a {
text-decoration: none;
padding: 4px;
}
ul.tabList li a:hover {
background: #eeeeee;
}
/*
* Major league table for multiple inputs or presentation
*/
#content table.major {
margin: 4px auto;
width: 100%;
border-collapse: collapse;
}
#content table.major tr.highlight {
background-color: #eeeeee;
}
#content table.major thead tr th {
padding-top: 6px;
padding-bottom: 6px;
vertical-align: middle;
}
#content table.major tfoot td {
padding-top: 6px;
padding-bottom: 6px;
vertical-align: middle;
}
#content table.major th, #content table.major td {
border: 1px solid #7f7fb2;
padding: 3px;
text-align: left;
}
#content table.major th {
vertical-align: bottom;
}
#content table.major td {
vertical-align: middle;
}
#content table.major th[scope=row] {
padding: 4px 3px 3px;
vertical-align: top;
}
#content table.major .colMark, #content table.major .colSelect {
text-align: center;
}
/*
* Lesser table for very simple forms
*/
#content table.minor {
width: 200px;
margin: 0 auto;
}
#content table.minor td {
padding: 4px;
}
#content table.minor .colLeft {
width: 50%;
text-align: right;
}
#content table.minor .colRight {
width: 50%;
text-align: left;
}
#content table.minor input[type=submit]
{
margin-top: 8px;
padding: 0 2px;
font-size: 120%;
}
/*
* Misc
*/
tr.over {
background: #EEEEEE;
}
tr.out {
background: #FFFFFF;
}
.button {
border: 1px #000000 solid;
padding: 2px 5px;
font-family: Verdana, Arial, Helvetica, sans-serif;
font-size: 12px;
font-weight: bold;
color: #FFFFFF;
background-color: #016A9D;
}
.smallbutton {
padding: 1px 2px;
font-family: Verdana, Arial, Helvetica, sans-serif;
font-size: 10px;
color: #FFFFFF;
text-align: center;
background-color: #016A9D;
}
.numbutton {
padding: 1px 2px;
width: 24px;
font-family: Verdana, Arial, Helvetica, sans-serif;
font-size: 10px;
color: #FFFFFF;
text-align: center;
background-color: #016A9D;
}
.flatbutton {
font-family: Verdana, Arial, Helvetica, sans-serif;
font-size: 10px;
color: #333333;
font-weight: normal;
padding: 1px 2px;
text-align: center;
background-color: #FFFFFF;
border: 0px;
}
.smallhead {
font-size: 10px;
color: #016A9D;
font-weight: bold;
}
.head {
font-size: 11px;
color: #000066;
font-weight: bold;
}
.bighead {
font-size: 12px;
color: #000066;
font-weight: bold;
}
.small {
font-family: inherit;
font-size: 9px;
color: #333333;
font-weight: normal;
}
/*
* Behavior classes
*/
.error {
/*font-family: Verdana, Arial, Helvetica, sans-serif;*/
font-size: 10px;
color: #DC143C;
font-weight: bold;
}
.warn {
/*font-family: Verdana, Arial, Helvetica, sans-serif;*/
font-size: 10px;
color: #FF8C00;
font-weight: bold;
}
.info {
/*font-family: Verdana, Arial, Helvetica, sans-serif;*/
font-size: 10px;
color: #688E23;
font-weight: bold;
}
.errorText {
color: #DC143C;
}
.warnText {
color: #FF8C00;
}
.infoText {
color: #688E23;
}
.disabledText {
font-style: italic;
}
/*
* Generic useful classes, especially with mootools
*/
.hidden {
display: none;
}
.invisible {
visibility: hidden;
}
.nowrap {
white-space: nowrap;
}
div.clear {
clear: both;
}
/*
* Primary layout styles
*/
#page {
width: 100%;
}
#header {
width: 96%;
line-height: 24px;
margin: 8px auto;
text-align: left;
}
#header h2 {
left: 0;
}
#headerControl {
}
#headerButtons {
float: right;
}
#headerButtons a {
margin-left: 8px;
}
#content {
width: 96%;
margin: 8px auto;
line-height: 130%;
text-align: center;
}
#content p {
margin-top: 4px;
}
#content p.textblock {
text-align: justify;
padding: 4px;
}
/*
#contentDiv {
margin: 0 auto 8px;
line-height: 140%;
text-align: center;
}
*/
#content > input[type=submit], #content > input[type=button] {
margin-top: 8px;
}
#content table input[type=submit], #content table input[type=button] {
margin-top: 0;
}
#contentButtons {
float: right;
}
#contentButtons input {
margin-left: 8px;
margin-bottom: 4px;
}
#footer {
width: 96%;
margin: 8px auto;
}

View File

@ -0,0 +1,5 @@
AUTOMAKE_OPTIONS = gnu
webdir = @WEB_PREFIX@/skins/classic/graphics
dist_web_DATA = # No files here

View File

@ -0,0 +1,11 @@
AUTOMAKE_OPTIONS = gnu
webdir = @WEB_PREFIX@/skins/classic/includes
dist_web_DATA = \
init.php \
config.php \
functions.php \
control_functions.php \
export_functions.php \
timeline_functions.php

View File

@ -0,0 +1,109 @@
<?php
//
// ZoneMinder HTML configuration file, $Date$, $Revision$
// Copyright (C) 2003, 2004, 2005, 2006 Philip Coombes
//
// This program 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 program 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
//
$rates = array(
"10000" => "100x",
"5000" => "50x",
"2500" => "25x",
"1000" => "10x",
"400" => "4x",
"200" => "2x",
"100" => $SLANG['Real'],
"50" => "1/2x",
"25" => "1/4x",
);
$scales = array(
"400" => "4x",
"300" => "3x",
"200" => "2x",
"150" => "1.5x",
"100" => $SLANG['Actual'],
"75" => "3/4x",
"50" => "1/2x",
"33" => "1/3x",
"25" => "1/4x",
);
$bwArray = array(
"high" => $SLANG['High'],
"medium" => $SLANG['Medium'],
"low" => $SLANG['Low']
);
switch ( $_COOKIE['zmBandwidth'] )
{
case "high" :
{
define( "ZM_WEB_REFRESH_MAIN", ZM_WEB_H_REFRESH_MAIN ); // How often (in seconds) the main console window refreshes
define( "ZM_WEB_REFRESH_CYCLE", ZM_WEB_H_REFRESH_CYCLE ); // How often the cycle watch windows swaps to the next monitor
define( "ZM_WEB_REFRESH_IMAGE", ZM_WEB_H_REFRESH_IMAGE ); // How often the watched image is refreshed (if not streaming)
define( "ZM_WEB_REFRESH_STATUS", ZM_WEB_H_REFRESH_STATUS ); // How often the little status frame refreshes itself in the watch window
define( "ZM_WEB_REFRESH_EVENTS", ZM_WEB_H_REFRESH_EVENTS ); // How often the event listing is refreshed in the watch window, only for recent events
define( "ZM_WEB_DEFAULT_SCALE", ZM_WEB_H_DEFAULT_SCALE ); // What the default scaling factor applied to 'live' or 'event' views is (%)
define( "ZM_WEB_DEFAULT_RATE", ZM_WEB_H_DEFAULT_RATE ); // What the default replay rate factor applied to 'event' views is (%)
define( "ZM_WEB_VIDEO_BITRATE", ZM_WEB_H_VIDEO_BITRATE ); // What the bitrate of any streamed video should be
define( "ZM_WEB_VIDEO_MAXFPS", ZM_WEB_H_VIDEO_MAXFPS ); // What the maximum frame rate of any streamed video should be
define( "ZM_WEB_SCALE_THUMBS", ZM_WEB_H_SCALE_THUMBS ); // Image scaling for thumbnails, bandwidth versus cpu in rescaling
define( "ZM_WEB_USE_STREAMS", ZM_WEB_H_USE_STREAMS ); // Whether to use streaming or stills for live and events views
define( "ZM_WEB_EVENTS_VIEW", ZM_WEB_H_EVENTS_VIEW ); // What the default view of multiple events should be.
define( "ZM_WEB_SHOW_PROGRESS", ZM_WEB_H_SHOW_PROGRESS ); // Whether to show the progress of replay in event view.
define( "ZM_WEB_AJAX_TIMEOUT", ZM_WEB_H_AJAX_TIMEOUT ); // Timeout to use for Ajax requests, no timeout used if unset
break;
}
case "medium" :
{
define( "ZM_WEB_REFRESH_MAIN", ZM_WEB_M_REFRESH_MAIN ); // How often (in seconds) the main console window refreshes
define( "ZM_WEB_REFRESH_CYCLE", ZM_WEB_M_REFRESH_CYCLE ); // How often the cycle watch windows swaps to the next monitor
define( "ZM_WEB_REFRESH_IMAGE", ZM_WEB_M_REFRESH_IMAGE ); // How often the watched image is refreshed (if not streaming)
define( "ZM_WEB_REFRESH_STATUS", ZM_WEB_M_REFRESH_STATUS ); // How often the little status frame refreshes itself in the watch window
define( "ZM_WEB_REFRESH_EVENTS", ZM_WEB_M_REFRESH_EVENTS ); // How often the event listing is refreshed in the watch window, only for recent events
define( "ZM_WEB_DEFAULT_SCALE", ZM_WEB_M_DEFAULT_SCALE ); // What the default scaling factor applied to 'live' or 'event' views is (%)
define( "ZM_WEB_DEFAULT_RATE", ZM_WEB_M_DEFAULT_RATE ); // What the default replay rate factor applied to 'event' views is (%)
define( "ZM_WEB_VIDEO_BITRATE", ZM_WEB_M_VIDEO_BITRATE ); // What the bitrate of any streamed video should be
define( "ZM_WEB_VIDEO_MAXFPS", ZM_WEB_M_VIDEO_MAXFPS ); // What the maximum frame rate of any streamed video should be
define( "ZM_WEB_SCALE_THUMBS", ZM_WEB_M_SCALE_THUMBS ); // Image scaling for thumbnails, bandwidth versus cpu in rescaling
define( "ZM_WEB_USE_STREAMS", ZM_WEB_M_USE_STREAMS ); // Whether to use streaming or stills for live and events views
define( "ZM_WEB_EVENTS_VIEW", ZM_WEB_M_EVENTS_VIEW ); // What the default view of multiple events should be.
define( "ZM_WEB_SHOW_PROGRESS", ZM_WEB_M_SHOW_PROGRESS ); // Whether to show the progress of replay in event view.
define( "ZM_WEB_AJAX_TIMEOUT", ZM_WEB_M_AJAX_TIMEOUT ); // Timeout to use for Ajax requests, no timeout used if unset
break;
}
case "low" :
{
define( "ZM_WEB_REFRESH_MAIN", ZM_WEB_L_REFRESH_MAIN ); // How often (in seconds) the main console window refreshes
define( "ZM_WEB_REFRESH_CYCLE", ZM_WEB_L_REFRESH_CYCLE ); // How often the cycle watch windows swaps to the next monitor
define( "ZM_WEB_REFRESH_IMAGE", ZM_WEB_L_REFRESH_IMAGE ); // How often the watched image is refreshed (if not streaming)
define( "ZM_WEB_REFRESH_STATUS", ZM_WEB_L_REFRESH_STATUS ); // How often the little status frame refreshes itself in the watch window
define( "ZM_WEB_REFRESH_EVENTS", ZM_WEB_L_REFRESH_EVENTS ); // How often the event listing is refreshed in the watch window, only for recent events
define( "ZM_WEB_DEFAULT_SCALE", ZM_WEB_L_DEFAULT_SCALE ); // What the default scaling factor applied to 'live' or 'event' views is (%)
define( "ZM_WEB_DEFAULT_RATE", ZM_WEB_L_DEFAULT_RATE ); // What the default replay rate factor applied to 'event' views is (%)
define( "ZM_WEB_VIDEO_BITRATE", ZM_WEB_L_VIDEO_BITRATE ); // What the bitrate of any streamed video should be
define( "ZM_WEB_VIDEO_MAXFPS", ZM_WEB_L_VIDEO_MAXFPS ); // What the maximum frame rate of any streamed video should be
define( "ZM_WEB_SCALE_THUMBS", ZM_WEB_L_SCALE_THUMBS ); // Image scaling for thumbnails, bandwidth versus cpu in rescaling
define( "ZM_WEB_USE_STREAMS", ZM_WEB_L_USE_STREAMS ); // Whether to use streaming or stills for live and events views
define( "ZM_WEB_EVENTS_VIEW", ZM_WEB_L_EVENTS_VIEW ); // What the default view of multiple events should be.
define( "ZM_WEB_SHOW_PROGRESS", ZM_WEB_L_SHOW_PROGRESS ); // Whether to show the progress of replay in event view.
define( "ZM_WEB_AJAX_TIMEOUT", ZM_WEB_L_AJAX_TIMEOUT ); // Timeout to use for Ajax requests, no timeout used if unset
break;
}
}
?>

View File

@ -0,0 +1,405 @@
<?php
//
// ZoneMinder web control function library, $Date: 2008-06-11 09:51:55 +0100 (Wed, 11 Jun 2008) $, $Revision: 2420 $
// Copyright (C) 2003, 2004, 2005, 2006 Philip Coombes
//
// This program 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 program 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
//
function getControlCommands( $monitor )
{
$cmds = array();
$cmds['Wake'] = "wake";
$cmds['Sleep'] = "sleep";
$cmds['Reset'] = "reset";
$cmds['PresetSet'] = "presetSet";
$cmds['PresetGoto'] = "presetGoto";
$cmds['PresetHome'] = "presetHome";
if ( !empty($monitor['CanZoom']) )
{
if ( $monitor['CanZoomCon'] )
$cmds['ZoomRoot'] = "zoomCon";
elseif ( $monitor['CanZoomRel'] )
$cmds['ZoomRoot'] = "zoomRel";
elseif ( $monitor['CanZoomAbs'] )
$cmds['ZoomRoot'] = "zoomAbs";
$cmds['ZoomTele'] = $cmds['ZoomRoot']."Tele";
$cmds['ZoomWide'] = $cmds['ZoomRoot']."Wide";
$cmds['ZoomStop'] = "zoomStop";
$cmds['ZoomAuto'] = "zoomAuto";
$cmds['ZoomMan'] = "zoomMan";
}
if ( !empty($monitor['CanFocus']) )
{
if ( $monitor['CanFocusCon'] )
$cmds['FocusRoot'] = "focusCon";
elseif ( $monitor['CanFocusRel'] )
$cmds['FocusRoot'] = "focusRel";
elseif ( $monitor['CanFocusAbs'] )
$cmds['FocusRoot'] = "focusAbs";
$cmds['FocusFar'] = $cmds['FocusRoot']."Far";
$cmds['FocusNear'] = $cmds['FocusRoot']."Near";
$cmds['FocusStop'] = "focusStop";
$cmds['FocusAuto'] = "focusAuto";
$cmds['FocusMan'] = "focusMan";
}
if ( !empty($monitor['CanIris']) )
{
if ( $monitor['CanIrisCon'] )
$cmds['IrisRoot'] = "irisCon";
elseif ( $monitor['CanIrisRel'] )
$cmds['IrisRoot'] = "irisRel";
elseif ( $monitor['CanIrisAbs'] )
$cmds['IrisRoot'] = "irisAbs";
$cmds['IrisOpen'] = $cmds['IrisRoot']."Open";
$cmds['IrisClose'] = $cmds['IrisRoot']."Close";
$cmds['IrisStop'] = "irisStop";
$cmds['IrisAuto'] = "irisAuto";
$cmds['IrisMan'] = "irisMan";
}
if ( !empty($monitor['CanWhite']) )
{
if ( $monitor['CanWhiteCon'] )
$cmds['WhiteRoot'] = "whiteCon";
elseif ( $monitor['CanWhiteRel'] )
$cmds['WhiteRoot'] = "whiteRel";
elseif ( $monitor['CanWhiteAbs'] )
$cmds['WhiteRoot'] = "whiteAbs";
$cmds['WhiteIn'] = $cmds['WhiteRoot']."In";
$cmds['WhiteOut'] = $cmds['WhiteRoot']."Out";
$cmds['WhiteAuto'] = "whiteAuto";
$cmds['WhiteMan'] = "whiteMan";
}
if ( !empty($monitor['CanGain']) )
{
if ( $monitor['CanGainCon'] )
$cmds['GainRoot'] = "gainCon";
elseif ( $monitor['CanGainRel'] )
$cmds['GainRoot'] = "gainRel";
elseif ( $monitor['CanGainAbs'] )
$cmds['GainRoot'] = "gainAbs";
$cmds['GainUp'] = $cmds['GainRoot']."Up";
$cmds['GainDown'] = $cmds['GainRoot']."Down";
$cmds['GainAuto'] = "gainAuto";
$cmds['GainMan'] = "gainMan";
}
if ( !empty($monitor['CanMove']) )
{
if ( $monitor['CanMoveCon'] )
{
$cmds['MoveRoot'] = "moveCon";
$cmds['Center'] = "moveStop";
}
elseif ( $monitor['CanMoveRel'] )
{
$cmds['MoveRoot'] = "moveRel";
$cmds['Center'] = $cmds['PresetHome'];
}
elseif ( $monitor['CanMoveAbs'] )
{
$cmds['MoveRoot'] = "moveAbs";
$cmds['Center'] = $cmds['PresetHome'];
}
$cmds['MoveUp'] = $cmds['MoveRoot']."Up";
$cmds['MoveDown'] = $cmds['MoveRoot']."Down";
$cmds['MoveLeft'] = $cmds['MoveRoot']."Left";
$cmds['MoveRight'] = $cmds['MoveRoot']."Right";
$cmds['MoveUpLeft'] = $cmds['MoveRoot']."UpLeft";
$cmds['MoveUpRight'] = $cmds['MoveRoot']."UpRight";
$cmds['MoveDownLeft'] = $cmds['MoveRoot']."DownLeft";
$cmds['MoveDownRight'] = $cmds['MoveRoot']."DownRight";
}
return( $cmds );
}
function controlFocus( $monitor )
{
global $cmds, $SLANG;
ob_start();
?>
<div id="focusControls">
<div><?= $SLANG['Near'] ?></div>
<div class="longArrowBtn upBtn" onclick="controlCmd('<?= $cmds['FocusNear'] ?>',event,0,-1)"></div>
<div<?php if ( $monitor['CanFocusCon'] ) { ?> onclick="controlCmd('<?= $cmds['FocusStop'] ?>')"<?php } ?>><?= $SLANG['Focus'] ?></div>
<div class="longArrowBtn downBtn" onclick="controlCmd('<?= $cmds['FocusFar'] ?>',event,0,1)"></div>
<div><?= $SLANG['Far'] ?></div>
<?php
if ( $monitor['CanAutoFocus'] )
{
?>
<div><input type="button" class="textbutton" value="<?= $SLANG['Auto'] ?>" onclick="controlCmd('<?= $cmds['FocusAuto'] ?>')"/></div>
<div><input type="button" class="textbutton" value="<?= $SLANG['Man'] ?>" onclick="controlCmd('<?= $cmds['FocusMan'] ?>')"/></div>
<?php
}
?>
</div>
<?php
return( ob_get_clean() );
}
function controlZoom( $monitor )
{
global $cmds, $SLANG;
ob_start();
?>
<div id="zoomControls">
<div><?= $SLANG['Tele'] ?></div>
<div class="longArrowBtn upBtn" onclick="controlCmd('<?= $cmds['ZoomTele'] ?>',event,0,-1)"></div>
<div<?php if ( $monitor['CanZoomCon'] ) { ?> onclick="controlCmd('<?= $cmds['ZoomStop'] ?>')"<?php } ?>><?= $SLANG['Zoom'] ?></div>
<div class="longArrowBtn downBtn" onclick="controlCmd('<?= $cmds['ZoomWide'] ?>',event,0,1)"></div>
<div><?= $SLANG['Wide'] ?></div>
<?php
if ( $monitor['CanAutoZoom'] )
{
?>
<div><input type="button" class="textbutton" value="<?= $SLANG['Auto'] ?>" onclick="controlCmd('<?= $cmds['ZoomAuto'] ?>')"/></div>
<div><input type="button" class="textbutton" value="<?= $SLANG['Man'] ?>" onclick="controlCmd('<?= $cmds['ZoomMan'] ?>')"/></div>
<?php
}
?>
</div><?php
return( ob_get_clean() );
}
function controlIris( $monitor )
{
global $cmds, $SLANG;
ob_start();
?>
<div id="irisControls">
<div><?= $SLANG['Open'] ?></div>
<div class="longArrowBtn upBtn" onclick="controlCmd('<?= $cmds['IrisOpen'] ?>',event,0,-1)"></div>
<div<?php if ( $monitor['CanIrisCon'] ) { ?> onclick="controlCmd('<?= $cmds['IrisStop'] ?>')"<?php } ?>><?= $SLANG['Iris'] ?></div>
<div class="longArrowBtn downBtn" onclick="controlCmd('<?= $cmds['IrisClose'] ?>',event,0,1)"></div>
<div><?= $SLANG['Close'] ?></div>
<?php
if ( $monitor['CanAutoIris'] )
{
?>
<div><input type="button" class="textbutton" value="<?= $SLANG['Auto'] ?>" onclick="controlCmd('<?= $cmds['IrisAuto'] ?>')"/></div>
<div><input type="button" class="textbutton" value="<?= $SLANG['Man'] ?>" onclick="controlCmd('<?= $cmds['IrisMan'] ?>')"/></div>
<?php
}
?>
</div>
<?php
return( ob_get_clean() );
}
function controlWhite( $monitor )
{
global $cmds, $SLANG;
ob_start();
?>
<div id="whiteControls">
<div><?= $SLANG['In'] ?></div>
<div class="longArrowBtn upBtn" onclick="controlCmd('<?= $cmds['WhiteIn'] ?>',event,0,-1)"></div>
<div<?php if ( $monitor['CanWhiteCon'] ) { ?> onclick="controlCmd('<?= $cmds['WhiteStop'] ?>')"<?php } ?>><?= $SLANG['White'] ?></div>
<div class="longArrowBtn downBtn" onclick="controlCmd('<?= $cmds['WhiteOut'] ?>',event,0,1)"></div>
<div><?= $SLANG['Out'] ?></div>
<?php
if ( $monitor['CanAutoWhite'] )
{
?>
<div><input type="button" class="textbutton" value="<?= $SLANG['Auto'] ?>" onclick="controlCmd('<?= $cmds['WhiteAuto'] ?>')"/></div>
<div><input type="button" class="textbutton" value="<?= $SLANG['Man'] ?>" onclick="controlCmd('<?= $cmds['WhiteMan'] ?>')"/></div>
<?php
}
?>
</div>
<?php
return( ob_get_clean() );
}
function controlPanTilt( $monitor )
{
global $cmds, $SLANG;
ob_start();
?>
<div id="pantiltControls">
<div><?= $SLANG['PanTilt'] ?></div>
<div id="pantiltButtons">
<?php
if ( $monitor['CanTilt'] )
{
if ( $monitor['CanPan'] )
{
if ( $monitor['CanMoveDiag'] )
{
?>
<div id="upLeftBtn" class="arrowBtn" onclick="controlCmd('<?= $cmds['MoveUpLeft'] ?>',event,-1,-1)"></div>
<?php
}
}
?>
<div id="upBtn" class="arrowBtn" onclick="controlCmd('<?= $cmds['MoveUp'] ?>',event,0,-1)"></div>
<?php
if ( $monitor['CanPan'] )
{
if ( $monitor['CanMoveDiag'] )
{
?>
<div id="upRightBtn" class="arrowBtn" onclick="controlCmd('<?= $cmds['MoveUpRight'] ?>',event,1,-1)"></div>
<?php
}
}
}
if ( $monitor['CanPan'] )
{
?>
<div id="leftBtn" class="arrowBtn" onclick="controlCmd('<?= $cmds['MoveLeft'] ?>',event,-1,0)"></div>
<?php
}
?>
<div id="centerBtn" class="arrowBtn" onclick="controlCmd('<?= $cmds['Center'] ?>')"></div>
<?php
if ( $monitor['CanPan'] )
{
?>
<div id="rightBtn" class="arrowBtn" onclick="controlCmd('<?= $cmds['MoveRight'] ?>',event,1,0)"></div>
<?php
}
if ( $monitor['CanTilt'] )
{
if ( $monitor['CanPan'] )
{
if ( $monitor['CanMoveDiag'] )
{
?>
<div id="downLeftBtn" class="arrowBtn" onclick="controlCmd('<?= $cmds['MoveDownLeft'] ?>',event,-1,1)"></div>
<?php
}
}
?>
<div id="downBtn" class="arrowBtn" onclick="controlCmd('<?= $cmds['MoveDown'] ?>',event,0,1)"></div>
<?php
if ( $monitor['CanPan'] )
{
if ( $monitor['CanMoveDiag'] )
{
?>
<div id="downRightBtn" class="arrowBtn" onclick="controlCmd('<?= $cmds['MoveDownRight'] ?>',event,1,1)"></div>
<?php
}
}
}
?>
</div>
</div>
<?php
return( ob_get_clean() );
}
function controlPresets( $monitor )
{
global $cmds, $SLANG;
define( "MAX_PRESETS", "12" );
$sql = "select * from ControlPresets where MonitorId = '".$monitor['Id']."'";
$labels = array();
foreach( dbFetchAll( $sql ) as $row )
{
$labels[$row['Preset']] = $row['Label'];
}
$preset_break = (int)(($monitor['NumPresets']+1)/((int)(($monitor['NumPresets']-1)/MAX_PRESETS)+1));
ob_start();
?>
<div id="presetControls">
<div><?= $SLANG['Presets'] ?></div>
<div>
<?php
for ( $i = 1; $i <= $monitor['NumPresets']; $i++ )
{
?><input type="button" class="numbutton" title="<?= isset($labels[$i])?$labels[$i]:"" ?>" value="<?= $i ?>" onclick="controlCmd('<?= $cmds['PresetGoto'] ?><?=$i?>');"/><?php (($i%$preset_break)==0)?"<br/>":"&nbsp;&nbsp;" ?><?php
if ( $i && (($i%$preset_break) == 0) )
{
?><br/><?php
}
}
?>
</div>
<div>
<?php
if ( $monitor['HasHomePreset'] )
{
?>
<span><input type="button" class="textbutton" value="<?= $SLANG['Home'] ?>" onclick="controlCmd('<?= $cmds['PresetHome'] ?>');"/></span>
<?php
}
if ( canEdit( 'Monitors') && $monitor['CanSetPresets'] )
{
?>
<span><input type="button" class="textbutton" value="<?= $SLANG['Set'] ?>" onclick="createPopup( '?view=controlpreset&mid=<?= $monitor['Id'] ?>', 'zmPreset', 'preset' );"/></span>
<?php
}
?>
</div>
</div>
<?php
return( ob_get_clean() );
}
function controlPower( $monitor )
{
global $cmds, $SLANG;
ob_start();
?>
<div id="powerControls">
<div><?= $SLANG['Control'] ?></div>
<div>
<?php
if ( $monitor['CanWake'] )
{
?>
<span><input type="button" class="textbutton" value="<?= $SLANG['Wake'] ?>" onclick="controlCmd('<?= $cmds['Wake'] ?>')"/></span>
<?php
}
if ( $monitor['CanSleep'] )
{
?>
<span><input type="button" class="textbutton" value="<?= $SLANG['Sleep'] ?>" onclick="controlCmd('<?= $cmds['Sleep'] ?>')"/></span>
<?php
}
if ( $monitor['CanReset'] )
{
?>
<span><input type="button" class="textbutton" value="<?= $SLANG['Reset'] ?>" onclick="controlCmd('<?= $cmds['Reset'] ?>')"/></span>
<?php
}
?>
</div>
</div>
<?php
return( ob_get_clean() );
}

View File

@ -0,0 +1,307 @@
<?php
//
// ZoneMinder web export function library, $Date$, $Revision$
// Copyright (C) 2003, 2004, 2005, 2006 Philip Coombes
//
// This program 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 program 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
//
function exportHeader( $title )
{
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title><?= $title ?></title>
<style type="text/css">
<!--
<?php include( 'zm_export.css' ); ?>
-->
</style>
</head>
<?php
}
function exportEventDetail( $event, $exportFrames )
{
global $SLANG;
ob_start();
exportHeader( $SLANG['Event']." ".$event['Id'] );
?>
<body>
<div id="page">
<div id="content">
<h2><?= $SLANG['Event'] ?>: <?= $event['Name'] ?><?php if ( $exportFrames ) { ?> (<a href="zmEventFrames.html"><?= $SLANG['Frames'] ?></a>)<?php } ?></h2>
<table id="eventDetail">
<tr><th scope="row"><?= $SLANG['Id'] ?></th><td><?= $event['Id'] ?></td></tr>
<tr><th scope="row"><?= $SLANG['Name'] ?></th><td><?= $event['Name'] ?></td></tr>
<tr><th scope="row"><?= $SLANG['Monitor'] ?></th><td><?= $event['MonitorName'] ?> (<?= $event['MonitorId'] ?>)</td></tr>
<tr><th scope="row"><?= $SLANG['Cause'] ?></th><td><?= $event['Cause'] ?></td></tr>
<tr><th scope="row"><?= $SLANG['Notes'] ?></th><td><?= $event['Notes'] ?></td></tr>
<tr><th scope="row"><?= $SLANG['Time'] ?></th><td><?= strftime( STRF_FMT_DATETIME_SHORTER, strtotime($event['StartTime']) ) ?></td></tr>
<tr><th scope="row"><?= $SLANG['Duration'] ?></th><td><?= $event['Length'] ?></td></tr>
<tr><th scope="row"><?= $SLANG['Frames'] ?></th><td><?= $event['Frames'] ?></td></tr>
<tr><th scope="row"><?= $SLANG['AttrAlarmFrames'] ?></th><td><?= $event['AlarmFrames'] ?></td></tr>
<tr><th scope="row"><?= $SLANG['AttrTotalScore'] ?></th><td><?= $event['TotScore'] ?></td></tr>
<tr><th scope="row"><?= $SLANG['AttrAvgScore'] ?></th><td><?= $event['AvgScore'] ?></td></tr>
<tr><th scope="row"><?= $SLANG['AttrMaxScore'] ?></th><td><?= $event['MaxScore'] ?></td></tr>
<tr><th scope="row"><?= $SLANG['Archived'] ?></th><td><?= $event['Archived']?$SLANG['Yes']:$SLANG['No'] ?></td></tr>
</table>
</div>
</div>
</body>
</html>
<?php
return( ob_get_clean() );
}
function exportEventFrames( $event, $exportImages )
{
global $SLANG;
$sql = "select *, unix_timestamp( TimeStamp ) as UnixTimeStamp from Frames where EventID = '".$event['Id']."' order by FrameId";
$frames = dbFetchAll( $sql );
ob_start();
exportHeader( $SLANG['Frames']." ".$event['Id'] );
?>
<body>
<div id="page">
<div id="content">
<h2><?= $SLANG['Frames'] ?>: <?= $event['Name'] ?> (<a href="zmEventDetail.html"><?= $SLANG['Event'] ?></a>)</h2>
<table id="eventFrames">
<tr>
<th><?= $SLANG['FrameId'] ?></th>
<th><?= $SLANG['Type'] ?></th>
<th><?= $SLANG['TimeStamp'] ?></th>
<th><?= $SLANG['TimeDelta'] ?></th>
<th><?= $SLANG['Score'] ?></th>
<?php
if ( $exportImages )
{
?>
<th><?= $SLANG['Image'] ?></th>
<?php
}
?>
</tr>
<?php
if ( count($frames) )
{
$eventPath = getEventPath( $event );
foreach ( $frames as $frame )
{
$imageFile = sprintf( "%0".ZM_EVENT_IMAGE_DIGITS."d-capture.jpg", $frame['FrameId'] );
$imagePath = $eventPath."/".$imageFile;
$analImage = preg_replace( "/capture/", "analyse", $imagePath );
if ( file_exists( $analImage ) )
{
$imageFile = preg_replace( "/capture/", "analyse", $imageFile );
}
$class = strtolower($frame['Type']);
?>
<tr class="<?= $class ?>">
<td><?= $frame['FrameId'] ?></td>
<td><?= $frame['Type'] ?></td>
<td><?= strftime( STRF_FMT_TIME, $frame['UnixTimeStamp'] ) ?></td>
<td><?= number_format( $frame['Delta'], 2 ) ?></td>
<td><?= $frame['Score'] ?></td>
<?php
if ( $exportImages )
{
?>
<td><a href="<?= $imageFile ?>" target="zmExportImage"><img src="<?= $imageFile ?>" border="0" class="thumb" alt="Frame <?= $frame['FrameId'] ?>"/></a></td>
<?php
}
?>
</tr>
<?php
}
}
else
{
?>
<tr>
<td class="monoRow" colspan="<?= $exportImages?6:5 ?>"><?= $SLANG['NoFramesRecorded'] ?></td>
</tr>
<?php
}
?>
</table>
</div>
</div>
</body>
</html>
<?php
return( ob_get_clean() );
}
function exportFileList( $eid, $exportDetail, $exportFrames, $exportImages, $exportVideo, $exportMisc )
{
if ( canView( 'Events' ) && $eid )
{
$sql = "select E.Id,E.MonitorId,M.Name As MonitorName,M.Width,M.Height,E.Name,E.Cause,E.Notes,E.StartTime,E.Length,E.Frames,E.AlarmFrames,E.TotScore,E.AvgScore,E.MaxScore,E.Archived from Monitors as M inner join Events as E on (M.Id = E.MonitorId) where E.Id = '$eid'";
$event = dbFetchOne( $sql );
$eventPath = getEventPath( $event );
$files = array();
if ( $dir = opendir( $eventPath ) )
{
while ( ($file = readdir( $dir )) !== false )
{
if ( is_file( $eventPath."/".$file ) )
{
$files[$file] = $file;
}
}
closedir( $dir );
}
$exportFileList = array();
if ( $exportDetail )
{
$file = "zmEventDetail.html";
if ( !($fp = fopen( $eventPath."/".$file, "w" )) )
{
die( "Can't open event detail export file '$file'" );
}
fwrite( $fp, exportEventDetail( $event, $exportFrames ) );
fclose( $fp );
$exportFileList[$file] = $eventPath."/".$file;
}
if ( $exportFrames )
{
$file = "zmEventFrames.html";
if ( !($fp = fopen( $eventPath."/".$file, "w" )) )
{
die( "Can't open event frames export file '$file'" );
}
fwrite( $fp, exportEventFrames( $event, $exportImages ) );
fclose( $fp );
$exportFileList[$file] = $eventPath."/".$file;
}
if ( $exportImages )
{
$filesLeft = array();
foreach ( $files as $file )
{
if ( preg_match( "/-(?:capture|analyse).jpg$/", $file ) )
{
$exportFileList[$file] = $eventPath."/".$file;
}
else
{
$filesLeft[$file] = $file;
}
}
$files = $filesLeft;
}
if ( $exportVideo )
{
$filesLeft = array();
foreach ( $files as $file )
{
if ( preg_match( "/\.(?:mpg|mpeg|avi|asf|3gp)$/", $file ) )
{
$exportFileList[$file] = $eventPath."/".$file;
}
else
{
$filesLeft[$file] = $file;
}
}
$files = $filesLeft;
}
if ( $exportMisc )
{
foreach ( $files as $file )
{
$exportFileList[$file] = $eventPath."/".$file;
}
$files = array();
}
}
return( array_values( $exportFileList ) );
}
function exportEvents( $eids, $exportDetail, $exportFrames, $exportImages, $exportVideo, $exportMisc, $exportFormat )
{
if ( canView( 'Events' ) && $eids )
{
$export_root = "zmExport";
$export_listFile = "zmFileList.txt";
$exportFileList = array();
if ( is_array( $eids ) )
{
foreach ( $eids as $eid )
{
$exportFileList = array_merge( $exportFileList, exportFileList( $eid ) );
}
}
else
{
$eid = $eids;
$exportFileList = exportFileList( $eid, $exportDetail, $exportFrames, $exportImages, $exportVideo, $exportMisc );
}
$listFile = "temp/".$export_listFile;
if ( !($fp = fopen( $listFile, "w" )) )
{
die( "Can't open event export list file '$listFile'" );
}
foreach ( $exportFileList as $exportFile )
{
fwrite( $fp, "$exportFile\n" );
}
fclose( $fp );
$archive = "";
if ( $exportFormat == "tar" )
{
$archive = "temp/".$export_root.".tar.gz";
@unlink( $archive );
$command = "tar --create --gzip --file=$archive --files-from=$listFile";
exec( $command, $output, $status );
if ( $status )
{
error_log( "Command '$command' returned with status $status" );
if ( $output[0] )
error_log( "First line of output is '".$output[0]."'" );
return( false );
}
}
elseif ( $exportFormat == "zip" )
{
$archive = "temp/zm_export.zip";
$archive = "temp/".$export_root.".zip";
@unlink( $archive );
$command = "cat $listFile | zip -q $archive -@";
exec( $command, $output, $status );
if ( $status )
{
error_log( "Command '$command' returned with status $status" );
if ( $output[0] )
error_log( "First line of output is '".$output[0]."'" );
return( false );
}
}
}
return( $archive );
}

View File

@ -0,0 +1,98 @@
<?php
//
// ZoneMinder web function library, $Date: 2008-07-08 16:06:45 +0100 (Tue, 08 Jul 2008) $, $Revision: 2484 $
// Copyright (C) 2003, 2004, 2005, 2006 Philip Coombes
//
// This program 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 program 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
//
function xhtmlHeaders( $file, $title )
{
$skinCssFile = getSkinFile( 'css/skin.css' );
$skinCssPhpFile = getSkinFile( 'css/skin.css.php' );
$skinJsFile = getSkinFile( 'js/skin.js' );
$skinJsPhpFile = getSkinFile( 'js/skin.js.php' );
$basename = basename( $file, '.php' );
$viewCssFile = getSkinFile( 'views/css/'.$basename.'.css' );
$viewCssPhpFile = getSkinFile( 'views/css/'.$basename.'.css.php' );
$viewJsFile = getSkinFile( 'views/js/'.$basename.'.js' );
$viewJsPhpFile = getSkinFile( 'views/js/'.$basename.'.js.php' );
extract( $GLOBALS, EXTR_OVERWRITE );
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title><?= ZM_WEB_TITLE_PREFIX ?> - <?= $title ?></title>
<link rel="icon" type="image/ico" href="favicon.ico"/>
<link rel="shortcut icon" href="favicon.ico"/>
<link rel="stylesheet" href="css/reset.css" type="text/css" media="screen"/>
<link rel="stylesheet" href="<?= $skinCssFile ?>" type="text/css" media="screen"/>
<?php
if ( $viewCssFile )
{
?>
<link rel="stylesheet" href="<?= $viewCssFile ?>" type="text/css" media="screen"/>
<?php
}
if ( $viewCssPhpFile )
{
?>
<style type="text/css">
<?php
require_once( $viewCssPhpFile );
?>
</style>
<?php
}
?>
<script type="text/javascript" src="js/mootools.js"></script>
<script type="text/javascript" src="js/mootools.ext.js"></script>
<?php
if ( $skinJsPhpFile )
{
?>
<script type="text/javascript">
<?php
require_once( $skinJsPhpFile );
?>
</script>
<?php
}
if ( $viewJsPhpFile )
{
?>
<script type="text/javascript">
<?php
require_once( $viewJsPhpFile );
?>
</script>
<?php
}
?>
<script type="text/javascript" src="<?= $skinJsFile ?>"></script>
<?php
if ( $viewJsFile )
{
?>
<script type="text/javascript" src="<?= $viewJsFile ?>"></script>
<?php
}
?>
</head>
<?php
}
?>

View File

View File

@ -0,0 +1,524 @@
<?php
function getDateScale( $scales, $range, $minLines, $maxLines )
{
foreach ( $scales as $scale )
{
$align = isset($scale['align'])?$scale['align']:1;
$scaleRange = (int)($range/($scale['factor']*$align));
//echo "S:".$scale['name'].", A:$align, SR:$scaleRange<br>";
if ( $scaleRange >= $minLines )
{
$scale['range'] = $scaleRange;
break;
}
}
if ( !isset($scale['range']) )
{
$scale['range'] = (int)($range/($scale['factor']*$align));
}
$scale['divisor'] = 1;
while ( ($scale['range']/$scale['divisor']) > $maxLines )
{
$scale['divisor']++;
}
$scale['lines'] = (int)($scale['range']/$scale['divisor']);
return( $scale );
}
function getYScale( $range, $minLines, $maxLines )
{
$scale['range'] = $range;
$scale['divisor'] = 1;
while ( $scale['range']/$scale['divisor'] > $maxLines )
{
$scale['divisor']++;
}
$scale['lines'] = (int)(($scale['range']-1)/$scale['divisor'])+1;
return( $scale );
}
function getSlotFrame( $slot )
{
$slotFrame = isset($slot['frame'])?$slot['frame']['FrameId']:1;
if ( false && $slotFrame )
{
$slotFrame -= $monitor['PreEventCount'];
if ( $slotFrame < 1 )
$slotFrame = 1;
}
return( $slotFrame );
}
function parseFilterToTree( $filter )
{
if ( count($filter['terms']) > 0 )
{
$postfixExpr = array();
$postfixStack = array();
$priorities = array(
'<' => 1,
'<=' => 1,
'>' => 1,
'>=' => 1,
'=' => 2,
'!=' => 2,
'=~' => 2,
'!~' => 2,
'=[]' => 2,
'![]' => 2,
'and' => 3,
'or' => 4,
);
for ( $i = 0; $i <= count($filter['terms']); $i++ )
{
if ( !empty($filter['terms'][$i]['cnj']) )
{
while( true )
{
if ( !count($postfixStack) )
{
$postfixStack[] = array( 'type'=>"cnj", 'value'=>$filter['terms'][$i]['cnj'], 'sqlValue'=>$filter['terms'][$i]['cnj']);
break;
}
elseif ( $postfixStack[count($postfixStack)-1]['type'] == 'obr' )
{
$postfixStack[] = array( 'type'=>"cnj", 'value'=>$filter['terms'][$i]['cnj'], 'sqlValue'=>$filter['terms'][$i]['cnj']);
break;
}
elseif ( $priorities[$filter['terms'][$i]['cnj']] < $priorities[$postfixStack[count($postfixStack)-1]['value']] )
{
$postfixStack[] = array( 'type'=>"cnj", 'value'=>$filter['terms'][$i]['cnj'], 'sqlValue'=>$filter['terms'][$i]['cnj']);
break;
}
else
{
$postfixExpr[] = array_pop( $postfixStack );
}
}
}
if ( !empty($filter['terms'][$i]['obr']) )
{
for ( $j = 0; $j < $filter['terms'][$i]['obr']; $j++ )
{
$postfixStack[] = array( 'type'=>"obr", 'value'=>$filter['terms'][$i]['obr']);
}
}
if ( !empty($filter['terms'][$i]['attr']) )
{
$dtAttr = false;
switch ( $filter['terms'][$i]['attr'])
{
case 'MonitorName':
$sqlValue = 'M.'.preg_replace( '/^Monitor/', '', $filter['terms'][$i]['attr']);
break;
case 'Name':
$sqlValue = "E.Name";
break;
case 'Cause':
$sqlValue = "E.Cause";
break;
case 'DateTime':
$sqlValue = "E.StartTime";
$dtAttr = true;
break;
case 'Date':
$sqlValue = "to_days( E.StartTime )";
$dtAttr = true;
break;
case 'Time':
$sqlValue = "extract( hour_second from E.StartTime )";
break;
case 'Weekday':
$sqlValue = "weekday( E.StartTime )";
break;
case 'Id':
case 'Name':
case 'MonitorId':
case 'Length':
case 'Frames':
case 'AlarmFrames':
case 'TotScore':
case 'AvgScore':
case 'MaxScore':
case 'Archived':
$sqlValue = "E.".$filter['terms'][$i]['attr'];
break;
case 'DiskPercent':
$sqlValue = getDiskPercent();
break;
case 'DiskBlocks':
$sqlValue = getDiskBlocks();
break;
default :
$sqlValue = $filter['terms'][$i]['attr'];
break;
}
if ( $dtAttr )
{
$postfixExpr[] = array( 'type'=>"attr", 'value'=>$filter['terms'][$i]['attr'], 'sqlValue'=>$sqlValue, 'dtAttr'=>true );
}
else
{
$postfixExpr[] = array( 'type'=>"attr", 'value'=>$filter['terms'][$i]['attr'], 'sqlValue'=>$sqlValue );
}
}
if ( isset($filter['terms'][$i]['op']) )
{
if ( empty($filter['terms'][$i]['op']) )
{
$filter['terms'][$i]['op' ]= '=';
}
switch ( $filter['terms'][$i]['op' ])
{
case '=' :
case '!=' :
case '>=' :
case '>' :
case '<' :
case '<=' :
$sqlValue = $filter['terms'][$i]['op'];
break;
case '=~' :
$sqlValue = "regexp";
break;
case '!~' :
$sqlValue = "not regexp";
break;
case '=[]' :
$sqlValue = 'in (';
break;
case '![]' :
$sqlValue = 'not in (';
break;
}
while( true )
{
if ( !count($postfixStack) )
{
$postfixStack[] = array( 'type'=>"op", 'value'=>$filter['terms'][$i]['op'], 'sqlValue'=>$sqlValue );
break;
}
elseif ( $postfixStack[count($postfixStack)-1]['type'] == 'obr' )
{
$postfixStack[] = array( 'type'=>"op", 'value'=>$filter['terms'][$i]['op'], 'sqlValue'=>$sqlValue );
break;
}
elseif ( $priorities[$filter['terms'][$i]['op']] < $priorities[$postfixStack[count($postfixStack)-1]['value']] )
{
$postfixStack[] = array( 'type'=>"op", 'value'=>$filter['terms'][$i]['op'], 'sqlValue'=>$sqlValue );
break;
}
else
{
$postfixExpr[] = array_pop( $postfixStack );
}
}
}
if ( isset($filter['terms'][$i]['val']) )
{
$valueList = array();
foreach ( preg_split( '/["\'\s]*?,["\'\s]*?/', preg_replace( '/^["\']+?(.+)["\']+?$/', '$1', $filter['terms'][$i]['val' ]) ) as $value )
{
switch ( $filter['terms'][$i]['attr'])
{
case 'MonitorName':
case 'Name':
case 'Cause':
$value = "'$value'";
break;
case 'DateTime':
$value = "'".strftime( STRF_FMT_DATETIME_DB, strtotime( $value ) )."'";
break;
case 'Date':
$value = "to_days( '".strftime( STRF_FMT_DATETIME_DB, strtotime( $value ) )."' )";
break;
case 'Time':
$value = "extract( hour_second from '".strftime( STRF_FMT_DATETIME_DB, strtotime( $value ) )."' )";
break;
case 'Weekday':
$value = "weekday( '".strftime( STRF_FMT_DATETIME_DB, strtotime( $value ) )."' )";
break;
}
$valueList[] = $value;
}
$postfixExpr[] = array( 'type'=>"val", 'value'=>$filter['terms'][$i]['val'], 'sqlValue'=>join( ',', $valueList ) );
}
if ( !empty($filter['terms'][$i]['cbr']) )
{
for ( $j = 0; $j < $filter['terms'][$i]['cbr']; $j++ )
{
while ( count($postfixStack) )
{
$element = array_pop( $postfixStack );
if ( $element['type'] == "obr" )
{
$postfixExpr[count($postfixExpr)-1]['bracket'] = true;
break;
}
$postfixExpr[] = $element;
}
}
}
}
while ( count($postfixStack) )
{
$postfixExpr[] = array_pop( $postfixStack );
}
$exprStack = array();
//foreach ( $postfixExpr as $element )
//{
//echo $element['value']." ";
//}
//echo "<br>";
foreach ( $postfixExpr as $element )
{
if ( $element['type'] == 'attr' || $element['type'] == 'val' )
{
$node = array( 'data'=>$element, 'count'=>0 );
$exprStack[] = $node;
}
elseif ( $element['type'] == 'op' || $element['type'] == 'cnj' )
{
$right = array_pop( $exprStack );
$left = array_pop( $exprStack );
$node = array( 'data'=>$element, 'count'=>2+$left['count']+$right['count'], 'right'=>$right, 'left'=>$left );
$exprStack[] = $node;
}
else
{
die( "Unexpected element type '".$element['type']."', value '".$element['value']."'" );
}
}
if ( count($exprStack) != 1 )
{
die( "Expression stack has ".count($exprStack)." elements" );
}
$exprTree = array_pop( $exprStack );
return( $exprTree );
}
return( false );
}
function _parseTreeToInfix( $node )
{
$expression = '';
if ( isset($node) )
{
if ( isset($node['left']) )
{
if ( !empty($node['data']['bracket']) )
$expression .= '( ';
$expression .= _parseTreeToInfix( $node['left'] );
}
$expression .= $node['data']['value']." ";
if ( isset($node['right']) )
{
$expression .= _parseTreeToInfix( $node['right'] );
if ( !empty($node['data']['bracket']) )
$expression .= ') ';
}
}
return( $expression );
}
function parseTreeToInfix( $tree )
{
return( _parseTreeToInfix( $tree ) );
}
function _parseTreeToSQL( $node, $cbr=false )
{
$expression = '';
if ( $node )
{
if ( isset($node['left']) )
{
if ( !empty($node['data']['bracket']) )
$expression .= '( ';
$expression .= _parseTreeToSQL( $node['left'] );
}
$inExpr = $node['data']['type'] == 'op' && ($node['data']['value'] == '=[]' || $node['data']['value'] == '![]');
$expression .= $node['data']['sqlValue'];
if ( !$inExpr )
$expression .= ' ';
if ( $cbr )
$expression .= ') ';
if ( isset($node['right']) )
{
$expression .= _parseTreeToSQL( $node['right'], $inExpr );
if ( !empty($node['data']['bracket']) )
$expression .= ') ';
}
}
return( $expression );
}
function parseTreeToSQL( $tree )
{
return( _parseTreeToSQL( $tree ) );
}
function _parseTreeToFilter( $node, &$terms, &$level )
{
$elements = array();
if ( $node )
{
if ( isset($node['left']) )
{
if ( !empty($node['data']['bracket']) )
$terms[$level]['obr'] = 1;
_parseTreeToFilter( $node['left'], $terms, $level );
}
if ( $node['data']['type'] == 'cnj' )
{
$level++;
}
$terms[$level][$node['data']['type']] = $node['data']['value'];
if ( isset($node['right']) )
{
_parseTreeToFilter( $node['right'], $terms, $level );
if ( !empty($node['data']['bracket']) )
$terms[$level]['cbr'] = 1;
}
}
}
function parseTreeToFilter( $tree )
{
$terms = array();
if ( isset($tree) )
{
$level = 0;
_parseTreeToFilter( $tree, $terms, $level );
}
return( array( 'terms' => $terms ) );
}
function parseTreeToQuery( $tree )
{
$filter = parseTreeToFilter( $tree );
parseFilter( $filter );
return( $filter['query'] );
}
function _drawTree( $node, $level )
{
if ( isset($node['left']) )
{
_drawTree( $node['left'], $level+1 );
}
echo str_repeat( ".", $level*2 ).$node['data']['value']."<br>";
if ( isset($node['right']) )
{
_drawTree( $node['right'], $level+1 );
}
}
function drawTree( $tree )
{
_drawTree( $tree, 0 );
}
function _extractDatetimeRange( &$node, &$minTime, &$maxTime, &$expandable, $subOr )
{
$pruned = $leftPruned = $rightPruned = false;
if ( $node )
{
if ( isset($node['left']) && isset($node['right']) )
{
if ( $node['data']['type'] == 'cnj' && $node['data']['value'] == 'or' )
{
$subOr = true;
}
elseif ( !empty($node['left']['data']['dtAttr']) )
{
if ( $subOr )
{
$expandable = false;
}
elseif ( $node['data']['type'] == 'op' )
{
if ( $node['data']['value'] == '>' || $node['data']['value'] == '>=' )
{
if ( !$minTime || $minTime > $node['right']['data']['sqlValue'] )
{
$minTime = $node['right']['data']['value'];
return( true );
}
}
if ( $node['data']['value'] == '<' || $node['data']['value'] == '<=' )
{
if ( !$maxTime || $maxTime < $node['right']['data']['sqlValue'] )
{
$maxTime = $node['right']['data']['value'];
return( true );
}
}
}
else
{
die( "Unexpected node type '".$node['data']['type']."'" );
}
return( false );
}
$leftPruned = _extractDatetimeRange( $node['left'], $minTime, $maxTime, $expandable, $subOr );
$rightPruned = _extractDatetimeRange( $node['right'], $minTime, $maxTime, $expandable, $subOr );
if ( $leftPruned && $rightPruned )
{
$pruned = true;
}
elseif ( $leftPruned )
{
$node = $node['right'];
}
elseif ( $rightPruned )
{
$node = $node['left'];
}
}
}
return( $pruned );
}
function extractDatetimeRange( &$tree, &$minTime, &$maxTime, &$expandable )
{
$minTime = "";
$maxTime = "";
$expandable = true;
_extractDateTimeRange( $tree, $minTime, $maxTime, $expandable, false );
}
function appendDatetimeRange( &$tree, $minTime, $maxTime=false )
{
$attrNode = array( 'data'=>array( 'type'=>'attr', 'value'=>'DateTime', 'sqlValue'=>'E.StartTime', 'dtAttr'=>true ), 'count'=>0 );
$valNode = array( 'data'=>array( 'type'=>'val', 'value'=>$minTime, 'sqlValue'=>$minTime ), 'count'=>0 );
$opNode = array( 'data'=>array( 'type'=>'op', 'value'=>'>=', 'sqlValue'=>'>=' ), 'count'=>2, 'left'=>$attrNode, 'right'=>$valNode );
if ( isset($tree) )
{
$cnjNode = array( 'data'=>array( 'type'=>'cnj', 'value'=>'and', 'sqlValue'=>'and' ), 'count'=>2+$tree['count']+$opNode['count'], 'left'=>$tree, 'right'=>$opNode );
$tree = $cnjNode;
}
else
{
$tree = $opNode;
}
if ( $maxTime )
{
$attrNode = array( 'data'=>array( 'type'=>'attr', 'value'=>'DateTime', 'sqlValue'=>'E.StartTime', 'dtAttr'=>true ), 'count'=>0 );
$valNode = array( 'data'=>array( 'type'=>'val', 'value'=>$maxTime, 'sqlValue'=>$maxTime ), 'count'=>0 );
$opNode = array( 'data'=>array( 'type'=>'op', 'value'=>'<=', 'sqlValue'=>'<=' ), 'count'=>2, 'left'=>$attrNode, 'right'=>$valNode );
$cnjNode = array( 'data'=>array( 'type'=>'cnj', 'value'=>'and', 'sqlValue'=>'and' ), 'count'=>2+$tree['count']+$opNode['count'], 'left'=>$tree, 'right'=>$opNode );
$tree = $cnjNode;
}
}
?>

View File

@ -0,0 +1,7 @@
AUTOMAKE_OPTIONS = gnu
webdir = @WEB_PREFIX@/skins/classic/js
dist_web_DATA = \
skin.js \
skin.js.php

View File

@ -0,0 +1,296 @@
//
// ZoneMinder base static javascript file, $Date$, $Revision$
// Copyright (C) 2003, 2004, 2005, 2006 Philip Coombes
//
// This program 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 program 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
//
//
// This file should only contain static JavaScript and no php.
// Use zm_html_js.php for JavaScript that need pre-processing
//
if ( !window.console )
{
var console =
{
init:function() {},
log:function() {},
debug:function() {},
info:function() {},
warn:function() {},
error:function() {}
};
}
// Javascript window sizes
var popupSizes = {
'bandwidth': { 'width': 200, 'height': 120 },
'console': { 'width': 750, 'height': 312 },
'control': { 'width': 380, 'height': 480 },
'controlcaps': { 'width': 780, 'height': 320 },
'controlcap': { 'width': 400, 'height': 400 },
'cycle': { 'addWidth': 16, 'minWidth': 384, 'addHeight': 48 },
'device': { 'width': 260, 'height': 150 },
'devices': { 'width': 400, 'height': 240 },
'donate': { 'width': 500, 'height': 280 },
'event': { 'addWidth': 96, 'minWidth': 480, 'addHeight': 200, minHeight: 540 },
'eventdetail': { 'width': 400, 'height': 220 },
'events': { 'width': 760, 'height': 480 },
'export': { 'width': 400, 'height': 340 },
'filter': { 'width': 620, 'height': 360 },
'filtersave': { 'width': 560, 'height': 120 },
'frames': { 'width': 500, 'height': 300 },
'function': { 'width': 248, 'height': 92 },
'group': { 'width': 360, 'height': 180 },
'groups': { 'width': 400, 'height': 220 },
'image': { 'addWidth': 48, 'addHeight': 80 },
'login': { 'width': 720, 'height': 480 },
'logout': { 'width': 240, 'height': 100 },
'monitor': { 'width': 380, 'height': 364 },
'monitorpreset':{ 'width': 400, 'height': 200 },
'monitorselect':{ 'width': 160, 'height': 200 },
'montage': { 'width': -1, 'height': -1 },
'optionhelp': { 'width': 320, 'height': 284 },
'options': { 'width': 840, 'height': 620 },
'preset': { 'width': 300, 'height': 120 },
'settings': { 'width': 200, 'height': 225 },
'state': { 'width': 240, 'height': 124 },
'stats': { 'width': 740, 'height': 200 },
'timeline': { 'width': 760, 'height': 540 },
'user': { 'width': 320, 'height': 420 },
'version': { 'width': 320, 'height': 140 },
'video': { 'width': 420, 'height': 360 },
'videoview': { 'addWidth': 48, 'addHeight': 80 },
'watch': { 'addWidth': 96, 'minWidth': 420, 'addHeight': 384 },
'zone': { 'addWidth': 450, 'addHeight': 200, 'minHeight': 450 },
'zones': { 'addWidth': 72, 'addHeight': 232 }
};
var popupOptions = "resizable,scrollbars,status=no";
// Deprecated
function newWindow( url, name, width, height )
{
var windowId = window.open( url, name, popupOptions+",width="+width+",height="+height );
}
function clone( obj )
{
if ( typeof(obj) != 'object' )
return( obj );
if ( obj == null )
return( obj );
var newObj = new Object();
for ( var i in obj )
newObj[i] = clone( obj[i] );
return( newObj );
}
function getPopupSize( tag, width, height )
{
var popupSize = clone( popupSizes[tag] );
if ( !popupSize )
{
console.error( "Can't find window size for tag '"+tag+"'" );
return( { 'width': 0, 'height': 0 } );
}
if ( popupSize.width && popupSize.height )
{
if ( width || height )
console.warn( "Ignoring passed dimensions "+width+"x"+height+" when getting popup size for tag '"+tag+"'" );
return( popupSize );
}
if ( popupSize.addWidth )
{
popupSize.width = popupSize.addWidth;
if ( !width )
console.error( "Got addWidth but no passed width when getting popup size for tag '"+tag+"'" );
else
popupSize.width += parseInt(width);
}
else if ( width )
{
popupSize.width = width;
console.error( "Got passed width but no addWidth when getting popup size for tag '"+tag+"'" );
}
if ( popupSize.minWidth && popupSize.width < popupSize.minWidth )
{
console.warn( "Adjusting to minimum width when getting popup size for tag '"+tag+"'" );
popupSize.width = popupSize.minWidth;
}
if ( popupSize.addHeight )
{
popupSize.height = popupSize.addHeight;
if ( !height )
console.error( "Got addHeight but no passed height when getting popup size for tag '"+tag+"'" );
else
popupSize.height += parseInt(height);
}
else if ( height )
{
popupSize.height = height;
console.error( "Got passed height but no addHeight when getting popup size for tag '"+tag+"'" );
}
if ( popupSize.minHeight && popupSize.height < popupSize.minHeight )
{
console.warn( "Adjusting to minimum height when getting popup size for tag '"+tag+"'" );
popupSize.height = popupSize.minHeight;
}
console.debug( popupSize );
return( popupSize );
}
function zmWindow()
{
var zmWin = window.open( 'http://www.zoneminder.com', 'ZoneMinder' );
zmWin.focus();
}
function createPopup( url, name, tag, width, height )
{
var popupSize = getPopupSize( tag, width, height );
var popupDimensions = "";
if ( popupSize.width > 0 )
popupDimensions += ",width="+popupSize.width;
if ( popupSize.height > 0 )
popupDimensions += ",height="+popupSize.height;
var popup = window.open( url, name, popupOptions+popupDimensions );
}
function createEventPopup( eventId, eventFilter, width, height )
{
var url = '?view=event&eid='+eventId;
if ( eventFilter )
url += eventFilter;
var name = 'zmEvent';
var popupSize = getPopupSize( 'event', width, height );
var popup = window.open( url, name, popupOptions+",width="+popupSize.width+",height="+popupSize.height );
}
function createFramesPopup( eventId, width, height )
{
var url = '?view=frames&eid='+eventId;
var name = 'zmFrames';
var popupSize = getPopupSize( 'frames', width, height );
var popup = window.open( url, name, popupOptions+",width="+popupSize.width+",height="+popupSize.height );
}
function createFramePopup( eventId, frameId, width, height )
{
var url = '?view=frame&eid='+eventId+'&fid='+frameId;
var name = 'zmFrame';
var popupSize = getPopupSize( 'frame', width, height );
var popup = window.open( url, name, popupOptions+",width="+popupSize.width+",height="+popupSize.height );
}
function windowToFront()
{
top.window.focus();
}
function closeWindow()
{
top.window.close();
}
function refreshWindow()
{
window.location.reload( true );
}
function refreshParentWindow()
{
if ( window.opener )
window.opener.location.reload( true );
}
function secsToTime( seconds )
{
var timeString = "--";
if ( seconds < 60 )
timeString = seconds.toString();
else if ( seconds < 60*60 )
{
var timeMins = parseInt(seconds/60);
var timeSecs = seconds%60;
if ( timeSecs < 10 )
timeSecs = '0'+timeSecs.toString().substr( 0, 4 );
else
timeSecs = timeSecs.toString().substr( 0, 5 );
timeString = timeMins+":"+timeSecs;
}
else
{
var timeHours = parseInt(seconds/3600);
var timeMins = (seconds%3600)/60;
var timeSecs = seconds%60;
if ( timeMins < 10 )
timeMins = '0'+timeMins.toString().substr( 0, 4 );
else
timeMins = timeMins.toString().substr( 0, 5 );
if ( timeSecs < 10 )
timeSecs = '0'+timeSecs.toString().substr( 0, 4 );
else
timeSecs = timeSecs.toString().substr( 0, 5 );
timeString = timeHours+":"+timeMins+":"+timeSecs;
}
return( timeString );
}
function submitTab( tab )
{
var form = $('contentForm');
form.action.value = "";
form.tab.value = tab;
form.submit();
}
function configureDeleteButton( element )
{
var form = element.form;
var checked = element.checked;
if ( !checked )
{
for ( var i = 0; i < form.elements.length; i++ )
{
if ( form.elements[i].name == element.name )
{
if ( form.elements[i].checked )
{
checked = true;
break;
}
}
}
}
form.deleteBtn.disabled = !checked;
}
function confirmDelete( message )
{
return( confirm( message?message:'Are you sure you wish to delete?' ) );
}
if ( refreshParent )
{
refreshParentWindow();
}
if ( focusWindow )
{
windowToFront();
}

View File

@ -1,6 +1,6 @@
<?php <?php
// //
// ZoneMinder web help file, $Date$, $Revision$ // ZoneMinder base javascript file, $Date: 2008-04-21 14:52:05 +0100 (Mon, 21 Apr 2008) $, $Revision: 2391 $
// Copyright (C) 2003, 2004, 2005, 2006 Philip Coombes // Copyright (C) 2003, 2004, 2005, 2006 Philip Coombes
// //
// This program is free software; you can redistribute it and/or // This program is free software; you can redistribute it and/or
@ -19,31 +19,19 @@
// //
// //
// This file exists purely to allow language translators to override the // This file should only contain JavaScript that needs preprocessing by php.
// default help text that accompanies configuration variables and which // Static JavaScript should go in zm_html.js
// by default is in English.
// //
// NOTE: This file is currently redundant and should not be shipped!!
$system_help_file = 'zm_help_'.ZM_LANG_DEFAULT.'.php';
if ( isset($user['Language']) )
{
$user_help_file = 'zm_help_'.$user['Language'].'.php';
}
if ( isset($user_help_file) && file_exists( $user_help_file ) )
{
$help_file = $user_help_file;
}
elseif ( file_exists( $system_help_file ) )
{
$help_file = $system_help_file;
}
if ( $isset( $help_file ) )
{
require_once( $help_file );
}
?> ?>
var AJAX_TIMEOUT = <?= ZM_WEB_AJAX_TIMEOUT ?>;
var currentView = '<?= $_REQUEST['view'] ?>';
var thisUrl = "<?= ZM_BASE_URL.$_SERVER['PHP_SELF'] ?>";
var canEditSystem = <?= canEdit('System' )?'true':'false' ?>;
var canViewSystem = <?= canView('System' )?'true':'false' ?>;
var refreshParent = <?= !empty($refreshParent)?'true':'false' ?>;
var focusWindow = <?= !empty($focusWindow)?'true':'false' ?>;

View File

@ -0,0 +1,5 @@
AUTOMAKE_OPTIONS = gnu
webdir = @WEB_PREFIX@/skins/classic/lang
dist_web_DATA = # No files here

View File

@ -0,0 +1,69 @@
<?php
//
// ZoneMinder HTML interface file, $Date$, $Revision$
// Copyright (C) 2003, 2004, 2005, 2006 Philip Coombes
//
// This program 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 program 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
//
if ( empty($_COOKIE['zmBandwidth']) )
$_COOKIE['zmBandwidth'] = "low";
//ini_set( "magic_quotes_gpc", "Off" );
// Uncomment if there are language overrides
//if ( $skinLangFile = loadLanguage( ZM_SKIN_PATH ) )
//require_once( $skinLangFile );
foreach ( getSkinIncludes( 'includes/config.php' ) as $includeFile )
require_once $includeFile;
foreach ( getSkinIncludes( 'includes/functions.php' ) as $includeFile )
require_once $includeFile;
if ( empty($_REQUEST['view']) )
$_REQUEST['view'] = isset($user)?'console':'login';
if ( !isset($user) && ZM_OPT_USE_AUTH )
{
if ( ZM_AUTH_TYPE == "remote" && !empty( $_SERVER['REMOTE_USER'] ) )
{
$_REQUEST['view'] = "postlogin";
$_REQUEST['action'] = "login";
$_REQUEST['username'] = $_SERVER['REMOTE_USER'];
}
}
if ( isset($user) )
{
// Bandwidth Limiter
if ( !empty($user['MaxBandwidth']) )
{
if ( $user['MaxBandwidth'] == "low" )
{
$_COOKIE['zmBandwidth'] = "low";
}
elseif ( $user['MaxBandwidth'] == "medium" && $_COOKIE['zmBandwidth'] == "high" )
{
$_COOKIE['zmBandwidth'] = "medium";
}
}
}
// If there are additional actions
foreach ( getSkinIncludes( 'includes/actions.php' ) as $includeFile )
require_once $includeFile;
?>

View File

@ -0,0 +1,54 @@
AUTOMAKE_OPTIONS = gnu
SUBDIRS = \
css \
js
webdir = @WEB_PREFIX@/skins/classic/views
dist_web_DATA = \
bandwidth.php \
blank.php \
console.php \
controlcap.php \
controlcaps.php \
control.php \
controlpreset.php \
cycle.php \
device.php \
devices.php \
donate.php \
error.php \
eventdetail.php \
event.php \
events.php \
export.php \
filter.php \
filtersave.php \
frame.php \
frames.php \
function.php \
group.php \
groups.php \
login.php \
logout.php \
Makefile.am \
monitor.php \
monitorpreset.php \
montage.php \
none.php \
optionhelp.php \
options.php \
postlogin.php \
settings.php \
siren.php \
state.php \
stats.php \
status.php \
timeline.php \
user.php \
version.php \
video.php \
watch.php \
zone.php \
zones.php

View File

@ -0,0 +1,58 @@
<?php
//
// ZoneMinder web bandwidth view file, $Date$, $Revision$
// Copyright (C) 2003, 2004, 2005, 2006 Philip Coombes
//
// This program 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 program 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
//
$newBandwidth = $_COOKIE['zmBandwidth'];
if ( $user && !empty($user['MaxBandwidth']) )
{
if ( $user['MaxBandwidth'] == "low" )
{
unset( $bwArray['high'] );
unset( $bwArray['medium'] );
}
elseif ( $user['MaxBandwidth'] == "medium" )
{
unset( $bwArray['high'] );
}
}
$focusWindow = true;
xhtmlHeaders(__FILE__, $SLANG['Bandwidth'] );
?>
<body>
<div id="page">
<div id="header">
<h2><?= $SLANG['Bandwidth'] ?></h2>
</div>
<div id="content">
<form name="contentForm" id="contentForm" method="get" action="<?= $_SERVER['PHP_SELF'] ?>">
<input type="hidden" name="view" value="none"/>
<input type="hidden" name="action" value="bandwidth"/>
<p><?= $SLANG['SetNewBandwidth'] ?></p>
<p><?= buildSelect( "newBandwidth", $bwArray ) ?></p>
<div id="contentButtons">
<input type="submit" value="<?= $SLANG['Save'] ?>"/><input type="button" value="<?= $SLANG['Cancel'] ?>" onclick="closeWindow();"/>
</div>
</form>
</div>
</div>
</body>
</html>

View File

@ -0,0 +1,339 @@
<?php
//
// ZoneMinder web console file, $Date$, $Revision$
// Copyright (C) 2003, 2004, 2005, 2006 Philip Coombes
//
// This program 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 program 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
//
$eventCounts = array(
array(
"title" => $SLANG['Events'],
"filter" => array(
"terms" => array(
)
),
),
array(
"title" => $SLANG['Hour'],
"filter" => array(
"terms" => array(
array( "attr" => "Archived", "op" => "=", "val" => "0" ),
array( "cnj" => "and", "attr" => "DateTime", "op" => ">=", "val" => "-1 hour" ),
)
),
),
array(
"title" => $SLANG['Day'],
"filter" => array(
"terms" => array(
array( "attr" => "Archived", "op" => "=", "val" => "0" ),
array( "cnj" => "and", "attr" => "DateTime", "op" => ">=", "val" => "-1 day" ),
)
),
),
array(
"title" => $SLANG['Week'],
"filter" => array(
"terms" => array(
array( "attr" => "Archived", "op" => "=", "val" => "0" ),
array( "cnj" => "and", "attr" => "DateTime", "op" => ">=", "val" => "-7 day" ),
)
),
),
array(
"title" => $SLANG['Month'],
"filter" => array(
"terms" => array(
array( "attr" => "Archived", "op" => "=", "val" => "0" ),
array( "cnj" => "and", "attr" => "DateTime", "op" => ">=", "val" => "-1 month" ),
)
),
),
array(
"title" => $SLANG['Archived'],
"filter" => array(
"terms" => array(
array( "attr" => "Archived", "op" => "=", "val" => "1" ),
)
),
),
);
$running = daemonCheck();
$status = $running?$SLANG['Running']:$SLANG['Stopped'];
if ( $group = dbFetchOne( "select * from Groups where Id = '".(empty($_COOKIE['zmGroup'])?0:dbEscape($_COOKIE['zmGroup']))."'" ) )
$groupIds = array_flip(split( ',', $group['MonitorIds'] ));
noCacheHeaders();
$monitors = array();
$maxWidth = 0;
$maxHeight = 0;
$cycleCount = 0;
$minSequence = 0;
$maxSequence = 1;
$seqIdList = array();
$monitors = dbFetchAll( "select * from Monitors order by Sequence asc" );
for ( $i = 0; $i < count($monitors); $i++ )
{
if ( !visibleMonitor( $monitors[$i]['Id'] ) )
{
continue;
}
if ( $group && !empty($groupIds) && !array_key_exists( $monitors[$i]['Id'], $groupIds ) )
{
continue;
}
$monitors[$i]['Show'] = true;
if ( empty($minSequence) || ($monitors[$i]['Sequence'] < $minSequence) )
{
$minSequence = $monitors[$i]['Sequence'];
}
if ( $monitors[$i]['Sequence'] > $maxSequence )
{
$maxSequence = $monitors[$i]['Sequence'];
}
$monitors[$i]['zmc'] = zmcStatus( $monitors[$i] );
$monitors[$i]['zma'] = zmaStatus( $monitors[$i] );
$monitors[$i]['ZoneCount'] = dbFetchOne( "select count(Id) as ZoneCount from Zones where MonitorId = '".$monitors[$i]['Id']."'", "ZoneCount" );
$counts = array();
for ( $j = 0; $j < count($eventCounts); $j++ )
{
$filter = addFilterTerm( $eventCounts[$j]['filter'], count($eventCounts[$j]['filter']['terms']), array( "cnj" => "and", "attr" => "MonitorId", "op" => "=", "val" => $monitors[$i]['Id'] ) );
parseFilter( $filter );
$counts[] = "count(if(1".$filter['sql'].",1,NULL)) as EventCount$j";
$monitors[$i]['eventCounts'][$j]['filter'] = $filter;
}
$sql = "select ".join($counts,", ")." from Events as E where MonitorId = '".$monitors[$i]['Id']."'";
$counts = dbFetchOne( $sql );
if ( $monitors[$i]['Function'] != 'None' )
{
$cycleCount++;
$scaleWidth = reScale( $monitors[$i]['Width'], $monitors[$i]['DefaultScale'], ZM_WEB_DEFAULT_SCALE );
$scaleHeight = reScale( $monitors[$i]['Height'], $monitors[$i]['DefaultScale'], ZM_WEB_DEFAULT_SCALE );
if ( $maxWidth < $scaleWidth ) $maxWidth = $scaleWidth;
if ( $maxHeight < $scaleHeight ) $maxHeight = $scaleHeight;
}
$monitors[$i] = array_merge( $monitors[$i], $counts );
$seqIdList[] = $monitors[$i]['Id'];
}
$lastId = 0;
$seqIdUpList = array();
foreach ( $seqIdList as $seqId )
{
if ( !empty($lastId) )
$seqIdUpList[$seqId] = $lastId;
else
$seqIdUpList[$seqId] = $seqId;
$lastId = $seqId;
}
$lastId = 0;
$seqIdDownList = array();
foreach ( array_reverse($seqIdList) as $seqId )
{
if ( !empty($lastId) )
$seqIdDownList[$seqId] = $lastId;
else
$seqIdDownList[$seqId] = $seqId;
$lastId = $seqId;
}
$montageWidth = ZM_WEB_MONTAGE_WIDTH?ZM_WEB_MONTAGE_WIDTH:$maxWidth;
$montageHeight = ZM_WEB_MONTAGE_HEIGHT?ZM_WEB_MONTAGE_HEIGHT:$maxHeight;
$eventsView = ZM_WEB_EVENTS_VIEW;
$eventsWindow = 'zm'.ucfirst(ZM_WEB_EVENTS_VIEW);
$eventCount = 0;
for ( $i = 0; $i < count($eventCounts); $i++ )
{
$eventCounts[$i]['total'] = 0;
}
$zoneCount = 0;
foreach( $monitors as $monitor )
{
if ( empty($monitor['Show']) )
continue;
for ( $i = 0; $i < count($eventCounts); $i++ )
{
$eventCounts[$i]['total'] += $monitor['EventCount'.$i];
}
$zoneCount += $monitor['ZoneCount'];
}
xhtmlHeaders( __FILE__, $SLANG['Console'] );
?>
<body>
<div id="page">
<form name="monitorForm" method="get" action="<?= $_SERVER['PHP_SELF'] ?>">
<input type="hidden" name="view" value="<?= $_REQUEST['view'] ?>"/>
<input type="hidden" name="action" value=""/>
<div id="header">
<div id="systemTime" class="smallhead"><?= preg_match( '/%/', DATE_FMT_CONSOLE_LONG )?strftime( DATE_FMT_CONSOLE_LONG ):date( DATE_FMT_CONSOLE_LONG ) ?></div>
<div id="systemStats" class="smallhead"><?= $SLANG['Load'] ?>: <?= getLoad() ?> / <?= $SLANG['Disk'] ?>: <?= getDiskPercent() ?>%</div>
<div id="title" class="bighead"><a href="http://www.zoneminder.com" target="ZoneMinder">ZoneMinder</a> <?= $SLANG['Console'] ?> - <?= makePopupLink( '?view=state', 'zmState', 'state', $status, canEdit( 'System' ) ) ?> - <?= makePopupLink( '?view=version', 'zmVersion', 'version', "v".ZM_VERSION, canEdit( 'System' ) ) ?></div>
<div class="clear"></div>
<div id="monitorSummary" class="smallhead"><?= makePopupLink( '?view=groups', 'zmGroups', 'groups', sprintf( $CLANG['MonitorCount'], count($monitors), zmVlang( $VLANG['Monitor'], count($monitors) ) ).($group?' ('.$group['Name'].')':''), canView( 'System' ) ); ?></div>
<?php
if ( ZM_OPT_X10 && canView('Devices' ) )
{
?>
<div id="devices" class="smallhead"><?= makePopupLink( '?view=devices', 'zmDevices', 'devices', $SLANG['Devices'] ) ?></div>
<?php
}
?>
<div id="options" class="smallhead"><?= makePopupLink( '?view=options', 'zmOptions', 'options', $SLANG['Options'] ) ?></div>
<?php
if ( canView( 'Stream' ) && $cycleCount > 1 )
{
$cycleGroup = isset($_COOKIE['zmGroup'])?$_COOKIE['zmGroup']:0;
?>
<div id="cycleMontage"><?= makePopupLink( '?view=cycle&group='.$cycleGroup, 'zmCycle'.$cycleGroup, array( 'cycle', $montageWidth, $montageHeight ), $SLANG['Cycle'], $running ) ?>&nbsp;/&nbsp;<?= makePopupLink( '?view=montage&group='.$cycleGroup, 'zmMontage'.$cycleGroup, 'montage', $SLANG['Montage'], $running ) ?></div>
<?php
}
else
{
?>
<?php
}
?>
<div id="loginBandwidth" class="smallhead"><?php
if ( ZM_OPT_USE_AUTH )
{
?><?= $SLANG['LoggedInAs'] ?> <?= makePopupLink( '?view=logout', 'zmLogout', 'logout', $user['Username'], (ZM_AUTH_TYPE == "builtin") ) ?>, <?= strtolower( $SLANG['ConfiguredFor'] ) ?><?php
}
else
{
?><?= $SLANG['ConfiguredFor'] ?><?php
}
?>&nbsp;<?= makePopupLink( '?view=bandwidth', 'zmBandwidth', 'bandwidth', $bwArray[$_COOKIE['zmBandwidth']], ($user && $user['MaxBandwidth'] != 'low' ) ) ?> <?= $SLANG['Bandwidth'] ?></div>
</div>
<div id="content">
<table id="consoleTable" cellspacing="0">
<thead>
<tr>
<th class="colName"><?= $SLANG['Name'] ?></th>
<th class="colFunction"><?= $SLANG['Function'] ?></th>
<th class="colSource"><?= $SLANG['Source'] ?></th>
<?php
for ( $i = 0; $i < count($eventCounts); $i++ )
{
?>
<th class="colEvents"><?= $eventCounts[$i]['title'] ?></th>
<?php
}
?>
<th class="colZones"><?= $SLANG['Zones'] ?></th>
<?php
if ( canEdit('Monitors') )
{
?>
<th class="colOrder"><?= $SLANG['Order'] ?></th>
<?php
}
?>
<th class="colMark"><?= $SLANG['Mark'] ?></th>
</tr>
</thead>
<tfoot>
<tr>
<td class="colLeftButtons" colspan="3">
<input type="button" value="<?= $SLANG['Refresh'] ?>" onclick="location.reload(true);"/>
<?= makePopupButton( '?view=monitor', 'zmMonitor0', 'monitor', $SLANG['AddNewMonitor'], (canEdit( 'Monitors' )&&!$user['MonitorIds']) ) ?>
<?= makePopupButton( '?view=filter&filter[terms][0][attr]=DateTime&filter[terms][0][op]=%3c&filter[terms][0][val]=now', 'zmFilter', 'filter', $SLANG['Filters'], canView( 'Events' ) ) ?>
</td>
<?php
for ( $i = 0; $i < count($eventCounts); $i++ )
{
parseFilter( $eventCounts[$i]['filter'] );
?>
<td class="colEvents"><?= makePopupLink( '?view='.$eventsView.'&page=1'.$eventCounts[$i]['filter']['query'], $eventsWindow, $eventsView, $eventCounts[$i]['total'], canView( 'Events' ) ) ?></td>
<?php
}
?>
<td class="colZones"><?= $zoneCount ?></td>
<td class="colRightButtons" colspan="<?= canEdit('Monitors')?2:1 ?>"><input type="button" name="editBtn" value="<?= $SLANG['Edit'] ?>" onclick="editMonitor( this )" disabled="disabled"/><input type="button" name="deleteBtn" value="<?= $SLANG['Delete'] ?>" onclick="deleteMonitor( this )" disabled="disabled"/></td>
</tr>
</tfoot>
<tbody>
<?php
foreach( $monitors as $monitor )
{
if ( empty($monitor['Show']) )
continue;
?>
<tr>
<?php
if ( !$monitor['zmc'] )
$dclass = "errorText";
else
{
if ( !$monitor['zma'] )
$dclass = "warnText";
else
$dclass = "infoText";
}
if ( $monitor['Function'] == 'None' )
$fclass = "errorText";
elseif ( $monitor['Function'] == 'Monitor' )
$fclass = "warnText";
else
$fclass = "infoText";
if ( !$monitor['Enabled'] )
$fclass .= " disabledText";
$scale = max( reScale( SCALE_BASE, $monitor['DefaultScale'], ZM_WEB_DEFAULT_SCALE ), SCALE_BASE );
?>
<td class="colName"><?= makePopupLink( '?view=watch&mid='.$monitor['Id'], 'zmWatch'.$monitor['Id'], array( 'watch', reScale( $monitor['Width'], $scale ), reScale( $monitor['Height'], $scale ) ), $monitor['Name'], $running && ($monitor['Function'] != 'None') && canView( 'Stream' ) ) ?></td>
<td class="colFunction"><?= makePopupLink( '?view=function&mid='.$monitor['Id'], 'zmFunction', 'function', '<span class="'.$fclass.'">'.$monitor['Function'].'</span>', canEdit( 'Monitors' ) ) ?></td>
<?php if ( $monitor['Type'] == "Local" ) { ?>
<td class="colSource"><?= makePopupLink( '?view=monitor&mid='.$monitor['Id'], 'zmMonitor'.$monitor['Id'], 'monitor', '<span class="'.$dclass.'">'.$monitor['Device'].' ('.$monitor['Channel'].')</span>', canEdit( 'Monitors' ) ) ?></td>
<?php } elseif ( $monitor['Type'] == "Remote" ) { ?>
<td class="colSource"><?= makePopupLink( '?view=monitor&mid='.$monitor['Id'], 'zmMonitor'.$monitor['Id'], 'monitor', '<span class="'.$dclass.'">'.preg_replace( '/^.*@/', '', $monitor['Host'] ).'</span>', canEdit( 'Monitors' ) ) ?></td>
<?php } elseif ( $monitor['Type'] == "File" ) { ?>
<td class="colSource"><?= makePopupLink( '?view=monitor&mid='.$monitor['Id'], 'zmMonitor'.$monitor['Id'], 'monitor', '<span class="'.$dclass.'">'.preg_replace( '/^.*\//', '', $monitor['Path'] ).'</span>', canEdit( 'Monitors' ) ) ?></td>
<?php } else { ?>
<td class="colSource">&nbsp;</td>
<?php } ?>
<?php
for ( $i = 0; $i < count($eventCounts); $i++ )
{
?>
<td class="colEvents"><?= makePopupLink( '?view='.$eventsView.'&page=1'.$monitor['eventCounts'][$i]['filter']['query'], $eventsWindow, $eventsView, $monitor['EventCount'.$i], canView( 'Events' ) ) ?></td>
<?php
}
?>
<td class="colZones"><?= makePopupLink( '?view=zones&mid='.$monitor['Id'], 'zmZones', array( 'zones', $monitor['Width'], $monitor['Height'] ), $monitor['ZoneCount'], canView( 'Monitors' ) ) ?></td>
<?php
if ( canEdit('Monitors') )
{
?>
<td class="colOrder"><?= makeLink( '?view='.$_REQUEST['view'].'&action=sequence&mid='.$monitor['Id'].'&smid='.$seqIdUpList[$monitor['Id']], '<img src="graphics/seq-u.gif" alt="Up" width="12" height="11"/>', $monitor['Sequence']>$minSequence ) ?><?= makeLink( 'view='.$_REQUEST['view'].'&action=sequence&mid='.$monitor['Id'].'&smid='.$seqIdDownList[$monitor['Id']], '<img src="graphics/seq-d.gif" alt="Down" width="12" height="11"/>', $monitor['Sequence']<$maxSequence ) ?></td>
<?php
}
?>
<td class="colMark"><input type="checkbox" name="markMids[]" value="<?= $monitor['Id'] ?>" onclick="setButtonStates( this )"<?php if ( !canEdit( 'Monitors' ) || $user['MonitorIds'] ) {?> disabled="disabled"<?php } ?>/></td>
</tr>
<?php
}
?>
</tbody>
</table>
</div>
</form>
</div>
</body>
</html>

View File

@ -0,0 +1,108 @@
<?php
//
// ZoneMinder web control view file, $Date$, $Revision$
// Copyright (C) 2003, 2004, 2005, 2006 Philip Coombes
//
// This program 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 program 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
//
if ( !canView( 'Control' ) )
{
$_REQUEST['view'] = "error";
return;
}
$groupSql = "";
if ( !empty($_REQUEST['group']) )
{
$sql = "select * from Groups where Id = '".$group."'";
$row = dbFetchOne( $sql );
$groupSql = " and find_in_set( Id, '".$row['MonitorIds']."' )";
}
$sql = "select * from Monitors where Function != 'None' and Controllable = 1$groupSql order by Sequence";
$mids = array();
foreach( dbFetchAll( $sql ) as $row )
{
if ( !visibleMonitor( $row['Id'] ) )
{
continue;
}
if ( empty($mid) )
$mid = $row['Id'];
$mids[$row['Id']] = $row['Name'];
}
require_once( 'zm_control_funcs.php' );
$sql = "select C.*,M.* from Monitors as M inner join Controls as C on (M.ControlId = C.Id ) where M.Id = '".$mid."'";
$monitor = dbFetchOne( $sql );
$cmds = getControlCommands( $monitor );
$focusWindow = true;
xhtmlHeaders(__FILE__, $SLANG['Control'] );
?>
<body>
<div id="page">
<div id="header">
<div id="headerButtons">
<a href="#" onclick="closeWindow();"><?= $SLANG['Close'] ?></a>
</div>
<h2><?= $SLANG['Control'] ?></h2>
<div id="headerControl">
<form name="contentForm" id="contentForm" method="get" action="<?= $_SERVER['PHP_SELF'] ?>">
<input type="hidden" name="view" value="<?= $_REQUEST['view'] ?>"/>
<?= buildSelect( "mid", $mids, "this.form.submit();" ); ?>
</form>
</div>
</div>
<div id="content">
<div id="ptzControls">
<div id="controlsPanel">
<?php
if ( $monitor['CanFocus'] )
echo controlFocus( $monitor );
if ( $monitor['CanZoom'] )
echo controlZoom( $monitor );
if ( $monitor['CanMove'] || ( $monitor['CanWake'] || $monitor['CanSleep'] || $monitor['CanReset'] ) )
{
?>
<div id="pantiltPanel">
<?php
if ( $monitor['CanMove'] )
echo controlPanTilt( $monitor );
if ( $monitor['CanWake'] || $monitor['CanSleep'] || $monitor['CanReset'] )
echo controlPower( $monitor );
?>
</div>
<?php
}
if ( $monitor['CanIris'] )
echo controlIris( $monitor );
if ( $monitor['CanWhite'] )
echo controlWhite( $monitor );
?>
</div>
<?php
if ( $monitor['HasPresets'] )
echo controlPresets( $monitor );
?>
</div>
</div>
</div>
</body>
</html>

View File

@ -0,0 +1,412 @@
<?php
//
// ZoneMinder web control capabilities view file, $Date$, $Revision$
// Copyright (C) 2003, 2004, 2005, 2006 Philip Coombes
//
// This program 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 program 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
//
if ( !canEdit( 'Control' ) )
{
$_REQUEST['view'] = "error";
return;
}
$tabs = array();
$tabs["main"] = $SLANG['Main'];
$tabs["move"] = $SLANG['Move'];
$tabs["pan"] = $SLANG['Pan'];
$tabs["tilt"] = $SLANG['Tilt'];
$tabs["zoom"] = $SLANG['Zoom'];
$tabs["focus"] = $SLANG['Focus'];
$tabs["white"] = $SLANG['White'];
$tabs["iris"] = $SLANG['Iris'];
$tabs["presets"] = $SLANG['Presets'];
if ( !isset($_REQUEST['tab']) )
$_REQUEST['tab'] = "main";
if ( !empty($_REQUEST['cid']) )
{
$control = dbFetchOne( "select * from Controls where Id = '".$_REQUEST['cid']."'" );
}
else
{
$control = array();
$control['Name'] = $SLANG['New'];
$control['Type'] = "Local";
$control['Protocol'] = "";
}
if ( !isset( $newControl ) )
{
$newControl = $control;
}
$focusWindow = true;
xhtmlHeaders(__FILE__, $SLANG['ControlCap']." - ".$control['Name'] );
?>
<body>
<div id="page">
<div id="header">
<h2><?= $SLANG['ControlCap'] ?> - <?= $control['Name'] ?></h2>
</div>
<div id="content">
<ul class="tabList">
<?php
foreach ( $tabs as $name=>$value )
{
if ( $_REQUEST['tab'] == $name )
{
?>
<li class="active"><?= $value ?></li>
<?php
}
else
{
?>
<li><a href="?view=<?= $_REQUEST['view'] ?>&tab=<?= $name ?>"><?= $value ?></a></li>
<?php
}
}
?>
</ul>
<form name="contentForm" id="contentForm" method="post" action="<?= $_SERVER['PHP_SELF'] ?>">
<input type="hidden" name="view" value="<?= $_REQUEST['view'] ?>"/>
<input type="hidden" name="tab" value="<?= $_REQUEST['tab'] ?>"/>
<input type="hidden" name="action" value="controlcap"/>
<input type="hidden" name="cid" value="<?= $_REQUEST['cid'] ?>"/>
<?php
if ( $_REQUEST['tab'] != 'main' )
{
?>
<input type="hidden" name="newControl[Name]" value="<?= $newControl['Name'] ?>"/>
<input type="hidden" name="newControl[Type]" value="<?= $newControl['Type'] ?>"/>
<input type="hidden" name="newControl[Protocol]" value="<?= $newControl['Protocol'] ?>"/>
<input type="hidden" name="newControl[CanWake]" value="<?= $newControl['CanWake'] ?>"/>
<input type="hidden" name="newControl[CanSleep]" value="<?= $newControl['CanSleep'] ?>"/>
<input type="hidden" name="newControl[CanReset]" value="<?= $newControl['CanReset'] ?>"/>
<?php
}
if ( $_REQUEST['tab'] != 'move' )
{
?>
<input type="hidden" name="newControl[CanMove]" value="<?= $newControl['CanMove'] ?>"/>
<input type="hidden" name="newControl[CanMoveDiag]" value="<?= $newControl['CanMoveDiag'] ?>"/>
<input type="hidden" name="newControl[CanMoveMap]" value="<?= $newControl['CanMoveMap'] ?>"/>
<input type="hidden" name="newControl[CanMoveAbs]" value="<?= $newControl['CanMoveAbs'] ?>"/>
<input type="hidden" name="newControl[CanMoveRel]" value="<?= $newControl['CanMoveRel'] ?>"/>
<input type="hidden" name="newControl[CanMoveCon]" value="<?= $newControl['CanMoveCon'] ?>"/>
<?php
}
if ( $_REQUEST['tab'] != 'pan' )
{
?>
<input type="hidden" name="newControl[CanPan]" value="<?= $newControl['CanPan'] ?>"/>
<input type="hidden" name="newControl[MinPanRange]" value="<?= $newControl['MinPanRange'] ?>"/>
<input type="hidden" name="newControl[MaxPanRange]" value="<?= $newControl['MaxPanRange'] ?>"/>
<input type="hidden" name="newControl[MinPanStep]" value="<?= $newControl['MinPanStep'] ?>"/>
<input type="hidden" name="newControl[MaxPanStep]" value="<?= $newControl['MaxPanStep'] ?>"/>
<input type="hidden" name="newControl[HasPanSpeed]" value="<?= $newControl['HasPanSpeed'] ?>"/>
<input type="hidden" name="newControl[MinPanSpeed]" value="<?= $newControl['MinPanSpeed'] ?>"/>
<input type="hidden" name="newControl[MaxPanSpeed]" value="<?= $newControl['MaxPanSpeed'] ?>"/>
<input type="hidden" name="newControl[HasTurboPan]" value="<?= $newControl['HasTurboPan'] ?>"/>
<input type="hidden" name="newControl[TurboPanSpeed]" value="<?= $newControl['TurboPanSpeed'] ?>"/>
<?php
}
if ( $_REQUEST['tab'] != 'tilt' )
{
?>
<input type="hidden" name="newControl[CanTilt]" value="<?= $newControl['CanTilt'] ?>"/>
<input type="hidden" name="newControl[MinTiltRange]" value="<?= $newControl['MinTiltRange'] ?>"/>
<input type="hidden" name="newControl[MaxTiltRange]" value="<?= $newControl['MaxTiltRange'] ?>"/>
<input type="hidden" name="newControl[MinTiltStep]" value="<?= $newControl['MinTiltStep'] ?>"/>
<input type="hidden" name="newControl[MaxTiltStep]" value="<?= $newControl['MaxTiltStep'] ?>"/>
<input type="hidden" name="newControl[HasTiltSpeed]" value="<?= $newControl['HasTiltSpeed'] ?>"/>
<input type="hidden" name="newControl[MinTiltSpeed]" value="<?= $newControl['MinTiltSpeed'] ?>"/>
<input type="hidden" name="newControl[MaxTiltSpeed]" value="<?= $newControl['MaxTiltSpeed'] ?>"/>
<input type="hidden" name="newControl[HasTurboTilt]" value="<?= $newControl['HasTurboTilt'] ?>"/>
<input type="hidden" name="newControl[TurboTiltSpeed]" value="<?= $newControl['TurboTiltSpeed'] ?>"/>
<?php
}
if ( $_REQUEST['tab'] != 'zoom' )
{
?>
<input type="hidden" name="newControl[CanZoom]" value="<?= $newControl['CanZoom'] ?>"/>
<input type="hidden" name="newControl[CanZoomAbs]" value="<?= $newControl['CanZoomAbs'] ?>"/>
<input type="hidden" name="newControl[CanZoomRel]" value="<?= $newControl['CanZoomRel'] ?>"/>
<input type="hidden" name="newControl[CanZoomCon]" value="<?= $newControl['CanZoomCon'] ?>"/>
<input type="hidden" name="newControl[MinZoomRange]" value="<?= $newControl['MinZoomRange'] ?>"/>
<input type="hidden" name="newControl[MaxZoomRange]" value="<?= $newControl['MaxZoomRange'] ?>"/>
<input type="hidden" name="newControl[MinZoomStep]" value="<?= $newControl['MinZoomStep'] ?>"/>
<input type="hidden" name="newControl[MaxZoomStep]" value="<?= $newControl['MaxZoomStep'] ?>"/>
<input type="hidden" name="newControl[HasZoomSpeed]" value="<?= $newControl['HasZoomSpeed'] ?>"/>
<input type="hidden" name="newControl[MinZoomSpeed]" value="<?= $newControl['MinZoomSpeed'] ?>"/>
<input type="hidden" name="newControl[MaxZoomSpeed]" value="<?= $newControl['MaxZoomSpeed'] ?>"/>
<?php
}
if ( $_REQUEST['tab'] != 'focus' )
{
?>
<input type="hidden" name="newControl[CanFocus]" value="<?= $newControl['CanFocus'] ?>"/>
<input type="hidden" name="newControl[CanAutoFocus]" value="<?= $newControl['CanAutoFocus'] ?>"/>
<input type="hidden" name="newControl[CanFocusAbs]" value="<?= $newControl['CanFocusAbs'] ?>"/>
<input type="hidden" name="newControl[CanFocusRel]" value="<?= $newControl['CanFocusRel'] ?>"/>
<input type="hidden" name="newControl[CanFocusCon]" value="<?= $newControl['CanFocusCon'] ?>"/>
<input type="hidden" name="newControl[MinFocusRange]" value="<?= $newControl['MinFocusRange'] ?>"/>
<input type="hidden" name="newControl[MaxFocusRange]" value="<?= $newControl['MaxFocusRange'] ?>"/>
<input type="hidden" name="newControl[MinFocusStep]" value="<?= $newControl['MinFocusStep'] ?>"/>
<input type="hidden" name="newControl[MaxFocusStep]" value="<?= $newControl['MaxFocusStep'] ?>"/>
<input type="hidden" name="newControl[HasFocusSpeed]" value="<?= $newControl['HasFocusSpeed'] ?>"/>
<input type="hidden" name="newControl[MinFocusSpeed]" value="<?= $newControl['MinFocusSpeed'] ?>"/>
<input type="hidden" name="newControl[MaxFocusSpeed]" value="<?= $newControl['MaxFocusSpeed'] ?>"/>
<?php
}
if ( $_REQUEST['tab'] != 'iris' )
{
?>
<input type="hidden" name="newControl[CanIris]" value="<?= $newControl['CanIris'] ?>"/>
<input type="hidden" name="newControl[CanAutoIris]" value="<?= $newControl['CanAutoIris'] ?>"/>
<input type="hidden" name="newControl[CanIrisAbs]" value="<?= $newControl['CanIrisAbs'] ?>"/>
<input type="hidden" name="newControl[CanIrisRel]" value="<?= $newControl['CanIrisRel'] ?>"/>
<input type="hidden" name="newControl[CanIrisCon]" value="<?= $newControl['CanIrisCon'] ?>"/>
<input type="hidden" name="newControl[MinIrisRange]" value="<?= $newControl['MinIrisRange'] ?>"/>
<input type="hidden" name="newControl[MaxIrisRange]" value="<?= $newControl['MaxIrisRange'] ?>"/>
<input type="hidden" name="newControl[MinIrisStep]" value="<?= $newControl['MinIrisStep'] ?>"/>
<input type="hidden" name="newControl[MaxIrisStep]" value="<?= $newControl['MaxIrisStep'] ?>"/>
<input type="hidden" name="newControl[HasIrisSpeed]" value="<?= $newControl['HasIrisSpeed'] ?>"/>
<input type="hidden" name="newControl[MinIrisSpeed]" value="<?= $newControl['MinIrisSpeed'] ?>"/>
<input type="hidden" name="newControl[MaxIrisSpeed]" value="<?= $newControl['MaxIrisSpeed'] ?>"/>
<?php
}
if ( $_REQUEST['tab'] != 'gain' )
{
?>
<input type="hidden" name="newControl[CanGain]" value="<?= $newControl['CanGain'] ?>"/>
<input type="hidden" name="newControl[CanAutoGain]" value="<?= $newControl['CanAutoGain'] ?>"/>
<input type="hidden" name="newControl[CanGainAbs]" value="<?= $newControl['CanGainAbs'] ?>"/>
<input type="hidden" name="newControl[CanGainRel]" value="<?= $newControl['CanGainRel'] ?>"/>
<input type="hidden" name="newControl[CanGainCon]" value="<?= $newControl['CanGainCon'] ?>"/>
<input type="hidden" name="newControl[MinGainRange]" value="<?= $newControl['MinGainRange'] ?>"/>
<input type="hidden" name="newControl[MaxGainRange]" value="<?= $newControl['MaxGainRange'] ?>"/>
<input type="hidden" name="newControl[MinGainStep]" value="<?= $newControl['MinGainStep'] ?>"/>
<input type="hidden" name="newControl[MaxGainStep]" value="<?= $newControl['MaxGainStep'] ?>"/>
<input type="hidden" name="newControl[HasGainSpeed]" value="<?= $newControl['HasGainSpeed'] ?>"/>
<input type="hidden" name="newControl[MinGainSpeed]" value="<?= $newControl['MinGainSpeed'] ?>"/>
<input type="hidden" name="newControl[MaxGainSpeed]" value="<?= $newControl['MaxGainSpeed'] ?>"/>
<?php
}
if ( $_REQUEST['tab'] != 'white' )
{
?>
<input type="hidden" name="newControl[CanWhite]" value="<?= $newControl['CanWhite'] ?>"/>
<input type="hidden" name="newControl[CanAutoWhite]" value="<?= $newControl['CanAutoWhite'] ?>"/>
<input type="hidden" name="newControl[CanWhiteAbs]" value="<?= $newControl['CanWhiteAbs'] ?>"/>
<input type="hidden" name="newControl[CanWhiteRel]" value="<?= $newControl['CanWhiteRel'] ?>"/>
<input type="hidden" name="newControl[CanWhiteCon]" value="<?= $newControl['CanWhiteCon'] ?>"/>
<input type="hidden" name="newControl[MinWhiteRange]" value="<?= $newControl['MinWhiteRange'] ?>"/>
<input type="hidden" name="newControl[MaxWhiteRange]" value="<?= $newControl['MaxWhiteRange'] ?>"/>
<input type="hidden" name="newControl[MinWhiteStep]" value="<?= $newControl['MinWhiteStep'] ?>"/>
<input type="hidden" name="newControl[MaxWhiteStep]" value="<?= $newControl['MaxWhiteStep'] ?>"/>
<input type="hidden" name="newControl[HasWhiteSpeed]" value="<?= $newControl['HasWhiteSpeed'] ?>"/>
<input type="hidden" name="newControl[MinWhiteSpeed]" value="<?= $newControl['MinWhiteSpeed'] ?>"/>
<input type="hidden" name="newControl[MaxWhiteSpeed]" value="<?= $newControl['MaxWhiteSpeed'] ?>"/>
<?php
}
if ( $_REQUEST['tab'] != 'presets' )
{
?>
<input type="hidden" name="newControl[HasPresets]" value="<?= $newControl['HasPresets'] ?>"/>
<input type="hidden" name="newControl[NumPresets]" value="<?= $newControl['NumPresets'] ?>"/>
<input type="hidden" name="newControl[HasHomePreset]" value="<?= $newControl['HasHomePreset'] ?>"/>
<input type="hidden" name="newControl[CanSetPresets]" value="<?= $newControl['CanSetPresets'] ?>"/>
<?php
}
?>
<table id="contentTable" class="major" cellspacing="0">
<tbody>
<?php
switch ( $_REQUEST['tab'] )
{
case 'main' :
{
?>
<tr><th scope="row"><?= $SLANG['Name'] ?></th><td><input type="text" name="newControl[Name]" value="<?= $newControl['Name'] ?>" size="24"/></td></tr>
<?php
$types = array( 'Local'=>$SLANG['Local'], 'Remote'=>$SLANG['Remote'] );
?>
<tr><th scope="row"><?= $SLANG['Type'] ?></td><td><?= buildSelect( "newControl[Type]", $types ); ?></td></tr>
<tr><th scope="row"><?= $SLANG['Protocol'] ?></th><td><input type="text" name="newControl[Protocol]" value="<?= $newControl['Protocol'] ?>" size="24"/></td></tr>
<tr><th scope="row"><?= $SLANG['CanWake'] ?></th><td><input type="checkbox" name="newControl[CanWake]" value="1"<?php if ( !empty($newControl['CanWake']) ) { ?> checked="checked"<?php } ?>></td></tr>
<tr><th scope="row"><?= $SLANG['CanSleep'] ?></th><td><input type="checkbox" name="newControl[CanSleep]" value="1"<?php if ( !empty($newControl['CanSleep']) ) { ?> checked="checked"<?php } ?>></td></tr>
<tr><th scope="row"><?= $SLANG['CanReset'] ?></th><td><input type="checkbox" name="newControl[CanReset]" value="1"<?php if ( !empty($newControl['CanReset']) ) { ?> checked="checked"<?php } ?>></td></tr>
<?php
break;
}
case 'move' :
{
?>
<tr><th scope="row"><?= $SLANG['CanMove'] ?></th><td><input type="checkbox" name="newControl[CanMove]" value="1"<?php if ( !empty($newControl['CanMove']) ) { ?> checked="checked"<?php } ?>></td></tr>
<tr><th scope="row"><?= $SLANG['CanMoveDiag'] ?></th><td><input type="checkbox" name="newControl[CanMoveDiag]" value="1"<?php if ( !empty($newControl['CanMoveDiag']) ) { ?> checked="checked"<?php } ?>></td></tr>
<tr><th scope="row"><?= $SLANG['CanMoveMap'] ?></th><td><input type="checkbox" name="newControl[CanMoveMap]" value="1"<?php if ( !empty($newControl['CanMoveMap']) ) { ?> checked="checked"<?php } ?>></td></tr>
<tr><th scope="row"><?= $SLANG['CanMoveAbs'] ?></th><td><input type="checkbox" name="newControl[CanMoveAbs]" value="1"<?php if ( !empty($newControl['CanMoveAbs']) ) { ?> checked="checked"<?php } ?>></td></tr>
<tr><th scope="row"><?= $SLANG['CanMoveRel'] ?></th><td><input type="checkbox" name="newControl[CanMoveRel]" value="1"<?php if ( !empty($newControl['CanMoveRel']) ) { ?> checked="checked"<?php } ?>></td></tr>
<tr><th scope="row"><?= $SLANG['CanMoveCon'] ?></th><td><input type="checkbox" name="newControl[CanMoveCon]" value="1"<?php if ( !empty($newControl['CanMoveCon']) ) { ?> checked="checked"<?php } ?>></td></tr>
<?php
break;
}
case 'pan' :
{
?>
<tr><th scope="row"><?= $SLANG['CanPan'] ?></th><td><input type="checkbox" name="newControl[CanPan]" value="1"<?php if ( !empty($newControl['CanPan']) ) { ?> checked="checked"<?php } ?>></td></tr>
<tr><th scope="row"><?= $SLANG['MinPanRange'] ?></th><td><input type="text" name="newControl[MinPanRange]" value="<?= $newControl['MinPanRange'] ?>" size="8"/></td></tr>
<tr><th scope="row"><?= $SLANG['MaxPanRange'] ?></th><td><input type="text" name="newControl[MaxPanRange]" value="<?= $newControl['MaxPanRange'] ?>" size="8"/></td></tr>
<tr><th scope="row"><?= $SLANG['MinPanStep'] ?></th><td><input type="text" name="newControl[MinPanStep]" value="<?= $newControl['MinPanStep'] ?>" size="8"/></td></tr>
<tr><th scope="row"><?= $SLANG['MaxPanStep'] ?></th><td><input type="text" name="newControl[MaxPanStep]" value="<?= $newControl['MaxPanStep'] ?>" size="8"/></td></tr>
<tr><th scope="row"><?= $SLANG['HasPanSpeed'] ?></th><td><input type="checkbox" name="newControl[HasPanSpeed]" value="1"<?php if ( !empty($newControl['HasPanSpeed']) ) { ?> checked="checked"<?php } ?>></td></tr>
<tr><th scope="row"><?= $SLANG['MinPanSpeed'] ?></th><td><input type="text" name="newControl[MinPanSpeed]" value="<?= $newControl['MinPanSpeed'] ?>" size="8"/></td></tr>
<tr><th scope="row"><?= $SLANG['MaxPanSpeed'] ?></th><td><input type="text" name="newControl[MaxPanSpeed]" value="<?= $newControl['MaxPanSpeed'] ?>" size="8"/></td></tr>
<tr><th scope="row"><?= $SLANG['HasTurboPan'] ?></th><td><input type="checkbox" name="newControl[HasTurboPan]" value="1"<?php if ( !empty($newControl['HasTurboPan']) ) { ?> checked="checked"<?php } ?>></td></tr>
<tr><th scope="row"><?= $SLANG['TurboPanSpeed'] ?></th><td><input type="text" name="newControl[TurboPanSpeed]" value="<?= $newControl['TurboPanSpeed'] ?>" size="8"/></td></tr>
<?php
break;
}
case 'tilt' :
{
?>
<tr><th scope="row"><?= $SLANG['CanTilt'] ?></th><td><input type="checkbox" name="newControl[CanTilt]" value="1"<?php if ( !empty($newControl['CanTilt']) ) { ?> checked="checked"<?php } ?>></td></tr>
<tr><th scope="row"><?= $SLANG['MinTiltRange'] ?></th><td><input type="text" name="newControl[MinTiltRange]" value="<?= $newControl['MinTiltRange'] ?>" size="8"/></td></tr>
<tr><th scope="row"><?= $SLANG['MaxTiltRange'] ?></th><td><input type="text" name="newControl[MaxTiltRange]" value="<?= $newControl['MaxTiltRange'] ?>" size="8"/></td></tr>
<tr><th scope="row"><?= $SLANG['MinTiltStep'] ?></th><td><input type="text" name="newControl[MinTiltStep]" value="<?= $newControl['MinTiltStep'] ?>" size="8"/></td></tr>
<tr><th scope="row"><?= $SLANG['MaxTiltStep'] ?></th><td><input type="text" name="newControl[MaxTiltStep]" value="<?= $newControl['MaxTiltStep'] ?>" size="8"/></td></tr>
<tr><th scope="row"><?= $SLANG['HasTiltSpeed'] ?></th><td><input type="checkbox" name="newControl[HasTiltSpeed]" value="1"<?php if ( !empty($newControl['HasTiltSpeed']) ) { ?> checked="checked"<?php } ?>></td></tr>
<tr><th scope="row"><?= $SLANG['MinTiltSpeed'] ?></th><td><input type="text" name="newControl[MinTiltSpeed]" value="<?= $newControl['MinTiltSpeed'] ?>" size="8"/></td></tr>
<tr><th scope="row"><?= $SLANG['MaxTiltSpeed'] ?></th><td><input type="text" name="newControl[MaxTiltSpeed]" value="<?= $newControl['MaxTiltSpeed'] ?>" size="8"/></td></tr>
<tr><th scope="row"><?= $SLANG['HasTurboTilt'] ?></th><td><input type="checkbox" name="newControl[HasTurboTilt]" value="1"<?php if ( !empty($newControl['HasTurboTilt']) ) { ?> checked="checked"<?php } ?>></td></tr>
<tr><th scope="row"><?= $SLANG['TurboTiltSpeed'] ?></th><td><input type="text" name="newControl[TurboTiltSpeed]" value="<?= $newControl['TurboTiltSpeed'] ?>" size="8"/></td></tr>
<?php
break;
}
case 'zoom' :
{
?>
<tr><th scope="row"><?= $SLANG['CanZoom'] ?></th><td><input type="checkbox" name="newControl[CanZoom]" value="1"<?php if ( !empty($newControl['CanZoom']) ) { ?> checked="checked"<?php } ?>></td></tr>
<tr><th scope="row"><?= $SLANG['CanZoomAbs'] ?></th><td><input type="checkbox" name="newControl[CanZoomAbs]" value="1"<?php if ( !empty($newControl['CanZoomAbs']) ) { ?> checked="checked"<?php } ?>></td></tr>
<tr><th scope="row"><?= $SLANG['CanZoomRel'] ?></th><td><input type="checkbox" name="newControl[CanZoomRel]" value="1"<?php if ( !empty($newControl['CanZoomRel']) ) { ?> checked="checked"<?php } ?>></td></tr>
<tr><th scope="row"><?= $SLANG['CanZoomCon'] ?></th><td><input type="checkbox" name="newControl[CanZoomCon]" value="1"<?php if ( !empty($newControl['CanZoomCon']) ) { ?> checked="checked"<?php } ?>></td></tr>
<tr><th scope="row"><?= $SLANG['MinZoomRange'] ?></th><td><input type="text" name="newControl[MinZoomRange]" value="<?= $newControl['MinZoomRange'] ?>" size="8"/></td></tr>
<tr><th scope="row"><?= $SLANG['MaxZoomRange'] ?></th><td><input type="text" name="newControl[MaxZoomRange]" value="<?= $newControl['MaxZoomRange'] ?>" size="8"/></td></tr>
<tr><th scope="row"><?= $SLANG['MinZoomStep'] ?></th><td><input type="text" name="newControl[MinZoomStep]" value="<?= $newControl['MinZoomStep'] ?>" size="8"/></td></tr>
<tr><th scope="row"><?= $SLANG['MaxZoomStep'] ?></th><td><input type="text" name="newControl[MaxZoomStep]" value="<?= $newControl['MaxZoomStep'] ?>" size="8"/></td></tr>
<tr><th scope="row"><?= $SLANG['HasZoomSpeed'] ?></th><td><input type="checkbox" name="newControl[HasZoomSpeed]" value="1"<?php if ( !empty($newControl['HasZoomSpeed']) ) { ?> checked="checked"<?php } ?>></td></tr>
<tr><th scope="row"><?= $SLANG['MinZoomSpeed'] ?></th><td><input type="text" name="newControl[MinZoomSpeed]" value="<?= $newControl['MinZoomSpeed'] ?>" size="8"/></td></tr>
<tr><th scope="row"><?= $SLANG['MaxZoomSpeed'] ?></th><td><input type="text" name="newControl[MaxZoomSpeed]" value="<?= $newControl['MaxZoomSpeed'] ?>" size="8"/></td></tr>
<?php
break;
}
case 'focus' :
{
?>
<tr><th scope="row"><?= $SLANG['CanFocus'] ?></th><td><input type="checkbox" name="newControl[CanFocus]" value="1"<?php if ( !empty($newControl['CanFocus']) ) { ?> checked="checked"<?php } ?>></td></tr>
<tr><th scope="row"><?= $SLANG['CanAutoFocus'] ?></th><td><input type="checkbox" name="newControl[CanAutoFocus]" value="1"<?php if ( !empty($newControl['CanAutoFocus']) ) { ?> checked="checked"<?php } ?>></td></tr>
<tr><th scope="row"><?= $SLANG['CanFocusAbs'] ?></th><td><input type="checkbox" name="newControl[CanFocusAbs]" value="1"<?php if ( !empty($newControl['CanFocusAbs']) ) { ?> checked="checked"<?php } ?>></td></tr>
<tr><th scope="row"><?= $SLANG['CanFocusRel'] ?></th><td><input type="checkbox" name="newControl[CanFocusRel]" value="1"<?php if ( !empty($newControl['CanFocusRel']) ) { ?> checked="checked"<?php } ?>></td></tr>
<tr><th scope="row"><?= $SLANG['CanFocusCon'] ?></th><td><input type="checkbox" name="newControl[CanFocusCon]" value="1"<?php if ( !empty($newControl['CanFocusCon']) ) { ?> checked="checked"<?php } ?>></td></tr>
<tr><th scope="row"><?= $SLANG['MinFocusRange'] ?></th><td><input type="text" name="newControl[MinFocusRange]" value="<?= $newControl['MinFocusRange'] ?>" size="8"/></td></tr>
<tr><th scope="row"><?= $SLANG['MaxFocusRange'] ?></th><td><input type="text" name="newControl[MaxFocusRange]" value="<?= $newControl['MaxFocusRange'] ?>" size="8"/></td></tr>
<tr><th scope="row"><?= $SLANG['MinFocusStep'] ?></th><td><input type="text" name="newControl[MinFocusStep]" value="<?= $newControl['MinFocusStep'] ?>" size="8"/></td></tr>
<tr><th scope="row"><?= $SLANG['MaxFocusStep'] ?></th><td><input type="text" name="newControl[MaxFocusStep]" value="<?= $newControl['MaxFocusStep'] ?>" size="8"/></td></tr>
<tr><th scope="row"><?= $SLANG['HasFocusSpeed'] ?></th><td><input type="checkbox" name="newControl[HasFocusSpeed]" value="1"<?php if ( !empty($newControl['HasFocusSpeed']) ) { ?> checked="checked"<?php } ?>></td></tr>
<tr><th scope="row"><?= $SLANG['MinFocusSpeed'] ?></th><td><input type="text" name="newControl[MinFocusSpeed]" value="<?= $newControl['MinFocusSpeed'] ?>" size="8"/></td></tr>
<tr><th scope="row"><?= $SLANG['MaxFocusSpeed'] ?></th><td><input type="text" name="newControl[MaxFocusSpeed]" value="<?= $newControl['MaxFocusSpeed'] ?>" size="8"/></td></tr>
<?php
break;
}
case 'iris' :
{
?>
<tr><th scope="row"><?= $SLANG['CanIris'] ?></th><td><input type="checkbox" name="newControl[CanIris]" value="1"<?php if ( !empty($newControl['CanIris']) ) { ?> checked="checked"<?php } ?>></td></tr>
<tr><th scope="row"><?= $SLANG['CanAutoIris'] ?></th><td><input type="checkbox" name="newControl[CanAutoIris]" value="1"<?php if ( !empty($newControl['CanAutoIris']) ) { ?> checked="checked"<?php } ?>></td></tr>
<tr><th scope="row"><?= $SLANG['CanIrisAbs'] ?></th><td><input type="checkbox" name="newControl[CanIrisAbs]" value="1"<?php if ( !empty($newControl['CanIrisAbs']) ) { ?> checked="checked"<?php } ?>></td></tr>
<tr><th scope="row"><?= $SLANG['CanIrisRel'] ?></th><td><input type="checkbox" name="newControl[CanIrisRel]" value="1"<?php if ( !empty($newControl['CanIrisRel']) ) { ?> checked="checked"<?php } ?>></td></tr>
<tr><th scope="row"><?= $SLANG['CanIrisCon'] ?></th><td><input type="checkbox" name="newControl[CanIrisCon]" value="1"<?php if ( !empty($newControl['CanIrisCon']) ) { ?> checked="checked"<?php } ?>></td></tr>
<tr><th scope="row"><?= $SLANG['MinIrisRange'] ?></th><td><input type="text" name="newControl[MinIrisRange]" value="<?= $newControl['MinIrisRange'] ?>" size="8"/></td></tr>
<tr><th scope="row"><?= $SLANG['MaxIrisRange'] ?></th><td><input type="text" name="newControl[MaxIrisRange]" value="<?= $newControl['MaxIrisRange'] ?>" size="8"/></td></tr>
<tr><th scope="row"><?= $SLANG['MinIrisStep'] ?></th><td><input type="text" name="newControl[MinIrisStep]" value="<?= $newControl['MinIrisStep'] ?>" size="8"/></td></tr>
<tr><th scope="row"><?= $SLANG['MaxIrisStep'] ?></th><td><input type="text" name="newControl[MaxIrisStep]" value="<?= $newControl['MaxIrisStep'] ?>" size="8"/></td></tr>
<tr><th scope="row"><?= $SLANG['HasIrisSpeed'] ?></th><td><input type="checkbox" name="newControl[HasIrisSpeed]" value="1"<?php if ( !empty($newControl['HasIrisSpeed']) ) { ?> checked="checked"<?php } ?>></td></tr>
<tr><th scope="row"><?= $SLANG['MinIrisSpeed'] ?></th><td><input type="text" name="newControl[MinIrisSpeed]" value="<?= $newControl['MinIrisSpeed'] ?>" size="8"/></td></tr>
<tr><th scope="row"><?= $SLANG['MaxIrisSpeed'] ?></th><td><input type="text" name="newControl[MaxIrisSpeed]" value="<?= $newControl['MaxIrisSpeed'] ?>" size="8"/></td></tr>
<?php
break;
}
case 'gain' :
{
?>
<tr><th scope="row"><?= $SLANG['CanGain'] ?></th><td><input type="checkbox" name="newControl[CanGain]" value="1"<?php if ( !empty($newControl['CanGain']) ) { ?> checked="checked"<?php } ?>></td></tr>
<tr><th scope="row"><?= $SLANG['CanAutoGain'] ?></th><td><input type="checkbox" name="newControl[CanAutoGain]" value="1"<?php if ( !empty($newControl['CanAutoGain']) ) { ?> checked="checked"<?php } ?>></td></tr>
<tr><th scope="row"><?= $SLANG['CanGainAbs'] ?></th><td><input type="checkbox" name="newControl[CanGainAbs]" value="1"<?php if ( !empty($newControl['CanGainAbs']) ) { ?> checked="checked"<?php } ?>></td></tr>
<tr><th scope="row"><?= $SLANG['CanGainRel'] ?></th><td><input type="checkbox" name="newControl[CanGainRel]" value="1"<?php if ( !empty($newControl['CanGainRel']) ) { ?> checked="checked"<?php } ?>></td></tr>
<tr><th scope="row"><?= $SLANG['CanGainCon'] ?></th><td><input type="checkbox" name="newControl[CanGainCon]" value="1"<?php if ( !empty($newControl['CanGainCon']) ) { ?> checked="checked"<?php } ?>></td></tr>
<tr><th scope="row"><?= $SLANG['MinGainRange'] ?></th><td><input type="text" name="newControl[MinGainRange]" value="<?= $newControl['MinGainRange'] ?>" size="8"/></td></tr>
<tr><th scope="row"><?= $SLANG['MaxGainRange'] ?></th><td><input type="text" name="newControl[MaxGainRange]" value="<?= $newControl['MaxGainRange'] ?>" size="8"/></td></tr>
<tr><th scope="row"><?= $SLANG['MinGainStep'] ?></th><td><input type="text" name="newControl[MinGainStep]" value="<?= $newControl['MinGainStep'] ?>" size="8"/></td></tr>
<tr><th scope="row"><?= $SLANG['MaxGainStep'] ?></th><td><input type="text" name="newControl[MaxGainStep]" value="<?= $newControl['MaxGainStep'] ?>" size="8"/></td></tr>
<tr><th scope="row"><?= $SLANG['HasGainSpeed'] ?></th><td><input type="checkbox" name="newControl[HasGainSpeed]" value="1"<?php if ( !empty($newControl['HasGainSpeed']) ) { ?> checked="checked"<?php } ?>></td></tr>
<tr><th scope="row"><?= $SLANG['MinGainSpeed'] ?></th><td><input type="text" name="newControl[MinGainSpeed]" value="<?= $newControl['MinGainSpeed'] ?>" size="8"/></td></tr>
<tr><th scope="row"><?= $SLANG['MaxGainSpeed'] ?></th><td><input type="text" name="newControl[MaxGainSpeed]" value="<?= $newControl['MaxGainSpeed'] ?>" size="8"/></td></tr>
<?php
break;
}
case 'white' :
{
?>
<tr><th scope="row"><?= $SLANG['CanWhite'] ?></th><td><input type="checkbox" name="newControl[CanWhite]" value="1"<?php if ( !empty($newControl['CanWhite']) ) { ?> checked="checked"<?php } ?>></td></tr>
<tr><th scope="row"><?= $SLANG['CanAutoWhite'] ?></th><td><input type="checkbox" name="newControl[CanAutoWhite]" value="1"<?php if ( !empty($newControl['CanAutoWhite']) ) { ?> checked="checked"<?php } ?>></td></tr>
<tr><th scope="row"><?= $SLANG['CanWhiteAbs'] ?></th><td><input type="checkbox" name="newControl[CanWhiteAbs]" value="1"<?php if ( !empty($newControl['CanWhiteAbs']) ) { ?> checked="checked"<?php } ?>></td></tr>
<tr><th scope="row"><?= $SLANG['CanWhiteRel'] ?></th><td><input type="checkbox" name="newControl[CanWhiteRel]" value="1"<?php if ( !empty($newControl['CanWhiteRel']) ) { ?> checked="checked"<?php } ?>></td></tr>
<tr><th scope="row"><?= $SLANG['CanWhiteCon'] ?></th><td><input type="checkbox" name="newControl[CanWhiteCon]" value="1"<?php if ( !empty($newControl['CanWhiteCon']) ) { ?> checked="checked"<?php } ?>></td></tr>
<tr><th scope="row"><?= $SLANG['MinWhiteRange'] ?></th><td><input type="text" name="newControl[MinWhiteRange]" value="<?= $newControl['MinWhiteRange'] ?>" size="8"/></td></tr>
<tr><th scope="row"><?= $SLANG['MaxWhiteRange'] ?></th><td><input type="text" name="newControl[MaxWhiteRange]" value="<?= $newControl['MaxWhiteRange'] ?>" size="8"/></td></tr>
<tr><th scope="row"><?= $SLANG['MinWhiteStep'] ?></th><td><input type="text" name="newControl[MinWhiteStep]" value="<?= $newControl['MinWhiteStep'] ?>" size="8"/></td></tr>
<tr><th scope="row"><?= $SLANG['MaxWhiteStep'] ?></th><td><input type="text" name="newControl[MaxWhiteStep]" value="<?= $newControl['MaxWhiteStep'] ?>" size="8"/></td></tr>
<tr><th scope="row"><?= $SLANG['HasWhiteSpeed'] ?></th><td><input type="checkbox" name="newControl[HasWhiteSpeed]" value="1"<?php if ( !empty($newControl['HasWhiteSpeed']) ) { ?> checked="checked"<?php } ?>></td></tr>
<tr><th scope="row"><?= $SLANG['MinWhiteSpeed'] ?></th><td><input type="text" name="newControl[MinWhiteSpeed]" value="<?= $newControl['MinWhiteSpeed'] ?>" size="8"/></td></tr>
<tr><th scope="row"><?= $SLANG['MaxWhiteSpeed'] ?></th><td><input type="text" name="newControl[MaxWhiteSpeed]" value="<?= $newControl['MaxWhiteSpeed'] ?>" size="8"/></td></tr>
<?php
break;
}
case 'presets' :
{
?>
<tr><th scope="row"><?= $SLANG['HasPresets'] ?></th><td><input type="checkbox" name="newControl[HasPresets]" value="1"<?php if ( !empty($newControl['HasPresets']) ) { ?> checked="checked"<?php } ?>></td></tr>
<tr><th scope="row"><?= $SLANG['NumPresets'] ?></th><td><input type="text" name="newControl[NumPresets]" value="<?= $newControl['NumPresets'] ?>" size="8"/></td></tr>
<tr><th scope="row"><?= $SLANG['HasHomePreset'] ?></th><td><input type="checkbox" name="newControl[HasHomePreset]" value="1"<?php if ( !empty($newControl['HasHomePreset']) ) { ?> checked="checked"<?php } ?>></td></tr>
<tr><th scope="row"><?= $SLANG['CanSetPresets'] ?></th><td><input type="checkbox" name="newControl[CanSetPresets]" value="1"<?php if ( !empty($newControl['CanSetPresets']) ) { ?> checked="checked"<?php } ?>></td></tr>
<?php
break;
}
}
?>
</tbody>
</table>
<div id="contentButtons">
<input type="submit" value="<?= $SLANG['Save'] ?>"<?php if ( !canEdit( 'Control' ) ) { ?> disabled="disabled"<?php } ?>/><input type="button" value="<?= $SLANG['Cancel'] ?>" onclick="closeWindow()"/>
</div>
</form>
</div>
</div>
</body>
</html>

View File

@ -0,0 +1,90 @@
<?php
//
// ZoneMinder web controls file, $Date$, $Revision$
// Copyright (C) 2003, 2004, 2005, 2006 Philip Coombes
//
// This program 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 program 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
//
if ( !canView( 'Control' ) )
{
$_REQUEST['view'] = "error";
return;
}
$sql = "select * from Controls order by Id";
$controls = dbFetchAll( $sql );
$focusWindow = true;
xhtmlHeaders(__FILE__, $SLANG['ControlCaps'] );
?>
<body>
<div id="page">
<div id="header">
<div id="headerButtons">
<a href="#" onclick="closeWindow();"><?= $SLANG['Close'] ?></a>
</div>
<h2><?= $SLANG['ControlCaps'] ?></h2>
</div>
<div id="content">
<form name="contentForm" id="contentForm" method="get" action="<?= $_SERVER['PHP_SELF'] ?>" onsubmit="return( confirmDelete( 'Warning, deleting a control will reset all monitors that use it to be uncontrollable.\nAre you sure you wish to delete?' ) );">
<input type="hidden" name="view" value="<?= $_REQUEST['view'] ?>"/>
<input type="hidden" name="action" value="delete"/>
<table id="contentTable" class="major" cellspacing="0">
<thead>
<tr>
<th class="colName"><?= $SLANG['Name'] ?></th>
<th class="colType"><?= $SLANG['Type'] ?></th>
<th class="colProtocol"><?= $SLANG['Protocol'] ?></th>
<th class="colCanMove"><?= $SLANG['CanMove'] ?></th>
<th class="colCanZoom"><?= $SLANG['CanZoom'] ?></th>
<th class="colCanFocus"><?= $SLANG['CanFocus'] ?></th>
<th class="colCanIris"><?= $SLANG['CanIris'] ?></th>
<th class="colCanWhiteBal"><?= $SLANG['CanWhiteBal'] ?></th>
<th class="colHasPresets"><?= $SLANG['HasPresets'] ?></th>
<th class="colMark"><?= $SLANG['Mark'] ?></th>
</tr>
</thead>
<tbody>
<?php
foreach( $controls as $control )
{
?>
<tr>
<td class="colName"><?= makePopupLink( '?view=controlcap&cid='.$control['Id'], 'zmControlCap', 'controlcap', $control['Name'], canView( 'Control' ) ) ?></td>
<td class="colType"><?= $control['Type'] ?></td>
<td class="colProtocol"><?= $control['Protocol'] ?></td>
<td class="colCanMove"><?= $control['CanMove']?$SLANG['Yes']:$SLANG['No'] ?></td>
<td class="colCanZoom"><?= $control['CanZoom']?$SLANG['Yes']:$SLANG['No'] ?></td>
<td class="colCanFocus"><?= $control['CanFocus']?$SLANG['Yes']:$SLANG['No'] ?></td>
<td class="colCanIris"><?= $control['CanIris']?$SLANG['Yes']:$SLANG['No'] ?></td>
<td class="colCanWhiteBal"><?= $control['CanWhite']?$SLANG['Yes']:$SLANG['No'] ?></td>
<td class="colHasPresets"><?= $control['HasHomePreset']?'H':'' ?><?= $control['HasPresets']?$control['NumPresets']:'0' ?></td>
<td class="colMark"><input type="checkbox" name="markCids[]" value="<?= $control['Id'] ?>" onclick="configureDeleteButton( this );"<?php if ( !canEdit( 'Control' ) ) {?> disabled="disabled"<?php } ?>/></td>
</tr>
<?php
}
?>
</tbody>
</table>
<div id="contentButtons">
<input type="button" value="<?= $SLANG['AddNewControl'] ?>" onclick="createPopup( '?view=controlcap', 'zmControlCap', 'controlcap' );"<?php if ( !canEdit( 'Control' ) ) {?> disabled="disabled"<?php } ?>/><input type="submit" name="deleteBtn" value="<?= $SLANG['Delete'] ?>" disabled="disabled"/>
</div>
</form>
</div>
</div>
</body>
</html>

View File

@ -0,0 +1,71 @@
<?php
//
// ZoneMinder web run state view file, $Date$, $Revision$
// Copyright (C) 2003, 2004, 2005, 2006 Philip Coombes
//
// This program 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 program 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
//
if ( !canEdit( 'Monitors' ) )
{
$_REQUEST['view'] = "error";
return;
}
$monitor = dbFetchOne( "select C.*,M.* from Monitors as M inner join Controls as C on (M.ControlId = C.Id ) where M.Id = '".dbEscape($_REQUEST['mid'])."'" );
$sql = "select * from ControlPresets where MonitorId = '".$monitor['Id']."'";
$labels = array();
foreach( dbFetchAll( $sql ) as $row )
{
$labels[$row['Preset']] = $row['Label'];
}
$presets = array();
for ( $i = 1; $i <= $monitor['NumPresets']; $i++ )
{
$presets[$i] = "$SLANG['Preset'] $i";
if ( !empty($labels[$i]) )
{
$presets[$i] .= " (".htmlentities(addslashes($labels[$i])).")";
}
}
$focusWindow = true;
xhtmlHeaders(__FILE__, $SLANG['SetPreset'] );
?>
<body>
<div id="page">
<div id="header">
<h2><?= $SLANG['SetPreset'] ?></h2>
</div>
<div id="content">
<form name="contentForm" id="contentForm" method="post" action="<?= $_SERVER['PHP_SELF'] ?>">
<input type="hidden" name="view" value="<?= $_REQUEST['view'] ?>"/>
<input type="hidden" name="mid" value="<?= $monitor['Id'] ?>"/>
<input type="hidden" name="action" value="control"/>
<input type="hidden" name="control" value="presetSet"/>
<p><?= buildSelect( "preset", $presets, "updateLabel()" ) ?></p>
<p><label for="newLabel"><?= $SLANG['NewLabel'] ?></label><input type="text" name="newLabel" value="" size="16"></p>
<div id="contentButtons">
<input type="submit" value="<?= $SLANG['Save'] ?>"><input type="button" value="<?= $SLANG['Cancel'] ?>" onclick="closeWindow()">
</div>
</form>
</div>
</div>
</body>
</html>

View File

@ -0,0 +1,30 @@
AUTOMAKE_OPTIONS = gnu
webdir = @WEB_PREFIX@/skins/classic/views/css
dist_web_DATA = \
console.css \
controlcaps.css \
control.css \
devices.css \
event.css \
events.css \
export.css \
filter.css \
frame.css \
frames.css \
groups.css \
monitor.css \
montage_2wide.css \
montage_3wide50enlarge.css \
montage_3wide.css \
montage_4wide.css \
montage.css \
montage_freeform.css \
options.css \
stats.css \
timeline.css \
timeline.css.php \
video.css \
watch.css \
zone.css

View File

@ -0,0 +1,97 @@
#systemTime {
float: left;
}
#title {
margin: 0 auto;
text-align: center;
width: 50%;
}
#systemStats {
float: right;
}
#monitorSummary {
float: left;
text-align: left;
width: 20%;
}
#devices {
float: left;
}
#loginBandwidth {
margin: 0 auto;
text-align: center;
width: 40%;
}
#cycleMontage {
float: right;
}
#options {
float: right;
text-align: right;
width: 20%;
}
#consoleTable {
width: 100%;
}
#consoleTable tr.highlight {
background-color: #eeeeee;
}
#consoleTable thead th {
padding-bottom: 4px;
vertical-align: middle;
}
#consoleTable tfoot td {
padding-top: 4px;
vertical-align: middle;
}
#consoleTable th,td {
height: 16px;
text-align: left;
}
#consoleTable .colOrder {
text-align: center;
}
#consoleTable .colMark {
width: 32px;
text-align: center;
}
#consoleTable .colEvents {
text-align: right;
}
#consoleTable .colZones {
text-align: right;
}
#consoleTable .colLeftButtons {
text-align: left;
}
#consoleTable .colLeftButtons input {
margin-right: 24px;
}
#consoleTable .colRightButtons {
text-align: right;
padding-right: 8px;
}
#consoleTable .colRightButtons input {
margin: 0 8px;
}

View File

@ -0,0 +1 @@
@import url(zm_html_control.css);

View File

@ -0,0 +1,3 @@
#content table.major .colCanMove, #content table.major .colCanZoom, #content table.major .colCanFocus, #content table.major .colCanIris, #content table.major .colCanWhiteBal, #content table.major .colHasPresets {
text-align: center;
}

View File

@ -0,0 +1,4 @@
input.set {
border: 1px #7F7FB2 dashed;
}

View File

@ -0,0 +1,225 @@
#dataBar {
width: 100%;
margin: 2px auto;
text-align: center;
}
#dataBar #dataTable {
width: 100%;
}
#dataBar #dataTable td {
text-align: center;
padding: 2px;
}
#menuBar1 {
width: 100%;
height: 1.5em;
padding: 3px 0;
text-align: center;
clear: both;
}
#menuBar1 #nameControl {
float: left;
}
#menuBar1 #nameControl #eventName {
margin-right: 4px;
}
#menuBar1 #replayControl {
float: right;
margin-left: 8px;
}
#menuBar1 #scaleControl {
float: right;
margin-left: 8px;
}
#menuBar2 {
width: 100%;
height: 1.2em;
padding: 3px 0;
margin-bottom: 4px;
}
#menuBar2 div {
text-align: left;
float: left;
padding: 0 12px;
}
#menuBar2 #closeWindow {
float: right;
text-align: right;
}
#imageFeed {
text-align: center;
}
#monitorStatus {
width: 100%;
margin-top: 3px;
margin-bottom: 2px;
text-align: center;
}
#monitorStatus #enableAlarms {
position: absolute;
left: 4px;
}
#monitorStatus #forceAlarm {
position: absolute;
right: 4px;
}
#monitorStatus #monitorState {
}
#dvrControls {
margin-top: 3px;
margin-bottom: 2px;
text-align: center;
}
#dvrControls input {
height: 20px;
width: 28px;
padding-bottom: 3px;
margin: 0 3px;
}
#dvrControls input[disabled=disabled] {
color: #aaaaaa;
}
#dvrControls input.active {
border: 1px solid blue;
}
#dvrControls input.inactive {
border: 1px solid green;
}
#dvrControls input.unavail {
border: 1px solid red;
}
#replayStatus {
margin: 3px 0 2px;
text-align: center;
clear: both;
}
#replayStatus > span {
padding: 0 4px;
}
#progressBar {
position: relative;
border: 1px solid #666666;
height: 15px;
margin: 0 auto;
}
#progressBar .progressBox {
position: absolute;
top: 0px;
left: 0px;
height: 15px;
background: #eeeeee;
border-left: 1px solid #999999;
}
#progressBar .complete {
background: #aaaaaa;
}
#eventStills {
width: 100%;
position: relative;
}
#eventThumbsPanel {
position: relative;
width: 100%;
margin: 4px auto;
z-index: 1;
}
#eventThumbs {
margin: 0 auto;
width: 100%;
overflow: hidden;
height: 300px;
}
#eventThumbs img {
height: 80px;
margin: 2px;
background-color: #dddddd;
}
#eventThumbs img.placeholder {
width: 100px;
}
#eventThumbs img.selected {
}
#eventImagePanel {
position: absolute;
z-index: 10;
}
#eventImageFrame {
border: 2px solid gray;
background-color: white;
padding: 4px;
}
#eventImage {
}
#eventImageBar {
width: 100%;
position: relative;
}
#eventImageData {
margin: 0 auto;
padding-top: 2px;
}
#eventImageClose {
position: absolute;
right: 0;
}
#eventImageNav {
position: relative;
}
#eventImageNav input {
width: 32px;
font-size: 16px;
}
#thumbsSlider {
margin: 4px auto 0;
width: 400px;
height: 10px;
background: #dddddd;
border: 1px solid #888888;
}
#thumbsKnob {
width: 8px;
height: 10px;
background-color: #444444;
}

View File

@ -0,0 +1,42 @@
#controls {
height: 16px;
width: 100%;
text-align: center;
margin: 0 auto;
position: relative;
}
#controls a {
width: 32%;
}
#controls #refreshLink {
position: absolute;
left: 0%;
text-align: left;
}
#controls #filterLink {
position: absolute;
left: 34%;
text-align: center;
}
#controls #timelineLink {
position: absolute;
left: 68%;
text-align: right;
}
#contentTable.major .colTime {
white-space: nowrap;
}
#contentTable.major .colId, #contentTable.major .colDuration, #contentTable.major .colFrames, #contentTable.major .colAlarmFrames, #contentTable.major .colTotScore, #contentTable.major .colMaxScore, #contentTable.major .colAvgScore {
text-align: center;
}
#contentTable.major td.colDuration {
text-align: right;
padding-right: 8px;
}

View File

@ -0,0 +1,15 @@
#contentTable + input {
margin-top: 6px;
}
#contentTable th, #contentTable td {
white-space: nowrap;
}
#exportProgress {
margin: 8px auto 4px;
}
#downloadLink {
margin-top: 8px;
}

View File

@ -0,0 +1,25 @@
#filterSelector {
}
table.filterTable {
width: 100%;
}
#fieldsTable td {
height: 16px;
}
#fieldsTable input[type=button] {
width: 1.6em;
margin-left: 2px;
text-align: center;
}
#sortTable input[type=text] {
margin-right: 4px;
}
#actionsTable input[type=text] {
margin-left: 4px;
}

View File

@ -0,0 +1,30 @@
#controls {
width: 80%;
text-align: center;
margin: 0 auto;
}
#controls a {
width: 40px;
margin-left: -20px;
}
#firstLink {
position: absolute;
left: 13%;
}
#prevLink {
position: absolute;
left: 37%;
}
#nextLink {
position: absolute;
left: 63%;
}
#lastLink {
position: absolute;
left: 87%;
}

View File

@ -0,0 +1,15 @@
#contentTable.major .colId, #contentTable.major .colType, #contentTable.major .colTimeStamp, #contentTable.major .colTimeDelta, #contentTable.major .colScore {
text-align: center;
}
tr.alarm {
background-color: #fa8072;
}
tr.bulk {
background-color: #cccccc;
}
tr.normal {
background-color: #ffffff;
}

View File

@ -0,0 +1,6 @@
#contentTable .colSelect {
text-align: center;
}
#contentTable .colSelect input {
}

View File

@ -0,0 +1,5 @@
.swatch {
border: 1px solid black;
margin-left: 3px;
padding: 0px;
}

View File

@ -0,0 +1,41 @@
#header {
width: 99%;
}
#layout {
margin-right: 10px;
}
#content {
width: 99%;
}
#monitors .alarm {
color: red;
}
#monitors .alert {
color: orange;
}
#monitors .imageFeed {
text-align: center;
vertical-align: middle;
}
#monitors .imageFeed img, #monitors .imageFeed img.idle {
border: 1px solid white;
}
#monitors .imageFeed img.alarm {
border: 1px solid red;
}
#monitors .imageFeed img.alert {
border: 1px solid orange;
}
#monitors .monitorState {
margin: 2px auto;
text-align: center;
}

View File

@ -0,0 +1,30 @@
#monitors {
width: 100%;
margin: 0 auto;
text-align: center;
}
#monitors .monitorFrame {
padding: 1px;
float: left;
}
#monitors .monitor {
}
#monitorFrame0, #monitorFrame2, #monitorFrame4, #monitorFrame6, #monitorFrame8, #monitorFrame10, #monitorFrame12, #monitorFrame14 {
width: 49%;
clear: both;
}
#monitor0, #monitor2, #monitor4, #monitor6, #monitor8, #monitor10, #monitor12, #monitor14 {
float: right;
}
#monitorFrame1, #monitorFrame3, #monitorFrame5, #monitorFrame7, #monitorFrame9, #monitorFrame11, #monitorFrame13, #monitorFrame15 {
width: 49%;
}
#monitor1, #monitor3, #monitor5, #monitor7, #monitor9, #monitor11, #monitor13, #monitor15 {
float: left;
}

View File

@ -0,0 +1,37 @@
#monitors {
width: 100%;
margin: 0 auto;
text-align: center;
}
#monitors .monitorFrame {
padding: 1px;
float: left;
width: 33%;
}
#monitors .monitor {
text-align: center;
}
#monitorFrame0, #monitorFrame3, #monitorFrame6, #monitorFrame9, #monitorFrame12, #monitorFrame15 {
clear: both;
}
#monitor0, #monitor3, #monitor6, #monitor9, #monitor12, #monitor15 {
float: right;
}
#monitorFrame1, #monitorFrame4, #monitorFrame7, #monitorFrame10, #monitorFrame13, #monitorFrame16 {
text-align: center;
}
#monitor1, #monitor4, #monitor7, #monitor10, #monitor13, #monitor16 {
}
#monitorFrame2, #monitorFrame5, #monitorFrame8, #monitorFrame11, #monitorFrame14, #monitorFrame17 {
}
#monitor2, #monitor5, #monitor8, #monitor11, #monitor14, #monitor17 {
float: left;
}

View File

@ -0,0 +1,66 @@
#monitors {
width: 100%;
margin: 0 auto;
text-align: center;
}
#monitors .monitorFrame {
float: left;
padding: 1px;
}
#monitors .monitor {
text-align: center;
}
#monitorFrame0, #monitorFrame3, #monitorFrame6, #monitorFrame9, #monitorFrame12, #monitorFrame15 {
width: 32%;
text-align: right;
clear: both;
}
#monitor0, #monitor3, #monitor6, #monitor9, #monitor12, #monitor15 {
margin-left: auto;
margin-right: 0;
}
#monitorFrame1, #monitorFrame4, #monitorFrame7, #monitorFrame10, #monitorFrame13, #monitorFrame16 {
width: 32%;
text-align: center;
}
#monitor1, #monitor4, #monitor7, #monitor10, #monitor13, #monitor16 {
margin-left: auto;
margin-right: auto;
}
#monitorFrame2, #monitorFrame5, #monitorFrame8, #monitorFrame11, #monitorFrame14, #monitorFrame17 {
width: 32%;
text-align: left;
}
#monitor2, #monitor5, #monitor8, #monitor11, #monitor14, #monitor17 {
margin-left: 0;
margin-right: auto;
}
#monitors .imageFeed img.idle, #monitors .imageFeed img.alert {
width: 100%;
height: 100%;
}
#monitors .imageFeed img.alarm {
}
#monitors .monitorFrame > div.alarm {
z-index: 100;
position: absolute;
width: 96%;
left: 2%;
top: 15%;
}
#monitors .monitorFrame > div.alarm .monitorState {
font-weight: bold;
font-size: 150%;
}

View File

@ -0,0 +1,44 @@
#monitors {
width: 100%;
margin: 0 auto;
text-align: center;
}
#monitors .monitorFrame {
padding: 1px;
float: left;
width: 24.5%;
}
#monitors .monitor {
text-align: center;
}
#monitorFrame0, #monitorFrame4, #monitorFrame8, #monitorFrame12, #monitorFrame16, #monitorFrame20 {
clear: both;
}
#monitor0, #monitor4, #monitor8, #monitor12, #monitor16, #monitor20 {
float: right;
}
#monitorFrame1, #monitorFrame5, #monitorFrame9, #monitorFrame13, #monitorFrame17, #monitorFrame21 {
text-align: center;
}
#monitor1, #monitor5, #monitor9, #monitor13, #monitor17, #monitor21 {
}
#monitorFrame2, #monitorFrame6, #monitorFrame10, #monitorFrame14, #monitorFrame18, #monitorFrame22 {
text-align: center;
}
#monitor2, #monitor6, #monitor10, #monitor14, #monitor18, #monitor22 {
}
#monitorFrame3, #monitorFrame7, #monitorFrame11, #monitorFrame15, #monitorFrame19, #monitorFrame23 {
}
#monitor3, #monitor7, #monitor11, #monitor15, #monitor19, #monitor23 {
float: left;
}

View File

@ -0,0 +1,9 @@
#monitors {
margin: 0 auto;
text-align: center;
}
#monitors .monitorFrame {
float: left;
padding: 1px;
}

View File

@ -0,0 +1,24 @@
input.small {
width: 6em;
}
input.medium {
width: 9em;
}
input.large {
width: 20em;
}
#contentTable.optionTable th, #contentTable.optionTable td {
vertical-align: top;
}
#contentTable.userTable th, #contentTable.userTable td {
text-align: center;
}
#contentTable.userTable .colMonitor, #contentTable.userTable .colUsername {
text-align: left;
}

View File

@ -0,0 +1,9 @@
#contentTable.major .colZone, #contentTable.major .colPixelDiff, #contentTable.major .colAlarmPx, #contentTable.major .colFilterPx, #contentTable.major .colBlobPx, #contentTable.major .colBlobs, #contentTable.major .colBlobSizes, #contentTable.major .colAlarmLimits, #contentTable.major .colScore {
text-align: center;
}
#contentTable.major .rowNoStats {
text-align: center;
padding: 20px;
}

View File

@ -0,0 +1,222 @@
#content {
position: relative;
text-align: center;
border: 1px solid #666666;
margin: 0 auto;
}
#title {
position: relative;
margin: 0 auto;
color: #016A9D;
height: 30px;
font-size: 13px;
font-weight: bold;
line-height: 20px;
}
#listLink {
position: absolute;
top: 5px;
left: 20px;
height: 15;
}
#closeLink {
position: absolute;
top: 5px;
right: 20px;
height: 15;
}
#topPanel {
position: relative;
height: 220px;
margin: 4px auto 6px;
}
#topPanel #imagePanel
{
width: 50%;
float: left;
text-align: right;
}
#topPanel #image {
float: right;
margin: 0 auto;
width: 90%;
text-align: right;
margin-right: 2px;
background-color: #eeeeee;
border: 1px solid #c8c8c8;
}
#topPanel #image img {
float: left;
top: 0px;
background-color: #f8f8f8;
width: 100%;
}
#topPanel #dataPanel {
width: 45%;
float: left;
text-align: left;
margin-left: 2px;
}
#topPanel #textPanel {
text-align: left;
width: 100%;
height: 140px;
margin: 0 auto;
color: #016A9D;
font-size: 11px;
font-weight: bold;
line-height: 14px;
background-color: #eeeeee;
border: 1px solid #c8c8c8;
padding: 2px;
}
#topPanel #navPanel {
width: 100%;
height: 70px;
margin: 4px auto;
}
#topPanel #navPanel input {
background-color: #eeeeee;
border: 1px solid #c8c8c8;
padding: 5px;
}
#chartPanel {
position: relative;
margin: 0 auto;
}
#chartPanel #chart {
position: relative;
border: 1px solid black;
margin: 0 auto;
z-index: 0;
}
#chartPanel #activity {
position: absolute;
text-align: center;
left: 0px;
border-bottom: 1px solid #cccccc;
}
#chartPanel #activity div.activity {
position: absolute;
bottom: 0px;
z-index: 3;
width: 1px;
}
#chartPanel .events {
position: absolute;
text-align: center;
left: 0px;
background-color: #fcfcfc;
border-bottom: 1px solid black;
}
#chartPanel .event {
position: absolute;
bottom: 0px;
z-index: 3;
}
#chartLabels {
margin: 25px auto 0;
text-align: center;
}
#range {
width: 30%;
margin: 0 auto;
color: #016A9D;
font-size: 11px;
font-weight: bold;
line-height: 20px;
}
#key {
float: right;
margin-top: -4px;
text-align: right;
}
span.keyEntry {
}
img.keyBox {
position: relative;
border: 1px solid black;
width: 16px;
height: 16px;
top: 4px;
margin-left: 4px;
}
div.majGridX {
position: absolute;
z-index: 1;
top: 0px;
width: 1px;
border-left: dotted 1px #cccccc;
}
div.majTickX {
position: absolute;
bottom: -7px;
width: 1px;
height: 7px;
border-left: solid 1px black;
}
div.majLabelX {
position: absolute;
text-align: center;
bottom: -20px;
width: 50px;
font-size: 9px;
font-weight: normal;
}
div.majGridY {
position: absolute;
z-index: 1;
left: 0px;
height: 1px;
border-top: dotted 1px #cccccc;
}
div.majTickY {
position: absolute;
left: -7px;
height: 1px;
width: 7px;
border-top: solid 1px black;
}
div.majLabelY {
position: absolute;
text-align: right;
left: -30px;
width: 20px;
font-size: 9px;
font-weight: normal;
}
div.zoom {
position: absolute;
z-index: 2;
bottom: 0px;
}

View File

@ -0,0 +1,77 @@
.chartSize {
width: <?= $chart['width'] ?>px;
height: <?= $chart['height'] ?>px;
}
.graphSize {
width: <?= $chart['graph']['width'] ?>px;
height: <?= $chart['graph']['height'] ?>px;
}
.graphHeight {
height: <?= $chart['graph']['height'] ?>px;
}
.graphWidth {
width: <?= $chart['graph']['width'] ?>px;
}
.imageSize {
width: <?= $chart['image']['width'] ?>px;
height: <?= $chart['image']['height'] ?>px;
}
.imageHeight {
height: <?= $chart['image']['height'] ?>px;
}
.activitySize {
width: <?= $chart['graph']['width'] ?>px;
height: <?= $chart['graph']['activityHeight'] ?>px;
}
.eventsSize {
width: <?= $chart['graph']['width'] ?>px;
height: <?= $chart['graph']['eventBarHeight'] ?>px;
}
.eventsHeight {
height: <?= $chart['graph']['eventBarHeight'] ?>px;
}
<?php
if ( $mode == "overlay" )
{
foreach ( array_keys($monitorIds) as $monitorId )
{
?>
#chartPanel .eventsPos<?= $monitorId ?> {
top: <?= $chart['eventBars'][$monitorId]['top'] ?>px;
}
<?php
}
}
elseif ( $mode == "split" )
{
foreach ( array_keys($monitorIds) as $monitorId )
{
?>
#chartPanel .activityPos<?= $monitorId ?> {
top: <?= $char['activityBars'][$monitorId]['top'] ?>px;
}
#chartPanel .eventsPos<?= $monitorId ?> {
top: <?= $char['eventBars'][$monitorId]['top'] ?>px;
}
<?php
}
}
foreach( array_keys($monEventSlots) as $monitorId )
{
?>
.monitorColour<?= $monitorId ?> {
background-color: <?= $monitors[$monitorId]['WebColour'] ?>;
}
<?php
}
?>

View File

@ -0,0 +1,19 @@
#contentTable + input {
margin-top: 6px;
}
#videoProgress {
margin: 8px auto 4px;
}
#videoFilesHeader {
margin: 8px auto 4px;
}
#videoNoFiles {
margin: 4px auto;
}
#videoFile {
margin-bottom: 6px;
}

View File

@ -0,0 +1,134 @@
@import url(../../css/control.css);
#menuBar {
margin: 6px auto 4px;
text-align: center;
}
#menuBar #monitorName {
float: left;
}
#menuBar #closeControl {
float: right;
}
#menuBar #menuControls {
margin: 0 auto;
width: 60%;
}
#menuBar #menuControls #controlControl {
float: left;
}
#menuBar #menuControls #eventsControl {
float: left;
}
#menuBar #menuControls #settingsControl {
float: right;
}
#menuBar #menuControls #scaleControl {
margin: 0 auto;
}
#imageFeed{
text-align: center;
}
#monitorStatus {
margin: 4px auto;
text-align: center;
}
#monitorStatus #enableDisableAlarms {
float: left;
}
#monitorStatus #forceCancelAlarm {
float: right;
}
#monitorStatus #monitorState {
}
#dvrControls {
margin-top: 3px;
margin-bottom: 2px;
text-align: center;
}
#dvrControls input {
height: 20px;
width: 28px;
padding-bottom: 3px;
margin: 0 3px;
}
#dvrControls input[disabled] {
color: #aaaaaa;
}
#dvrControls input.active {
border: 1px solid blue;
}
#dvrControls input.inactive {
border: 1px solid green;
}
#dvrControls input.unavail {
border: 1px solid red;
}
#replayStatus {
margin: 3px 0 2px;
text-align: center;
clear: both;
}
#replayStatus > span {
padding: 0 4px;
}
#events {
margin: 0 auto;
}
#eventList {
width: 100%;
}
#eventList thead td {
font-weight: bold;
}
#eventList th, #eventList td {
text-align: center;
}
li {
display: inline;
list-style-type: none;
}
span.alarm {
color: #DC143C;
font-weight: bold;
}
span.alert {
color: #FF8C00;
font-weight: bold;
}
#eventList tr.recent {
background-color: #B0E0E6;
}
#eventList tr.highlight {
background-color: #DCDCDC;
}

View File

@ -0,0 +1,91 @@
#settingsPanel {
float: left;
margin: 0 2px;
}
#zoneSettings {
border-collapse: collapse;
}
#zoneSettings th, #zoneSettings td {
border: 1px solid #7f7fb2;
padding: 3px;
text-align: left;
}
#zoneSettings th[scope=row] {
padding: 4px 3px 3px;
vertical-align: top;
white-space: nowrap;
}
#definitionPanel {
float: left;
margin: 0 2px;
text-align: center;
}
#definitionPanel input[type=submit], #definitionPanel input[type=submit] {
margin: 0 4px;
}
#imagePanel {
position: relative;
}
#imageFrame {
position: relative;
padding: 0 6px 6px 0; /* Double margin of points below */
}
#imageFrame div {
position: absolute;
width: 7px;
height: 7px;
margin-left: -3px;
margin-top: -3px;
z-index: 5;
}
#imageFrame div {
background-image: url(graphics/point-g.gif);
}
#imageFrame div.highlight {
background-image: url(graphics/point-o.gif);
}
#imageFrame div.active {
background-image: url(graphics/point-r.gif);
}
#zonePoints {
margin: 8px 0;
border-collapse: collapse;
}
#zonePoints td {
vertical-align: top;
}
#zonePoints table {
border-collapse: collapse;
}
#zonePoints table tr.highlight {
background-color: #f0e68c;
}
#zonePoints table tr.active {
background-color: #ffa07a;
}
#zonePoints table th, #zonePoints table td {
border: 1px solid #7f7fb2;
padding: 3px;
text-align: center;
}
#zonePoints table a {
margin: 0 2px;
}

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