From 0e99d60cb84ed3a50591c489009167fcc2236d7b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=AD=8F=E5=B0=91=E9=98=B3?= <786612630@qq.com> Date: Tue, 27 Aug 2024 11:08:44 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E5=96=84=E5=9B=BD=E9=99=85=E5=8C=96?= =?UTF-8?q?=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lan/lan_en.json | 733 +++++++++--------- lan/lan_keys.json | 52 +- lan/lan_zh.json | 53 +- lib/app.dart | 1 + lib/flavors.dart | 6 +- lib/login/login/starLock_login_xhj_page.dart | 174 +++-- .../register/starLock_register_xhj_page.dart | 131 ++-- .../selectCountryRegion/common/utils.dart | 3 +- lib/main.dart | 4 +- .../authorizedAdmin_logic.dart | 2 +- .../card/addCardType/addCardType_logic.dart | 2 +- .../card/addICCard/addICCard_page.dart | 2 +- .../otherTypeKeyChangeDate_page.dart | 4 +- .../otherTypeKeyChangeValidityDate_page.dart | 4 +- .../checkingInSetHolidays_page.dart | 4 +- .../checkingInListSeletMonth_page.dart | 34 +- .../checkingInList/checkingInList_page.dart | 2 +- .../checkingInSet/checkingInSet_page.dart | 2 +- .../checkingInAddStaff_page.dart | 2 +- .../doorLockLog/doorLockLog_page.dart | 2 +- .../electronicKeyDetail_logic.dart | 14 +- .../electronicKeyDetailChangeDate_logic.dart | 4 +- .../electronicKeyPeriodValidity_logic.dart | 4 +- .../massSendElectronicKey_logic.dart | 4 +- .../view/sendElectronicKeyView_logic.dart | 2 +- .../view/sendElectronicKeyView_page.dart | 2 +- .../face/addFaceType/addFaceType_logic.dart | 2 +- .../addFingerprintType_logic.dart | 2 +- .../iris/addIrisType/addIrisType_logic.dart | 2 +- .../iris/irisList/irisList_logic.dart | 125 ++- .../lockDetail/lockDetail_page.dart | 2 +- .../normallyOpenMode_page.dart | 2 +- .../nDaysUnopened/nDaysUnopened_page.dart | 2 +- .../lockDetail/palm/addPalm/addPalm_page.dart | 34 +- .../palm/addPalmType/addPalmType_logic.dart | 2 +- .../passwordKeyDetailChangeDate_logic.dart | 4 +- .../passwordKeyDetailChangeDate_page.dart | 2 +- .../passwordKey_perpetual_logic.dart | 8 +- .../addRemoteControlType_logic.dart | 2 +- .../lockMain/xhj/lockMain_xhj_logic.dart | 6 + lib/mine/addLock/addLock/addLock_page.dart | 24 +- .../gatewayConfigurationWifi_page.dart | 6 +- lib/mine/mine/starLockMine_logic.dart | 1 - .../mineMultiLanguage_logic.dart | 14 + .../mineMultiLanguage_page.dart | 4 +- .../mineMultiLanguage_state.dart | 8 +- .../minePersonInfo_entity.dart | 6 +- .../addAuthorizedAdministrator_logic.dart | 2 +- .../adminDetailChangeDate_logic.dart | 4 +- .../administratorDetails_logic.dart | 6 +- .../expireKeyChangeDate_page.dart | 4 +- .../expireKeyChangeValidityDate_page.dart | 4 +- lib/mine/mineSet/mineSet/mineSet_logic.dart | 10 +- .../valueAddedServicesHighFunction_page.dart | 32 +- lib/network/api.dart | 2 +- lib/network/api_provider.dart | 9 +- lib/network/api_repository.dart | 9 +- lib/network/request_interceptor.dart | 18 +- lib/network/request_interceptor_log.dart | 2 +- lib/talk/udp/udp_reciverData.dart | 2 +- .../seletKeyCyclicDate_logic.dart | 4 +- lib/tools/store_service.dart | 4 +- pubspec.yaml | 2 +- 63 files changed, 914 insertions(+), 705 deletions(-) diff --git a/lan/lan_en.json b/lan/lan_en.json index 3d7aa7e6..2a3ee220 100755 --- a/lan/lan_en.json +++ b/lan/lan_en.json @@ -55,113 +55,112 @@ "获取": "Get", "添加": "Add", "删除公司": "Delete Company", - "密码详情": "Password Detail", - "修改密码": "Modify Password", + "密码详情": "Passcode Info", + "修改密码": "Change passcode", "添加虹膜": "Add Iris", - "添加门磁": "Add Door Magnetic", - "添加无线键盘": "Add Wireless Keyboard", + "添加门磁": "Door Sensor", + "添加无线键盘": "Wireless Keypad", "添加手掌": "Add Palm", - "请输入员工账号": "Please enter the employee account", - "批量授权锁": "Batch Authorize Lock", - "授权管理员拥有操作这把锁的重要权限,请确保只发给我你信任的人": "Authorized administrators have important permissions to operate this lock, please make sure to send it to someone you trust", - "功能开启后,你将可以通过网关远程开锁。此功能的开启和关闭只能在锁附近通过手机蓝牙进行。":"After the function is turned on, you will be able to unlock remotely through the gateway. The opening and closing of this function can only be done through the phone Bluetooth near the lock.", - "排列榜": "Leaderboard", + "请输入员工账号": "Enter Employee's Account", + "批量授权锁": "Grant multiple locks", + "授权管理员拥有操作这把锁的重要权限,请确保只发给我你信任的人": "The authorized administrator will have majority permission to operate this lock.", + "功能开启后,你将可以通过网关远程开锁。此功能的开启和关闭只能在锁附近通过手机蓝牙进行。":"This feature allows you to Unlock the Smart Lock Remotely via a Gateway.This Feature can ONLY be Turned ON or OFF via Bluetooth.", + "排列方式": "List Type", "早到榜": "Early List", "迟到榜": "Late List", "当前模式": "Current Mode", - "勤奋榜": "Diligent List", + "勤奋榜": "Working Hard List", "延迟时间": "Delay Time", - "经过以上设定的时间,锁会自动关闭。开启或修改设置后,请先开一次锁,使时间生效。": "After the set time above, the lock will automatically close. After opening or modifying the settings, please open the lock once to make the time effective.", + "经过以上设定的时间,锁会自动关闭。开启或修改设置后,请先开一次锁,使时间生效。": "The lock will lock automatically after the time.Please unlock it for one time first to make the setting available.", "时间": "Time", "开始时间": "Start Time", "结束时间": "End Time", - "工作时间设置": "Working Time Settings", - "常开模式": "Normal Open Mode", - "常开时间": "Normal Open Time", - "常开日期": "Normal Open Date", - "添加员工": "Add Employee", - "编辑员工": "Edit Employee", - "节假日": "Holidays", - "打卡方式": "Punching Mode", - "员工是否有钥匙": "If The Employee Has A Key", - "上班时间": "Office Hours", + "工作时间设置": "Working Time Setting", + "常开模式": "Passage MODE", + "常开时间": "In this time period", + "常开日期": "On these Days", + "添加员工": "Add Staff", + "节假日": "Holiday", + "打卡方式": "Method", + "员工是否有钥匙": "Already has ekey", + "上班时间": "Starting Time", "下班时间": "Closing Time", "本周": "This Week", - "单休": "Single Rest", - "双休": "Two Days Off", - "单双休": "Odd Or Even Days Off", + "单休": "One-day Weekend", + "双休": "Two-day Weekend", + "单双休": "One-two-day Weekend", "年": "Year", "月": "Month", - "放假日期": "Liberty Day", - "补班日期": "Cover Date", - "添加假日": "Added Holiday", + "放假日期": "Holiday", + "补班日期": "Work Days", + "添加假日": "Add Holiday", "开始日期": "Start Date", - "必填": "Must Fill In", + "必填": "Required", "结束日期": "End Date", - "日榜": "Daily Charts", - "月榜": "Monthly Leader board", - "考勤记录": "Attendance Record", + "日榜": "Daily", + "月榜": "Monthly", + "考勤记录": "Records", "假日信息": "Holiday Info", - "基本信息": "Basic Information", - "无线键盘": "Wireless Keyboard", - "选择无线键盘": "Select Wireless Keyboard", - "门磁": "Door Magnetic", - "自动闭锁": "Automatic Blocking", + "基本信息": "Basics", + "无线键盘": "Wireless Keypad", + "选择无线键盘": "Add Keypad", + "门磁": "Door Sensor", + "自动闭锁": "Auto lock", "锁声音": "Lock Sound", - "防撬报警": "Burglar Alarm", + "防撬报警": "Tamper Alert", "重置键": "Reset Button", - "锁时间": "Lock Time", + "锁时间": "Lock Clock", "诊断": "Diagnose", "上传数据": "Upload Data", - "导入其他锁数据": "Import Other Lock Data", - "锁升级": "Lock Escalation", - "标记房态": "Marked House State", - "开锁提醒": "Unlock Reminder", + "导入其他锁数据": "Import frome another lock", + "锁升级": "Firmware Update", + "标记房态": "Room status", + "开锁提醒": "Unlock Notification", "微信二维码": "Unlock QR Code", "拥有电子钥匙的人,通过微信扫一扫这个二维码,即可开门。每把锁的二维码都不相同,你可以将其打印出来贴在对应的锁旁边": "People with electronic keys can open the door by scanning this QR code through WeChat. The QR code of each lock is different. You can print it out and paste it next to the corresponding lock", "锁编号": "Lock Number", - "电量": "Electric Quantity", - "锁分组": "Lock Grouping", - "选择分组": "Selective grouping", - "创建新分组": "Create a new group", - "管理员开锁密码": "Admin Open Lock Password", + "电量": "Battery", + "锁分组": "Lock Group", + "选择分组": "Select group", + "创建新分组": "Create a Group", + "管理员开锁密码": "Admin Passcode", "更新": "Update", - "电量信息可以通过网关远程更新,或通过手机蓝牙在锁旁边更新": "The battery information can be updated remotely via the gateway or next to the lock via Bluetooth on the phone\n", - "当屏幕闪烁时,点击下一步": "When the screen flashes, click Next", + "电量信息可以通过网关远程更新,或通过手机蓝牙在锁旁边更新": "The battery level will be updated by gateway or phone bluetooth", + "当屏幕闪烁时,点击下一步": "Click next when the keypad flashes", "输入*529#或按设置键": "Enter *529# or press the Settings key", "长按重置键2秒": "Press And Hold The Reset Button 2 Seconds", "附近的设备": "Nearby Equipment", "暂无数据": "No Data", - "通过门磁可查询门的开、关状态。每把锁咳添加一个门磁": "You can query the open and close status of a door by using the door status sensor. Add a door magnet to each lock", + "通过门磁可查询门的开、关状态。每把锁咳添加一个门磁": "You will be able to get door status with a door sensor together with a gateway.Only one sensor is allowed to associate with a lock.", "开始": "Start", - "全天": "All Day", - "在设置的常开时间内,锁被打开后将一直处于打开的状态,直到被手动关闭": "During the set normal opening time, the lock will remain open after opening until it is manually closed During the set normal opening time, the lock will remain open after opening until it is manually closed", - "请选择锁音量": "Please Select Lock Volume", - "功能开启后,你将可以听到智能锁的提示音。包括电量过低,密码错误等提示。": "When the function is enabled, you can hear the prompt tone of the smart lock. Including low battery, incorrect password and so on.", + "全天": "All Hours", + "你可以设置多个常开时间段,在设置的时间段内,锁被打开后一直处于打开的状态。": "You can set multiple time periods for passage mode.Within the set time periods,the lock will remain in an open state after being unlocked.", + "请选择锁音量": "Please select lock volume", + "功能开启后,你将可以听到智能锁的提示音。包括电量过低,密码错误等提示。": "By Turning ON,you will hear the sound from the lock", "低": "Low", - "较低": "Lower", + "较低": "Medium low", "中": "Medium", - "较高": "Higher", + "较高": "Medium high", "高": "High", - "开启后,锁被撬动时,会发出报警声": "After opening, an alarm sound will be issued when the lock is picked", - "关闭后,重置键无效,锁要通过app删除后才能重新添加": "After closing, the reset key is invalid, and the lock can be re-added only after being deleted by app", - "校准时间": "Calibration Time", + "开启后,锁被撬动时,会发出报警声": "By turning on,you enable the TAMPER alert.", + "关闭后,重置键无效,锁要通过app删除后才能重新添加": "By turning off,the RESET button is disabled.", + "校准时间": "Calibrate Time", "诊断是读取锁内的配置信息并上传,以便工作人员分析故障的原因": "Diagnosis is to read the configuration information inside the lock and upload it so that the staff can analyze the cause of the failure", - "上传": "Uploading", - "本操作将上传锁内数据到服务器,过程可能需要几分钟,请耐心等待": "This operation will upload the locked data to the server, which may take several minutes", - "请选择要从哪把锁导入": "Please select which lock you want to import from", + "上传": "Upload", + "本操作将上传锁内数据到服务器,过程可能需要几分钟,请耐心等待": "Upload data from lock to server.It may take several minutes", + "请选择要从哪把锁导入": "Select a lock to import from", "有新版本": "Have New Version", "当前版本": "Current Version", - "升级": "Upgrade", - "空闲": "Leisure", - "已入住": "Checked In", + "升级": "Update", + "空闲": "Vacant", + "已入住": "Occupied", "英文": "English", - "中文": "Chinese", - "多语言": "Multilingual", + "中文": "中文", + "多语言": "Languages", "添加锁": "Add Lock", "锁地址": "Lock Address", "选择锁类型": "Select lock type", @@ -169,71 +168,71 @@ "添加设备": "Add device", "网关": "Gateway", "客服": "Customer Service", - "设置": "Setting", + "设置": "Settings", "更多设置": "More Set", - "消息推送": "Push Notification", - "锁用户管理": "Lock User Management", - "拥有的钥匙": "Owned key", + "消息推送": "Notification push", + "锁用户管理": "Lock Users", + "拥有的钥匙": "eKeys associated with this User", "批量授权": "Authority management", "关联设备": "Associated device", "关联姓名": "Associated name", - "转移智能锁": "Transfer Smart Lock", - "选择锁": "Select Lock", - "接收人信息": "Receiver Information", + "转移智能锁": "Transfer Lock", + "选择锁": "Screen lock", + "接收人信息": "Recipient", "转移网关": "Transfer Gateway", - "锁屏": "Lock Screen", + "锁屏": "Screen Lock", "已关闭": "Off", "已开启": "On", - "开启": "Open", - "确定要开启重置键?": "Are you sure you want to open the reset key?", - "确定要关闭重置键?": "Are you sure you want to close the reset key?", - "隐藏无效开锁权限": "Hide invalid unlock permissions", - "APP开锁时需手机连网的锁": "APP Unlock Requires Phone Access To Lock", - "增值服务": "Value Added Services", + "开启": "Turn On", + "确定要开启重置键?": "Continue to enable the Reset button?", + "确定要关闭重置键?": "Continue to disable the Reset button?", + "隐藏无效开锁权限": "Hide invalid access", + "APP开锁时需手机连网的锁": "Locks requiring phone online", + "增值服务": "Services", "关于": "About", "退出": "Logout", "删除账号": "Delete Account", - "个人信息": "Personal Information", + "个人信息": "Account info", "头像": "Avatar", "昵称": "NickName", "请输入昵称": "Please enter your nickname", - "修改昵称": "Change NickName", - "修改账号": "Modify Account", - "重置密码": "Reset Passwords", - "安全问题": "Safety Problem", + "修改昵称": "Rename", + "修改账号": "Edit account", + "重置密码": "Reset Password", + "安全问题": "Security Question", "为了你的账号安全,修改账号前请先使用验证码验证": "For the security of your account, please use the account password verification before modifying the account", - "请输入新账号": "Please enter your new account number", - "找回密码和登录新设备时,可通过绑定的手机验证": "When you retrieve your password and log in to a new device, you can verify it with the attached phone", - "找回密码和登录新设备时,可通过绑定的邮箱验证": "When you retrieve your password and log in to a new device, you can verify it with the attached Email", - "原密码": "Original Password", + "请输入新账号": "Please enter the new account", + "找回密码和登录新设备时,可通过绑定的手机验证": "The Binding Phone number will be used to receive the Verification Code.", + "找回密码和登录新设备时,可通过绑定的邮箱验证": "The Binding email will be used to receive the Verification Code.", + "原密码": "Current Password", "新密码": "New Password", - "确认密码": "Sure Password", - "当你手机丢了,可以通过回答设置的安全问题来登录新设备": "When you lose your phone, you can log in to the new device by answering the security questions you set", - "问题一": "Problem One", - "问题二": "Problem Two", - "问题三": "Problem Three", - "请输入你的答案": "Please Enter Your Answer", - "即将到期": "About to expire", + "确认密码": "Confirm Password", + "当你手机丢了,可以通过回答设置的安全问题来登录新设备": "In case your phone lost,you can login to new phone by answering security questions.", + "问题一": "Question 1", + "问题二": "Question 2", + "问题三": "Question 3", + "请输入你的答案": "Please type Your Answer", + "即将到期": "Expires Soon", "去授权": "Go to authorize", - "修改名称": "Change name", - "状态": "State", + "修改名称": "Edit Name", + "状态": "Status", "WiFi名称": "Wifi Name", "网络MAC": "Network MAC", - "网关升级": "Gateway Upgrade", - "网关连接的锁": "Gateway Connection Lock", - "信号强": "Strong Signal", - "选择网关类型": "Select Gateway Type", + "网关升级": "Gateway Update", + "网关连接的锁": "Lock(s) connected to this Gateway", + "信号强": "Strong", + "选择网关类型": "Choose Gateway Type", "添加网关": "Add Gateway", - "重新通电": "Turn The Power Back On", + "重新通电": "Re Connect the Power", "指示灯": "Indicator Light", - "将网关重新通电,指示灯交替闪烁时点击下一步": "Repower the gateway and click Next when the indicator light flashes alternately", - "选择网关": "Select Gateway", - "不支持5G WiFi网络,请选择2.4G WiFi网络进行配置": "5G WiFi network is not supported, please choose 2.4G WiFi network for configuration", + "将网关重新通电,指示灯交替闪烁时点击下一步": "Click next when the light flash alternately", + "选择网关": "Choose Gateway", + "不支持5G WiFi网络,请选择2.4G WiFi网络进行配置": "5G is not supported,.Please select a WiFi of 2.4G.", "WiFi密码": "WiFi Passward", - "请输入WiFi密码": "Please Enter The WiFi Password", + "请输入WiFi密码": "Enter WiFi Password", "网关名称": "Gateway Name", - "请输入网关名称": "Please Enter Gateway Name", + "请输入网关名称": "Enter Gateway Name", "IP地址": "IP Address", "子网掩码": "Subnet Mask", "默认网关": "Default Gateway", @@ -241,85 +240,89 @@ "首选DNS": "Preferred DNS", "备选DNS": "Alternative DNS", "不使用静态IP": "No Static IP Is Used", - "所有锁": "All Lock", - "搜索所有锁类型": "Search All Lock Type", + "使用静态IP": "Use Static IP", + "请输入IP地址": "Enter IP Address", + "请输入子网掩码": "Enter Subnet Mask", + "请输入默认网关": "Enter Default Gateway", + "所有锁": "All Locks", + "搜索所有类型的锁": "Scan all types of locks", "门锁": "Door Lock", - "挂锁": "Pad lock", + "挂锁": "Padlock", "保险箱锁": "Safe Lock", "智能门禁": "Intelligent access control", "车位锁": "Parking Lock", - "摸亮触摸屏": "Light Touch Screen", - "摸亮触摸屏,锁进入可添加状态,点击下一步": "Touch the screen to light up, the lock enters the addable state, click Next", - "附近的锁": "Nearby Lock", + "摸亮触摸屏": "Touch any key to Activate the Keypad", + "摸亮触摸屏,锁进入可添加状态,点击下一步": "Please touch any key to Activate the Lock and put it in PAIRING Mode.Press Next", + "附近的锁": "Nearby Locks", "如需修改名字请重新命名,点击确定添加锁": "If you want to change the name, please rename, click OK to add lock", "添加锁时,手机必须在锁旁边": "When adding a lock, the phone must be next to the lock", "登录": "Login", "注册": "Register", - "我已阅读并同意": "I Have Read And Agree", - "验证码": "Verification Code", - "密码必须是8-20位,至少包括数字/字母/符号中的2种": "The password must be 8-20 characters, including at least 2 of the numbers/letters/symbols", - "手机": "Iphone", + "我已阅读并同意": "I've read and agreed", + "验证码": "Code", + "密码必须是8-20位,至少包括数字/字母/符号中的2种": "Your password must have 8-20 characters, and include a minimum of two types of numbers, letters and symbols", + "手机": "Phone", "邮箱": "Email", - "请输入邮箱": "Please enter your email", + "请输入邮箱": "Enter your Email", "国家/地区": "Country/Region", - "你所在的国家/地区": "The country/region you are in", - "选择国家/地区": "Select Country/Region", + "你所在的国家/地区": "Your country/region", + "选择国家/地区": "Choose your Country or Region", "获取验证码": "Get Code", - "商务合作": "Business Cooperation", - "电脑网页版": "Computer Web Version", + "商务合作": "Business", + "电脑网页版": "Web System", "酒店系统": "Hotel System", - "说明书网页版": "Manual Web Version", + "说明书网页版": "User Manual", "高级功能": "Advanced Function", "记录保存": "Records Retention", - "您可通过短信将密码、电子钥匙信息发给接收人。": "You can send the password and electronic key information to the recipient via SMS.", - "您可通过邮件将密码、电子钥匙信息发给接收人。": "You can send the password and electronic key information to the recipient by email.", + "您可通过短信将密码、电子钥匙信息发给接收人。": "The SMS can be used to send passcode and ekey information to recipient.", + "您可通过邮件将密码、电子钥匙信息发给接收人。": "The email can be used to send passcode and ekey information to recipient.", "购买实名认证提示": "After the function is enabled, you need to use your fingerprint, face or account password to open the APP. There is no need to verify again for 3 minutes", "请选择你希望的实名认证频次": "Please select the real-name authentication frequency you want", "仅首次": "For the first time", "每日一次": "once a day", "每周一次": "once a week", "每月一次": "once every month", - "当前状态": "Current State", + "当前状态": "Current Status", "试用中": "On Trial", - "高级功能权益内容": "Advanced Features And Benefits Content", + "高级功能权益内容": "Advanced functions", "短信模板": "SMS Template", "邮件模板": "Email Template", - "发卡工具": "Card Issuing tool", - "购买高级功能须知": "Tips for buying advanced features", + "发卡工具": "Card encoder", + "购买高级功能须知": "Notice", "购买高级功能提示": "More advanced features are under development, and if you need them, you are welcome to open the service based on the number of locks. Advanced features are only available for your own locks. If you are an authorized administrator, please contact the top administrator of the lock to open the service", "免费体验": "Free Trial", "立即开通": "Open Now", "购买短信": "Buy SMS", - "购买邮件": "Buy Mail", + "购买邮件": "Buy EMail", "购买实名认证次数": "Purchase Real Name Authentication Times", - "开通高级功能": "Enabling Advanced Features", - "选择套餐": "Choose A Package", + "开通高级功能": "Enable Advanced function", + "选择套餐": "Choose Package", "支付方式": "Mode Of Payment", "支付宝": "Alipay", - "去支付": "Go To Pay", - "你可以自己定义模版的内容,用于发送密码或电子钥匙信息给他人": "You can define the content of your own template for sending passwords or electronic key information to others", - "高级功能仅能用于你自己的锁": "Advanced features are only available for your own locks", - "新建模板": "Creating a new template", + "去支付": "Pay", + "你可以自己定义模版的内容,用于发送密码或电子钥匙信息给他人": "You are allowed to define the message by yourself.It is used to send information of passcode and ekey to others.", + "高级功能仅能用于你自己的锁": "The advanced function can only be applied your own locks.", + "新建模板": "Creat template", "类型": "Type", "模版内容": "Template Content", "预览": "Preview", - "房间名": "Room Name", - "预计产生短信条数": "The number of short creeds is expected to be generated", - "功能开启后,已失效较长时间的密码、电子钥匙、卡、指纹等开锁权限将被隐藏,不在列表里显示。": "After the function is enabled, the password, electronic key, card, fingerprint and other unlocking permissions that have been invalid for a long time will be hidden and not displayed in the list.", - "对于选中的这些锁,当用户用APP开锁时,他的手机需要是连网的,否则无法开锁": "For the selected locks, when the user uses the APP to unlock the lock, his phone needs to be connected to the Internet, otherwise the lock cannot be unlocked", + "房间名": "Room", + "预计产生短信条数": "Estimated message segments", + "功能开启后,已失效较长时间的密码、电子钥匙、卡、指纹等开锁权限将被隐藏,不在列表里显示。": "This Feature allows you to hide passcodes,ekeys,cards,and fingerprints which are invalid for a period of time.", + "对于选中的这些锁,当用户用APP开锁时,他的手机需要是连网的,否则无法开锁": "User's phone is required to be online to unlock these selected locks with APP.", "配置WiFi": "Configuring WiFi", "请输入WiFi名字": "Please Enter Wifi Name", "WiFi配网": "WiFi Distribution Network", "胁迫卡": "Stress Card", - "员工是否有密码": "If The Employee Has A Password", - "员工是否有卡": "If The Employee Has A Card", - "员工是否有指纹": "If The Employee Has A Fingerprint", + "员工是否有密码": "Already has Passcode", + "员工是否有卡": "Already has Card", + "员工是否有指纹": "Already Set the Fingerprint", "获取钥匙": "Get Key", "获取卡": "Get Card", "获取指纹": "Get Fingerprint", - "安全验证": "Security verification", - "删除账号后,你的所有信息及相关记录都会从平台彻底删除,且不可恢复,是否删除?": "After deleting the account, all your information and related records will be completely deleted from the platform, and can not be recovered, delete or not", + "安全验证": "Identity verification", + "删除账号后,你的所有信息及相关记录都会从平台彻底删除,且不可恢复,是否删除?": "All your Account information will be Removed from the Platform PERMANENTLY and cannot be Recovered.Do you want to Delete?", "监控": "Monitor", "视频日志": "Video Log", "网关设备": "Gateway", @@ -328,7 +331,7 @@ "开门方向设置": "Opening Direction Set", "电机功率设置": "MotorPower Setting", "开锁时是否需联网": "If Internet Is Required When Unlocking", - "选择要加入分组的锁": "Select the lock to join the group", + "选择要加入分组的锁": "Select lockS to add to this group", "锁数量": "Lock Count", "小米IOT平台": "Xiaomi IOT Platform", "面容开锁设置": "Face Unlocks Set", @@ -350,41 +353,40 @@ "判断方法内容": "The man stood outside the house, facing the entrance door. \nIf the hinge or shaft of the door is on the left, the door is left open; \nA door is right-open if its hinge or shaft is on the right. \nIf the setting is wrong, it will not open and close the door properly. \nRecommended to be operated by installation or maintenance personnel.", "录像时段": "Video slot", - "密码": "Password", - "卡": "Card", + "密码": "Passcodes", + "卡": "Cards", "指纹": "Fingerprint", "人脸": "Face", "配件商城": "Lock Mall", "公司名称": "Company Name", - "修改公司名字": "Change company name", - "请输入公司名字": "Please nter the company name", + "请输入公司名字": "Enter Company Name", "提示": "Hint", "是否删除?": "Whether to delete?", - "员工信息": "Staff's Information", + "员工信息": "Staff Info", "员工": "Staff", - "打卡方式无效": "The clocking method is invalid", + "打卡方式无效": "Unavailable", "中国": "China", - "选择钥匙": "Select the key", + "选择钥匙": "Choose ekey", "编辑": "Edit", - "无": "Unhave", - "有": "have", - "请输入姓名": "Please enter name", + "无": "No", + "有": "Yes", + "请输入姓名": "Please enter a Name", "获取人脸": "Getting faces", - "选择密码": "Choosing a password", - "选择卡": "Select card", - "选择指纹": "Select fingerprint", + "选择密码": "Choose Passcode", + "选择卡": "Choose card", + "选择指纹": "Choose fingerprint", "选择人脸": "Select face", "员工是否有人脸": "Whether the employee has a face", - "同时删除员工钥匙": "Also delete the employee key", + "同时删除员工钥匙": "Delete his/her ekey", "删除": "Delet", - "确定要删除员工吗?": "Are you sure you want to delete the employee?", + "确定要删除员工吗?": "Delete this Employee", "月统计": "Monthly statistics", - "迟到": "Be late", - "早退": "Leave early", - "未打卡": "No card punched", - "钥匙将在": "The key will be in", - "天后失效": "Days later invalid", - "电量更新时间:": "Power update time:", + "迟到": "late", + "早退": "Leave Early", + "未打卡": "No Record", + "钥匙将在": "This ekey will expire in", + "天后失效": "day(s)", + "电量更新时间:": "Battery update time:", "新增配件": "Add", "钥匙不可用": "Key is not available", "正在开锁中...": "Unlocking...", @@ -392,88 +394,87 @@ "常开模式启动!长按闭锁": "Open mode started! Long press to lock", "演示模式": "Demo mode", "请先同意用户协议及隐私政策": "Please agree to the user agreement and privacy policy first", - "用户协议": "User agreement", + "用户协议": "User Terms", "隐私政策": "Privacy policy", - "注册成功": "Registration success", + "注册成功": "Registration successful", "你所在的": "You are in", - "手机号": "Mobile phone number", - "忘记密码": "Forget password", + "手机号": "Phone Number", + "忘记密码": "Forgot password", "重置成功": "Reset success", - "确定要退出吗?": "Are you sure you want to exit?", + "确定要退出吗?": "Exit?", "功能暂未开放": "Function is not yet open", "设置成功": "Set up successfully", "删除成功": "Delete successfully", - "单次": "Once", + "单次": "One-time", "永久": "Permanent", - "限时": "Time limit", + "限时": "Timed", "自定义": "Custom", - "清空码": "Clear code", - "循环": "Cycle", + "清空码": "Erase", + "循环": "Recurring", "工作日": "Workday", "每日": "Daily", "周末": "Weekend", - "确定要删除吗?": "Are you sure you want to delete?", - "该锁的密码都将被删除": "The password of the lock will be deleted", - "已过期": "Expired", - "该锁的电子钥匙都将被删除": "The electronic key of the lock will be deleted", - "同时删除其发送的所有钥匙,钥匙删除后不能恢复": "Also delete all the keys sent by it, the key can not be restored after deletion", - "删除钥匙会在用户APP连网后生效": "Deleting the key will take effect after the user APP is connected to the network", + "确定要删除吗?": "Delete?", + "该锁的密码都将被删除": "All Passcodes for this Lock will be DELETED", + "已过期": "Invalid", + "该锁的电子钥匙都将被删除": "All eKeys for this Lock will be DELETED", + "同时删除其发送的所有钥匙,钥匙删除后不能恢复": "DELETE All ekeys associated with this ekey.This Step cannot be UNDONE!", + "删除钥匙会在用户APP连网后生效": "The ekey will be DELETED", "有效时间": "Effective time", - "接收者": "Receiver", - "仅管理自己创建的用户": "Only manage users created by yourself", + "接收者": "Recipient", + "仅管理自己创建的用户": "Manage his own users only", "远程开锁": "Remote unlock", "请输入钥匙名称": "Please enter the key name", "修改成功": "Modify success", "冻结": "Freeze", - "取消冻结": "Unfreeze", - "授权": "Authorization", - "取消授权": "Cancel authorization", - "同时解冻其发送的钥匙": "Unfreeze the keys sent by it", - "取消冻结会在用户APP连网后生效": "Unfreezing will take effect after the user APP is connected to the network", - "同时冻结其发送的钥匙": "Freeze the keys sent by it", - "冻结会在用户APP连网后生效": "Freezing will take effect after the user APP is connected to the network", - "取消授权会在用户APP连网后生效": "Canceling authorization will take effect after the user APP is connected to the network", - "授权用户拥有管理员的大部分权限,比如发送钥匙、发送密码": "Authorized users have most of the permissions of the administrator, such as sending keys, sending passwords", - "失效时间需大于生效时间": "The expiration time must be greater than the effective time", - "生效时间需大于当前时间": "The effective time must be greater than the current time", - "失效日期要大于生效日期": "The expiration date must be greater than the effective date", - "失效时间要大于生效时间": "The expiration time must be greater than the effective time", - "修改有效期": "Modify the validity period", - "生效日期": "Effective date", - "失效日期": "Expiration date", + "解除冻结": "Thaw", + "授权": "Authorize", + "取消授权": "De-Authorize", + "同时解冻其发送的钥匙": "Thaw all ekeys issued by this user", + "会在用户APP连网后生效": "This ekey will be THAWED when the User's APP connects to a Network", + "同时冻结其发送的钥匙": "Freeze all ekeys issued by this user", + "冻结会在用户APP连网后生效": "This ekey will be FROZEN when the User's APP connects to a Network", + "取消授权会在用户APP连网后生效": "The User will LOOSE his/her Permissions when User's APP connects to a Network", + "授权用户拥有管理员的大部分权限,比如发送钥匙、发送密码": "The Authorized user has almost the same permissions as the LOCK Manager(eg.Ability to Send ekeys and Passcodes)", + "失效时间需晚于生效时间": "The expiration time must be later than the effective time", + "生效时间需晚于当前时间": "The effective time must be later than the current time", + "失效日期需晚于生效日期": "The expiration date must be later than the effective date", + "修改有效期": "Change Period", + "生效日期": "Start Date", + "失效日期": "End Date", "开锁": "Unlock", "开锁成功": "Unlock success", - "请选择锁": "Please select the lock", + "请选择锁": "Please select locks", "请选择接收者": "Please select the receiver", "请选择有效期": "Please select the validity period", "请选择发送方式": "Please select the sending method", "请选择结束时间": "Please select the end time", "完成": "Complete", - "有效日": "Effective day", + "有效日": "Cycle on", "发送成功": "Send success", "请选择开始时间": "Please select the start time", - "选择用户": "Select user", + "选择用户": "Select recipients", "已选中": "Selected", - "确定": "Determine", - "请选择要发送的锁": "Please select the lock to send", + "确定": "OK", + "请选择要发送的锁": "Please select locks", "人脸实名认证指的是用户在使用手机APP开锁时,需要先进行本人人脸验证,验证通过才能开锁。": "Face real-name authentication refers to the user's need to verify his face before unlocking the phone APP, and the verification can be unlocked.", "分享": "Share", "请输入接收者账号": "Please enter the receiver account", "接收者号码未注册,请重新发送": "The receiver number is not registered, please resend", - "是否发送电子钥匙给未注册账号": "Whether to send the electronic key to the unregistered account", + "是否发送电子钥匙给未注册账号": "Do you want to send an ekey to a new account", "取消": "Cancel", "标记成功": "Mark success", "微信好友": "WeChat friends", "短信": "SMS", - "邮件": "Mail", + "邮件": "Email", "更多": "More", "您好,您的电子钥匙生成成功": "Hello, your electronic key is generated successfully", "生效时间不能小于当前时间": "The effective time cannot be less than the current time", "结束时间不能小于当前时间": "The end time cannot be less than the current time", "是否为管理员": "Is it an administrator", - "已连接到锁,请将卡靠近锁的读卡区": "Connected to the lock, please put the card close to the card reading area of the lock", - "尝试连接设备...": "Trying to connect to the device...", + "已连接到锁,请将卡靠近门锁的读卡区": "Connected.Place the Card against the Card Reader ", + "尝试连接设备...": "Connecting With Lock.Please wait...", "地理位置": "Geographical location", "检查以确保以下地址是正确的": "Check to make sure the following address is correct", "地图加载中,请稍候。。": "The map is loading, please wait...", @@ -481,66 +482,66 @@ "还未获取到位置信息哦,请耐心等待一下!": "The location information has not been obtained yet, please wait patiently!", "请填写信息": "Please fill in the information", "有效期": "Validity period", - "生效时间": "Effective time", - "失效时间": "Expiration time", - "上传成功": "Upload success", - "未生效": "Not effective", + "生效时间": "Start Time", + "失效时间": "End Time", + "上传成功": "Uploaded successfully", + "未生效": "Inactive", "已生效": "Effective", - "指纹详情": "Fingerprint details", - "添加过程中,请根据提示,在指纹采集器上进行多次的抬起按压": "During the addition process, please follow the prompts and lift and press multiple times on the fingerprint collector", - "开始添加": "Start adding", - "请将您的手指按下": "Please press your finger", - "根据提示,抬起手指后再进行下一次指纹采集": "According to the prompt, lift your finger and then collect the fingerprint again", + "指纹详情": "Fingerprint Info", + "添加过程中,请根据提示,在指纹采集器上进行多次的抬起按压": "You will be required to Place your Finger to the Sensor several times.Please follow the prompts...", + "开始添加": "Start", + "请将您的手指按下": "Place your Finger on the Sensor", + "根据提示,抬起手指后再进行下一次指纹采集": "Follow the prompts...You will be required to Remove and Place your Finger to the Sensor for Next Record", "添加成功": "Add success", "更新成功": "Update success", "搜索": "Search", "重置后,该锁的卡都将被删除哦,确认要重置吗?": "After resetting, the card of the lock will be deleted, do you want to reset?", "已失效": "Invalid", - "卡详情": "Card details", - "请输入": "Please enter", - "关闭后,智能锁将设置为全天常开模式,直到手动关闭": "After closing, the smart lock will be set to all-day open mode until manually closed", + "卡详情": "Card Info", + "请输入": "Please enter here", + "关闭后,智能锁将设置为全天常开模式,直到手动关闭": "By turning OFF,the Lock will remain Unlocked all day until it is manually Locked", "请输入小于或等于60的数字": "Please enter a number less than 60", - "操作成功": "Operation success", + "操作成功": "Operation successful", "管理员密码相同,无需修改": "The administrator password is the same and does not need to be modified", - "请输入6-9位数字": "Please enter 6-9 digits", + "请输入6-9位数字": "6-9 Digits in length", "请输入6-9位管理员密码": "Please enter a 6-9 digit administrator password", "请输入新的管理员密码": "Please enter a new administrator password", - "未分组": "Not grouped", - "请输入分组名称": "Please enter the group name", + "未分组": "Ungrouped", + "请输入分组名称": "Create a Group", "创建成功": "Create success", "设置锁分组成功": "Set the lock group successfully", "电池1电量": "Battery 1", "电池2电量": "Battery 2", - "电量更新时间": "Electric quantity update time", + "电量更新时间": "Battery update time", "锁电量更新成功": "Lock power update success", "您的钥匙未生效": "Your key is not effective", "您的钥匙已冻结": "Your key has been frozen", "您的钥匙已过期": "Your key has expired", - "常开模式开启": "Open mode on", + "常开模式开启": "The lock is in Passage Mode", "超级管理员": "Super admin", "授权管理员": "Authorized admin", "普通用户": "Ordinary user", "余": "Balance", "天": "Day", "删除锁后,所有信息都会一起删除,确定删除锁吗?": "After deleting the lock, all information will be deleted together, are you sure you want to delete the lock?", - "请输入登录密码": "Please enter the login password", + "请输入登录密码": "Please enter the Application password", "删除设备失败,请确保在设备附近,设备未被连接,设备已打开": "Failed to delete the device, please make sure that the device is near the device, the device is not connected, and the device is turned on", "用户无权限": "User has no permission", - "创建公司后,考勤功能才能使用": "After creating the company, the attendance function can be used", - "是否删除钥匙?": "Whether to delete the key?", + "创建公司后,考勤功能才能使用": "Please Create a Company first", + "是否删除钥匙?": "Delete this ekey?", "邮箱绑定成功": "Email binding success", "手机绑定成功": "Mobile phone binding success", - "网络访问失败,请检查网络是否正常": "网络访问失败,请检查网络是否正常", + "网络访问失败,请检查网络是否正常": "Request Failed.Network unavailable,Please Check and Connect your Device to 3G/4G/WIFI", "清空": "Clear", - "是否清空?": "Whether to empty?", - "消息详情": "Message details", + "是否清空?": "Clear?", + "消息详情": "Message Info", "创建时间": "Creation time", "管理员详情": "Administrator details", - "当被胁迫要求强行开锁时,使用胁迫卡会触发报警,报警信息会推送给管理员,该功能需要锁联网。": "When being coerced to forcibly unlock, using a coercion card will trigger an alarm, and the alarm information will be pushed to the administrator. This function requires the lock to be networked.", - "请不要将胁迫卡用于日常开锁": "Please do not use coercion cards for daily unlocking", - "当被胁迫要求强行开锁时,使用胁迫指纹会触发报警,报警信息会推送给管理员,该功能需要锁联网。": "When being coerced to forcibly unlock, using coercion fingerprints will trigger an alarm, and the alarm information will be pushed to the administrator. This function requires the lock to be networked.", - "请不要将胁迫指纹用于日常开锁": "Please do not use coercion fingerprints for daily unlocking", - "创建公司": "Create company", + "当被胁迫要求强行开锁时,使用胁迫卡会触发报警,报警信息会推送给管理员,该功能需要锁联网。": "If someone forces you to open door,you can use this card.The alarm message will be sent to the administors.To use this feature,please make sure your lock is online.", + "请不要将胁迫卡用于日常开锁": "Please don't use the forced card for daily use.", + "当被胁迫要求强行开锁时,使用胁迫指纹会触发报警,报警信息会推送给管理员,该功能需要锁联网。": "If someone forces you to open door, you can use this fingerprint.The alarm message will be sent to the administors.To use this feature,please make sure your lock is online.", + "请不要将胁迫指纹用于日常开锁": "Please don't use the forced fingerprint for daily use.", + "创建公司": "Create a company", "公司名称不能超过30个字符": "Company name cannot exceed 30 characters", "公司名称不能小于6个字符": "Company name cannot be less than 6 characters", "WIFI列表": "WIFI list", @@ -550,21 +551,21 @@ "中距离": "Medium distance", "近距离": "Short distance", "锁时间更新成功": "Lock time update success", - "锁用户": "Lock user", + "锁用户": "Lock users", "请选择常开日期": "Please select the open date", "结束时间不能小于开始时间哦": "The end time cannot be less than the start time", - "介绍": "Introduction", + "介绍": "Our Story", "个人信息收集清单": "Personal information collection list", "应用权限说明": "Application permission description", "第三方信息共享清单": "Third party information sharing list", "请选择您的位置": "Please select your location", "请先选择位置": "Please select the location first", - "管理员密码": "Administrator password", + "管理员密码": "Admin passcode", "如需修改,请输入新的管理员密码(6位),点击确定即可修改": "If you need to modify, please enter a new administrator password (6 digits), click OK to modify", "修改": "Modify", - "网络摄像头": "Network camera", + "网络摄像头": "Camera", "重命名": "Rename", - "分组下的锁将被移到未分组里": "The locks under the group will be moved to ungrouped", + "分组下的锁将被移到未分组里": "Locks under the group will be moved to ungrouped", "编辑成功": "Edit success", "厂商": "Manufacturer", "型号": "Model", @@ -599,27 +600,27 @@ "开启微信接收报警消息需要先关注斯凯智能锁微信公众号,请保存二维码并使用微信扫一扫设置": "To open wechat to receive alarm messages, you need to pay attention to Skye Smart Lock wechat public account first, please save the QR code and use wechat to scan the Settings", "蓝牙": "Bluetooth", "需要访问蓝牙权限才能使用添加钥匙功能的位置信息": "Access to Bluetooth permissions is required to use the location information of the add key function", - "请输入Email": "Please enter Email", - "请输入手机号": "Please enter mobile phone number", - "家人到家": "Family gets home", - "添加家人": "Add family", - "若锁没有联网,除电子钥匙外,密码、卡、指纹等开门提醒无法及时发送,请根据你的实际情况选择。": "If the lock is not connected to the Internet, in addition to the electronic key, the password, card, fingerprint and other door reminders can not be sent in time, please choose according to your actual situation", + "请输入Email": "Enter your Email", + "请输入手机号": "Enter your phone number", + "家人到家": "Family member arrived home", + "添加家人": "Add family member", + "若锁没有联网,除电子钥匙外,密码、卡、指纹等开门提醒无法及时发送,请根据你的实际情况选择。": "If the lock is not connected to the Internet,reminders for passcode, card, fingerprint, and other door opening methods cannot be sent in a timely manner.", "消息提醒": "Reminder", "开门通知": "Opening notice", - "N天未开门": "N days without opening the door", + "N天未开门": "N days without door opening", "门未关好": "The door is not closed", "防拆报警": "Tamper alarm", - "低电量提醒": "Low power reminder", + "低电量提醒": "Low battery", "胁迫开门": "Forced door opening", "有人按门铃": "Someone rings the doorbell", "有人出现在门口": "Someone appears at the door", - "提醒方式": "Reminder mode", - "开门方式": "Opening mode", + "提醒方式": "Reminder method", + "开门方式": "Door opening method", "请选择": "Please select", - "家人": "Family", + "家人": "Family member", "保存": "Save", "APP推送": "APP push", - "管理员": "Administrator", + "管理员": "Admin", "未启用": "Not enabled", "已启用": "Enabled", "省电模式": "Power saving mode", @@ -632,15 +633,15 @@ "亮屏持续时间": "Screen on time", "逗留警告": "Stay warning", "异常警告": "Abnormal warning", - "短信提醒": "SMS reminder", - "邮件提醒": "Email reminder", - "N天未开门提醒": "N days did not open the door reminder", - "当被胁迫要求强行开锁时,使用胁迫指纹会触发报警,报警消息会推送给管理员,该功能需要锁联网": "When forced to open the lock, the use of coercive fingerprint will trigger the alarm, the alarm message will be pushed to the administrator, the function requires the lock network", - "胁迫指纹": "Stress fingerprint", + "短信提醒": "SMS", + "邮件提醒": "Email", + "N天未开门提醒": "N days without door opening", + "当被胁迫要求强行开锁时,使用胁迫指纹会触发报警,报警消息会推送给管理员,该功能需要锁联网": "If someone forces you to open lock, you can use this fingerprint. The alarm message will be sent to the administors.TO use this feature,please make sure your lock is online.", + "胁迫指纹": "Forced fingerprint", "指纹列表": "Fingerprint list", - "经过以上设定的时间,锁没有被开启,系统会给指定对象发送提醒消息,该功能需要锁联网": "After the above set time, the lock is not opened, the system will send a reminder message to the specified object, this function requires the lock network", - "打开提醒后,当锁电量低于20%、10%和5%,系统会给指定对象发送提醒消息。电量读取方式:网关读取或APP读取。": "After the reminder is enabled, when the lock power is below 20%, 10%, and 5%, the system will send a reminder message to the specified object. Power reading mode: gateway reading or APP reading.", - "门未开时间": "Door not open time", + "经过以上设定的时间,锁没有被开启,系统会给指定对象发送提醒消息,该功能需要锁联网": "After the set time, if the lock is not opened, the system will send a reminder message to the designated recipient. This function requires the lock to be connected to the internet.", + "打开提醒后,当锁电量低于20%、10%和5%,系统会给指定对象发送提醒消息。电量读取方式:网关读取或APP读取。": "After enabling the reminder , when the lock battery is below 20%, 10%, and 5%, the system will send a reminder message to the designated recipient.", + "未开门时间": "Days without door opening", "添加和使用面容开锁时:": "Add and use Face when unlocking:", "关锁": "close lock", "功能": "function", @@ -654,21 +655,20 @@ "全部视频": "All videos", "已为本设备免费提供3大滚动视频储存服务": "Three scrolling video storage services have been provided for this device free of charge", "视频播放": "Video playback", - "全选": "Select all", + "全选": "All", "请选择要删除的视频": "Please select the video you want to delete", "请选择要下载的视频": "Please select the video you want to download", "欢迎使用": "Welcome to use", "用户协议和隐私政策概要": "Summary of User Agreement and Privacy Policy", "协议概要": "Protocol Summary", "感谢您使用本应用。我们非常重视您的个人信息和隐私保护,在使用本产品之前,请认真阅读": "Thank you for using this application. We attach great importance to your personal information and privacy protection. Before using this product, please read it carefully", - "《用户协议》": "《User Agreement》", + "《用户协议》": "User Terms", "和": "and", "《隐私政策》": "《Privacy Policy》", "的全部内容。点击“同意”即表示您同意并接受全部条款。若选择不同意,将无法使用我们的产品和服务,并会退出应用。": "The entire content of. By clicking \"Agree\", you agree and accept all terms. If you choose not to agree, you will not be able to use our products and services and will exit the application.", "不同意": "Disagree", "同意": "agree", - "已开通": "Current status: Enabled", - "该功能是高级功能,请开通后再使用": "This function is an advanced function. Please enable it before using it", + "该功能是高级功能,请开通后再使用": "This is the advanced function. Please enable it first.", "常用程序": "Common Programs", "该锁已被重置": "The lock has been reset", "需要访问读写权限才能使用手动升级固件": "Access to read and write permissions is required to manually upgrade firmware", @@ -679,11 +679,11 @@ "文件校验失败 0x02": "File verification failed 0x02", "文件校验失败 0x03": "File verification failed 0x03", "固件升级完成": "Firmware upgrade completed", - "记录": "Record", - "开通高级功能后才可以对锁进行管理": "You can manage locks only after the advanced function is enabled", - "去开通": "Go and Activate", + "记录": "Records", + "开通高级功能后才可以对锁进行管理": "Please enable advanced function first to manage locks.", + "去开通": "Enable", "实名认证": "Real-name authentication", - "当前剩余数量": "Current surplus quantity", + "当前剩余数量": "Remaining", "购买": "Buy", "实名认证为付费功能,请购买后再使用": "Real-name authentication is a paid function, please use it after purchase", "密码不一致哦": "The passwords are inconsistent", @@ -697,7 +697,7 @@ "锁上面添加卡已满": "Lock above add card is full", "卡已存在": "Card already exists", "锁上面添加密码已满": "Lock above add password is full", - "密码已存在": "Password already exists", + "密码已存在": "An Identical Passcode already exists.Please choose a different one", "请输入密码": "Please enter password", "暂无密码,无需重置": "No password, no need to reset", "真实姓名": "Real name", @@ -712,14 +712,14 @@ "固件升级中": "The firmware is being upgraded", "取消升级": "Cancel the upgrade", "固件传输中": "Firmware in transit", - "关闭": "Shut down", + "关闭": "Turn Off", "传输中'": "In transit", - "操作记录": "Record", - "修改姓名": "Modify name", + "操作记录": "Records", + "修改姓名": "Edit Name", "传输中": "In transit", - "发送人": "Sender", - "发送时间": "Send time", - "钥匙详情": "Key details", + "发送人": "Issued by", + "发送时间": "Time Issued", + "钥匙详情": "ekey Info", "姓名": "Name", "发送": "Send", "请确认姓名全名和身份证号码是否正确": "Please confirm that the full name and ID number are correct", @@ -731,84 +731,84 @@ "设备连接中...": "Device Connecting...", "未避免异常情况,请在门打开时升级": "Unavoidable exceptions, please upgrade when the door is open", "钥匙无效": "The key is invalid", - "操作失败,请确认锁是否在附近,或重启手机蓝牙后再试。": "The operation failed. Please confirm whether the lock is nearby, or restart your phone's Bluetooth and try again.", + "操作失败,请确认锁是否在附近,或重启手机蓝牙后再试。": "Unable to Connect to the Lock.Please Restart your phone's Blutooth and try again.", "如果是全自动锁,请使屏幕变亮": "If it is a fully automatic lock, please make the screen brighter", - "正在尝试闭锁……": "Attempting to lock...", - "清空记录": "Clear record", - "是否要删除操作记录?": "Do you want to delete the operation record?", - "被删除的记录不能恢复": "The deleted record cannot be restored", + "正在尝试闭锁……": "Trying to lock.Please wait...", + "清空记录": "Clear records", + "是否要删除操作记录?": "Continue to delete records?", + "被删除的记录不能恢复": "The records cannot be recovered after deleting.", "全部事件": "All events", "开锁事件": "Unlock event", "异常事件": "Abnormal event", "门铃事件": "Doorbell event", "视频事件": "Video event", - "请开启蓝牙": "Please turn on Bluetooth", + "请开启蓝牙": "Please turn Bluetooth On", "请选择有效日": "Please select the effective day", "公司名字长度不能小于 6 ": "The length of the company name cannot be less than 6", - "已是最新版本": "It is the latest version", + "已是最新版本": "No updates", - "新建短信模版":"New SMS template", - "新建邮件模版":"New email template", - "自定义短信模版":"Custom SMS template", - "自定义邮件模版":"Custom email template", + "新建短信模版":"Creat SMS template", + "新建邮件模版":"Creat email template", + "自定义短信模版":"SMS template", + "自定义邮件模版":"Email template", "名称":"Name", "星星锁": "Star lock", - "无考勤记录": "No attendance record", - "大家干劲十足": "Everyone is full of energy", - "工作时长未出炉": "Working hours are not available", - "国家地区的选择将影响数据安全,你当前选择的是阿尔巴尼亚,请确认后再继续": "The selection of the country or region will affect data security. You have currently selected Albania. Please confirm before continuing", - "确认国家或地区": "Confirm country or region", - "我知道了": "I know", + "无考勤记录": "No Records", + "大家干劲十足": "Everyone comes in time", + "工作时长未出炉": "No Working Hours", + "国家地区的选择将影响数据安全,你当前选择的是阿尔巴尼亚,请确认后再继续": "The choice of country/region will affect data security.You have currently selected Albania,please confirm before proceeding.", + "确认国家或地区": "Confirm country/region", + "我知道了": "Got it", "为了让您及时收到重要通知和更新,我们需要获取通知权限。请点击“确定”按钮,然后在设置页面中启用通知权限。": "To receive important updates, please click 'OK' and enable notifications in the settings.", "开启后,可通过长按锁上的设置键重新上电,用APP重新添加": "After turning on, you can re-power on by long pressing the setting key on the lock, and re-add it with the APP", - "已有": "Already has", + "已有": "Current", "新增": "New", - "账号格式错误": "The account format is incorrect", + "账号格式错误": "Bad format", "接收者信息为空": "The recipient information is empty", - "请输入时间(秒)": "Please enter the time (seconds)", + "请输入时间(秒)": "Please enter the time (sec)", "加载数据失败": "Failed to load data", - "重试": "Retry", + "重试": "Try Again", "升级中,是否退出": "During the upgrade, whether to exit", "下一步": "Next", "公寓": "Apartment", - "个人用户": "Personal user", + "个人用户": "Personal", "星寓": "Star apartment", "账号": "Account", - "请输入手机号或email": "Please enter mobile phone number or email", + "请输入手机号或email": "Phone Number or Email", "请输入星寓管理员的账号": "Please enter the account of the star apartment administrator", - "选中的智能锁将会转移到您输入的账号中,您将失去锁的管理权": "The selected smart lock will be transferred to the account you entered, and you will lose the management rights of the lock", + "选中的智能锁将会转移到您输入的账号中,您将失去锁的管理权": "All data of the selected lock(s) will be permanently transferred to the recipient.", "暂不支持跨平台转移,敬请期待": "Cross-platform transfer is not supported for the time being, please look forward to it", - "移除坏锁": "Remove bad lock", - "转移确认": "Transfer confirmation", + "移除坏锁": "Move Faulty/Damaged Locks to Trash", + "转移确认": "Confirm Transfer", "本次共转移": "This time a total of", "把智能锁": "Smart lock", - "确认": "Confirm", + "确认": "OK", "移除成功": "Remove successfully", "转移成功": "Transfer success", "该已锁被删除": "The locked is deleted", - "授权管理员只能查看和管理自己下发的钥匙、密码等权限": "Authorized administrators can only view and manage the keys, passwords, etc. they issued", - "添加授权管理员": "Add authorized administrator", - "导出记录":"Export record", + "授权管理员只能查看和管理自己下发的钥匙、密码等权限": "The authorized admin can only manage passcodes,ekeys and etccreated by himself.", + "添加授权管理员": "Create Admin", + "导出记录":"Export records", "选择时间段":"Select time period", "导出":"Export", "批量导出":"Batch export", - "读取记录":"Read record", + "读取记录":"Refresh Records", "手机需联网":"NeedNet", "设备":"Device", - "消息":"Message", + "消息":"Messages", "智能分析":"Intelligent analytics", "精准识别设备事件,过滤无效信息":"Accurately identify device events and filter out invalid information", "系统设置":"System settings", "系统的全局配置在此项内进行设置":"The global configuration of the system is set in this item", - "导出操作记录":"Export operation record", - "立即查看":"View now", - "导出成功":"Export success", - "发送钥匙": "Send key", - "进度": "Progress", - "失败": "Failure", + "导出操作记录":"Export records", + "立即查看":"View", + "导出成功":"Exported successfully", + "发送钥匙": "Send ekey", + "进度": "Rate", + "失败": "Failed", "人脸详情": "Face details", "感应到门前约1.5米有人时,将自动启动面部识别开锁。": "When someone is sensed about 1.5 meters in front of the door, the face recognition unlocking will be automatically started.", "感应到门前约0.8米有人时,将自动启动面部识别开锁。": "When someone is sensed about 0.8 meters in front of the door, the face recognition unlocking will be automatically started.", @@ -821,26 +821,25 @@ "添加掌静脉": "Add palm vein", "胁迫掌静脉": "Forced palm vein", "请不要将胁迫掌静脉用于日常开锁": "Please do not use coercion palm veins for daily unlocking", - "添加掌静脉提示": "添加掌静脉提示", "已连接到锁,请自然张开手掌,掌心正对摄像头": "Connected to the lock, please naturally open your palm, the palm is facing the camera", "掌静脉详情": "Palm vein details", "掌静脉号": "Palm vein number", "蓝牙未打开,请到设置里面打开蓝牙": "Bluetooth is not turned on, please turn on Bluetooth in the settings", - "删除用户时,会将用户拥有的钥匙一起删除。": "When deleting a user, the keys owned by the user will be deleted together.", + "删除用户时,会将用户拥有的钥匙一起删除。": "If a User is DELETED any ekeys associated with the User will also be DELETED.", "配置网络": "Configure network", "你好": "Hello", - "成功": "Success", - "类型选择": "Type selection", + "成功": "successful", + "类型选择": "Type select", "请选择要使用哪种类型": "Please select which type to use", - "系统邮件(推荐)": "System email (recommended)", - "系统短信(推荐)": "System SMS (recommended)", - "邮件将从软件平台直接发给用户,请根据需要在软件里购买邮件数量。": "Emails will be sent directly to users from the software platform. Please purchase the number of emails in the software according to your needs.", - "短信将从软件平台直接发给用户,请根据需要在软件里购买短信数量。": "SMS will be sent directly to users from the software platform. Please purchase the number of SMS in the software according to your needs.", + "系统邮件(推荐)": "System email (Recommended)", + "系统短信(推荐)": "System SMS (Recommended)", + "邮件将从软件平台直接发给用户,请根据需要在软件里购买邮件数量。": "The email will be sent from this App.Please buy email package first.", + "短信将从软件平台直接发给用户,请根据需要在软件里购买短信数量。": "The SMS will be sent from this App.Please buy email package first.", "个人邮件": "Personal email", "个人短信": "Personal SMS", - "邮件将从你的个人邮箱发给用户": "Emails will be sent to users from your personal mailbox", - "短信将从你的个人手机号发给用户,费用由运营商从你的手机号扣除": "SMS will be sent to users from your personal mobile phone number, and the cost will be deducted from your mobile phone number by the operator", + "邮件将从你的个人邮箱发给用户": "The email will be sent from your personal email account.", + "短信将从你的个人手机号发给用户,费用由运营商从你的手机号扣除": "The SMS message will be sent from your personal phone number.You pay to your telecom operator.", "为了更好地应用体验,请确定权限": "For a better application experience, please confirm the permissions", "您第一次拒绝权限,请确定权限": "You refused permission for the first time, please confirm the permission", "您第二次拒绝权限,请去应用设置开启权限": "You refused permission for the second time, please go to the application settings to enable permission", @@ -851,9 +850,9 @@ "微信公众号,请保存二维码并使用微信扫一扫设置": "WeChat public account, save the QR code and use WeChat to scan the settings", "实名认证为付费功能,请联系锁的管理员购买后再使用": "Real-name authentication is a paid function, please contact the lock administrator to purchase and use", "位置权限": "Location permission", - "请开启位置权限,应用需要位置权限才可以完成智能锁和网关的蓝牙操作": "Please turn on location permission. The application needs location permission to complete the Bluetooth operation of smart locks and gateways", + "请开启位置权限,应用需要位置权限才可以完成智能锁和网关的蓝牙操作": "Please grant the App to use your locatian.It is used to scan BLE locks and gateways.", "相机/相册权限": "Camera/Album permission", - "请开启本地存储权限,允许应用读写设备上的照片及文件": "Please turn on local storage permission, allow the application to read and write photos and files on the device", + "请开启本地存储权限,允许应用读写设备上的照片及文件": "Please grant the App to read and write photo and files from Storage.", "点击选择": "Click to select", "微信": "WeChat", "朋友圈": "Moments", @@ -863,7 +862,7 @@ "FaceBook": "FaceBook", "链接": "Link", "今天": "Today", - "密码错误": "Password error", + "密码错误": "Invalid Password", "网络中断": "Network interruption", "钥匙不存在": "Key does not exist", "钥匙过期": "Key expired", @@ -876,7 +875,7 @@ "已冻结": "Frozen", "已删除": "Deleted", "未知": "Unknown", - "拖动下方滑块完成拼图": "Drag the slider below to complete the puzzle", + "拖动下方滑块完成拼图": "Drag the slider to the correct postion", "验证成功": "Verification success", "验证失败": "Verification failed", "向右拖动滑块填充拼图": "Drag the slider to the right to fill the puzzle", @@ -885,42 +884,42 @@ "获取锁信息": "Get lock information", "锁数据异常,请重试": "Lock data is abnormal, please try again", "连接设备中...": "Connecting device...", - "把锁": "Lock", + "把锁": "locks", "条": "strip", "封": "seal", "次": "times", "支付成功": "Pay success", "查看详情": "View details", - "请输入模板名称": "Please enter the template name", - "模版类型": "Template type", + "请输入模板名称": "Please enter template name", + "模版类型": "Type", "再返回一次退出": "Exit again", "请先添加锁": "Please add the lock first", "可视对讲": "Visual intercom", "详细日志": "Detailed log", - "已复制到剪切板": "Copied to clipboard", + "已复制到剪切板": "Copied", "拍照": "Photo", "从相册选择": "Choose from album", - "选择问题": "Select a question", + "选择问题": "Please Select a Question", "确认长度不足8位": "Confirm length less than 8 digits", "新密码长度不足8位": "New password length less than 8 digits", - "两次密码不一致": "The two passwords do not match", - "请点击获取验证码,验证码将发送到": "Please click to get the verification code, the verification code will be sent to", + "两次密码不一致": "Password Mismatch.Please try again", + "请点击获取验证码,验证码将发送到": "Please get a verification code.The code will be sent to", "切换": "Switch", - "验证": "Verification", + "验证": "Verify", "验证成功,账号已删除": "Verification successful, account deleted", "该密码不是自定义密码,无法修改": "This password is not a custom password and cannot be modified", "请选择设备要关联哪些姓名": "Please select which names the device should be associated with", "请选择姓名要关联哪些设备": "Please select which devices the name should be associated with", - "确定要移除所选中的坏锁吗?": "Are you sure you want to remove the selected bad lock?", - "邮件通知": "Email notification", - "短信通知": "SMS notification", + "确定要移除所选中的坏锁吗?": "Remove the malfunctioning lock?", + "邮件通知": "Notify via email", + "短信通知": "Notify via SMS", "您好,您的授权管理员生成成功": "Hello, your authorized administrator has been generated successfully", - "请输入接收者姓名": "Please enter the recipient's name", + "请输入接收者姓名": "Please enter here", "版本更新": "Version update", "下次再说": "Next time", "配网成功": "Network distribution success", "配网失败": "Network distribution failed", - "该锁的无线键盘都将被删除": "The wireless keyboard of the lock will be deleted", + "该锁的无线键盘都将被删除": "All wireless keypads for this lock will be DELETED", "实时画面": "Real-time picture", "适合门口较为安全的环境。": "Suitable for relatively safe environments at the door.", "仅发生特定事件才录像,并可查看实时画面。": "Only specific events are recorded and the real-time picture can be viewed.", @@ -958,7 +957,7 @@ "有人出现在门前1.5米范围时启动录像": "Start recording when someone appears within 1.5 meters in front of the door", "约0.8米": "About 0.8 meters", "约3.0米": "About 3.0 meters", - "添加指纹失败": "Failed to add fingerprint", + "添加指纹失败": "Operation failed.", "项": "items", "播放中": "Playing", "下载": "Download", @@ -969,7 +968,7 @@ "快退至": "Rewind to", "暂无视频信息": "No video information", "加载出错": "Loading error", - "距离一个成年人手臂长度": "An adult arm's length away", + "请单人正对门锁,距离一个成年人手臂长度": "Please stand in front of the door lock alone, at an arm's length", "(约0.6米)。": "(about 0.6 meters).", "保持脸部无遮挡,露出五官。": "Keep your face unobstructed and show your facial features.", "准备好了,开始添加": "Ready, start adding", @@ -985,9 +984,9 @@ "门窗传感器": "Door and window sensor", "传感器": "Sensor", "清除数据成功": "Data cleared successfully", - "1.锁没有联网,密码、IC卡、指纹等开门记录无法实时上传,可以点击右上角按钮,然后读取记录。": "1. If the lock is not connected to the Internet, the door opening records of passwords, IC cards, fingerprints, etc. cannot be uploaded in real time. You can click the button in the upper right corner and then read the records.", - "2.如果您需要保留历史记录,可以点击右上角按钮,然后导出记录": "2. If you need to keep the history, you can click the button in the upper right corner and then export the records", - "看不到操作记录,可能原因有": "If you can't see the operation record, the possible reasons are", + "1.锁没有联网,密码、IC卡、指纹等开门记录无法实时上传,可以点击右上角按钮,然后读取记录。": "The lock is not connected to the internet,so the recods of passcode,card,fingerprint,and other door opening methods cannot be uploaded in real-time.", + "2.如果您需要保留历史记录,可以点击右上角按钮,然后导出记录": "If you need to keep the historical records,you can export the them.", + "看不到操作记录,可能原因有": "Cannot see the operation records,possible reasons", "操作记录详情": "Operation record details", "操作时间": "Operation time", "此模块功能需要锁联网后设置方可生效": "This module function needs to be set after the lock is connected to the Internet to take effect", @@ -1002,22 +1001,22 @@ "松开发送": "Release to send", "请输入6位数字开锁密码": "Please enter a 6-digit unlock password", "请输入开锁密码": "Please enter the unlock password", - "接收者在有效期内可以不限次数使用": "The recipient can use it an unlimited number of times within the validity period", - "接收者可以使用此App开关锁": "The recipient can use this App to unlock", - "单次钥匙有效期为1小时,只能使用一次": "The validity period of a single key is 1 hour, and it can only be used once", - "接收者可以在有效期内的固定时间段里,不限次数使用": "The recipient can use it an unlimited number of times within a fixed time period during the validity period", + "接收者在有效期内可以不限次数使用": "Recipients are able to use the ekeys for unlimited times within the validity period.", + "接收者可以使用此App开关锁": "Recipient are able to Lock/Unlock by this App.", + "单次钥匙有效期为1小时,只能使用一次": "The One-time ekey is valid for ONE hour and can only be used ONCE.", + "接收者可以在有效期内的固定时间段里,不限次数使用": "Recipients are able to use the ekeys for unlimited times within the fixed cycle time.", "获取模板失败": "Failed to get the template", "微信通知": "WeChat notification", "系统短信": "System SMS", "系统邮件": "System email", "模板": "Template", - "新建模版": "New template", + "新建模版": "Create template", "您好,您的密码是": "Hello, your password is", "密码名字": "Password name", "请输入6-9位密码": "Please enter a 6-9 digit password", "设置密码": "Set password", - "操作成功,密码为": "Operation successful, password is", - "类型:自定义-永久": "Type: Custom-Permanent", + "操作成功,密码为": "Succeeded.The Passcode is", + "类型:自定义-永久": "Type:Custom-Permanent", "实时播放": "Real-time playback", "点击对讲": "Click to intercom", "长按开锁": "Long press to unlock", @@ -1033,11 +1032,29 @@ "退出演示模式": "Exit demo mode", "提示:当前界面为展示界面,添加设备后才能继续使用": "Tip: The current interface is a display interface. After adding the device, you can continue to use it", "门已上锁": "The door is locked", - "您已在其他设备登录": "You are logged in on another device", + "您的账号在异地登录,如非本人,请尽快修改密码": "Your Account has been used to Login from a New Device", "开门成功": "Open the door successfully", "开门失败": "Failed to open the door", "呼叫提醒": "Call reminder", "收到来自": "Received from", "锁的呼叫": "Lock call", - "加载数据中": "Loading data" + "加载数据中": "Loading data", + "搜索所有锁类型": "Search all lock types", + "锁电量更新时间": "Lock battery update time", + "1月": "Jan", + "2月": "Feb", + "3月": "Mar", + "4月": "Apr", + "5月": "May", + "6月": "Jun", + "7月": "Jul", + "8月": "Aug", + "9月": "Sep", + "10月": "Oct", + "11月": "Nov", + "12月": "Dec", + "热门城市": "Hot cities", + "导出锁数据": "Export lock data", + "一键开锁": "One-click unlock", + "已开通": "Opened" } diff --git a/lan/lan_keys.json b/lan/lan_keys.json index a62b070d..a3605b8e 100755 --- a/lan/lan_keys.json +++ b/lan/lan_keys.json @@ -65,7 +65,7 @@ "批量授权锁": "批量授权锁", "授权管理员拥有操作这把锁的重要权限,请确保只发给我你信任的人":"授权管理员拥有操作这把锁的重要权限,请确保只发给我你信任的人", "功能开启后,你将可以通过网关远程开锁。此功能的开启和关闭只能在锁附近通过手机蓝牙进行。":"功能开启后,你将可以通过网关远程开锁。此功能的开启和关闭只能在锁附近通过手机蓝牙进行。", - "排列榜": "排列榜", + "排列方式": "排列方式", "早到榜": "早到榜", "迟到榜": "迟到榜", "当前模式": "当前模式", @@ -140,7 +140,7 @@ "开始":"开始", "全天":"全天", - "在设置的常开时间内,锁被打开后将一直处于打开的状态,直到被手动关闭":"在设置的常开时间内,锁被打开后将一直处于打开的状态,直到被手动关闭", + "你可以设置多个常开时间段,在设置的时间段内,锁被打开后一直处于打开的状态。":"你可以设置多个常开时间段,在设置的时间段内,锁被打开后一直处于打开的状态。", "请选择锁音量":"请选择锁音量", "功能开启后,你将可以听到智能锁的提示音。包括电量过低,密码错误等提示。":"功能开启后,你将可以听到智能锁的提示音。包括电量过低,密码错误等提示。", "低":"低", @@ -244,9 +244,11 @@ "首选DNS": "首选DNS", "备选DNS": "备选DNS", "不使用静态IP": "不使用静态IP", - + "使用静态IP": "使用静态IP", + "请输入子网掩码": "请输入子网掩码", + "请输入默认网关": "请输入默认网关", "所有锁":"所有锁", - "搜索所有锁类型":"搜索所有锁类型", + "搜索所有类型的锁":"搜索所有类型的锁", "门锁":"门锁", "挂锁":"挂锁", "保险箱锁":"保险箱锁", @@ -375,7 +377,6 @@ "人脸":"人脸", "配件商城":"配件商城", "公司名称":"公司名称", - "修改公司名字":"修改公司名字", "请输入公司名字":"请输入公司名字", "提示":"提示", "是否删除?":"是否删除?", @@ -444,19 +445,18 @@ "请输入钥匙名称": "请输入钥匙名称", "修改成功": "修改成功", "冻结": "冻结", - "取消冻结": "取消冻结", + "解除冻结": "解除冻结", "授权": "授权", "取消授权": "取消授权", "同时解冻其发送的钥匙": "同时解冻其发送的钥匙", - "取消冻结会在用户APP连网后生效": "取消冻结会在用户APP连网后生效", + "会在用户APP连网后生效": "会在用户APP连网后生效", "同时冻结其发送的钥匙": "同时冻结其发送的钥匙", "冻结会在用户APP连网后生效": "冻结会在用户APP连网后生效", "取消授权会在用户APP连网后生效": "取消授权会在用户APP连网后生效", "授权用户拥有管理员的大部分权限,比如发送钥匙、发送密码": "授权用户拥有管理员的大部分权限,比如发送钥匙、发送密码", - "失效时间需大于生效时间": "失效时间需大于生效时间", - "生效时间需大于当前时间": "生效时间需大于当前时间", - "失效日期要大于生效日期": "失效日期要大于生效日期", - "失效时间要大于生效时间": "失效时间要大于生效时间", + "失效时间需晚于生效时间": "失效时间需晚于生效时间", + "生效时间需晚于当前时间": "生效时间需晚于当前时间", + "失效日期需晚于生效日期": "失效日期需晚于生效日期", "修改有效期": "修改有效期", "生效日期": "生效日期", "失效日期": "失效日期", @@ -490,7 +490,7 @@ "生效时间不能小于当前时间": "生效时间不能小于当前时间", "结束时间不能小于当前时间": "结束时间不能小于当前时间", "是否为管理员": "是否为管理员", - "已连接到锁,请将卡靠近锁的读卡区": "已连接到锁,请将卡靠近锁的读卡区", + "已连接到锁,请将卡靠近门锁的读卡区": "已连接到锁,请将卡靠近门锁的读卡区", "尝试连接设备...": "尝试连接设备...", "地理位置": "地理位置", "检查以确保以下地址是正确的": "检查以确保以下地址是正确的", @@ -665,7 +665,7 @@ "指纹列表":"指纹列表", "经过以上设定的时间,锁没有被开启,系统会给指定对象发送提醒消息,该功能需要锁联网":"经过以上设定的时间,锁没有被开启,系统会给指定对象发送提醒消息,该功能需要锁联网", "打开提醒后,当锁电量低于20%、10%和5%,系统会给指定对象发送提醒消息。电量读取方式:网关读取或APP读取。":"打开提醒后,当锁电量低于20%、10%和5%,系统会给指定对象发送提醒消息。电量读取方式:网关读取或APP读取。", - "门未开时间":"门未开时间", + "未开门时间":"未开门时间", "添加和使用面容开锁时:":"添加和使用面容开锁时:", "云存":"云存", "本地":"本地", @@ -689,7 +689,6 @@ "的全部内容。点击“同意”即表示您同意并接受全部条款。若选择不同意,将无法使用我们的产品和服务,并会退出应用。": "的全部内容。点击“同意”即表示您同意并接受全部条款。若选择不同意,将无法使用我们的产品和服务,并会退出应用。", "不同意":"不同意", "同意":"同意", - "当前状态:已开通":"当前状态:已开通", "该功能是高级功能,请开通后再使用":"该功能是高级功能,请开通后再使用", "常用程序":"常用程序", "该锁已被重置":"该锁已被重置", @@ -853,7 +852,6 @@ "添加掌静脉": "添加掌静脉", "胁迫掌静脉": "胁迫掌静脉", "请不要将胁迫掌静脉用于日常开锁": "请不要将胁迫掌静脉用于日常开锁", - "添加掌静脉提示": "添加掌静脉提示", "已连接到锁,请自然张开手掌,掌心正对摄像头": "已连接到锁,请自然张开手掌,掌心正对摄像头", "掌静脉详情": "掌静脉详情", "掌静脉号": "掌静脉号", @@ -1001,7 +999,7 @@ "快退至": "快退至", "暂无视频信息": "暂无视频信息", "加载出错": "加载出错", - "距离一个成年人手臂长度": "距离一个成年人手臂长度", + "请单人正对门锁,距离一个成年人手臂长度": "请单人正对门锁,距离一个成年人手臂长度", "(约0.6米)。": "(约0.6米)。", "保持脸部无遮挡,露出五官。": "保持脸部无遮挡,露出五官。", "准备好了,开始添加": "准备好了,开始添加", @@ -1065,11 +1063,29 @@ "退出演示模式": "退出演示模式", "提示:当前界面为展示界面,添加设备后才能继续使用": "提示:当前界面为展示界面,添加设备后才能继续使用", "门已上锁": "门已上锁", - "您已在其他设备登录": "您已在其他设备登录", + "您的账号在异地登录,如非本人,请尽快修改密码": "您的账号在异地登录,如非本人,请尽快修改密码", "开门成功": "开门成功", "开门失败": "开门失败", "呼叫提醒": "呼叫提醒", "收到来自": "收到来自", "锁的呼叫": "锁的呼叫", - "加载数据中": "加载数据中" + "加载数据中": "加载数据中", + "搜索所有锁类型": "搜索所有锁类型", + "锁电量更新时间": "锁电量更新时间", + "1月": "1月", + "2月": "2月", + "3月": "3月", + "4月": "4月", + "5月": "5月", + "6月": "6月", + "7月": "7月", + "8月": "8月", + "9月": "9月", + "10月": "10月", + "11月": "11月", + "12月": "12月", + "热门城市": "热门城市", + "导出锁数据": "导出锁数据", + "一键开锁": "一键开锁", + "已开通": "已开通" } diff --git a/lan/lan_zh.json b/lan/lan_zh.json index b1f58178..66bcd879 100755 --- a/lan/lan_zh.json +++ b/lan/lan_zh.json @@ -65,7 +65,7 @@ "批量授权锁": "批量授权锁", "授权管理员拥有操作这把锁的重要权限,请确保只发给我你信任的人": "授权管理员拥有操作这把锁的重要权限,请确保只发给我你信任的人", "功能开启后,你将可以通过网关远程开锁。此功能的开启和关闭只能在锁附近通过手机蓝牙进行。": "功能开启后,你将可以通过网关远程开锁。此功能的开启和关闭只能在锁附近通过手机蓝牙进行。", - "排列榜": "排列榜", + "排列方式": "排列方式", "早到榜": "早到榜", "迟到榜": "迟到榜", "当前模式": "当前模式", @@ -139,7 +139,7 @@ "开始": "开始", "全天": "全天", - "在设置的常开时间内,锁被打开后将一直处于打开的状态,直到被手动关闭": "在设置的常开时间内,锁被打开后将一直处于打开的状态,直到被手动关闭", + "你可以设置多个常开时间段,在设置的时间段内,锁被打开后一直处于打开的状态。": "你可以设置多个常开时间段,在设置的时间段内,锁被打开后一直处于打开的状态。", "请选择锁音量": "请选择锁音量", "功能开启后,你将可以听到智能锁的提示音。包括电量过低,密码错误等提示。": "功能开启后,你将可以听到智能锁的提示音。包括电量过低,密码错误等提示。", "低": "低", @@ -243,8 +243,12 @@ "首选DNS": "首选DNS", "备选DNS": "备选DNS", "不使用静态IP": "不使用静态IP", + "使用静态IP": "使用静态IP", + "请输入IP地址": "请输入IP地址", + "请输入子网掩码": "请输入子网掩码", + "请输入默认网关": "请输入默认网关", "所有锁": "所有锁", - "搜索所有锁类型": "搜索所有锁类型", + "搜索所有类型的锁": "搜索所有类型的锁", "门锁": "门锁", "挂锁": "挂锁", "保险箱锁": "保险箱锁", @@ -357,7 +361,6 @@ "人脸": "人脸", "配件商城": "配件商城", "公司名称": "公司名称", - "修改公司名字": "修改公司名字", "请输入公司名字": "请输入公司名字", "提示": "提示", "是否删除?": "是否删除?", @@ -425,19 +428,18 @@ "请输入钥匙名称": "请输入钥匙名称", "修改成功": "修改成功", "冻结": "冻结", - "取消冻结": "取消冻结", + "解除冻结": "解除冻结", "授权": "授权", "取消授权": "取消授权", "同时解冻其发送的钥匙": "同时解冻其发送的钥匙", - "取消冻结会在用户APP连网后生效": "取消冻结会在用户APP连网后生效", + "会在用户APP连网后生效": "会在用户APP连网后生效", "同时冻结其发送的钥匙": "同时冻结其发送的钥匙", "冻结会在用户APP连网后生效": "冻结会在用户APP连网后生效", "取消授权会在用户APP连网后生效": "取消授权会在用户APP连网后生效", "授权用户拥有管理员的大部分权限,比如发送钥匙、发送密码": "授权用户拥有管理员的大部分权限,比如发送钥匙、发送密码", - "失效时间需大于生效时间": "失效时间需大于生效时间", - "生效时间需大于当前时间": "生效时间需大于当前时间", - "失效日期要大于生效日期": "失效日期要大于生效日期", - "失效时间要大于生效时间": "失效时间要大于生效时间", + "失效时间需晚于生效时间": "失效时间需晚于生效时间", + "生效时间需晚于当前时间": "生效时间需晚于当前时间", + "失效日期需晚于生效日期": "失效日期需晚于生效日期", "修改有效期": "修改有效期", "生效日期": "生效日期", "失效日期": "失效日期", @@ -471,7 +473,7 @@ "生效时间不能小于当前时间": "生效时间不能小于当前时间", "结束时间不能小于当前时间": "结束时间不能小于当前时间", "是否为管理员": "是否为管理员", - "已连接到锁,请将卡靠近锁的读卡区": "已连接到锁,请将卡靠近锁的读卡区", + "已连接到锁,请将卡靠近门锁的读卡区": "已连接到锁,请将卡靠近门锁的读卡区", "尝试连接设备...": "尝试连接设备...", "地理位置": "地理位置", "检查以确保以下地址是正确的": "检查以确保以下地址是正确的", @@ -643,7 +645,7 @@ "指纹列表": "指纹列表", "经过以上设定的时间,锁没有被开启,系统会给指定对象发送提醒消息,该功能需要锁联网": "经过以上设定的时间,锁没有被开启,系统会给指定对象发送提醒消息,该功能需要锁联网。", "打开提醒后,当锁电量低于20%、10%和5%,系统会给指定对象发送提醒消息。电量读取方式:网关读取或APP读取。": "打开提醒后,当锁电量低于20%、10%和5%,系统会给指定对象发送提醒消息。电量读取方式:网关读取或APP读取。", - "门未开时间": "门未开时间", + "未开门时间": "未开门时间", "添加和使用面容开锁时:": "添加和使用面容开锁时:", "云存": "云存", "本地": "本地", @@ -667,7 +669,6 @@ "的全部内容。点击“同意”即表示您同意并接受全部条款。若选择不同意,将无法使用我们的产品和服务,并会退出应用。": "的全部内容。点击“同意”即表示您同意并接受全部条款。若选择不同意,将无法使用我们的产品和服务,并会退出应用。", "不同意": "不同意", "同意": "同意", - "当前状态:已开通": "当前状态:已开通", "该功能是高级功能,请开通后再使用": "该功能是高级功能,请开通后再使用", "常用程序": "常用程序", "该锁已被重置": "该锁已被重置", @@ -819,7 +820,6 @@ "添加掌静脉": "添加掌静脉", "胁迫掌静脉": "胁迫掌静脉", "请不要将胁迫掌静脉用于日常开锁": "请不要将胁迫掌静脉用于日常开锁", - "添加掌静脉提示": "添加掌静脉提示", "已连接到锁,请自然张开手掌,掌心正对摄像头": "已连接到锁,请自然张开手掌,掌心正对摄像头", "掌静脉详情": "掌静脉详情", "掌静脉号": "掌静脉号", @@ -967,7 +967,7 @@ "快退至": "快退至", "暂无视频信息": "暂无视频信息", "加载出错": "加载出错", - "距离一个成年人手臂长度": "距离一个成年人手臂长度", + "请单人正对门锁,距离一个成年人手臂长度": "请单人正对门锁,距离一个成年人手臂长度", "(约0.6米)。": "(约0.6米)。", "保持脸部无遮挡,露出五官。": "保持脸部无遮挡,露出五官。", "准备好了,开始添加": "准备好了,开始添加", @@ -1031,11 +1031,30 @@ "退出演示模式": "退出演示模式", "提示:当前界面为展示界面,添加设备后才能继续使用": "提示:当前界面为展示界面,添加设备后才能继续使用", "门已上锁": "门已上锁", - "您已在其他设备登录": "您已在其他设备登录", + "您的账号在异地登录,如非本人,请尽快修改密码": "您的账号在异地登录,如非本人,请尽快修改密码", "开门成功": "开门成功", "开门失败": "开门失败", "呼叫提醒": "呼叫提醒", "收到来自": "收到来自", "锁的呼叫": "锁的呼叫", - "加载数据中": "加载数据中" + "加载数据中": "加载数据中", + "搜索所有锁类型": "搜索所有锁类型", + "锁电量更新时间": "锁电量更新时间", + "1月": "1月", + "2月": "2月", + "3月": "3月", + "4月": "4月", + "5月": "5月", + "6月": "6月", + "7月": "7月", + "8月": "8月", + "9月": "9月", + "10月": "10月", + "11月": "11月", + "12月": "12月", + "热门城市": "热门城市", + "导出锁数据": "导出锁数据", + "一键开锁": "一键开锁", + "已开通": "已开通" + } diff --git a/lib/app.dart b/lib/app.dart index f4140a03..a9b3533a 100755 --- a/lib/app.dart +++ b/lib/app.dart @@ -76,6 +76,7 @@ class _MyAppState extends State with WidgetsBindingObserver, BaseWidget { } AppManager().setLanCode( code: '${locale!.languageCode}_${locale.countryCode}'); + // AppLog.log('1111locale:$locale'); return locale; }, locale: StoreService.to.getLanguageCode()!.isNotEmpty diff --git a/lib/flavors.dart b/lib/flavors.dart index fcc73aca..c1972d48 100755 --- a/lib/flavors.dart +++ b/lib/flavors.dart @@ -52,11 +52,11 @@ class F { static String get title { switch (appFlavor) { case Flavor.local: - return '星锁-local'; + return '${'星锁'.tr}-local'; case Flavor.dev: - return '星锁-dev'; + return '${'星锁'.tr}-dev'; case Flavor.pre: - return '星锁-pre'; + return '${'星锁'.tr}-pre'; case Flavor.sky: return '锁通通'.tr; case Flavor.xhj: diff --git a/lib/login/login/starLock_login_xhj_page.dart b/lib/login/login/starLock_login_xhj_page.dart index 6f19f769..bf62388f 100755 --- a/lib/login/login/starLock_login_xhj_page.dart +++ b/lib/login/login/starLock_login_xhj_page.dart @@ -152,70 +152,7 @@ class _StarLockLoginPageState extends State { ], ), ), - Container( - color: Colors.transparent, - padding: EdgeInsets.symmetric(vertical: 30.h, horizontal: 40.w), - child: Row( - mainAxisAlignment: MainAxisAlignment.start, - children: [ - Obx( - () => GestureDetector( - onTap: () { - state.agree.value = !state.agree.value; - logic.changeAgreeState(); - }, - child: Container( - width: 40.w, - height: 40.w, - // color: Colors.red, - padding: EdgeInsets.only( - left: 5.w, - right: 10.w, - ), - child: Image.asset( - state.agree.value - ? 'images/icon_round_select.png' - : 'images/icon_round_unSelect.png', - width: 20.w, - height: 20.w, - ), - ), - ), - ), - Row(children: [ - Text('我已阅读并同意'.tr, - style: TextStyle( - color: const Color(0xff333333), fontSize: 20.sp)), - GestureDetector( - child: Text( - '《${"用户协议".tr}》', - style: TextStyle( - color: AppColors.mainColor, fontSize: 20.sp)), - onTap: () { - Get.toNamed(Routers.webviewShowPage, - arguments: { - 'url': XSConstantMacro.userAgreementURL, - 'title': '用户协议'.tr - }); - }, - ), - GestureDetector( - child: Text( - '《${"隐私政策".tr}》', - style: TextStyle( - color: AppColors.mainColor, fontSize: 20.sp)), - onTap: () { - Get.toNamed(Routers.webviewShowPage, - arguments: { - 'url': XSConstantMacro.privacyPolicyURL, - 'title': '隐私政策'.tr - }); - }, - ), - ]), - ], - ), - ), + _buildBottomAgreement(), Padding( padding: EdgeInsets.symmetric(horizontal: 40.w), child: Column( @@ -383,4 +320,113 @@ class _StarLockLoginPageState extends State { ), ); } + + Widget _buildBottomAgreement() { + return Container( + width: 1.sw, + padding: EdgeInsets.only(left: 40.w, bottom:30.w, right: 40.w, top: 40.h), + child: Wrap( + // mainAxisAlignment: MainAxisAlignment.start, + children: [ + Obx(() => GestureDetector( + onTap: () { + state.agree.value = !state.agree.value; + logic.changeAgreeState(); + }, + child: Container( + width: 40.w, + height: 40.w, + // color: Colors.red, + padding: EdgeInsets.only( + left: 5.w, + right: 10.w, + ), + child: Image.asset( + state.agree.value + ? 'images/icon_round_select.png' + : 'images/icon_round_unSelect.png', + width: 20.w, + height: 20.w, + ), + ) + )), + SizedBox( + width: 10.w, + ), + Text( + '我已阅读并同意'.tr, + style: + TextStyle(color: const Color(0xff333333), fontSize: 20.sp), + ), + GestureDetector( + child: Text( + '《${'用户协议'.tr}》', + style: TextStyle( + color: AppColors.mainColor, fontSize: 20.sp)), + onTap: () { + Get.toNamed(Routers.webviewShowPage, + arguments: { + 'url': XSConstantMacro.userAgreementURL, + 'title': '用户协议'.tr + }); + }, + ), + GestureDetector( + child: Text( + '《${'隐私政策'.tr}》', + style: TextStyle( + color: AppColors.mainColor, fontSize: 20.sp)), + onTap: () { + Get.toNamed(Routers.webviewShowPage, + arguments: { + 'url': XSConstantMacro.privacyPolicyURL, + 'title': '隐私政策'.tr + }); + }, + ) + + // Flexible( + // child: Text.rich( + // TextSpan( + // text: '我已阅读并同意'.tr, + // style: + // TextStyle(color: const Color(0xff333333), fontSize: 20.sp), + // children: [ + // WidgetSpan( + // alignment: PlaceholderAlignment.middle, + // child: GestureDetector( + // child: Text( + // '《${'用户协议'.tr}》', + // style: TextStyle( + // color: AppColors.mainColor, fontSize: 20.sp)), + // onTap: () { + // Get.toNamed(Routers.webviewShowPage, + // arguments: { + // 'url': XSConstantMacro.userAgreementURL, + // 'title': '用户协议'.tr + // }); + // }, + // )), + // WidgetSpan( + // alignment: PlaceholderAlignment.middle, + // child: GestureDetector( + // child: Text( + // '《${'隐私政策'.tr}》', + // style: TextStyle( + // color: AppColors.mainColor, fontSize: 20.sp)), + // onTap: () { + // Get.toNamed(Routers.webviewShowPage, + // arguments: { + // 'url': XSConstantMacro.privacyPolicyURL, + // 'title': '隐私政策'.tr + // }); + // }, + // )), + // ], + // )), + // ) + ], + ), + ); + } } diff --git a/lib/login/register/starLock_register_xhj_page.dart b/lib/login/register/starLock_register_xhj_page.dart index 983a5b20..e17f5e85 100755 --- a/lib/login/register/starLock_register_xhj_page.dart +++ b/lib/login/register/starLock_register_xhj_page.dart @@ -234,68 +234,77 @@ class _StarLockRegisterPageState extends State { } Widget _buildBottomAgreement() { - return GestureDetector( - onTap: () { - state.agree.value = !state.agree.value; - logic.changeAgreeState(); - }, - child: Padding( - padding: EdgeInsets.symmetric(vertical: 16.h), - child: Row( - mainAxisAlignment: MainAxisAlignment.start, - children: [ - Obx(() => Image.asset( - state.agree.value - ? 'images/icon_round_select.png' - : 'images/icon_round_unSelect.png', - width: 20.w, - height: 20.w, - )), - SizedBox( - width: 15.w, - ), - Flexible( - child: RichText( - text: TextSpan( - text: '我已阅读并同意'.tr, - style: - TextStyle(color: const Color(0xff333333), fontSize: 20.sp), - children: [ - WidgetSpan( - alignment: PlaceholderAlignment.middle, - child: GestureDetector( - child: Text( - '《${'用户协议'.tr}》', - style: TextStyle( - color: AppColors.mainColor, fontSize: 20.sp)), - onTap: () { - Get.toNamed(Routers.webviewShowPage, - arguments: { - 'url': XSConstantMacro.userAgreementURL, - 'title': '用户协议'.tr - }); - }, - )), - WidgetSpan( - alignment: PlaceholderAlignment.middle, - child: GestureDetector( - child: Text( - '《${'隐私政策'.tr}》', - style: TextStyle( - color: AppColors.mainColor, fontSize: 20.sp)), - onTap: () { - Get.toNamed(Routers.webviewShowPage, - arguments: { - 'url': XSConstantMacro.privacyPolicyURL, - 'title': '隐私政策'.tr - }); - }, - )), - ], - )), + return Padding( + padding: EdgeInsets.only(bottom:20.w), + child: Row( + mainAxisAlignment: MainAxisAlignment.start, + children: [ + Obx(() => GestureDetector( + onTap: () { + state.agree.value = !state.agree.value; + logic.changeAgreeState(); + }, + child: Container( + width: 40.w, + height: 40.w, + // color: Colors.red, + padding: EdgeInsets.only( + left: 5.w, + right: 10.w, + ), + child: Image.asset( + state.agree.value + ? 'images/icon_round_select.png' + : 'images/icon_round_unSelect.png', + width: 20.w, + height: 20.w, + ), ) - ], - ), + )), + SizedBox( + width: 10.w, + ), + Flexible( + child: RichText( + text: TextSpan( + text: '我已阅读并同意'.tr, + style: + TextStyle(color: const Color(0xff333333), fontSize: 20.sp), + children: [ + WidgetSpan( + alignment: PlaceholderAlignment.middle, + child: GestureDetector( + child: Text( + '《${'用户协议'.tr}》', + style: TextStyle( + color: AppColors.mainColor, fontSize: 20.sp)), + onTap: () { + Get.toNamed(Routers.webviewShowPage, + arguments: { + 'url': XSConstantMacro.userAgreementURL, + 'title': '用户协议'.tr + }); + }, + )), + WidgetSpan( + alignment: PlaceholderAlignment.middle, + child: GestureDetector( + child: Text( + '《${'隐私政策'.tr}》', + style: TextStyle( + color: AppColors.mainColor, fontSize: 20.sp)), + onTap: () { + Get.toNamed(Routers.webviewShowPage, + arguments: { + 'url': XSConstantMacro.privacyPolicyURL, + 'title': '隐私政策'.tr + }); + }, + )), + ], + )), + ) + ], ), ); } diff --git a/lib/login/selectCountryRegion/common/utils.dart b/lib/login/selectCountryRegion/common/utils.dart index 08556380..95c6ad52 100755 --- a/lib/login/selectCountryRegion/common/utils.dart +++ b/lib/login/selectCountryRegion/common/utils.dart @@ -1,5 +1,6 @@ import 'package:flutter/material.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:get/get.dart'; import 'package:star_lock/app_settings/app_colors.dart'; import 'package:star_lock/login/selectCountryRegion/common/countryRegionEntity.dart'; @@ -20,7 +21,7 @@ class Utils { static Widget getSusItem(BuildContext context, String tag, {double susHeight = 40}) { if (tag == '★') { - tag = '★ 热门城市'; + tag = '★ ${'热门城市'.tr}'; } return Container( height: susHeight, diff --git a/lib/main.dart b/lib/main.dart index ba9bcdfa..1d91c944 100755 --- a/lib/main.dart +++ b/lib/main.dart @@ -5,6 +5,7 @@ import 'dart:io'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:get/get.dart'; +import 'package:path/path.dart' as path; import 'package:star_lock/flavors.dart'; import 'package:star_lock/login/login/app_get_version.dart'; import 'package:star_lock/mine/about/debug/debug_tool.dart'; @@ -15,14 +16,13 @@ import 'package:star_lock/tools/customer_tool.dart'; import 'package:star_lock/tools/device_info_service.dart'; import 'package:star_lock/tools/pay/wx_pay_tool.dart'; import 'package:star_lock/tools/platform_info_services.dart'; -import 'package:star_lock/tools/storage.dart'; import 'package:star_lock/tools/push/xs_jPhush.dart'; +import 'package:star_lock/tools/storage.dart'; import 'package:star_lock/translations/trans_lib.dart'; import 'app.dart'; import 'app_settings/app_settings.dart'; import 'tools/store_service.dart'; -import 'package:path/path.dart' as path; // 该文件不可作为编译入口,请查看 flavorizr.yaml 中的说明 FutureOr main() async { diff --git a/lib/main/lockDetail/authorizedAdmin/authorizedAdmin/authorizedAdmin_logic.dart b/lib/main/lockDetail/authorizedAdmin/authorizedAdmin/authorizedAdmin_logic.dart index dc20b218..037bf443 100755 --- a/lib/main/lockDetail/authorizedAdmin/authorizedAdmin/authorizedAdmin_logic.dart +++ b/lib/main/lockDetail/authorizedAdmin/authorizedAdmin/authorizedAdmin_logic.dart @@ -151,7 +151,7 @@ class AuthorizedAdminLogic extends BaseGetXController { } if (int.parse(startDate) >= int.parse(endDate)) { - showToast('失效时间要大于生效时间'.tr); + showToast('失效时间需晚于生效时间'.tr); return; } } diff --git a/lib/main/lockDetail/card/addCardType/addCardType_logic.dart b/lib/main/lockDetail/card/addCardType/addCardType_logic.dart index af92363d..1027a50c 100755 --- a/lib/main/lockDetail/card/addCardType/addCardType_logic.dart +++ b/lib/main/lockDetail/card/addCardType/addCardType_logic.dart @@ -51,7 +51,7 @@ class AddCardTypeLogic extends BaseGetXController{ // } if (int.parse(startDate) >= int.parse(endDate)) { - showToast('失效时间要大于生效时间'.tr); + showToast('失效时间需晚于生效时间'.tr); return; } // AppLog.log("state.timeLimitBeginTime.value:${state.timeLimitBeginTime.value} startDate:$startDate"); diff --git a/lib/main/lockDetail/card/addICCard/addICCard_page.dart b/lib/main/lockDetail/card/addICCard/addICCard_page.dart index b10c0169..565270df 100755 --- a/lib/main/lockDetail/card/addICCard/addICCard_page.dart +++ b/lib/main/lockDetail/card/addICCard/addICCard_page.dart @@ -60,7 +60,7 @@ class _AddICCardPageState extends State with RouteAware { child: Center( child: Obx(() => Text( state.ifConnectScuess.value - ? '已连接到锁,请将卡靠近锁的读卡区'.tr + ? '已连接到锁,请将卡靠近门锁的读卡区'.tr : '尝试连接设备...'.tr, style: TextStyle(color: Colors.white, fontSize: 24.sp)))), ), diff --git a/lib/main/lockDetail/card/otherTypeKeyChangeDate/otherTypeKeyChangeDate_page.dart b/lib/main/lockDetail/card/otherTypeKeyChangeDate/otherTypeKeyChangeDate_page.dart index 8c399193..a832f15b 100755 --- a/lib/main/lockDetail/card/otherTypeKeyChangeDate/otherTypeKeyChangeDate_page.dart +++ b/lib/main/lockDetail/card/otherTypeKeyChangeDate/otherTypeKeyChangeDate_page.dart @@ -51,13 +51,13 @@ class _OtherTypeKeyChangeDatePageState extends State state.endTimeTimestamp.value || state.beginTimeTimestamp.value == state.endTimeTimestamp.value) { - logic.showToast('失效时间需大于生效时间'.tr); + logic.showToast('失效时间需晚于生效时间'.tr); return; } if (state.endTimeTimestamp.value < DateTime.now().millisecondsSinceEpoch) { - logic.showToast('生效时间需大于当前时间'.tr); + logic.showToast('生效时间需晚于当前时间'.tr); return; } switch (state.pushType.value) { diff --git a/lib/main/lockDetail/card/otherTypeKeyChangeValidityDate/otherTypeKeyChangeValidityDate_page.dart b/lib/main/lockDetail/card/otherTypeKeyChangeValidityDate/otherTypeKeyChangeValidityDate_page.dart index 3a53090a..dd652865 100755 --- a/lib/main/lockDetail/card/otherTypeKeyChangeValidityDate/otherTypeKeyChangeValidityDate_page.dart +++ b/lib/main/lockDetail/card/otherTypeKeyChangeValidityDate/otherTypeKeyChangeValidityDate_page.dart @@ -58,7 +58,7 @@ class _OtherTypeKeyChangeValidityDatePageState extends State state.endDateTimestamp.value) { - logic.showToast('失效日期要大于生效日期'.tr); + logic.showToast('失效日期需晚于生效日期'.tr); return; } @@ -69,7 +69,7 @@ class _OtherTypeKeyChangeValidityDatePageState extends State= state.endTimeTimestamp.value) { - logic.showToast('失效时间要大于生效时间'.tr); + logic.showToast('失效时间需晚于生效时间'.tr); return; } diff --git a/lib/main/lockDetail/checkingIn/checkingInHolidays/checkingInSetHolidays/checkingInSetHolidays_page.dart b/lib/main/lockDetail/checkingIn/checkingInHolidays/checkingInSetHolidays/checkingInSetHolidays_page.dart index 5fc4bc29..cb5cd16a 100755 --- a/lib/main/lockDetail/checkingIn/checkingInHolidays/checkingInSetHolidays/checkingInSetHolidays_page.dart +++ b/lib/main/lockDetail/checkingIn/checkingInHolidays/checkingInSetHolidays/checkingInSetHolidays_page.dart @@ -197,7 +197,7 @@ class _CheckingInSetHolidaysPageState extends State { mainAxisAlignment: MainAxisAlignment.center, children: [ Text( - '${state.selectYear.value}${"年".tr}', + '${state.selectYear.value}${'年'.tr}', style: TextStyle(color: Colors.white, fontSize: 26.sp), ), SizedBox( @@ -220,7 +220,7 @@ class _CheckingInSetHolidaysPageState extends State { // 模式,详见下方 mode: DateMode.Y, // 后缀 默认Suffix.normal(),为空的话Suffix() - suffix: Suffix(years: ' 年'), + suffix: Suffix(years: ' 年'.tr), // 样式 详见下方样式 pickerStyle: PickerStyle( cancelButton: GestureDetector( diff --git a/lib/main/lockDetail/checkingIn/checkingInList/checkingInListSeletMonth_page.dart b/lib/main/lockDetail/checkingIn/checkingInList/checkingInListSeletMonth_page.dart index 45806889..f11d4796 100644 --- a/lib/main/lockDetail/checkingIn/checkingInList/checkingInListSeletMonth_page.dart +++ b/lib/main/lockDetail/checkingIn/checkingInList/checkingInListSeletMonth_page.dart @@ -93,7 +93,7 @@ class _CheckingInListSeletMonthPageState extends State { context, //默认的索引 normalIndex: 0, - title: '排列榜'.tr, + title: '排列方式'.tr, cancelTitle: '取消'.tr, sureTitle: '确定'.tr, //要显示的列表 diff --git a/lib/main/lockDetail/checkingIn/checkingInSet/checkingInSet_page.dart b/lib/main/lockDetail/checkingIn/checkingInSet/checkingInSet_page.dart index b4a46207..815bfe10 100755 --- a/lib/main/lockDetail/checkingIn/checkingInSet/checkingInSet_page.dart +++ b/lib/main/lockDetail/checkingIn/checkingInSet/checkingInSet_page.dart @@ -131,7 +131,7 @@ class _CheckingInSetPageState extends State { context: context, builder: (BuildContext context) { return ShowTFView( - title: '修改公司名字'.tr, + title: '修改名字'.tr, tipTitle: '', controller: state.changeNameController, inputFormatters: [ diff --git a/lib/main/lockDetail/checkingIn/checkingInStaff/checkingInSetAddStaff/checkingInAddStaff_page.dart b/lib/main/lockDetail/checkingIn/checkingInStaff/checkingInSetAddStaff/checkingInAddStaff_page.dart index 8f026170..a07b19e6 100755 --- a/lib/main/lockDetail/checkingIn/checkingInStaff/checkingInSetAddStaff/checkingInAddStaff_page.dart +++ b/lib/main/lockDetail/checkingIn/checkingInStaff/checkingInSetAddStaff/checkingInAddStaff_page.dart @@ -33,7 +33,7 @@ class _CheckingInAddStaffPageState extends State { return Scaffold( backgroundColor: AppColors.mainBackgroundColor, appBar: TitleAppBar( - barTitle: state.isAdd.value == '1' ? '添加员工'.tr : '编辑员工'.tr, + barTitle: state.isAdd.value == '1' ? '添加员工'.tr : '员工信息'.tr, haveBack: true, backgroundColor: AppColors.mainColor), body: Column( diff --git a/lib/main/lockDetail/doorLockLog/doorLockLog_page.dart b/lib/main/lockDetail/doorLockLog/doorLockLog_page.dart index 36c55388..5735e012 100755 --- a/lib/main/lockDetail/doorLockLog/doorLockLog_page.dart +++ b/lib/main/lockDetail/doorLockLog/doorLockLog_page.dart @@ -217,7 +217,7 @@ class _DoorLockLogPageState extends State with RouteAware { top: 8.0, right: 8.0, child: Obx(() => Text( - '${state.currentSelectDate.value.year}年${state.currentSelectDate.value.month}月', + '${state.currentSelectDate.value.year}${'年'.tr}${state.currentSelectDate.value.month}${'月'.tr}', style: theme.textTheme.titleMedium!.copyWith( fontSize: 16, color: theme.colorScheme.secondary, diff --git a/lib/main/lockDetail/electronicKey/electronicKeyDetail/electronicKeyDetail/electronicKeyDetail_logic.dart b/lib/main/lockDetail/electronicKey/electronicKeyDetail/electronicKeyDetail/electronicKeyDetail_logic.dart index 8fa66557..79a31881 100755 --- a/lib/main/lockDetail/electronicKey/electronicKeyDetail/electronicKeyDetail/electronicKeyDetail_logic.dart +++ b/lib/main/lockDetail/electronicKey/electronicKeyDetail/electronicKeyDetail/electronicKeyDetail_logic.dart @@ -135,7 +135,7 @@ class ElectronicKeyDetailLogic extends BaseGetXController { } } - //取消冻结 + //解除冻结 Future cancelFreeze(int includeUnderlings) async { final ElectronicKeyListEntity entity = await ApiRepository.to.cancelFreeze( keyId: state.itemData.value.keyId.toString(), @@ -274,7 +274,7 @@ class ElectronicKeyDetailLogic extends BaseGetXController { // 授权管理员 textList = [ if (state.itemData.value.keyStatus == XSConstantMacro.keyStatusFrozen) - '取消冻结'.tr + '解除冻结'.tr else '冻结'.tr, if (isLockOwner) '取消授权'.tr @@ -284,7 +284,7 @@ class ElectronicKeyDetailLogic extends BaseGetXController { if (state.keyType.value == 1 || state.keyType.value == 2) { textList = [ if (state.itemData.value.keyStatus == XSConstantMacro.keyStatusFrozen) - '取消冻结'.tr + '解除冻结'.tr else '冻结'.tr, if (state.itemData.value.keyRight == 1) '取消授权'.tr else '授权'.tr @@ -292,7 +292,7 @@ class ElectronicKeyDetailLogic extends BaseGetXController { } else if (state.keyType.value == 4) { textList = [ if (state.itemData.value.keyStatus == XSConstantMacro.keyStatusFrozen) - '取消冻结'.tr + '解除冻结'.tr else '冻结'.tr ]; @@ -300,7 +300,7 @@ class ElectronicKeyDetailLogic extends BaseGetXController { } else { textList = [ if (state.itemData.value.keyStatus == XSConstantMacro.keyStatusFrozen) - '取消冻结'.tr + '解除冻结'.tr else '冻结'.tr, ]; @@ -318,7 +318,7 @@ class ElectronicKeyDetailLogic extends BaseGetXController { if (index == 0) { if (state.itemData.value.keyStatus == XSConstantMacro.keyStatusFrozen) { - // 取消冻结 + // 解除冻结 if (state.itemData.value.keyRight == 1) { // 管理员 ShowTipView().showDeleteAdministratorIsHaveAllDataDialog( @@ -327,7 +327,7 @@ class ElectronicKeyDetailLogic extends BaseGetXController { }); } else { ShowTipView() - .showIosTipWithContentDialog('取消冻结会在用户APP连网后生效'.tr, () { + .showIosTipWithContentDialog('会在用户APP连网后生效'.tr, () { cancelFreeze(0); }); } diff --git a/lib/main/lockDetail/electronicKey/electronicKeyDetail/electronicKeyDetailChangeDate/electronicKeyDetailChangeDate_logic.dart b/lib/main/lockDetail/electronicKey/electronicKeyDetail/electronicKeyDetailChangeDate/electronicKeyDetailChangeDate_logic.dart index c8e1f6d0..d29fe052 100755 --- a/lib/main/lockDetail/electronicKey/electronicKeyDetail/electronicKeyDetailChangeDate/electronicKeyDetailChangeDate_logic.dart +++ b/lib/main/lockDetail/electronicKey/electronicKeyDetail/electronicKeyDetailChangeDate/electronicKeyDetailChangeDate_logic.dart @@ -18,12 +18,12 @@ class ElectronicKeyDetailChangeDateLogic extends BaseGetXController { final int beginTimeTimestamp = DateTool().dateToTimestamp(state.beginTime.value, 1); final int endTimeTimestamp = DateTool().dateToTimestamp(state.endTime.value, 1); if (beginTimeTimestamp > endTimeTimestamp || beginTimeTimestamp == endTimeTimestamp) { - showToast('失效时间需大于生效时间'.tr); + showToast('失效时间需晚于生效时间'.tr); return; } if (endTimeTimestamp < DateTime.now().millisecondsSinceEpoch) { - showToast('生效时间需大于当前时间'.tr); + showToast('生效时间需晚于当前时间'.tr); return; } final KeyOperationRecordEntity entity = await ApiRepository.to.updateKeyDate( diff --git a/lib/main/lockDetail/electronicKey/electronicKeyDetail/electronicKeyPeriodValidity/electronicKeyPeriodValidity_logic.dart b/lib/main/lockDetail/electronicKey/electronicKeyDetail/electronicKeyPeriodValidity/electronicKeyPeriodValidity_logic.dart index 26c96b65..dec445b6 100755 --- a/lib/main/lockDetail/electronicKey/electronicKeyDetail/electronicKeyPeriodValidity/electronicKeyPeriodValidity_logic.dart +++ b/lib/main/lockDetail/electronicKey/electronicKeyDetail/electronicKeyPeriodValidity/electronicKeyPeriodValidity_logic.dart @@ -20,12 +20,12 @@ class ElectronicKeyPeriodValidityLogic extends BaseGetXController { final int endTimeTimestamp = DateTool().dateToTimestamp(state.endTime.value, 0); if (starDateTimestamp >= endDateTimestamp) { - showToast('失效日期要大于生效日期'.tr); + showToast('失效日期需晚于生效日期'.tr); return; } if (starTimeTimestamp >= endTimeTimestamp) { - showToast('失效时间要大于生效时间'.tr); + showToast('失效时间需晚于生效时间'.tr); return; } final KeyOperationRecordEntity entity = await ApiRepository.to.updateKeyDate( diff --git a/lib/main/lockDetail/electronicKey/massSendElectronicKey/massSendElectronicKey/massSendElectronicKey_logic.dart b/lib/main/lockDetail/electronicKey/massSendElectronicKey/massSendElectronicKey/massSendElectronicKey_logic.dart index fc26449c..07242ab2 100755 --- a/lib/main/lockDetail/electronicKey/massSendElectronicKey/massSendElectronicKey/massSendElectronicKey_logic.dart +++ b/lib/main/lockDetail/electronicKey/massSendElectronicKey/massSendElectronicKey/massSendElectronicKey_logic.dart @@ -50,7 +50,7 @@ class MassSendElectronicKeyLogic extends BaseGetXController { } if (int.parse(startDate) >= int.parse(endDate)) { - showToast('失效时间要大于生效时间'.tr); + showToast('失效时间需晚于生效时间'.tr); return; } } @@ -112,7 +112,7 @@ class MassSendElectronicKeyLogic extends BaseGetXController { } if (int.parse(startDate) >= int.parse(endDate)) { - showToast('失效时间要大于生效时间'.tr); + showToast('失效时间需晚于生效时间'.tr); return; } } diff --git a/lib/main/lockDetail/electronicKey/sendElectronicKey/sendElectronicKey/view/sendElectronicKeyView_logic.dart b/lib/main/lockDetail/electronicKey/sendElectronicKey/sendElectronicKey/view/sendElectronicKeyView_logic.dart index 69966787..76e2a730 100755 --- a/lib/main/lockDetail/electronicKey/sendElectronicKey/sendElectronicKey/view/sendElectronicKeyView_logic.dart +++ b/lib/main/lockDetail/electronicKey/sendElectronicKey/sendElectronicKey/view/sendElectronicKeyView_logic.dart @@ -73,7 +73,7 @@ class SendElectronicKeyViewLogic extends BaseGetXController { endTime = '0'; if (int.parse(startDate) >= int.parse(endDate)) { - showToast('失效时间要大于生效时间'.tr); + showToast('失效时间需晚于生效时间'.tr); return; } diff --git a/lib/main/lockDetail/electronicKey/sendElectronicKey/sendElectronicKey/view/sendElectronicKeyView_page.dart b/lib/main/lockDetail/electronicKey/sendElectronicKey/sendElectronicKey/view/sendElectronicKeyView_page.dart index 2b188f40..51cc15b5 100755 --- a/lib/main/lockDetail/electronicKey/sendElectronicKey/sendElectronicKey/view/sendElectronicKeyView_page.dart +++ b/lib/main/lockDetail/electronicKey/sendElectronicKey/sendElectronicKey/view/sendElectronicKeyView_page.dart @@ -143,7 +143,7 @@ class _SendElectronicKeyViewState extends State rightTitle: '', isHaveRightWidget: true, rightWidget: getTFWidget( - false, '请输入姓名'.tr, 2, logic, + false, '请输入'.tr, 2, logic, maxSize: 50)), Container(height: 10.h), ], diff --git a/lib/main/lockDetail/face/addFaceType/addFaceType_logic.dart b/lib/main/lockDetail/face/addFaceType/addFaceType_logic.dart index 1191ac29..b4ca7e14 100755 --- a/lib/main/lockDetail/face/addFaceType/addFaceType_logic.dart +++ b/lib/main/lockDetail/face/addFaceType/addFaceType_logic.dart @@ -49,7 +49,7 @@ class AddFaceTypeLogic extends BaseGetXController { // } if (int.parse(startDate) >= int.parse(endDate)) { - showToast('失效时间要大于生效时间'.tr); + showToast('失效时间需晚于生效时间'.tr); return; } } else if (state.selectType.value == '2') { diff --git a/lib/main/lockDetail/fingerprint/addFingerprintSelectType/addFingerprintType_logic.dart b/lib/main/lockDetail/fingerprint/addFingerprintSelectType/addFingerprintType_logic.dart index caff99d5..8fe56f5d 100755 --- a/lib/main/lockDetail/fingerprint/addFingerprintSelectType/addFingerprintType_logic.dart +++ b/lib/main/lockDetail/fingerprint/addFingerprintSelectType/addFingerprintType_logic.dart @@ -50,7 +50,7 @@ class AddFingerprintTypeLogic extends BaseGetXController{ // } if (int.parse(startDate) >= int.parse(endDate)) { - showToast('失效时间要大于生效时间'.tr); + showToast('失效时间需晚于生效时间'.tr); return; } } else if (state.selectType.value == '2') { diff --git a/lib/main/lockDetail/iris/addIrisType/addIrisType_logic.dart b/lib/main/lockDetail/iris/addIrisType/addIrisType_logic.dart index 059a1c6b..b6d9986e 100755 --- a/lib/main/lockDetail/iris/addIrisType/addIrisType_logic.dart +++ b/lib/main/lockDetail/iris/addIrisType/addIrisType_logic.dart @@ -50,7 +50,7 @@ class AddIrisTypeLogic extends BaseGetXController { // } if (int.parse(startDate) >= int.parse(endDate)) { - showToast('失效时间要大于生效时间'.tr); + showToast('失效时间需晚于生效时间'.tr); return; } } else if (state.selectType.value == '2') { diff --git a/lib/main/lockDetail/iris/irisList/irisList_logic.dart b/lib/main/lockDetail/iris/irisList/irisList_logic.dart index bb2185d5..59108ecd 100755 --- a/lib/main/lockDetail/iris/irisList/irisList_logic.dart +++ b/lib/main/lockDetail/iris/irisList/irisList_logic.dart @@ -4,6 +4,8 @@ import 'dart:async'; import 'package:flutter_blue_plus/flutter_blue_plus.dart'; import 'package:star_lock/blue/io_protocol/io_addFace.dart'; import 'package:star_lock/blue/io_protocol/io_queryingFaceStatus.dart'; +import 'package:star_lock/login/login/entity/LoginEntity.dart'; +import 'package:star_lock/main/lockDetail/fingerprint/fingerprintList/fingerprintListData_entity.dart'; import 'package:star_lock/main/lockDetail/iris/irisList/irisList_state.dart'; import 'package:star_lock/tools/baseGetXController.dart'; import '../../../../blue/blue_manage.dart'; @@ -22,7 +24,7 @@ class IrisListLogic extends BaseGetXController { late StreamSubscription _replySubscription; void _initReplySubscription() { _replySubscription = - EventBusManager().eventBus!.on().listen((reply) { + EventBusManager().eventBus!.on().listen((Reply reply) { // 添加人脸开始(此处用作删除人脸) if ((reply is SenderAddFaceReply) && (state.isDeletFaceData == true)) { _replyAddFaceBegin(reply); @@ -41,7 +43,7 @@ class IrisListLogic extends BaseGetXController { // 添加人脸开始---这里用作删除人脸 Future _replyAddFaceBegin(Reply reply) async { - int status = reply.data[2]; + final int status = reply.data[2]; switch (status) { case 0x00: @@ -57,14 +59,14 @@ class IrisListLogic extends BaseGetXController { break; case 0x06: //无权限 - var privateKey = await Storage.getStringList(saveBluePrivateKey); - List getPrivateKeyList = changeStringListToIntList(privateKey!); + final List? privateKey = await Storage.getStringList(saveBluePrivateKey); + final List getPrivateKeyList = changeStringListToIntList(privateKey!); - var signKey = await Storage.getStringList(saveBlueSignKey); - List signKeyDataList = changeStringListToIntList(signKey!); + final List? signKey = await Storage.getStringList(saveBlueSignKey); + final List signKeyDataList = changeStringListToIntList(signKey!); - var token = await Storage.getStringList(saveBlueToken); - List getTokenList = changeStringListToIntList(token!); + final List? token = await Storage.getStringList(saveBlueToken); + final List getTokenList = changeStringListToIntList(token!); // IoSenderManage.senderAddFaceCommand( // keyID:state.deletKeyID, @@ -92,7 +94,7 @@ class IrisListLogic extends BaseGetXController { // 获取人脸状态 Future _replyQueryingFaceStatus(Reply reply) async { - int status = reply.data[2]; + final int status = reply.data[2]; switch (status) { case 0x00: @@ -112,7 +114,7 @@ class IrisListLogic extends BaseGetXController { // 获取卡片状态 Future _replyReferEventRecordNumber(Reply reply) async { - int status = reply.data[2]; + final int status = reply.data[2]; switch (status) { case 0x00: //成功 @@ -130,46 +132,46 @@ class IrisListLogic extends BaseGetXController { // 查询用户、指纹、密码、卡片数量(用于判断是否同步) Future _replyCheckingUserInfoCount(Reply reply) async { - int status = reply.data[2]; + final int status = reply.data[2]; // 用户数量 - int userNum = reply.data[5]; + final int userNum = reply.data[5]; // 指纹数量 - int fingerNum = reply.data[6]; + final int fingerNum = reply.data[6]; // 密码数量 - int pwdNum = reply.data[7]; + final int pwdNum = reply.data[7]; // 卡片数量 - int cardNum = reply.data[8]; + final int cardNum = reply.data[8]; // 记录数量 - int logsNum = reply.data[9]; + final int logsNum = reply.data[9]; // 版本 - int verNo = reply.data[10]; + final int verNo = reply.data[10]; // 最大管理员指纹数量 - int maxAdminFingerNum = reply.data[11]; + final int maxAdminFingerNum = reply.data[11]; // 最大用户指纹数量 - int maxUserFingerNum = reply.data[12]; + final int maxUserFingerNum = reply.data[12]; // 最大管理员密码数量 - int maxAdminPassNum = reply.data[13]; + final int maxAdminPassNum = reply.data[13]; // 最大用户密码数量 - int maxUserPassNum = reply.data[14]; + final int maxUserPassNum = reply.data[14]; // 最大管理员卡片数量 - int maxAdminCardNum = reply.data[15]; + final int maxAdminCardNum = reply.data[15]; // 最大用户卡片数量 - int maxUserCardNum = reply.data[16]; + final int maxUserCardNum = reply.data[16]; // 序列号 - var serialNo = reply.data.sublist(17, 21); + final List serialNo = reply.data.sublist(17, 21); switch (status) { case 0x00: @@ -191,14 +193,14 @@ class IrisListLogic extends BaseGetXController { BlueManage().blueSendData(BlueManage().connectDeviceName, (BluetoothConnectionState state) async { if (state == BluetoothConnectionState.connected) { - var privateKey = await Storage.getStringList(saveBluePrivateKey); - List getPrivateKeyList = changeStringListToIntList(privateKey!); + final List? privateKey = await Storage.getStringList(saveBluePrivateKey); + final List getPrivateKeyList = changeStringListToIntList(privateKey!); - var token = await Storage.getStringList(saveBlueToken); - List getTokenList = changeStringListToIntList(token!); + final List? token = await Storage.getStringList(saveBlueToken); + final List getTokenList = changeStringListToIntList(token!); - var publicKey = await Storage.getStringList(saveBluePublicKey); - List getPublicKeyList = changeStringListToIntList(publicKey!); + final List? publicKey = await Storage.getStringList(saveBluePublicKey); + final List getPublicKeyList = changeStringListToIntList(publicKey!); // IoSenderManage.senderQueryingFaceStatusCommand( // keyID: BlueManage().connectDeviceName, @@ -220,14 +222,14 @@ class IrisListLogic extends BaseGetXController { BlueManage().blueSendData(BlueManage().connectDeviceName, (BluetoothConnectionState state) async { if (state == BluetoothConnectionState.connected) { - var privateKey = await Storage.getStringList(saveBluePrivateKey); - List getPrivateKeyList = changeStringListToIntList(privateKey!); + final List? privateKey = await Storage.getStringList(saveBluePrivateKey); + final List getPrivateKeyList = changeStringListToIntList(privateKey!); - var token = await Storage.getStringList(saveBlueToken); - List getTokenList = changeStringListToIntList(token!); + final List? token = await Storage.getStringList(saveBlueToken); + final List getTokenList = changeStringListToIntList(token!); - var publicKey = await Storage.getStringList(saveBluePublicKey); - List getPublicKeyList = changeStringListToIntList(publicKey!); + final List? publicKey = await Storage.getStringList(saveBluePublicKey); + final List getPublicKeyList = changeStringListToIntList(publicKey!); // IoSenderManage.senderCheckingUserInfoCountCommand( // keyID: BlueManage().connectDeviceName, @@ -252,14 +254,14 @@ class IrisListLogic extends BaseGetXController { BlueManage().blueSendData(BlueManage().connectDeviceName, (BluetoothConnectionState deviceConnectionState) async { if (deviceConnectionState == BluetoothConnectionState.connected) { - var signKey = await Storage.getStringList(saveBlueSignKey); - List signKeyDataList = changeStringListToIntList(signKey!); + final List? signKey = await Storage.getStringList(saveBlueSignKey); + final List signKeyDataList = changeStringListToIntList(signKey!); - var privateKey = await Storage.getStringList(saveBluePrivateKey); - List getPrivateKeyList = changeStringListToIntList(privateKey!); + final List? privateKey = await Storage.getStringList(saveBluePrivateKey); + final List getPrivateKeyList = changeStringListToIntList(privateKey!); - var token = await Storage.getStringList(saveBlueToken); - List getTokenList = changeStringListToIntList(token!); + final List? token = await Storage.getStringList(saveBlueToken); + final List getTokenList = changeStringListToIntList(token!); // IoSenderManage.senderAddFaceCommand( // keyID:state.deletKeyID, @@ -290,8 +292,8 @@ class IrisListLogic extends BaseGetXController { } // 获取虹膜列表 - void getIrisListData() async { - var entity = await ApiRepository.to.getFaceListData( + Future getIrisListData() async { + final FingerprintListDataEntity entity = await ApiRepository.to.getFaceListData( lockId: state.lockId.value.toString(), pageNo: '1', pageSize: '20', @@ -303,37 +305,37 @@ class IrisListLogic extends BaseGetXController { } // 删除的人脸 - void deletFacesData() async { - var faceId = ""; - var type = "1"; + Future deletFacesData() async { + String faceId = ''; + String type = '1'; if (state.isDeletAll == false) { faceId = state.deletKeyID; - type = "0"; + type = '0'; } - var entity = await ApiRepository.to.deleteFaceData( + final LoginEntity entity = await ApiRepository.to.deleteFaceData( faceId: int.parse(faceId), lockId: state.lockId.value, ); if (entity.errorCode!.codeIsSuccessful) { - showToast("删除成功"); + showToast('删除成功'); state.isDeletFaceData = false; getIrisListData(); } } // 重置所有的人脸 - void clearAllFacesData() async { - var faceId = ""; - var type = "1"; + Future clearAllFacesData() async { + String faceId = ''; + String type = '1'; if (state.isDeletAll == false) { faceId = state.deletKeyID; - type = "0"; + type = '0'; } - var entity = await ApiRepository.to.clearFaceData( + final LoginEntity entity = await ApiRepository.to.clearFaceData( lockId: state.lockId.value, ); if (entity.errorCode!.codeIsSuccessful) { - showToast("重置成功"); + showToast('重置成功'); state.isDeletFaceData = false; getIrisListData(); } @@ -342,18 +344,17 @@ class IrisListLogic extends BaseGetXController { // 监听修改完详情之后刷新列表 late StreamSubscription _teamEvent; void _initRefreshAction() { - _teamEvent = eventBus.on().listen((event) { + _teamEvent = eventBus.on().listen((OtherTypeRefreshListEvent event) { getIrisListData(); }); } @override Future onReady() async { - // TODO: implement onReady super.onReady(); // 获取是否是演示模式 演示模式不获取接口 - var isDemoMode = await Storage.getBool(ifIsDemoModeOrNot); + final bool? isDemoMode = await Storage.getBool(ifIsDemoModeOrNot); if (isDemoMode == false) { // _initReplySubscription(); @@ -365,10 +366,9 @@ class IrisListLogic extends BaseGetXController { @override Future onInit() async { - // TODO: implement onInit super.onInit(); - var isDemoMode = await Storage.getBool(ifIsDemoModeOrNot); + final bool? isDemoMode = await Storage.getBool(ifIsDemoModeOrNot); if (isDemoMode == false) { // senderQueryingFingerprintStatus(); // senderCheckingCardStatus(); @@ -379,10 +379,9 @@ class IrisListLogic extends BaseGetXController { @override Future onClose() async { - // TODO: implement onClose super.onClose(); - var isDemoMode = await Storage.getBool(ifIsDemoModeOrNot); + final bool? isDemoMode = await Storage.getBool(ifIsDemoModeOrNot); if (isDemoMode == false) { // _replySubscription.cancel(); // _teamEvent.cancel(); diff --git a/lib/main/lockDetail/lockDetail/lockDetail_page.dart b/lib/main/lockDetail/lockDetail/lockDetail_page.dart index c4125b58..ad7bc065 100755 --- a/lib/main/lockDetail/lockDetail/lockDetail_page.dart +++ b/lib/main/lockDetail/lockDetail/lockDetail_page.dart @@ -291,7 +291,7 @@ class _LockDetailPageState extends State GestureDetector( onTap: () { ShowTipView().showSureAlertDialog( - "${"锁电量更新时间:".tr}${DateTool().dateToYMDHNString(state.keyInfos.value.electricQuantityDate!.toString())}"); + "${"锁电量更新时间".tr}:${state.keyInfos.value.electricQuantityDate! != 0 ? DateTool().dateToYMDHNString(state.keyInfos.value.electricQuantityDate!.toString()) : "-"}"); }, child: Column( mainAxisSize: MainAxisSize.min, diff --git a/lib/main/lockDetail/lockSet/normallyOpenMode/normallyOpenMode_page.dart b/lib/main/lockDetail/lockSet/normallyOpenMode/normallyOpenMode_page.dart index 1dc3c77d..ed696552 100755 --- a/lib/main/lockDetail/lockSet/normallyOpenMode/normallyOpenMode_page.dart +++ b/lib/main/lockDetail/lockSet/normallyOpenMode/normallyOpenMode_page.dart @@ -57,7 +57,7 @@ class _NormallyOpenModePageState extends State with RouteA mainAxisAlignment: MainAxisAlignment.start, children: [ Expanded( - child: Text('在设置的常开时间内,锁被打开后将一直处于打开的状态,直到被手动关闭'.tr, + child: Text('你可以设置多个常开时间段,在设置的时间段内,锁被打开后一直处于打开的状态。'.tr, style: TextStyle(fontSize: 20.sp), )), ], diff --git a/lib/main/lockDetail/messageWarn/msgNotification/nDaysUnopened/nDaysUnopened_page.dart b/lib/main/lockDetail/messageWarn/msgNotification/nDaysUnopened/nDaysUnopened_page.dart index cd1314d3..3949a419 100755 --- a/lib/main/lockDetail/messageWarn/msgNotification/nDaysUnopened/nDaysUnopened_page.dart +++ b/lib/main/lockDetail/messageWarn/msgNotification/nDaysUnopened/nDaysUnopened_page.dart @@ -88,7 +88,7 @@ class _NDaysUnopenedPageState extends State { child: Column( children: [ CommonItem( - leftTitel: '门未开时间'.tr, + leftTitel: '未开门时间'.tr, rightTitle: '${state.unOpenDoorTime.value}' + '天'.tr, isHaveLine: true, isHaveRightWidget: false, diff --git a/lib/main/lockDetail/palm/addPalm/addPalm_page.dart b/lib/main/lockDetail/palm/addPalm/addPalm_page.dart index 58b9e68b..2756df54 100755 --- a/lib/main/lockDetail/palm/addPalm/addPalm_page.dart +++ b/lib/main/lockDetail/palm/addPalm/addPalm_page.dart @@ -44,23 +44,23 @@ class _AddPalmPageState extends State with RouteAware{ SizedBox( height: 60.h, ), - Container( - padding: EdgeInsets.only(left: 20.w, right: 20.w), - child: Row( - mainAxisAlignment: MainAxisAlignment.start, - children: [ - Expanded( - child: Text( - '添加掌静脉提示'.tr, - textAlign: TextAlign.left, - maxLines: null, - style: - TextStyle(fontSize: 24.sp, fontWeight: FontWeight.w600), - ), - ), - ], - ), - ), + // Container( + // padding: EdgeInsets.only(left: 20.w, right: 20.w), + // child: Row( + // mainAxisAlignment: MainAxisAlignment.start, + // children: [ + // Expanded( + // child: Text( + // '添加掌静脉提示'.tr, + // textAlign: TextAlign.left, + // maxLines: null, + // style: + // TextStyle(fontSize: 24.sp, fontWeight: FontWeight.w600), + // ), + // ), + // ], + // ), + // ), SizedBox( height: 120.h, ), diff --git a/lib/main/lockDetail/palm/addPalmType/addPalmType_logic.dart b/lib/main/lockDetail/palm/addPalmType/addPalmType_logic.dart index beffc114..b5fcbd58 100755 --- a/lib/main/lockDetail/palm/addPalmType/addPalmType_logic.dart +++ b/lib/main/lockDetail/palm/addPalmType/addPalmType_logic.dart @@ -49,7 +49,7 @@ class AddPalmTypeLogic extends BaseGetXController { // } if (int.parse(startDate) >= int.parse(endDate)) { - showToast('失效时间要大于生效时间'.tr); + showToast('失效时间需晚于生效时间'.tr); return; } // AppLog.log("state.timeLimitBeginTime.value:${state.timeLimitBeginTime.value} startDate:$startDate"); diff --git a/lib/main/lockDetail/passwordKey/passwordKeyDetailChangeDate/passwordKeyDetailChangeDate_logic.dart b/lib/main/lockDetail/passwordKey/passwordKeyDetailChangeDate/passwordKeyDetailChangeDate_logic.dart index 18fff70d..23135066 100755 --- a/lib/main/lockDetail/passwordKey/passwordKeyDetailChangeDate/passwordKeyDetailChangeDate_logic.dart +++ b/lib/main/lockDetail/passwordKey/passwordKeyDetailChangeDate/passwordKeyDetailChangeDate_logic.dart @@ -80,12 +80,12 @@ class PasswordKeyDetailChangeDateLogic extends BaseGetXController { final int endTimeTimestamp = DateTool().dateToTimestamp(state.selectFailureDate.value, 1); if (beginTimeTimestamp > endTimeTimestamp || beginTimeTimestamp == endTimeTimestamp) { - showToast('失效时间需大于生效时间'.tr); + showToast('失效时间需晚于生效时间'.tr); return; } if (endTimeTimestamp < DateTime.now().millisecondsSinceEpoch) { - showToast('生效时间需大于当前时间'.tr); + showToast('生效时间需晚于当前时间'.tr); return; } diff --git a/lib/main/lockDetail/passwordKey/passwordKeyDetailChangeDate/passwordKeyDetailChangeDate_page.dart b/lib/main/lockDetail/passwordKey/passwordKeyDetailChangeDate/passwordKeyDetailChangeDate_page.dart index fbe193a4..48ed6cbd 100755 --- a/lib/main/lockDetail/passwordKey/passwordKeyDetailChangeDate/passwordKeyDetailChangeDate_page.dart +++ b/lib/main/lockDetail/passwordKey/passwordKeyDetailChangeDate/passwordKeyDetailChangeDate_page.dart @@ -43,7 +43,7 @@ class _PasswordKeyDetailChangeDatePage extends State= state.endDate) { - logic.showToast('失效时间要大于生效时间'.tr); + logic.showToast('失效时间需晚于生效时间'.tr); return; } diff --git a/lib/main/lockDetail/passwordKey/passwordKey_perpetual/passwordKey_perpetual_logic.dart b/lib/main/lockDetail/passwordKey/passwordKey_perpetual/passwordKey_perpetual_logic.dart index 135d3926..945a09f6 100755 --- a/lib/main/lockDetail/passwordKey/passwordKey_perpetual/passwordKey_perpetual_logic.dart +++ b/lib/main/lockDetail/passwordKey/passwordKey_perpetual/passwordKey_perpetual_logic.dart @@ -76,7 +76,7 @@ class PasswordKeyPerpetualLogic extends BaseGetXController { } if (startDate >= endDate) { - showToast('失效时间要大于生效时间'.tr); + showToast('失效时间需晚于生效时间'.tr); return; } } @@ -102,7 +102,7 @@ class PasswordKeyPerpetualLogic extends BaseGetXController { } if (state.loopStartHours.value >= state.loopEndHours.value) { - showToast('失效时间要大于生效时间'.tr); + showToast('失效时间需晚于生效时间'.tr); return; } if (state.loopModeStr.value == '周末'.tr) { @@ -346,12 +346,12 @@ class PasswordKeyPerpetualLogic extends BaseGetXController { if (state.isPermanent.value == false) { if (startDate < DateTool().dateToTimestamp(DateTool().getNowDateWithType(2), 1)) { - showToast('生效时间需大于当前时间'.tr); + showToast('生效时间需晚于当前时间'.tr); return; } if (endDate <= startDate) { - showToast('失效时间需大于生效时间'.tr); + showToast('失效时间需晚于生效时间'.tr); return; } } else { diff --git a/lib/main/lockDetail/remoteControl/addRemoteControlType/addRemoteControlType_logic.dart b/lib/main/lockDetail/remoteControl/addRemoteControlType/addRemoteControlType_logic.dart index 28f89d64..40fd4680 100755 --- a/lib/main/lockDetail/remoteControl/addRemoteControlType/addRemoteControlType_logic.dart +++ b/lib/main/lockDetail/remoteControl/addRemoteControlType/addRemoteControlType_logic.dart @@ -51,7 +51,7 @@ class AddRemoteControlTypeLoigc extends BaseGetXController{ // } if (int.parse(startDate) >= int.parse(endDate)) { - showToast('失效时间要大于生效时间'.tr); + showToast('失效时间需晚于生效时间'.tr); return; } // AppLog.log("state.timeLimitBeginTime.value:${state.timeLimitBeginTime.value} startDate:$startDate"); diff --git a/lib/main/lockMian/lockMain/xhj/lockMain_xhj_logic.dart b/lib/main/lockMian/lockMain/xhj/lockMain_xhj_logic.dart index 3b5c78fb..ace7e2d9 100755 --- a/lib/main/lockMian/lockMain/xhj/lockMain_xhj_logic.dart +++ b/lib/main/lockMian/lockMain/xhj/lockMain_xhj_logic.dart @@ -25,6 +25,12 @@ class LockMainXHJLogic extends BaseGetXController { Future getUserInfoRequest() async { final MinePersonInfoEntity entity = await ApiRepository.to.getUserInfo(); if (entity.errorCode!.codeIsSuccessful) { + + final String languageCodeAndCountryCode = entity.data!.lang ?? 'zh-CN'; + final List parts = languageCodeAndCountryCode.split('-'); + final Locale locale = Locale(parts[0], parts[1]); + Get.updateLocale(locale); + Storage.setBool(saveIsVip, entity.data!.isVip == 1); if (entity.data!.deviceId != null) { if (entity.data!.deviceId!.isEmpty) { diff --git a/lib/mine/addLock/addLock/addLock_page.dart b/lib/mine/addLock/addLock/addLock_page.dart index 47652c75..d43bdab6 100755 --- a/lib/mine/addLock/addLock/addLock_page.dart +++ b/lib/mine/addLock/addLock/addLock_page.dart @@ -9,7 +9,6 @@ import '../../../app_settings/app_colors.dart'; import '../../../baseWidget.dart'; import '../../../tools/submitBtn.dart'; import '../../../tools/titleAppBar.dart'; -import '../../../translations/trans_lib.dart'; class AddLockPage extends StatefulWidget { const AddLockPage({Key? key}) : super(key: key); @@ -69,15 +68,20 @@ class _AddLockPageState extends State with BaseWidget { SizedBox( height: 120.h, ), - Row( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Text( - '摸亮触摸屏,锁进入可添加状态,点击下一步'.tr, - style: TextStyle( - fontSize: 20.sp, fontWeight: FontWeight.w500), - ), - ], + Container( + width: 1.sw, + padding: EdgeInsets.only(left: 20.w, right: 20.w), + child: Wrap( + alignment: WrapAlignment.center, + children: [ + Text( + '摸亮触摸屏,锁进入可添加状态,点击下一步'.tr, + textAlign: TextAlign.center, + style: TextStyle( + fontSize: 20.sp,fontWeight: FontWeight.w500), + ), + ], + ), ), SizedBox( height: 120.h, diff --git a/lib/mine/gateway/addGateway/gatewayConfigurationWifi/gatewayConfigurationWifi_page.dart b/lib/mine/gateway/addGateway/gatewayConfigurationWifi/gatewayConfigurationWifi_page.dart index 2badbbe6..bcc6b464 100755 --- a/lib/mine/gateway/addGateway/gatewayConfigurationWifi/gatewayConfigurationWifi_page.dart +++ b/lib/mine/gateway/addGateway/gatewayConfigurationWifi/gatewayConfigurationWifi_page.dart @@ -89,20 +89,20 @@ class _GatewayConfigurationWifiPageState extends State CommonItem( diff --git a/lib/mine/mine/starLockMine_logic.dart b/lib/mine/mine/starLockMine_logic.dart index c1d1bdf2..9e69a978 100755 --- a/lib/mine/mine/starLockMine_logic.dart +++ b/lib/mine/mine/starLockMine_logic.dart @@ -28,7 +28,6 @@ class StarLockMineLogic extends BaseGetXController { if (entity.errorCode!.codeIsSuccessful) {} } - /// 刷新电子钥匙列表 StreamSubscription? _mineInfoChangeRefreshUIEvent; void _mineInfoChangeRefreshUIAction() { // 蓝牙协议通知传输跟蓝牙之外的数据传输类不一样 eventBus diff --git a/lib/mine/mineMultiLanguage/mineMultiLanguage_logic.dart b/lib/mine/mineMultiLanguage/mineMultiLanguage_logic.dart index 6d011497..d5b1ab43 100755 --- a/lib/mine/mineMultiLanguage/mineMultiLanguage_logic.dart +++ b/lib/mine/mineMultiLanguage/mineMultiLanguage_logic.dart @@ -1,11 +1,25 @@ import 'dart:ui'; import 'package:get/get.dart'; +import 'package:star_lock/tools/baseGetXController.dart'; +import '../../main/lockDetail/passwordKey/passwordKeyList/passwordKeyListEntity.dart'; +import '../../network/api_repository.dart'; +import '../../tools/eventBusEventManage.dart'; import 'mineMultiLanguage_state.dart'; class MineMultiLanguageLogic extends GetxController { final MineMultiLanguageState state = MineMultiLanguageState(); + //更新个人信息-头像 + Future updateUserLangInfo(Locale l, String lanTypeTitle) async { + final String lang = l.toLanguageTag(); + final PasswordKeyListEntity entity = await ApiRepository.to.updateUserLangInfo(lang: lang); + if (entity.errorCode!.codeIsSuccessful) { + eventBus.fire(ChangeLanguageBlockLastLanguageEvent(lanTypeTitle)); + changeLanguage(l); + } + } + void changeLanguage(Locale l) { if(l == Get.locale)return; Get.updateLocale(l); diff --git a/lib/mine/mineMultiLanguage/mineMultiLanguage_page.dart b/lib/mine/mineMultiLanguage/mineMultiLanguage_page.dart index 4906076f..4fb611b1 100755 --- a/lib/mine/mineMultiLanguage/mineMultiLanguage_page.dart +++ b/lib/mine/mineMultiLanguage/mineMultiLanguage_page.dart @@ -71,8 +71,8 @@ class _MineMultiLanguagePageState extends State { ) : Container()), action: () { - logic.changeLanguage(e); - eventBus.fire(ChangeLanguageBlockLastLanguageEvent(lanType.lanTitle)); + logic.updateUserLangInfo(e, lanType.lanTitle); + // eventBus.fire(ChangeLanguageBlockLastLanguageEvent(lanType.lanTitle)); }), ); } diff --git a/lib/mine/mineMultiLanguage/mineMultiLanguage_state.dart b/lib/mine/mineMultiLanguage/mineMultiLanguage_state.dart index b20d4dea..57153a9b 100755 --- a/lib/mine/mineMultiLanguage/mineMultiLanguage_state.dart +++ b/lib/mine/mineMultiLanguage/mineMultiLanguage_state.dart @@ -8,16 +8,16 @@ import '../../translations/app_dept.dart'; class MineMultiLanguageState { + MineMultiLanguageState() { + resetLan(); + } + List get languages { return appDept.deptSupportedLocales; } var currentLanguageType = ExtensionLanguageType.fromLanguageCode(Get.locale!.languageCode).obs; - MineMultiLanguageState() { - resetLan(); - } - void resetLan() { currentLanguageType.value = ExtensionLanguageType.fromLanguageCode(Get.locale!.languageCode); AppLog.log("currentLanguageType.value:${currentLanguageType.value}"); diff --git a/lib/mine/minePersonInfo/minePersonInfoPage/minePersonInfo_entity.dart b/lib/mine/minePersonInfo/minePersonInfoPage/minePersonInfo_entity.dart index 58d253d6..83a07e2c 100755 --- a/lib/mine/minePersonInfo/minePersonInfoPage/minePersonInfo_entity.dart +++ b/lib/mine/minePersonInfo/minePersonInfoPage/minePersonInfo_entity.dart @@ -39,6 +39,7 @@ class MinePersonInfoData { String? countryName; int? isVip; String? deviceId; + String? lang; MinePersonInfoData( {this.mobile, @@ -51,7 +52,8 @@ class MinePersonInfoData { this.email, this.countryName, this.isVip, - this.deviceId}); + this.deviceId, + this.lang}); MinePersonInfoData.fromJson(Map json) { mobile = json['mobile']; @@ -65,6 +67,7 @@ class MinePersonInfoData { countryName = json['countryName']; isVip = json['isVip']; deviceId = json['deviceId']; + lang = json['lang']; } Map toJson() { @@ -80,6 +83,7 @@ class MinePersonInfoData { data['countryName'] = countryName; data['isVip'] = isVip; data['deviceId'] = deviceId; + data['lang'] = lang; return data; } } diff --git a/lib/mine/mineSet/authorizedAdministrator/addAuthorizedAdministrator/addAuthorizedAdministrator_logic.dart b/lib/mine/mineSet/authorizedAdministrator/addAuthorizedAdministrator/addAuthorizedAdministrator_logic.dart index 4f2e7a6f..fc14296c 100755 --- a/lib/mine/mineSet/authorizedAdministrator/addAuthorizedAdministrator/addAuthorizedAdministrator_logic.dart +++ b/lib/mine/mineSet/authorizedAdministrator/addAuthorizedAdministrator/addAuthorizedAdministrator_logic.dart @@ -51,7 +51,7 @@ class AddAuthorizedAdministratorLogic extends BaseGetXController { } if (int.parse(startDate) >= int.parse(endDate)) { - showToast('失效时间要大于生效时间'.tr); + showToast('失效时间需晚于生效时间'.tr); return; } } diff --git a/lib/mine/mineSet/authorizedAdministrator/administratorChangeDate/adminDetailChangeDate_logic.dart b/lib/mine/mineSet/authorizedAdministrator/administratorChangeDate/adminDetailChangeDate_logic.dart index dd5c076b..4d58d2e4 100644 --- a/lib/mine/mineSet/authorizedAdministrator/administratorChangeDate/adminDetailChangeDate_logic.dart +++ b/lib/mine/mineSet/authorizedAdministrator/administratorChangeDate/adminDetailChangeDate_logic.dart @@ -18,12 +18,12 @@ class AdminDetailChangeDateLogic extends BaseGetXController { DateTool().dateToTimestamp(state.endTime.value, 1); if (beginTimeTimestamp > endTimeTimestamp || beginTimeTimestamp == endTimeTimestamp) { - showToast('失效时间需大于生效时间'.tr); + showToast('失效时间需晚于生效时间'.tr); return; } if (endTimeTimestamp < DateTime.now().millisecondsSinceEpoch) { - showToast('生效时间需大于当前时间'.tr); + showToast('生效时间需晚于当前时间'.tr); return; } diff --git a/lib/mine/mineSet/authorizedAdministrator/administratorDetails/administratorDetails_logic.dart b/lib/mine/mineSet/authorizedAdministrator/administratorDetails/administratorDetails_logic.dart index 5b9c293d..1f6edb0b 100755 --- a/lib/mine/mineSet/authorizedAdministrator/administratorDetails/administratorDetails_logic.dart +++ b/lib/mine/mineSet/authorizedAdministrator/administratorDetails/administratorDetails_logic.dart @@ -81,7 +81,7 @@ class AdministratorDetailsLogic extends BaseGetXController { } } - //取消冻结 + //解除冻结 Future cancelFreeze(int includeUnderlings) async { final ElectronicKeyListEntity entity = await ApiRepository.to.cancelFreeze( keyId: state.itemData.value.keyId.toString(), @@ -111,7 +111,7 @@ class AdministratorDetailsLogic extends BaseGetXController { Future openModalBottomSheet() async { final List textList = [ - if (state.itemData.value.keyStatus == 110405) '取消冻结'.tr else '冻结'.tr, + if (state.itemData.value.keyStatus == 110405) '解除冻结'.tr else '冻结'.tr, '取消授权'.tr ]; @@ -127,7 +127,7 @@ class AdministratorDetailsLogic extends BaseGetXController { final int index = value; if (index == 0) { if (state.itemData.value.keyStatus == 110405) { - // 取消冻结 + // 解除冻结 ShowTipView().showDeleteAdministratorIsHaveAllDataDialog( '同时解冻其发送的钥匙'.tr, (isAllData) { cancelFreeze(isAllData ? 1 : 0); diff --git a/lib/mine/mineSet/lockUserManage/expireLockList/expireKeyChangeDate/expireKeyChangeDate_page.dart b/lib/mine/mineSet/lockUserManage/expireLockList/expireKeyChangeDate/expireKeyChangeDate_page.dart index 73ea6097..6cf44c01 100644 --- a/lib/mine/mineSet/lockUserManage/expireLockList/expireKeyChangeDate/expireKeyChangeDate_page.dart +++ b/lib/mine/mineSet/lockUserManage/expireLockList/expireKeyChangeDate/expireKeyChangeDate_page.dart @@ -49,13 +49,13 @@ class _ExpireKeyChangeDatePageState extends State with state.endTimeTimestamp.value || state.beginTimeTimestamp.value == state.endTimeTimestamp.value) { - logic.showToast('失效时间需大于生效时间'.tr); + logic.showToast('失效时间需晚于生效时间'.tr); return; } if (state.endTimeTimestamp.value < DateTime.now().millisecondsSinceEpoch) { - logic.showToast('生效时间需大于当前时间'.tr); + logic.showToast('生效时间需晚于当前时间'.tr); return; } switch (state.pushType.value) { diff --git a/lib/mine/mineSet/lockUserManage/expireLockList/expireKeyChangeValidityDate/expireKeyChangeValidityDate_page.dart b/lib/mine/mineSet/lockUserManage/expireLockList/expireKeyChangeValidityDate/expireKeyChangeValidityDate_page.dart index 257231e8..5a02256a 100644 --- a/lib/mine/mineSet/lockUserManage/expireLockList/expireKeyChangeValidityDate/expireKeyChangeValidityDate_page.dart +++ b/lib/mine/mineSet/lockUserManage/expireLockList/expireKeyChangeValidityDate/expireKeyChangeValidityDate_page.dart @@ -58,7 +58,7 @@ class _ExpireKeyChangeValidityDatePageState extends State state.endDateTimestamp.value) { - logic.showToast('失效日期要大于生效日期'.tr); + logic.showToast('失效日期需晚于生效日期'.tr); return; } @@ -69,7 +69,7 @@ class _ExpireKeyChangeValidityDatePageState extends State= state.endTimeTimestamp.value) { - logic.showToast('失效时间要大于生效时间'.tr); + logic.showToast('失效时间需晚于生效时间'.tr); return; } diff --git a/lib/mine/mineSet/mineSet/mineSet_logic.dart b/lib/mine/mineSet/mineSet/mineSet_logic.dart index 9e389d27..25b6d41e 100755 --- a/lib/mine/mineSet/mineSet/mineSet_logic.dart +++ b/lib/mine/mineSet/mineSet/mineSet_logic.dart @@ -1,4 +1,6 @@ + import 'dart:async'; + import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:star_lock/appRouters.dart'; @@ -7,15 +9,17 @@ import 'package:star_lock/mine/mineSet/lockUserManage/expireLockList/expireElect import 'package:star_lock/mine/mineSet/mineSet/mineSet_state.dart'; import 'package:star_lock/mine/mineSet/mineSet/userSettingInfoEntity.dart'; import 'package:star_lock/mine/mineSet/mineSet/weChatQRCodeEntity.dart'; +import 'package:star_lock/tools/push/xs_jPhush.dart'; import 'package:star_lock/tools/showCupertinoAlertView.dart'; import 'package:star_lock/tools/storage.dart'; -import 'package:star_lock/tools/push/xs_jPhush.dart'; import 'package:star_lock/versionUndate/versionUndate_entity.dart'; + import '../../../../network/api_repository.dart'; import '../../../../tools/baseGetXController.dart'; import '../../../blue/blue_manage.dart'; import '../../../talk/udp/udp_help.dart'; import '../../../tools/eventBusEventManage.dart'; +import '../../../tools/store_service.dart'; class MineSetLogic extends BaseGetXController { final MineSetState state = MineSetState(); @@ -106,6 +110,10 @@ class MineSetLogic extends BaseGetXController { if (entity.errorCode!.codeIsSuccessful) { UdpHelp().closeUDP(); logOut(); + + StoreService.to.saveLanguageCode(''); + Get.updateLocale(Get.deviceLocale!); + BlueManage().disconnect(); XSJPushProvider().initLocalNotification(isCancelLocalPush: true); Get.offNamedUntil(Routers.starLockLoginPage, (route) => false); diff --git a/lib/mine/valueAddedServices/valueAddedServicesHighFunction/valueAddedServicesHighFunction_page.dart b/lib/mine/valueAddedServices/valueAddedServicesHighFunction/valueAddedServicesHighFunction_page.dart index e847d0f7..aa2f8ef5 100755 --- a/lib/mine/valueAddedServices/valueAddedServicesHighFunction/valueAddedServicesHighFunction_page.dart +++ b/lib/mine/valueAddedServices/valueAddedServicesHighFunction/valueAddedServicesHighFunction_page.dart @@ -1,4 +1,6 @@ +import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; +import 'package:flutter/widgets.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:get/get.dart'; import 'package:star_lock/common/XSConstantMacro/XSConstantMacro.dart'; @@ -81,9 +83,10 @@ class _ValueAddedServicesHighFunctionPageState // crossAxisAlignment: CrossAxisAlignment.center, children: [ Column( - mainAxisAlignment: MainAxisAlignment.center, + mainAxisAlignment: MainAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start, children: [ + SizedBox(height: 20.h), Text( '当前状态:已开通'.tr, style: TextStyle( @@ -113,8 +116,9 @@ class _ValueAddedServicesHighFunctionPageState }); }, child: Container( - width: 110.w, - height: 50.h, + // width: 110.w, + // height: 50.h, + padding: EdgeInsets.only(left: 20.w, right: 20.w, top: 8.h, bottom: 8.h), decoration: BoxDecoration( color: const Color(0xFFBDCDDF), borderRadius: BorderRadius.all(Radius.circular(30.h)), @@ -135,8 +139,9 @@ class _ValueAddedServicesHighFunctionPageState arguments: UseRecordListArg.vip); }, child: Container( - width: 90.w, - height: 50.h, + // width: 90.w, + // height: 50.h, + padding: EdgeInsets.only(left: 15.w, right: 10.w, top: 8.h, bottom: 8.h), decoration: BoxDecoration( color: const Color(0xFFBDCDDF), borderRadius: BorderRadius.only( @@ -273,14 +278,15 @@ class _ValueAddedServicesHighFunctionPageState SizedBox( height: 10.h, ), - Column( - children: [ - Text( - title, - style: TextStyle(fontSize: 22.sp), - textAlign: TextAlign.center, - ), - ], + Expanded( + child: Text( + title, + // '啊上级领导发哈老师讲课代发哈金卡拉萨代发户籍卡三打哈发卡机啊哈受打击开发', + maxLines: 2, + overflow: TextOverflow.ellipsis, + style: TextStyle(fontSize: 22.sp), + textAlign: TextAlign.center, + ), ), ], ), diff --git a/lib/network/api.dart b/lib/network/api.dart index 3f36dc8a..a1cf2b1a 100755 --- a/lib/network/api.dart +++ b/lib/network/api.dart @@ -41,7 +41,7 @@ abstract class Api { final String checkPasswordURL = '/user/checkPassword'; // 检查账户密码 final String setAuthorizeURL = '/key/authorize'; //设置授权管理员 final String cancelAuthorizeURL = '/key/unauthorize'; //取消授权管理员 - final String cancelFreezeURL = '/key/unfreeze'; //取消冻结 + final String cancelFreezeURL = '/key/unfreeze'; //解除冻结 final String freezeKeyURL = '/key/freeze'; //冻结 final String passwordKeyGetURL = '/keyboardPwd/get'; //获取密码 diff --git a/lib/network/api_provider.dart b/lib/network/api_provider.dart index 0c41a23b..a7429061 100755 --- a/lib/network/api_provider.dart +++ b/lib/network/api_provider.dart @@ -684,7 +684,7 @@ class ApiProvider extends BaseProvider { 'includeUnderlings': includeUnderlings, })); - // 取消冻结 + // 解除冻结 Future cancelFreeze(String keyId, int includeUnderlings) => post( cancelFreezeURL.toUrl, jsonEncode({ @@ -1932,6 +1932,13 @@ class ApiProvider extends BaseProvider { 'headUrl': headUrl, })); + //更新个人信息-国际化 + Future updateUserLangInfo(String lang) => post( + updateUserInfoURL.toUrl, + jsonEncode({ + 'lang': lang, + })); + //修改绑定手机号 Future bindPhone(String countryCode, String account, String verificationCode, String unbindToken) => diff --git a/lib/network/api_repository.dart b/lib/network/api_repository.dart index 454e7fb8..25240409 100755 --- a/lib/network/api_repository.dart +++ b/lib/network/api_repository.dart @@ -709,7 +709,7 @@ class ApiRepository { return ElectronicKeyListEntity.fromJson(res.body); } - //取消冻结 + //解除冻结 Future cancelFreeze({ required String keyId, required int includeUnderlings, @@ -1977,6 +1977,13 @@ class ApiRepository { return PasswordKeyListEntity.fromJson(res.body); } + //更新个人信息-国际化 + Future updateUserLangInfo( + {required String lang}) async { + final res = await apiProvider.updateUserLangInfo(lang); + return PasswordKeyListEntity.fromJson(res.body); + } + //修改绑定手机号 Future bindPhone(String countryCode, String account, String verificationCode, String unbindToken) async { diff --git a/lib/network/request_interceptor.dart b/lib/network/request_interceptor.dart index eee3dc3d..fd78887d 100755 --- a/lib/network/request_interceptor.dart +++ b/lib/network/request_interceptor.dart @@ -1,23 +1,26 @@ import 'dart:async'; import 'dart:convert'; +import 'dart:ui'; import 'package:get/get.dart'; import 'package:get/get_connect/http/src/request/request.dart'; import 'package:star_lock/login/login/entity/LoginData.dart'; import '../tools/platform_info_services.dart'; import '../tools/storage.dart'; +import '../tools/store_service.dart'; +import '../translations/app_dept.dart'; //公共获取UA String getUserAgent() { //赋值变量方便调试 - String ua = + final String ua = 'StarLock/${PlatformInfoService.to?.info.version}/${PlatformInfoService.to?.info.buildNumber}/${GetPlatform.isAndroid ? 'Android' : 'iOS'}'; return ua; } FutureOr requestInterceptor(Request request) async { request.headers['User-Agent'] = getUserAgent(); - request.headers['Accept-Language'] = 'zh-CN'; + request.headers['Accept-Language'] = getLanguageCode(); // StoreService.to.getLanguageCode() // request.headers['Content-Type'] = 'application/json'; // request.headers['token'] = StoreService.to.userToken!; String? xToken = ''; @@ -28,3 +31,14 @@ FutureOr requestInterceptor(Request request) async { request.headers['Authorization'] = "Bearer ${xToken ?? ''}"; return request; } + + +String getLanguageCode() { + final Locale locale = StoreService.to.getLanguageCode()!.isNotEmpty + ? appDept.deptSupportedLocales + .where((Locale element) => + element.languageCode == StoreService.to.getLanguageCode()) + .first + : const Locale('zh', 'CN');// Get.deviceLocale; + return locale.toLanguageTag(); +} \ No newline at end of file diff --git a/lib/network/request_interceptor_log.dart b/lib/network/request_interceptor_log.dart index cfd24ef5..bae49843 100755 --- a/lib/network/request_interceptor_log.dart +++ b/lib/network/request_interceptor_log.dart @@ -5,6 +5,6 @@ import 'package:star_lock/app_settings/app_settings.dart'; FutureOr requestLogInterceptor(Request request) async { // AppLog.log('GET HTTP REQUEST \n${request.url} \n${request.headers} ${request.toString()} '); - // AppLog.log(request.headers.toString()); + // AppLog.log('请求头:${request.headers.toString()}'); return request; } diff --git a/lib/talk/udp/udp_reciverData.dart b/lib/talk/udp/udp_reciverData.dart index ba2b0a8a..98e3ff8f 100755 --- a/lib/talk/udp/udp_reciverData.dart +++ b/lib/talk/udp/udp_reciverData.dart @@ -35,7 +35,7 @@ class CommandUDPReciverManager { // AppLog.log("心跳包反馈 在线状态"); } else if (data[7] == 3) { // [Toast.show(msg: "您已在其他设备登录")]; - EasyLoading.showToast('您已在其他设备登录'.tr, duration: 2000.milliseconds); + EasyLoading.showToast('您的账号在异地登录,如非本人,请尽快修改密码'.tr, duration: 2000.milliseconds); } } else if (data[6] == 150) { // if( [Pub getApp].isBack){ diff --git a/lib/tools/seletKeyCyclicDate/seletKeyCyclicDate_logic.dart b/lib/tools/seletKeyCyclicDate/seletKeyCyclicDate_logic.dart index 5bc8ed09..b4c10137 100755 --- a/lib/tools/seletKeyCyclicDate/seletKeyCyclicDate_logic.dart +++ b/lib/tools/seletKeyCyclicDate/seletKeyCyclicDate_logic.dart @@ -14,12 +14,12 @@ class SeletKeyCyclicDateLogic extends BaseGetXController { final String endTimeTimestamp = DateTool().dateToTimestamp(state.endTime.value, 0).toString(); if (int.parse(starDateTimestamp) > int.parse(endDateTimestamp)) { - showToast('失效日期要大于生效日期'.tr); + showToast('失效日期需晚于生效日期'.tr); return; } if (int.parse(starTimeTimestamp) >= int.parse(endTimeTimestamp)) { - showToast('失效时间要大于生效时间'.tr); + showToast('失效时间需晚于生效时间'.tr); return; } final Map resultMap = {}; diff --git a/lib/tools/store_service.dart b/lib/tools/store_service.dart index 9f98430a..938c0222 100755 --- a/lib/tools/store_service.dart +++ b/lib/tools/store_service.dart @@ -23,9 +23,9 @@ class StoreService extends GetxService { final String _deviceUUID = 'DEVICE_ID'; final String _languageCode = 'LANGUAGE_CODE'; - String? getDeviceId() => hasData(_deviceUUID) ? read(_deviceUUID).toString(): ""; + String? getDeviceId() => hasData(_deviceUUID) ? read(_deviceUUID).toString(): ''; Future saveDeviceId(String uuid) => save(_deviceUUID, uuid); - String? getLanguageCode() => hasData(_languageCode) ? read(_languageCode).toString(): ""; + String? getLanguageCode() => hasData(_languageCode) ? read(_languageCode).toString(): ''; Future saveLanguageCode(String code) => save(_languageCode, code); } diff --git a/pubspec.yaml b/pubspec.yaml index b7e7a934..6e20ce35 100755 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -87,7 +87,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev # 1.0.75+2024081001:锁定版本,上架商城 # 1.0.76+2024081201:锁定版本,上架商城--最新版本 -version: 1.0.76+2024081201 +version: 1.0.76+2024081601 environment: sdk: '>=2.12.0 <3.0.0'