{
  "ThingsGateway.Gateway.Application.BusinessUpdateEnum": {
    "Change": "Change",
    "Interval": "Interval",
    "IntervalOrChange": "IntervalOrChange"
  },

  "ThingsGateway.Gateway.Application.ControlController": {
    "ControlController": "Device control",
    "PauseDeviceThreadAsync": "Control device thread start/stop",
    "RestartDeviceThreadAsync": "Restart device thread",
    "WriteVariablesAsync": "Write variables",
    "RemoveAllCache": "Remove all cache",
    "RemoveCache": "Remove device/channel Cache",
    "RestartAllThread": "Restart all thread"
  },
  "ThingsGateway.Gateway.Application.RuntimeInfoController": {
    "RuntimeInfoController": "Get runtime information",
    "GetDeviceListAsync": "Get device information",
    "GetChannelListAsync": "Get channel information",
    "GetVariableList": "Get variable information",
    "GetRealAlarmList": "Get real-time alarm information",
    "CheckRealAlarm": "Confirm real-time alarm"
  },


  "ThingsGateway.Gateway.Application.DeviceRuntime": {
    "SourceVariableCount": "SourceVariableCount",
    "MethodVariableCount": "MethodVariableCount",
    "ActiveTime": "ActiveTime",
    "DeviceVariableCount": "DeviceVariableCount",
    "LastErrorMessage": "LastErrorMessage",

    "Name": "Name",
    "Name.Required": " {0}  cannot be empty",
    "Description": "Description",
    "ChannelId": "Channel",
    "ChannelName": "ChannelName",
    "IntervalTime": "IntervalTime",
    "IntervalTime.MinValue": " {0} value is too small",

    "PluginName": "PluginName",
    "PluginName.Required": "{0} cannot be empty",

    "LogEnable": "LogEnable",
    "LogLevel": "LogLevel",
    "RedundantSwitchType": "RedundantSwitchType",
    "RedundantScanIntervalTime": "RedundantScanIntervalTime",
    "RedundantScript": "RedundantScript",

    "Enable": "Enable",

    "RedundantEnable": "RedundantEnable",
    "RedundantDeviceId": "RedundantDevice",

    "Remark1": "Remark1",
    "Remark2": "Remark2",
    "Remark3": "Remark3",
    "Remark4": "Remark4",
    "Remark5": "Remark5",


    "RedundantDeviceNotNull": "When enabling redundancy, you must select a redundant device",
    "SaveDevice": "Add/Modify Device",
    "CopyDevice": "Copy Device",
    "DeleteDevice": "Delete Device",
    "ClearDevice": "Clear Device",
    "ExportDevice": "Export Device",
    "ImportDevice": "Import Device",
    "ImportNullError": "Unable to recognize",
    "RedundantDeviceError": "Redundant device error",
    "ChannelError": "Channel error",
    "NotNull": "{0} does not exist",
    "DeviceNotNull": "Device name does not exist",
    "NameDump": "Duplicate device name {0}",



    "DeviceStatus": "DeviceStatus",

    "PluginNotNull": "Plugin name does not exist"

  },

  "ThingsGateway.Gateway.Application.VariableRuntime": {
    "ChangeTime": "ChangeTime",
    "CollectTime": "CollectTime",
    "DeviceName": "DeviceName",
    "IsOnline": "IsOnline",
    "LastErrorMessage": "LastErrorMessage",
    "LastSetValue": "LastSetValue",
    "RawValue": "RawValue",
    "Value": "Value",
    "AlarmEnable": "AlarmEnable",

    "Name": "Name",
    "Description": "Description",
    "DeviceId": "CollectionDevice",
    "DeviceId.MinValue": "{0} cannot be empty",
    "DeviceId.Required": "{0} cannot be empty",
    "IntervalTime": "IntervalTime",
    "IntervalTime.MinValue": "{0} value is too small",
    "Enable": "Enable",
    "ProtectType": "ProtectType",
    "DataType": "DataType",
    "ReadExpressions": "ReadExpressions",
    "WriteExpressions": "WriteExpressions",
    "RpcWriteEnable": "RpcWriteEnable",
    "SaveValue": "SaveValue",
    "ArrayLength": "ArrayLength",

    "AlarmDelay": "AlarmDelay",
    "BoolOpenAlarmEnable": "BoolOpenAlarmEnable",
    "BoolOpenRestrainExpressions": "BoolOpenRestrainExpressions",
    "BoolOpenAlarmText": "BoolOpenAlarmText",
    "BoolCloseAlarmEnable": "BoolCloseAlarmEnable",
    "BoolCloseRestrainExpressions": "BoolCloseRestrainExpressions",
    "BoolCloseAlarmText": "BoolCloseAlarmText",
    "HAlarmEnable": "HAlarmEnable",
    "HRestrainExpressions": "HRestrainExpressions",
    "HAlarmText": "HAlarmText",
    "HAlarmCode": "HAlarmCode",
    "HHAlarmEnable": "HHAlarmEnable",
    "HHRestrainExpressions": "HHRestrainExpressions",
    "HHAlarmText": "HHAlarmText",
    "HHAlarmCode": "HHAlarmCode",
    "LAlarmEnable": "LAlarmEnable",
    "LRestrainExpressions": "LRestrainExpressions",
    "LAlarmText": "LAlarmText",
    "LAlarmCode": "LAlarmCode",
    "LLAlarmEnable": "LLAlarmEnable",
    "LLRestrainExpressions": "LLRestrainExpressions",
    "LLAlarmText": "LLAlarmText",
    "LLAlarmCode": "LLAlarmCode",
    "CustomAlarmEnable": "CustomAlarmEnable",
    "CustomRestrainExpressions": "CustomRestrainExpressions",
    "CustomAlarmText": "CustomAlarmText",
    "CustomAlarmCode": "CustomAlarmCode",
    "Unit": "Unit",
    "RegisterAddress": "RegisterAddress",
    "OtherMethod": "OtherMethod",
    "Remark1": "Remark1",
    "Remark2": "Remark2",
    "Remark3": "Remark3",
    "Remark4": "Remark4",
    "Remark5": "Remark5",
    "AlarmCode": "AlarmCode",
    "AlarmLimit": "AlarmLimit",
    "AlarmText": "AlarmText",
    "AlarmTime": "AlarmTime",
    "AlarmType": "AlarmType",
    "EventTime": "EventTime",
    "EventType": "EventType"
  },

  "ThingsGateway.Gateway.Application.BusinessBase": {
    "IntervalInsertVariableFail": "Interval insert variable failed",
    "IntervalInsertDeviceFail": "Interval insert device failed",
    "IntervalInsertAlarmFail": "Interval insert alarm failed"
  },
  "ThingsGateway.Gateway.Application.CollectBase": {
    "VariablePackError": "Variable packaging failed {0}",
    "GetMethodError": "Plugin method initialization failed {0}",
    "MethodNotNull": "Special method variable {0} cannot find execution method {1}, please check the existing method list",
    "CollectFail": "{0} - Collection[{1} - {2}] data failed {3}",
    "CollectSuccess": "{0} - Collection[{1} - {2}] data succeeded {3}",
    "MethodFail": "{0} - Execute method[{1}] - Failed {2}",
    "MethodSuccess": "{0} - Execute method[{1}] - Succeeded {2}",
    "WriteExpressionsError": "{0} conversion write expression {1} failed {2}"
  },

  "ThingsGateway.Gateway.Application.DriverBase": {
    "DeviceTaskStart": "Device {0} thread started",
    "DeviceTaskStartTimeout": "Device {0} thread start timeout {1} s",
    "DeviceTaskStop": "Device {0} thread stopped",
    "DeviceTaskPause": "Device {0} thread paused",
    "DeviceTaskContinue": "Device {0} thread continued"
  },
  "ThingsGateway.Gateway.Application.DeviceThreadManage": {
    "InitFail": "Plugin {0} device {1} initialization failed",
    "ChannelCreate": "channel {0} create",
    "ChannelDispose": "channel {0} dispose"

  },


  "ThingsGateway.Gateway.Application.AlarmHostedService": {
    "RealAlarmTask": "Realtime alarm service",
    "RealAlarmTaskStart": "Realtime alarm service start"
  },
  "ThingsGateway.Gateway.Application.PluginService": {
    "LoadTypeSuccess": "Plugin {0} loaded successfully",
    "LoadTypeFail1": "Failed to load plugin {0}, plugin type does not exist",
    "LoadTypeFail2": "Failed to load plugin file {0}, file does not exist",
    "PluginNotFound": "No plugin type found",
    "LoadOtherFileFail": "Failed to attempt loading subsidiary assembly {0}, if this assembly is DllImport, this warning can be ignored",
    "LoadPluginFail": "Failed to load plugin {0}",
    "AddPluginFile": "Add plugin file {0}"
  },
  "ThingsGateway.Gateway.Application.PluginInfo": {
    "FullName": "FullName",
    "FileName": "FileName",
    "PluginType": "PluginType",
    "Name": "Name",
    "DeviceCount": "DeviceCount",
    "Version": "Version",
    "LastWriteTime": "CompilationTime"
  },
  "ThingsGateway.Gateway.Application.PluginAddInput": {
    "MainFile": "Main Assembly",
    "OtherFiles": "Auxiliary Assemblies, can upload multiple",
    "SavePlugin": "Add/Modify Plugin"
  },
  "ThingsGateway.Gateway.Application.BackendLog": {
    "LogTime": "Time",
    "LogLevel": "Log Level",
    "LogSource": "Log Source",
    "LogMessage": "Specific Message",
    "Exception": "Exception Object",
    "DeleteBackendLog": "Delete Backend Log"
  },
  "ThingsGateway.Gateway.Application.RpcLog": {
    "LogTime": "LogTime",
    "OperateSource": "OperationSource",
    "OperateObject": "OperationObject",
    "OperateMethod": "RPCMethod",
    "IsSuccess": "OperationResult",
    "ParamJson": "RequestParameters",
    "ResultJson": "ReturnResults",
    "OperateMessage": "SpecificMessage",
    "DeleteRpc": "DeleteRPCLog"
  },

  "ThingsGateway.Gateway.Application.Device": {
    "Name": "Name",
    "Name.Required": "{0} cannot be empty",
    "Description": "Description",
    "ChannelId": "Channel",
    "ChannelId.MinValue": "{0} cannot be empty",
    "ChannelId.Required": "{0} cannot be empty",
    "IntervalTime": "DefaultIntervalTime",
    "IntervalTime.MinValue": "{0} value is too small",
    "LogEnable": "LogEnable",
    "LogLevel": "LogLevel",
    "Enable": "Enable",
    "RedundantEnable": "RedundantEnable",
    "RedundantDeviceId": "RedundantDevice",
    "RedundantSwitchType": "RedundantSwitchType",
    "RedundantScanIntervalTime": "RedundantScanIntervalTime",
    "RedundantScript": "RedundantScript",

    "Remark1": "Remark1",
    "Remark2": "Remark2",
    "Remark3": "Remark3",
    "Remark4": "Remark4",
    "Remark5": "Remark5",
    "RedundantDeviceNotNull": "When enabling redundancy, you must select a redundant device",
    "SaveDevice": "Add/Modify Device",
    "CopyDevice": "Copy Device",
    "DeleteDevice": "Delete Device",
    "ClearDevice": "Clear Device",
    "ExportDevice": "Export Device",
    "ImportDevice": "Import Device",
    "ImportNullError": "Unable to recognize",
    "RedundantDeviceError": "Redundant device error",
    "ChannelError": "Channel error",
    "NotNull": "{0} does not exist",
    "DeviceNotNull": "Device name does not exist",
    "PluginNotNull": "Plugin name does not exist",
    "NameDump": "Duplicate device name {0}"
  },
  "ThingsGateway.Gateway.Application.ChannelRuntime": {
    "Name": "Name",
    "Name.Required": "{0} cannot be empty",
    "ChannelType": "ChannelType",
    "PluginName": "PluginName",
    "PluginName.Required": "{0} cannot be empty",
    "LogLevel": "LogLevel",

    "Enable": "Enable",
    "LogEnable": "LogEnable",
    "RemoteUrl": "RemoteUrl",
    "BindUrl": "BindUrl",
    "PortName": "PortName",
    "BaudRate": "BaudRate",
    "DataBits": "DataBits",
    "Parity": "Parity",
    "StopBits": "StopBits",
    "DtrEnable": "DtrEnable",
    "RtsEnable": "RtsEnable",
    "CacheTimeout": "CacheTimeout",
    "ConnectTimeout": "ConnectTimeout",
    "MaxConcurrentCount": "MaxConcurrentCount",
    "SaveChannel": "Add/Modify Channel",
    "DeleteChannel": "Delete Channel",
    "ClearChannel": "Clear Channel",
    "ExportChannel": "Export Channel",
    "ImportChannel": "Import Channel",
    "ImportNullError": "Unable to recognize",
    "NotOther": "Not supporting other channel types",
    "Connect": "Connect",
    "Confim": "Confim",
    "Disconnect": "Disconnect",
    "Channel": "Channel",
    "NameDump": "Duplicate channel name {0}"
  },
  "ThingsGateway.Gateway.Application.Channel": {
    "Name": "Name",
    "Name.Required": "{0} cannot be empty",
    "ChannelType": "ChannelType",
    "PluginName": "PluginName",
    "PluginName.Required": "{0} cannot be empty",
    "LogLevel": "LogLevel",

    "Enable": "Enable",
    "LogEnable": "LogEnable",
    "RemoteUrl": "RemoteUrl",
    "BindUrl": "BindUrl",
    "PortName": "PortName",
    "BaudRate": "BaudRate",
    "DataBits": "DataBits",
    "Parity": "Parity",
    "StopBits": "StopBits",
    "DtrEnable": "DtrEnable",
    "RtsEnable": "RtsEnable",

    "SaveChannel": "Add/Modify Channel",
    "DeleteChannel": "Delete Channel",
    "ClearChannel": "Clear Channel",
    "ExportChannel": "Export Channel",
    "ImportChannel": "Import Channel",
    "ImportNullError": "Unable to recognize",
    "NotOther": "Not supporting other channel types",
    "Connect": "Connect",
    "Confim": "Confim",
    "Disconnect": "Disconnect",
    "Channel": "Channel",
    "NameDump": "Duplicate channel name {0}"
  },
  "ThingsGateway.Gateway.Application.Variable": {
    "AddressOrOtherMethodNotNull": "Variable address or special method cannot be empty at the same time",
    "SaveVariable": "Add/Modify Variable",
    "CopyVariable": "Copy Variable",
    "DeleteVariable": "Copy Variable",
    "ClearVariable": "Clear Variable",
    "ExportVariable": "Export Variable",
    "ImportVariable": "Import Variable",
    "NotNull": "{0} does not exist",
    "DeviceNotNull": "Device name does not exist",
    "VariableNotNull": "Variable name does not exist",
    "Name": "Name",
    "Name.Required": "{0} cannot be empty",
    "Description": "Description",
    "DeviceId": "CollectionDevice",
    "DeviceId.MinValue": "{0} cannot be empty",
    "DeviceId.Required": "{0} cannot be empty",
    "IntervalTime": "IntervalTime",
    "IntervalTime.MinValue": "{0} value is too small",
    "Enable": "Enable",
    "ProtectType": "ProtectType",
    "DataType": "DataType",
    "ReadExpressions": "ReadExpressions",
    "WriteExpressions": "WriteExpressions",
    "RpcWriteEnable": "RpcWriteEnable",
    "Value": "InitValue",
    "SaveValue": "SaveValue",
    "AlarmDelay": "AlarmDelay",
    "BoolOpenAlarmEnable": "BoolOpenAlarmEnable",
    "BoolOpenRestrainExpressions": "BoolOpenRestrainExpressions",
    "BoolOpenAlarmText": "BoolOpenAlarmText",
    "BoolCloseAlarmEnable": "BoolCloseAlarmEnable",
    "BoolCloseRestrainExpressions": "BoolCloseRestrainExpressions",
    "BoolCloseAlarmText": "BoolCloseAlarmText",
    "HAlarmEnable": "HAlarmEnable",
    "HRestrainExpressions": "HRestrainExpressions",
    "HAlarmText": "HAlarmText",
    "HAlarmCode": "HAlarmCode",
    "HHAlarmEnable": "HHAlarmEnable",
    "HHRestrainExpressions": "HHRestrainExpressions",
    "HHAlarmText": "HHAlarmText",
    "HHAlarmCode": "HHAlarmCode",
    "LAlarmEnable": "LAlarmEnable",
    "LRestrainExpressions": "LRestrainExpressions",
    "LAlarmText": "LAlarmText",
    "LAlarmCode": "LAlarmCode",
    "LLAlarmEnable": "LLAlarmEnable",
    "LLRestrainExpressions": "LLRestrainExpressions",
    "LLAlarmText": "LLAlarmText",
    "LLAlarmCode": "LLAlarmCode",
    "CustomAlarmEnable": "CustomAlarmEnable",
    "CustomRestrainExpressions": "CustomRestrainExpressions",
    "CustomAlarmText": "CustomAlarmText",
    "CustomAlarmCode": "CustomAlarmCode",
    "Unit": "Unit",
    "RegisterAddress": "RegisterAddress",
    "OtherMethod": "OtherMethod",
    "Remark1": "Remark1",
    "Remark2": "Remark2",
    "Remark3": "Remark3",
    "Remark4": "Remark4",
    "Remark5": "Remark5",
    "NameDump": "Duplicate variable name {0}",
    "PluginNotNull": "Plugin name does not exist",
    "ArrayLength": "ArrayLength"
  },
  "ThingsGateway.Gateway.Application.RpcLogPageInput": {
    "SearchDate": "SearchDate",
    "OperateObject": "OperateObject",
    "OperateSource": "OperateSource"
  },
  "ThingsGateway.Gateway.Application.BackendLogPageInput": {
    "SearchDate": "SearchDate",
    "LogLevel": "LogLevel",
    "LogSource": "LogSource"
  },
  "ThingsGateway.Gateway.Application.RpcService": {
    "VariableNotNull": "{0} variable does not exist",
    "VariableReadOnly": "{0} variable is read-only",
    "VariableWriteDisable": "{0} variable is not allowed to write",
    "DriverNotNull": "System error, corresponding collection device does not exist, please try again later",
    "DevicePause": "{0} device is paused",
    "WriteVariable": "Write Variable"
  },
  "ThingsGateway.Gateway.Application.ExportString": {
    "VariableName": "Variable",
    "RedundantDeviceName": "Redundant Device",
    "ChannelName": "Channel",
    "DeviceName": "Device"
  },
  "ThingsGateway.Gateway.Application.ProtectTypeEnum": {
    "ReadOnly": "ReadOnly",
    "ReadWrite": "ReadWrite",
    "WriteOnly": "WriteOnly"
  }
}
