generate remaining language variables from and to definition file

socket.io-v4
Moe 2022-03-21 00:09:56 -07:00
parent d16a3d006a
commit e2f54343b6
3 changed files with 863 additions and 419 deletions

File diff suppressed because it is too large Load Diff

View File

@ -106,18 +106,18 @@
"Allow API Trigger": "Allow API Trigger",
"When Detector is Off": "When Detector is Off",
"When Detector is On": "When Detector is On",
"January" : "January",
"February" : "February",
"March" : "March",
"April" : "April",
"January": "January",
"February": "February",
"March": "March",
"April": "April",
"May": "May",
"June" : "June",
"July" : "July",
"August" : "August",
"September" : "September",
"October" : "October",
"November" : "November",
"December" : "December",
"June": "June",
"July": "July",
"August": "August",
"September": "September",
"October": "October",
"November": "November",
"December": "December",
"Sunday": "Sunday",
"Monday": "Monday",
"Tuesday": "Tuesday",
@ -614,9 +614,7 @@
"Mode": "Mode",
"Run Installer": "Run Installer",
"Install": "Install",
"Enable": "Enable",
"Disable": "Disable",
"Delete": "Delete",
"Add All": "Add All",
"Name": "Name",
"Skip Ping": "Skip Ping",
@ -894,7 +892,6 @@
"Restarting": "Restarting",
"Starting": "Starting",
"Watching": "Watching",
"Recording": "Recording",
"Stopped": "Stopped",
"Died": "Died",
"Restart": "Restart",
@ -1024,52 +1021,51 @@
"notPermitted1": "This action is not permitted by the administrator of your account.'",
"Not Authorized": "Not Authorized",
"Generate Subtitles": "Generate Subtitles",
"Video Limit":"Video Limit",
"Preview":"Preview",
"Websocket Connected":"Websocket Connected",
"Websocket Disconnected":"Websocket Disconnected",
"Videos Merge":"Videos Merge",
"Token":"Token",
"Channel ID":"Channel ID",
"Recipient ID":"Recipient ID",
"New Authentication Token":"New Authentication Token",
"All Logs":"All Logs",
"For Group":"For Group",
"Basic Authentication":"Basic Authentication",
"Superuser Logs":"Superuser Logs",
"Authentication Failed":"Authentication Failed",
"Max Number of Cameras":"Max Number of Cameras",
"Can edit Max Storage":"Can edit Max Storage",
"Can edit Max Days":"Can edit Max Days",
"in Days":"in Days",
"Can edit how long to keep Logs":"Can edit how long to keep Logs",
"Can use Admin Panel":"Can use Admin Panel",
"Can use Discord Bot":"Can use Discord Bot",
"Can use WebDAV":"Can use WebDAV",
"Can use Amazon S3":"Can use Amazon S3",
"Can use SFTP":"Can use SFTP",
"Can use Wasabi Hot Cloud Storage":"Can use Wasabi Hot Cloud Storage",
"Can use LDAP":"Can use LDAP",
"Can View Logs":"Can View Logs",
"Can edit how long to keep Events":"Can edit how long to keep Events",
"Leave blank for unlimited":"Leave blank for unlimited",
"privateKey":"Private Key",
"Limited":"Limited",
"All Privileges":"All Privileges",
"LDAP":"LDAP",
"LDAP Success":"LDAP Success",
"LDAP User Authenticated":"LDAP User Authenticated",
"LDAP User is New":"LDAP User is New",
"Creating New Account":"Creating New Account",
"bindDN":"bindDN",
"Bind Credentials":"Bind Credentials (Password)",
"Search Base":"Search Base",
"Configuration":"Configuration",
"Blank for No Change":"Blank for No Change",
"Pop":"Pop",
"Recording FPS Change on Start":"Recording FPS Change on Start",
"Save Frames to Events":"Save Frames to Events",
"Search Filter":"Search Filter",
"Video Limit": "Video Limit",
"Preview": "Preview",
"Websocket Connected": "Websocket Connected",
"Websocket Disconnected": "Websocket Disconnected",
"Videos Merge": "Videos Merge",
"Channel ID": "Channel ID",
"Recipient ID": "Recipient ID",
"New Authentication Token": "New Authentication Token",
"All Logs": "All Logs",
"For Group": "For Group",
"Basic Authentication": "Basic Authentication",
"Superuser Logs": "Superuser Logs",
"Authentication Failed": "Authentication Failed",
"Max Number of Cameras": "Max Number of Cameras",
"Can edit Max Storage": "Can edit Max Storage",
"Can edit Max Days": "Can edit Max Days",
"in Days": "in Days",
"Can edit how long to keep Logs": "Can edit how long to keep Logs",
"Can use Admin Panel": "Can use Admin Panel",
"Can use Discord Bot": "Can use Discord Bot",
"Can use WebDAV": "Can use WebDAV",
"Can use Amazon S3": "Can use Amazon S3",
"Can use SFTP": "Can use SFTP",
"Can use Wasabi Hot Cloud Storage": "Can use Wasabi Hot Cloud Storage",
"Can use LDAP": "Can use LDAP",
"Can View Logs": "Can View Logs",
"Can edit how long to keep Events": "Can edit how long to keep Events",
"Leave blank for unlimited": "Leave blank for unlimited",
"privateKey": "Private Key",
"Limited": "Limited",
"All Privileges": "All Privileges",
"LDAP": "LDAP",
"LDAP Success": "LDAP Success",
"LDAP User Authenticated": "LDAP User Authenticated",
"LDAP User is New": "LDAP User is New",
"Creating New Account": "Creating New Account",
"bindDN": "bindDN",
"Bind Credentials": "Bind Credentials (Password)",
"Search Base": "Search Base",
"Configuration": "Configuration",
"Blank for No Change": "Blank for No Change",
"Pop": "Pop",
"Recording FPS Change on Start": "Recording FPS Change on Start",
"Save Frames to Events": "Save Frames to Events",
"Search Filter": "Search Filter",
"h264_cuvid": "H.264 CUVID",
"hevc_cuvid": "H.265 CUVID",
"mjpeg_cuvid": "MJPEG CUVID",
@ -1116,72 +1112,71 @@
"FLV": "FLV",
"FLV Stream Type": "FLV Stream Type",
"Link Shinobi": "Link Shinobi",
"Show Stream HUD":"Show Stream HUD",
"Call Method":"Call Method",
"Gender":"Gender",
"Emotion":"Emotion",
"Age":"Age",
"Object":"Object",
"Uniform":"Uniform",
"Pose":"Pose",
"Male":"Male",
"Female":"Female",
"Channel":"Channel",
"Stream Key":"Stream Key",
"Server URL":"Server URL",
"Video Bit Rate":"Video Bit Rate",
"Audio Bit Rate":"Audio Bit Rate",
"RTMP Stream Flags":"RTMP Stream Flags",
"RTMP Stream":"RTMP Stream",
"Stream Channel":"Stream Channel",
"Confidence":"Confidence",
"Trainer Engine":"Trainer Engine",
"Train":"Train",
"openImagesDownloadConfirm":"Are you sure you want to begin download images and bounding boxes (preset Matrices) from OpenImages?",
"openImagesDownloadConfirmStop":"Are you sure you want to stop training?",
"TrainConfirm":"Are you sure you want to begin training? This can take more than 12 hours with over 500 images. This will consume a large amount of resources, like RAM and/or CPU.",
"TrainConfirmStop":"Are you sure you want to stop training?",
"Batch":"Batch",
"Subdivision":"Subdivision",
"Map":"Map",
"Delay for Snapshot":"Delay for Snapshot",
"Add Map":"Add Map",
"Add Input Feed":"Add Input Feed",
"Add Channel":"Add Channel",
"Automatic":"Automatic",
"Max Latency":"Max Latency",
"Loop Stream":"Loop Stream",
"Object Count":"Object Count",
"Object Tag":"Object Tag",
"Noise Filter":"Noise Filter",
"Noise Filter Range":"Noise Filter Range",
"TV Channel":"TV Channel",
"Channel ID":"Channel ID",
"TV Channel ID":"TV Channel ID",
"TV Channel Group":"TV Channel Group",
"Emotion Average":"Emotion Average",
"Require Object to be in Region":"Require Object to be in Region",
"Numeric criteria unsupported for Region tests, Ignoring Conditional":"Numeric criteria unsupported for Region tests, Ignoring Conditional",
"Text criteria unsupported for Object Count tests, Ignoring Conditional":"Text criteria unsupported for Object Count tests, Ignoring Conditional",
"Show Regions of Interest":"Show Regions of Interest",
"Confidence of Detection":"Confidence of Detection",
"Edit Selected":"Edit Selected",
"Copy Stream Channels":"Copy Stream Channels",
"Copy Settings":"Copy Settings",
"Copy to Settings":"Copy to Settings",
"Copy Mode":"Copy Mode",
"Copy Group Settings":"Copy Group Settings",
"Copy Timelapse Settings":"Copy Timelapse Settings",
"Copy Connection Settings":"Copy Connection Settings",
"Copy Custom Settings":"Copy Custom Settings",
"Copy Logging Settings":"Copy Logging Settings",
"Copy JPEG API Settings":"Copy JPEG API Settings",
"Copy Input Settings":"Copy Input Settings",
"Copy Stream Settings":"Copy Stream Settings",
"Copy Stream Channel Settings":"Copy Stream Channel Settings",
"Copy Recording Settings":"Copy Recording Settings",
"Copy Detector Settings":"Copy Detector Settings",
"Monitors to Copy to":"Monitors to Copy to",
"Show Stream HUD": "Show Stream HUD",
"Call Method": "Call Method",
"Gender": "Gender",
"Emotion": "Emotion",
"Age": "Age",
"Object": "Object",
"Uniform": "Uniform",
"Pose": "Pose",
"Male": "Male",
"Female": "Female",
"Channel": "Channel",
"Stream Key": "Stream Key",
"Server URL": "Server URL",
"Video Bit Rate": "Video Bit Rate",
"Audio Bit Rate": "Audio Bit Rate",
"RTMP Stream Flags": "RTMP Stream Flags",
"RTMP Stream": "RTMP Stream",
"Stream Channel": "Stream Channel",
"Confidence": "Confidence",
"Trainer Engine": "Trainer Engine",
"Train": "Train",
"openImagesDownloadConfirm": "Are you sure you want to begin download images and bounding boxes (preset Matrices) from OpenImages?",
"openImagesDownloadConfirmStop": "Are you sure you want to stop training?",
"TrainConfirm": "Are you sure you want to begin training? This can take more than 12 hours with over 500 images. This will consume a large amount of resources, like RAM and/or CPU.",
"TrainConfirmStop": "Are you sure you want to stop training?",
"Batch": "Batch",
"Subdivision": "Subdivision",
"Map": "Map",
"Delay for Snapshot": "Delay for Snapshot",
"Add Map": "Add Map",
"Add Input Feed": "Add Input Feed",
"Add Channel": "Add Channel",
"Automatic": "Automatic",
"Max Latency": "Max Latency",
"Loop Stream": "Loop Stream",
"Object Count": "Object Count",
"Object Tag": "Object Tag",
"Noise Filter": "Noise Filter",
"Noise Filter Range": "Noise Filter Range",
"TV Channel": "TV Channel",
"TV Channel ID": "TV Channel ID",
"TV Channel Group": "TV Channel Group",
"Emotion Average": "Emotion Average",
"Require Object to be in Region": "Require Object to be in Region",
"Numeric criteria unsupported for Region tests, Ignoring Conditional": "Numeric criteria unsupported for Region tests, Ignoring Conditional",
"Text criteria unsupported for Object Count tests, Ignoring Conditional": "Text criteria unsupported for Object Count tests, Ignoring Conditional",
"Show Regions of Interest": "Show Regions of Interest",
"Confidence of Detection": "Confidence of Detection",
"Edit Selected": "Edit Selected",
"Copy Stream Channels": "Copy Stream Channels",
"Copy Settings": "Copy Settings",
"Copy to Settings": "Copy to Settings",
"Copy Mode": "Copy Mode",
"Copy Group Settings": "Copy Group Settings",
"Copy Timelapse Settings": "Copy Timelapse Settings",
"Copy Connection Settings": "Copy Connection Settings",
"Copy Custom Settings": "Copy Custom Settings",
"Copy Logging Settings": "Copy Logging Settings",
"Copy JPEG API Settings": "Copy JPEG API Settings",
"Copy Input Settings": "Copy Input Settings",
"Copy Stream Settings": "Copy Stream Settings",
"Copy Stream Channel Settings": "Copy Stream Channel Settings",
"Copy Recording Settings": "Copy Recording Settings",
"Copy Detector Settings": "Copy Detector Settings",
"Monitors to Copy to": "Monitors to Copy to",
"Video Configuration": "Video Configuration",
"ONVIF Device Manager": "ONVIF Device Manager",
"UseCount": "UseCount",
@ -1240,17 +1235,17 @@
"getVideos": "Get Videos",
"getVideosForMonitor": "Get Videos for Monitor",
"No Sound": "No Sound",
"Notification Sound":"Notification Sound",
"Alert Sound":"Alert Sound",
"Alert Sound Delay":"Alert Sound Delay",
"onvifdeviceManagerGlobalTip":"ONVIF allows modifying the camera's internal settings. ONVIF is somewhat of an umbrella term, it can mean many things unfortunately. With that being the case you may see an option in this tool but it may not be editable. This is usually because the camera vendor has not added this method or has deviated from its intended usage. In those cases you will need to enter the camera's configuration through the prescribed method of the camera vendor, this is generally opening the IP Address of the camera in your web browser.",
"onvifdeviceSavedText":"Camera's internal settings have been saved. You may need to restart the camera to have these changes take effect.",
"onvifdeviceSavedFoundErrorText":"Some settings may have reverted to a previous value. Its possible that the modified option is not available with this camera through ONVIF.",
"powerVideoEventLimit":"You have set a high event limit. Are you sure you want to make this request?",
"There are no monitors that you can view with this account.":"There are no monitors that you can view with this account.",
"Notification Sound": "Notification Sound",
"Alert Sound": "Alert Sound",
"Alert Sound Delay": "Alert Sound Delay",
"onvifdeviceManagerGlobalTip": "ONVIF allows modifying the camera's internal settings. ONVIF is somewhat of an umbrella term, it can mean many things unfortunately. With that being the case you may see an option in this tool but it may not be editable. This is usually because the camera vendor has not added this method or has deviated from its intended usage. In those cases you will need to enter the camera's configuration through the prescribed method of the camera vendor, this is generally opening the IP Address of the camera in your web browser.",
"onvifdeviceSavedText": "Camera's internal settings have been saved. You may need to restart the camera to have these changes take effect.",
"onvifdeviceSavedFoundErrorText": "Some settings may have reverted to a previous value. Its possible that the modified option is not available with this camera through ONVIF.",
"powerVideoEventLimit": "You have set a high event limit. Are you sure you want to make this request?",
"There are no monitors that you can view with this account.": "There are no monitors that you can view with this account.",
"Delete Monitors and Files": "Delete Monitors and Files",
"Select atleast one monitor to delete": "Select atleast one monitor to delete.",
"Use Built-In":"Use Built-In",
"Use Built-In": "Use Built-In",
"Add Cameras": "Add Cameras",
"Add Camera": "Add Camera",
"Delete Camera": "Delete Camera",
@ -1259,7 +1254,7 @@
"Zones": "Zones",
"Information": "Information",
"Info": "Info",
"Motion Threshold":"Motion Threshold",
"Motion Threshold": "Motion Threshold",
"Attach Snapshot": "Attach Snapshot",
"Invalid Settings": "Invalid Settings",
"Detection": "Detection",
@ -1367,17 +1362,273 @@
"teddy bear": "teddy bear",
"hair drier": "hair drier",
"toothbrush": "toothbrush",
"Detection Event":"Detection Event",
"Monitor Edit":"Monitor Edit",
"Monitor Start":"Monitor Start",
"Monitor Stop":"Monitor Stop",
"Monitor Died":"Monitor Died",
"Account Save":"Account Save",
"User Log":"User Log",
"Frigate":"Frigate",
"Plain":"Plain",
"MQTT Error":"MQTT Error",
"MQTT Inbound":"MQTT Inbound",
"MQTT Outbound":"MQTT Outbound",
"MQTT Client":"MQTT Client"
}
"Detection Event": "Detection Event",
"Monitor Edit": "Monitor Edit",
"Monitor Start": "Monitor Start",
"Monitor Stop": "Monitor Stop",
"Monitor Died": "Monitor Died",
"Account Save": "Account Save",
"User Log": "User Log",
"Frigate": "Frigate",
"Plain": "Plain",
"MQTT Error": "MQTT Error",
"MQTT Inbound": "MQTT Inbound",
"MQTT Outbound": "MQTT Outbound",
"MQTT Client": "MQTT Client",
"fieldTextMode": "This is the primary task of the monitor.",
"fieldTextModeIsabled": "Inactive monitor, no process will be created in this mode.",
"fieldTextModeAtchNly": "Monitor will only stream, no recording will occur unless otherwise ordered by API or Detector.",
"fieldTextModeEcord": "Continuous Recording. Segments are made every 15 minutes by default.",
"fieldTextMid": "This is a non-changeable identifier for the monitor. You can duplicate a monitor by double clicking the Monitor ID and changing it.",
"fieldTextName": "This is the human-readable display name for the monitor.",
"fieldTextMaxkeepdays": "The number of days to keep videos before purging for this monitor specifically.",
"fieldTextNotes": "Comments you want to leave for this camera.",
"fieldTextDir": "Location of where recorded files will be saved. You can configure more locations with the <code>addStorage</code> variable.",
"fieldTextType": "Learn to connect here : <a href=\"https://shinobi.video/articles/2019-02-14-how-to-push-streams-to-shinobi-with-rtmp\" target=\"_blank\">Article : How to Push Streams via RTMP to Shinobi</a>",
"fieldTextType264265265": "Reading a high quality video streas that sometimes include audio.",
"fieldTextTypeM3u8": "Reading a high quality video streas that sometimes include audio.",
"fieldTextType4Mp4Ts": "A static file. Read at a lower rate and should not be used for an actual live stream.",
"fieldTextTypeHinobiTreamer": "Websocket JPEG-based P2P stream.",
"fieldTextTypeAshcamTreamerV2": "Websocket WebM-based P2P stream.",
"fieldTextTypeOcal": "Reading Capture Cards, Webcams, or Integrated Cameras.",
"fieldTextTypeX": "Mobotix MJPEG Stream",
"fieldTextRtmpkey": "Stream Key for incoming streams on the RTMP port.",
"fieldTextAutohostenable": "Feed the individual pieces required to build a stream URL or provide the full URL and allow Shinobi to parse it for you.",
"fieldTextAutohost": "The full Stream URL.",
"fieldTextProtocol": "The protocol that will used to consume the video stream.",
"fieldTextRtsptransport": "Standard connection method.",
"fieldTextRtsptransportUto": "Let FFMPEG decide. Normally it will try UDP first.",
"fieldTextMuser": "The user login for your camera",
"fieldTextMpass": "The password for your camera",
"fieldTextHost": "Connection address",
"fieldTextPort": "Separate by Commas or a Range",
"fieldTextPortforce": "Using the default web port can allow automatic switch to other ports for streams like RTSP.",
"fieldTextPath": "The path to your camera",
"fieldTextFatalmax": "The number of times to retry for network connection between the server and camera before setting the monitor to Disabled. No decimals. Set to 0 to retry forever.",
"fieldTextSkipping": "Choose if a successful ping is required before a monitor process is started.",
"fieldTextIsonvif": "Is this an ONVIF compliant camera?",
"fieldTextOnvifnonstandard": "Is this a Non-Standard ONVIF camera?",
"fieldTextOnvifport": "ONVIF is usually run on port <code>8000</code>. This can be <code>80</code> as well depending on your camera model.",
"fieldTextAduration": "Specify how many microseconds are analyzed to probe the input. Set to 100000 if you are using RTSP and having stream issues.",
"fieldTextProbesize": "Specify how big to make the analyzation probe for the input. Set to 100000 if you are using RTSP and having stream issues.",
"fieldTextStreamloop": "Loop a static file so the file stream behaves like a live stream.",
"fieldTextSfps": "Specify the Frame Rate (FPS) in which the camera is providing its stream in.",
"fieldTextWallclocktimestampignore": "Base all incoming camera data in camera time instead of server time.",
"fieldTextHeight": "Height of the stream image.",
"fieldTextWidth": "Width of the stream image.",
"fieldTextAccelerator": "Hardware Acceleration (HWAccel) for decoding streams.",
"fieldTextHwaccel": "Decoding Engine",
"fieldTextHwaccelvcodec": "Decoding Engine",
"fieldTextStreamtype": "Sending FLV encoded frames over WebSocket.",
"fieldTextStreamtypeOseidon": "Poseidon is built on Kevin Godell's MP4 processing code. It simulates a streaming MP4 file but using the data of a live stream. Includes Audio. Some browsers can play it like a regular MP4 file. Streams over HTTP or WebSocket.",
"fieldTextStreamtypeAse64OverEbsocket": "Sending Base64 encoded frames over WebSocket. This avoids caching but there is no audio.",
"fieldTextStreamtypeIncludesUdio": "Similar method to facebook live streams. <b>Includes audio</b> if input provides it. There is a delay of about 4-6 seconds because this method records segments then pushes them to the client rather than push as while it creates them.",
"fieldTextStreamflvtype": "This is for the Shinobi dashboard only. Both stream methods are still active and ready to use.",
"fieldTextStreamvcodec": "Video codec for streaming.",
"fieldTextStreamvcodecUto": "Let FFMPEG choose.",
"fieldTextStreamvcodecLibx264": "Used for MP4 video.",
"fieldTextStreamvcodecLibx265": "Used for MP4 video.",
"fieldTextStreamvcodecCopy": "Used for MP4 video. Has very low CPU usage but cannot use video filters and filesizes may be gigantic. Best to setup your MP4 settings camera-side when using this option.",
"fieldTextStreamacodec": "Audio codec for streaming.",
"fieldTextStreamacodecUto": "Let FFMPEG choose.",
"fieldTextStreamacodecOUdio": "No Audio, this is an option that must be set in some parts of the world due to legal reasons.",
"fieldTextStreamacodecLibvorbis": "Used for WebM video.",
"fieldTextStreamacodecLibopus": "Used for WebM video.",
"fieldTextStreamacodecLibmp3lame": "Used for MP4 video.",
"fieldTextStreamacodecAac": "Used for MP4 video.",
"fieldTextStreamacodecAc3": "Used for MP4 video.",
"fieldTextStreamacodecCopy": "Used for MP4 video. Has very low CPU usage but some audio codecs need custom flags like <code>-strict 2</code> for aac.",
"fieldTextHlstime": "How long each video segment should be, in minutes. Each segment will be drawn by the client through an m3u8 file. Shorter segments take less space.",
"fieldTextHlslistsize": "The number of segments maximum before deleting old segments automatically.",
"fieldTextPresetstream": "Preset flag for certain video encoders. If you find your camera is crashing every few seconds : try leaving it blank.",
"fieldTextStreamquality": "Low number means higher quality. Higher number means less quality.",
"fieldTextStreamfps": "The speed in which frames are displayed to clients, in Frames Per Second. Be aware there is no default. This can lead to high bandwidth usage.",
"fieldTextStreamscalex": "Width of the stream image that is output after processing.",
"fieldTextStreamscaley": "Height of the stream image that is output after processing.",
"fieldTextStreamrotate": "Change the viewing angle of the video stream.",
"fieldTextSignalcheck": "How often your client will check the stream to see if it is alive. This is calculated in minutes.",
"fieldTextSignalchecklog": "This is for the client side only. It will display in the log thread when client side signal checks occur.",
"fieldTextStreamvf": "Place FFMPEG video filters in this box to affect the streaming portion. No spaces.",
"fieldTextTvchannel": "This monitor will have TV Channel features enabled. You will be able to view it in your TV Channel list.",
"fieldTextTvchannelid": "A Custom ID for the Channel.",
"fieldTextTvchannelgrouptitle": "A Custom Group for the Channel.",
"fieldTextStreamtimestamp": "A clock that is burned onto the frames of the video stream.",
"fieldTextStreamtimestampfont": "Font File to style your timestamp.",
"fieldTextStreamtimestampfontsize": "Font size in pt.",
"fieldTextStreamtimestampcolor": "Timstamp text color.",
"fieldTextStreamtimestampboxcolor": "Timstamp backdrop color.",
"fieldTextStreamtimestampx": "Horiztonal Position of Timestamp",
"fieldTextStreamtimestampy": "Vertical Position of Timestamp",
"fieldTextStreamwatermark": "An image that is burned onto the frames of the video stream.",
"fieldTextStreamwatermarklocation": "Image Location that will be used as Watermark.",
"fieldTextStreamwatermarkposition": "An image that is burned onto the frames of the video stream.",
"fieldTextDetailSubstreamInputrtsptransportUto": "Let FFMPEG decide. Normally it will try UDP first.",
"fieldTextDetailSubstreamInputrtsptransport": "FFMPEG tries this first.",
"fieldTextDetailSubstreamOutputstreamtype": "The method that will used to consume the video stream.",
"fieldTextDetailSubstreamOutputstreamvcodec": "Video codec for streaming.",
"fieldTextDetailSubstreamOutputstreamvcodecUto": "Let FFMPEG choose.",
"fieldTextDetailSubstreamOutputstreamvcodecLibx264": "Used for MP4 video.",
"fieldTextDetailSubstreamOutputstreamvcodecLibx265": "Used for MP4 video.",
"fieldTextDetailSubstreamOutputstreamvcodecCopy": "Used for MP4 video. Has very low CPU usage but cannot use video filters and filesizes may be gigantic. Best to setup your MP4 settings camera-side when using this option.",
"fieldTextDetailSubstreamOutputstreamacodec": "Audio codec for streaming.",
"fieldTextDetailSubstreamOutputstreamacodecUto": "Let FFMPEG choose.",
"fieldTextDetailSubstreamOutputstreamacodecOUdio": "No Audio, this is an option that must be set in some parts of the world due to legal reasons.",
"fieldTextDetailSubstreamOutputstreamacodecLibvorbis": "Used for WebM video.",
"fieldTextDetailSubstreamOutputstreamacodecLibopus": "Used for WebM video.",
"fieldTextDetailSubstreamOutputstreamacodecLibmp3lame": "Used for MP4 video.",
"fieldTextDetailSubstreamOutputstreamacodecAac": "Used for MP4 video.",
"fieldTextDetailSubstreamOutputstreamacodecAc3": "Used for MP4 video.",
"fieldTextDetailSubstreamOutputstreamacodecCopy": "Used for MP4 video. Has very low CPU usage but some audio codecs need custom flags like <code>-strict 2</code> for aac.",
"fieldTextDetailSubstreamOutputhlstime": "How long each video segment should be, in minutes. Each segment will be drawn by the client through an m3u8 file. Shorter segments take less space.",
"fieldTextDetailSubstreamOutputhlslistsize": "The number of segments maximum before deleting old segments automatically.",
"fieldTextDetailSubstreamOutputpresetstream": "Preset flag for certain video encoders. If you find your camera is crashing every few seconds : try leaving it blank.",
"fieldTextDetailSubstreamOutputstreamquality": "Low number means higher quality. Higher number means less quality.",
"fieldTextDetailSubstreamOutputstreamfps": "The speed in which frames are displayed to clients, in Frames Per Second. Be aware there is no default. This can lead to high bandwidth usage.",
"fieldTextDetailSubstreamOutputstreamscalex": "Width of the stream image that is output after processing.",
"fieldTextDetailSubstreamOutputstreamscaley": "Height of the stream image that is output after processing.",
"fieldTextDetailSubstreamOutputstreamrotate": "Change the viewing angle of the video stream.",
"fieldTextDetailSubstreamOutputsvf": "Place FFMPEG video filters in this box to affect the streaming portion. No spaces.",
"fieldTextSnap": "Get the latest frame in JPEG.",
"fieldTextExt": "The file type for your recorded video file.",
"fieldTextExt4": "This file type is playable is almost all modern web browsers, that includes mobile. The filesize just tends to be larger unless you lower the quality.",
"fieldTextExtEb": "Small filesize, low client compatibility. Good for uploading to sites like YouTube.",
"fieldTextVcodec": "Video codec for recording.",
"fieldTextCrf": "Low number means higher quality. Higher number means less quality.",
"fieldTextPresetrecord": "Preset flag for certain video encoders. If you find your camera is crashing every few seconds : try leaving it blank.",
"fieldTextAcodec": "Audio codec for recording.",
"fieldTextFps": "The speed in which frames are recorded to files, Frames Per Second. Be aware there is no default. This can lead to large files. Best to set this camera-side.",
"fieldTextRecordscaley": "Height of the stream image.",
"fieldTextRecordscalex": "Width of the stream image.",
"fieldTextCutoff": "In minutes. When to slice off and start a new video file.",
"fieldTextRotate": "Change the recording angle of the video stream.",
"fieldTextVf": "Place FFMPEG video filters in this box to affect the recording portion. No spaces.",
"fieldTextTimestamp": "A clock that is burned onto the frames of the recorded video.",
"fieldTextTimestampfont": "Font File to style your timestamp.",
"fieldTextTimestampfontsize": "Font size in pt.",
"fieldTextTimestampcolor": "Timstamp text color.",
"fieldTextTimestampboxcolor": "Timstamp backdrop color.",
"fieldTextTimestampx": "Horiztonal Position of Timestamp",
"fieldTextTimestampy": "Vertical Position of Timestamp",
"fieldTextWatermark": "An image that is burned onto the frames of the recorded video.",
"fieldTextWatermarklocation": "Image Location that will be used as Watermark.",
"fieldTextWatermarkposition": "An image that is burned onto the frames of the recorded video.",
"fieldTextRecordtimelapse": "Create a JPEG based timelapse.",
"fieldTextRecordtimelapsemp4": "Create an MP4 file at the end of each day for the timelapse.",
"fieldTextRecordtimelapsewatermark": "An image that is burned onto the frames of the recorded video.",
"fieldTextRecordtimelapsewatermarklocation": "Image Location that will be used as Watermark.",
"fieldTextRecordtimelapsewatermarkposition": "An image that is burned onto the frames of the recorded video.",
"fieldTextCustinput": "Custom Flags that bind to the Input of the FFMPEG process.",
"fieldTextCuststream": "Custom Flags that bind to the Stream (client side view) of the FFMPEG process.",
"fieldTextCustsnap": "Custom Flags that bind to the Snapshots.",
"fieldTextCustrecord": "Custom Flags that bind to the recording of the FFMPEG process.",
"fieldTextCustdetect": "Custom Flags that bind to the stream Detector uses for analyzation.",
"fieldTextCustdetectobject": "Custom Flags that bind to the stream Detector uses for analyzation.",
"fieldTextCustsiprecord": "Custom Flags that bind to the output that the Event-Based Recordings siphon from.",
"fieldTextCustomoutput": "Add a custom output like JPEG frames or send data straight to another server.",
"fieldTextDetector": "This will add another output in the FFMPEG command for the motion detector.",
"fieldTextDetectorhttpapi": "Do you want to allow HTTP triggers to this camera?",
"fieldTextDetectorsendframes": "Push frames to the connected plugin to be analyzed.",
"fieldTextDetectorfps": "How many frames a second to send to the motion detector; 2 is the default.",
"fieldTextDetectorscalex": "Width of the image being detected. Smaller sizes take less CPU.",
"fieldTextDetectorscaley": "Height of the image being detected. Smaller sizes take less CPU.",
"fieldTextDetectorlocktimeout": "Lockout for when the next trigger is allowed, to avoid overloading the database and receiving clients. Measured in milliseconds.",
"fieldTextDetectorsave": "Save Motion Events in SQL. This will allow display of motion over video during the time motion events occured in the Power Viewer.",
"fieldTextDetectorrecordmethod": "There are multiple ways to begin recording when an event occurs, like motion. Traditional Recording is the most user-friendly.",
"fieldTextDetectortrigger": "This will order the camera to record if it is set to \"Watch-Only\" when an Event is detected.",
"fieldTextDetectortimeout": "The length of time \"Trigger Record\" will run for. This is read in minutes.",
"fieldTextWatchdogreset": "If there is an overlap in trigger record should it reset.",
"fieldTextDetectorwebhook": "Send a GET request to a URL with some values from the event.",
"fieldTextDetectorwebhooktimeout": "This value is a timer to allow the next running of your Webhook. This value is in minutes.",
"fieldTextDetectorcommand": "The command that will run. This is the equivalent of running a shell command from terminal.",
"fieldTextDetectorcommandtimeout": "This value is a timer to allow the next running of your script. This value is in minutes.",
"fieldTextSnapsecondsinward": "in seconds",
"fieldTextDetectorpam": "Use Kevin Godell's Motion Detector. This is built into Shinobi and requires no other configuration to activate.",
"fieldTextDetectorsensitivity": "The motion confidence rating must exceed this value to be seen as a trigger. This number correlates directly to the confidence rating returned by the motion detector. This option was previously named \"Indifference\".",
"fieldTextDetectormaxsensitivity": "The motion confidence rating must be lower than this value to be seen as a trigger. Leave blank for no maximum. This option was previously named \"Max Indifference\".",
"fieldTextDetectorthreshold": "Minimum number of detections to fire a motion event. Detections must be within the detector the threshold divided by detector fps seconds. For example, if detector fps is 2 and trigger threshold is 3, then three detections must occur within 1.5 seconds to trigger a motion event. This threshold is per detection region.",
"fieldTextDetectorcolorthreshold": "The amount of difference allowed in a pixel before it is considered motion.",
"fieldTextInversetrigger": "To trigger outside specified regions. Will not trigger with Full Frame Detection enabled.",
"fieldTextDetectorframe": "This will read the entire frame for pixel differences. This is the same as creating a region that covers the entire screen.",
"fieldTextDetectornoisefilter": "Attempt to filter grain or repeated motion at a particular indifference.",
"fieldTextDetectornoisefilterrange": "The amount of difference allowed in a pixel before it is considered motion.",
"fieldTextDetectornotrigger": "Check if motion has occured on an interval. If motion has occurred the check will be reset.",
"fieldTextDetectornotriggertimeout": "Timeout is calculated in minutes.",
"fieldTextDetectornotriggerdiscord": "If motion has not been detected after the timeout period you will recieve an Discord notification.",
"fieldTextDetectornotriggerwebhook": "Send a GET request to a URL with some values from the event.",
"fieldTextDetectornotriggercommand": "The command that will run. This is the equivalent of running a shell command from terminal.",
"fieldTextDetectornotriggercommandtimeout": "This value is a timer to allow the next running of your script. This value is in minutes.",
"fieldTextDetectoraudio": "Check if Audio has occured at a certiain decible. Decible reading may not be accurate to real-world measurement.",
"fieldTextDetectorusedetectobject": "Create frames for sending to any connected Plugin.",
"fieldTextDetectorsendframesobject": "Push frames to the connected plugin to be analyzed.",
"fieldTextDetectorobjcountinregion": "Count Objects only inside Regions.",
"fieldTextDetectorlisenceplate": "Enable License Plate Recognition. OpenALPR plugin has this always enabled.",
"fieldTextDetectorlisenceplatecountry": "Choose the type of plates to recognize. Only US and EU are supported at this time.",
"fieldTextEventrecordscalex": "Width of the Event-based Recording image that is output after processing.",
"fieldTextEventrecordscaley": "Height of the Event-based Recording image that is output after processing.",
"fieldTextDetectorbufferhlstime": "How long each video segment should be, in seconds. Each segment will be drawn by the client through an m3u8 file. Shorter segments take less space.",
"fieldTextDetectorbufferhlslistsize": "The number of segments maximum before deleting old segments automatically.",
"fieldTextDetectorptzfollow": "Follow the largest detected object with PTZ? Requires an Object Detector running or matrices provided with events.",
"fieldTextDetectorobjcount": "Count detected objects.",
"fieldTextControlinverty": "For When your camera is mounted upside down or uses inverted vertical controls.",
"fieldTextDetectorsendvideolength": "In seconds. The length of the video that gets sent to your Notification service, like Email or Discord.",
"fieldTextLoglevel": "The amount of data to provide while doing the job.",
"fieldTextLoglevelIlent": "None. This will silence all logging.",
"fieldTextLoglevelAtal": "Display only fatal errors.",
"fieldTextLoglevelOnRror": "Display all important errors. Note : this doesn't always show important information.",
"fieldTextLoglevelLlArnings": "Display all warnings. Use this if you can't find out what's wrong with your camera.",
"fieldTextSqllog": "Use this with caution as FFMPEG likes to throw up superfluous data at times which can lead to a lot of database rows.",
"fieldTextSqllogO": "No is the default.",
"fieldTextSqllogEs": "Do this if you are having recurring issues only.",
"fieldTextFactoruth": "Enable a secondary requirement for login through one of the enabled methods.",
"fieldTextMail": "The login for accounts. The main account holder's email address will get notifications.",
"fieldTextPass": "Leave blank to keep the same password during settings modification.",
"fieldTextPasswordagain": "Must match Password field if you desire to change it.",
"fieldTextSize": "The amount of disk space Shinobi will allow to be consumed before purging. This value is read in megabytes.",
"fieldTextSizevideopercent": "Percent of Max Storage Amount the videos can record to.",
"fieldTextSizetimelapsepercent": "Percent of Max Storage Amount the timelapse frames can record to.",
"fieldTextSizefilebinpercent": "Percent of Max Storage Amount the FileBin archive can use.",
"fieldTextDays": "The number of days to keep videos before purging.",
"fieldTextEventdays": "The number of days to keep events before purging.",
"fieldTextLogdays": "The number of days to keep logs before purging.",
"fieldTextLang": "The primary language of text elements. For complete translation add your language in conf.json e.g:<code>\"language\": \"en_CA\",</code>",
"fieldTextAudionote": "Sound when information bubble appears.",
"fieldTextAudioalert": "Sound when Event occurs.",
"fieldTextAudiodelay": "Delay until next time an Event can start an Alert. Measured in seconds.",
"fieldTextEventmonpop": "When an Event occurs popout the monitor stream.",
"fieldTextRutilterN": "Enable Ir cut fiter. Typically Day mode.",
"fieldTextRutilterFf": "Disable Ir cut fiter. Typically Night mode.",
"fieldTextRutilterUto": "Ir cut filter is automatically activated by the device.",
"fieldTextIp": "Range or Single",
"fieldTextActionshalt": "Make the event do nothing, as if it never happened.",
"fieldTextActionsindifference": "Modify minimum indifference required for event.",
"fieldTextActionscommand": "You may use this to trigger a script on command.",
"fieldTextActionsrecord": "Use Traditional Recording, Hotswap, or Delete Motionless with their currently set options in the Global Detection Settings section.",
"fieldTextMapRtsptransportUto": "Let FFMPEG decide. Normally it will try UDP first.",
"fieldTextMapRtsptransport": "FFMPEG tries this first.",
"fieldTextChannelStreamtype": "Sending FLV encoded frames over WebSocket.",
"fieldTextChannelStreamtypeOseidon": "Poseidon is built on Kevin Godell's MP4 processing code. It simulates a streaming MP4 file but using the data of a live stream. Includes Audio. Some browsers can play it like a regular MP4 file. Streams over HTTP or WebSocket.",
"fieldTextChannelStreamtypeIncludesUdio": "Similar method to facebook live streams. <b>Includes audio</b> if input provides it. There is a delay of about 4-6 seconds because this method records segments then pushes them to the client rather than push as while it creates them.",
"fieldTextChannelStreamvcodec": "Video codec for streaming.",
"fieldTextChannelStreamvcodecUto": "Let FFMPEG choose.",
"fieldTextChannelStreamvcodecLibx264": "Used for MP4 video.",
"fieldTextChannelStreamvcodecLibx265": "Used for MP4 video.",
"fieldTextChannelStreamvcodecCopy": "Used for MP4 video. Has very low CPU usage but cannot use video filters and filesizes may be gigantic. Best to setup your MP4 settings camera-side when using this option.",
"fieldTextChannelStreamacodec": "Audio codec for streaming.",
"fieldTextChannelStreamacodecUto": "Let FFMPEG choose.",
"fieldTextChannelStreamacodecOUdio": "No Audio, this is an option that must be set in some parts of the world due to legal reasons.",
"fieldTextChannelStreamacodecLibvorbis": "Used for WebM video.",
"fieldTextChannelStreamacodecLibopus": "Used for WebM video.",
"fieldTextChannelStreamacodecLibmp3lame": "Used for MP4 video.",
"fieldTextChannelStreamacodecAac": "Used for MP4 video.",
"fieldTextChannelStreamacodecAc3": "Used for MP4 video.",
"fieldTextChannelStreamacodecCopy": "Used for MP4 video. Has very low CPU usage but some audio codecs need custom flags like <code>-strict 2</code> for aac.",
"fieldTextChannelHlstime": "How long each video segment should be, in minutes. Each segment will be drawn by the client through an m3u8 file. Shorter segments take less space.",
"fieldTextChannelHlslistsize": "The number of segments maximum before deleting old segments automatically.",
"fieldTextChannelPresetstream": "Preset flag for certain video encoders. If you find your camera is crashing every few seconds : try leaving it blank.",
"fieldTextChannelStreamquality": "Low number means higher quality. Higher number means less quality.",
"fieldTextChannelStreamfps": "The speed in which frames are displayed to clients, in Frames Per Second. Be aware there is no default. This can lead to high bandwidth usage.",
"fieldTextChannelStreamscalex": "Width of the stream image that is output after processing.",
"fieldTextChannelStreamscaley": "Height of the stream image that is output after processing.",
"fieldTextChannelStreamrotate": "Change the viewing angle of the video stream.",
"fieldTextChannelSvf": "Place FFMPEG video filters in this box to affect the streaming portion. No spaces."
}

