| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588 |
- #test
- no.exit.key=Key information not found
- #\u9519\u8BEF\u6D88\u606F
- not.null=* Required
- user.jcaptcha.error=Invalid verification code
- user.jcaptcha.expire=Verification code expired
- user.not.exists=User not found/Password incorrect
- user.password.not.match=User not found/Password incorrect
- user.password.retry.limit.count=Incorrect password entered {0} times
- user.password.retry.limit.exceed=Account locked for 10 minutes after {0} failed attempts
- user.password.delete=Your account has been deleted
- user.blocked=Contact administrator: Account blocked
- role.blocked=Contact administrator: Role blocked
- user.logout.success=Logout successful
- length.not.valid=Length between {min} and {max} characters
- user.username.not.valid=* 2-20 alphanumeric/underscore (non-numeric start)
- user.password.not.valid=* 5-50 characters
- user.email.not.valid=Invalid email format
- user.mobile.phone.number.not.valid=Invalid phone number format
- user.login.success=Login successful
- user.register.success=Registration successful
- user.notfound=Session expired. Please login again
- user.forcelogout=Admin forced logout. Re-login required
- user.unknown.error=System error. Please re-login
- ##\u6587\u4EF6\u4E0A\u4F20\u6D88\u606F
- upload.exceed.maxSize=File size exceeds limit!<br/>Max: {0}MB
- upload.filename.exceed.length=Filename max {0} characters
- ##\u6743\u9650
- no.permission=No data permission. Contact admin: [{0}]
- no.create.permission=No create permission. Contact admin: [{0}]
- no.update.permission=No update permission. Contact admin: [{0}]
- no.delete.permission=No delete permission. Contact admin: [{0}]
- no.export.permission=No export permission. Contact admin: [{0}]
- no.view.permission=No view permission. Contact admin: [{0}]
- ##\u56DB\u3001\u5168\u5C40\u5F02\u5E38\u5904\u7406\u5668
- exception.auth.no.permission=Access denied. Contact administrator
- exception.demo.mode.not.allow=Demo mode: Operation disabled
- ##\u4E94\u3001AjaxResult \u9ED8\u8BA4\u6D88\u606F
- ajax.result.success=Operation successful
- ajax.result.error=Operation failed
- ##\u516D\u3001Controller \u7528\u6237\u7BA1\u7406\u76F8\u5173\u63D0\u793A
- user.add.fail.login.account.exist=Username '{0}' already exists
- user.add.fail.phone.exist=Phone '{0}' already registered
- user.add.fail.email.exist=Email '{0}' already registered
- user.update.fail.phone.exist=Phone conflict: '{0}' in use
- user.update.fail.email.exist=Email conflict: '{0}' in use
- user.update.user.detail.exception=Profile update failed. Contact admin
- ##\u4E03\u3001Service \u5F02\u5E38\u63D0\u793A
- ##\u7528\u6237\u670D\u52A1
- user.service.import.data.not.null=Import data cannot be empty!
- user.service.operate.super.admin.not.allow=Super admin operation prohibited
- user.service.access.data.no.permission=Unauthorized user data access
- ##\u5C97\u4F4D\u670D\u52A1
- post.service.delete.assigned.not.allow={0} assigned. Deletion blocked
- ##\u89D2\u8272\u670D\u52A1
- role.service.operate.super.admin.not.allow=Super role modification prohibited
- role.service.access.data.no.permission=Unauthorized role access
- role.service.delete.assigned.not.allow={0} assignment exists. Deletion blocked
- ##\u914D\u7F6E\u670D\u52A1
- config.service.built.in.param.delete.not.allow=Built-in parameter [{0}] protected
- ##\u5B57\u5178\u7C7B\u578B\u670D\u52A1
- dict.type.service.delete.assigned.not.allow={0} referenced. Deletion blocked
- ##\u90E8\u95E8\u670D\u52A1
- dept.service.access.data.no.permission=Department access denied
- dept.service.add.disabled.not.allow=Department inactive: Add prohibited
- ##\u4EE3\u7801\u751F\u6210\u670D\u52A1
- code.gen.service.import.fail=Import failed: {0}
- code.gen.service.render.template.fail=Template render failed: Table {0}
- code.gen.service.sync.data.fail.table.not.exist=Sync failed: Table missing
- code.gen.service.tree.code.field.not.null=Tree code field required
- code.gen.service.tree.parent.code.field.not.null=Parent tree code required
- code.gen.service.tree.name.field.not.null=Tree name field required
- code.gen.service.sub.table.name.not.null=Child table name required
- code.gen.service.sub.table.fk.name.not.null=Foreign key required for child table
- ##\u7528\u6237\u8BE6\u60C5\u670D\u52A1
- user.detail.service.login.user.not.exist=User {0} not found
- user.detail.service.account.deleted=Account {0} deleted
- user.detail.service.account.disabled=Account {0} suspended
- user.detail.service.account.blacklisted=Blocked from {1} module: Account {0}
- user.detail.service.account.lack.role.permission=Missing role permissions: Account {0}
- ##\u79FB\u52A8\u7AEF\u767B\u5F55\u670D\u52A1
- mobile.login.service.sys.config.register.role.code.not.config=Configure register_role_code in sys_config
- mobile.login.service.sys.config.register.dept.code.not.config=Configure register_dept_code in sys_config
- mobile.login.service.sys.config.register.post.code.not.config=Configure register_post_code in sys_config
- ##\u9650\u6D41\u670D\u52A1
- limit.service.access.too.frequent=Request throttled. Try later
- ##\u5B89\u5168\u5DE5\u5177
- security.util.get.user.id.error=User ID retrieval failed
- security.util.get.dept.id.error=Department ID retrieval failed
- security.util.get.user.account.error=Account retrieval failed
- security.util.get.user.info.error=User info retrieval failed
- ##\u516B\u3001CommonResult \u6210\u529F\u6D88\u606F
- common.result.success.device.info= Device:{0}
- common.result.success.import.data=Imported {0} records
- ##\u4E5D\u3001Assert \u53C2\u6570\u6821\u9A8C\u63D0\u793A
- ##\u901A\u7528\u63D0\u793A
- assert.common.delete.select.data=Select records to delete!
- assert.common.param.id.not.null=ID required!
- assert.common.param.primary.key.id.not.null=Primary key required!
- assert.common.param.invalid=Invalid parameters!
- ##\u4F5C\u4E1A\u7968\u76F8\u5173
- assert.work.order.info.not.exist=Work order not found!
- assert.work.order.data.lost=Work order data corrupt!
- assert.work.order.id.not.null=Work order ID required!
- assert.work.order.current.id.not.null=Current work order ID required!
- assert.work.order.step.six.cannot.cancel=Step 6: Cancellation prohibited
- assert.work.order.wait.lock.complete=Wait for lock completion: [{0}]
- assert.work.order.specify=Specify work order!
- assert.work.order.job.id.not.null=Job ID required!
- assert.work.order.device.taken.cannot.operate=Device allocated: Operation blocked
- assert.work.order.not.started.cannot.co.lock=Work order not started: Group Lock invalid
- assert.work.order.already.co.locked.cannot.repeat=Group Lock active: Duplication prevented
- assert.work.order.not.co.locked.cannot.unlock=No Group Lock: Unlock aborted
- assert.work.order.already.unlocked.cannot.repeat=Already unlocked: Operation ignored
- assert.work.order.code.not.null=Work order code required!
- assert.work.order.name.not.null=Work order name required!
- assert.work.order.select.isolation.point=Select isolation points!
- assert.work.order.person.info.not.null=Personnel info required!
- assert.work.order.point.info.not.null=Point information missing!
- ##\u94A5\u5319\u76F8\u5173
- assert.key.data.lost=Key data corruption!
- assert.key.nfc.no.corresponding.info=NFC tag unrecognized
- assert.key.specify.nfc=Specify key NFC!
- assert.key.nfc.not.null=Key NFC required!
- assert.key.nfc.corresponding.info.not.exist=Key not found: {0}
- ##\u6302\u9501\u76F8\u5173
- assert.lock.data.lost=Lock data corrupt!
- assert.lock.nfc.no.corresponding.info=NFC tag unrecognized
- assert.lock.nfc.not.null=Lock NFC required!
- assert.lock.nfc.corresponding.data.not.exist=Lock not found: {0}
- assert.lock.nfc.missing=Lock NFC missing!
- assert.lock.specify.nfc=Specify lock NFC!
- assert.lock.name.already.taken={0} currently in use!
- assert.lock.point.error.duplicate=Duplicate lock point [{0}]. Complete multi-lock first!
- assert.lock.take.at.least.one=Remove minimum one lock!
- ##\u786C\u4EF6\u76F8\u5173
- assert.hardware.serial.no.corresponding.info=Serial number unrecognized
- assert.hardware.lock.no.init.data.for.update=Lock initialization missing
- assert.hardware.accessory.no.init.data.for.update=Accessory initialization missing
- assert.hardware.code.not.null=Hardware code required!
- assert.hardware.name.not.null=Hardware name required!
- assert.hardware.code.already.used={0} already in use!
- assert.hardware.specify.return.location=Specify return location!
- assert.hardware.specify.return.cabinet=Specify storage cabinet!
- ##\u9694\u79BB\u70B9\u76F8\u5173
- assert.isolation.point.nfc.no.corresponding.info=NFC tag unrecognized
- assert.isolation.point.name.used.by.sop.cannot.delete={0} linked to SOP: Deletion blocked
- assert.isolation.point.used.by.loto.cannot.delete={0} used by {1} station: Unbind first
- assert.isolation.point.name.not.null=Isolation point name required!
- assert.isolation.point.code.name.not.null=Code/Name required!
- assert.isolation.point.id.not.null=Isolation point ID required!
- assert.isolation.point.name.already.used=Name already exists!
- assert.isolation.point.nfc.already.used=NFC already assigned!
- assert.isolation.point.code.already.used=Code already in use!
- assert.isolation.point.serial.no.already.used=Serial number duplicate!
- assert.isolation.point.query.error=Query failed!
- ##\u8F85\u4EF6\u76F8\u5173
- assert.accessory.nfc.no.corresponding.info=NFC tag unrecognized
- assert.accessory.nfc.missing=Accessory NFC missing!
- assert.accessory.take.at.least.one=Remove minimum one accessory!
- ##\u5C97\u4F4D\u76F8\u5173
- assert.post.info.not.exist=Position not found!
- assert.post.name.not.null=Position name required!
- assert.post.name.already.used=Name already exists!
- assert.post.id.not.null=Position ID required!
- assert.post.not.null=Position required!
- assert.post.used.by.user.cannot.delete=Assigned to users: Deletion blocked
- assert.post.has.children.cannot.delete=Sub positions exist: Deletion blocked
- ##SOP \u76F8\u5173
- assert.sop.data.not.exist=SOP not found!
- assert.sop.id.not.null=SOP ID required!
- assert.sop.name.not.null=SOP name required!
- assert.sop.code.name.not.null=Code/Name required!
- assert.sop.code.already.used=Code already exists!
- assert.sop.sort.data.not.null=Sort order required!
- ##\u8BBE\u5907\u5DE5\u827A\u76F8\u5173
- assert.machinery.process.info.not.exist=Process not found!
- assert.machinery.process.name.not.null=Name required!
- assert.machinery.process.parent.id.not.null=Parent ID required!
- assert.machinery.process.name.already.used=[{0}] exists in processes/equipment!
- assert.machinery.process.select.isolation.point=Select isolation points!
- ##\u5DE5\u4F5C\u533A\u57DF\u76F8\u5173
- assert.work.area.name.not.null=Area name required!
- assert.work.area.code.name.not.null=Code/Name required!
- assert.work.area.id.not.null=Area ID required!
- assert.work.area.code.already.used=Code already exists!
- assert.work.area.has.isolation.point.cannot.delete={0} contains points: Deletion blocked
- assert.work.area.pass.id=Pass area ID!
- ##\u9501\u63A7\u67DC / \u7269\u8D44\u67DC\u76F8\u5173
- assert.cabinet.lock.id.not.null=Cabinet lock ID required!
- assert.cabinet.material.code.not.null=Material cabinet code required!
- assert.cabinet.material.info.not.exist=Cabinet not found!
- assert.cabinet.material.code.identity.unrecognized=Unknown cabinet: {0}!
- assert.cabinet.not.exist=Cabinet missing!
- assert.cabinet.material.specify=Specify material cabinet!
- assert.cabinet.code.not.null=Cabinet code required!
- assert.cabinet.material.no.inspection.plan=No inspection plans assigned!
- assert.cabinet.material.no.executable.inspection.plan=No active inspection plans!
- assert.cabinet.clear.position.info.first=Clear compartments first!
- assert.cabinet.code.already.used=Code already exists!
- assert.cabinet.name.already.used=Name already exists!
- assert.cabinet.electric.id.not.null=Electrical cabinet ID required!
- assert.cabinet.electric.pass.id=Pass electrical cabinet ID!
- assert.cabinet.name.not.null=Name required!
- assert.cabinet.name.already.used.retry=Name exists. Try different!
- ##\u7269\u8D44\u76F8\u5173
- assert.material.rfid.not.null=Material RFID required!
- assert.material.rfid.not.found=Material not found: RFID {0}!
- assert.material.cabinet.code.not.found=Cabinet not found: Code {0}!
- assert.material.put.new.in.cabinet=Add new materials to cabinet!
- assert.material.original.not.exist=Original material missing!
- assert.material.new.not.exist=New material missing!
- assert.material.code.already.used=Code already exists!
- assert.material.rfid.already.used=RFID already assigned!
- assert.material.not.exist=Material not found!
- assert.material.specify.rfid=Specify material RFID!
- assert.material.specify.borrow.or.return=Specify borrow/return action!
- assert.material.rfid.already.borrowed={0} already borrowed!
- assert.material.rfid.already.in.cabinet={0} already stored!
- assert.material.cabinet.info.not.null=Cabinet info required!
- assert.material.select=Select materials!
- assert.material.old.id.not.null=Old material ID required!
- assert.material.new.rfid.not.null=New material RFID required!
- assert.material.to.replace.not.taken=Original material not removed!
- assert.material.has.cabinet.cannot.replace=Still stored: Replacement blocked!
- assert.material.replace.abnormal=Replacement failed!
- assert.material.no.maintain.or.replace=No repair/replacement specified!
- assert.material.import.data.not.null=Import data required!
- ##\u7269\u8D44\u5206\u7C7B\u76F8\u5173
- assert.material.category.has.materials.cannot.delete={0} contains items: Deletion blocked!
- assert.material.category.has.children.cannot.delete={0} has subcategories: Deletion blocked!
- assert.material.category.code.already.used=Category code exists!
- assert.material.category.borrow.duration.gte.reminder=Borrow duration >= reminder period!
- ##\u7535\u673A\u76F8\u5173
- assert.motor.data.not.exist=Motor data missing!
- assert.motor.map.primary.key.not.null=Map primary key required!
- ##\u5730\u56FE\u76F8\u5173
- assert.map.data.parse.fail=Map parsing failed!
- assert.map.provide.loto.cabinet.serial.no=Provide Lockout cabinet serial!
- ##\u68C0\u67E5\u8BA1\u5212\u76F8\u5173
- assert.inspection.plan.configure.template=Configure inspection template in base data!
- assert.inspection.plan.id.not.null=Plan ID required!
- ##\u6307\u7EB9\u76F8\u5173
- assert.fingerprint.specify.user=Link fingerprint to user!
- assert.fingerprint.group.not.null=Fingerprint group required!
- assert.fingerprint.entry.limit.reached=Max {0} prints reached!
- assert.fingerprint.unrecognizable.retry=Unreadable print: Re-scan!
- assert.fingerprint.similarity.low.retry=Low similarity: Re-enroll!
- assert.fingerprint.info.not.null=Print data required!
- ##\u4EBA\u8138\u76F8\u5173
- assert.face.specify.user=Link face to user!
- assert.face.entry.limit.reached=Max {0} faces stored!
- assert.face.file.parse.fail=Face file corrupt!
- assert.face.upload.file=Upload face image!
- assert.face.get.fail=Face retrieval failed!
- assert.face.get.feature.fail=Feature extraction failed!
- assert.face.not.recognized=Face not recognized!
- assert.face.comparison.error=Comparison error: {0}!
- assert.face.info.not.null=Face data required!
- assert.face.data.not.exist=No Face Data Found!
- ##\u767B\u5F55\u76F8\u5173
- assert.login.fingerprint.identity.unknown=Fingerprint unrecognized: Alternative login!
- assert.login.face.identity.unknown=Face unrecognized: Alternative login!
- ##\u7F16\u7801\u89C4\u5219\u76F8\u5173
- assert.code.rule.input.char.not.null=Rule input required!
- assert.code.rule.type.not.found=Rule type [{0}] missing!
- assert.code.rule.result.record.not.found=Result record missing: [{0}]!
- assert.code.rule.input.char.length.error=Input length mismatch!
- assert.code.rule.serial.number.component.unique=Single component rule: {0}!
- assert.code.rule.generated.code.empty=Empty generated code: [{0}]!
- assert.code.rule.generated.code.exceed.max.length=Code [{0}] too long: Max {1} chars!
- ##\u4E1A\u52A1\u7F16\u7801\u76F8\u5173
- assert.business.code.max.length.less.than.sum=Max length {0} < segment sum {1}!
- ##\u6587\u4EF6\u4E0A\u4F20\u76F8\u5173
- assert.file.upload.param.invalid=Invalid upload parameters!
- ##\u7EDF\u8BA1\u76F8\u5173
- assert.statistics.type.not.null=Statistic type required!
- ##\u7528\u6237\u76F8\u5173
- assert.user.data.duplicate.name.modify=Duplicate names detected: Modify!
- assert.user.not.exist.in.system=User not in system!
- assert.user.work.card.not.bound=Card not linked to user!
- assert.user.employee.card.no.work.task=No tasks assigned!
- assert.user.operate.co.lock.status.not.null=G-Lock status required!
- assert.user.work.card.nfc.not.null=Card NFC required!
- ##\u5B57\u5178\u6570\u636E\u76F8\u5173
- assert.dict.data.key.value.exist=Value exists: {0}!
- ##\u5176\u4ED6\u4E1A\u52A1\u903B\u8F91
- assert.business.no.data.received=No data received!
- assert.business.specify.isolation.point.info=Specify isolation points!
- assert.business.specify.lock.or.unlock=Specify lock/unlock action!
- assert.business.specify.task.status=Specify task status!
- assert.business.point.switch.data.not.null=Switch data required!
- assert.business.loto.serial.no.not.null=Lockout serial required!
- assert.business.point.serial.no.not.null=Point serial required!
- assert.business.nfc.no.lock.info.found=No lock found via NFC!
- assert.business.multiple.faces.recognized.adjust=Multiple faces detected: Re-position!
- assert.business.task.name.not.null=Task name required!
- assert.business.key.required=Specify KEY!
- assert.business.config.param.not.exist=Config parameter missing!
- assert.business.email.param.missing.check=Email params missing!
- assert.business.step4.executed.cannot.change.locker=Step 4 completed: Locker change blocked!
- assert.business.card.no.required=Enter card number!
- assert.business.card.not.exist=Card not found!
- assert.business.no.associated.user=No linked user!
- assert.business.please.login.first=Login required!
- assert.business.user.not.exist=User not found!
- assert.business.user.not.bound.card=User-card link missing!
- assert.business.card.invalid=Invalid card!
- assert.business.current.user.info.not.exist=User profile missing!
- assert.business.data.not.exist=Data not found!
- assert.business.current.task.param.missing=Task parameters missing!
- assert.business.task.not.exist=Task not found!
- assert.business.template.code.not.null=Template code required!
- assert.business.type.not.null=Type required!
- assert.business.cabinet.code.not.exist=Cabinet code invalid!
- assert.business.recipient.not.exist=Recipient missing!
- assert.business.key.info.not.null=Key info required!
- assert.business.no.corresponding.accessory.info=Accessory not found!
- assert.business.please.select.personnel.info=Select personnel!
- assert.business.please.configure.person.post.first=Assign position first!
- assert.business.step.id.not.null=Step ID required!
- assert.business.status.not.null=Status required!
- assert.business.please.execute.previous.step.first=Complete previous step!
- assert.business.please.set.locker.first=Designate locker!
- assert.business.at.least.one.co.locker.required=Minimum one G-Locker required!
- assert.business.work.permit.step.lost.check.data=Step loss detected: Review data!
- assert.business.input.fingerprint.not.null=Fingerprint required!
- assert.business.no.fingerprint.in.database=No prints enrolled!
- # \u90AE\u4EF6\u4EFB\u52A1\u76F8\u5173
- assert.mail.task.receive.user.not.null=Recipient required!
- assert.mail.task.template.not.null=Email template required!
- assert.mail.task.scheduled.send.time.not.null=Scheduled send time required!
- # \u4F5C\u4E1A\u7968\u76F8\u5173
- assert.job.ticket.step6.executed.cannot.change.user=User cannot be changed after step 6 execution!
- assert.job.ticket.process.not.null=Process required!
- assert.job.ticket.unfinished.step.cannot.complete=Completion blocked by unfinished steps!
- # \u7269\u8D44\u67DC\u76F8\u5173
- assert.material.cabinet.identity.required=Cabinet ID or code required!
- assert.material.cabinet.code.not.blank=Cabinet code required!
- assert.material.cabinet.no.materials=No materials in cabinet!
- assert.material.cabinet.not.null=Cabinet required!
- assert.material.cabinet.code.required=Code required!
- assert.material.cabinet.code.already.used=Code already in use!
- assert.material.cabinet.name.already.used=Cabinet name already exists!
- assert.material.cabinet.has.materials.cannot.delete=Cannot delete cabinet with materials present!
- # \u68C0\u67E5\u8BA1\u5212\u76F8\u5173
- assert.material.check.plan.date.not.null=Inspection date required!
- assert.material.check.plan.inspector.not.null=Inspector required!
- assert.material.check.plan.select.cabinet.required=Cabinet selection required!
- assert.material.check.plan.name.already.used=Name already exists!
- assert.material.check.plan.id.not.null=Check plan ID required!
- assert.material.check.plan.duplicate.record=Duplicate record detected!
- assert.material.check.record.id.not.null=Record ID required!
- assert.material.check.plan.plan.id.not.null=Plan ID required!
- assert.material.check.plan.no.data.to.submit=No data to submit!
- assert.material.check.plan.unchecked.materials=Uninspected materials found!
- # \u7269\u8D44\u76F8\u5173
- assert.material.id.not.null=Material ID required!
- assert.material.loan.restitution.user.id.not.null=Return user ID required!
- assert.material.loan.restitution.cabinet.id.not.null=Return cabinet ID required!
- assert.material.change.old.id.not.null=Original material ID required!
- assert.material.change.new.id.not.null=New material ID required for replacement!
- assert.material.change.new.not.in.current.cabinet=New material not in current cabinet!
- assert.material.change.abnormal.replacement=Abnormal replacement detected!
- assert.cabinet.material.not.exist=Data missing!
- # SOP\u76F8\u5173
- assert.sop.machinery.process.id.not.null=Machinery process ID required!
- assert.sop.already.exists=SOP already exists!
- assert.sop.import.material.data.not.null=Import data required!
- # \u94A5\u5319\u76F8\u5173
- assert.key.name.not.blank=Key name required!
- assert.key.name.already.used=Key name already in use!
- assert.key.code.already.used=Key code already in use!
- assert.key.mac.already.used=MAC address already in use!
- assert.key.nfc.required=NFC required for key!
- assert.key.mac.address.required=MAC address required for key!
- assert.key.nfc.already.exists=Key with NFC already exists!
- assert.key.mac.already.exists=Key with MAC already exists!
- # \u5DE5\u5361\u76F8\u5173
- assert.job.card.nfc.required=NFC required for job card!
- assert.job.card.nfc.already.exists=Job card with NFC already exists!
- # \u6302\u9501\u76F8\u5173
- assert.lock.name.already.used=Padlock name already in use!
- assert.lock.code.already.used=Padlock code already in use!
- assert.lock.nfc.required=NFC required for padlock!
- assert.lock.nfc.already.exists=Padlock with NFC already exists!
- # \u6302\u9501\u7C7B\u578B\u76F8\u5173
- assert.lock.type.name.already.used=Padlock type name already exists!
- assert.lock.type.code.already.used=Padlock type code already in use!
- assert.lock.type.has.subtype.cannot.delete=Cannot delete type with subtypes!
- assert.lock.type.in.use.by.isolation.point.cannot.delete=Type in use by isolation points!
- # \u9501\u5177\u7C7B\u578B\u76F8\u5173
- assert.lockset.type.name.already.used=Lockset type name already exists!
- assert.lockset.type.code.already.used=Lockset type code already in use!
- assert.lockset.type.remove.subset.first=Remove subset first!
- # RFID\u76F8\u5173
- assert.rfid.token.already.exists=RFID token already exists!
- assert.rfid.token.in.use.by.isolation.point.cannot.delete=Token in use by isolation points!
- assert.rfid.token.required=RFID token required!
- # \u90AE\u4EF6\u6A21\u677F\u76F8\u5173
- assert.mail.template.code.not.blank=Template code required!
- assert.mail.template.code.already.used=Template code already exists!
- assert.mail.template.id.not.null=Template ID required!
- # \u7CFB\u7EDF\u5C5E\u6027\u76F8\u5173
- assert.system.attribute.value.not.blank=Attribute value required!
- assert.system.attribute.key.already.used=Attribute key already exists!
- assert.system.attribute.key.not.blank=Attribute key required!
- # \u5F00\u5173\u5E03\u5C40\u76F8\u5173
- assert.loto.switch.map.id.not.null=Switch map ID required!
- # \u5176\u4ED6
- assert.res.api.check.id.not.null=Check ID required!
- \u4EBA\u5458\u7BA1\u7406=Personnel
- \u90E8\u95E8\u7BA1\u7406=Department
- \u5C97\u4F4D\u7BA1\u7406=Position
- \u5355\u4F4D\u7BA1\u7406=Unit
- \u89D2\u8272\u7BA1\u7406=Role
- \u786C\u4EF6\u7BA1\u7406=Hardware
- \u786C\u4EF6\u7C7B\u578B=Hardware Type
- \u9501\u5177\u673A\u6784\u7C7B\u578B=Latch Type
- \u6302\u9501\u7C7B\u578B=Padlock Type
- \u786C\u4EF6=Hardware
- \u786C\u4EF6\u4FE1\u606F=Hardware Info
- \u9501\u5177\u673A\u6784\u4FE1\u606F=Latch Info
- \u94A5\u5319\u4FE1\u606F=Key Info
- \u6302\u9501\u4FE1\u606F=Padlock Info
- RFID\u6807\u8BC6=RFID Tag
- \u9501\u67DC\u7BA1\u7406=Cabinet
- \u5DE5\u5361\u4FE1\u606F=Job Card Info
- \u8BBE\u5907\u7BA1\u7406=Equipment
- \u8BBE\u5907\u7C7B\u578B\u8BBE\u7F6E=Equipment Type Config
- \u9501\u5B9A\u7AD9\u7BA1\u7406=LOTO Station
- \u5F00\u5173\u5E03\u5C40\u7BA1\u7406=Switch Layout
- \u5F00\u5173\u7535\u673A\u7BA1\u7406=Switch Motor
- \u9694\u79BB\u70B9\u7BA1\u7406=Isolation Point
- SOP\u7BA1\u7406=SOP
- SOP\u5217\u8868=SOP List
- \u4F5C\u4E1A\u7BA1\u7406=Work Order
- \u4F5C\u4E1A\u6267\u884C=Work Order Execution
- \u4F5C\u4E1A\u5217\u8868=Work Order List
- \u6570\u636E\u7EDF\u8BA1=Data Analytics
- \u57FA\u7840\u6570\u636E\u7EDF\u8BA1=Base Stats
- \u9886\u53D6\u5F52\u8FD8\u7EDF\u8BA1=Pickup/Return Stats
- \u7269\u8D44\u7BA1\u7406=Material
- \u7269\u8D44\u67DC=Material Cabinet
- \u7269\u8D44\u7C7B\u578B=Material Type
- \u7269\u8D44\u76D8\u70B9=Material Inventory
- \u7269\u8D44\u89C4\u683C\u79CD\u7C7B=Material Spec Types
- \u7269\u8D44\u6E05\u5355=Material List
- \u7269\u8D44\u9886\u53D6\u5F52\u8FD8=Material Pickup/Return
- \u7269\u8D44\u68C0\u67E5\u8BA1\u5212=Inspection Plan
- \u7269\u8D44\u68C0\u67E5\u8BB0\u5F55=Inspection Records
- \u7EF4\u4FEE/\u66F4\u6362\u8BB0\u5F55=Maintenance/Replacement Records
- \u7269\u8D44\u67DC\u9ED1\u540D\u5355=Blacklist
- \u7269\u8D44\u4F7F\u7528\u8BF4\u660E=Usage Guide
- \u5F02\u5E38\u7BA1\u7406=Exception
- \u7269\u8D44\u5F52\u8FD8\u5F02\u5E38=Return Exception
- \u7269\u8D44\u67DC\u95E8\u5F02\u5E38=Cabinet Door Exception
- \u4EBA\u5DE5\u4E0A\u4F20\u5F02\u5E38=Manual Upload Exception
- \u90AE\u4EF6\u7BA1\u7406=Email
- \u90AE\u4EF6\u6A21\u677F=Templates
- \u90AE\u4EF6\u63D0\u9192=Notifications
- \u7CFB\u7EDF\u7BA1\u7406=System
- \u83DC\u5355\u7BA1\u7406=Menu
- \u5B57\u5178\u7BA1\u7406=Dictionary
- \u901A\u77E5\u516C\u544A=Announcements
- \u65E5\u5FD7\u7BA1\u7406=Log
- \u64CD\u4F5C\u65E5\u5FD7=Operation Log
- \u767B\u5F55\u65E5\u5FD7=Login Log
- \u7F16\u7801\u89C4\u5219=Auto Code Rules
- \u57FA\u7840\u6570\u636E=Base Data
- \u5730\u56FE\u53C2\u6570=Map Params
- \u5730\u56FE\u70B9\u4F4D=Map Points
- \u7CFB\u7EDF\u5DE5\u5177=DevTools
- \u8868\u5355\u6784\u5EFA=Form Builder
- \u4EE3\u7801\u751F\u6210=Code Generator
- \u7CFB\u7EDF\u63A5\u53E3=API
- ##\u5B57\u5178\u90E8\u5206
- \u603B\u89C8=Summary
- \u67DC\u4E2D=Available
- \u501F\u51FA=Loaned
- \u6B63\u5E38=Normal
- \u8FC7\u671F=Expired
- \u635F\u574F=Damaged
- \u662F=Yes
- \u5426=No
- \u672A\u5F00\u59CB=Pending
- \u5DF2\u53D6\u6D88=Cancelled
- \u5DF2\u7ED3\u675F=Closed
- \u5F85\u89E3\u9501=Pending Release
- \u5F85\u4E0A\u9501=Pending Lockout
- \u505C\u7528=Deactivated
- \u5F02\u5E38=Exception
- \u663E\u793A=Show
- \u9690\u85CF=Hide
- \u5173\u95ED=Close
- #\u516B\u5927\u6B65\u9AA4
- #pc
- \u8BC6\u522B\u6240\u8981\u5B8C\u6210\u7684\u5DE5\u4F5C\u5185\u5BB9=Identify Work Content
- \u5224\u65AD\u5DE5\u4F5C\u6240\u6D89\u53CA\u7684\u80FD\u91CF\u6E90\u53CA\u9694\u79BB\u65B9\u5F0F=Energy Isolation Method
- \u901A\u77E5\u6240\u6709\u53D7\u5F71\u54CD\u7684\u4EBA=Notify Affected Employees
- \u5982\u679C\u8BBE\u5907\u6B63\u5728\u8FD0\u884C\uFF0C\u6309\u6B63\u5E38\u64CD\u4F5C\u505C\u673A=Shutdown Operation
- \u4E0A\u9501\u5E76\u6302\u724C=Lockout Tagout
- \u53D6\u9501\u524D\u7684\u68C0\u67E5=Pre-Unlock Check
- \u62C6\u9664\u9501\u5177\uFF0C\u5E76\u628A\u9694\u79BB\u5F00\u5173\u6062\u590D\u5230\u6B63\u5E38\u4F4D\u7F6E=Unlock and Restore Switch
- #android
- \u8BC6\u522B\u5DE5\u4F5C\u5185\u5BB9=Identify Work Content
- \u80FD\u91CF\u6E90\u9694\u79BB\u65B9\u5F0F=Energy Isolation Method
- \u901A\u77E5\u4EBA\u5458=Notify Affected Personnel
- \u64CD\u4F5C\u505C\u673A=Shutdown Operation
- \u4E0A\u9501\u6302\u724C=Lockout
- \u80FD\u91CF\u9694\u79BB\u8BC1\u5B9E=Verify Energy Isolation
- \u53D6\u9501\u524D\u68C0\u67E5=Pre-Unlock Check
- \u62C6\u9501\u6062\u590D\u5F00\u5173=Remove Lock & Restore Power
- #TicketOperLog
- \u542F\u52A8\u4F5C\u4E1A=Start Work Order
- \u4F5C\u4E1A=Work Order
- \u5DF2\u542F\u52A8=Initiated
- \u64CD\u4F5C\u786E\u8BA4=Confirm
- \u5DF2\u786E\u8BA4\u6267\u884C=Confirmed
- \u2F08\u5458\u53D8\u52A8=Personnel Changes
- \u5DF2\u6DFB\u52A0\u4E0A\u9501\u4EBA=Locker Added
- \u5DF2\u6DFB\u52A0\u5171\u9501\u4EBA=G-Locker Added
- \u79FB\u9664\u52A0\u4E0A\u9501\u4EBA=Remove Locker
- \u79FB\u9664\u52A0\u5171\u9501\u4EBA=Remove G-Locker
- \u542F\u52A8\u4E0A\u9501=Start Lockout
- \u5B8C\u6210\u4E0A\u9501=Complete Lockout
- \u5DF2\u4E0A\u9501=Locked
- \u5DF2\u6DFB\u52A0\u5171\u9501=G-Locked
- \u6DFB\u52A0\u5171\u9501=Add Group Lock
- \u5DF2\u89E3\u9664\u5171\u9501=G-Unlocked
- \u89E3\u9664\u5171\u9501=Release Group Lock
- \u542F\u52A8\u89E3\u9501=Start Release
- \u5B8C\u6210\u89E3\u9501=Complete Release
- \u5DF2\u89E3\u9501=Released
- \u5DF2\u5B8C\u6210\u4F5C\u4E1A=Work Order Completed
- \u7ED3\u675F\u4F5C\u4E1A=Close Work Order
- \u5DF2\u53D6\u6D88\u4F5C\u4E1A=Work Order Cancelled
- \u53D6\u6D88\u4F5C\u4E1A=Cancel Work Order
|