View File

@ -1,13 +1,173 @@
const fs = require('fs')
const definitionFile = process.cwd() + '/definitions/en_CA.js'
const newDefinitionFile = process.cwd() + '/tools/en_CA.js'
const languagesFile = process.cwd() + '/languages/en_CA.json'
const newLanguagesFile = process.cwd() + '/tools/en_CA.json'
const languagesData = require(languagesFile)
var definitonsRawData = fs.readFileSync(definitionFile).toString()
const definitionData = require(definitionFile)({
gid: () => {return 'randomId'},
listOfStorage: [],
},
{},
{
timeZones: [
{
"text": "UTC12:00, Y",
"value": -720
},
{
"text": "UTC11:00, X",
"value": -660
},
{
"text": "UTC10:00, W",
"value": -600
},
{
"text": "UTC09:30, V†",
"value": -570
},
{
"text": "UTC09:00, V",
"value": -540
},
{
"text": "UTC08:00, U",
"value": -480
},
{
"text": "UTC07:00, T",
"value": -420
},
{
"text": "UTC06:00, S",
"value": -360
},
{
"text": "UTC05:00, R",
"value": -300
},
{
"text": "UTC04:00, Q",
"value": -240
},
{
"text": "UTC03:30, P†",
"value": -210
},
{
"text": "UTC03:00, P",
"value": -180
},
{
"text": "UTC02:00, O",
"value": -120
},
{
"text": "UTC01:00, N",
"value": -60
},
{
"text": "UTC±00:00, Z",
"value": 0,
"selected": true
},
{
"text": "UTC+01:00, A",
"value": 60
},
{
"text": "UTC+02:00, B",
"value": 120
},
{
"text": "UTC+03:00, C",
"value": 180
},
{
"text": "UTC+03:30, C†",
"value": 210
},
{
"text": "UTC+04:00, D",
"value": 240
},
{
"text": "UTC+04:30, D†",
"value": 270
},
{
"text": "UTC+05:00, E",
"value": 300
},
{
"text": "UTC+05:30, E†",
"value": 330
},
{
"text": "UTC+05:45, E*",
"value": 345
},
{
"text": "UTC+06:00, F",
"value": 360
},
{
"text": "UTC+06:30, F†",
"value": 390
},
{
"text": "UTC+07:00, G",
"value": 420
},
{
"text": "UTC+08:00, H",
"value": 480
},
{
"text": "UTC+08:45, H*",
"value": 525
},
{
"text": "UTC+09:00, I",
"value": 540
},
{
"text": "UTC+09:30, I†",
"value": 570
},
{
"text": "UTC+10:00, K",
"value": 600
},
{
"text": "UTC+10:30, K†",
"value": 630
},
{
"text": "UTC+11:00, L",
"value": 660
},
{
"text": "UTC+12:00, M",
"value": 720
},
{
"text": "UTC+12:45, M*",
"value": 765
},
{
"text": "UTC+13:00, M†",
"value": 780
},
{
"text": "UTC+14:00, M†",
"value": 840
}
]
},
languagesData
)
);
const capitalize = (s) => {
if (typeof s !== 'string') return ''
@ -15,16 +175,34 @@ const capitalize = (s) => {
}
const capitalizeAllWords = (string) => {
let firstPart = ``
let secondPart = ``
let thirdPart = ``
let newString = ``
string.split(' ').forEach((part) => {
string
.replace(/"/g,'')
.split(' ').forEach((part) => {
firstPart += capitalize(part)
})
firstPart.split('_').forEach((part) => {
secondPart += capitalize(part)
})
secondPart.split('-').forEach((part) => {
thirdPart += capitalize(part)
})
thirdPart.split('=').forEach((part) => {
newString += capitalize(part)
})
return newString
}
function replaceTextWithLandParam(langText,langParam){
if(definitonsRawData.indexOf(`"${langText}"`) > -1){
definitonsRawData = definitonsRawData.replace(`"${langText}"`,`lang["${langParam}"]`)
console.log('Replacing : ',definitonsRawData.indexOf(`"${langText}"`),`"${langText}"`,langParam)
}else if(definitonsRawData.indexOf(`'${langText}'`) > -1){
definitonsRawData = definitonsRawData.replace(`'${langText}'`,`lang["${langParam}"]`)
console.log('Replacing : ',definitonsRawData.indexOf(`'${langText}'`),`'${langText}'`,langParam)
}
}
const processSection = (section) => {
try{
if(section.info){
@ -38,6 +216,7 @@ const processSection = (section) => {
const langParam = `fieldText` + capitalizeAllWords(cleanName)
const langText = field.description
newLangParams[langParam] = langText
replaceTextWithLandParam(langText,langParam)
}
if(field.possible instanceof Array){
field.possible.forEach((possibility) => {
@ -45,6 +224,7 @@ const processSection = (section) => {
const langParam = `fieldText` + capitalizeAllWords(cleanName) + capitalizeAllWords(possibility.name)
const langText = possibility.info
newLangParams[langParam] = langText
replaceTextWithLandParam(langText,langParam)
}
})
}
@ -53,6 +233,7 @@ const processSection = (section) => {
})
}
}catch(err){
console.log(err)
console.error(section)
console.error(err)
}
@ -69,7 +250,19 @@ pageKeys.forEach((pageKey) => {
processSection(section)
})
}else{
console.log(page)
// console.log(page)
}
})
console.log(newLangParams)
const newLanguageFile = Object.assign(languagesData,newLangParams)
// console.log(definitonsRawData)
console.log(newLanguageFile)
setTimeout(() => {
try{
console.log('Writing New Definitions File, en_CA.js')
fs.writeFileSync(newDefinitionFile,definitonsRawData)
console.log('Writing New Language File, en_CA.json')
fs.writeFileSync(newLanguagesFile,JSON.stringify(newLanguageFile,null,3))
}catch(err){
console.log(err)
}
},2000)